From 256592bf803e851aa7fc953e08a6e9e58d970f8c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Beno=C3=AEt=20Pin?= <pin@cri.ensmp.fr> Date: Tue, 16 Aug 2011 09:50:31 +0200 Subject: [PATCH 1/1] Importation initiale du code de CKEditor 3.6.1. --- .htaccess | 24 + CHANGES.html | 1367 +++++++ INSTALL.html | 92 + LICENSE.html | 1327 +++++++ _samples/adobeair/application.xml | 32 + _samples/adobeair/run.bat | 9 + _samples/adobeair/run.sh | 8 + _samples/adobeair/sample.html | 45 + _samples/ajax.html | 98 + _samples/api.html | 192 + _samples/api_dialog.html | 198 + _samples/api_dialog/my_dialog.js | 28 + _samples/asp/advanced.asp | 105 + _samples/asp/events.asp | 136 + _samples/asp/index.html | 103 + _samples/asp/replace.asp | 72 + _samples/asp/replaceall.asp | 77 + _samples/asp/sample_posteddata.asp | 46 + _samples/asp/standalone.asp | 72 + _samples/assets/_posteddata.php | 59 + _samples/assets/output_for_flash.fla | Bin 0 -> 85504 bytes _samples/assets/output_for_flash.swf | Bin 0 -> 15571 bytes _samples/assets/output_xhtml.css | 204 + _samples/assets/parsesample.css | 70 + _samples/assets/swfobject.js | 18 + _samples/autogrow.html | 107 + _samples/bbcode.html | 125 + _samples/devtools.html | 94 + _samples/divreplace.html | 154 + _samples/enterkey.html | 115 + _samples/fullpage.html | 82 + _samples/index.html | 116 + _samples/jqueryadapter.html | 99 + _samples/output_for_flash.html | 275 ++ _samples/output_html.html | 285 ++ _samples/output_xhtml.html | 177 + _samples/php/advanced.php | 120 + _samples/php/events.php | 153 + _samples/php/index.html | 47 + _samples/php/replace.php | 87 + _samples/php/replaceall.php | 88 + _samples/php/standalone.php | 83 + _samples/placeholder.html | 81 + _samples/readonly.html | 91 + _samples/replacebyclass.html | 64 + _samples/replacebycode.html | 97 + _samples/sample.css | 163 + _samples/sample.js | 65 + _samples/sample_posteddata.php | 21 + _samples/sharedspaces.html | 153 + _samples/skins.html | 110 + _samples/stylesheetparser.html | 93 + _samples/tableresize.html | 115 + _samples/ui_color.html | 129 + _samples/ui_languages.html | 134 + _source/adapters/jquery.js | 306 ++ _source/core/_bootstrap.js | 87 + _source/core/ckeditor.js | 141 + _source/core/ckeditor_base.js | 227 ++ _source/core/ckeditor_basic.js | 238 ++ _source/core/command.js | 209 ++ _source/core/commanddefinition.js | 129 + _source/core/config.js | 431 +++ _source/core/dataprocessor.js | 65 + _source/core/dom.js | 20 + _source/core/dom/comment.js | 32 + _source/core/dom/document.js | 251 ++ _source/core/dom/documentfragment.js | 49 + _source/core/dom/domobject.js | 258 ++ _source/core/dom/element.js | 1681 +++++++++ _source/core/dom/elementpath.js | 119 + _source/core/dom/event.js | 145 + _source/core/dom/node.js | 695 ++++ _source/core/dom/nodelist.js | 26 + _source/core/dom/range.js | 2032 ++++++++++ _source/core/dom/rangelist.js | 213 ++ _source/core/dom/text.js | 128 + _source/core/dom/walker.js | 462 +++ _source/core/dom/window.js | 96 + _source/core/dtd.js | 266 ++ _source/core/editor.js | 1059 ++++++ _source/core/editor_basic.js | 186 + _source/core/env.js | 291 ++ _source/core/event.js | 342 ++ _source/core/eventInfo.js | 120 + _source/core/focusmanager.js | 152 + _source/core/htmlparser.js | 224 ++ _source/core/htmlparser/basicwriter.js | 145 + _source/core/htmlparser/cdata.js | 43 + _source/core/htmlparser/comment.js | 60 + _source/core/htmlparser/element.js | 308 ++ _source/core/htmlparser/filter.js | 288 ++ _source/core/htmlparser/fragment.js | 497 +++ _source/core/htmlparser/text.js | 55 + _source/core/lang.js | 157 + _source/core/loader.js | 240 ++ _source/core/plugindefinition.js | 83 + _source/core/plugins.js | 103 + _source/core/resourcemanager.js | 238 ++ _source/core/scriptloader.js | 180 + _source/core/skins.js | 184 + _source/core/themes.js | 19 + _source/core/tools.js | 763 ++++ _source/core/ui.js | 128 + _source/lang/_languages.js | 84 + _source/lang/_translationstatus.txt | 61 + _source/lang/af.js | 812 ++++ _source/lang/ar.js | 812 ++++ _source/lang/bg.js | 812 ++++ _source/lang/bn.js | 812 ++++ _source/lang/bs.js | 812 ++++ _source/lang/ca.js | 812 ++++ _source/lang/cs.js | 812 ++++ _source/lang/cy.js | 812 ++++ _source/lang/da.js | 812 ++++ _source/lang/de.js | 812 ++++ _source/lang/el.js | 812 ++++ _source/lang/en-au.js | 812 ++++ _source/lang/en-ca.js | 812 ++++ _source/lang/en-gb.js | 812 ++++ _source/lang/en.js | 812 ++++ _source/lang/eo.js | 812 ++++ _source/lang/es.js | 812 ++++ _source/lang/et.js | 812 ++++ _source/lang/eu.js | 812 ++++ _source/lang/fa.js | 812 ++++ _source/lang/fi.js | 812 ++++ _source/lang/fo.js | 812 ++++ _source/lang/fr-ca.js | 812 ++++ _source/lang/fr.js | 812 ++++ _source/lang/gl.js | 812 ++++ _source/lang/gu.js | 812 ++++ _source/lang/he.js | 812 ++++ _source/lang/hi.js | 812 ++++ _source/lang/hr.js | 812 ++++ _source/lang/hu.js | 812 ++++ _source/lang/is.js | 812 ++++ _source/lang/it.js | 812 ++++ _source/lang/ja.js | 812 ++++ _source/lang/ka.js | 812 ++++ _source/lang/km.js | 812 ++++ _source/lang/ko.js | 812 ++++ _source/lang/lt.js | 812 ++++ _source/lang/lv.js | 812 ++++ _source/lang/mn.js | 812 ++++ _source/lang/ms.js | 812 ++++ _source/lang/nb.js | 812 ++++ _source/lang/nl.js | 812 ++++ _source/lang/no.js | 812 ++++ _source/lang/pl.js | 812 ++++ _source/lang/pt-br.js | 811 ++++ _source/lang/pt.js | 812 ++++ _source/lang/ro.js | 812 ++++ _source/lang/ru.js | 812 ++++ _source/lang/sk.js | 812 ++++ _source/lang/sl.js | 812 ++++ _source/lang/sr-latn.js | 812 ++++ _source/lang/sr.js | 812 ++++ _source/lang/sv.js | 811 ++++ _source/lang/th.js | 812 ++++ _source/lang/tr.js | 811 ++++ _source/lang/uk.js | 812 ++++ _source/lang/vi.js | 812 ++++ _source/lang/zh-cn.js | 812 ++++ _source/lang/zh.js | 812 ++++ _source/plugins/a11yhelp/dialogs/a11yhelp.js | 222 ++ _source/plugins/a11yhelp/lang/en.js | 108 + _source/plugins/a11yhelp/lang/he.js | 216 ++ _source/plugins/a11yhelp/plugin.js | 47 + _source/plugins/about/dialogs/about.js | 76 + .../plugins/about/dialogs/logo_ckeditor.png | Bin 0 -> 2759 bytes _source/plugins/about/plugin.js | 24 + _source/plugins/adobeair/plugin.js | 228 ++ _source/plugins/ajax/plugin.js | 152 + _source/plugins/autogrow/plugin.js | 88 + _source/plugins/basicstyles/plugin.js | 101 + _source/plugins/bbcode/plugin.js | 931 +++++ _source/plugins/bidi/plugin.js | 334 ++ _source/plugins/blockquote/plugin.js | 305 ++ _source/plugins/button/plugin.js | 290 ++ _source/plugins/clipboard/dialogs/paste.js | 223 ++ _source/plugins/clipboard/plugin.js | 453 +++ _source/plugins/colorbutton/plugin.js | 294 ++ .../colordialog/dialogs/colordialog.js | 340 ++ _source/plugins/colordialog/plugin.js | 15 + _source/plugins/contextmenu/plugin.js | 177 + _source/plugins/devtools/lang/en.js | 16 + _source/plugins/devtools/plugin.js | 173 + _source/plugins/dialog/dialogDefinition.js | 1166 ++++++ _source/plugins/dialog/plugin.js | 3289 +++++++++++++++++ _source/plugins/dialogadvtab/plugin.js | 207 ++ _source/plugins/dialogui/plugin.js | 1541 ++++++++ _source/plugins/div/dialogs/div.js | 535 +++ _source/plugins/div/plugin.js | 121 + _source/plugins/docprops/dialogs/docprops.js | 686 ++++ _source/plugins/docprops/plugin.js | 22 + _source/plugins/domiterator/plugin.js | 361 ++ _source/plugins/editingblock/plugin.js | 275 ++ _source/plugins/elementspath/plugin.js | 218 ++ _source/plugins/enterkey/plugin.js | 413 +++ _source/plugins/entities/plugin.js | 250 ++ _source/plugins/fakeobjects/plugin.js | 175 + _source/plugins/filebrowser/plugin.js | 524 +++ _source/plugins/find/dialogs/find.js | 903 +++++ _source/plugins/find/plugin.js | 47 + _source/plugins/flash/dialogs/flash.js | 673 ++++ _source/plugins/flash/images/placeholder.png | Bin 0 -> 256 bytes _source/plugins/flash/plugin.js | 154 + _source/plugins/floatpanel/plugin.js | 428 +++ _source/plugins/font/plugin.js | 234 ++ _source/plugins/format/plugin.js | 197 + _source/plugins/forms/dialogs/button.js | 118 + _source/plugins/forms/dialogs/checkbox.js | 153 + _source/plugins/forms/dialogs/form.js | 177 + _source/plugins/forms/dialogs/hiddenfield.js | 100 + _source/plugins/forms/dialogs/radio.js | 135 + _source/plugins/forms/dialogs/select.js | 558 +++ _source/plugins/forms/dialogs/textarea.js | 114 + _source/plugins/forms/dialogs/textfield.js | 199 + _source/plugins/forms/images/hiddenfield.gif | Bin 0 -> 105 bytes _source/plugins/forms/plugin.js | 288 ++ _source/plugins/horizontalrule/plugin.js | 48 + _source/plugins/htmldataprocessor/plugin.js | 595 +++ _source/plugins/htmlwriter/plugin.js | 319 ++ _source/plugins/iframe/dialogs/iframe.js | 229 ++ _source/plugins/iframe/images/placeholder.png | Bin 0 -> 449 bytes _source/plugins/iframe/plugin.js | 87 + _source/plugins/iframedialog/plugin.js | 188 + _source/plugins/image/dialogs/image.js | 1406 +++++++ _source/plugins/image/plugin.js | 81 + _source/plugins/indent/plugin.js | 461 +++ _source/plugins/justify/plugin.js | 253 ++ _source/plugins/keystrokes/plugin.js | 225 ++ _source/plugins/link/dialogs/anchor.js | 144 + _source/plugins/link/dialogs/link.js | 1424 +++++++ _source/plugins/link/images/anchor.gif | Bin 0 -> 184 bytes _source/plugins/link/plugin.js | 374 ++ _source/plugins/list/plugin.js | 734 ++++ _source/plugins/listblock/plugin.js | 268 ++ .../plugins/liststyle/dialogs/liststyle.js | 225 ++ _source/plugins/liststyle/plugin.js | 66 + _source/plugins/maximize/plugin.js | 352 ++ _source/plugins/menu/plugin.js | 541 +++ _source/plugins/menubutton/plugin.js | 98 + _source/plugins/newpage/plugin.js | 54 + .../plugins/pagebreak/images/pagebreak.gif | Bin 0 -> 54 bytes _source/plugins/pagebreak/plugin.js | 164 + _source/plugins/panel/plugin.js | 403 ++ _source/plugins/panelbutton/plugin.js | 144 + .../plugins/pastefromword/filter/default.js | 1367 +++++++ _source/plugins/pastefromword/plugin.js | 141 + .../plugins/pastetext/dialogs/pastetext.js | 67 + _source/plugins/pastetext/plugin.js | 98 + .../placeholder/dialogs/placeholder.js | 71 + _source/plugins/placeholder/lang/en.js | 16 + _source/plugins/placeholder/lang/he.js | 16 + _source/plugins/placeholder/placeholder.gif | Bin 0 -> 96 bytes _source/plugins/placeholder/plugin.js | 171 + _source/plugins/popup/plugin.js | 64 + _source/plugins/preview/plugin.js | 109 + _source/plugins/print/plugin.js | 42 + _source/plugins/removeformat/plugin.js | 185 + _source/plugins/resize/plugin.js | 168 + _source/plugins/richcombo/plugin.js | 381 ++ _source/plugins/save/plugin.js | 56 + _source/plugins/scayt/dialogs/options.js | 537 +++ _source/plugins/scayt/dialogs/toolbar.css | 71 + _source/plugins/scayt/plugin.js | 964 +++++ _source/plugins/selection/plugin.js | 1601 ++++++++ .../showblocks/images/block_address.png | Bin 0 -> 171 bytes .../showblocks/images/block_blockquote.png | Bin 0 -> 181 bytes .../plugins/showblocks/images/block_div.png | Bin 0 -> 136 bytes .../plugins/showblocks/images/block_h1.png | Bin 0 -> 127 bytes .../plugins/showblocks/images/block_h2.png | Bin 0 -> 134 bytes .../plugins/showblocks/images/block_h3.png | Bin 0 -> 131 bytes .../plugins/showblocks/images/block_h4.png | Bin 0 -> 133 bytes .../plugins/showblocks/images/block_h5.png | Bin 0 -> 133 bytes .../plugins/showblocks/images/block_h6.png | Bin 0 -> 129 bytes _source/plugins/showblocks/images/block_p.png | Bin 0 -> 119 bytes .../plugins/showblocks/images/block_pre.png | Bin 0 -> 136 bytes _source/plugins/showblocks/plugin.js | 160 + _source/plugins/showborders/plugin.js | 207 ++ _source/plugins/smiley/dialogs/smiley.js | 224 ++ _source/plugins/smiley/images/angel_smile.gif | Bin 0 -> 465 bytes _source/plugins/smiley/images/angry_smile.gif | Bin 0 -> 443 bytes .../plugins/smiley/images/broken_heart.gif | Bin 0 -> 192 bytes .../plugins/smiley/images/confused_smile.gif | Bin 0 -> 464 bytes _source/plugins/smiley/images/cry_smile.gif | Bin 0 -> 468 bytes _source/plugins/smiley/images/devil_smile.gif | Bin 0 -> 436 bytes .../smiley/images/embaressed_smile.gif | Bin 0 -> 442 bytes _source/plugins/smiley/images/envelope.gif | Bin 0 -> 426 bytes _source/plugins/smiley/images/heart.gif | Bin 0 -> 183 bytes _source/plugins/smiley/images/kiss.gif | Bin 0 -> 241 bytes _source/plugins/smiley/images/lightbulb.gif | Bin 0 -> 368 bytes _source/plugins/smiley/images/omg_smile.gif | Bin 0 -> 451 bytes .../plugins/smiley/images/regular_smile.gif | Bin 0 -> 450 bytes _source/plugins/smiley/images/sad_smile.gif | Bin 0 -> 460 bytes .../plugins/smiley/images/shades_smile.gif | Bin 0 -> 449 bytes _source/plugins/smiley/images/teeth_smile.gif | Bin 0 -> 442 bytes _source/plugins/smiley/images/thumbs_down.gif | Bin 0 -> 408 bytes _source/plugins/smiley/images/thumbs_up.gif | Bin 0 -> 396 bytes .../plugins/smiley/images/tounge_smile.gif | Bin 0 -> 446 bytes .../images/whatchutalkingabout_smile.gif | Bin 0 -> 452 bytes _source/plugins/smiley/images/wink_smile.gif | Bin 0 -> 458 bytes _source/plugins/smiley/plugin.js | 94 + _source/plugins/sourcearea/plugin.js | 209 ++ .../specialchar/dialogs/specialchar.js | 350 ++ _source/plugins/specialchar/lang/en.js | 89 + _source/plugins/specialchar/plugin.js | 70 + _source/plugins/styles/plugin.js | 1696 +++++++++ _source/plugins/styles/styles/default.js | 88 + _source/plugins/stylescombo/plugin.js | 218 ++ _source/plugins/stylesheetparser/plugin.js | 148 + _source/plugins/tab/plugin.js | 367 ++ _source/plugins/table/dialogs/table.js | 602 +++ _source/plugins/table/plugin.js | 78 + _source/plugins/tableresize/plugin.js | 443 +++ .../plugins/tabletools/dialogs/tableCell.js | 525 +++ _source/plugins/tabletools/plugin.js | 1194 ++++++ .../plugins/templates/dialogs/templates.js | 234 ++ _source/plugins/templates/plugin.js | 99 + .../plugins/templates/templates/default.js | 94 + .../templates/templates/images/template1.gif | Bin 0 -> 375 bytes .../templates/templates/images/template2.gif | Bin 0 -> 333 bytes .../templates/templates/images/template3.gif | Bin 0 -> 422 bytes _source/plugins/toolbar/plugin.js | 545 +++ _source/plugins/uicolor/dialogs/uicolor.js | 205 + _source/plugins/uicolor/lang/en.js | 15 + _source/plugins/uicolor/lang/he.js | 15 + _source/plugins/uicolor/plugin.js | 37 + _source/plugins/uicolor/uicolor.gif | Bin 0 -> 1108 bytes _source/plugins/uicolor/yui/assets/hue_bg.png | Bin 0 -> 1120 bytes .../plugins/uicolor/yui/assets/hue_thumb.png | Bin 0 -> 195 bytes .../uicolor/yui/assets/picker_mask.png | Bin 0 -> 12174 bytes .../uicolor/yui/assets/picker_thumb.png | Bin 0 -> 192 bytes _source/plugins/uicolor/yui/assets/yui.css | 15 + _source/plugins/uicolor/yui/yui.js | 71 + _source/plugins/undo/plugin.js | 580 +++ _source/plugins/wsc/dialogs/ciframe.html | 49 + _source/plugins/wsc/dialogs/tmpFrameset.html | 52 + _source/plugins/wsc/dialogs/wsc.css | 82 + _source/plugins/wsc/dialogs/wsc.js | 192 + _source/plugins/wsc/plugin.js | 33 + _source/plugins/wysiwygarea/plugin.js | 1351 +++++++ _source/plugins/xml/plugin.js | 170 + _source/skins/kama/dialog.css | 943 +++++ _source/skins/kama/editor.css | 25 + _source/skins/kama/elementspath.css | 73 + _source/skins/kama/icons.css | 366 ++ _source/skins/kama/icons.png | Bin 0 -> 5598 bytes _source/skins/kama/icons_rtl.png | Bin 0 -> 5600 bytes _source/skins/kama/images/dialog_sides.gif | Bin 0 -> 48 bytes _source/skins/kama/images/dialog_sides.png | Bin 0 -> 178 bytes .../skins/kama/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes _source/skins/kama/images/mini.gif | Bin 0 -> 183 bytes _source/skins/kama/images/noimage.png | Bin 0 -> 2115 bytes _source/skins/kama/images/sprites.png | Bin 0 -> 7086 bytes _source/skins/kama/images/sprites_ie6.png | Bin 0 -> 2724 bytes _source/skins/kama/images/toolbar_start.gif | Bin 0 -> 105 bytes _source/skins/kama/mainui.css | 203 + _source/skins/kama/menu.css | 232 ++ _source/skins/kama/panel.css | 217 ++ _source/skins/kama/presets.css | 49 + _source/skins/kama/reset.css | 84 + _source/skins/kama/richcombo.css | 287 ++ _source/skins/kama/skin.js | 236 ++ _source/skins/kama/templates.css | 88 + _source/skins/kama/toolbar.css | 407 ++ _source/skins/office2003/dialog.css | 844 +++++ _source/skins/office2003/editor.css | 25 + _source/skins/office2003/elementspath.css | 74 + _source/skins/office2003/icons.css | 363 ++ _source/skins/office2003/icons.png | Bin 0 -> 5598 bytes _source/skins/office2003/icons_rtl.png | Bin 0 -> 5600 bytes .../skins/office2003/images/dialog_sides.gif | Bin 0 -> 48 bytes .../skins/office2003/images/dialog_sides.png | Bin 0 -> 178 bytes .../office2003/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes _source/skins/office2003/images/mini.gif | Bin 0 -> 183 bytes _source/skins/office2003/images/noimage.png | Bin 0 -> 2115 bytes _source/skins/office2003/images/sprites.png | Bin 0 -> 6119 bytes .../skins/office2003/images/sprites_ie6.png | Bin 0 -> 2715 bytes _source/skins/office2003/mainui.css | 153 + _source/skins/office2003/menu.css | 229 ++ _source/skins/office2003/panel.css | 212 ++ _source/skins/office2003/presets.css | 49 + _source/skins/office2003/reset.css | 84 + _source/skins/office2003/richcombo.css | 309 ++ _source/skins/office2003/skin.js | 74 + _source/skins/office2003/templates.css | 87 + _source/skins/office2003/toolbar.css | 522 +++ _source/skins/v2/dialog.css | 861 +++++ _source/skins/v2/editor.css | 25 + _source/skins/v2/elementspath.css | 74 + _source/skins/v2/icons.css | 363 ++ _source/skins/v2/icons.png | Bin 0 -> 5598 bytes _source/skins/v2/icons_rtl.png | Bin 0 -> 5600 bytes _source/skins/v2/images/dialog_sides.gif | Bin 0 -> 48 bytes _source/skins/v2/images/dialog_sides.png | Bin 0 -> 178 bytes _source/skins/v2/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes _source/skins/v2/images/mini.gif | Bin 0 -> 183 bytes _source/skins/v2/images/noimage.png | Bin 0 -> 2115 bytes _source/skins/v2/images/sprites.png | Bin 0 -> 5389 bytes _source/skins/v2/images/sprites_ie6.png | Bin 0 -> 492 bytes _source/skins/v2/images/toolbar_start.gif | Bin 0 -> 105 bytes _source/skins/v2/mainui.css | 162 + _source/skins/v2/menu.css | 232 ++ _source/skins/v2/panel.css | 212 ++ _source/skins/v2/presets.css | 50 + _source/skins/v2/reset.css | 84 + _source/skins/v2/richcombo.css | 302 ++ _source/skins/v2/skin.js | 70 + _source/skins/v2/templates.css | 87 + _source/skins/v2/toolbar.css | 465 +++ _source/themes/default/theme.js | 395 ++ adapters/jquery.js | 6 + ckeditor.asp | 955 +++++ ckeditor.js | 147 + ckeditor.pack | 211 ++ ckeditor.php | 29 + ckeditor_basic.js | 8 + ckeditor_basic_source.js | 20 + ckeditor_php4.php | 566 +++ ckeditor_php5.php | 556 +++ ckeditor_source.js | 25 + config.js | 11 + contents.css | 25 + images/spacer.gif | Bin 0 -> 43 bytes lang/_languages.js | 6 + lang/_translationstatus.txt | 61 + lang/af.js | 6 + lang/ar.js | 6 + lang/bg.js | 6 + lang/bn.js | 6 + lang/bs.js | 6 + lang/ca.js | 6 + lang/cs.js | 6 + lang/cy.js | 6 + lang/da.js | 6 + lang/de.js | 6 + lang/el.js | 6 + lang/en-au.js | 6 + lang/en-ca.js | 6 + lang/en-gb.js | 6 + lang/en.js | 6 + lang/eo.js | 6 + lang/es.js | 6 + lang/et.js | 6 + lang/eu.js | 6 + lang/fa.js | 6 + lang/fi.js | 6 + lang/fo.js | 6 + lang/fr-ca.js | 6 + lang/fr.js | 6 + lang/gl.js | 6 + lang/gu.js | 6 + lang/he.js | 6 + lang/hi.js | 6 + lang/hr.js | 6 + lang/hu.js | 6 + lang/is.js | 6 + lang/it.js | 6 + lang/ja.js | 6 + lang/ka.js | 6 + lang/km.js | 6 + lang/ko.js | 6 + lang/lt.js | 6 + lang/lv.js | 6 + lang/mn.js | 6 + lang/ms.js | 6 + lang/nb.js | 6 + lang/nl.js | 6 + lang/no.js | 6 + lang/pl.js | 6 + lang/pt-br.js | 6 + lang/pt.js | 6 + lang/ro.js | 6 + lang/ru.js | 6 + lang/sk.js | 6 + lang/sl.js | 6 + lang/sr-latn.js | 6 + lang/sr.js | 6 + lang/sv.js | 6 + lang/th.js | 6 + lang/tr.js | 6 + lang/uk.js | 6 + lang/vi.js | 6 + lang/zh-cn.js | 6 + lang/zh.js | 6 + plugins/a11yhelp/dialogs/a11yhelp.js | 7 + plugins/a11yhelp/lang/en.js | 6 + plugins/a11yhelp/lang/he.js | 6 + plugins/about/dialogs/about.js | 6 + plugins/about/dialogs/logo_ckeditor.png | Bin 0 -> 2759 bytes plugins/adobeair/plugin.js | 6 + plugins/ajax/plugin.js | 6 + plugins/autogrow/plugin.js | 6 + plugins/bbcode/plugin.js | 9 + plugins/clipboard/dialogs/paste.js | 7 + plugins/colordialog/dialogs/colordialog.js | 7 + plugins/devtools/lang/en.js | 6 + plugins/devtools/plugin.js | 6 + plugins/dialog/dialogDefinition.js | 4 + plugins/div/dialogs/div.js | 8 + plugins/docprops/dialogs/docprops.js | 10 + plugins/docprops/plugin.js | 6 + plugins/find/dialogs/find.js | 10 + plugins/flash/dialogs/flash.js | 9 + plugins/flash/images/placeholder.png | Bin 0 -> 256 bytes plugins/forms/dialogs/button.js | 6 + plugins/forms/dialogs/checkbox.js | 6 + plugins/forms/dialogs/form.js | 6 + plugins/forms/dialogs/hiddenfield.js | 6 + plugins/forms/dialogs/radio.js | 6 + plugins/forms/dialogs/select.js | 9 + plugins/forms/dialogs/textarea.js | 6 + plugins/forms/dialogs/textfield.js | 6 + plugins/forms/images/hiddenfield.gif | Bin 0 -> 105 bytes plugins/iframe/dialogs/iframe.js | 7 + plugins/iframe/images/placeholder.png | Bin 0 -> 449 bytes plugins/iframedialog/plugin.js | 6 + plugins/image/dialogs/image.js | 13 + plugins/link/dialogs/anchor.js | 6 + plugins/link/dialogs/link.js | 12 + plugins/link/images/anchor.gif | Bin 0 -> 184 bytes plugins/liststyle/dialogs/liststyle.js | 7 + plugins/pagebreak/images/pagebreak.gif | Bin 0 -> 54 bytes plugins/pastefromword/filter/default.js | 11 + plugins/pastetext/dialogs/pastetext.js | 6 + plugins/placeholder/dialogs/placeholder.js | 6 + plugins/placeholder/lang/en.js | 6 + plugins/placeholder/lang/he.js | 6 + plugins/placeholder/placeholder.gif | Bin 0 -> 96 bytes plugins/placeholder/plugin.js | 6 + plugins/scayt/dialogs/options.js | 8 + plugins/scayt/dialogs/toolbar.css | 6 + plugins/showblocks/images/block_address.png | Bin 0 -> 171 bytes .../showblocks/images/block_blockquote.png | Bin 0 -> 181 bytes plugins/showblocks/images/block_div.png | Bin 0 -> 136 bytes plugins/showblocks/images/block_h1.png | Bin 0 -> 127 bytes plugins/showblocks/images/block_h2.png | Bin 0 -> 134 bytes plugins/showblocks/images/block_h3.png | Bin 0 -> 131 bytes plugins/showblocks/images/block_h4.png | Bin 0 -> 133 bytes plugins/showblocks/images/block_h5.png | Bin 0 -> 133 bytes plugins/showblocks/images/block_h6.png | Bin 0 -> 129 bytes plugins/showblocks/images/block_p.png | Bin 0 -> 119 bytes plugins/showblocks/images/block_pre.png | Bin 0 -> 136 bytes plugins/smiley/dialogs/smiley.js | 7 + plugins/smiley/images/angel_smile.gif | Bin 0 -> 465 bytes plugins/smiley/images/angry_smile.gif | Bin 0 -> 443 bytes plugins/smiley/images/broken_heart.gif | Bin 0 -> 192 bytes plugins/smiley/images/confused_smile.gif | Bin 0 -> 464 bytes plugins/smiley/images/cry_smile.gif | Bin 0 -> 468 bytes plugins/smiley/images/devil_smile.gif | Bin 0 -> 436 bytes plugins/smiley/images/embaressed_smile.gif | Bin 0 -> 442 bytes plugins/smiley/images/envelope.gif | Bin 0 -> 426 bytes plugins/smiley/images/heart.gif | Bin 0 -> 183 bytes plugins/smiley/images/kiss.gif | Bin 0 -> 241 bytes plugins/smiley/images/lightbulb.gif | Bin 0 -> 368 bytes plugins/smiley/images/omg_smile.gif | Bin 0 -> 451 bytes plugins/smiley/images/regular_smile.gif | Bin 0 -> 450 bytes plugins/smiley/images/sad_smile.gif | Bin 0 -> 460 bytes plugins/smiley/images/shades_smile.gif | Bin 0 -> 449 bytes plugins/smiley/images/teeth_smile.gif | Bin 0 -> 442 bytes plugins/smiley/images/thumbs_down.gif | Bin 0 -> 408 bytes plugins/smiley/images/thumbs_up.gif | Bin 0 -> 396 bytes plugins/smiley/images/tounge_smile.gif | Bin 0 -> 446 bytes .../images/whatchutalkingabout_smile.gif | Bin 0 -> 452 bytes plugins/smiley/images/wink_smile.gif | Bin 0 -> 458 bytes plugins/specialchar/dialogs/specialchar.js | 7 + plugins/specialchar/lang/en.js | 6 + plugins/styles/styles/default.js | 6 + plugins/stylesheetparser/plugin.js | 6 + plugins/table/dialogs/table.js | 9 + plugins/tableresize/plugin.js | 7 + plugins/tabletools/dialogs/tableCell.js | 8 + plugins/templates/dialogs/templates.js | 7 + plugins/templates/templates/default.js | 6 + .../templates/templates/images/template1.gif | Bin 0 -> 375 bytes .../templates/templates/images/template2.gif | Bin 0 -> 333 bytes .../templates/templates/images/template3.gif | Bin 0 -> 422 bytes plugins/uicolor/dialogs/uicolor.js | 7 + plugins/uicolor/lang/en.js | 6 + plugins/uicolor/lang/he.js | 6 + plugins/uicolor/plugin.js | 6 + plugins/uicolor/uicolor.gif | Bin 0 -> 1108 bytes plugins/uicolor/yui/assets/hue_bg.png | Bin 0 -> 1120 bytes plugins/uicolor/yui/assets/hue_thumb.png | Bin 0 -> 195 bytes plugins/uicolor/yui/assets/picker_mask.png | Bin 0 -> 12174 bytes plugins/uicolor/yui/assets/picker_thumb.png | Bin 0 -> 192 bytes plugins/uicolor/yui/assets/yui.css | 6 + plugins/uicolor/yui/yui.js | 76 + plugins/wsc/dialogs/ciframe.html | 49 + plugins/wsc/dialogs/tmpFrameset.html | 52 + plugins/wsc/dialogs/wsc.css | 6 + plugins/wsc/dialogs/wsc.js | 7 + plugins/xml/plugin.js | 6 + skins/kama/dialog.css | 10 + skins/kama/editor.css | 13 + skins/kama/icons.png | Bin 0 -> 5598 bytes skins/kama/icons_rtl.png | Bin 0 -> 5600 bytes skins/kama/images/dialog_sides.gif | Bin 0 -> 48 bytes skins/kama/images/dialog_sides.png | Bin 0 -> 178 bytes skins/kama/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes skins/kama/images/mini.gif | Bin 0 -> 183 bytes skins/kama/images/noimage.png | Bin 0 -> 2115 bytes skins/kama/images/sprites.png | Bin 0 -> 7086 bytes skins/kama/images/sprites_ie6.png | Bin 0 -> 2724 bytes skins/kama/images/toolbar_start.gif | Bin 0 -> 105 bytes skins/kama/skin.js | 7 + skins/kama/templates.css | 6 + skins/office2003/dialog.css | 9 + skins/office2003/editor.css | 14 + skins/office2003/icons.png | Bin 0 -> 5598 bytes skins/office2003/icons_rtl.png | Bin 0 -> 5600 bytes skins/office2003/images/dialog_sides.gif | Bin 0 -> 48 bytes skins/office2003/images/dialog_sides.png | Bin 0 -> 178 bytes skins/office2003/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes skins/office2003/images/mini.gif | Bin 0 -> 183 bytes skins/office2003/images/noimage.png | Bin 0 -> 2115 bytes skins/office2003/images/sprites.png | Bin 0 -> 6119 bytes skins/office2003/images/sprites_ie6.png | Bin 0 -> 2715 bytes skins/office2003/skin.js | 6 + skins/office2003/templates.css | 6 + skins/v2/dialog.css | 9 + skins/v2/editor.css | 13 + skins/v2/icons.png | Bin 0 -> 5598 bytes skins/v2/icons_rtl.png | Bin 0 -> 5600 bytes skins/v2/images/dialog_sides.gif | Bin 0 -> 48 bytes skins/v2/images/dialog_sides.png | Bin 0 -> 178 bytes skins/v2/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes skins/v2/images/mini.gif | Bin 0 -> 183 bytes skins/v2/images/noimage.png | Bin 0 -> 2115 bytes skins/v2/images/sprites.png | Bin 0 -> 5389 bytes skins/v2/images/sprites_ie6.png | Bin 0 -> 492 bytes skins/v2/images/toolbar_start.gif | Bin 0 -> 105 bytes skins/v2/skin.js | 6 + skins/v2/templates.css | 6 + themes/default/theme.js | 8 + 638 files changed, 128097 insertions(+) create mode 100644 .htaccess create mode 100644 CHANGES.html create mode 100644 INSTALL.html create mode 100644 LICENSE.html create mode 100644 _samples/adobeair/application.xml create mode 100644 _samples/adobeair/run.bat create mode 100644 _samples/adobeair/run.sh create mode 100644 _samples/adobeair/sample.html create mode 100644 _samples/ajax.html create mode 100644 _samples/api.html create mode 100644 _samples/api_dialog.html create mode 100644 _samples/api_dialog/my_dialog.js create mode 100644 _samples/asp/advanced.asp create mode 100644 _samples/asp/events.asp create mode 100644 _samples/asp/index.html create mode 100644 _samples/asp/replace.asp create mode 100644 _samples/asp/replaceall.asp create mode 100644 _samples/asp/sample_posteddata.asp create mode 100644 _samples/asp/standalone.asp create mode 100644 _samples/assets/_posteddata.php create mode 100644 _samples/assets/output_for_flash.fla create mode 100644 _samples/assets/output_for_flash.swf create mode 100644 _samples/assets/output_xhtml.css create mode 100644 _samples/assets/parsesample.css create mode 100644 _samples/assets/swfobject.js create mode 100644 _samples/autogrow.html create mode 100644 _samples/bbcode.html create mode 100644 _samples/devtools.html create mode 100644 _samples/divreplace.html create mode 100644 _samples/enterkey.html create mode 100644 _samples/fullpage.html create mode 100644 _samples/index.html create mode 100644 _samples/jqueryadapter.html create mode 100644 _samples/output_for_flash.html create mode 100644 _samples/output_html.html create mode 100644 _samples/output_xhtml.html create mode 100644 _samples/php/advanced.php create mode 100644 _samples/php/events.php create mode 100644 _samples/php/index.html create mode 100644 _samples/php/replace.php create mode 100644 _samples/php/replaceall.php create mode 100644 _samples/php/standalone.php create mode 100644 _samples/placeholder.html create mode 100644 _samples/readonly.html create mode 100644 _samples/replacebyclass.html create mode 100644 _samples/replacebycode.html create mode 100644 _samples/sample.css create mode 100644 _samples/sample.js create mode 100644 _samples/sample_posteddata.php create mode 100644 _samples/sharedspaces.html create mode 100644 _samples/skins.html create mode 100644 _samples/stylesheetparser.html create mode 100644 _samples/tableresize.html create mode 100644 _samples/ui_color.html create mode 100644 _samples/ui_languages.html create mode 100644 _source/adapters/jquery.js create mode 100644 _source/core/_bootstrap.js create mode 100644 _source/core/ckeditor.js create mode 100644 _source/core/ckeditor_base.js create mode 100644 _source/core/ckeditor_basic.js create mode 100644 _source/core/command.js create mode 100644 _source/core/commanddefinition.js create mode 100644 _source/core/config.js create mode 100644 _source/core/dataprocessor.js create mode 100644 _source/core/dom.js create mode 100644 _source/core/dom/comment.js create mode 100644 _source/core/dom/document.js create mode 100644 _source/core/dom/documentfragment.js create mode 100644 _source/core/dom/domobject.js create mode 100644 _source/core/dom/element.js create mode 100644 _source/core/dom/elementpath.js create mode 100644 _source/core/dom/event.js create mode 100644 _source/core/dom/node.js create mode 100644 _source/core/dom/nodelist.js create mode 100644 _source/core/dom/range.js create mode 100644 _source/core/dom/rangelist.js create mode 100644 _source/core/dom/text.js create mode 100644 _source/core/dom/walker.js create mode 100644 _source/core/dom/window.js create mode 100644 _source/core/dtd.js create mode 100644 _source/core/editor.js create mode 100644 _source/core/editor_basic.js create mode 100644 _source/core/env.js create mode 100644 _source/core/event.js create mode 100644 _source/core/eventInfo.js create mode 100644 _source/core/focusmanager.js create mode 100644 _source/core/htmlparser.js create mode 100644 _source/core/htmlparser/basicwriter.js create mode 100644 _source/core/htmlparser/cdata.js create mode 100644 _source/core/htmlparser/comment.js create mode 100644 _source/core/htmlparser/element.js create mode 100644 _source/core/htmlparser/filter.js create mode 100644 _source/core/htmlparser/fragment.js create mode 100644 _source/core/htmlparser/text.js create mode 100644 _source/core/lang.js create mode 100644 _source/core/loader.js create mode 100644 _source/core/plugindefinition.js create mode 100644 _source/core/plugins.js create mode 100644 _source/core/resourcemanager.js create mode 100644 _source/core/scriptloader.js create mode 100644 _source/core/skins.js create mode 100644 _source/core/themes.js create mode 100644 _source/core/tools.js create mode 100644 _source/core/ui.js create mode 100644 _source/lang/_languages.js create mode 100644 _source/lang/_translationstatus.txt create mode 100644 _source/lang/af.js create mode 100644 _source/lang/ar.js create mode 100644 _source/lang/bg.js create mode 100644 _source/lang/bn.js create mode 100644 _source/lang/bs.js create mode 100644 _source/lang/ca.js create mode 100644 _source/lang/cs.js create mode 100644 _source/lang/cy.js create mode 100644 _source/lang/da.js create mode 100644 _source/lang/de.js create mode 100644 _source/lang/el.js create mode 100644 _source/lang/en-au.js create mode 100644 _source/lang/en-ca.js create mode 100644 _source/lang/en-gb.js create mode 100644 _source/lang/en.js create mode 100644 _source/lang/eo.js create mode 100644 _source/lang/es.js create mode 100644 _source/lang/et.js create mode 100644 _source/lang/eu.js create mode 100644 _source/lang/fa.js create mode 100644 _source/lang/fi.js create mode 100644 _source/lang/fo.js create mode 100644 _source/lang/fr-ca.js create mode 100644 _source/lang/fr.js create mode 100644 _source/lang/gl.js create mode 100644 _source/lang/gu.js create mode 100644 _source/lang/he.js create mode 100644 _source/lang/hi.js create mode 100644 _source/lang/hr.js create mode 100644 _source/lang/hu.js create mode 100644 _source/lang/is.js create mode 100644 _source/lang/it.js create mode 100644 _source/lang/ja.js create mode 100644 _source/lang/ka.js create mode 100644 _source/lang/km.js create mode 100644 _source/lang/ko.js create mode 100644 _source/lang/lt.js create mode 100644 _source/lang/lv.js create mode 100644 _source/lang/mn.js create mode 100644 _source/lang/ms.js create mode 100644 _source/lang/nb.js create mode 100644 _source/lang/nl.js create mode 100644 _source/lang/no.js create mode 100644 _source/lang/pl.js create mode 100644 _source/lang/pt-br.js create mode 100644 _source/lang/pt.js create mode 100644 _source/lang/ro.js create mode 100644 _source/lang/ru.js create mode 100644 _source/lang/sk.js create mode 100644 _source/lang/sl.js create mode 100644 _source/lang/sr-latn.js create mode 100644 _source/lang/sr.js create mode 100644 _source/lang/sv.js create mode 100644 _source/lang/th.js create mode 100644 _source/lang/tr.js create mode 100644 _source/lang/uk.js create mode 100644 _source/lang/vi.js create mode 100644 _source/lang/zh-cn.js create mode 100644 _source/lang/zh.js create mode 100644 _source/plugins/a11yhelp/dialogs/a11yhelp.js create mode 100644 _source/plugins/a11yhelp/lang/en.js create mode 100644 _source/plugins/a11yhelp/lang/he.js create mode 100644 _source/plugins/a11yhelp/plugin.js create mode 100644 _source/plugins/about/dialogs/about.js create mode 100644 _source/plugins/about/dialogs/logo_ckeditor.png create mode 100644 _source/plugins/about/plugin.js create mode 100644 _source/plugins/adobeair/plugin.js create mode 100644 _source/plugins/ajax/plugin.js create mode 100644 _source/plugins/autogrow/plugin.js create mode 100644 _source/plugins/basicstyles/plugin.js create mode 100644 _source/plugins/bbcode/plugin.js create mode 100644 _source/plugins/bidi/plugin.js create mode 100644 _source/plugins/blockquote/plugin.js create mode 100644 _source/plugins/button/plugin.js create mode 100644 _source/plugins/clipboard/dialogs/paste.js create mode 100644 _source/plugins/clipboard/plugin.js create mode 100644 _source/plugins/colorbutton/plugin.js create mode 100644 _source/plugins/colordialog/dialogs/colordialog.js create mode 100644 _source/plugins/colordialog/plugin.js create mode 100644 _source/plugins/contextmenu/plugin.js create mode 100644 _source/plugins/devtools/lang/en.js create mode 100644 _source/plugins/devtools/plugin.js create mode 100644 _source/plugins/dialog/dialogDefinition.js create mode 100644 _source/plugins/dialog/plugin.js create mode 100644 _source/plugins/dialogadvtab/plugin.js create mode 100644 _source/plugins/dialogui/plugin.js create mode 100644 _source/plugins/div/dialogs/div.js create mode 100644 _source/plugins/div/plugin.js create mode 100644 _source/plugins/docprops/dialogs/docprops.js create mode 100644 _source/plugins/docprops/plugin.js create mode 100644 _source/plugins/domiterator/plugin.js create mode 100644 _source/plugins/editingblock/plugin.js create mode 100644 _source/plugins/elementspath/plugin.js create mode 100644 _source/plugins/enterkey/plugin.js create mode 100644 _source/plugins/entities/plugin.js create mode 100644 _source/plugins/fakeobjects/plugin.js create mode 100644 _source/plugins/filebrowser/plugin.js create mode 100644 _source/plugins/find/dialogs/find.js create mode 100644 _source/plugins/find/plugin.js create mode 100644 _source/plugins/flash/dialogs/flash.js create mode 100644 _source/plugins/flash/images/placeholder.png create mode 100644 _source/plugins/flash/plugin.js create mode 100644 _source/plugins/floatpanel/plugin.js create mode 100644 _source/plugins/font/plugin.js create mode 100644 _source/plugins/format/plugin.js create mode 100644 _source/plugins/forms/dialogs/button.js create mode 100644 _source/plugins/forms/dialogs/checkbox.js create mode 100644 _source/plugins/forms/dialogs/form.js create mode 100644 _source/plugins/forms/dialogs/hiddenfield.js create mode 100644 _source/plugins/forms/dialogs/radio.js create mode 100644 _source/plugins/forms/dialogs/select.js create mode 100644 _source/plugins/forms/dialogs/textarea.js create mode 100644 _source/plugins/forms/dialogs/textfield.js create mode 100644 _source/plugins/forms/images/hiddenfield.gif create mode 100644 _source/plugins/forms/plugin.js create mode 100644 _source/plugins/horizontalrule/plugin.js create mode 100644 _source/plugins/htmldataprocessor/plugin.js create mode 100644 _source/plugins/htmlwriter/plugin.js create mode 100644 _source/plugins/iframe/dialogs/iframe.js create mode 100644 _source/plugins/iframe/images/placeholder.png create mode 100644 _source/plugins/iframe/plugin.js create mode 100644 _source/plugins/iframedialog/plugin.js create mode 100644 _source/plugins/image/dialogs/image.js create mode 100644 _source/plugins/image/plugin.js create mode 100644 _source/plugins/indent/plugin.js create mode 100644 _source/plugins/justify/plugin.js create mode 100644 _source/plugins/keystrokes/plugin.js create mode 100644 _source/plugins/link/dialogs/anchor.js create mode 100644 _source/plugins/link/dialogs/link.js create mode 100644 _source/plugins/link/images/anchor.gif create mode 100644 _source/plugins/link/plugin.js create mode 100644 _source/plugins/list/plugin.js create mode 100644 _source/plugins/listblock/plugin.js create mode 100644 _source/plugins/liststyle/dialogs/liststyle.js create mode 100644 _source/plugins/liststyle/plugin.js create mode 100644 _source/plugins/maximize/plugin.js create mode 100644 _source/plugins/menu/plugin.js create mode 100644 _source/plugins/menubutton/plugin.js create mode 100644 _source/plugins/newpage/plugin.js create mode 100644 _source/plugins/pagebreak/images/pagebreak.gif create mode 100644 _source/plugins/pagebreak/plugin.js create mode 100644 _source/plugins/panel/plugin.js create mode 100644 _source/plugins/panelbutton/plugin.js create mode 100644 _source/plugins/pastefromword/filter/default.js create mode 100644 _source/plugins/pastefromword/plugin.js create mode 100644 _source/plugins/pastetext/dialogs/pastetext.js create mode 100644 _source/plugins/pastetext/plugin.js create mode 100644 _source/plugins/placeholder/dialogs/placeholder.js create mode 100644 _source/plugins/placeholder/lang/en.js create mode 100644 _source/plugins/placeholder/lang/he.js create mode 100644 _source/plugins/placeholder/placeholder.gif create mode 100644 _source/plugins/placeholder/plugin.js create mode 100644 _source/plugins/popup/plugin.js create mode 100644 _source/plugins/preview/plugin.js create mode 100644 _source/plugins/print/plugin.js create mode 100644 _source/plugins/removeformat/plugin.js create mode 100644 _source/plugins/resize/plugin.js create mode 100644 _source/plugins/richcombo/plugin.js create mode 100644 _source/plugins/save/plugin.js create mode 100644 _source/plugins/scayt/dialogs/options.js create mode 100644 _source/plugins/scayt/dialogs/toolbar.css create mode 100644 _source/plugins/scayt/plugin.js create mode 100644 _source/plugins/selection/plugin.js create mode 100644 _source/plugins/showblocks/images/block_address.png create mode 100644 _source/plugins/showblocks/images/block_blockquote.png create mode 100644 _source/plugins/showblocks/images/block_div.png create mode 100644 _source/plugins/showblocks/images/block_h1.png create mode 100644 _source/plugins/showblocks/images/block_h2.png create mode 100644 _source/plugins/showblocks/images/block_h3.png create mode 100644 _source/plugins/showblocks/images/block_h4.png create mode 100644 _source/plugins/showblocks/images/block_h5.png create mode 100644 _source/plugins/showblocks/images/block_h6.png create mode 100644 _source/plugins/showblocks/images/block_p.png create mode 100644 _source/plugins/showblocks/images/block_pre.png create mode 100644 _source/plugins/showblocks/plugin.js create mode 100644 _source/plugins/showborders/plugin.js create mode 100644 _source/plugins/smiley/dialogs/smiley.js create mode 100644 _source/plugins/smiley/images/angel_smile.gif create mode 100644 _source/plugins/smiley/images/angry_smile.gif create mode 100644 _source/plugins/smiley/images/broken_heart.gif create mode 100644 _source/plugins/smiley/images/confused_smile.gif create mode 100644 _source/plugins/smiley/images/cry_smile.gif create mode 100644 _source/plugins/smiley/images/devil_smile.gif create mode 100644 _source/plugins/smiley/images/embaressed_smile.gif create mode 100644 _source/plugins/smiley/images/envelope.gif create mode 100644 _source/plugins/smiley/images/heart.gif create mode 100644 _source/plugins/smiley/images/kiss.gif create mode 100644 _source/plugins/smiley/images/lightbulb.gif create mode 100644 _source/plugins/smiley/images/omg_smile.gif create mode 100644 _source/plugins/smiley/images/regular_smile.gif create mode 100644 _source/plugins/smiley/images/sad_smile.gif create mode 100644 _source/plugins/smiley/images/shades_smile.gif create mode 100644 _source/plugins/smiley/images/teeth_smile.gif create mode 100644 _source/plugins/smiley/images/thumbs_down.gif create mode 100644 _source/plugins/smiley/images/thumbs_up.gif create mode 100644 _source/plugins/smiley/images/tounge_smile.gif create mode 100644 _source/plugins/smiley/images/whatchutalkingabout_smile.gif create mode 100644 _source/plugins/smiley/images/wink_smile.gif create mode 100644 _source/plugins/smiley/plugin.js create mode 100644 _source/plugins/sourcearea/plugin.js create mode 100644 _source/plugins/specialchar/dialogs/specialchar.js create mode 100644 _source/plugins/specialchar/lang/en.js create mode 100644 _source/plugins/specialchar/plugin.js create mode 100644 _source/plugins/styles/plugin.js create mode 100644 _source/plugins/styles/styles/default.js create mode 100644 _source/plugins/stylescombo/plugin.js create mode 100644 _source/plugins/stylesheetparser/plugin.js create mode 100644 _source/plugins/tab/plugin.js create mode 100644 _source/plugins/table/dialogs/table.js create mode 100644 _source/plugins/table/plugin.js create mode 100644 _source/plugins/tableresize/plugin.js create mode 100644 _source/plugins/tabletools/dialogs/tableCell.js create mode 100644 _source/plugins/tabletools/plugin.js create mode 100644 _source/plugins/templates/dialogs/templates.js create mode 100644 _source/plugins/templates/plugin.js create mode 100644 _source/plugins/templates/templates/default.js create mode 100644 _source/plugins/templates/templates/images/template1.gif create mode 100644 _source/plugins/templates/templates/images/template2.gif create mode 100644 _source/plugins/templates/templates/images/template3.gif create mode 100644 _source/plugins/toolbar/plugin.js create mode 100644 _source/plugins/uicolor/dialogs/uicolor.js create mode 100644 _source/plugins/uicolor/lang/en.js create mode 100644 _source/plugins/uicolor/lang/he.js create mode 100644 _source/plugins/uicolor/plugin.js create mode 100644 _source/plugins/uicolor/uicolor.gif create mode 100644 _source/plugins/uicolor/yui/assets/hue_bg.png create mode 100644 _source/plugins/uicolor/yui/assets/hue_thumb.png create mode 100644 _source/plugins/uicolor/yui/assets/picker_mask.png create mode 100644 _source/plugins/uicolor/yui/assets/picker_thumb.png create mode 100644 _source/plugins/uicolor/yui/assets/yui.css create mode 100644 _source/plugins/uicolor/yui/yui.js create mode 100644 _source/plugins/undo/plugin.js create mode 100644 _source/plugins/wsc/dialogs/ciframe.html create mode 100644 _source/plugins/wsc/dialogs/tmpFrameset.html create mode 100644 _source/plugins/wsc/dialogs/wsc.css create mode 100644 _source/plugins/wsc/dialogs/wsc.js create mode 100644 _source/plugins/wsc/plugin.js create mode 100644 _source/plugins/wysiwygarea/plugin.js create mode 100644 _source/plugins/xml/plugin.js create mode 100644 _source/skins/kama/dialog.css create mode 100644 _source/skins/kama/editor.css create mode 100644 _source/skins/kama/elementspath.css create mode 100644 _source/skins/kama/icons.css create mode 100644 _source/skins/kama/icons.png create mode 100644 _source/skins/kama/icons_rtl.png create mode 100644 _source/skins/kama/images/dialog_sides.gif create mode 100644 _source/skins/kama/images/dialog_sides.png create mode 100644 _source/skins/kama/images/dialog_sides_rtl.png create mode 100644 _source/skins/kama/images/mini.gif create mode 100644 _source/skins/kama/images/noimage.png create mode 100644 _source/skins/kama/images/sprites.png create mode 100644 _source/skins/kama/images/sprites_ie6.png create mode 100644 _source/skins/kama/images/toolbar_start.gif create mode 100644 _source/skins/kama/mainui.css create mode 100644 _source/skins/kama/menu.css create mode 100644 _source/skins/kama/panel.css create mode 100644 _source/skins/kama/presets.css create mode 100644 _source/skins/kama/reset.css create mode 100644 _source/skins/kama/richcombo.css create mode 100644 _source/skins/kama/skin.js create mode 100644 _source/skins/kama/templates.css create mode 100644 _source/skins/kama/toolbar.css create mode 100644 _source/skins/office2003/dialog.css create mode 100644 _source/skins/office2003/editor.css create mode 100644 _source/skins/office2003/elementspath.css create mode 100644 _source/skins/office2003/icons.css create mode 100644 _source/skins/office2003/icons.png create mode 100644 _source/skins/office2003/icons_rtl.png create mode 100644 _source/skins/office2003/images/dialog_sides.gif create mode 100644 _source/skins/office2003/images/dialog_sides.png create mode 100644 _source/skins/office2003/images/dialog_sides_rtl.png create mode 100644 _source/skins/office2003/images/mini.gif create mode 100644 _source/skins/office2003/images/noimage.png create mode 100644 _source/skins/office2003/images/sprites.png create mode 100644 _source/skins/office2003/images/sprites_ie6.png create mode 100644 _source/skins/office2003/mainui.css create mode 100644 _source/skins/office2003/menu.css create mode 100644 _source/skins/office2003/panel.css create mode 100644 _source/skins/office2003/presets.css create mode 100644 _source/skins/office2003/reset.css create mode 100644 _source/skins/office2003/richcombo.css create mode 100644 _source/skins/office2003/skin.js create mode 100644 _source/skins/office2003/templates.css create mode 100644 _source/skins/office2003/toolbar.css create mode 100644 _source/skins/v2/dialog.css create mode 100644 _source/skins/v2/editor.css create mode 100644 _source/skins/v2/elementspath.css create mode 100644 _source/skins/v2/icons.css create mode 100644 _source/skins/v2/icons.png create mode 100644 _source/skins/v2/icons_rtl.png create mode 100644 _source/skins/v2/images/dialog_sides.gif create mode 100644 _source/skins/v2/images/dialog_sides.png create mode 100644 _source/skins/v2/images/dialog_sides_rtl.png create mode 100644 _source/skins/v2/images/mini.gif create mode 100644 _source/skins/v2/images/noimage.png create mode 100644 _source/skins/v2/images/sprites.png create mode 100644 _source/skins/v2/images/sprites_ie6.png create mode 100644 _source/skins/v2/images/toolbar_start.gif create mode 100644 _source/skins/v2/mainui.css create mode 100644 _source/skins/v2/menu.css create mode 100644 _source/skins/v2/panel.css create mode 100644 _source/skins/v2/presets.css create mode 100644 _source/skins/v2/reset.css create mode 100644 _source/skins/v2/richcombo.css create mode 100644 _source/skins/v2/skin.js create mode 100644 _source/skins/v2/templates.css create mode 100644 _source/skins/v2/toolbar.css create mode 100644 _source/themes/default/theme.js create mode 100644 adapters/jquery.js create mode 100644 ckeditor.asp create mode 100644 ckeditor.js create mode 100644 ckeditor.pack create mode 100644 ckeditor.php create mode 100644 ckeditor_basic.js create mode 100644 ckeditor_basic_source.js create mode 100644 ckeditor_php4.php create mode 100644 ckeditor_php5.php create mode 100644 ckeditor_source.js create mode 100644 config.js create mode 100644 contents.css create mode 100644 images/spacer.gif create mode 100644 lang/_languages.js create mode 100644 lang/_translationstatus.txt create mode 100644 lang/af.js create mode 100644 lang/ar.js create mode 100644 lang/bg.js create mode 100644 lang/bn.js create mode 100644 lang/bs.js create mode 100644 lang/ca.js create mode 100644 lang/cs.js create mode 100644 lang/cy.js create mode 100644 lang/da.js create mode 100644 lang/de.js create mode 100644 lang/el.js create mode 100644 lang/en-au.js create mode 100644 lang/en-ca.js create mode 100644 lang/en-gb.js create mode 100644 lang/en.js create mode 100644 lang/eo.js create mode 100644 lang/es.js create mode 100644 lang/et.js create mode 100644 lang/eu.js create mode 100644 lang/fa.js create mode 100644 lang/fi.js create mode 100644 lang/fo.js create mode 100644 lang/fr-ca.js create mode 100644 lang/fr.js create mode 100644 lang/gl.js create mode 100644 lang/gu.js create mode 100644 lang/he.js create mode 100644 lang/hi.js create mode 100644 lang/hr.js create mode 100644 lang/hu.js create mode 100644 lang/is.js create mode 100644 lang/it.js create mode 100644 lang/ja.js create mode 100644 lang/ka.js create mode 100644 lang/km.js create mode 100644 lang/ko.js create mode 100644 lang/lt.js create mode 100644 lang/lv.js create mode 100644 lang/mn.js create mode 100644 lang/ms.js create mode 100644 lang/nb.js create mode 100644 lang/nl.js create mode 100644 lang/no.js create mode 100644 lang/pl.js create mode 100644 lang/pt-br.js create mode 100644 lang/pt.js create mode 100644 lang/ro.js create mode 100644 lang/ru.js create mode 100644 lang/sk.js create mode 100644 lang/sl.js create mode 100644 lang/sr-latn.js create mode 100644 lang/sr.js create mode 100644 lang/sv.js create mode 100644 lang/th.js create mode 100644 lang/tr.js create mode 100644 lang/uk.js create mode 100644 lang/vi.js create mode 100644 lang/zh-cn.js create mode 100644 lang/zh.js create mode 100644 plugins/a11yhelp/dialogs/a11yhelp.js create mode 100644 plugins/a11yhelp/lang/en.js create mode 100644 plugins/a11yhelp/lang/he.js create mode 100644 plugins/about/dialogs/about.js create mode 100644 plugins/about/dialogs/logo_ckeditor.png create mode 100644 plugins/adobeair/plugin.js create mode 100644 plugins/ajax/plugin.js create mode 100644 plugins/autogrow/plugin.js create mode 100644 plugins/bbcode/plugin.js create mode 100644 plugins/clipboard/dialogs/paste.js create mode 100644 plugins/colordialog/dialogs/colordialog.js create mode 100644 plugins/devtools/lang/en.js create mode 100644 plugins/devtools/plugin.js create mode 100644 plugins/dialog/dialogDefinition.js create mode 100644 plugins/div/dialogs/div.js create mode 100644 plugins/docprops/dialogs/docprops.js create mode 100644 plugins/docprops/plugin.js create mode 100644 plugins/find/dialogs/find.js create mode 100644 plugins/flash/dialogs/flash.js create mode 100644 plugins/flash/images/placeholder.png create mode 100644 plugins/forms/dialogs/button.js create mode 100644 plugins/forms/dialogs/checkbox.js create mode 100644 plugins/forms/dialogs/form.js create mode 100644 plugins/forms/dialogs/hiddenfield.js create mode 100644 plugins/forms/dialogs/radio.js create mode 100644 plugins/forms/dialogs/select.js create mode 100644 plugins/forms/dialogs/textarea.js create mode 100644 plugins/forms/dialogs/textfield.js create mode 100644 plugins/forms/images/hiddenfield.gif create mode 100644 plugins/iframe/dialogs/iframe.js create mode 100644 plugins/iframe/images/placeholder.png create mode 100644 plugins/iframedialog/plugin.js create mode 100644 plugins/image/dialogs/image.js create mode 100644 plugins/link/dialogs/anchor.js create mode 100644 plugins/link/dialogs/link.js create mode 100644 plugins/link/images/anchor.gif create mode 100644 plugins/liststyle/dialogs/liststyle.js create mode 100644 plugins/pagebreak/images/pagebreak.gif create mode 100644 plugins/pastefromword/filter/default.js create mode 100644 plugins/pastetext/dialogs/pastetext.js create mode 100644 plugins/placeholder/dialogs/placeholder.js create mode 100644 plugins/placeholder/lang/en.js create mode 100644 plugins/placeholder/lang/he.js create mode 100644 plugins/placeholder/placeholder.gif create mode 100644 plugins/placeholder/plugin.js create mode 100644 plugins/scayt/dialogs/options.js create mode 100644 plugins/scayt/dialogs/toolbar.css create mode 100644 plugins/showblocks/images/block_address.png create mode 100644 plugins/showblocks/images/block_blockquote.png create mode 100644 plugins/showblocks/images/block_div.png create mode 100644 plugins/showblocks/images/block_h1.png create mode 100644 plugins/showblocks/images/block_h2.png create mode 100644 plugins/showblocks/images/block_h3.png create mode 100644 plugins/showblocks/images/block_h4.png create mode 100644 plugins/showblocks/images/block_h5.png create mode 100644 plugins/showblocks/images/block_h6.png create mode 100644 plugins/showblocks/images/block_p.png create mode 100644 plugins/showblocks/images/block_pre.png create mode 100644 plugins/smiley/dialogs/smiley.js create mode 100644 plugins/smiley/images/angel_smile.gif create mode 100644 plugins/smiley/images/angry_smile.gif create mode 100644 plugins/smiley/images/broken_heart.gif create mode 100644 plugins/smiley/images/confused_smile.gif create mode 100644 plugins/smiley/images/cry_smile.gif create mode 100644 plugins/smiley/images/devil_smile.gif create mode 100644 plugins/smiley/images/embaressed_smile.gif create mode 100644 plugins/smiley/images/envelope.gif create mode 100644 plugins/smiley/images/heart.gif create mode 100644 plugins/smiley/images/kiss.gif create mode 100644 plugins/smiley/images/lightbulb.gif create mode 100644 plugins/smiley/images/omg_smile.gif create mode 100644 plugins/smiley/images/regular_smile.gif create mode 100644 plugins/smiley/images/sad_smile.gif create mode 100644 plugins/smiley/images/shades_smile.gif create mode 100644 plugins/smiley/images/teeth_smile.gif create mode 100644 plugins/smiley/images/thumbs_down.gif create mode 100644 plugins/smiley/images/thumbs_up.gif create mode 100644 plugins/smiley/images/tounge_smile.gif create mode 100644 plugins/smiley/images/whatchutalkingabout_smile.gif create mode 100644 plugins/smiley/images/wink_smile.gif create mode 100644 plugins/specialchar/dialogs/specialchar.js create mode 100644 plugins/specialchar/lang/en.js create mode 100644 plugins/styles/styles/default.js create mode 100644 plugins/stylesheetparser/plugin.js create mode 100644 plugins/table/dialogs/table.js create mode 100644 plugins/tableresize/plugin.js create mode 100644 plugins/tabletools/dialogs/tableCell.js create mode 100644 plugins/templates/dialogs/templates.js create mode 100644 plugins/templates/templates/default.js create mode 100644 plugins/templates/templates/images/template1.gif create mode 100644 plugins/templates/templates/images/template2.gif create mode 100644 plugins/templates/templates/images/template3.gif create mode 100644 plugins/uicolor/dialogs/uicolor.js create mode 100644 plugins/uicolor/lang/en.js create mode 100644 plugins/uicolor/lang/he.js create mode 100644 plugins/uicolor/plugin.js create mode 100644 plugins/uicolor/uicolor.gif create mode 100644 plugins/uicolor/yui/assets/hue_bg.png create mode 100644 plugins/uicolor/yui/assets/hue_thumb.png create mode 100644 plugins/uicolor/yui/assets/picker_mask.png create mode 100644 plugins/uicolor/yui/assets/picker_thumb.png create mode 100644 plugins/uicolor/yui/assets/yui.css create mode 100644 plugins/uicolor/yui/yui.js create mode 100644 plugins/wsc/dialogs/ciframe.html create mode 100644 plugins/wsc/dialogs/tmpFrameset.html create mode 100644 plugins/wsc/dialogs/wsc.css create mode 100644 plugins/wsc/dialogs/wsc.js create mode 100644 plugins/xml/plugin.js create mode 100644 skins/kama/dialog.css create mode 100644 skins/kama/editor.css create mode 100644 skins/kama/icons.png create mode 100644 skins/kama/icons_rtl.png create mode 100644 skins/kama/images/dialog_sides.gif create mode 100644 skins/kama/images/dialog_sides.png create mode 100644 skins/kama/images/dialog_sides_rtl.png create mode 100644 skins/kama/images/mini.gif create mode 100644 skins/kama/images/noimage.png create mode 100644 skins/kama/images/sprites.png create mode 100644 skins/kama/images/sprites_ie6.png create mode 100644 skins/kama/images/toolbar_start.gif create mode 100644 skins/kama/skin.js create mode 100644 skins/kama/templates.css create mode 100644 skins/office2003/dialog.css create mode 100644 skins/office2003/editor.css create mode 100644 skins/office2003/icons.png create mode 100644 skins/office2003/icons_rtl.png create mode 100644 skins/office2003/images/dialog_sides.gif create mode 100644 skins/office2003/images/dialog_sides.png create mode 100644 skins/office2003/images/dialog_sides_rtl.png create mode 100644 skins/office2003/images/mini.gif create mode 100644 skins/office2003/images/noimage.png create mode 100644 skins/office2003/images/sprites.png create mode 100644 skins/office2003/images/sprites_ie6.png create mode 100644 skins/office2003/skin.js create mode 100644 skins/office2003/templates.css create mode 100644 skins/v2/dialog.css create mode 100644 skins/v2/editor.css create mode 100644 skins/v2/icons.png create mode 100644 skins/v2/icons_rtl.png create mode 100644 skins/v2/images/dialog_sides.gif create mode 100644 skins/v2/images/dialog_sides.png create mode 100644 skins/v2/images/dialog_sides_rtl.png create mode 100644 skins/v2/images/mini.gif create mode 100644 skins/v2/images/noimage.png create mode 100644 skins/v2/images/sprites.png create mode 100644 skins/v2/images/sprites_ie6.png create mode 100644 skins/v2/images/toolbar_start.gif create mode 100644 skins/v2/skin.js create mode 100644 skins/v2/templates.css create mode 100644 themes/default/theme.js diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..94d69cd --- /dev/null +++ b/.htaccess @@ -0,0 +1,24 @@ +# +# Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +# For licensing, see LICENSE.html or http://ckeditor.com/license +# + +# +# On some specific Linux installations you could face problems with Firefox. +# It could give you errors when loading the editor saying that some illegal +# characters were found (three strange chars in the beginning of the file). +# This could happen if you map the .js or .css files to PHP, for example. +# +# Those characters are the Byte Order Mask (BOM) of the Unicode encoded files. +# All FCKeditor files are Unicode encoded. +# + +AddType application/x-javascript .js +AddType text/css .css + +# +# If PHP is mapped to handle XML files, you could have some issues. The +# following will disable it. +# + +AddType text/xml .xml diff --git a/CHANGES.html b/CHANGES.html new file mode 100644 index 0000000..9cb20e6 --- /dev/null +++ b/CHANGES.html @@ -0,0 +1,1367 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Changelog — CKEditor</title> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <style type="text/css"> + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + + </style> +</head> +<body> + <h1> + CKEditor Changelog + </h1> + <h3> + CKEditor 3.6.1</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4556">#4556</a> : Initial support for HTML5 elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/6492">#6492</a> : The Find/Replace dialog window will now be populated with text selected in the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/7323">#7323</a> : New <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.uiElement.html#align">align</a></code> property in dialog window UI elements for field alignment.</li> + <li><a href="http://dev.ckeditor.com/ticket/6462">#6462</a> : A wider range of CSS length units (like pt and percentage) are now supported in related dialog window fields.</li> + <li><a href="http://dev.ckeditor.com/ticket/7911">#7911</a> : New Remove Anchor option is now available in the context menu.</li> + <li><a href="http://dev.ckeditor.com/ticket/7387">#7387</a> : Allow <code>styleDefinition</code> to be applied to a set of elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/4345">#4345</a> : A new <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#event:langLoaded">langLoaded</a></code> event added to <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html">CKEDITOR.editor</a></code> in order to make it possible to perform "by code" language updates.</li> + <li><a href="http://dev.ckeditor.com/ticket/7959">#7959</a> : The cursor will now blink in the first cell after a table is inserted.</li> + <li><a href="http://dev.ckeditor.com/ticket/7885">#7885</a> : New <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#removeMenuItem">editor::removeMenuItem</a></code> API for removing plugin context menu items introduced.</li> + <li><a href="http://dev.ckeditor.com/ticket/7991">#7991</a> : Introduce the <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.labeledElement.html#controlStyle">controlStyle</a></code> and <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.labeledElement.html#inputStyle">inputStyle</a></code> definitions to allow fine-grained controlling of dialog window element styles.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/7914">#7914</a> : <strong>ATTENTION!</strong> The signature for the <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setReadOnly">setReadOnly()</a></code> function has been changed, reversing the meaning of the parameter to be passed to it. Please make sure to update your code when upgrading.</li> + <li><a href="http://dev.ckeditor.com/ticket/7657">#7657</a> : Wrong margin mirroring when creating a list from RTL paragraphs.</li> + <li><a href="http://dev.ckeditor.com/ticket/7620">#7620</a> : A glitch in list pasting from Microsoft Word caused by broken child references when filtering.</li> + <li><a href="http://dev.ckeditor.com/ticket/7811">#7811</a> : [IE] Deleting table row throws a JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/6962">#6962</a> : Changed the <code>CKEDITOR.CTRL</code>, <code>CKEDITOR.SHIFT</code> and <code>CKEDITOR.ALT</code> constant values to avoid collision with any possible Unicode character.</li> + <li><a href="http://dev.ckeditor.com/ticket/6263">#6263</a> : Some table cell context menu options may be incorrectly disabled.</li> + <li><a href="http://dev.ckeditor.com/ticket/6247">#6247</a> : Focus is not restored properly after a drop-down menu is closed.</li> + <li><a href="http://dev.ckeditor.com/ticket/7334">#7334</a> : [IE7] Indentation style does not apply to RTL lists.</li> + <li><a href="http://dev.ckeditor.com/ticket/6845">#6845</a> : Spaces inside the URL field in the Link dialog window will now be removed.</li> + <li><a href="http://dev.ckeditor.com/ticket/7840">#7840</a> : [IE] Opening the Table Properties dialog window via the context menu causes a JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/7733">#7733</a> : Flash movies inserted with the Flash Properties dialog window are not displaying properly when injected into the page.</li> + <li><a href="http://dev.ckeditor.com/ticket/7837">#7837</a> : [IE<8] Inserting a page break results in an error.</li> + <li><a href="http://dev.ckeditor.com/ticket/7804">#7804</a> : The HTML5 <a href="http://www.w3.org/TR/html-markup/wbr.html"><code>wbr</code></a> tag is now recognized by the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/7867">#7867</a> : The file browser for the background image in the Document Properties plugin dialog window does not work.</li> + <li><a href="http://dev.ckeditor.com/ticket/7130">#7130</a> : The column resizer gripping area is invading adjacent table cells.</li> + <li><a href="http://dev.ckeditor.com/ticket/7844">#7844</a> : [FF] Calling <code>setData()</code> on a hidden editor caused editor not to display.</li> + <li><a href="http://dev.ckeditor.com/ticket/7860">#7860</a> : The BBCode plugin was stripping BBCode tags that were not implemented in the plugin, but from now on they will be handled as simple text.</li> + <li><a href="http://dev.ckeditor.com/ticket/7321">#7321</a> : [IE6] Contents inside the RTL fields in dialog windows are overflowing.</li> + <li><a href="http://dev.ckeditor.com/ticket/7323">#7323</a> : [IE Quirks] Some fields are not centered in the dialog window.</li> + <li><a href="http://dev.ckeditor.com/ticket/5955">#5955</a> : Editor accessibility issue with JAWS when a drop-down menu is placed as the first item in the toolbar.</li> + <li><a href="http://dev.ckeditor.com/ticket/6671">#6671</a> : [FF] Selection of an item from the Styles drop-down list is not refreshed after the style is removed.</li> + <li><a href="http://dev.ckeditor.com/ticket/7879">#7879</a> : The Style and Height/Width fields of the Table Properties dialog window are not synchronized.</li> + <li><a href="http://dev.ckeditor.com/ticket/7581">#7581</a> : [IE] The <em>Enter</em> key pressed at the end of a list item containing the <code>start</code> attribute crashes the browser.</li> + <li><a href="http://dev.ckeditor.com/ticket/7266">#7266</a> : Dialog window fields that did not pass validation are now ARIA-compatible with <code>aria-invalid</code>.</li> + <li><a href="http://dev.ckeditor.com/ticket/7742">#7742</a> : [WebKit] Indentation, alignment, and language direction are not applied on an empty document without the editor being in focus.</li> + <li><a href="http://dev.ckeditor.com/ticket/7801">#7801</a> : [Opera] Pasted paragraphs now split partially selected blocks.</li> + <li><a href="http://dev.ckeditor.com/ticket/6663">#6663</a> : Table caption that contains rich text is corrupted after an edit done with the Table Properties dialog window.</li> + <li><a href="http://dev.ckeditor.com/ticket/7893">#7893</a> : [WebKit, Opera, IE<8] It is impossible to link to anchors in the document.</li> + <li><a href="http://dev.ckeditor.com/ticket/7637">#7637</a> : Cursor position might in some cases cause problems after inserting a page break.</li> + <li><a href="http://dev.ckeditor.com/ticket/5314">#5314</a> : The <code>aria-selected</code> attribute is not removed when toolbar drop-down menu items are deselected.</li> + <li><a href="http://dev.ckeditor.com/ticket/7749">#7749</a> : Small check introduced to avoid issues with custom data processors and the <code>insertHtml</code> function.</li> + <li><a href="http://dev.ckeditor.com/ticket/7269">#7269</a> : [WebKit] Paste from Word is including the full <code>file://</code> URL path for anchor links.</li> + <li><a href="http://dev.ckeditor.com/ticket/7584">#7584</a> : Start number of the List dialog window now works with numbered list items.</li> + <li><a href="http://dev.ckeditor.com/ticket/6975">#6975</a> : [IE6, IE7] A definition list crashes Internet Explorer on HTML output.</li> + <li><a href="http://dev.ckeditor.com/ticket/7841">#7841</a> : Deleting a column with a cell deleted in one of the rows does not work.</li> + <li><a href="http://dev.ckeditor.com/ticket/7944">#7944</a> : The <em>Enter</em> key should not split or create new paragraphs inside caption elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/7639">#7639</a> : [IE9] Browser might crash when an object is selected in the document.</li> + <li><a href="http://dev.ckeditor.com/ticket/7847">#7847</a> : [IE8] Inserting an image with non-secure source in a HTTPS page breaks the dialog window.</li> + <li><a href="http://dev.ckeditor.com/ticket/7953">#7953</a> : [IE] Text selection lost after the browser context menu is opened.</li> + <li><a href="http://dev.ckeditor.com/ticket/5239">#5239</a> : Inconsistent focus behavior after closing a toolbar drop-down menu.</li> + <li><a href="http://dev.ckeditor.com/ticket/6470">#6470</a> : The Start attribute of a Numbered List is rendered incorrectly if the field is left empty.</li> + <li><a href="http://dev.ckeditor.com/ticket/7324">#7324</a> : [IE6 Quirks] Context menus are not displayed correctly.</li> + <li><a href="http://dev.ckeditor.com/ticket/7566">#7566</a> : BiDi: Increasing indentation of a list item changes the language direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/7839">#7839</a> : [IE] Pasting multi-level numbered lists from Microsoft Word does not work properly.</li> + <li><a href="http://dev.ckeditor.com/ticket/188">#188</a> : [IE] Object selection was making the toolbar inactive in some situations.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/7834">#7834</a> : Dutch;</li> + <li><a href="http://dev.ckeditor.com/ticket/7869">#7869</a>, <a href="http://dev.ckeditor.com/ticket/7869">#7999</a> : Welsh;</li> + <li>Polish;</li> + <li>Hebrew;</li> + <li>German</li> + </ul></li> + </ul> + <h3> + CKEditor 3.6</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/7044">#7044</a> : New BBCode sample plugin that makes the editor output (one dialect of) BBCode format.</li> + <li><a href="http://dev.ckeditor.com/ticket/5647">#5647</a> : Accessibility enhancements to the structure of the toolbar.</li> + <li><a href="http://dev.ckeditor.com/ticket/5647">#5647</a> : The Kama skin now presents separators for the toolbar items, making it easier to group buttons and have a cleaner layout.</li> + <li><a href="http://dev.ckeditor.com/ticket/5647">#5647</a> : Usability enhancements to keyboard navigation on the toolbar. The <em>Tab</em> key is now used to jump between toolbar groups, while the <em>Arrow</em> keys can be used to cycle within the group. The new <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.toolbarGroupCycling">toolbarGroupCycling</a></code> setting can be used to change the <em>Arrow</em> keys behavior.</li> + <li><a href="http://dev.ckeditor.com/ticket/1376">#1376</a> : It is now possible to put the editor in the "read-only" state, so that the users would not be able to introduce changes to the contents. Check out the new <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setReadOnly">CKEDITOR.editor::setReadOnly</a></code> method, the <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#readOnly">CKEDITOR.editor::readOnly</a></code> property, the <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#event:readOnly">CKEDITOR.editor::readOnly</a></code> event, and the <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.readOnly">readOnly</a></code> setting.</li> + <li><a href="http://dev.ckeditor.com/ticket/3582">#3582</a> : New presentation of anchor elements in the WYSIWYG mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/6737">#6737</a> : The Format drop-down list will now display the preview of its contents exactly as defined in their style configurations.</li> + <li><a href="http://dev.ckeditor.com/ticket/6654">#6654</a> : A new <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.autoParagraph">autoParagraph</a></code> configuration setting is added to disable the auto paragraphing feature.</li> + <li><a href="http://dev.ckeditor.com/ticket/901">#901</a> : New Stylesheet Parser (<code>stylesheetparser</code>) plugin that fills the Styles drop-down list based on the CSS classes available for the content. Check the new sample to learn how to use it.</li> + <li><a href="http://dev.ckeditor.com/ticket/2988">#2988</a> : New Document Properties (<code>docprops</code>) plugin that sets the metadata of the page in the Full Page mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/7240">#7240</a> : New Developer Tools (<code>devtools</code>) plugin that shows information about dialog window UI elements to allow for easier customization.</li> + <li><a href="http://dev.ckeditor.com/ticket/6841">#6841</a> : Pressing the <em>Enter</em> key at the end of a pre-formatted block will now exit from it.</li> + <li><a href="http://dev.ckeditor.com/ticket/6850">#6850</a> : The About CKEditor dialog window now contains a link to CKEditor User's Guide.</li> + <li><a href="http://dev.ckeditor.com/ticket/5745">#5745</a> : Extra configuration options for the <code>iframeDialog</code> can now be passed.</li> + <li><a href="http://dev.ckeditor.com/ticket/6589">#6589</a> : The <code>onDialogEvent</code> function will now be used automatically in the <code>iframeDialog</code> contents if no callback is used on creation.</li> + <li><a href="http://dev.ckeditor.com/ticket/7757">#7757</a> : Georgian localization added.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/6774">#6774</a> : Internal styles are not included in the <code>contents.css</code> sample.</li> + <li><a href="http://dev.ckeditor.com/ticket/6521">#6521</a> : Added sample for the TableResize plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/6664">#6664</a> : Page break is sometimes merged into block-level elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/7594">#7594</a> : Toolbar keyboard navigation is not possible after recreating the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6657">#6657</a> : Allow to style the entire dialog window field when the input element is disabled.</li> + <li>Updated the following language files:<ul> + <li>Hebrew;</li> + <li>Polish;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.5.4</h3> + <p> + Fixed issues:</p> + <ul> + <li>Added protection against XSS attacks in PHP samples when displaying element names.</li> + <li><a href="http://dev.ckeditor.com/ticket/7347">#7347</a> : The <em>Enter</em> key will no longer be caught by the dialog window covering the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6718">#6718</a> : Paste from Word command overrides the Force Paste as Plain Text configuration.</li> + <li><a href="http://dev.ckeditor.com/ticket/6629">#6629</a> : Padding body is no longer needed when the last block is pre-formatted.</li> + <li><a href="http://dev.ckeditor.com/ticket/4844">#4844</a> : [IE] Dialog windows fail to load if there are too many editor instances on the page.</li> + <li><a href="http://dev.ckeditor.com/ticket/5788">#5788</a> : HTML parser trims empty spaces following <code><br></code> elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/7513">#7513</a> : Invalid markup could cause the editor to hang.</li> + <li><a href="http://dev.ckeditor.com/ticket/6109">#6109</a> : Paste and Paste as Plain Text dialog windows now use the standard <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.html#commitContent">commitContent</a></code> and <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.html#setupContent">setupContent</a></code> methods.</li> + <li><a href="http://dev.ckeditor.com/ticket/7588">#7588</a> : The editor code now has a protection system to avoid issues when including <code>ckeditor.js</code> more than once in the page.</li> + <li><a href="http://dev.ckeditor.com/ticket/7322">#7322</a> : Text font plugin now recognizes font family names that contain quotes.</li> + <li><a href="http://dev.ckeditor.com/ticket/7540">#7540</a> : Paste from Word introduces wrong spaces.</li> + <li><a href="http://dev.ckeditor.com/ticket/7697">#7697</a> : Successive calls of the <code>replace()</code> method did not work after SCAYT context menu initialization.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/7647">#7647</a> : Slovak;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.5.3</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4890">#4890</a> : Added the possibility to edit the <code>rel</code> attribute for links.</li> + <li><a href="http://dev.ckeditor.com/ticket/7004">#7004</a> : Allow loading plugin translations even if they are not present in the plugin definition.</li> + <li><a href="http://dev.ckeditor.com/ticket/7315">#7315</a> : Firing the <code>resize</code> event on dialog window instances is now possible.</li> + <li><a href="http://dev.ckeditor.com/ticket/7259">#7259</a> : Dialog window definition allows to specify initial <code>width</code> and <code>height</code> values.</li> + <li><a href="http://dev.ckeditor.com/ticket/7131">#7131</a> : List item numbering is now supported on pasting from Microsoft Word.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/1272">#1272</a> : [WebKit] It is now possible to apply styles to collapsed selections in Safari and Chrome.</li> + <li><a href="http://dev.ckeditor.com/ticket/7054">#7054</a> : The tooltips for special characters are now lowercased, making them more readable.</li> + <li><a href="http://dev.ckeditor.com/ticket/7102">#7102</a> : "Replace DIV" sample did not work when double-clicking inside the formatted text.</li> + <li><a href="http://dev.ckeditor.com/ticket/7088">#7088</a> : Loading of plugins failed on new instances of the editor after the Insert Special Character dialog window was used.</li> + <li><a href="http://dev.ckeditor.com/ticket/6215">#6215</a> : Removal of inline styles now also removes overrides.</li> + <li><a href="http://dev.ckeditor.com/ticket/6144">#6144</a> : Rich text drop-down lists have wrong height when toolbar is wrapped.</li> + <li><a href="http://dev.ckeditor.com/ticket/6387">#6387</a> : AutoGrow may cause an error when editor instance is destroyed too quickly after a height change.</li> + <li><a href="http://dev.ckeditor.com/ticket/6901">#6901</a> : Mixed direction content was not properly respected in a shared toolbar setting.</li> + <li><a href="http://dev.ckeditor.com/ticket/4809">#4809</a> : Table-related tags are output in wrong order.</li> + <li><a href="http://dev.ckeditor.com/ticket/7092">#7092</a> : Corrupted toolbar button state for inline style after switching to Source.</li> + <li><a href="http://dev.ckeditor.com/ticket/6921">#6921</a> : Pasted text marked by SCAYT in one language is not re-checked if another spellchecking language is selected in the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6614">#6614</a> : Enhancement of the resize handle in RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/5924">#5924</a> : Flash plugin now recognizes Flash content without an <code>embed</code> tag.</li> + <li><a href="http://dev.ckeditor.com/ticket/4475">#4475</a> : Protected source in attributes and inline CSS text is not handled correctly.</li> + <li><a href="http://dev.ckeditor.com/ticket/6984">#6984</a> : [FF] Trailing line breaks are lost in <code>ENTER_BR</code>.</li> + <li><a href="http://dev.ckeditor.com/ticket/6987">#6987</a> : [IE] Text selection lost when calling <code>editor::insertHtml</code> from a dialog window in some situations.</li> + <li><a href="http://dev.ckeditor.com/ticket/6865">#6865</a> : BiDi mirroring does not work when a text direction change is done through a dialog window.</li> + <li><a href="http://dev.ckeditor.com/ticket/6966">#6966</a> : [IE] Unintended paragraph is created in an empty document in <code>enterMode</code> set for <code>BR</code> and <code>DIV</code>.</li> + <li><a href="http://dev.ckeditor.com/ticket/7084">#7084</a> : SCAYT dialog window is now working properly with more than one editor instance in a page.</li> + <li><a href="http://dev.ckeditor.com/ticket/6662">#6662</a> : [FF] List structure pasting error caused by a regression from FF3.5.x is now fixed.</li> + <li><a href="http://dev.ckeditor.com/ticket/7300">#7300</a> : Link dialog window now loads numeric values correctly.</li> + <li><a href="http://dev.ckeditor.com/ticket/7330">#7330</a> : New list items no longer inherit the <code>value</code> attribute from their sibling.</li> + <li><a href="http://dev.ckeditor.com/ticket/7293">#7293</a> : The "Automatic" color button is now presented correctly without focus inside the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/7018">#7018</a> : [IE] Toolbar drop-down lists did not have a border around them.</li> + <li><a href="http://dev.ckeditor.com/ticket/7073">#7073</a> : Image dialog window no longer allows zero height and width value to be entered.</li> + <li><a href="http://dev.ckeditor.com/ticket/7316">#7316</a> : [FF] Clicking on "Paste" button incorrectly breaks the line at the cursor position.</li> + <li><a href="http://dev.ckeditor.com/ticket/6751">#6751</a> : Inline whitespaces are incorrectly stripped when pasting from Word.</li> + <li><a href="http://dev.ckeditor.com/ticket/6236">#6236</a> : [IE] Fixing malformed nested list structure which was introduced by the <em>Backspace</em> key.</li> + <li><a href="http://dev.ckeditor.com/ticket/6649">#6649</a> : [IE] Selection of the full table sometimes does not work.</li> + <li><a href="http://dev.ckeditor.com/ticket/6946">#6946</a> : HTML parser is now able to fix orphan list items.</li> + <li><a href="http://dev.ckeditor.com/ticket/6861">#6861</a> : Indenting a list item should retain the text direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/6938">#6938</a> : Outdenting a list item should retain the text direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/6849">#6849</a> : Correct <em>Enter</em> key behavior on list item.</li> + <li><a href="http://dev.ckeditor.com/ticket/7113">#7113</a> : [WebKit] Undesired document scroll on click after scrolling.</li> + <li><a href="http://dev.ckeditor.com/ticket/6491">#6491</a> : Undesired Image dialog window dimension lock reset on URL change.</li> + <li><a href="http://dev.ckeditor.com/ticket/7284">#7284</a> : [FF Quirks] Maximize now works correctly.</li> + <li><a href="http://dev.ckeditor.com/ticket/6609">#6609</a> : [IE9] Browser in high contrast mode is not properly detected.</li> + <li><a href="http://dev.ckeditor.com/ticket/7222">#7222</a> : [WebKit] Impossible to apply a single style to a collapsed selection without giving the editor focus.</li> + <li><a href="http://dev.ckeditor.com/ticket/7180">#7180</a> : [IE9] When using Kama skin and RTL layout dialog window buttons were not being displayed correctly.</li> + <li><a href="http://dev.ckeditor.com/ticket/7182">#7182</a> : [IE9] When using Office2003/v2 skin and RTL layout dialog window shadows were corrupted.</li> + <li><a href="http://dev.ckeditor.com/ticket/6913">#6913</a> : Invalid escape sequence (<code>\b</code>) was used in the PHP integration.</li> + <li><a href="http://dev.ckeditor.com/ticket/5757">#5757</a> : [IE6] Text was not wrapping in the accessibility instructions dialog window.</li> + <li><a href="http://dev.ckeditor.com/changeset/6604">[6604]</a> : <code>Xml.js</code> and <code>Ajax.js</code> are now available as plugins ('xml' and 'ajax').</li> + <li><a href="http://dev.ckeditor.com/ticket/7304">#7304</a> : Microsoft Word cleanup function is not always invoked when clicking on the "Paste From Word" button.</li> + <li><a href="http://dev.ckeditor.com/ticket/6658">#6658</a> : [IE] Pasting text from Microsoft Word with one or more tabs between list items was failing.</li> + <li><a href="http://dev.ckeditor.com/ticket/7433">#7433</a> : [IE9] <code>ENTER_BR</code> at the end of a block breaks due to an IE9 regression.</li> + <li><a href="http://dev.ckeditor.com/ticket/7432">#7432</a> : [WebKit] Unable to create a new list in an empty document.</li> + <li><a href="http://dev.ckeditor.com/ticket/4880">#4880</a> : CKEditor changes tag style inside HTML comment with <code>cke_protected</code>.</li> + <li><a href="http://dev.ckeditor.com/ticket/7023">#7023</a> : [IE] JavaScript error when a Selection Field is inserted into a page.</li> + <li><a href="http://dev.ckeditor.com/ticket/7034">#7034</a> : Inserting special characters into styled text.</li> + <li><a href="http://dev.ckeditor.com/ticket/7132">#7132</a> : Paste toolbar buttons are becoming disabled.</li> + <li><a href="http://dev.ckeditor.com/ticket/7138">#7138</a> : The <code>api.html</code> sample in Opera does not work as expected.</li> + <li><a href="http://dev.ckeditor.com/ticket/7160">#7160</a> : Cannot paste the form element on top of the page.</li> + <li><a href="http://dev.ckeditor.com/ticket/7171">#7171</a> : Double-clicking an image in non-editable content opens the editing dialog window.</li> + <li><a href="http://dev.ckeditor.com/ticket/7455">#7455</a> : Extra line break is added automatically to the preformatted element.</li> + <li><a href="http://dev.ckeditor.com/ticket/7467">#7467</a> : [Firefox] Extra <code>br</code> element is added in a nested list.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/7124">#7124</a> : Czech;</li> + <li><a href="http://dev.ckeditor.com/ticket/7126">#7126</a> : French;</li> + <li><a href="http://dev.ckeditor.com/ticket/7140">#7140</a> : Catalan;</li> + <li><a href="http://dev.ckeditor.com/ticket/7215">#7215</a> : Faroese;</li> + <li><a href="http://dev.ckeditor.com/ticket/7177">#7177</a> : Finnish;</li> + <li><a href="http://dev.ckeditor.com/ticket/7163">#7163</a> : Norwegian (no and nb);</li> + <li><a href="http://dev.ckeditor.com/ticket/7219">#7219</a> : Swedish;</li> + <li><a href="http://dev.ckeditor.com/ticket/7183">#7183</a> : Afrikaans;</li> + <li>Hebrew;</li> + <li>Spanish;</li> + <li>Polish;</li> + <li>German;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.5.2</h3> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/7168">#7168</a> : [IE9] Destroying an editor instance throws an error.</li> + <li><a href="http://dev.ckeditor.com/ticket/7169">#7169</a> : [IE9] Menu item has incorrect height.</li> + <li><a href="http://dev.ckeditor.com/ticket/7178">#7178</a> : [IE9] Read-only attributes do not work in IE9.</li> + <li><a href="http://dev.ckeditor.com/ticket/7181">#7181</a> : [IE9] Toolbar items are not aligned in v2 and Office2003 skins.</li> + <li><a href="http://dev.ckeditor.com/ticket/7174">#7174</a> : [IE9] Elements path does not load correctly when the editor is switched back from Source to WYSIWYG.</li> + </ul> + <h3> + CKEditor 3.5.1</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/6107">#6107</a> : It is now possible to remove block styles using Styles and Paragraph Format drop-down lists.</li> + <li><a href="http://dev.ckeditor.com/ticket/5590">#5590</a> : Remove Format command works in collapsed selections.</li> + <li><a href="http://dev.ckeditor.com/ticket/5755">#5755</a> : The <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.dialog_buttonsOrder">dialog_buttonsOrder</a></code> option now works in Internet Explorer.</li> + <li><a href="http://dev.ckeditor.com/ticket/6869">#6869</a> : The <code>data-cke-nostyle</code> attribute (which was introduced for escaping the element from been influenced by the style system since 3.5) is deprecated in favor of the new <code>data-nostyle</code> attribute.</li> + <li>Revised sample pages with code examples and clarifications.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5855">#5855</a> : Updating a link multiple times generates wrong <code>href</code> attribute.</li> + <li><a href="http://dev.ckeditor.com/ticket/6166">#6166</a> : Error on Maximize command, when the toolbar button is not shown.</li> + <li><a href="http://dev.ckeditor.com/ticket/6607">#6607</a> : Table cell "merge down" and "merge right" commands work only once.</li> + <li><a href="http://dev.ckeditor.com/ticket/6228">#6228</a> : Merge down does not work, throwing a JavasSript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/6625">#6625</a> : BIDI: Mixed LTR/RTL direction causes incorrect behavior.</li> + <li><a href="http://dev.ckeditor.com/ticket/6881">#6881</a> : IFrame capitalization is now consistent throughout labels.</li> + <li><a href="http://dev.ckeditor.com/ticket/6686">#6686</a> : BIDI: [FF] When we apply explicit language direction to a numbered/bulleted list, the corresponding language direction toolbar icon is not highlighted.</li> + <li><a href="http://dev.ckeditor.com/ticket/6566">#6566</a> : It is now possible to exit a blockquote using <code>ENTER_BR</code>.</li> + <li><a href="http://dev.ckeditor.com/ticket/6868">#6868</a> : Partial (invalid) list structure crashes the editor on load.</li> + <li><a href="http://dev.ckeditor.com/ticket/6804">#6804</a> : Buggy behavior when editing the <code>legend</code> element inside a <code>fieldset</code>.</li> + <li><a href="http://dev.ckeditor.com/ticket/6724">#6724</a> : [IE7] Nested list display bug on empty list item.</li> + <li><a href="http://dev.ckeditor.com/ticket/6715">#6715</a> : List items do not create paragraphs after the list placed in a table cell is removed.</li> + <li><a href="http://dev.ckeditor.com/ticket/6695">#6695</a> : [Webkit] Display bug after the editor is restored from the full screen mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/6661">#6661</a> : [IE] Pre-formatted style does not preserve applied text direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/6655">#6655</a> : Using the editor resize grip causes small visual offsets.</li> + <li><a href="http://dev.ckeditor.com/ticket/6604">#6604</a> : The <code>div</code> element should be used as a formatting block in <code>ENTER_BR</code>.</li> + <li><a href="http://dev.ckeditor.com/ticket/6249">#6249</a> : BIDI: List item bullets are off viewport with RTL text direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/6610">#6610</a> : BIDI: <code>ENTER_BR</code> change direction in one line out of multiple.</li> + <li><a href="http://dev.ckeditor.com/ticket/6872">#6872</a> : [IE] Link target field is not populated properly when no target is set.</li> + <li><a href="http://dev.ckeditor.com/ticket/6880">#6880</a> : Samples: Added a user-friendly message for users on servers without PHP support.</li> + <li><a href="http://dev.ckeditor.com/ticket/6628">#6628</a> : Setting <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">config.enterMode</a></code> from PHP fails.</li> + <li><a href="http://dev.ckeditor.com/ticket/6278">#6278</a> : Comments were moved above the <code>br</code> tags.</li> + <li><a href="http://dev.ckeditor.com/ticket/6687">#6687</a> : Empty tag should be removed in inline-style format.</li> + <li><a href="http://dev.ckeditor.com/ticket/6645">#6645</a> : Allow to configure whether " (double quotes) characters should be encoded in the contents.</li> + <li><a href="http://dev.ckeditor.com/ticket/6336">#6336</a> : IE: (double)clicking an <code>input type="submit"</code> button submitted the form.</li> + <li><a href="http://dev.ckeditor.com/ticket/6646">#6646</a> : Context menu was not working for text inputs present in the initial content.</li> + <li><a href="http://dev.ckeditor.com/ticket/6641">#6641</a> : Copying and pasting links inside the editor was not working.</li> + <li><a href="http://dev.ckeditor.com/ticket/4208">#4208</a> : The <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.disableObjectResizing">disableObjectResizing</a></code> setting now works in IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/6242">#6242</a> : [IE] Editing existing links with <code>href</code> of a relative path mangles containing text.</li> + <li><a href="http://dev.ckeditor.com/ticket/5930">#5930</a> : [IE] Style definitions are no longer lowercased.</li> + <li><a href="http://dev.ckeditor.com/ticket/5361">#5361</a> : Preview window's title should reflect the title tag in full page mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/5522">#5522</a> : [IE] In versions < 8 or compatibility mode, <code>type="text"</code> was missing in text fields.</li> + <li><a href="http://dev.ckeditor.com/ticket/6126">#6126</a> : [IE] Avoid problems if there are two buttons named "submit".</li> + <li><a href="http://dev.ckeditor.com/ticket/6791">#6791</a> : [IE7] Editor did not show up when the name of a replaced textarea matched the name of a <code>meta</code> tag in the page.</li> + <li><a href="http://dev.ckeditor.com/ticket/5684">#5684</a> : [FF] When <code><a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.forcePasteAsPlainText">forcePasteAsPlainText</a></code> is used, the cursor disappears after paste.</li> + <li><a href="http://dev.ckeditor.com/ticket/6390">#6390</a> : Prevent toolbar dialog window buttons from being clicked twice.</li> + <li><a href="http://dev.ckeditor.com/ticket/6684">#6684</a> : [Webkit] Toolbar buttons are not wrapping correctly when the editor is displayed inside a table.</li> + <li><a href="http://dev.ckeditor.com/ticket/6703">#6703</a> : [IE] editor <code>focus</code> event not fired in an instance, when a dialog window closes.</li> + <li><a href="http://dev.ckeditor.com/ticket/6873">#6873</a> : Difficult to drag the resize grip of the spell checker dialog window.</li> + <li><a href="http://dev.ckeditor.com/ticket/6896">#6896</a> : [Webkit] Unable to paste into source area when the editor is maximized.</li> + <li><a href="http://dev.ckeditor.com/ticket/6020">#6020</a> : The state of the Cut, Copy, and Paste toolbar now matches the state of the context menu buttons.</li> + <li><a href="http://dev.ckeditor.com/ticket/5256">#5256</a> : JavaScript error thrown when percent (%) sign is used in image URL.</li> + <li><a href="http://dev.ckeditor.com/ticket/6577">#6577</a> : [FF] Selection error when an element containing the editor instance is hidden.</li> + <li><a href="http://dev.ckeditor.com/ticket/5500">#5500</a> : [IE] <code>value</code> attribute of text input dialog window field was missing.</li> + <li><a href="http://dev.ckeditor.com/ticket/6665">#6665</a> : [IE] <code>name</code> field of Link dialog window was missing.</li> + <li><a href="http://dev.ckeditor.com/ticket/6639">#6639</a> : Line-breaks inside pasted list item from Microsoft Word break the list structure.</li> + <li><a href="http://dev.ckeditor.com/ticket/6909">#6909</a> : [IE] GIF icons of toolbar button from custom plugins are not diplayed in zoom level 100%.</li> + <li><a href="http://dev.ckeditor.com/ticket/6860">#6860</a> : [FF] Double-clicking the placeholder element in order to open a Placeholder dialog window throws a JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/6630">#6630</a> : Empty <code>pre</code> elements are output differently in various browsers.</li> + <li><a href="http://dev.ckeditor.com/ticket/6568">#6568</a> : Insert table row/column does not work with spanning.</li> + <li><a href="http://dev.ckeditor.com/ticket/6735">#6735</a> : Inaccurate read-only selection detection.</li> + <li><a href="http://dev.ckeditor.com/ticket/6728">#6728</a> : BIDI: Change direction does not work with list nested inside a blockquote.</li> + <li><a href="http://dev.ckeditor.com/ticket/6432">#6432</a> : Inserting a table in place of a fully selected list results in a JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/6438">#6438</a> : [IE] Performance enhancement when typing inside an element with many child nodes.</li> + <li><a href="http://dev.ckeditor.com/ticket/6970">#6970</a> : [IE] Dialog window shadows were presented inaccurately.</li> + <li><a href="http://dev.ckeditor.com/ticket/6672">#6672</a> : [IE] Unnecessary <code>br</code> element is no longer inserted after a form.</li> + <li><a href="http://dev.ckeditor.com/ticket/7087">#7087</a> : [FF] Sometimes it was not possible to move cursor out of link at the end of block.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/6981">#6981</a> : English (GB);</li> + <li><a href="http://dev.ckeditor.com/ticket/6991">#6991</a> : Finnish;</li> + <li><a href="http://dev.ckeditor.com/ticket/6357">#6357</a> : French;</li> + <li><a href="http://dev.ckeditor.com/ticket/7055">#7055</a> : Polish;</li> + <li><a href="http://dev.ckeditor.com/ticket/7068">#7068</a> : German;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.5</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4090">#4090</a> : Full Adobe AIR support.</li> + <li><a href="http://dev.ckeditor.com/ticket/5084">#5084</a> : Dialog windows are now resizable with a grip located in the footer.</li> + <li><a href="http://dev.ckeditor.com/ticket/5755">#5755</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.dialog_buttonsOrder">dialog_buttonsOrder</a> setting, making it possible to control the buttons order.</li> + <li><a href="http://dev.ckeditor.com/ticket/4648">#4648</a> : Added the new iFrame plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/6010">#6010</a> : The Automatic option of the font/background color panel now represents the real color.</li> + <li><a href="http://dev.ckeditor.com/ticket/5654">#5654</a> : New "placeholder" plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/6334">#6334</a> : CKEditor now uses <a href="http://www.w3.org/TR/2010/WD-html5-20101019/elements.html#embedding-custom-non-visible-data-with-the-data-attributes">HTML5's data-* attributes</a> for its internal attributes.</li> + <li><a href="http://dev.ckeditor.com/ticket/6103">#6103</a> : It's now possible to control the styling of inline read-only elements with the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.disableReadonlyStyling">disableReadonlyStyling</a> setting. It's also possible to avoid inline-styling any element by setting its "data-cke-nostyle" attribute to "1".</li> + <li><a href="http://dev.ckeditor.com/ticket/5404">#5404</a> : <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.fillEmptyBlocks">fillEmptyBlocks</a> configuration option of v2 is now available.</li> + <li><a href="http://dev.ckeditor.com/ticket/5367">#5367</a> : New <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#insertText">CKEDITOR.editor#insertText</a> method (check api.html sample page for usages) is now provided to insert plain text into editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/5367">#5915</a> : New <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.removeDialogTabs">removeDialogTabs</a> configuration option to hide certain dialog tabs.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4821">#4821</a> : Icons in the toolbar were distorted with IE and zoom != 100%.</li> + <li><a href="http://dev.ckeditor.com/ticket/5587">#5587</a> : Visual improvements in dialogs, reinforce field label on separate line.</li> + <li><a href="http://dev.ckeditor.com/ticket/4652">#4652</a> : Now it's able to disable editor context menu by simply removing the "contextmenu" plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/5599">#5599</a> : Labels of "specialchar" dialog are now translated.</li> + <li><a href="http://dev.ckeditor.com/ticket/6419">#6419</a> : [IE] List creation by merging problem.</li> + <li><a href="http://dev.ckeditor.com/ticket/6502">#6502</a> : Removed IE6 image preloading, which was used to defect the duplicate request of background images.</li> + <li><a href="http://dev.ckeditor.com/ticket/6822">#6822</a> : Added labels to fake objects.</li> + <li><a href="http://dev.ckeditor.com/ticket/6898">#6898</a> : [IE6] Toolbar icons becomes invisible in RTL.</li> + <li>Updated the following language files:<ul> + <li>Hebrew</li> + </ul></li> + </ul> + <h3> + CKEditor 3.4.3</h3> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/6554">#6554</a> : [Webkit] cannot type after inserting Page Break.</li> + <li><a href="http://dev.ckeditor.com/ticket/6569">#6569</a> : Indentation now complies with text direction of the only item.</li> + <li><a href="http://dev.ckeditor.com/ticket/6579">#6579</a> : The jQuery adapter was not working properly and was turned on in incompatible environments.</li> + <li><a href="http://dev.ckeditor.com/ticket/6644">#6644</a> : Restrict <code>onmousedown</code> handler to the toolbar area.</li> + <li><a href="http://dev.ckeditor.com/ticket/6656">#6656</a> : Panelbutton's buttons became active when clicking on Source.</li> + <li><a href="http://dev.ckeditor.com/ticket/6248">#6248</a> : Whitespaces (<code>nbsp</code> elements) were incorrectly added into empty table cells and list items.</li> + <li><a href="http://dev.ckeditor.com/ticket/6575">#6575</a> : Tabs disappearing in Link dialog window after a specific sequence of actions.</li> + <li><a href="http://dev.ckeditor.com/ticket/6510">#6510</a> : Margin mirroring does not respect style configuration.</li> + <li><a href="http://dev.ckeditor.com/ticket/6471">#6471</a> : BIDI: Pressing Decrease Indent in an RTL bulleted list causes incorrect behaviour.</li> + <li><a href="http://dev.ckeditor.com/ticket/6479">#6479</a> : BIDI: Language direction is not being preserved when pressing Enter after a Paragraph Format was applied.</li> + <li><a href="http://dev.ckeditor.com/ticket/6670">#6670</a> : BIDI: Indent & List icons are not reversed when we apply RTL direction to a paragraph with any of Paragraph Formatting options.</li> + <li><a href="http://dev.ckeditor.com/ticket/6640">#6640</a> : Floating panels are now being closed when switching modes.</li> + <li><a href="http://dev.ckeditor.com/ticket/4790">#4790</a> : Remove list with multiple items in <code>enterBr</code> doesnot preserve line breaks.</li> + <li><a href="http://dev.ckeditor.com/ticket/6297">#6297</a> : Floated inline elements are not taking part in behavior of blocks anymore.</li> + <li><a href="http://dev.ckeditor.com/ticket/6171">#6171</a> : [Firefox] Opening rich content drop-down list scrolls host page to the top when editor has a vertical scrollbar.</li> + <li><a href="http://dev.ckeditor.com/ticket/6330">#6330</a> : List markers from MS Word with Roman numbering are not preserved.</li> + <li><a href="http://dev.ckeditor.com/ticket/6720">#6720</a> : Attribute protection might detect wrong elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/6580">#6580</a> : [IE9] Flash dialog window does not get filled up.</li> + <li><a href="http://dev.ckeditor.com/ticket/6447">#6447</a> : Decreasing indentation of a list with <code>indentClasses</code> config does not work.</li> + <li><a href="http://dev.ckeditor.com/ticket/5894">#5894</a> : Adding custom buttons at the bottom of a dialog window does not cause it to expand to include its contents.</li> + <li><a href="http://dev.ckeditor.com/ticket/6513">#6513</a> : Wrong ARIA attributes created on list options of Styles drop-down list.</li> + <li><a href="http://dev.ckeditor.com/ticket/6150">#6150</a> : [Safari] Color dialog window was broken.</li> + <li><a href="http://dev.ckeditor.com/ticket/6747">#6747</a> : Full screen layout issue caused by page element focus outside editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6779">#6779</a> : Clicking the <code>body</code> element on elements path turns the selection on and off immediately.</li> + <li><a href="http://dev.ckeditor.com/ticket/6781">#6781</a> : [IE7] Dialog windows are broken with RTL, Office 2003 and v2 skins.</li> + <li><a href="http://dev.ckeditor.com/ticket/6798">#6798</a> : [IE7] Dialog window buttons disappearing in RTL after dragging.</li> + <li><a href="http://dev.ckeditor.com/ticket/6806">#6806</a> : [IE7] Dialog window buttons invisible on focus.</li> + <li><a href="http://dev.ckeditor.com/ticket/6588">#6588</a> : Copy and paste adds <code><span></code> if SCAYT is enabled.</li> + <li><a href="http://dev.ckeditor.com/ticket/6673">#6673</a> : IE Target combo for Image Link shown as blank even when we select <code><not set></code> as an option.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/6756">#6756</a> : Hungarian;</li> + <li><a href="http://dev.ckeditor.com/ticket/6794">#6794</a> : Japanese;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.4.2</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added a sample that shows how to output HTML that is valid for Flash.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5237">#5237</a> : English text in dialogs' title was flipped when using RTL language (office2003 and v2 skins).</li> + <li><a href="http://dev.ckeditor.com/ticket/6289">#6289</a> : Deleting nested table removed the parent cell.</li> + <li><a href="http://dev.ckeditor.com/ticket/6341">#6341</a> : The editor contents now have the text cursor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6153">#6153</a> : Chrome: tab focus is wrong.</li> + <li><a href="http://dev.ckeditor.com/ticket/6261">#6261</a> : Focus and infinite loop between multiple editors.</li> + <li><a href="http://dev.ckeditor.com/ticket/6170">#6170</a> : Dedicated class names are removed from floating panels when opening another panel.</li> + <li><a href="http://dev.ckeditor.com/ticket/6339">#6339</a> : Autogrow plugin now doesn't work on maximized editors.</li> + <li><a href="http://dev.ckeditor.com/ticket/6237">#6237</a> : BIDI: Applying same language direction to all paragraphs not working.</li> + <li><a href="http://dev.ckeditor.com/ticket/6353">#6353</a> : [IE] Resize was broken with office2003 and v2 skins.</li> + <li><a href="http://dev.ckeditor.com/ticket/6375">#6375</a> : Avoiding errors when hiding the editor after the blur event.</li> + <li><a href="http://dev.ckeditor.com/ticket/6133">#6133</a> : Styled paragraphs result on buggy list creation.</li> + <li><a href="http://dev.ckeditor.com/ticket/5074">#5074</a> : Link target is not removed when changing to popup.</li> + <li><a href="http://dev.ckeditor.com/ticket/6408">#6408</a> : [IE] Autogrow now works correctly on Quirks.</li> + <li><a href="http://dev.ckeditor.com/ticket/6420">#6420</a> : [IE] The table properties dialog now correctly retrieves the caption text.</li> + <li><a href="http://dev.ckeditor.com/ticket/6141">#6141</a> : It was impossible to outdent a list when indentOffset was set to 0.</li> + <li><a href="http://dev.ckeditor.com/ticket/6377">#6377</a> : FF width and height are not shown for smiley in Image properties dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/5399">#5399</a> : Lists pasted from Word do not maintain their nesting.</li> + <li><a href="http://dev.ckeditor.com/ticket/6225">#6225</a> : [FF] Cannot transform several lines to list with enterMode BR.</li> + <li><a href="http://dev.ckeditor.com/ticket/6467">#6467</a> : [FF] It is now possible to disable the plugin command on "mode" event.</li> + <li><a href="http://dev.ckeditor.com/ticket/6461">#6461</a> : Attributes are now being kept when changing block formatting.</li> + <li><a href="http://dev.ckeditor.com/ticket/6226">#6226</a> : BIDI: Language direction applied to a Paragraph is removed when we apply one of Paragraph formatting options.</li> + <li><a href="http://dev.ckeditor.com/ticket/5395">#5395</a> : [Opera] Native context menu incorrectly opened after Opera 10.2.</li> + <li><a href="http://dev.ckeditor.com/ticket/6444">#6444</a> : [Opera] Close panels and dialogs don't return focus to wysiwyg frame.</li> + <li><a href="http://dev.ckeditor.com/ticket/6332">#6332</a> : IE: V2 skin bottom dialog's border broken.</li> + <li><a href="http://dev.ckeditor.com/ticket/5646">#5646</a> : Parser incorrectly removes inline element when there's only one comment node enclosed.</li> + <li><a href="http://dev.ckeditor.com/ticket/6189">#6189</a> : Minor code size reduction.</li> + <li><a href="http://dev.ckeditor.com/ticket/5045">#5045</a> : uiColor behaved wrong if multiple editors were used with period in their names.</li> + <li><a href="http://dev.ckeditor.com/ticket/5766">#5766</a> : Config entry "ignoreEmptyParagraph" should only remove one single empty paragraph in document.</li> + <li><a href="http://dev.ckeditor.com/ticket/5931">#5931</a> : Unable to apply inline style because of nested elements with same style name.</li> + <li><a href="http://dev.ckeditor.com/ticket/6083">#6083</a> : Dialog close sometimes cause collapsed editor selection before the insertion.</li> + <li><a href="http://dev.ckeditor.com/ticket/6253">#6253</a> : BIDI: creating a Numbered/Bulleted list causing improper behavior on bidi.</li> + <li><a href="http://dev.ckeditor.com/ticket/4023">#4023</a> : [Opera] Maximize plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/6403">#6403</a> : [Opera] Font name options are not correctly marked in dropdown list.</li> + <li><a href="http://dev.ckeditor.com/ticket/4534">#4534</a> : [Opera] Arrow key to navigate through combo list has side effects of window scrolling.</li> + <li><a href="http://dev.ckeditor.com/ticket/6534">#6534</a> : [Opera] Menu key brings up both CKEditor and browser context menu.</li> + <li><a href="http://dev.ckeditor.com/ticket/6534">#6534</a> : [Opera] Menu key brings up both CKEditor and browser context menu.</li> + <li><a href="http://dev.ckeditor.com/ticket/6416">#6416</a> : [IE9] Unable to make text selection with mouse in source area.</li> + <li><a href="http://dev.ckeditor.com/ticket/6417">#6417</a> : [IE9] Context menu opens at the upper-left corner always.</li> + <li><a href="http://dev.ckeditor.com/ticket/6501">#6501</a> : [IE9] Context menu item layout is broken.</li> + <li><a href="http://dev.ckeditor.com/ticket/6099">#6099</a> : BIDI: when we apply explicit language direction to Numbered/Bulleted List the corresponding BIDI Tool bar icon is not highlighted in the Toolbar.</li> + <li><a href="http://dev.ckeditor.com/ticket/6100">#6100</a> : BIDI: when we change Table language direction indentation of text in Table cells is not applied correctly.</li> + <li><a href="http://dev.ckeditor.com/ticket/6376">#6376</a> : BIDI: buttons should not toggle the base language direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/6235">#6235</a> : BIDI: Applying direction to multi-paragraph selection within a div.</li> + <li><a href="http://dev.ckeditor.com/ticket/6187">#6187</a> : [IE6] Multi-instance loading produces 404s on background images.</li> + <li><a href="http://dev.ckeditor.com/ticket/5446">#5446</a> : Setting config.filebrowserImageBrowseUrl results in displaying also Browser Server on links.</li> + <li><a href="http://dev.ckeditor.com/ticket/5626">#5626</a> : CKeditor 3.2.1 : html content attached makes ckeditor crash the browser FF/IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/6508">#6508</a> : BiDi: Margin mirroring logic doesn't honor CSS direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/6043">#6043</a> : BIDI: When we apply RTL direction to a right aligned Paragraph, Paragraph is not moved to the left & Alignment of Paragraph is not changed.</li> + <li><a href="http://dev.ckeditor.com/ticket/6485">#6485</a> : BIDI: When direction is applied on partial selected list, the style is been incorrectly applied to the entire list.</li> + <li><a href="http://dev.ckeditor.com/ticket/6087">#6087</a> : Cursor of input fields in dialog isn't visible in RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/5595">#5595</a> : Extra leading spaces added in preformatted block.</li> + <li><a href="http://dev.ckeditor.com/ticket/6094">#6094</a> : Match full word option doesn't stop on block boundaries.</li> + <li><a href="http://dev.ckeditor.com/ticket/5730">#5730</a> : [Safari] Continual pastes (holding paste key) breaks document contents.</li> + <li><a href="http://dev.ckeditor.com/ticket/5850">#5850</a> : [IE] Inline style misbehaviors at the beginning of numbered/bulleted list.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/6427">#6427</a> : Ukrainian;</li> + <li><a href="http://dev.ckeditor.com/ticket/6464">#6464</a> : Finnish;</li> + <li>Hebrew;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.4.1</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5308">#5308</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.filebrowserWindowFeatures">filebrowserWindowFeatures</a> setting, making it possible to have custom window features in the file browser window.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/6027">#6027</a> : Modifying Table Properties by selecting more than one cell caused issues.</li> + <li><a href="http://dev.ckeditor.com/ticket/6146">#6146</a> : IE: Floating panels were being opened in the wrong place in RTL pages with horizontal scrollbars.</li> + <li><a href="http://dev.ckeditor.com/ticket/6055">#6055</a> : The timestamp is now added only once to each loaded file.</li> + <li><a href="http://dev.ckeditor.com/ticket/6097">#6097</a> : The bookmarks now use the right name.</li> + <li><a href="http://dev.ckeditor.com/ticket/5717">#5717</a> : Removed the scayt_contextMenuOntop setting and the SCAYT context menu options are always on top.</li> + <li><a href="http://dev.ckeditor.com/ticket/5956">#5956</a> : [FF] It was impossible to create an editor inside an hidden container.</li> + <li><a href="http://dev.ckeditor.com/ticket/5753">#5753</a> : It was impossible to have a default value for the name field in the select dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/6041">#6041</a> : BIDI: Direction of Increase Indent & Decrease Indent icons are not reversed after changing Lang direction to RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/6138">#6138</a> : List indentation is not working.</li> + <li><a href="http://dev.ckeditor.com/ticket/5649">#5649</a> : Image dialog too wide when many styles are set.</li> + <li><a href="http://dev.ckeditor.com/ticket/5715">#5715</a> : Cell color picker dialog returns focus to document.</li> + <li><a href="http://dev.ckeditor.com/ticket/6108">#6108</a> : Fixed div style.</li> + <li><a href="http://dev.ckeditor.com/ticket/5336">#5336</a> : Remove object style.</li> + <li><a href="http://dev.ckeditor.com/ticket/6155">#6155</a> : [[FF]] Modifying Table Header Properties by selecting first Row, causing several issues.</li> + <li><a href="http://dev.ckeditor.com/ticket/6163">#6163</a> : Focus not going to Tabs in Image dialog when we went to Edit the Image.</li> + <li><a href="http://dev.ckeditor.com/ticket/6177">#6177</a> : IE we can't start Numbered/Bulleted list on a Empty page.</li> + <li><a href="http://dev.ckeditor.com/ticket/5413">#5413</a> : Browser error after pasting html table in CKEditor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6034">#6034</a> : Horizontal Alignment applied to Table cell is not updated correctly in the Toolbar.</li> + <li><a href="http://dev.ckeditor.com/ticket/6112">#6112</a> : BIDI: Alignment set to text in Table cell is not shown in the Tool bar when we press Enter to start a new Paragraph.</li> + <li><a href="http://dev.ckeditor.com/ticket/6117">#6117</a> : BIDI: Language direction is changing when we come out of Numbered/Bulleted list.</li> + <li><a href="http://dev.ckeditor.com/ticket/6182">#6182</a> : Language Direction field on the Advanced tab of Table Properties dialog has a fixed pixel width.</li> + <li><a href="http://dev.ckeditor.com/ticket/5487">#5487</a> : Fullpage writer problem with line-break.</li> + <li><a href="http://dev.ckeditor.com/ticket/6197">#6197</a> : The CKEDITOR.loader base path auto-detection was not working with the _source folder.</li> + <li><a href="http://dev.ckeditor.com/ticket/6240">#6240</a> : Font Names & Font Sizes should be shown Left Align even for RTL Languages.</li> + <li><a href="http://dev.ckeditor.com/ticket/5975">#5975</a> : Page-break should have proper Alt Text instead of Unknown object. so that JAWS reads it properly.</li> + <li><a href="http://dev.ckeditor.com/ticket/6255">#6255</a> : Inserting a page break as the first node triggered an error.</li> + <li><a href="http://dev.ckeditor.com/ticket/6188">#6188</a> : [IE7] Automatic color button had the wrong cursor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6129">#6129</a> : The show blocks' labels are now shown in the right for RTL languages.</li> + <li><a href="http://dev.ckeditor.com/ticket/5421">#5421</a> : &shy; entity not converted when config.entities=false.</li> + <li><a href="http://dev.ckeditor.com/ticket/5769">#5769</a> : xhtml code generation problem &nbsp; instead of &#160; (htmlentities, entities,entities_additional,..., configuration).</li> + <li><a href="http://dev.ckeditor.com/ticket/4472">#4472</a> : [FF3] Browser window scrolls to loaded CKEditor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6230">#6230</a> : Fixed invalid parameter count for setTimeout function call.</li> + <li><a href="http://dev.ckeditor.com/ticket/5335">#5335</a> : Several lines' formatted data will be merged to one line when we apply Numbers/Bullets.</li> + <li><a href="http://dev.ckeditor.com/ticket/5353">#5353</a> : wrong width of editor after resize() called in Firefox 3.6.</li> + <li><a href="http://dev.ckeditor.com/ticket/5778">#5778</a> : [IE] Unwanted scroll on first mouse right-click.</li> + <li><a href="http://dev.ckeditor.com/ticket/5218">#5218</a> : [FF] Copy/paste of an image from same domain changed URL to relative URL.</li> + <li><a href="http://dev.ckeditor.com/ticket/6265">#6265</a> : Popup window properties were visible in the link dialog's target tab when nothing was selected.</li> + <li><a href="http://dev.ckeditor.com/ticket/6075">#6075</a> : [FF] Newly created links didn't fill in information on edit.</li> + <li><a href="http://dev.ckeditor.com/ticket/6183">#6183</a> : The toolbar panels options sometimes had the contents' link color.</li> + <li><a href="http://dev.ckeditor.com/ticket/6192">#6192</a> : [WebKit] Inserting smileys was not working because of editor focus issues.</li> + <li><a href="http://dev.ckeditor.com/ticket/6178">#6178</a> : [WebKit] Inserting elements by code was failing if the editor didn't receive the focus first.</li> + <li><a href="http://dev.ckeditor.com/ticket/6179">#6179</a> : [WebKit] The Image dialog was not working if the editor didn't receive the focus first.</li> + <li><a href="http://dev.ckeditor.com/ticket/4657">#4657</a> : [Opera] Styles where not working with collapsed selections.</li> + <li><a href="http://dev.ckeditor.com/ticket/5839">#5839</a> : "Insert row after" was removing the ids of the elements from the clicked row.</li> + <li><a href="http://dev.ckeditor.com/ticket/6315">#6315</a> : DIV plugin TT #2885 regression.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/6246">#6246</a> : Chinese Simplified;</li> + <li><a href="http://dev.ckeditor.com/ticket/6256">#6256</a> : Dutch;</li> + <li><a href="http://dev.ckeditor.com/ticket/6271">#6271</a> : English;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.4</h3> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/6118">#6118</a> : Initial focus is now set to the tabs in the table properties dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/6135">#6135</a> : The dialogadvtab plugin now uses the correct label.</li> + <li><a href="http://dev.ckeditor.com/ticket/6125">#6125</a> : Focus was lost after applying commands in Opera.</li> + <li><a href="http://dev.ckeditor.com/ticket/6137">#6137</a> : The table dialog was missing the default width value on second opening.</li> + </ul> + <h3> + CKEditor 3.4 Beta</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5909">#5909</a> : New BiDi feature, making it possible to switch the base language direction of block elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/5268">#5268</a> : Introducing the "tableresize" plugin, which makes it possible to resize tables columns by mouse drag. It's not enabled by default, so it must be enabled in the configurations file.</li> + <li><a href="http://dev.ckeditor.com/ticket/979">#979</a> : New <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enableTabKeyTools">enableTabKeyTools</a> configuration to allow using the TAB key to navigate through table cells.</li> + <li><a href="http://dev.ckeditor.com/ticket/4606">#4606</a> : Introduce the "autogrow" plugin, which makes the editor resize automatically, based on the contents size.</li> + <li><a href="http://dev.ckeditor.com/ticket/5737">#5737</a> : Added support for the <a href="http://www.w3.org/TR/html5/editing.html#contenteditable">HTML5 contenteditable attribute</a>, making it possible to define read only regions into the editor contents.</li> + <li><a href="http://dev.ckeditor.com/ticket/5418">#5418</a> : New "Advanced" tab introduced on the Table Properties dialog. It's based on the new dialogadvtab plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/6082">#6082</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.useComputedState">useComputedState</a> setting, making it possible to control whether toolbar features, like alignment and direction, should reflect the "computed" selection states, even when the effective feature value is not applied.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5911">#5911</a> : BiDi: List items should support and retain correct base language direction</li> + <li><a href="http://dev.ckeditor.com/ticket/5689">#5689</a> : Make it possible to run CKEditor inside of Firefox chrome.</li> + <li><a href="http://dev.ckeditor.com/ticket/6042">#6042</a> : It wasn't possible to align a paragraph with the dir attribute to the opposite direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/6058">#6058</a> : Fixed a small style glitch with file upload fields in IE+Quirks.</li> + </ul> + <h3> + CKEditor 3.3.2</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5882">#5882</a> : Introduce the dialog#selectPage event, replicating the OnDialogTabChange feature available in FCKeditor 2.</li> + <li><a href="http://dev.ckeditor.com/ticket/5927">#5927</a> : The native controls in ui.dialog.elements can be styled with the controlStyle definition.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/1644">#1644</a> : Removed references to cursor:hand in the stylesheets.</li> + <li><a href="http://dev.ckeditor.com/ticket/5411">#5411</a> : Anchor, hidden fields and Page-Break objects can no longer be resized.</li> + <li><a href="http://dev.ckeditor.com/ticket/5456">#5456</a> : Initial focus incorect in api_dialog sample page.</li> + <li><a href="http://dev.ckeditor.com/ticket/5628">#5628</a> : Incorrect <pre> siblings merging.</li> + <li><a href="http://dev.ckeditor.com/ticket/5829">#5829</a> : Adding validation for start number field in list style dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/5845">#5845</a> : Context menu on empty list item loses selection.</li> + <li><a href="http://dev.ckeditor.com/ticket/5860">#5860</a> : [IE] > in attribute values are incorrectly escaped.</li> + <li><a href="http://dev.ckeditor.com/ticket/5905">#5905</a> : SCAYT is not any more enabled by default.</li> + <li><a href="http://dev.ckeditor.com/ticket/5736">#5736</a> : Improved the text generated for mailto: links if no text was selected.</li> + <li><a href="http://dev.ckeditor.com/ticket/4779">#4779</a> : Adjust resize_minWidth and resize_minHeight if smaller than actual dimensions.</li> + <li><a href="http://dev.ckeditor.com/ticket/5687">#5687</a> : Navigation through colors is now compatible with RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/4615">#4615</a> : [IE] Text fields are no longer disrupted in dialog with RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/5887">#5887</a> : The number of columns in the smileys table is now configurable via the smiley_columns setting.</li> + <li><a href="http://dev.ckeditor.com/ticket/5100">#5100</a> : It was possible to drag&drop some elements like context menu items or dropdown entries.</li> + <li><a href="http://dev.ckeditor.com/ticket/5933">#5933</a> : Text color and background color panels don't have scrollbars anymore under office2003 and v2 skins.</li> + <li><a href="http://dev.ckeditor.com/ticket/5943">#5943</a> : An error is no longer generated when using percent or pixel values in the image dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/5951">#5951</a> : Avoid problems with security systems due to the usage of UniversalXPConnect.</li> + <li><a href="http://dev.ckeditor.com/ticket/5441">#5441</a> : Avoid errors if the editor instance is removed from the DOM before calling its destroy() method.</li> + <li><a href="http://dev.ckeditor.com/ticket/4997">#4997</a> : Provide better access to the native input in the ui.dialog.file element.</li> + <li><a href="http://dev.ckeditor.com/ticket/5914">#5914</a> : Modified the Smileys dialog to make active only the images and not their borders.</li> + <li><a href="http://dev.ckeditor.com/ticket/5565">#5565</a> : The scrollbar does not behaves erratically when opening a rich combo in RTL page.</li> + <li><a href="http://dev.ckeditor.com/ticket/5843">#5843</a> : In CKEditor 3.3: When we set the focus in the 'instanceReady' event, FF3.6 is giving js error.</li> + <li><a href="http://dev.ckeditor.com/ticket/5902">#5902</a> : paste and pastetext dialogs cannot be skinned easily.</li> + <li><a href="http://dev.ckeditor.com/ticket/5959">#5959</a> : Dialog auto focus does not check for hidden tabs.</li> + <li><a href="http://dev.ckeditor.com/ticket/5415">#5415</a> : Undo not working when we change the Table Properties for the table on a saved page.</li> + <li><a href="http://dev.ckeditor.com/ticket/5435">#5435</a> : IE: we can't start Numbered/Bulleted list in Tables by Clicking on Insert/Remove Numbers/Bullets Icon.</li> + <li><a href="http://dev.ckeditor.com/ticket/5832">#5832</a> : The JQuery adapter sample is not working properly with SSL.</li> + <li><a href="http://dev.ckeditor.com/ticket/5728">#5728</a> : Text field & Upload Button in Upload Tab of Image Properties dialog are not shown Properly in Arabic.</li> + <li><a href="http://dev.ckeditor.com/ticket/5436">#5436</a> : IE: Cursor goes to next Table Cell after we insert a Smiley in the Table Cell.</li> + <li><a href="http://dev.ckeditor.com/ticket/5580">#5580</a> : Maximize does not work properly in the Office 2003 and V2 skins.</li> + <li><a href="http://dev.ckeditor.com/ticket/5495">#5495</a> : The link dialog was breaking the undo system on some situations.</li> + <li><a href="http://dev.ckeditor.com/ticket/5775">#5775</a> : Required field's label to contain a CSS class to allow it to be styled differently.</li> + <li><a href="http://dev.ckeditor.com/ticket/5999">#5999</a> : Table dialog rows and columns fields are now marked as required.</li> + <li><a href="http://dev.ckeditor.com/ticket/5693">#5693</a> : baseHref detection in the flash dialog now works correctly.</li> + <li><a href="http://dev.ckeditor.com/ticket/5690">#5690</a> : Table cell's width attribute is now respected properly.</li> + <li><a href="http://dev.ckeditor.com/ticket/5819">#5819</a> : Introducing the new removeFormatCleanup event and making sure remove format doesn't break the showborder plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/5558">#5558</a> : After pasting on WebKit based browsers the editor now scrolls to the end of the pasted content.</li> + <li><a href="http://dev.ckeditor.com/ticket/5799">#5799</a> : Correct plugin dependencies for the liststyle plugin with contextMenu and dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/5436">#5436</a> : IE: The cursor was moving to the wrong position when inserting inline elements at the end of cells on tables.</li> + <li><a href="http://dev.ckeditor.com/ticket/5984">#5984</a> : Firefox: CTRL+HOME was creating an unwanted empty paragraph at the start of the document.</li> + <li><a href="http://dev.ckeditor.com/ticket/5634">#5634</a> : IE: It was needed to click twice in the editor to make it editable on some situations.</li> + <li><a href="http://dev.ckeditor.com/ticket/5338">#5338</a> : Pasting from Open Office could lead on error.</li> + <li><a href="http://dev.ckeditor.com/ticket/5224">#5224</a> : Some invalid markup could break the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/5455">#5455</a> : It was not possible to remove formatting from pasted content on specific cases.</li> + <li><a href="http://dev.ckeditor.com/ticket/5735">#5735</a> : IE: The editor was having focus issues when the previous selection got hidden by scroll operations.</li> + <li><a href="http://dev.ckeditor.com/ticket/5563">#5563</a> : Firefox: The disableObjectResizing and disableNativeTableHandles settings stopped working.</li> + <li><a href="http://dev.ckeditor.com/ticket/5781">#5781</a> : Firefox: Editing was not possible in an empty document.</li> + <li><a href="http://dev.ckeditor.com/ticket/5293">#5293</a> : Firefox: Unwanted BR tags were being left in the editor output when it should be empty.</li> + <li><a href="http://dev.ckeditor.com/ticket/5280">#5280</a> : IE: Scrollbars where reacting improperly when clicking in the bar space.</li> + <li><a href="http://dev.ckeditor.com/ticket/5840">#5840</a> : Some dialog access keys are conflicting with "Ctrl + A", select all text behavior on text input.</li> + <li><a href="http://dev.ckeditor.com/ticket/6059">#6059</a> : Changing list type didn't preserve the list's attributes.</li> + <li><a href="http://dev.ckeditor.com/ticket/5193">#5193</a> : In Firefox, the element path options had the text cursor instead of the arrow.</li> + <li><a href="http://dev.ckeditor.com/ticket/6073">#6073</a> : The list context menu was showing the wrong option when in a mixed list hierarchy.</li> + <li><a href="http://dev.ckeditor.com/ticket/6074">#6074</a> : The Insert Table Column command was duplicating the selected column cells ids.</li> + <li><a href="http://dev.ckeditor.com/ticket/6066">#6066</a> : The toolbar combos had the text cursor instead of the arrow.</li> + <li><a href="http://dev.ckeditor.com/ticket/6062">#6062</a> : The toolbar buttons had the text cursor instead of the arrow.</li> + <li><a href="http://dev.ckeditor.com/ticket/6068">#6068</a> : [IE7] A few labels were hidden in a RTL language.</li> + <li><a href="http://dev.ckeditor.com/ticket/6000">#6000</a> : Safari and Chrome where scrolling the contents to the top when moving the focus to the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/6090">#6090</a> : IE: Textarea with selection inside causes Link dialog issues.</li> + <li><a href="http://dev.ckeditor.com/ticket/5079">#5079</a> : Page break in lists move to above the list when you switch from WYSIWYG to HTML mode and back.</li> + <li>Updated the following language files:<ul> + <li>Chinese Simplified;</li> + <li>Hebrew;</li> + <li><a href="http://dev.ckeditor.com/ticket/5962">#5962</a> : German;</li> + <li><a href="http://dev.ckeditor.com/ticket/5645">#5645</a> : Portuguese;</li> + <li><a href="http://dev.ckeditor.com/ticket/5797">#5797</a> : Turkish;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.3.1</h3> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5780">#5780</a> : Text selection lost when opening some of the dialogs.</li> + <li><a href="http://dev.ckeditor.com/ticket/5787">#5787</a> : Liststyle plugin wasn't packaged into the core (CKEDITOR.resourceManager.load exception).</li> + <li><a href="http://dev.ckeditor.com/ticket/5637">#5637</a> : Fix wrong nesting that generated "<head> must be a child of <html>" warning in Webkit.</li> + <li><a href="http://dev.ckeditor.com/ticket/5790">#5790</a> : Internal only attributes output on fullpage <html> tag.</li> + <li><a href="http://dev.ckeditor.com/ticket/5761">#5761</a> : [IE] Color dialog matrix buttons are barely clickable in quirks mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/5759">#5759</a> : [IE] Clicking on the scrollbar and then on the host page causes error.</li> + <li><a href="http://dev.ckeditor.com/ticket/5772">#5772</a> : List style dialog is missing tab page ids.</li> + <li><a href="http://dev.ckeditor.com/ticket/5782">#5782</a> : [FF] Wysiwyg mode is broken by 'display' style changes on editor's parent DOM tree.</li> + <li><a href="http://dev.ckeditor.com/ticket/5801">#5801</a> : [IE] contentEditable="false" doesn't apply in effect on inline-elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/5794">#5794</a> : Empty find matching twice results in JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/5732">#5732</a> : If it isn't possible to connect to the SCAYT servers the dialogs might hang in Firefox. Fix for Firefox>=3.6.</li> + <li><a href="http://dev.ckeditor.com/ticket/5807">#5807</a> : [FF2] New page command results in uneditable document.</li> + <li><a href="http://dev.ckeditor.com/ticket/5807">#5807</a> : [FF2] SCAYT plugin is disabled in Firefox2 due to selection interference.</li> + <li><a href="http://dev.ckeditor.com/ticket/5772">#5772</a> : [IE] Some numbered list style types are not supported by IE6/7 and causes JavaScript error.</li> + </ul> + <h3> + CKEditor 3.3</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/635">#635</a> : The properties dialog will now open when double clicking on objects.</li> + <li><a href="http://dev.ckeditor.com/ticket/3893">#3893</a> : It's now possible to indent/outdent lists when selecting the first list item.</li> + <li><a href="http://dev.ckeditor.com/ticket/4968">#4968</a> : The <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLangDirection">contentsLangDirection</a> setting now has a default value 'ui' which inherit language direction from the editor UI language.</li> + <li><a href="http://dev.ckeditor.com/ticket/4649">#4649</a> : The color picker dialog is now accessible.</li> + <li><a href="http://dev.ckeditor.com/ticket/3593">#3593</a> : The editing area is now enabled by contentEditable="true" instead of designMode="on" to allow creating uneditable content elements in all browsers.</li> + <li><a href="http://dev.ckeditor.com/ticket/4056">#4056</a> : Hidden fields will now be displayed as fake element just like in FCKeditor 2.</li> + </ul> +<h3> + CKEditor 3.2.2</h3> + <p> + New features:</p> + <ul> + <li>The SCAYT spell checker is now enabled by default through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_autoStartup">autoStartup</a> setting.</li> + <li><a href="http://dev.ckeditor.com/ticket/5631">#5631</a> : The SCAYT context menu options can now be reorganized through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_contextMenuItemsOrder">scayt_contextMenuItemsOrder</a> setting.</li> + <li><a href="http://dev.ckeditor.com/ticket/4231">#4231</a> : Introducing the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.resize_dir">resize_dir setting</a>, to be able to restrict manual resizing of the editor to only one direction (horizontal/vertical).</li> + <li><a href="http://dev.ckeditor.com/ticket/5479">#5479</a> : Introducing the classic ASP integration files and samples.</li> + <li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added samples (<a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_html.html">HTML</a> and <a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_xhtml.html">XHTML</a>) to show how to output HTML using fonts and other attributes instead of styles.</li> + <li><a href="http://dev.ckeditor.com/ticket/4358">#4358</a> : Introduced the List Properties dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/5485">#5485</a> : Adding the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLanguage">contentsLanguage</a> configuration option to be able to set the language for the editor contents.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5330">#5330</a> : Corrected detection of CTRL and META keys in Macs for the context menu.</li> + <li><a href="http://dev.ckeditor.com/ticket/5434">#5434</a> : Fixed access denied issues with IE when accessing web sites through IPv6 IP addresses.</li> + <li><a href="http://dev.ckeditor.com/ticket/4476">#4476</a> : [IE] Inaccessible empty list item contains sub list.</li> + <li><a href="http://dev.ckeditor.com/ticket/4881">#4881</a> : [IE] Selection range broken because of cutting a single control type element from it.</li> + <li><a href="http://dev.ckeditor.com/ticket/5505">#5505</a> : Image dialog throw JavaScript error when click close dialog before preview area is loading.</li> + <li><a href="http://dev.ckeditor.com/ticket/5144">#5144</a> : [Chrome] Paste in Webkit sometimes leaves extra 'div' element.</li> + <li><a href="http://dev.ckeditor.com/ticket/5021">#5021</a> : [Firefox] Typing in empty document start from second line when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li> + <li><a href="http://dev.ckeditor.com/ticket/5416">#5416</a> : [IE] Delete table throws a error when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li> + <li><a href="http://dev.ckeditor.com/ticket/4459">#4459</a> : [IE] Select element is penetrating the maximized editor in IE6.</li> + <li><a href="http://dev.ckeditor.com/ticket/5559">#5559</a> : [IE] The first call to <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setData">setData</a> is affected by iframe cache when loading the wysiwyg mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/5567">#5567</a> : [IE] Remove inline styles in some case doesn't join identical siblings.</li> + <li><a href="http://dev.ckeditor.com/ticket/5450">#5450</a> : [FireFox] Press ENTER on 'replace' button result wrong.</li> + <li><a href="http://dev.ckeditor.com/ticket/5121">#5121</a> : Recognizes the <br /> tag as a separator when apply block styles and <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li> + <li><a href="http://dev.ckeditor.com/ticket/5575">#5575</a> : <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.html#.replaceAll">CKEDITOR.replaceAll</a> should consider all kind of white spaces between class names.</li> + <li><a href="http://dev.ckeditor.com/ticket/5582">#5582</a> : Prevent the default behavior when click the 'x' button to close dialog box.</li> + <li><a href="http://dev.ckeditor.com/ticket/5584">#5584</a> : ENTER key with <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.forceEnterMode">forceEnterMode</a> turns on doesn't inherit current block attributes.</li> + <li><a href="http://dev.ckeditor.com/ticket/4797">#4797</a> : [Opera] Press ENTER key in dialog fields to close throws JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/5578">#5578</a> : Add flash fake element align property when switch mode (source to wysiwyg).</li> + <li><a href="http://dev.ckeditor.com/ticket/5577">#5577</a> : Update delete column behavior when choose multiple cells in the same column.</li> + <li><a href="http://dev.ckeditor.com/ticket/5512">#5512</a> : Open context menu with SHIFT+F10 doesn't get correct editor selection.</li> + <li><a href="http://dev.ckeditor.com/ticket/5433">#5433</a> : English protocol text directions in Link dialog are not incorrect in 'rtl' UI languages.</li> + <li><a href="http://dev.ckeditor.com/ticket/5553">#5553</a> : Paste dialog clipboard area text direction is incorrect for 'rtl' content languages.</li> + <li><a href="http://dev.ckeditor.com/ticket/4734">#4734</a> : Font size resets when font name is changed in an empty numbered list.</li> + <li><a href="http://dev.ckeditor.com/ticket/5237">#5237</a> : English text in dialogs' title is flipped when using RTL language.</li> + <li><a href="http://dev.ckeditor.com/ticket/3257">#3257</a> : Create list doesn't keep blocks as headings.</li> + <li><a href="http://dev.ckeditor.com/ticket/5111">#5111</a> : [Firefox] JAWS doesn't respect PC cursor mode (application role) on toolbar.</li> + <li><a href="http://dev.ckeditor.com/ticket/5530">#5530</a> : Page break for printing can't be removed with undo.</li> + <li><a href="http://dev.ckeditor.com/ticket/5381">#5381</a> : Unable to place cursor between two paragraphs in body.</li> + <li><a href="http://dev.ckeditor.com/ticket/5568">#5568</a> : [IE6/7] Selecting a entire table cell changes the original range.</li> + <li><a href="http://dev.ckeditor.com/ticket/5623">#5623</a> : [Firefox] Apply style that edges another inline style result incorrect.</li> + <li><a href="http://dev.ckeditor.com/ticket/5586">#5586</a> : [Firefox] Maximize the second editor ruins full screen mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/5617">#5617</a> : HTML filter system does not allow two 'text' filter rules.</li> + <li><a href="http://dev.ckeditor.com/ticket/5663">#5663</a> : General memory clean up after destroying last instance.</li> + <li><a href="http://dev.ckeditor.com/ticket/5461">#5461</a> : [IE] Fix Paste from Word dialog doesn't accept imput problem.</li> + <li><a href="http://dev.ckeditor.com/ticket/5676">#5676</a> : Make color buttons use RRGGBB instead of RGB for better compatibility with IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/4948">#4948</a> : [Safari] Select the first/last cell of table to open context menu may lead to undetected table.</li> + <li><a href="http://dev.ckeditor.com/ticket/5591">#5591</a> : [Firefox] Select a list item makes selected element broken.</li> + <li><a href="http://dev.ckeditor.com/ticket/5667">#5667</a> : Pasting in a RTL page content causes shows up the horizontal scrollbar.</li> + <li><a href="http://dev.ckeditor.com/ticket/5688">#5688</a> : Duplicate ids are used in dialog definition.</li> + <li><a href="http://dev.ckeditor.com/ticket/5719">#5719</a> : [IE] 'change' dialog event should not be triggered when dialog is already closed.</li> + <li><a href="http://dev.ckeditor.com/ticket/5747">#5747</a> : [IE] Error thrown when IE input field editing mode is turned on.</li> + <li><a href="http://dev.ckeditor.com/ticket/5516">#5516</a> : IE8: Toolbar buttons have higher bottom padding.</li> + <li><a href="http://dev.ckeditor.com/ticket/5402">#5402</a> : SHIFT-ENTER could now be used to exit from preformat block.</li> + <li>SCAYT plugin related:<ul> + <li><a href="http://dev.ckeditor.com/ticket/4836">#4836</a> : Using SCAYT result in fragile elements when applying inline styles.</li> + <li><a href="http://dev.ckeditor.com/ticket/5425">#5425</a> : [Opera] Disable SCAYT plugin for Opera browser.</li> + <li><a href="http://dev.ckeditor.com/ticket/5632">#5632</a> : SCAYT word marker is not visible on text with background-color set.</li> + <li><a href="http://dev.ckeditor.com/ticket/4125">#4125</a> : Remove Format command incorrectly removes SCAYT word markers.</li> + <li><a href="http://dev.ckeditor.com/ticket/5671">#5671</a> : SCAYT bootstrap script could be added multiple times unnecessarily.</li> + <li><a href="http://dev.ckeditor.com/ticket/5573">#5573</a> : SCAYT move cursor position after insert element into marked word text.</li> + <li><a href="http://dev.ckeditor.com/ticket/5546">#5546</a> : SCAYT interferes with undo/redo commands.</li> + <li><a href="http://dev.ckeditor.com/ticket/5570">#5570</a> : [IE] First enabling SCAYT blind cursor in editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/5741">#5741</a> : Enable SCAYT cause error in multiple editor instances.</li> + <li><a href="http://dev.ckeditor.com/ticket/5744">#5744</a> : Remove editor with SCAYT enabled in source mode throws error.</li> + </ul></li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/5432">#5432</a> : Dutch;</li> + <li><a href="http://dev.ckeditor.com/ticket/5619">#5619</a> : Finnish;</li> + <li><a href="http://dev.ckeditor.com/ticket/5515">#5515</a> : Hebrew;</li> + <li><a href="http://dev.ckeditor.com/ticket/5588">#5588</a> : Turkish;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.2.1</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4478">#4478</a> : Enable the SelectAll command in source mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/5150">#5150</a> : Allow names in the CKEDITOR.config.colorButton_colors setting.</li> + <li><a href="http://dev.ckeditor.com/ticket/4810">#4810</a> : Adding configuration option for image dialog preview area filling text.</li> + <li><a href="http://dev.ckeditor.com/ticket/536">#536</a> : Object style now could be applied on any parent element of current selection.</li> + <li><a href="http://dev.ckeditor.com/ticket/5290">#5290</a> : Unified stylesSet loading removing dependencies from the styles combo. + Now the configuration entry is named 'config.stylesSet' instead of config.stylesCombo_stylesSet and the default location + is under the 'styles' plugin instead of 'stylescombo'.</li> + <li><a href="http://dev.ckeditor.com/ticket/5352">#5352</a> : Allow to define the stylesSet array in the config object for the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/5302">#5302</a> : Adding config option "forceEnterMode".</li> + <li><a href="http://dev.ckeditor.com/ticket/5216">#5216</a> : Extend CKEDITOR.appendTo to allow a data parameter for the initial value.</li> + <li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added sample to show how to output XHTML and avoid deprecated tags.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5152">#5152</a> : Indentation using class attribute doesn't work properly.</li> + <li><a href="http://dev.ckeditor.com/ticket/4682">#4682</a> : It wasn't possible to edit block elements in IE that had styles like width, height or float.</li> + <li><a href="http://dev.ckeditor.com/ticket/4750">#4750</a> : Correcting default order of buttons layout in dialogs on Mac.</li> + <li><a href="http://dev.ckeditor.com/ticket/4932">#4932</a> : Fixed collapse button not clickable on simple toolbar.</li> + <li><a href="http://dev.ckeditor.com/ticket/5228">#5228</a> : Link dialog is automatically changes protocol when URLs that starts with '?'.</li> + <li><a href="http://dev.ckeditor.com/ticket/4877">#4877</a> : Fixed CKEditor displays source code in one long line (IE quirks mode + office2003 skin).</li> + <li><a href="http://dev.ckeditor.com/ticket/5132">#5132</a> : Apply inline style leaks into sibling words which are seperated spaces.</li> + <li><a href="http://dev.ckeditor.com/ticket/3599">#3599</a> : Background color style on sized text displayed as narrow band behind.</li> + <li><a href="http://dev.ckeditor.com/ticket/4661">#4661</a> : Translation missing in link dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/5240">#5240</a> : Flash alignment property is not presented visually on fake element.</li> + <li><a href="http://dev.ckeditor.com/ticket/4910">#4910</a> : Pasting in IE scrolls document to the end.</li> + <li><a href="http://dev.ckeditor.com/ticket/5041">#5041</a> : Table summary attribute can't be removed with dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/5124">#5124</a> : All inline styles cannot be applied on empty spaces.</li> + <li><a href="http://dev.ckeditor.com/ticket/3570">#3570</a> : SCAYT marker shouldn't appear inside elements path bar.</li> + <li><a href="http://dev.ckeditor.com/ticket/4553">#4553</a> : Dirty check result incorrect when editor document is empty.</li> + <li><a href="http://dev.ckeditor.com/ticket/4555">#4555</a> : Unreleased memory when editor is created and destroyed.</li> + <li><a href="http://dev.ckeditor.com/ticket/5118">#5118</a> : Arrow keys navigation in RTL languages is incorrect.</li> + <li><a href="http://dev.ckeditor.com/ticket/4721">#4721</a> : Remove attribute 'value' of checkbox in IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/5278">#5278</a> : IE: Add validation to check for bad window names of popup window.</li> + <li><a href="http://dev.ckeditor.com/ticket/5171">#5171</a> : Dialogs contains lists don't have proper voice labels.</li> + <li><a href="http://dev.ckeditor.com/ticket/4791">#4791</a> : Can't place cursor inside a form that end with a checkbox/radio.</li> + <li><a href="http://dev.ckeditor.com/ticket/4479">#4479</a> : StylesCombo doesn't reflect the selection state until it's first opened.</li> + <li><a href="http://dev.ckeditor.com/ticket/4717">#4717</a> : 'Unlink' and 'Outdent' command buttons should be disabled on editor startup.</li> + <li><a href="http://dev.ckeditor.com/ticket/5119">#5119</a> : Disabled command buttons are not being properly styled when focused.</li> + <li><a href="http://dev.ckeditor.com/ticket/5307">#5307</a> : Hide dialog page cause problem when there's two tab pages remain.</li> + <li><a href="http://dev.ckeditor.com/ticket/5343">#5343</a> : Active list item ARIA role is wrongly placed.</li> + <li><a href="http://dev.ckeditor.com/ticket/3599">#3599</a> : Background color style applying to text with font size style has been narrowly rendered.</li> + <li><a href="http://dev.ckeditor.com/ticket/4711">#4711</a> : Line break character inside preformatted text makes it unable to type text at the end of previous line.</li> + <li><a href="http://dev.ckeditor.com/ticket/4829">#4829</a> : [IE] Apply style from combo has wrong result on manually created selection.</li> + <li><a href="http://dev.ckeditor.com/ticket/4830">#4830</a> : Retrieving selected element isn't always right, especially selecting using keyboard (SHIFT+ARROW).</li> + <li><a href="http://dev.ckeditor.com/ticket/5128">#5128</a> : Element attribute inside preformatted text is corrupted when converting to other blocks.</li> + <li><a href="http://dev.ckeditor.com/ticket/5190">#5190</a> : Template list entry shouldn't gain initial focus open templates list dialog opens.</li> + <li><a href="http://dev.ckeditor.com/ticket/5238">#5238</a> : Menu button doesn't display arrow icon in high-contrast mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/3576">#3576</a> : Non-attributed element of the same name with the applied style is incorrectly removed.</li> + <li><a href="http://dev.ckeditor.com/ticket/5221">#5221</a> : Insert table into empty document cause JavaScript error thrown.</li> + <li><a href="http://dev.ckeditor.com/ticket/5242">#5242</a> : Apply 'automatic' color option of text color incorrectly removes background-color style.</li> + <li><a href="http://dev.ckeditor.com/ticket/4719">#4719</a> : IE does not escape attribute values properly.</li> + <li><a href="http://dev.ckeditor.com/ticket/5170">#5170</a> : Firefox does not insert text into styled element properly.</li> + <li><a href="http://dev.ckeditor.com/ticket/4026">#4026</a> : Office2003 skin has no toolbar button borders in High Contrast in IE7.</li> + <li><a href="http://dev.ckeditor.com/ticket/4348">#4348</a> : There should have exception thrown when 'CKEDITOR_BASEPATH' couldn't be figured out automatically.</li> + <li><a href="http://dev.ckeditor.com/ticket/5364">#5364</a> : Focus may not be put into dialog correctly when dialog skin file is loading slow.</li> + <li><a href="http://dev.ckeditor.com/ticket/4016">#4016</a> : Justify the layout of forms select dialog in Chrome and IE7.</li> + <li><a href="http://dev.ckeditor.com/ticket/5373">#5373</a> : Variable 'pathBlockElements' defines wrong items in CKEDITOR.dom.elementPath.</li> + <li><a href="http://dev.ckeditor.com/ticket/5082">#5082</a> : Ctrl key should be described as Cmd key on Mac.</li> + <li><a href="http://dev.ckeditor.com/ticket/5182">#5182</a> : Context menu is not been announced correctly by ATs.</li> + <li><a href="http://dev.ckeditor.com/ticket/4898">#4898</a> : Can't navigate outside table under the last paragraph of document.</li> + <li><a href="http://dev.ckeditor.com/ticket/4950">#4950</a> : List commands could compromise list item attribute and styles.</li> + <li><a href="http://dev.ckeditor.com/ticket/5018">#5018</a> : Find result highlighting remove normal font color styles unintentionally.</li> + <li><a href="http://dev.ckeditor.com/ticket/5376">#5376</a> : Unable to exit list from within a empty block under list item.</li> + <li><a href="http://dev.ckeditor.com/ticket/5145">#5145</a> : Various SCAYT fixes.</li> + <li><a href="http://dev.ckeditor.com/ticket/5319">#5319</a> : Match whole word doesn't work anymore after replacement has happened.</li> + <li><a href="http://dev.ckeditor.com/ticket/5363">#5363</a> : 'title' attribute now presents on all editor iframes.</li> + <li><a href="http://dev.ckeditor.com/ticket/5374">#5374</a> : Unable to toggle inline style when the selection starts at the linefeed of the previous paragraph.</li> + <li><a href="http://dev.ckeditor.com/ticket/4513">#4513</a> : Selected link element is not always correctly detected when using keyboard arrows to perform such selection.</li> + <li><a href="http://dev.ckeditor.com/ticket/5372">#5372</a> : Newly created sub list should inherit nothing from the original (parent) list, except the list type.</li> + <li><a href="http://dev.ckeditor.com/ticket/5274">#5274</a> : [IE6] Templates preview image is displayed in wrong size.</li> + <li><a href="http://dev.ckeditor.com/ticket/5292">#5292</a> : Preview in font size and family doesn't work with custom styles.</li> + <li><a href="http://dev.ckeditor.com/ticket/5396">#5396</a> : Selection is lost when use cell properties dialog to change cell type to header.</li> + <li><a href="http://dev.ckeditor.com/ticket/4082">#4082</a> : [IE+Quirks] Preview text in the image dialog is not wrapping.</li> + <li><a href="http://dev.ckeditor.com/ticket/4197">#4197</a> : Fixing format combo don't hide when editor blur on Safari.</li> + <li><a href="http://dev.ckeditor.com/ticket/5401">#5401</a> : The context menu break layout with Office2003 and V2 skin on IE quirks mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/4825">#4825</a> : Fixing browser context menu is opened when clicking right mouse button twice.</li> + <li><a href="http://dev.ckeditor.com/ticket/5356">#5356</a> : The SCAYT dialog had issues with Prototype enabled pages.</li> + <li><a href="http://dev.ckeditor.com/ticket/5266">#5266</a> : SCAYT was disturbing the rendering of TH elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/4688">#4688</a> : SCAYT was interfering on checkDirty.</li> + <li><a href="http://dev.ckeditor.com/ticket/5429">#5429</a> : High Contrast mode was being mistakenly detected when loading the editor through Dojo's xhrGet.</li> + <li><a href="http://dev.ckeditor.com/ticket/5221">#5221</a> : Range is mangled when making collapsed selection in an empty paragraph.</li> + <li><a href="http://dev.ckeditor.com/ticket/5261">#5261</a> : Config option 'scayt_autoStartup' slow down editor loading.</li> + <li><a href="http://dev.ckeditor.com/ticket/3846">#3846</a> : Google Chrome - No Img properties after inserting.</li> + <li><a href="http://dev.ckeditor.com/ticket/5465">#5465</a> : ShiftEnter=DIV doesn't respect list item when pressing ENTER at end of list item.</li> + <li><a href="http://dev.ckeditor.com/ticket/5454">#5454</a> : After replaced success, the popup window couldn't be closed and a js error occured.</li> + <li><a href="http://dev.ckeditor.com/ticket/4784">#4784</a> : Incorrect cursor position after delete table cells.</li> + <li><a href="http://dev.ckeditor.com/ticket/5149">#5149</a> : [FF] Cursor disappears after maximize when the editor has focus.</li> + <li><a href="http://dev.ckeditor.com/ticket/5220">#5220</a> : DTD now shows tolerance to <style> appear inside content.</li> + <li><a href="http://dev.ckeditor.com/ticket/5440">#5440</a> : Mobile browsers (iPhone, Android...) are marked as incompatible as they don't support editing features.</li> + <li><a href="http://dev.ckeditor.com/ticket/5504">#5504</a> : [IE6/7] 'Paste' dialog will always get opened even when user allows the clipboard access dialog when using 'Paste' button.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/5326">#5326</a> : Catalan;</li> + <li><a href="http://dev.ckeditor.com/ticket/5370">#5370</a> : Faroese;</li> + <li><a href="http://dev.ckeditor.com/ticket/5392">#5392</a> : Finnish;</li> + <li><a href="http://dev.ckeditor.com/ticket/4580">#4580</a> : Hungarian;</li> + <li><a href="http://dev.ckeditor.com/ticket/5301">#5301</a> : Norwegian;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.2</h3> + <p> + New features:</p> + <ul> + <li>Several accessibility enhancements:<ul> + <li><a href="http://dev.ckeditor.com/ticket/4502">#4502</a> : The editor accessibility is now totally based on <a href="http://www.w3.org/WAI/intro/aria">WAI-ARIA</a>.</li> + <li><a href="http://dev.ckeditor.com/ticket/5015">#5015</a> : Adding accessibility help dialog plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/5014">#5014</a> : Keyboard navigation compliance with screen reader suggested keys.</li> + <li><a href="http://dev.ckeditor.com/ticket/4595">#4595</a> : Better accessibility in the Templates dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/3389">#3389</a> : Esc/Arrow Key now works for closing sub menu.</li> + </ul></li> + <li><a href="http://dev.ckeditor.com/ticket/4973">#4973</a> : The Style field in the Div Container dialog is now loading the styles defined in the default styleset used by the Styles toolbar combo.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/5049">#5049</a> : Form Field list command in JAWS incorrectly lists extra fields.</li> + <li><a href="http://dev.ckeditor.com/ticket/5008">#5008</a> : Lock/Unlock ratio buttons in the Image dialog was poorly designed in High Contrast mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/3980">#3980</a> : All labels in dialogs now use <label> instead of <div>.</li> + <li><a href="http://dev.ckeditor.com/ticket/5213">#5213</a> : Reorganization of some entries in the language files to make it more consistent.</li> + <li><a href="http://dev.ckeditor.com/ticket/5199">#5199</a> : In IE, single row toolbars didn't have the bottom padding.</li> + </ul> + <h3> + CKEditor 3.1.1</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4399">#4399</a> : Improved support for external file browsers by allowing executing a callback function.</li> + <li><a href="http://dev.ckeditor.com/ticket/4612">#4612</a> : The text of links is now updated if it matches the URL to which it points to.</li> + <li><a href="http://dev.ckeditor.com/ticket/4936">#4936</a> : New localization support for the Welsh language.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4272">#4272</a> : Kama skin toolbar was broken in IE+Quirks+RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/4987">#4987</a> : Changed the url which is called by the Browser Server button in the Link tab of Image Properties dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/5030">#5030</a> : The CKEDITOR.timestamp wasn't been appended to the skin.js file.</li> + <li><a href="http://dev.ckeditor.com/ticket/4993">#4993</a> : Removed the float style from images when the user selects 'not set' for alignment.</li> + <li><a href="http://dev.ckeditor.com/ticket/4944">#4944</a> : Fixed a bug where nested list structures with inconsequent levels were not being pasted correctly from MS Word.</li> + <li><a href="http://dev.ckeditor.com/ticket/4637">#4637</a> : Table cells' 'nowrap' attribute was not being loaded by the cell property dialog. Thanks to pomu0325.</li> + <li><a href="http://dev.ckeditor.com/ticket/4724">#4724</a> : Using the mouse to insert a link in IE might create incorrect results.</li> + <li><a href="http://dev.ckeditor.com/ticket/4640">#4640</a> : Small optimizations for the fileBrowser plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/4583">#4583</a> : The "Target Frame Name" field is now visible when target is set to 'frame' only.</li> + <li><a href="http://dev.ckeditor.com/ticket/4863">#4863</a> : Fixing iframedialog's height doesn't stretch to 100% (except IE Quirks).</li> + <li><a href="http://dev.ckeditor.com/ticket/4964">#4964</a> : The BACKSPACE key positioning was not correct in some cases with Firefox.</li> + <li><a href="http://dev.ckeditor.com/ticket/4980">#4980</a> : Setting border, vspace and hspace of images to zero was not working.</li> + <li><a href="http://dev.ckeditor.com/ticket/4773">#4773</a> : The fileBrowser plugin was overwriting onClick functions eventually defined on fileButton elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/4731">#4731</a> : The clipboard plugin was missing a reference to the dialog plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/5051">#5051</a> : The about plugin was missing a reference to the dialog plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/5146">#5146</a> : The wsc plugin was missing a reference to the dialog plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/4632">#4632</a> : The print command will now properly break on the insertion point of page break for printing.</li> + <li><a href="http://dev.ckeditor.com/ticket/4862">#4862</a> : The English (United Kingdom) language file has been renamed to en-gb.js.</li> + <li><a href="http://dev.ckeditor.com/ticket/4618">#4618</a> : Selecting an emoticon or the lock and reset buttons in the image dialog fired the onBeforeUnload event in IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/4678">#4678</a> : It was not possible to set tables' width to empty value.</li> + <li><a href="http://dev.ckeditor.com/ticket/5012">#5012</a> : Fixed dependency issues with the menu plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/5040">#5040</a> : The editor will not properly ignore font related settings that have extra item separators (semi-colons).</li> + <li><a href="http://dev.ckeditor.com/ticket/4046">#4046</a> : Justify should respect config.enterMode = CKEDITOR.ENTER_BR.</li> + <li><a href="http://dev.ckeditor.com/ticket/4622">#4622</a> : Inserting tables multiple times was corrupting the undo system.</li> + <li><a href="http://dev.ckeditor.com/ticket/4647">#4647</a> : [IE] Selection on an element within positioned container is lost after open context-menu then click one menu item.</li> + <li><a href="http://dev.ckeditor.com/ticket/4683">#4683</a> : Double-quote character in attribute values was not escaped in the editor output.</li> + <li><a href="http://dev.ckeditor.com/ticket/4762">#4762</a> : [IE] Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor in source mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/4772">#4772</a> : Text color was not being applied properly on links.</li> + <li><a href="http://dev.ckeditor.com/ticket/4795">#4795</a> : [IE] Press 'Del' key on horizontal line or table result in error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4824">#4824</a> : [IE] <br/> at the very first table cell breaks the editor selection.</li> + <li><a href="http://dev.ckeditor.com/ticket/4851">#4851</a> : [IE] Delete table rows with context-menu may cause error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4951">#4951</a> : Replacing text with empty string was throwing errors.</li> + <li><a href="http://dev.ckeditor.com/ticket/4963">#4963</a> : Link dialog was not opening properly for e-mail type links.</li> + <li><a href="http://dev.ckeditor.com/ticket/5043">#5043</a> : Removed the possibility of having an unwanted script tag being outputted with the editor contents.</li> + <li><a href="http://dev.ckeditor.com/ticket/3678">#3678</a> : There were issues when editing links inside floating divs with IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/4763">#4763</a> : Pressing ENTER key with text selected was not deleting the text in some situations.</li> + <li><a href="http://dev.ckeditor.com/ticket/5096">#5096</a> : Simple ampersand attribute value doesn't work for more than one occurrence.</li> + <li><a href="http://dev.ckeditor.com/ticket/3494">#3494</a> : Context menu is too narrow in some translations.</li> + <li><a href="http://dev.ckeditor.com/ticket/5005">#5005</a> : Fixed HTML errors in PHP samples.</li> + <li><a href="http://dev.ckeditor.com/ticket/5123">#5123</a> : Fixed broken XHTML in User Interface Languages sample.</li> + <li><a href="http://dev.ckeditor.com/ticket/4893">#4893</a> : Editor now understands table cell inline styles.</li> + <li><a href="http://dev.ckeditor.com/ticket/4611">#4611</a> : Selection around <select> in editor doesn't cause error anymore.</li> + <li><a href="http://dev.ckeditor.com/ticket/4886">#4886</a> : Extra BR tags were being created in the output HTML.</li> + <li><a href="http://dev.ckeditor.com/ticket/4933">#4933</a> : Empty tags with BR were being left in the DOM.</li> + <li><a href="http://dev.ckeditor.com/ticket/5127">#5127</a> : There were errors when removing dialog definition pages through code.</li> + <li><a href="http://dev.ckeditor.com/ticket/4767">#4767</a> : CKEditor was not working when ckeditor_source.js is loaded in the <body> .</li> + <li><a href="http://dev.ckeditor.com/ticket/5062">#5062</a> : Avoided security warning message when loading the wysiwyg area in IE6 under HTTPS.</li> + <li><a href="http://dev.ckeditor.com/ticket/5135">#5135</a> : The TAB key will now behave properly when in Source mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/4988">#4988</a> : It wasn't possible to use forcePasteAsPlainText with Safari on Mac.</li> + <li><a href="http://dev.ckeditor.com/ticket/5095">#5095</a> : Safari on Mac deleted the current selection in the editor when Edit menu was clicked.</li> + <li><a href="http://dev.ckeditor.com/ticket/5140">#5140</a> : In High Contrast mode, arrows were now been displayed for menus with submenus.</li> + <li><a href="http://dev.ckeditor.com/ticket/5163">#5163</a> : The undo system was not working on some specific cases.</li> + <li><a href="http://dev.ckeditor.com/ticket/5162">#5162</a> : The ajax sample was throwing errors when loading data.</li> + <li><a href="http://dev.ckeditor.com/ticket/4999">#4999</a> : The Template dialog was not generating an undo snapshot.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/5006">#5006</a> : Dutch;</li> + <li><a href="http://dev.ckeditor.com/ticket/5039">#5039</a> : Finnish;</li> + <li><a href="http://dev.ckeditor.com/ticket/5148">#5148</a> : Hebrew;</li> + <li><a href="http://dev.ckeditor.com/ticket/5071">#5071</a> : Russian;</li> + <li><a href="http://dev.ckeditor.com/ticket/5147">#5147</a> : Spanish;</li> + </ul></li> + </ul> + <h3> + CKEditor 3.1</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4067">#4067</a> : Introduced the full page editing support (from <html> to </html>).</li> + <li><a href="http://dev.ckeditor.com/ticket/4228">#4228</a> : Introduced the Shared Spaces feature.</li> + <li><a href="http://dev.ckeditor.com/ticket/4379">#4379</a> : Introduced the new powerful pasting system and word cleanup procedure, including enhancements to the paste as plain text feature.</li> + <li><a href="http://dev.ckeditor.com/ticket/2872">#2872</a> : Introduced the new native PHP API, the first standardized server side support.</li> + <li><a href="http://dev.ckeditor.com/ticket/4210">#4210</a> : Added CKEditor plugin for jQuery.</li> + <li><a href="http://dev.ckeditor.com/ticket/2885">#2885</a> : Added 'div' dialog and corresponding context menu options.</li> + <li><a href="http://dev.ckeditor.com/ticket/4574">#4574</a> : Added the table merging tools and corresponding context menu options.</li> + <li><a href="http://dev.ckeditor.com/ticket/4340">#4340</a> : Added the email protection option for link dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/4463">#4463</a> : Added inline CSS support in all places where custom stylesheet could apply.</li> + <li><a href="http://dev.ckeditor.com/ticket/3881">#3881</a> : Added color dialog for 'more color' option in color buttons.</li> + <li><a href="http://dev.ckeditor.com/ticket/4341">#4341</a> : Added the 'showborder' plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/4549">#4549</a> : Make the anti-cache query string configurable.</li> + <li><a href="http://dev.ckeditor.com/ticket/4708">#4708</a> : Added the 'htmlEncodeOutput' config option.</li> + <li><a href="http://dev.ckeditor.com/ticket/4342">#4342</a> : Introduced the bodyId and bodyClass settings to specify the id and class. to be used in the editing area at runtime.</li> + <li><a href="http://dev.ckeditor.com/ticket/3401">#3401</a> : Introduced the baseHref setting so it's possible to set the URL to be used to resolve absolute and relative URLs in the contents.</li> + <li><a href="http://dev.ckeditor.com/ticket/4729">#4729</a> : Added support to fake elements for comments.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4707">#4707</a> : Fixed invalid link is requested in image preview.</li> + <li><a href="http://dev.ckeditor.com/ticket/4461">#4461</a> : Fixed toolbar separator line along side combo enlarging the toolbar height.</li> + <li><a href="http://dev.ckeditor.com/ticket/4596">#4596</a> : Fixed image re-size lock buttons aren't accessible in high-contrast mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/4676">#4676</a> : Fixed editing tables using table properties dialog overwrites original style values.</li> + <li><a href="http://dev.ckeditor.com/ticket/4714">#4714</a> : Fixed IE6 JavaScript error when editing flash by commit 'Flash' dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/3905">#3905</a> : Fixed 'wysiwyg' mode causes unauthenticated content warnings over SSL in FF 3.5.</li> + <li><a href="http://dev.ckeditor.com/ticket/4768">#4768</a> : Fixed open context menu in IE throws js error when focus is not inside document.</li> + <li><a href="http://dev.ckeditor.com/ticket/4822">#4822</a> : Fixed applying 'Headers' to existing table does not work in IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/4855">#4855</a> : Fixed toolbar doesn't wrap well for 'v2' skin in all browsers.</li> + <li><a href="http://dev.ckeditor.com/ticket/4882">#4882</a> : Fixed auto detect paste from MS-Word is not working for Safari.</li> + <li><a href="http://dev.ckeditor.com/ticket/4882">#4882</a> : Fixed unexpected margin style left behind on content cleaning up from MS-Word.</li> + <li><a href="http://dev.ckeditor.com/ticket/4896">#4896</a> : Fixed paste nested list from MS-Word with measurement units set to cm is broken.</li> + <li><a href="http://dev.ckeditor.com/ticket/4899">#4899</a> : Fixed unable to undo pre-formatted style.</li> + <li><a href="http://dev.ckeditor.com/ticket/4900">#4900</a> : Fixed ratio-lock inconsistent between browsers.</li> + <li><a href="http://dev.ckeditor.com/ticket/4901">#4901</a> : Fixed unable to edit any link with popup window's features in Firefox.</li> + <li><a href="http://dev.ckeditor.com/ticket/4904">#4904</a> : Fixed when paste happen from dialog, it always throw JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4905">#4905</a> : Fixed paste plain text result incorrect when content from dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/4889">#4889</a> : Fixed unable to undo 'New Page' command after typing inside editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/4892">#4892</a> : Fixed table alignment style is not properly represented by the wrapping div.</li> + <li><a href="http://dev.ckeditor.com/ticket/4918">#4918</a> : Fixed switching mode when maximized is showing background page contents.</li> + </ul> + <h3> + CKEditor 3.0.2</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4343">#4343</a> : Added the configuration option 'browserContextMenuOnCtrl' so it's possible to enable the default browser context menu by holding the CTRL key.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4552">#4552</a> : Fixed float panel doesn't show up since editor instanced been destroyed once.</li> + <li><a href="http://dev.ckeditor.com/ticket/3918">#3918</a> : Fixed fake object is editable with Image dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/4053">#4053</a> : Fixed 'Form Properties' missing from context menu when selection collapsed inside form.</li> + <li><a href="http://dev.ckeditor.com/ticket/4401">#4401</a> : Fixed customized by removing 'upload' tab page from 'Link dialog' cause JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4477">#4477</a> : Adding missing tag names in object style elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/4567">#4567</a> : Fixed IE throw error when pressing BACKSPACE in source mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/4573">#4573</a> : Fixed 'IgnoreEmptyPargraph' config doesn't work with the config 'entities' is set to 'false'.</li> + <li><a href="http://dev.ckeditor.com/ticket/4614">#4614</a> : Fixed attribute protection fails because of line-break.</li> + <li><a href="http://dev.ckeditor.com/ticket/4546">#4546</a> : Fixed UIColor plugin doesn't work when editor id contains CSS selector preserved keywords.</li> + <li><a href="http://dev.ckeditor.com/ticket/4609">#4609</a> : Fixed flash object is lost when loading data from outside editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/4625">#4625</a> : Fixed editor stays visible in a div with style 'visibility:hidden'.</li> + <li><a href="http://dev.ckeditor.com/ticket/4621">#4621</a> : Fixed clicking below table caused an empty table been generated.</li> + <li><a href="http://dev.ckeditor.com/ticket/3373">#3373</a> : Fixed empty context menu when there's no menu item at all.</li> + <li><a href="http://dev.ckeditor.com/ticket/4473">#4473</a> : Fixed setting rules on the same element tag name throws error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4514">#4514</a> : Fixed press 'Back' button breaks wysiwyg editing mode is Firefox.</li> + <li><a href="http://dev.ckeditor.com/ticket/4542">#4542</a> : Fixed unable to access buttons using tab key in Safari and Opera.</li> + <li><a href="http://dev.ckeditor.com/ticket/4577">#4577</a> : Fixed relative link url is broken after opening 'Link' dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/4597">#4597</a> : Fixed custom style with same attribute name but different attribute value doesn't work.</li> + <li><a href="http://dev.ckeditor.com/ticket/4651">#4651</a> : Fixed 'Deleted' and 'Inserted' text style is not rendering in wysiwyg mode and is wrong is source mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/4654">#4654</a> : Fixed 'CKEDITOR.config.font_defaultLabel(fontSize_defaultLabel)' is not working.</li> + <li><a href="http://dev.ckeditor.com/ticket/3950">#3950</a> : Fixed table column insertion incorrect when selecting empty cell area.</li> + <li><a href="http://dev.ckeditor.com/ticket/3912">#3912</a> : Fixed UIColor not working in IE when page has more than 30+ editors.</li> + <li><a href="http://dev.ckeditor.com/ticket/4031">#4031</a> : Fixed mouse cursor on toolbar combo has more than 3 shapes.</li> + <li><a href="http://dev.ckeditor.com/ticket/4041">#4041</a> : Fixed open context menu on multiple cells to remove them result in only one removed.</li> + <li><a href="http://dev.ckeditor.com/ticket/4185">#4185</a> : Fixed resize handler effect doesn't affect flash object on output.</li> + <li><a href="http://dev.ckeditor.com/ticket/4196">#4196</a> : Fixed 'Remove Numbered/Bulleted List' on nested list doesn't work well on nested list.</li> + <li><a href="http://dev.ckeditor.com/ticket/4200">#4200</a> : Fixed unable to insert 'password' type filed with attributes.</li> + <li><a href="http://dev.ckeditor.com/ticket/4530">#4530</a> : Fixed context menu couldn't open in Opera.</li> + <li><a href="http://dev.ckeditor.com/ticket/4536">#4536</a> : Fixed keyboard navigation doesn't work at all in IE quirks mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/4584">#4584</a> : Fixed updated link Target field is not updating when updating to certain values.</li> + <li><a href="http://dev.ckeditor.com/ticket/4603">#4603</a> : Fixed unable to disable submenu items in contextmenu.</li> + <li><a href="http://dev.ckeditor.com/ticket/4672">#4672</a> : Fixed unable to redo the insertion of horizontal line.</li> + <li><a href="http://dev.ckeditor.com/ticket/4677">#4677</a> : Fixed 'Tab' key is trapped by hidden dialog elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/4073">#4073</a> : Fixed insert template with replace option could result in empty document.</li> + <li><a href="http://dev.ckeditor.com/ticket/4455">#4455</a> : Fixed unable to start editing when image inside document not loaded.</li> + <li><a href="http://dev.ckeditor.com/ticket/4517">#4517</a> : Fixed 'dialog_backgroundCoverColor' doesn't work on IE6.</li> + <li><a href="http://dev.ckeditor.com/ticket/3165">#3165</a> : Fixed enter key in empty list item before nested one result in collapsed line.</li> + <li><a href="http://dev.ckeditor.com/ticket/4527">#4527</a> : Fixed checkbox generate invalid 'checked' attribute.</li> + <li><a href="http://dev.ckeditor.com/ticket/1659">#1659</a> : Fixed unable to click below content to start editing in IE with 'config.docType' setting to standard compliant.</li> + <li><a href="http://dev.ckeditor.com/ticket/3933">#3933</a> : Fixed extra <br> left at the end of document when the last element is a table.</li> + <li><a href="http://dev.ckeditor.com/ticket/4736">#4736</a> : Fixed PAGE UP and PAGE DOWN keys in standards mode are not working.</li> + <li><a href="http://dev.ckeditor.com/ticket/4725">#4725</a> : Fixed hitting 'enter' before html comment node produces a JavaScript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4522">#4522</a> : Fixed unable to redo when typing after insert an image with relative url.</li> + <li><a href="http://dev.ckeditor.com/ticket/4594">#4594</a> : Fixed context menu goes off-screen when mouse is at right had side of screen.</li> + <li><a href="http://dev.ckeditor.com/ticket/4673">#4673</a> : Fixed undo not available straight away if shift key is used to enter first character.</li> + <li><a href="http://dev.ckeditor.com/ticket/4690">#4690</a> : Fixed the parsing of nested inline elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/4450">#4450</a> : Fixed selecting multiple table cells before apply justify commands generates spurious paragraph in Firefox.</li> + <li><a href="http://dev.ckeditor.com/ticket/4733">#4733</a> : Fixed dialog opening sometimes hang up Firefox and Safari.</li> + <li><a href="http://dev.ckeditor.com/ticket/4498">#4498</a> : Fixed toolbar collapse button missing tooltip.</li> + <li><a href="http://dev.ckeditor.com/ticket/4738">#4738</a> : Fixed inserting table inside bold/italic/underline generates error on ENTER_BR mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/4246">#4246</a> : Fixed avoid XHTML deprecated attributes for image styling.</li> + <li><a href="http://dev.ckeditor.com/ticket/4543">#4543</a> : Fixed unable to move cursor between table and hr.</li> + <li><a href="http://dev.ckeditor.com/ticket/4764">#4764</a> : Fixed wrong exception message when CKEDITOR.editor.append() to non-existing elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/4521">#4521</a> : Fixed dialog layout in IE6/7 may have scroll-bar and other weird effects.</li> + <li><a href="http://dev.ckeditor.com/ticket/4709">#4709</a> : Fixed inconsistent scroll-bar behavior on IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/4776">#4776</a> : Fixed preview page failed to open when relative URl contains in document.</li> + <li><a href="http://dev.ckeditor.com/ticket/4812">#4812</a> : Fixed 'Esc' key not working on dialogs in Opera.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/4346">#4346</a> : Dutch;</li> + <li><a href="http://dev.ckeditor.com/ticket/4837">#4837</a> : Finnish;</li> + <li><a href="http://dev.ckeditor.com/ticket/4371">#4371</a> : Hebrew;</li> + <li><a href="http://dev.ckeditor.com/ticket/4371">#4607</a> <a href="http://dev.ckeditor.com/ticket/4713">#4713</a> : Japanese;</li> + <li><a href="http://dev.ckeditor.com/ticket/4660">#4660</a> : Norwegian.</li> + </ul></li> + </ul> + <h3> + CKEditor 3.0.1</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/4219">#4219</a> : Added fallback mechanism for config.language.</li> + <li><a href="http://dev.ckeditor.com/ticket/4194">#4194</a> : Added support for using multiple css style sheets within the editor.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/3898">#3898</a> : Added validation for URL value in Image dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/3528">#3528</a> : Fixed Context Menu issue when triggered using Shift+F10.</li> + <li><a href="http://dev.ckeditor.com/ticket/4028">#4028</a> : Maximize control's tool tip was wrong once it is maximized.</li> + <li><a href="http://dev.ckeditor.com/ticket/4237">#4237</a> : Toolbar is chopped off in Safari browser 3.x.</li> + <li><a href="http://dev.ckeditor.com/ticket/4241">#4241</a> : Float panels are left on screen while editor is destroyed.</li> + <li><a href="http://dev.ckeditor.com/ticket/4274">#4274</a> : Double click event is incorrect handled in 'divreplace' sample.</li> + <li><a href="http://dev.ckeditor.com/ticket/4354">#4354</a> : Fixed TAB key on toolbar to not focus disabled buttons.</li> + <li><a href="http://dev.ckeditor.com/ticket/3856">#3856</a> : Fixed focus and blur events in source view mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/3438">#3438</a> : Floating panels are off by (-1px, 0px) in RTL mode.</li> + <li><a href="http://dev.ckeditor.com/ticket/3370">#3370</a> : Refactored use of CKEDITOR.env.isCustomDomain().</li> + <li><a href="http://dev.ckeditor.com/ticket/4230">#4230</a> : HC detection caused js error.</li> + <li><a href="http://dev.ckeditor.com/ticket/3978">#3978</a> : Fixed setStyle float on IE7 strict.</li> + <li><a href="http://dev.ckeditor.com/ticket/4262">#4262</a> : Tab and Shift+Tab was not working to cycle through CTRL+SHIFT+F10 context menu in IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/3633">#3633</a> : Default context menu isn't disabled in toolbar, status bar, panels...</li> + <li><a href="http://dev.ckeditor.com/ticket/3897">#3897</a> : Now there is no image previews when the URL is empty in image dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/4048">#4048</a> : Context submenu was lacking uiColor.</li> + <li><a href="http://dev.ckeditor.com/ticket/3568">#3568</a> : Dialogs now select all text when tabbing to text inputs.</li> + <li><a href="http://dev.ckeditor.com/ticket/3727">#3727</a> : Cell Properties dialog was missing color selection option.</li> + <li><a href="http://dev.ckeditor.com/ticket/3517">#3517</a> : Fixed "Match cyclic" field in Find & Replace dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/4368">#4368</a> : borderColor table cell attribute haven't worked for none-IE</li> + <li><a href="http://dev.ckeditor.com/ticket/4203">#4203</a> : In IE quirks mode + toolbar collapsed + source mode editing block height was incorrect.</li> + <li><a href="http://dev.ckeditor.com/ticket/4387">#4387</a> : Fixed: right clicking in Kama skin can lead to a javascript error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4397">#4397</a> : Wysiwyg mode caused the host page scroll.</li> + <li><a href="http://dev.ckeditor.com/ticket/4385">#4385</a> : Fixed editor's auto adjusting on DOM structure were confusing the dirty checking mechanism.</li> + <li><a href="http://dev.ckeditor.com/ticket/4397">#4397</a> : Fixed regression of [3816] where turn on design mode was causing Firefox3 to scroll the host page.</li> + <li><a href="http://dev.ckeditor.com/ticket/4254">#4254</a> : Added basic API sample.</li> + <li><a href="http://dev.ckeditor.com/ticket/4107">#4107</a> : Normalize css font-family style text for correct comparision.</li> + <li><a href="http://dev.ckeditor.com/ticket/3664">#3664</a> : Insert block element in empty editor document should not create new paragraph.</li> + <li><a href="http://dev.ckeditor.com/ticket/4037">#4037</a> : 'id' attribute is missing with Flash dialog advanced page.</li> + <li><a href="http://dev.ckeditor.com/ticket/4047">#4047</a> : Delete selected control type element when 'Backspace' is pressed on it.</li> + <li><a href="http://dev.ckeditor.com/ticket/4191">#4191</a> : Fixed: dialog changes confirmation on image dialog appeared even when no changes have been made.</li> + <li><a href="http://dev.ckeditor.com/ticket/4351">#4351</a> : Dash and dot could appear in attribute names.</li> + <li><a href="http://dev.ckeditor.com/ticket/4355">#4355</a> : 'maximize' and 'showblock' commands shouldn't take editor focus.</li> + <li><a href="http://dev.ckeditor.com/ticket/4504">#4504</a> : Fixed 'Enter'/'Esc' key is not working on dialog button.</li> + <li><a href="http://dev.ckeditor.com/ticket/4245">#4245</a> : 'Strange Template' now come with a style attribute for width.</li> + <li><a href="http://dev.ckeditor.com/ticket/4512">#4512</a> : Fixed styles plugin incorrectly adding semicolons to style text.</li> + <li><a href="http://dev.ckeditor.com/ticket/3855">#3855</a> : Fixed loading unminified _source files when ckeditor_source.js is used.</li> + <li><a href="http://dev.ckeditor.com/ticket/3717">#3717</a> : Dialog settings defaults can now be overridden in-page through the CKEDITOR.config object.</li> + <li><a href="http://dev.ckeditor.com/ticket/4481">#4481</a> : The 'stylesCombo_stylesSet' configuration entry didn't work for full URLs.</li> + <li><a href="http://dev.ckeditor.com/ticket/4480">#4480</a> : Fixed scope attribute in th.</li> + <li><a href="http://dev.ckeditor.com/ticket/4467">#4467</a> : Fixed bug to use custom icon in context menus. Thanks to george.</li> + <li><a href="http://dev.ckeditor.com/ticket/4190">#4190</a> : Fixed select field dialog layout in Safari.</li> + <li><a href="http://dev.ckeditor.com/ticket/4518">#4518</a> : Fixed unable to open dialog without editor focus in IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/4519">#4519</a> : Fixed maximize without editor focus throw error in IE.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/3947">#3947</a> : Arabic;</li> + <li><a href="http://dev.ckeditor.com/ticket/4466">#4466</a> : Czech;</li> + <li><a href="http://dev.ckeditor.com/ticket/4363">#4363</a> : Danish;</li> + <li><a href="http://dev.ckeditor.com/ticket/4346">#4346</a> : Dutch;</li> + <li><a href="http://dev.ckeditor.com/ticket/4371">#4371</a> <a href="http://dev.ckeditor.com/ticket/4456">#4456</a> : Hebrew;</li> + <li><a href="http://dev.ckeditor.com/ticket/4382">#4382</a> : Polish.</li> + </ul></li> + </ul> + <h3> + CKEditor 3.0</h3> + <p> + New features:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/3188">#3188</a> : Introduce + <pre> formatting feature when converting from other blocks.</li> + <li><a href="http://dev.ckeditor.com/ticket/4445">#4445</a> : editor::setData now support an optional callback parameter.</li> + </ul> + <p> + Fixed issues:</p> + <ul> + <li><a href="http://dev.ckeditor.com/ticket/2856">#2856</a> : Fixed problem with inches in Paste From Word plugin.</li> + <li><a href="http://dev.ckeditor.com/ticket/3929">#3929</a> : Using Paste dialog, + the text is pasted into current selection</li> + <li><a href="http://dev.ckeditor.com/ticket/3920">#3920</a> : Mouse cursor over characters in + Special Character dialog now is correct</li> + <li><a href="http://dev.ckeditor.com/ticket/3882">#3882</a> : Fixed an issue + with PasteFromWord dialog in which default values was ignored</li> + <li><a href="http://dev.ckeditor.com/ticket/3859">#3859</a> : Fixed Flash dialog layout in Webkit</li> + <li><a href="http://dev.ckeditor.com/ticket/3852">#3852</a> : Disabled textarea resizing in dialogs</li> + <li><a href="http://dev.ckeditor.com/ticket/3831">#3831</a> : The attempt to remove the contextmenu plugin + will not anymore break the editor</li> + <li><a href="http://dev.ckeditor.com/ticket/3781">#3781</a> : Colorbutton is now disabled in 'source' mode</li> + <li><a href="http://dev.ckeditor.com/ticket/3848">#3848</a> : Fixed an issue with Webkit in witch + elements in the Image and Link dialogs had wrong dimensions.</li> + <li><a href="http://dev.ckeditor.com/ticket/3808">#3808</a> : Fixed UI Color Picker dialog size in example page.</li> + <li><a href="http://dev.ckeditor.com/ticket/3658">#3658</a> : Editor had horizontal scrollbar in IE6.</li> + <li><a href="http://dev.ckeditor.com/ticket/3819">#3819</a> : The cursor was not visible + when applying style to collapsed selections in Firefox 2.</li> + <li><a href="http://dev.ckeditor.com/ticket/3809">#3809</a> : Fixed beam cursor + when mouse cursor is over text-only buttons in IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/3815">#3815</a> : Fixed an issue + with the form dialog in which the "enctype" attribute is outputted as "encoding".</li> + <li><a href="http://dev.ckeditor.com/ticket/3785">#3785</a> : Fixed an issue + in CKEDITOR.tools.htmlEncode() which incorrectly outputs &nbsp; in IE8.</li> + <li><a href="http://dev.ckeditor.com/ticket/3820">#3820</a> : Fixed an issue in + bullet list command in which a list created at the bottom of another gets merged to the top. + </li> + <li><a href="http://dev.ckeditor.com/ticket/3830">#3830</a> : Table cell properties dialog + doesn't apply to all selected cells.</li> + <li><a href="http://dev.ckeditor.com/ticket/3835">#3835</a> : Element path is not refreshed + after click on 'newpage'; and safari is not putting focus on document also. + </li> + <li><a href="http://dev.ckeditor.com/ticket/3821">#3821</a> : Fixed an issue with JAWS in which + toolbar items are read inconsistently between virtual cursor modes.</li> + <li><a href="http://dev.ckeditor.com/ticket/3789">#3789</a> : The "src" attribute + was getting duplicated in some situations.</li> + <li><a href="http://dev.ckeditor.com/ticket/3591">#3591</a> : Protecting flash related elements + including '<object>', '<embed>' and '<param>'. + </li> + <li><a href="http://dev.ckeditor.com/ticket/3759">#3759</a> : Fixed CKEDITOR.dom.element::scrollIntoView + logic bug which scroll even element is inside viewport. + </li> + <li><a href="http://dev.ckeditor.com/ticket/3773">#3773</a> : Fixed remove list will merge lines. + </li> + <li><a href="http://dev.ckeditor.com/ticket/3829">#3829</a> : Fixed remove empty link on output data.</li> + <li><a href="http://dev.ckeditor.com/ticket/3730">#3730</a> : Indent is performing on the whole + block instead of selected lines in enterMode = BR.</li> + <li><a href="http://dev.ckeditor.com/ticket/3844">#3844</a> : Fixed UndoManager register keydown on obsoleted document</li> + <li><a href="http://dev.ckeditor.com/ticket/3805">#3805</a> : Enabled SCAYT plugin for IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/3834">#3834</a> : Context menu on table caption was incorrect.</li> + <li><a href="http://dev.ckeditor.com/ticket/3812">#3812</a> : Fixed an issue in which the editor + may show up empty or uneditable in IE7, 8 and Firefox 3.</li> + <li><a href="http://dev.ckeditor.com/ticket/3825">#3825</a> : Fixed JS error when opening spellingcheck.</li> + <li><a href="http://dev.ckeditor.com/ticket/3862">#3862</a> : Fixed html parser infinite loop on certain malformed + source code.</li> + <li><a href="http://dev.ckeditor.com/ticket/3639">#3639</a> : Button size was inconsistent.</li> + <li><a href="http://dev.ckeditor.com/ticket/3874">#3874</a> : Paste as plain text in Safari loosing lines.</li> + <li><a href="http://dev.ckeditor.com/ticket/3849">#3849</a> : Fixed IE8 crashes when applying lists and indenting.</li> + <li><a href="http://dev.ckeditor.com/ticket/3876">#3876</a> : Changed dialog checkbox and radio labels to explicit labels.</li> + <li><a href="http://dev.ckeditor.com/ticket/3843">#3843</a> : Fixed context submenu position in IE 6 & 7 RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/3864">#3864</a> : [FF]Document is not editable after inserting element on a fresh page.</li> + <li><a href="http://dev.ckeditor.com/ticket/3883">#3883</a> : Fixed removing inline style logic incorrect on Firefox2.</li> + <li><a href="http://dev.ckeditor.com/ticket/3884">#3884</a> : Empty "href" attribute was duplicated on output data.</li> + <li><a href="http://dev.ckeditor.com/ticket/3858">#3858</a> : Fixed the issue where toolbars + break up in IE6 and IE7 after the browser is resized.</li> + <li><a href="http://dev.ckeditor.com/ticket/3868">#3868</a> : [chrome] SCAYT toolbar options was in reversed order.</li> + <li><a href="http://dev.ckeditor.com/ticket/3875">#3875</a> : Fixed an issue in Safari where + table row/column/cell menus are not useable when table cells are selected.</li> + <li><a href="http://dev.ckeditor.com/ticket/3896">#3896</a> : The editing area was + flashing when switching forth and back to source view.</li> + <li><a href="http://dev.ckeditor.com/ticket/3894">#3894</a> : Fixed an issue where editor failed to initialize when using the on-demand loading way.</li> + <li><a href="http://dev.ckeditor.com/ticket/3903">#3903</a> : Color button plugin doesn't read config entry from editor instance correctly.</li> + <li><a href="http://dev.ckeditor.com/ticket/3801">#3801</a> : Comments at the start of the document was lost in IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/3871">#3871</a> : Unable to redo when undos to the front of snapshots stack.</li> + <li><a href="http://dev.ckeditor.com/ticket/3909">#3909</a> : Move focus from editor into a text input control is broken.</li> + <li><a href="http://dev.ckeditor.com/ticket/3870">#3870</a> : The empty paragraph + desappears when hitting ENTER after "New Page".</li> + <li><a href="http://dev.ckeditor.com/ticket/3887">#3887</a> : Fixed an issue in which the create + list command may leak outside of a selected table cell and into the rest of document.</li> + <li><a href="http://dev.ckeditor.com/ticket/3916">#3916</a> : Fixed maximize does not enlarge editor width when width is set.</li> + <li><a href="http://dev.ckeditor.com/ticket/3879">#3879</a> : [webkit] Color button panel had incorrect size on first open.</li> + <li><a href="http://dev.ckeditor.com/ticket/3839">#3839</a> : Update Scayt plugin to reflect the latest change from SpellChecker.net.</li> + <li><a href="http://dev.ckeditor.com/ticket/3742">#3742</a> : Fixed wrong dialog layout for dialogs without tab bar in IE RTL mode .</li> + <li><a href="http://dev.ckeditor.com/ticket/3671">#3671</a> : Fixed body fixing should be applied to the real type under fake elements.</li> + <li><a href="http://dev.ckeditor.com/ticket/3836">#3836</a> : Fixed remove list in enterMode=BR will merge sibling text to one line.</li> + <li><a href="http://dev.ckeditor.com/ticket/3949">#3949</a> : Fixed enterKey within pre-formatted text introduce wrong line-break.</li> + <li><a href="http://dev.ckeditor.com/ticket/3878">#3878</a> : Whenever possible, + dialogs will not present scrollbars if the content is too big for its standard + size.</li> + <li><a href="http://dev.ckeditor.com/ticket/3782">#3782</a> : Remove empty list in table cell result in collapsed cell.</li> + <li>Updated the following language files:<ul> + <li><a href="http://dev.ckeditor.com/ticket/4183">#4183</a> : Basque;</li> + <li><a href="http://dev.ckeditor.com/ticket/3837">#3837</a> : Brazilian Portuguese;</li> + <li><a href="http://dev.ckeditor.com/ticket/4171">#4171</a> : Catalan;</li> + <li><a href="http://dev.ckeditor.com/ticket/4115">#4115</a> : Chinese (Simplified);</li> + <li><a href="http://dev.ckeditor.com/ticket/4179">#4179</a> : Chinese (Traditional);</li> + <li><a href="http://dev.ckeditor.com/ticket/4102">#4102</a> : Croatian;</li> + <li><a href="http://dev.ckeditor.com/ticket/4105">#4105</a> : French;</li> + <li><a href="http://dev.ckeditor.com/ticket/4104">#4104</a> : German;</li> + <li><a href="http://dev.ckeditor.com/ticket/4116">#4116</a> : Italian;</li> + <li><a href="http://dev.ckeditor.com/ticket/4091">#4091</a> : Japanese;</li> + <li><a href="http://dev.ckeditor.com/ticket/4120">#4120</a> : Polish;</li> + <li><a href="http://dev.ckeditor.com/ticket/3987">#3987</a> : Spanish;</li> + <li><a href="http://dev.ckeditor.com/ticket/4089">#4089</a> : Ukrainian;</li> + <li><a href="http://dev.ckeditor.com/ticket/4166">#4166</a> : Vietnamese.</li> + </ul></li> + <li><a href="http://dev.ckeditor.com/ticket/3984">#3984</a> : [IE]The pre-formatted style is generating error.</li> + <li><a href="http://dev.ckeditor.com/ticket/3946">#3946</a> : Fixed unable to hide contextmenu.</li> + <li><a href="http://dev.ckeditor.com/ticket/3956">#3956</a> : Fixed About dialog in Source Mode for IE.</li> + <li><a href="http://dev.ckeditor.com/ticket/3953">#3953</a> : Fixed keystroke for close Paste dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/3951">#3951</a> : Reset size and lock ratio options were not accessible in Image dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/3921">#3921</a> : Fixed Container scroll issue on IE7.</li> + <li><a href="http://dev.ckeditor.com/ticket/3940">#3940</a> : Fixed list operation doesn't stop at table.</li> + <li><a href="http://dev.ckeditor.com/ticket/3891">#3891</a> : [IE] Fixed 'automatic' font color doesn't work.</li> + <li><a href="http://dev.ckeditor.com/ticket/3972">#3972</a> : Fixed unable to remove a single empty list in document in Firefox with enterMode=BR.</li> + <li><a href="http://dev.ckeditor.com/ticket/3973">#3973</a> : Fixed list creation error at the end of document.</li> + <li><a href="http://dev.ckeditor.com/ticket/3959">#3959</a> : Pasting styled text from word result in content lost.</li> + <li><a href="http://dev.ckeditor.com/ticket/3793">#3793</a> : Combined images into sprites.</li> + <li><a href="http://dev.ckeditor.com/ticket/3783">#3783</a> : Fixed indenting command in table cells create collapsed paragraph.</li> + <li><a href="http://dev.ckeditor.com/ticket/3968">#3968</a> : About dialog layout was broken with IE+Standards+RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/3991">#3991</a> : In IE quirks, text was not visible in v2 and office2003 skins.</li> + <li><a href="http://dev.ckeditor.com/ticket/3983">#3983</a> : In IE, we'll now + silently ignore wrong toolbar definition settings which have extra commas being + left around.</li> + <li>Fixed the following test cases:<ul> + <li><a href="http://dev.ckeditor.com/ticket/3992">#3992</a> : core/ckeditor2.html</li> + <li><a href="http://dev.ckeditor.com/ticket/4138">#4138</a> : core/plugins.html</li> + <li><a href="http://dev.ckeditor.com/ticket/3801">#3801</a> : plugins/htmldataprocessor/htmldataprocessor.html</li> + </ul></li> + <li><a href="http://dev.ckeditor.com/ticket/3989">#3989</a> : Host page horizontal scrolling a lot when on having righ-to-left direction.</li> + <li><a href="http://dev.ckeditor.com/ticket/4001">#4001</a> : Create link around existing image result incorrect.</li> + <li><a href="http://dev.ckeditor.com/ticket/3988">#3988</a> : Destroy editor on form submit event cause error.</li> + <li><a href="http://dev.ckeditor.com/ticket/3994">#3994</a> : Insert horizontal line at end of document cause error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4074">#4074</a> : Indent error with 'indentClasses' config specified.</li> + <li><a href="http://dev.ckeditor.com/ticket/4057">#4057</a> : Fixed anchor is lost after switch between editing modes.</li> + <li><a href="http://dev.ckeditor.com/ticket/3644">#3644</a> : Image dialog was missin radio lock.</li> + <li><a href="http://dev.ckeditor.com/ticket/4014">#4014</a> : Firefox2 had no dialog button backgrounds.</li> + <li><a href="http://dev.ckeditor.com/ticket/4018">#4018</a> : Firefox2 had no richcombo text visible.</li> + <li><a href="http://dev.ckeditor.com/ticket/4035">#4035</a> : [IE6] Paste dialog size was too small.</li> + <li><a href="http://dev.ckeditor.com/ticket/4049">#4049</a> : Kama skin was too wide with config.width.</li> + <li>The following released files now doesn't require the _source folder<ul> + <li><a href="http://dev.ckeditor.com/ticket/4086">#4086</a> : _samples/ui_languages.html</li> + <li><a href="http://dev.ckeditor.com/ticket/4093">#4093</a> : _tests/core/dom/document.html</li> + <li><a href="http://dev.ckeditor.com/ticket/4094">#4094</a> : Smiley plugin file</li> + <li><a href="http://dev.ckeditor.com/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li> + </ul></li> + <li><a href="http://dev.ckeditor.com/ticket/4085">#4085</a> : Paste and Paste from Word dialogs were not well styled in IE+RTL.</li> + <li><a href="http://dev.ckeditor.com/ticket/3982">#3982</a> : Fixed enterKey on empty list item result in weird dom structure.</li> + <li><a href="http://dev.ckeditor.com/ticket/4101">#4101</a> : Now it is possible to close dialog before gets focus.</li> + <li><a href="http://dev.ckeditor.com/ticket/4075">#4075</a> : [IE6/7]Fixed apply custom inline style with "class" attribute failed.</li> + <li><a href="http://dev.ckeditor.com/ticket/4087">#4087</a> : [Firefox]Fixed extra blocks created on create list when full document selected.</li> + <li><a href="http://dev.ckeditor.com/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li> + <li><a href="http://dev.ckeditor.com/ticket/4111">#4111</a> : Fixed apply block style after inline style applied on full document error.</li> + <li><a href="http://dev.ckeditor.com/ticket/3622">#3622</a> : Fixed shift enter with selection not deleting highlighted text.</li> + <li><a href="http://dev.ckeditor.com/ticket/4092">#4092</a> : [IE6] Close button was missing for dialog without multiple tabs.</li> + <li><a href="http://dev.ckeditor.com/ticket/4003">#4003</a> : Markup on the image dialog was disrupted when removing the border input.</li> + <li><a href="http://dev.ckeditor.com/ticket/4096">#4096</a> : Editor content area was pushed down in IE RTL quirks.</li> + <li><a href="http://dev.ckeditor.com/ticket/4112">#4112</a> : [FF] Paste dialog had scrollbars in quirks.</li> + <li><a href="http://dev.ckeditor.com/ticket/4118">#4118</a> : Dialog dragging was + occasionally behaving strangely .</li> + <li><a href="http://dev.ckeditor.com/ticket/4077">#4077</a> : The toolbar combos + were rendering incorrectly in some languages, like Chinese.</li> + <li><a href="http://dev.ckeditor.com/ticket/3622">#3622</a> : The toolbar in the v2 + skin was wrapping improperly in some languages.</li> + <li><a href="http://dev.ckeditor.com/ticket/4119">#4119</a> : Unable to edit image link with image dialog.</li> + <li><a href="http://dev.ckeditor.com/ticket/4117">#4117</a> : Fixed dialog error when transforming image into button.</li> + <li><a href="http://dev.ckeditor.com/ticket/4058">#4058</a> : [FF] wysiwyg mode is sometimes not been activated.</li> + <li><a href="http://dev.ckeditor.com/ticket/4114">#4114</a> : [IE] RTE + IE6/IE7 Quirks = dialog mispositoned.</li> + <li><a href="http://dev.ckeditor.com/ticket/4123">#4123</a> : Some dialog buttons were broken in IE7 quirks.</li> + <li><a href="http://dev.ckeditor.com/ticket/4122">#4122</a> : [IE] The image dialog + was being rendered improperly when loading an image with long URL.</li> + <li><a href="http://dev.ckeditor.com/ticket/4144">#4144</a> : Fixed the white-spaces at the end of <pre> is incorrectly removed.</li> + <li><a href="http://dev.ckeditor.com/ticket/4143">#4143</a> : Fixed element id is lost when extracting contents from the range.</li> + <li><a href="http://dev.ckeditor.com/ticket/4007">#4007</a> : [IE] Source area overflow from editor chrome.</li> + <li><a href="http://dev.ckeditor.com/ticket/4145">#4145</a> : Fixed the on demand + ("basic") loading model of the editor.</li> + <li><a href="http://dev.ckeditor.com/ticket/4139">#4139</a> : Fixed list plugin regression of [3903].</li> + <li><a href="http://dev.ckeditor.com/ticket/4147">#4147</a> : Unify style text normalization logic when comparing styles.</li> + <li><a href="http://dev.ckeditor.com/ticket/4150">#4150</a> : Fixed enlarge list result incorrect at the inner boundary of block.</li> + <li><a href="http://dev.ckeditor.com/ticket/4164">#4164</a> : Now it is possible to paste text + in Source mode even if forcePasteAsPlainText = true.</li> + <li><a href="http://dev.ckeditor.com/ticket/4129">#4129</a> : [FF]Unable to remove list with Ctrl-A.</li> + <li><a href="http://dev.ckeditor.com/ticket/4172">#4172</a> : [Safari] The trailing + <br> was not been always added to blank lines ending with &nbsp;.</li> + <li><a href="http://dev.ckeditor.com/ticket/4178">#4178</a> : It's now possible to + copy and paste Flash content among different editor instances.</li> + <li><a href="http://dev.ckeditor.com/ticket/4193">#4193</a> : Automatic font color produced empty span on Firefox 3.5.</li> + <li><a href="http://dev.ckeditor.com/ticket/4186">#4186</a> : [FF] Fixed First open float panel cause host page scrollbar blinking.</li> + <li><a href="http://dev.ckeditor.com/ticket/4227">#4227</a> : Fixed destroy editor instance created on textarea which is not within form cause error.</li> + <li><a href="http://dev.ckeditor.com/ticket/4240">#4240</a> : Fixed editor name containing hyphen break editor completely.</li> + <li><a href="http://dev.ckeditor.com/ticket/3828">#3828</a> : Malformed nested list is now corrected by the parser.</li> + </ul> + <h3> + CKEditor 3.0 RC</h3> + <p> + Changelog starts at this release.</p> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/INSTALL.html b/INSTALL.html new file mode 100644 index 0000000..fd2440e --- /dev/null +++ b/INSTALL.html @@ -0,0 +1,92 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Installation Guide - CKEditor</title> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <style type="text/css"> + h3 + { + border-bottom: 1px solid #AAAAAA; + } + pre + { + background-color: #F9F9F9; + border: 1px dashed #2F6FAB; + padding: 1em; + line-height: 1.1em; + } + #footer hr + { + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; + } + #footer p + { + margin: 0 10px 10px 10px; + float: left; + } + #footer #copy + { + float: right; + } + </style> +</head> +<body> + <h1> + CKEditor Installation Guide</h1> + <h3> + What's CKEditor?</h3> + <p> + CKEditor is a text editor to be used inside web pages. It's not a replacement + for desktop text editors like Word or OpenOffice, but a component to be used as + part of web applications and web sites.</p> + <h3> + Installation</h3> + <p> + Installing CKEditor is an easy task. Just follow these simple steps:</p> + <ol> + <li><strong>Download</strong> the latest version of the editor from our web site: <a + href="http://ckeditor.com">http://ckeditor.com</a>. You should have already completed + this step, but be sure you have the very latest version.</li> + <li><strong>Extract</strong> (decompress) the downloaded file into the root of your + web site.</li> + </ol> + <p> + <strong>Note:</strong> CKEditor is by default installed in the "ckeditor" + folder. You can place the files in whichever you want though.</p> + <h3> + Checking Your Installation + </h3> + <p> + The editor comes with a few sample pages that can be used to verify that installation + proceeded properly. Take a look at the <a href="_samples">_samples</a> directory.</p> + <p> + To test your installation, just call the following page at your web site:</p> + <pre> +http://<your site>/<CKEditor installation path>/_samples/index.html + +For example: +http://www.example.com/ckeditor/_samples/index.html</pre> + <h3> + Documentation</h3> + <p> + The full editor documentation is available online at the following address:<br /> + <a href="http://docs.cksource.com/ckeditor">http://docs.cksource.com/ckeditor</a></p> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/LICENSE.html b/LICENSE.html new file mode 100644 index 0000000..9022242 --- /dev/null +++ b/LICENSE.html @@ -0,0 +1,1327 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +== BEGIN TEXT ONLY VERSION == + +Software License Agreement +========================== + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. + +Sources of Intellectual Property Included in CKEditor +===================================================== + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +Trademarks +========== + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +Appendix A: The GPL License +=========================== + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +============================ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +=========================== + + MOZILLA PUBLIC LICENSE + Version 1.1 + + =============== + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + +== END TEXT ONLY VERSION == +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>License - CKEditor</title> +</head> +<body> + <h1> + Software License Agreement + </h1> + <p> + <strong>CKEditor™</strong> - The text editor for Internet™ - <a href="http://ckeditor.com"> + http://ckeditor.com</a><br /> + Copyright © 2003-2011, <a href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. + </p> + <p> + Licensed under the terms of any of the following licenses at your choice: + </p> + <ul> + <li><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a> Version + 2 or later (the "GPL");</li> + <li><a href="http://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a> + Version 2.1 or later (the "LGPL");</li> + <li><a href="http://www.mozilla.org/MPL/MPL-1.1.html">Mozilla Public License</a> Version + 1.1 or later (the "MPL").</li> + </ul> + <p> + You are not required to, but if you want to explicitly declare the license you have + chosen to be bound to when using, reproducing, modifying and distributing this software, + just include a text file titled "LEGAL" in your version of this software, indicating + your license choice. In any case, your choice will not restrict any recipient of + your version of this software to use, reproduce, modify and distribute this software + under any of the above licenses. + </p> + <h2> + Sources of Intellectual Property Included in CKEditor + </h2> + <p> + Where not otherwise indicated, all CKEditor content is authored by CKSource engineers + and consists of CKSource-owned intellectual property. In some specific instances, + CKEditor will incorporate work done by developers outside of CKSource with their + express permission. + </p> + <p> + <a href="http://developer.yahoo.com/yui/yuitest/">YUI Test</a>: At _source/tests/yuitest.js + can be found part of the source code of YUI, which is licensed under the terms of + the <a href="http://developer.yahoo.com/yui/license.txt">BSD License</a>. YUI is + Copyright © 2008, Yahoo! Inc. + </p> + <h2> + Trademarks + </h2> + <p> + CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product + names are trademarks, registered trademarks or service marks of their respective + holders. + </p> +</body> +</html> diff --git a/_samples/adobeair/application.xml b/_samples/adobeair/application.xml new file mode 100644 index 0000000..a6635a6 --- /dev/null +++ b/_samples/adobeair/application.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<application xmlns="http://ns.adobe.com/air/application/1.0"> + <id>com.ckeditor.air.sample</id> + <name>CKEditor - Adobe AIR Sample Application</name> + <version>1.0</version> + <filename>CKEditor AIR Samples</filename> + <description>This is a sample AIR application of CKEditor.</description> + <copyright>Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.</copyright> + <initialWindow> + <content>_samples/adobeair/sample.html</content> + <title>CKEditor - Adobe AIR Sample</title> + <systemChrome>standard</systemChrome> + <transparent>false</transparent> + <visible>true</visible> + <minimizable>true</minimizable> + <maximizable>true</maximizable> + <resizable>true</resizable> + <x>100</x> + <y>80</y> + <width>950</width> + <height>700</height> + <minSize>900 600</minSize> + </initialWindow> + <installFolder>CKEditor/Sample AIR Application</installFolder> + <programMenuFolder>CKEditor/Sample AIR Application</programMenuFolder> + <customUpdateUI>false</customUpdateUI> + <allowBrowserInvocation>false</allowBrowserInvocation> +</application> diff --git a/_samples/adobeair/run.bat b/_samples/adobeair/run.bat new file mode 100644 index 0000000..2e1518e --- /dev/null +++ b/_samples/adobeair/run.bat @@ -0,0 +1,9 @@ +@ECHO OFF +:: +:: Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +:: For licensing, see LICENSE.html or http://ckeditor.com/license +:: +:: Use this file to quickly run the sample in a Windows environment. +:: + +adl application.xml ../../ diff --git a/_samples/adobeair/run.sh b/_samples/adobeair/run.sh new file mode 100644 index 0000000..be08d9e --- /dev/null +++ b/_samples/adobeair/run.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +# For licensing, see LICENSE.html or http://ckeditor.com/license + +# Use this file to quickly run the sample under Linux. + +adl application.xml ../../ diff --git a/_samples/adobeair/sample.html b/_samples/adobeair/sample.html new file mode 100644 index 0000000..493f4bf --- /dev/null +++ b/_samples/adobeair/sample.html @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Replace Textarea by Code - CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../../ckeditor.js"></script> + <link href="../sample.css" rel="stylesheet" type="text/css" /> + <style type="text/css"> + body { margin: 10px ; } + </style></head> +<body> + <h1 class="samples"> + CKEditor - Adobe AIR Sample + </h1> + <p> + This is a sample HTML/JavaScript Adobe AIR application with CKEditor with default features. + </p> + <p> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + CKEDITOR.replace( 'editor1' ); + + //]]> + </script> + </p> + <div id="footer" style="position:absolute;bottom:0;left:0;right:0;width:100%;padding-bottom:10px;"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a class="samples" href="#" onclick="window.runtime.flash.net.navigateToURL(new window.runtime.flash.net.URLRequest('http://ckeditor.com/'));return false;">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="#" onclick="window.runtime.flash.net.navigateToURL(new window.runtime.flash.net.URLRequest('http://cksource.com/'));return false;">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/ajax.html b/_samples/ajax.html new file mode 100644 index 0000000..c6fe892 --- /dev/null +++ b/_samples/ajax.html @@ -0,0 +1,98 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Ajax — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <script type="text/javascript"> + //<![CDATA[ + +var editor, html = ''; + +function createEditor() +{ + if ( editor ) + return; + + + // Create a new editor inside the <div id="editor">, setting its value to html + var config = {}; + editor = CKEDITOR.appendTo( 'editor', config, html ); +} + +function removeEditor() +{ + if ( !editor ) + return; + + // Retrieve the editor contents. In an Ajax application, this data would be + // sent to the server or used in any other way. + document.getElementById( 'editorcontents' ).innerHTML = html = editor.getData(); + document.getElementById( 'contents' ).style.display = ''; + + // Destroy the editor. + editor.destroy(); + editor = null; +} + + //]]> + </script> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Create and Destroy Editor Instances for Ajax Applications + </h1> + <div class="description"> + <p> + This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing + area will be displayed in a <code><div></code> element. + </p> + <p> + For details of how to create this setup check the source code of this sample page + for JavaScript code responsible for the creation and destruction of a CKEditor instance. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <p>Click the buttons to create and remove a CKEditor instance.</p> + <p> + <input onclick="createEditor();" type="button" value="Create Editor" /> + <input onclick="removeEditor();" type="button" value="Remove Editor" /> + </p> + <!-- This div will hold the editor. --> + <div id="editor"> + </div> + <div id="contents" style="display: none"> + <p> + Edited Contents:</p> + <!-- This div will be used to display the editor contents. --> + <div id="editorcontents"> + </div> + </div> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/api.html b/_samples/api.html new file mode 100644 index 0000000..a3f2035 --- /dev/null +++ b/_samples/api.html @@ -0,0 +1,192 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>API Usage — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <script type="text/javascript"> + //<![CDATA[ + +// The instanceReady event is fired, when an instance of CKEditor has finished +// its initialization. +CKEDITOR.on( 'instanceReady', function( ev ) +{ + // Show the editor name and description in the browser status bar. + document.getElementById( 'eMessage' ).innerHTML = '<p>Instance <code>' + ev.editor.name + '<\/code> loaded.<\/p>'; + + // Show this sample buttons. + document.getElementById( 'eButtons' ).style.display = 'block'; +}); + +function InsertHTML() +{ + // Get the editor instance that we want to interact with. + var oEditor = CKEDITOR.instances.editor1; + var value = document.getElementById( 'htmlArea' ).value; + + // Check the active editing mode. + if ( oEditor.mode == 'wysiwyg' ) + { + // Insert HTML code. + // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#insertHtml + oEditor.insertHtml( value ); + } + else + alert( 'You must be in WYSIWYG mode!' ); +} + +function InsertText() +{ + // Get the editor instance that we want to interact with. + var oEditor = CKEDITOR.instances.editor1; + var value = document.getElementById( 'txtArea' ).value; + + // Check the active editing mode. + if ( oEditor.mode == 'wysiwyg' ) + { + // Insert as plain text. + // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#insertText + oEditor.insertText( value ); + } + else + alert( 'You must be in WYSIWYG mode!' ); +} + +function SetContents() +{ + // Get the editor instance that we want to interact with. + var oEditor = CKEDITOR.instances.editor1; + var value = document.getElementById( 'htmlArea' ).value; + + // Set editor contents (replace current contents). + // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setData + oEditor.setData( value ); +} + +function GetContents() +{ + // Get the editor instance that you want to interact with. + var oEditor = CKEDITOR.instances.editor1; + + // Get editor contents + // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#getData + alert( oEditor.getData() ); +} + +function ExecuteCommand( commandName ) +{ + // Get the editor instance that we want to interact with. + var oEditor = CKEDITOR.instances.editor1; + + // Check the active editing mode. + if ( oEditor.mode == 'wysiwyg' ) + { + // Execute the command. + // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#execCommand + oEditor.execCommand( commandName ); + } + else + alert( 'You must be in WYSIWYG mode!' ); +} + +function CheckDirty() +{ + // Get the editor instance that we want to interact with. + var oEditor = CKEDITOR.instances.editor1; + // Checks whether the current editor contents present changes when compared + // to the contents loaded into the editor at startup + // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#checkDirty + alert( oEditor.checkDirty() ); +} + +function ResetDirty() +{ + // Get the editor instance that we want to interact with. + var oEditor = CKEDITOR.instances.editor1; + // Resets the "dirty state" of the editor (see CheckDirty()) + // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#resetDirty + oEditor.resetDirty(); + alert( 'The "IsDirty" status has been reset' ); +} + + //]]> + </script> + +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using CKEditor JavaScript API + </h1> + <div class="description"> + <p> + This sample shows how to use the + <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html">CKEditor JavaScript API</a> + to interact with the editor at runtime. + </p> + <p> + For details on how to create this setup check the source code of this sample page. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <textarea cols="100" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + + <script type="text/javascript"> + //<![CDATA[ + // Replace the <textarea id="editor1"> with an CKEditor instance. + var editor = CKEDITOR.replace( 'editor1' ); + //]]> + </script> + + <div id="eMessage"> + </div> + <div id="eButtons" style="display: none"> + <input onclick="InsertHTML();" type="button" value="Insert HTML" /> + <input onclick="SetContents();" type="button" value="Set Editor Contents" /> + <input onclick="GetContents();" type="button" value="Get Editor Contents (XHTML)" /> + <br /> + <textarea cols="100" id="htmlArea" rows="3"><h2>Test</h2><p>This is some <a href="/Test1.html">sample</a> HTML code.</p></textarea> + <br /> + <br /> + <input onclick="InsertText();" type="button" value="Insert Text" /> + <br /> + <textarea cols="100" id="txtArea" rows="3"> First line with some leading whitespaces. + +Second line of text preceded by two line breaks.</textarea> + <br /> + <input onclick="ExecuteCommand('bold');" type="button" value="Execute "bold" Command" /> + <input onclick="ExecuteCommand('link');" type="button" value="Execute "link" Command" /> + <br /> + <br /> + <input onclick="CheckDirty();" type="button" value="checkDirty()" /> + <input onclick="ResetDirty();" type="button" value="resetDirty()" /> + </div> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/api_dialog.html b/_samples/api_dialog.html new file mode 100644 index 0000000..9882d6a --- /dev/null +++ b/_samples/api_dialog.html @@ -0,0 +1,198 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Using API to Customize Dialog Windows — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <style id="styles" type="text/css"> + + .cke_button_myDialogCmd .cke_icon + { + display: none !important; + } + + .cke_button_myDialogCmd .cke_label + { + display: inline !important; + } + + </style> + <script type="text/javascript"> + //<![CDATA[ + +// When opening a dialog, its "definition" is created for it, for +// each editor instance. The "dialogDefinition" event is then +// fired. We should use this event to make customizations to the +// definition of existing dialogs. +CKEDITOR.on( 'dialogDefinition', function( ev ) + { + // Take the dialog name and its definition from the event + // data. + var dialogName = ev.data.name; + var dialogDefinition = ev.data.definition; + + // Check if the definition is from the dialog we're + // interested on (the "Link" dialog). + if ( dialogName == 'link' ) + { + // Get a reference to the "Link Info" tab. + var infoTab = dialogDefinition.getContents( 'info' ); + + // Add a text field to the "info" tab. + infoTab.add( { + type : 'text', + label : 'My Custom Field', + id : 'customField', + 'default' : 'Sample!', + validate : function() + { + if ( /\d/.test( this.getValue() ) ) + return 'My Custom Field must not contain digits'; + } + }); + + // Remove the "Link Type" combo and the "Browser + // Server" button from the "info" tab. + infoTab.remove( 'linkType' ); + infoTab.remove( 'browse' ); + + // Set the default value for the URL field. + var urlField = infoTab.get( 'url' ); + urlField['default'] = 'www.example.com'; + + // Remove the "Target" tab from the "Link" dialog. + dialogDefinition.removeContents( 'target' ); + + // Add a new tab to the "Link" dialog. + dialogDefinition.addContents({ + id : 'customTab', + label : 'My Tab', + accessKey : 'M', + elements : [ + { + id : 'myField1', + type : 'text', + label : 'My Text Field' + }, + { + id : 'myField2', + type : 'text', + label : 'Another Text Field' + } + ] + }); + + // Rewrite the 'onFocus' handler to always focus 'url' field. + dialogDefinition.onFocus = function() + { + var urlField = this.getContentElement( 'info', 'url' ); + urlField.select(); + }; + } + }); + + //]]> + </script> + +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using CKEditor Dialog API + </h1> + <div class="description"> + <p> + This sample shows how to use the + <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.html">CKEditor Dialog API</a> + to customize CKEditor dialog windows without changing the original editor code. + The following customizations are being done in the example below: + </p> + <ol> + <li><strong>Adding dialog window tabs</strong> – "My Tab" in the "Link" dialog window.</li> + <li><strong>Removing a dialog window tab</strong> – "Target" tab from the "Link" dialog window.</li> + <li><strong>Adding dialog window fields</strong> – "My Custom Field" in the "Link" dialog window.</li> + <li><strong>Removing dialog window fields</strong> – "Link Type" and "Browse Server" in the "Link" + dialog window.</li> + <li><strong>Setting default values for dialog window fields</strong> – "URL" field in the + "Link" dialog window. </li> + <li><strong>Creating a custom dialog window</strong> – "My Dialog" dialog window opened with the "My Dialog" toolbar button.</li> + </ol> + <p> +For details on how to create this setup check the source code of this sample page. + </p> + </div> + + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <!-- This <fieldset> holds the HTML that you will usually find in your + pages. --> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + // Replace the <textarea id="editor1"> with an CKEditor instance. + var editor = CKEDITOR.replace( 'editor1', + { + // Defines a simpler toolbar to be used in this sample. + // Note that we have added out "MyButton" button here. + toolbar : [ [ 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike','-','Link', '-', 'MyButton' ] ] + }); + + // Listen for the "pluginsLoaded" event, so we are sure that the + // "dialog" plugin has been loaded and we are able to do our + // customizations. + editor.on( 'pluginsLoaded', function( ev ) + { + // If our custom dialog has not been registered, do that now. + if ( !CKEDITOR.dialog.exists( 'myDialog' ) ) + { + // We need to do the following trick to find out the dialog + // definition file URL path. In the real world, you would simply + // point to an absolute path directly, like "/mydir/mydialog.js". + var href = document.location.href.split( '/' ); + href.pop(); + href.push( 'api_dialog', 'my_dialog.js' ); + href = href.join( '/' ); + + // Finally, register the dialog. + CKEDITOR.dialog.add( 'myDialog', href ); + } + + // Register the command used to open the dialog. + editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) ); + + // Add the a custom toolbar buttons, which fires the above + // command.. + editor.ui.addButton( 'MyButton', + { + label : 'My Dialog', + command : 'myDialogCmd' + } ); + }); + //]]> + </script> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/api_dialog/my_dialog.js b/_samples/api_dialog/my_dialog.js new file mode 100644 index 0000000..638d4b0 --- /dev/null +++ b/_samples/api_dialog/my_dialog.js @@ -0,0 +1,28 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'myDialog', function( editor ) +{ + return { + title : 'My Dialog', + minWidth : 400, + minHeight : 200, + contents : [ + { + id : 'tab1', + label : 'First Tab', + title : 'First Tab', + elements : + [ + { + id : 'input1', + type : 'text', + label : 'Input 1' + } + ] + } + ] + }; +} ); diff --git a/_samples/asp/advanced.asp b/_samples/asp/advanced.asp new file mode 100644 index 0000000..b101c2c --- /dev/null +++ b/_samples/asp/advanced.asp @@ -0,0 +1,105 @@ +<%@ codepage="65001" language="VBScript" %> +<% Option Explicit %> +<!-- #INCLUDE file="../../ckeditor.asp" --> +<% + + ' You must set "Enable Parent Paths" on your web site + ' in order for the above relative include to work. + ' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp" + +%> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Sample - CKEditor</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample + </h1> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <!-- This <fieldset> holds the HTML that you will usually find in your pages. --> + <fieldset title="Output"> + <legend>Output</legend> + <form action="sample_posteddata.asp" method="post"> + <p> + <label>Editor 1:</label><br/> + </p> +<% + ' Create class instance. + dim editor, initialValue, code, textareaAttributes + set editor = New CKEditor + + ' Do not print the code directly to the browser, return it instead + editor.returnOutput = true + + ' Path to CKEditor directory, ideally instead of relative dir, use an absolute path: + ' editor.basePath = "/ckeditor/" + ' If not set, CKEditor will default to /ckeditor/ + editor.basePath = "../../" + + ' Set global configuration (will be used by all instances of CKEditor). + editor.config("width") = 600 + + ' Change default textarea attributes + set textareaAttributes = CreateObject("Scripting.Dictionary") + textareaAttributes.Add "rows", 10 + textareaAttributes.Add "cols", 80 + Set editor.textareaAttributes = textareaAttributes + + ' The initial value to be displayed in the editor. + initialValue = "<p>This is some <strong>sample text</strong>. You are using <a href=""http://ckeditor.com/"">CKEditor</a>.</p>" + + ' Create first instance. + code = editor.editor("editor1", initialValue) + + response.write code +%> + <p> + <label>Editor 2:</label><br/> + </p> +<% +' Configuration that will be used only by the second editor. + +editor.instanceConfig("toolbar") = Array( _ + Array( "Source", "-", "Bold", "Italic", "Underline", "Strike" ), _ + Array( "Image", "Link", "Unlink", "Anchor" ) _ + ) + +editor.instanceConfig("skin") = "v2" + +' Create second instance. +response.write editor.editor("editor2", initialValue) +%> + <p> + <input type="submit" value="Submit"/> + </p> + </form> + </fieldset> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/asp/events.asp b/_samples/asp/events.asp new file mode 100644 index 0000000..c24e5e1 --- /dev/null +++ b/_samples/asp/events.asp @@ -0,0 +1,136 @@ +<%@ codepage="65001" language="VBScript" %> +<% Option Explicit %> +<!-- #INCLUDE file="../../ckeditor.asp" --> +<% + + ' You must set "Enable Parent Paths" on your web site + ' in order for the above relative include to work. + ' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp" + +%> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Sample - CKEditor</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample + </h1> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <!-- This <fieldset> holds the HTML that you will usually find in your pages. --> + <fieldset title="Output"> + <legend>Output</legend> + <form action="sample_posteddata.asp" method="post"> + <p> + <label>Editor 1:</label><br/> + </p> +<% + +'' + ' Adds global event, will hide "Target" tab in Link dialog in all instances. + ' +function CKEditorHideLinkTargetTab(editor) + dim functionCode + functionCode = "function (ev) {" & vbcrlf & _ + "// Take the dialog name and its definition from the event data" & vbcrlf & _ + "var dialogName = ev.data.name;" & vbcrlf & _ + "var dialogDefinition = ev.data.definition;" & vbcrlf & _ + "" & vbcrlf & _ + "// Check if the definition is from the Link dialog." & vbcrlf & _ + "if ( dialogName == 'link' )" & vbcrlf & _ + " dialogDefinition.removeContents('target')" & vbcrlf & _ + "}" & vbcrlf + + editor.addGlobalEventHandler "dialogDefinition", functionCode +end function + +'' + ' Adds global event, will notify about opened dialog. + ' +function CKEditorNotifyAboutOpenedDialog(editor) + dim functionCode + functionCode = "function (evt) {" & vbcrlf & _ + "alert('Loading dialog: ' + evt.data.name);" & vbcrlf & _ + "}" + + editor.addGlobalEventHandler "dialogDefinition", functionCode +end function + + +dim editor, initialValue + +' Create class instance. +set editor = new CKEditor + +' Set configuration option for all editors. +editor.config("width") = 750 + +' Path to CKEditor directory, ideally instead of relative dir, use an absolute path: +' editor.basePath = "/ckeditor/" +' If not set, CKEditor will default to /ckeditor/ +editor.basePath = "../../" + +' The initial value to be displayed in the editor. +initialValue = "<p>This is some <strong>sample text</strong>. You are using <a href=""http://ckeditor.com/"">CKEditor</a>.</p>" + +' Event that will be handled only by the first editor. +editor.addEventHandler "instanceReady", "function (evt) { alert('Loaded editor: ' + evt.editor.name );}" + +' Create first instance. +editor.editor "editor1", initialValue + +' Clear event handlers, instances that will be created later will not have +' the 'instanceReady' listener defined a couple of lines above. +editor.clearEventHandlers empty +%> + <p> + <label>Editor 2:</label><br/> + </p> +<% +' Configuration that will be used only by the second editor. +editor.instanceConfig("width") = 600 +editor.instanceConfig("toolbar") = "Basic" + +' Add some global event handlers (for all editors). +CKEditorHideLinkTargetTab(editor) +CKEditorNotifyAboutOpenedDialog(editor) + +' Event that will be handled only by the second editor. +editor.addInstanceEventHandler "instanceReady", "function (evt) { alert('Loaded second editor: ' + evt.editor.name );}" + +' Create second instance. +editor.editor "editor2", initialValue +%> + <p> + <input type="submit" value="Submit"/> + </p> + </form> + </fieldset> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/asp/index.html b/_samples/asp/index.html new file mode 100644 index 0000000..76522bf --- /dev/null +++ b/_samples/asp/index.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>ASP integration Samples List — CKEditor</title> + <link type="text/css" rel="stylesheet" href="../sample.css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Samples List for ASP — CKEditor Sample + </h1> + <h2 class="samples"> + Overview + </h2> + <p>The ckeditor.asp file provides a wrapper to ease the work of creating CKEditor instances from classic Asp.</p> + <p>To use it, you must first include it into your page: + <code> + <!-- #INCLUDE file="../../ckeditor.asp" --> + </code> + Of course, you should adjust the path to make it point to the correct location, and maybe use a full path (with virtual="" instead of file="") + </p> + <p>After that script is included, you can use it in different ways, based on the following pattern:</p> + +<ol> + <li> + Create an instance of the CKEditor class: +<pre class="samples">dim editor +set editor = New CKEditor</pre> + </li> + <li> + Set the path to the folder where CKEditor has been installed, by default it will use /ckeditor/ + <pre class="samples">editor.basePath = "../../"</pre> + </li> + <li> + Now use one of the three main methods to create the CKEditor instances: + <ul class="samples"> + <li> + Replace textarea with id (or name) "editor1". + <pre class="samples">editor.replaceInstance "editor1"</pre> + </li> + <li> + Replace all textareas with CKEditor. + <pre class="samples">editor.replaceAll empty</pre> + </li> + <li> + Create a textarea element and attach CKEditor to it. + <pre class="samples">editor.editor "editor1", initialValue</pre> + </li> + </ul> + </li> +</ol> +<p>Before step 3 you can use a number of methods and properties to adjust the behavior of this class and the CKEditor instances +that will be created:</p> +<ul class="samples"> + <li>returnOutput : if set to true, the functions won't dump the code with response.write, but instead they will return it so + you can do anything you want</li> + <li>basePath: location of the CKEditor scripts</li> + <li>initialized: if you set it to true, it means that you have already included the CKEditor.js file into the page and it + doesn't have to be generated again.</li> + <li>textareaAttributes: You can set here a Dictionary object with the attributes that you want to output in the call to the "editor" method.</li> + + <li>config: Allows to set config values for all the instances from now on.</li> + <li>instanceConfig: Allows to set config values just for the next instance.</li> + + <li>addEventHandler: Adds an event handler for all the instances from now on.</li> + <li>addInstanceEventHandler: Adds an event handler just for the next instance.</li> + <li>addGlobalEventHandler: Adds an event handler for the global CKEDITOR object.</li> + + <li>clearEventHandlers: Removes one or all the event handlers from all the instances from now on.</li> + <li>clearInstanceEventHandlers: Removes one or all the event handlers from the next instance.</li> + <li>clearGlobalEventHandlers: Removes one or all the event handlers from the global CKEDITOR object.</li> + +</ul> + + <h2 class="samples"> + Basic Samples + </h2> + <ul class="samples"> + <li><a class="samples" href="replace.asp">Replace existing textareas by code</a></li> + <li><a class="samples" href="replaceall.asp">Replace all textareas by code</a></li> + <li><a class="samples" href="standalone.asp">Create instances in asp</a></li> + </ul> + <h2 class="samples"> + Advanced Samples + </h2> + <ul class="samples"> + <li><a class="samples" href="advanced.asp">Advanced example</a></li> + <li><a class="samples" href="events.asp">Listening to events</a></li> + </ul> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/asp/replace.asp b/_samples/asp/replace.asp new file mode 100644 index 0000000..5aafbb2 --- /dev/null +++ b/_samples/asp/replace.asp @@ -0,0 +1,72 @@ +<%@ codepage="65001" language="VBScript" %> +<% Option Explicit %> +<!-- #INCLUDE file="../../ckeditor.asp" --> +<% + + ' You must set "Enable Parent Paths" on your web site + ' in order for the above relative include to work. + ' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp" + +%> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Sample - CKEditor</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample + </h1> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <!-- This <fieldset> holds the HTML that you will usually find in your pages. --> + <fieldset title="Output"> + <legend>Output</legend> + <form action="sample_posteddata.asp" method="post"> + <p> + <label for="editor1"> + Editor 1:</label><br/> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <input type="submit" value="Submit"/> + </p> + </form> + </fieldset> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> + <% + ' Create class instance. + dim editor + set editor = New CKEditor + ' Path to CKEditor directory, ideally instead of relative dir, use an absolute path: + ' editor.basePath = "/ckeditor/" + ' If not set, CKEditor will default to /ckeditor/ + editor.basePath = "../../" + ' Replace textarea with id (or name) "editor1". + editor.replaceInstance "editor1" + %> +</body> +</html> diff --git a/_samples/asp/replaceall.asp b/_samples/asp/replaceall.asp new file mode 100644 index 0000000..1337f60 --- /dev/null +++ b/_samples/asp/replaceall.asp @@ -0,0 +1,77 @@ +<%@ codepage="65001" language="VBScript" %> +<% Option Explicit %> +<!-- #INCLUDE file="../../ckeditor.asp" --> +<% + + ' You must set "Enable Parent Paths" on your web site + ' in order for the above relative include to work. + ' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp" + +%> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Sample - CKEditor</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample + </h1> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <!-- This <fieldset> holds the HTML that you will usually find in your pages. --> + <fieldset title="Output"> + <legend>Output</legend> + <form action="sample_posteddata.asp" method="post"> + <p> + <label for="editor1"> + Editor 1:</label><br/> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <label for="editor2"> + Editor 2:</label><br/> + <textarea cols="80" id="editor2" name="editor2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <input type="submit" value="Submit"/> + </p> + </form> + </fieldset> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> + <% + ' Create class instance. + dim editor + set editor = New CKEditor + ' Path to CKEditor directory, ideally instead of relative dir, use an absolute path: + ' editor.basePath = "/ckeditor/" + ' If not set, CKEditor will default to /ckeditor/ + editor.basePath = "../../" + ' Replace all textareas with CKEditor. + editor.replaceAll empty + %> +</body> +</html> diff --git a/_samples/asp/sample_posteddata.asp b/_samples/asp/sample_posteddata.asp new file mode 100644 index 0000000..81e6e49 --- /dev/null +++ b/_samples/asp/sample_posteddata.asp @@ -0,0 +1,46 @@ +<%@ codepage="65001" language="VBScript" %> +<% Option Explicit %> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Sample - CKEditor</title> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link type="text/css" rel="stylesheet" href="../sample.css" /> +</head> +<body> + <h1 class="samples"> + CKEditor - Posted Data + </h1> + <table border="1" cellspacing="0" id="outputSample"> + <colgroup><col width="100" /></colgroup> + <thead> + <tr> + <th>Field Name</th> + <th>Value</th> + </tr> + </thead> + <% + Dim sForm + For Each sForm in Request.Form + %> + <tr> + <th><%=Server.HTMLEncode( sForm )%></th> + <td><pre class="samples"><%=Server.HTMLEncode( Request.Form(sForm) )%></pre></td> + </tr> + <% Next %> + </table> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/asp/standalone.asp b/_samples/asp/standalone.asp new file mode 100644 index 0000000..0f453e9 --- /dev/null +++ b/_samples/asp/standalone.asp @@ -0,0 +1,72 @@ +<%@ codepage="65001" language="VBScript" %> +<% Option Explicit %> +<!-- #INCLUDE file="../../ckeditor.asp" --> +<% + + ' You must set "Enable Parent Paths" on your web site + ' in order for the above relative include to work. + ' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp" + +%> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Sample - CKEditor</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample + </h1> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <!-- This <fieldset> holds the HTML that you will usually find in your pages. --> + <fieldset title="Output"> + <legend>Output</legend> + <form action="sample_posteddata.asp" method="post"> + <p> + Editor 1: + </p> + <p> + <% + dim initialValue, editor + ' The initial value to be displayed in the editor. + initialValue = "<p>This is some <strong>sample text</strong>.</p>" + ' Create class instance. + set editor = New CKEditor + ' Path to CKEditor directory, ideally instead of relative dir, use an absolute path: + ' editor.basePath = "/ckeditor/" + ' If not set, CKEditor will default to /ckeditor/ + editor.basePath = "../../" + ' Create textarea element and attach CKEditor to it. + editor.editor "editor1", initialValue + %> + <input type="submit" value="Submit"/> + </p> + </form> + </fieldset> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/assets/_posteddata.php b/_samples/assets/_posteddata.php new file mode 100644 index 0000000..4d3e34e --- /dev/null +++ b/_samples/assets/_posteddata.php @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<?php +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +?> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Sample — CKEditor</title> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link type="text/css" rel="stylesheet" href="sample.css" /> +</head> +<body> + <h1 class="samples"> + CKEditor — Posted Data + </h1> + <table border="1" cellspacing="0" id="outputSample"> + <colgroup><col width="100" /></colgroup> + <thead> + <tr> + <th>Field Name</th> + <th>Value</th> + </tr> + </thead> +<?php + +if ( isset( $_POST ) ) + $postArray = &$_POST ; // 4.1.0 or later, use $_POST +else + $postArray = &$HTTP_POST_VARS ; // prior to 4.1.0, use HTTP_POST_VARS + +foreach ( $postArray as $sForm => $value ) +{ + if ( get_magic_quotes_gpc() ) + $postedValue = htmlspecialchars( stripslashes( $value ) ) ; + else + $postedValue = htmlspecialchars( $value ) ; + +?> + <tr> + <th style="vertical-align: top"><?php echo htmlspecialchars($sForm); ?></th> + <td><pre class="samples"><?php echo $postedValue?></pre></td> + </tr> + <?php +} +?> + </table> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/assets/output_for_flash.fla b/_samples/assets/output_for_flash.fla new file mode 100644 index 0000000000000000000000000000000000000000..27e68ccd1cb7192c8bda2418d198d90f1aff10a7 GIT binary patch literal 85504 zcmeHw2YggT*Z$pXLX+M*5u`~Agc2Y$>C%e=N(~_aDG4MXp+-@<6j3A)Kv5BuDu{@b zC|x6{DAId*Y0^6+|L2*xbNBAuWOu`>|IhFDWnpse%sF#r=FFKs_uOCh<vRJ%n!=|v z%dfs>*OHPmYZ*-8K6tk2PRprjCG_WH{79A?ZYUi6>A(LS66mN!;9s=nuQk<%01ne) zSe0J?@@sxZeN#UozZlc)i(&h6O(@>6QKuF<o7nn)9AC50_Tj_}MFNNZWb;FCLtlw& zjMSNKKk+w8kKjGXt@+p}X|f~qCT438#Wa(Y?NRco!c_yTrq#y3T3Vo1Q>)<(E3G)v zXPdCYd7FMC&|c3g*>`eEzor(TRY&^#TT>Ev_{;Q}uKIZ(7wC%kJGq>s{5$KPGDxa% zbKTOT_7>lK^}{PogC`6Wsp$28{ln#zSpWVAjHS@<`@8BtE#)7EbZdu+<h8$}{@F*S zCH-eXe>|T||L>@O>OR{P^B}pp|7)&)rMFKIHwi8iqOv?0;poo{m<8?`xU6v5;IhNz zfWr`=<$@#K|BoNjsf6?@!&QL`fU62u4K5I_IviUqTTU&wAh_Cab>Qm41;f>Ys}I)z zt|1(Gz5v)5t_fUIICc%q;n;n(gnJRL6&z{X0Jeo|2iG3116)VAPH>&!UV?iWt_xgO zxNdN-z`Y9B9j*slPq<!iz2W-6g~0WN3x(?kN7W36>kl^o?lm|zq(N|l;fBCP!2KO^ zZ)56zf*`e;qW7yM{vrvFKlDF_?o$UmMgRfzwVmGoc|-4shUu!GC)$4kuhJ&`C-{5f z`QM~(_nYqXv1k>VwuucKzwM|Xo6ScXY11-Y?U6Y;U(*BG-&#Fs^|hP{ewkWnvvc`Q zm^wXSp8t=r6S7qHpV7O0^Ir?iD|dQw(eb6G?@g{-v`q5j@S+`}Pgg7cUZoFx?9cb9 zSMgBW*qqsC1qbEKKXdQGYnT7L*I~fJ($`8iN`9`#g}lcuuKZ%<mM5F99oYQM7n3Jn zf48iyozEiQ;LMMI&pmm?pC8@&ecsSH9baiX{`pUL-2Uv{zGdn??sRX@=y6wPHEexs z>8~xTmfH2ni2FaknOOYV^7l7H%xt-8)yzF#AIWm=(u%i-{jqh%(r;p7Vy@1bcyDfl z^}eSU+`cmBw{yRSS38|_^P{YXVqVDbSJ1Ohs?BV*`0B1tYpp(*r|YJPT_6A1;o_Qe z%c75TpVfYR!Y?JhTYUW1Ym0nCibP*|x9I5P#M`!r$BQG*9_aq<@Lsc@yHft$KHs(7 z-Me?y;z3uQDY`LoNp!~ieQOo?r26RVd*+udbnTs$>wH5lHQn{x@S-&;559i7)~%gG zj+W08)ppPQ<(;bC?Y(CD@m>{6-OIn{ozZQ7%-MUWf8@a&L09bcuVkx#C3F2v88#j| z+2rC^pZkA&=eK(+qqlCpJ8+_J?!(6ef`|A2u|nMID-S=H<J{u88E0Mlxn89?vD-2y zoGO-Z>T1HXwQrP(Jl+1}^*WIu$^P*N?GL{#613*>d7q1$K5tlO?C?**T43^kTGkr3 zAJDgbpYVR1%-OWe!r!`2Ouu2~fM&z`4Av=RjL!W=M*DHrhw)rG3=jIi&Okh~k7U2b zU*qQ`Y*!r6_G$us7<9C(*EPRJn0XFBZ^%AQldTAh^hpZC#Lvgf98sTXhK{=xI^KTT zNK7Khq@U<gB{`YXsb4G};4r?K`8b|Ah&q0Sf#6VxpH6~?)&LG1Ny)$<jwSlfoRSJ7 zWVj;@gPA0W1%P`7L>XHn>oF+6FpYCkL}9~jhkqp1IoNFWSU=4VPW)o=7w&H?(E^Sz z`VX1fJOD#ZB!-(|Vv!Jr3hJXpVQ8wX%beLAA}X#j22a+4Bc!E1wI7Bdtq+E{ei(+c z;a|$NRvBEQk=h`mKK;=#`D-QdPsR(=hJ#~YPz?~v27lzFAAC)~JsPf@;Glfvk<w_m z%xO%IxllZq?pU~NUX-meauAAtjR6PYUkG4d4BX|Af9HIb)GDG}(a7xpVEF8eFE7fg zYQYS>)}=-!F^N?bbtx_|(Mgvi=U4!^jCQ4CG8liosegkw{o#M31b!Sn?Tfh$$6T)e z<lT(>Mpk^XcU`_}7y3^Lek1tHlgkr>$22QmC%V~R`|4J@r%gM%{gVmx3yuD;>yWj> zZ@u$fyZgJQWGGwbO1?jSKHKEt<3Dm;ynk-?CmCwZSb6E*^}}C|%RPDUf!ZT3CG5Gk zv`yEC;U|t>d7)e6=}n0Z#<g8kA-HTi+oYKV-rK!uX8ijX6F%BA<@Lky_oE_DSNi4W zv)hX#Oqq}{WnGtv2}2&_i>y=VURm3h+g>mFfmZf#(3RWga$Q_~Bl5NVyE=Zc`0S?Q zUEcQ%S+b;W$A}&qy7sKF#XtG&P0RlCX2sx`o*iR%oG4be>^^N;{<1!kW@?ju-*<NV zo|D_YTRXU|@7`vI;)BMGpPg7Y`jxrG>s5Fr;iH+MkG98!g+J)OYF>P~tF?;n9kgc9 zOD}Ey;Lo;q<}|!?y+DDVN{lT~I$u!ttVNS-L1Vr@zdbx#+cCFSFV6FsZCa-f7mOcp zq(Yvx)B4p9_{QhX-NldgX0F@q<*vC`cR9Va@_SoLR9W-m_CA|h9BbXyH~XhoGn}2? zc+K!5!@n5U@%E_h`Et(+kNv20!s##1Hi_Swsp!&%wUXz?XF3*~apQxk3-Xlk&3?^Z zc4_aU_ecC1bEred!lRGu?fG8Q<^glxDi&4c=67ZH?OD3NK%1@WZ%-)p^LuYqEqx{5 zMXlocwQCNRIrGc!89u)D#ngK@4=)>+d)5itcuL`e$fV%aK{<jtw~fzsbaSR5qrbbq zX^{Qy-lXdh&$N16_VVL<H!BC!ekS;0*s8?X%3&Kb_ieJhi_hI3D-~>h_h`q4qj#Kb zGGJ}}1}paLpZ4YAyqk-6dE0l)%zpWP{4(LxPYKUnegDLfyFczfxjlS#V7ASpAAeUO zwAjeMN_SuEd#wB19FuOm-{^XUMGuoQ9`egtWn%I1elfXrzFVbK*&nvNvAN{c#~b5< z-aByl=B<$9NlTtT{?ovZAGY)#zWbR~zE|=MD|z+(Z`W^rq3GP$jQiX5m{mLB*Lnp@ zwe385$Bs#7^7kra?-8FPDZ16YE44p5)1=6>nBRsC9x~=w@y%Z@ehztj*{5Z(W-}-J zJZA47lNvvMTx?@p{i25}+#a}~e*A({+X~rA?A@0zv~Ta`Rn`o?;9oWT;%kp0bDz4_ zXOwTvT36oJvcJ0G=lACh95$!O^u;e9x_9$Zmj;;w7M0zz>&40sA_tA`m;Xw>rA-S~ zm|s7>$^EZ)9lVk6o!Y%}3|euw$Lb$%Ek5?k9{WchUyTWRW9X8HUk_Ln@Z{_3%M*Ie zKJd%F6$iS-m#cK(>?gI7o-F=CWb|#{YJYY8_Q#t8zuf%7)|z939u(O6L5|opy$;>T zw=;g%p{n7-PDgH!-!o-;?TFe@9p>8iuj>-j?789>x2?HwDroGKcTd%=@@+vo+GorQ z)U_R#iVjGM8S&Dl5B_WhO@47z?R`DYZ;P{Sz1tvm+tFuEygF|1&iFj<%v(FG<b_iK z=O5R(9e86`*Arc*=Nh}N+sQLSx5wM-$A7kVYNa7X*WX#TXG%gy&DHbX&v_`K#hp2y z{CVcb7yavRe7#qNoxAR585?xA$<Fv*Z;lJw*r33z$m#QLwV0l3Vg2~H5o4MTzjbVM zyH|#X+oHZ$(5A%R>w}xGc+{?Vxh0!JhAr7XX72lkdq0eNe{7ZTCsV5aykOtp{p))S z?Y=eXxA7<a1II@V-`8`~u0aQi{87EmD?i;hx+#27uRoV{=)1PZ+JzCt7uD``zRJio zn;swUu{Az)eW6Pah8L?dBJ@bqq--TV8vaW4K?fs$e(&@BBYz+G$GQJ3`0CN>=Z=gU zJZ#C%_>1kv6x;a0t;m8=H7}g%pBNVvnsGvrxJA2fbUTA$Y<=rVn<5(vjF~bb@!R)u zOsX@g-k?$kE9B3=U_ze0_4mCSwzyd0pvOBWy;QnxNWf>|-AnA~T(0?!9_6}T>9BR& z*gTU0Us?a!;JZ&gODH+C#hA()&#gbQu1dZ6-}L|f^7fTIzx%Cu{r!)#-MqK+MB=i) z>W#{qeE!=L8|yU~yZx)z-@5x_>r&@im)M*CKZpKEc&~Pj@Pg3+SMz<ABRpT^`#Bb_ z9Cx+D^`U`JY$G=8nX+!-fK`tpzAton%lP>I7sG}vss8Hl_DdSn%bDlb4WGZ-YumT$ zm(>f}cD~{1x5qTi9(crm?#Qui?tQuPz*irI%pTq*e!-Y!`~36A-MRKf{f#%4oZdSo z|In7*AJ6Oh`-NNI249GHL(5d~_Y+f(*P6Mf$I^PQyjFb1!^q=rZvE`~=^O`&cH2Lx z(`(0K>ouQyD{|iXMxXUP7JF`6OrENZmfB9Xtb4xb>Mq3(pV@WkSlui;PBxj+bGX*^ zXoIhhuQ>B_{fVQKUjD3dk9@BN=lHb#njK$#)VpflqBr9j_~k!#{7&*S`KN6AYIVUQ zt2-6=>Gf?fLDOqT72n(A`oIR6x>v0?ed`}Rhn{KDqt%`AA#c{-9)7y_oX8nhzW!z3 z<42`>&+l4&Y*3HDo6FaCx;189mxL)N8#gHX;{Ne}wfnL`_(uy`H~zL+z0ZT9&wSDT zaPPR@bv8B)4SjCcyoXtDMy#$`uVS+%^ES13k~nmE&!{=C9-mib#E+eO|9Wv-?JPaV z6dRFv{n+(W4Qpk5wN}Gp!O@SZJ~Mj!wu1W?m8!7Mzvu4iWo~ti&GSdkL*pL48F1uG zlXFc5+}t-dCff&N|2nX*{mRdee{wwAr(;%E8`3rU^y=WfE3)SQeBhq&-v>S(F+b*= zdj}(G75lkrp`Y4bIriDiaj&l!SbV}ehr0Iqw$)D;66fFYU3@t#NBIkvHW!+ZA;<aA z152!1H7a!L&rwN(m#!N(?fAL_*=FTIYx?Z^)lmQJKY!i%{Khvr-pIGS&#$$=nqE8b z9pB0|&c|m?E;Tsc_V`v0B6m+|U9Z;J43U}IzE@`Pl{q_0TzhBL{uQ4c+SPt<o3@>M z6nU}UH^^o6UGHBTe)Yhy6^mk4Eb03DwJ*Cy*1fr)OX>WF=7#LP8Z+vheKk&Wc=Te$ zEj21v?eJ5stzqA`-#6!#V|89Gv#r*)d226ji>Y~{!TB=}f3vOr;HPf;%WnRDX3Xlv zwX|(@YR!({-TCmOIh8(M|FCbs{t@{ztVULLF23@9vl7=@&Un1zz4nh*otvEFQrk=I zH^2Pr$9ble$=>+f(W$+EeZ1)L-nQ9K)fg8(E^5ac7x!0<>2RXQPkw8A+|PQh*RUmr ziXZXc^;`Cr<KssDzW&a)%S&9TeR%O#Gpf#R)AzYtL-X`#)o(?S*m^f_jU89)krw&N z-Z~c=CdOn5sn$9yv39Xr{ijtOab;uuRcPhs=9Z}6bhO`@?PGtO^4ottu6MD+zAZgp zUVQAYi$Rt1?j81JM9;uA%SJWm9zW@az@-thPs}^9;7)wO>W_9tb(%T<V29Q@8@$r| zM((Vo4!2ud3{`okOx2&3KiR)N=A8>+52h{(&;BH`)aeRI^VY5`@?nnf61N8yUfsEP z*)Mu6sCpsW^jiy)+in~mbMWS=+sC30{t)uY_XFNp)%EU=8Q%{7q~MKat!ni;-K6)> zZ>m3z?6Tq7l6mDLiWYeByE6IPlqk8lQQbQ4)x2G#!r~3Z+En~%(}RUSjh?tZBBWgR zin)7TDez#!rVBT=B=uakDP+x(I)|>tm0z>={M@OvF9*jrD7o{Sj8(S`J5W30m3)`Z z=bGF+u+r{3ed7N!vvz}sBUKyMESBY9g_+mxT)x(*NL0nPZw)Dfxzu-`HhQ@7tvW;h z{Ps?bgI`zJG3|ETz$0gOw!hJ0c|gX?t6~-g=gD5CYnP!N3RS!`uVKvIE1gzHoo>74 zv#!-2<y_u#*`Iml_h^v#%Bz=-KI-Fh{`IQIvOe0;z1J6ar>@ysJ7?6=9N|+2@0yio zK;757EgpC%;PTYHeq)0ET)uDp;YF{X^u3zznMpOv`b?|a=~CM)7wcZC`)-bHe|-GP zpE1>AW?yJqq)y)8i4&SWtUI}BRK@dG=G=<7)cru!p*bs8>G)@bmGM_IK3Z_U^!Qs_ zLS{e7@$#0Ee~zs+WKXVv#j}qIIxsG1b(anI>=#Z1XCD9Y!`wBtoc?NQm6Lz|wdKaF zPe0f{b8)uq@nr|y+qI<4=+d8^U9!Ah%-p+E_e|-ST%vB^<;@#Q#^3WFpKDs;-h!=y zuC895XWFLxm5UF|lYhcHP0N2X^^@B@TO}2~J}~fnB0IG46APZma)0@Xv2j^T%-B17 z__W&lCpA72cX9oyXMAqFKfGz_7ao7zYwRzD%T}&?cJ0pT6Nk)wc(LvqJBsDL^Zks- zGjG%h%lgNGY-P&Us`%BQppjWKPV3UKd4(<;Pks7D^ty)yChQ43dU?;_&w@)9j>6>O zY?EPqSJ(b(NY(I#rCN=z`D9ws{TJtUPkw33+xrfUp7HCdN`o65sba78)!@-P3YUF1 z&y>cW-y0X!ar?=)B9Cu7yEF1k<>fymUhvyi^4i-|cSWw=J)&FEiw7(B>$7Ib`e}y~ zzxepe!qe7tC|2jys1hjI(GSXhzvyyg-JR3xG(T{*$(_<0mls(bH2dU&^_L4?IMsE_ z_OHvf`tXBRtxL=}Tp@q<%l1hfN`(4MJF@>$aN)a)a-ZKc`KyrV$4RZX&z(_Y_{uij zy8d40+@ZizAsvQ(KkD3}+^6nG|GqPG&HU$X#h+>0DqzO=A8%glTqFO3|7_Z_c--hi z!9{1}!B{!&c=>_H8U~EsF}?P{<uju~3-yg#y;%!dcm7n@I`g|muj$gd?R%ptd~@NC z9uH?Xe(u>P15S6ia4~3X)w2!P7TpzxVR2!(nI*RED0!sw!j^+(Ma9oMTjOxyQ75K6 zd#>T>iC3$B-eY^xhCUPb`IlH*DI|XI{ecgY`@MSZ!Ny~UYaCg&JLZ)S3e4T`*Gu;r zT)!IGGo;(ysVj?Yc&jlolrRZH+3!EMzSpn#(6wE*pWc4&`zaN^X?6C;h)@6e?!?Y! z>n^sR{ra=tT)f|5@cf%IUc2?)u4(ANt}h$2EuwqRnp;0T{rU1bXE(IJ+W+n!E2^9i zoYMT8YGEZNcPaZ#&+^57u3xt4%uUB`4y@aEZ;pc_T9j}5R+V4Z?ESWLVqE;e0fT28 z&D=J0%-c1e$#XT|oIIymRlk~VMxG~K#}w$={l@TN+vn}M@@msO4`%jlzCV1$ywK?r z??uNi+m|Wdw2IdzHa}3_x5~96^G_Vw?sw$5n)esJziM5@RRaz|5$crrW=*}pllJZ3 ze&UVKle^6b9#p@}Pd7)FUbB1b`X2XY|52~SUyTQ~zi?{9J9+j@sWqr}#eLxgGLM}y zzhK{I%a$3m_s@B^`rUo8eB0Y+a&|pBH}}v#qi;RgeCu$jHxmCE|LU3b->e_==GbBN zn~iuF`7ok>$sE_}J$t)!wZ9UZJbF-LIvCz9+ATcs!MmGtUq97VG{XxE2k*)CO_%=l zT3me)QsZ8mPDkpmN%&(`z2Y|pES(v<>+RKj=Z3V)yf<^-k{R}|9&z&fV+R+H?z`wn z(QZFY>bq~-n%YAPoT<=ubkmYmhAycRa_I29$<5llwsPI(S`}LPWPT?@w&6!!J@VVn zuP0>O`)!Wy7vgOtg8J^=wmyH*pS3^ustYu~@{N33H=n+Ds%w0v(QlvGK7I0o<YFa$ z{kmgR$WNo%UF&&gR>R(HdaWM5_rOM5@|M;g9IEi?pV=bockMl6dA<vQA$!Y|eRwIU zU*k~=KkK=$@X-AmrXJq=N8^n>t8AOyaMYuwKUFz0VSAxonJ;bowZ_<_uRCWyR&?H^ z#zn)L)Zbe1+r0-zpDq=$D%)q{dme)L&i<!mjtBR~mD~Ky`tNdFxH)|9#LXS2<_Y|` z=c{prA0+H=Ieg;u<@J8MeSBTD+>>W+th2K9*7bdRmFYWUQ169-!=rkBeD2HrON#dj zs&VuD_Q(shJ1<S{d2D{^Hxfq-Sp4eUseL1^Cd{utdR3jMW3j6)K05J9t@wM*hHc*d z=*;C2t8Q<cGrx3)YlEME{*6y2mTLCh)fHEdepz|##l`j84v4%qD5BTWsV^S>vcOc| zjthQnn|b-gwHHpEtug-5wBL6IUMSr(Td{n3etqsgTbh5g?%Mk|p36DI_jIXMQ(H}* zy7i4ikG59%VRn3%19M{4(Lm>(KEr=$(&Ox?-5qv!*N*1=HdnP;Q~NfYSLD~Bk-Lv( zt-W(^{Cn3DN6kDpuiK<MhcNN&_bA(}2Nmnr${jcMddI7?wV|KQE0urpGp8F@ZPxwk zCPUsnnjx;p`t{Avzx8rb^8pKIf9D?+So{1z|G0ZyXPoOcv&gVD+1CG=Kdwml&Duwo zO+I+;)}b6Bi-TU8KI;Bk0k8Ehnf<|v2S4w5>1?GPC2llYUhc2Sr9<8+QfR2{N{!t| zqdzY&tmv>_XUFY+GW*Qc#HgN^CnP4Xe*0XvYtM(S|211&Q0e;l7Hkh*b8UO+@ns)x z9y#)@oUip>QaSqOM<KtSeW6xx?snVrP1v=);F@NwbH6_SL9JDJR(&7YV&!w~-i>H8 zBecQ&BPS!?+M4fN^BmK1Hp|xL@%ru0?V32X)wt0iu^Zp5GpA_NVlS?IE+SXp(k*4? z?jHR8SC>LV=FjWfWBs<f@7eQ>{$lZ-2~!)~{AN<4OdriH^L3xeokHH|TQltR`vsqU zd2+X~8CR?4**5>q{Nml_-pLz2XxiYLuP20G?^gW0zi*Y8+}EEw*)m~H!xbMSjMqvw zufAW?O0~xpZ3s3$xv|+Fr>Fz4_1hj>#1Ys;=Eg9$Zu<dO2mjiOjZ$vla?`jSDAdL- zw>jZTI&*7}lh@{{a%%$4+)`yKDeww#=G9DWX%9vYqEqD<Df0aqIC9IGTi|WPmTnV- za6@}I${CG3^}(ifKjzm~m4C}VO-e&>;_HELrKjOb$(u{i1yUM<4e<fUdq3oz+roLc z)vNz_{;!@1y*>X|_Xl{bAwOIJxPown;0nVPfh!7E435V?JiAt|B>bh|o`Wk5R|c*u z98Z7B!|~WC5{~()1o(HK|C8_k)*od^*>jIS8g4k;2)NhbM#Awn*C@EraAV-c!i|F) z4;Ksfcbxz8Xo{zRlp%n}pD!rX`9JT!RD<K)D|P>%y6^>h<U@j|xqrZT9hhnSSpL8i z(hn53NhFQCzfY4suRf^qyW{OGj&fH&Z{sMs^z;A!+vor3=RfJ^Kk4T`>E}P`=RfJ^ zKk4T`>E}P`=RfJ^Kk4T`>E}P`=RfJ^Kk4T`>E}P`=RfJ^KWRAs5f}b>=D-W^DV)UE z0#Z2F>3|FW?#_sYi|g^Bc)cSU@7eL9KhKeP-U4p?$<reJ`ubypX?%sHam1jAVNLpl zal6^rm$t{I(HqFP?X_z-&0yRx<qZ(tIOT02yot)&TX=DZCF72y7aQ6l8#=2%!MU8` z94I&k!z(xk3eJt;6`TVF=VtH<&Vhn+3wQ<RFoUy*8zwmCRjk4UXC@@Ef^!Xc$(h^W z+`G5KQ8Ik5<nMT|Q0+&j!+*B~p7Q;#EaDBZ7Y0NR?i1<!1{jn{KU#q%@%hUK$;k_G zL`4nbFIGA)Us);!W;_qXPiG5xHh?p|gmu}JAj4DoG2BGv^sKU!4MbkPge8-R1%S)w z<IGMXjlbR`{Xh2p*HhNN>HR-hPKbe`$Zk}V2)1dtaJZbuS9r8HcsPvTGpGogcsm;X z7VE2;mg72~Om6|QDje?wwh`}EYYh=Oxg=SDgX7&m!GkF9a=al(UuSV2z#qM~9FZb$ zF3R)oaE-5D$(IKGLBm(t{BdugAN~!&lRWtk#c3*ES_?%8<MDQZzj)!WDZ=RIodCTI z%oTo2RnJdG%S(DLvbl?c@oemT@yiP=fA88XvdN?6=x+l@XW3+R$flC^f+$@m&NBH1 zx{{J$<du|~VXT%f_4(uG#Bh`=QvCJDXv@0|kzy=QwVZroRQ3m*Vg`pq4B`;70QLi> zi58E`0LY2)vuW=FHC^uvYywBTa(EOSCaY49B%;SQFjyE5|4o>K37%pNpBLQ|Z!ySs z-Zky^?b}dak-=p3LOaZXuyhE&hnJ|gw5nDc>XyHZElkUcn-IA$2p7nUD-s!a#UU^H zwp%!9{<1pWFx-$q8<Z5Bkeu~N&g4w@gWD!Qe)vmLmb<~R$=M(MmAw9T@DOe3gCVxZ zcY`%s=O;PuuY4T*$%CoMVVC}s96bGA9j*7R&RX!nhyGfod*!s?uq0nC%M)KMIP{i} zcJ|tqq~N>S6<dH$`%J;*Y+8mNY*VuZch(B~LS-@qCnYzr|BxJ#A$UykfegPTg=GqU zIeC`tXvTS3@Wf1+l7A^UBPsZPj;YC`3NB9$?wX;nwm#D$?U7CMiOd}0+v)m^<hU<! zTj$GiTF{wXkVb}^D1G&9L0Pio)pljHX~&UB(25^Wr{!rk;*(%;733|5X%>co1Ax_` z6oKd_KEVBxc)$%=FeOn05GF__g2ZMZk?YA&w3WDH(jD*)n$q)t-BCL?5dRdQT@k>d z15kw!WHXS+hN9a5`Y_x}$%MSb0-it~DgoLRfy~n92(lSS#2*W$V`2Xy4)ADhP5TV6 z8nl3LEV??oB9K8-(G%JXB;qT&rJ#Qw%_JW1Q{0<T*|sYJO(RJOplk*b@l`(8!#2lZ z6z&jYyAZHB(vD{N6@jLe#CzFmMEMmG@s*ruJ7)u4{eKaOJVZC7vTaucu(Scx2JvpU zLL&Z!(&&T{m=)u57UZEN;1t{!S_HThGPElK+|oeMBcN;s67iR!Cx4Pb(<b>t2LS&< z27d!Qgo54xv?~JKWGSI(KOo3vAT{knmCmg)Ktee_LVl=6Dw<spApNqKhYS5tNM!pu z=zm7N?Eox`di(*fDP*X!ZC3=Ewi>9;IhnpfqR8rT3gQ+4^WPD-G+<ZAup(eK$fgRQ zT@gS{fvSKYn}LKJ6x|fmK>(1M0ILGN3z-u7C;~?iVkvA-P*j6kg<5<J5vfLFR|K$Y z;wMRL1`_d=lruqFd=dXDB#|3XW!A0;G;J|7H#<-^1Bob4AoUrju?%Hl&;&3eU=cue zYuj<#%dQ9@DFihG3O$34M4=UW3HY1=at+`Gz%4r5qleoS0W=Un7X=@M1aI{?49G+v zCjkBlI0x_qpo(r+1Q>mQIwtriB+92A6~EIUVyn6hxCKz<*RBXO?HW)A1RsS&@lQZi z;t=>8kjnsH0{j+GC2v;*kO@$$M0|y$tpr^}mx0`kUTqs-G;YyNrXMZCt_U>kB!XT9 z33>$`3B^;7Z4guxy-H!gDD+B7neB=I$_Z36RKLwYBL8na3#Q1_N2OrY1~4DWGZ;{1 z+pY-EDxQO#8<Bs7M10l3%tyxB0J##k{TcwOXm&*adl2YRYm4{_iTEGjwjVF9ZO6^O zIT!^9S0Vol{}H_GiU4+XfcglH&SoGHkJG~ApgRHh4hly&5G{$}<ZD+1unPo*JS$qY zLISVSsRcP)Kn8O|`Tqh`(M0;p2s$q0eS{bl6cT}o)mv!&7-+T6(H00*wnh5Ph#V|p zfs*-`VHLeu@N^s?;)_4}WYZC#KQSD<ji32hi$yRT7d(E=Fo%^lSP>}ZUKWcJkQrvO zG&zA8t(=tU@zI-^+1j*EGiX{uCh);8w~!I~S#&Ju8WQ+dWcDAL>kIDBq-<J(Y4gYQ zMINMA$pN``E{BfR&~fTNv?MJU-bB#O0F2D2X_o=_qqLn7cAFCxMWAWl0L3xMW+2h8 zH$=dtf|&IIR)t!eM!b2@q0a$}L67W;09!B!dPy`5g+%)5F%rlnpicmwO@JRD?E#Fh z2xOMdAqc9aBN4v_=)c8a)gLezO==L}5)@1&YgYuC_9jr{MAx8@h_6@;fokUm^V#5a z2$@U<kJW&7MSz|Ys&Q51Um+1+$>|&9|276WA0$!}?N=phR|J~&ACe#$n}J09#bwby zB5*rkGc;)%+S-oHu(t(x8uegT1n8DQQVS)w8A!zMiT<iK(rkc<2Zy?)&`^$Rv(dd) z0<<dvjKj~$I<Of?P5V%#gL$r&1p01er5>ngc13{nK{6dAHX~6qgk_-5jP7JCU|+~? z6yO^uzsj~<5ul2InkBj>g~U*&9vgv2myDYB3kbph_e0o&0bhh{2<?gh>IL=;vKdI2 zZBumlA-f?!hC|pvfJ%Msia^dNNMbXPkfV}Ug04HCLYLZtNF{4m1jr_I=tU7<Au)CM z8p8Pz%CQA-KHyeBjw2fYxiYXT0<<9ny@?>3fkdyR(60bl0(v+AuoU139loK5+Z6$- z2|=Yrdr(NoQ$0QpWF{c%0_Fj11y}@7MYk&gOr?M-B={&KR7gE4e)B=Z_OTrBAu_M> zYgYuA`va9*@KHz<{e!Za_6O*X0-goT2BJHFDtWsifck;tGEg=HiKe0C_c7x6qJJ3; zxEi|Mkbd+#c0~ZaK+r@nbx=r59n_;AkX=!?zabG0y-F?ZiU1=cP;ZL<K_QX<U`!b% zB2(Q;YuZe}pUa@n0#w<yD+1^@P;*576%z4PSJ4rODR5!_C<CC1W>*AQOrYrw7x5Jm z@x2*3TcTX*XC4Vu7$L(`9uI(wl}_vxD!Wr5*nk<yC>%bm2Ad#vefUI7BR-m3%1L10 zF#WtK(v8862*~=bG+Att1AhA7|Em&s%KcwyA+A&ZK9Mj8=R7UM=28xmZoh};skf7p zOW;(=4+9mv56Amse@Mg5mu6d3sDH-!N$_AS!`3T$8*H%pXfNl*pW<3Ztzy8*r1jh= z`%62gUC_R*u07BW+)Tcd6oB`O9%}(-IUx;btrfLt0mT)co?5_qwyuEH$;APg>IKX< zYJ*lmuBmsyub_`YID*h4Dy)J<!G*CD6iagkID$-%ii)r_cCZxmQ3yv63Zt+J-qT|# zC}NQfHWqc1=}`sk18N<J6!cLDM-X~ng;kJgGM0iq3gHOC^i5&Su%xdfArv_z8%Gdk zF{D;hEp+OBfW;9$640&)WGtd=1`=JWLMwU&OCbJq5I+kzAFwpwC*-FHG|eADa|J(z z1V4pVL00%aW|rI%Q_x2dID$|>g`EoOzd-#4-~qrffZR~DD+26DAm}WDYz7kX72WGV zGWWv)2kNjA<0}G*njzwoh)C=vsK=Bb^_<~^K8nB*gy;&Zpi+JXMJz^lG#EU3-_E(@ zbF}k&@c0+qkWp)>)eEzYLQ_ZM(*l+!=eObcKAx*<Yq2y+I*3j59ol8>eJ!E7wq5(F zN%G^Q>R7?A+mgH`iCx1F=m=(W_xxvA$ivjcUptF;7!T&vDrvWIL~}bQR<hvSmfb;4 z?HxSl)i&Vo0<Caf?G(1(PibAM!{7fct%Xh4t6zl9fm$;_hjjrL!k-6l7NA`b;FU3* z#AYDDNzq+Kk=_LTZot8S%K+Omz9P`Hg9sXpAe(_id_^}N$cjMr2GjsK1>cLNWLE@O zt|6$1h_8?!RgcwyTmbs=fc<n>iSZSIM7@b1n;;?*KhpD&&<+>?cpMd94{!^hT@gr< zYY4I#NW@oktw6sJ$ew_20*(Y6%=n4`yGaO|CgLk3;;Y9QK)wPbi`xcpCty>?R|J@| zBB+CiuaM|9)#F(p>j9Y+l|;p@r$f6Uz;FW+qL6<biR9Fyf~;;5Dd?jRjv(Y(VHMng zSR4iv^ic>$5Mn8;f*ti(3i>DnOiJr0#8Qu?^dKAHKBRRO#W@9NR|HtmC=vsS_=@fj z=x>64FJKPTG+_{+T@lEjM<B5oNW@okgkwQZNwbsBiNuaFz9NvMA0h~iPe&rYdSuJ; zgZjP>SO{>N4(*Bn4Mq>L8A!xebPE2W6DjDU5LgiFD8y2a3N8hT?OZ`0g>VERmclB? zYGf=0eH6kGgjnA9i|CXg9P|9=7yoxN^tP?{(E`SC_7boqsrM5c5o#YI<SP+^_1`0O zX<|Nukrd(nw&S3Q79qbR`J=+fHwTvb)LaGE>wX1&6hgD9Ahap<XofGM3h5{GQ3x4} zLHH@Gg3T~{W7-OeSc2B3f>7|(sA)u=u@&@j#8E*IvJq&ZRwVtAhnC2mf<6l22*NU7 zVHGS0ZmeMieH6kGgm$H{R@en;GPZ&~iog+sp+yBMDg`Nz&bq7#eH20pm_fR%%~XuV zG!+!Gmb5BJk7cG}<<qaAh{XU$km*rTDV0%B=#V3ps5Ghn-nRicH$Y-y4e%%QqWg1m zGr~YXDY#cS%4gM{XwL?$Ou{mp%YZ_-dRI0t9<$=2NLC)1(=7j;oY4AO2t9<6{v$1C zUTq7)<FuoBwIkXwxJ6{O2UCQP^1`yfew?iA&x=_D&GDDdr|rWsL({Hk_q5}AwL5q? zs$I#e{Rd%(wLA>Tf#pf5oLX;$hz}n;fudxGya*qnX6^tU1pGyZeu}_BV$*H|c?Co` zx6;XMMg#<^xGQwzV!-<#UkJ#w{1gG^lt%n7@N`-5BssHUGa`VeimRZ?mV!PCA@j*( zpy~{4ipLKD`vZOt$jSKy9r`H(>{cSECr~!+Ydj6Y6U3~O;e1qo0#Eg5M~#zLVZdm> z06<QW?1}(OE}aC6I2{S5>QTYEKvDM;^ic>$5Mn8;Kd5;onv4vs13aojyCT5c5F|v| z3?$+!x(Pacd%!n9L|7TnPZ40=u9Mib;dtU~QIfH6uzapZ&;uElK~#qrz$Jjc>(I|Z z%cpyyP9yQO4^Nu*o=#>nA|O!3EssKwS4+UNIxNk6Dgrccoy4Y9#?w!NC&~Z9lTAcq z1PlfY<Rc+(V>AbB0N4z$8K7MeNRp}uvKdHCdqL4zp;8_NeH4LIS1KNU-ghC~!{g{D zyAW<8TrU%v!B>0egT8?C{ha7Q4&yHeP`2ud+DffrUhNln*JwxbVo7lr4n0J&mVka| zeqQZa^cWq9ss@^-TCtoWfdI%f34A&tu)r(HD{bI=O}nn0&5PdQ4ptL)@?u*8yS7^X zyxL79byKU(Zs%EaA2ssgPaYUBL3aZA;cHnS&W2dI#G#|MN$z=+#%6wI2;f=3Td0s6 zfTscPA`YRSBEZ-W6uSqTmJd%?@q__QC$||95UAq*qVw1cXh#}^Tx9qu0!=%jli0MM z@I>yCEGx)tMg%>Oamk}A;C?{1<~us{Q_Lkv8xcPd$Ub<I>5$xJL_na5n+=5^(jPDs zkVPf~KScoL&`E4sUOWu|Qi@FWL@ELTM*+=tuV6LZub_`Y;QUob;o6XTRImzAQ@}+* zABAuPAuWYfu#z52K_7*{8cRnZE%jIoK}(Uw6A0;RKvo5zT@m2$9V8608Au37(Jj>J z2Li@|h*0!Uia^u8)JbgGbUeu(ie#?|o+<)Lq8?uZlJ~Jb0{j^8qz?TQ0pcP^_8c?t zv|DJ*DxJ(`L;z0}*M>rnS7E?afUK+pK)WK4hwLP=8A!xebPATy<0<H)5V#?%qYz6y znqf7trk~J9Asj)NVJoZ^j?`l*C}NWhhBO@o)n!JguV%<LO+TT?DG3}wCI*U;QcMMX z6vCm*h~<4RiOnwv6hC94^;X%D88Df-jsEF&UJb`Lc))}ztN2%f9akP8@o)<v$BDXv zuoEP{E&iP%%~kYbr>bHKHW)J__P8q%h@SHH6TPRz%NICkM%md8&G2&wj($QPg>VF6 z1W{Nkd<F?KmVzQS0~|r7M@2=*JSga+5RM={mYGUrOhFNg1dhVs@ifXY5gFL2!><9O z;3s?)&`%LyS*(-TwD0jWO5~bkL-2%IlpX;*)g$2xK<)wz06e2ZKSdx(TZs5S02z!Y znGVTqMg#<^xU}*`Bqqv&H=)R<B0%r2lh`z0ASF+d$#hf%@Kle4EHimi7OKd8ia?Ue za+0Sk`#qi9W<&r_6*o0#QwY#{-v-bxncBd9c-oieMMA9wbhQp37I643SWa!H{@e?L zIIWgt)Jo;WpJ(t0r6E;8Es3B$2(AH>sAc5ZgL{$}^J<sGzqKTI57fs1`Me!}OX<&h z@!TF{T$XCfkV+p&%nYf{^o!P^5RM={mYM3bPOYGiiVkt=D8y2aW_XUZ1rkCZg>VGv zvCLFtO}~O776TkXrbk6Z*aS^SL6Jj8ETS+NC@dkz|J8uQ0C(%qPZ3B)J%F-_lj(2~ zf4xp-Ga`Vgii<^`;Dt?M0Z#%(BAQ(hU>Rq`S4eDBDzpkp39bYmh7<ZI0!I*Xp|A%) z^%bao0OWwaT!(f=fVsXNWHXSO=CA19)sbTWmm~fVz(s&|MWAVK8}Stq>8r<HK+Xhx zSHKZE?7;YnK%yoi2ybS9h)Dd@qZzXL=qL112uF|}%S?r-u%K2@#FAQ|f)GnRnjy8F ze$gfr!V#p$GE*@_^egD2qC0~09Ga;}{kk5DP~?yVG8ThOkBXXVX>P?LmZViE#CqD^ zid!RxE6mCWn}}uL`XDi_36>hK<;CiyB=$T?<`hFa&rGm#=g!9=tYQvn3rU%PNDH`G za##z~4(AmgKkTEGE)bL)Y7>?j%V?ML;%M{|+%87IFt7c{70d<gpmss7YYu3IIP~X( zt4W$tAP!=z{J4dhU#^kF=OL$HGBFA&^SKT;1HKABp;&P!0!%G+60~4E^%HtVvUYgF zibIcp#MC39ACM~nkD(&SiqKCHNYZCS{53${6}9!TPKH~{`V)An#}GZJ6CimL8u=u1 zG##D9ruD*;<ViA_j*0+6^+?zayutt}i^)3lQv{M!ma`9#?CS6(N1Y6}c=aa)sz(Kt z_!RU}2w5a1hu<VHVDC~_hn(U~APP{d3>1N;wbn^&T3I~Jmhtg42v3+a>Ji9PJpvwr zU}^z!sy<zZeg=Ucl`DfXK<*JzWIA$YuOfh@dOWHlb7Mh&803WIkpVwNfNtD~e-%%1 zwLvnOj*0-D>XDEux4j^zEGQ^KKSdx(2O|i(RY1<c6E?hbGFc0ZfS-!1pc0>gq822r z3PLRJ+dEEDC~SR(&e=&~r4||CZ-cqQMeJVW)qaC-w^lwNDY-I_G{scgNBfW{Y~^4( z;)|SGGd$+h?68{2zufW2j9rNm8U~%*n97&cZgGx}aw9RqrVtU|s3GJQW)r}zfG+^D z&$BB6N%A9tYz7hyL(y5`WIeuuK8gU6)KNHkR)H!=!D%3&5-8}S5RM?Et*}-&LyxVX zk0QWzT^)r>w<=HtEdXjQ()<pPTKc;V{S*N%uOW!Sv1u#tv>H$F>txuF)1R<wsveK( zK__*19`F-HvnvA33UriBQ%FtoSC3|R1M%o5^ic>$5SE?_djeF~L3I%D8sI)1idc;9 z2tp%Q*fl!ULO^N+3tJGnZ&w89u5}XJB-WA0>s&l?MWi4#h<*iq6v7b%^-@?XRO+Un zk0NlWDvl~u@(QXX6!cLDN4Air!cqWQtaPd0Pa=`=^S&LU<j@btu^!G(E8Wff1Lpc@ zk^JUwKz(#C;`w87y02Y;z#bu*f-TT4=~vK4Asj)NzA9`=uq!SOGMvyy5jcYM*k&q4 z&7>Hvpoq-?M-WD-)TmV~m0<-%2^?HlIJ|M8u#T^ertl3>>-DkUkr!M^6+d1v=Pw)j zP0@AYnfEn|YFTe;S=+$gvHXr`D6WL?+vc?JJwzMXG?&-}VHDPc`jLa<jbZVEZ$Hf+ zP`w(=mw(lZzW$g<@r7T1Y<<X2*7M7kG+!>WpqMf{bm|w22RJXaPQ+4C9A#uMb1Q$M za+F8&=0l}Vx*Oz9nRA57LO9Yerw6K7>G-00uGWx4IGjI*9)5q-EG2#ga{#l-8<nni zVVR!JDx>??=1H0U`==%Fl=nYVd;cFZ8fOhMzyJS0Z+h1E{{x@y3&8)x%l)qUoNC)n z>9zN-u=6=Z47S+fau!5?coX#?x39gcXn+`jWc|kiz`01*8w&z?w5<JYehzy9V1>R3 z-0@%ast6N5Q(yRB8U+ySV(}La`)#UF40b&G;RZhr_}Non`#Akw`t*0{)8D1XZ6n;~ zYFP#y2|5$?3VZsy^f+zB$~gU9dc1g*{w_UQ2jBHif0rIJDw_I8f0v$yS7ODaM!jf{ z4P9>*MkBjYeDY^rwW%;dhC600<{1o-vC?s2WO|n#<eb)U2?V@~4bwoF(&?|#Gu(*o zGPU#ORr;*gHJ6DUSR!pV6FX6yXVTx3$J@8*@5!gXC(jq@arF_`qtoA$Pk&Ed`@is> zyf?$*sTbKS<nO;77Bf1(Cl97_U`%Cb6p6;-FI?(d2ZBod@uozB>M3e50&Y&zYw~!# zpPRzm@a+R@h>i_leg~2^BI{yvCY!z;s*1}!mwv!khTX_$>_iXJ6vkhxr}^UyzoZ^7 z4E7d>fRFnAr9bRZa$~s(V$<GnIl)2s$|I%GaGBGX9&@31Fu!Brvf;9`r?PQNHx&OG z1JbT@2w-1rAaYgGlFyR3Y0d5P{@4PJ63@=%C@;$Es0YWBw^OW)jZ9*SLVRpsCMU-Q zCOS{E1mjrzh0Extre7j7{f}7!jWJnF<;M-qY+B<c5q*ab?l&a5eV_1t1+%wD{Z<vO z8elc8HvZMp0=1f24Nj9Yb`q_D$0DQ?KUKA8%T5)+l<ypG-D0mK)5JhbV&$+kD4MF% zfdymn$7+{|p@T-ZP*E5|Bto*MWN1WFya<_qoqyCXbq}eGe3+v!D)VIy<FoQB2$EQf zgID}`WC9mkFgrh->8OaBxPV(76~VtX$<Vtq8kra7DW%GJ7(TiMUVs!oLnuauy{nwU z{r@jj4(nInvcLbl6kNj+g#B$e6?g}Lj}B*}=!H&5g-%FFfQIpohJBqtuqJ6pKU{RV zF<NVMtZZDJV3e1gury{2DqDbHvxIg3tn-J0)AA8!)5na-$={h%N4#v`1?PRK8S9Ti zu4qCz6dgki=wU1JK+f>D(8~x{pHb$=pBteJ{O~G20?oms56Z|+gMJPmQH(`b(m4+; zfaOq{S{@u92p}i*=>Q`irJcEX^BHJ0cso9tY<%!J$4jUU4%*Sk5zAc(ZPGE^BUOLr z^xS>wpf&Ov11>3kzB&zj8X+%{kYJybK7(zMrn~&`W7pBBoBp_t6oHQl^TXZz$o61S ztKw7FxvjPOl9&**1!XksG4Ql}po6-Im6{*C4nZA-<Db-I);}dMSjd!9u22zQ=umNI zSxOBE10`jjnm%yCrhlG0qw@#0Q9DJPIeOA9o_q5{=F}!p{$kGYz0s!EL>mcrl&Y{Z z4|g@fk9UVcvi%v`UIT4R$mKa_4(>mbu0D-U36Fx@8lyymL`{hnC(BjFnWOjZz7x38 zygF;7C0ckBeqvnp0cqyy;MGy+Vn6g6!y$nI$gjaQpQ~0yKx>DKT4(EQjNH(?xzVE( zu*R@XfvJUzBU>X<VrrJ2!;`K=p_XWFzBBlQqu1;Mtsa7w6a^piF7&6Uvz$HgWN*X1 zM%I+5`|4@s5T)0Ub6a4a;aK4CN%eN7_LE|s-H$GvPz!7`y3R@t7D;;2F1B9Qc^{#x zk@^*%aL8AD1SV5C)OLA{9M#Yo_z%)8<t!CXDTL`7(jTVuDPN^+;N;6muFkcfRc|=i z<#nS-#NoKZ&jk#G&iB)`2l0KX%87A)Yh1QFn%3tMk-F(`>Sd`Pq8u)|?QyiUv@vgb zBuD90ottI>*;5|jqM+IMtV~jJS!YRmlOFr}Fd-!_o`(y~Go_fKj(EeDvW(DPgFMwd zgCkg9(b|MGEn}a1&E-f(txaV-e%86%o-~a2$s&<Eez>R;YPuz6a;#<13s}Z>PrMwn ztUxUY^L^7S%Thv5oXoj$?pZ~?Ty$2>+1OjEvN((f8>MmSU0b5p;_QJvPY7z8vpmOK z$B381+Cr#}Y#prok&arl%mO_1nH`{E+_qqC#t1Ie`L~>N{dwZTys_>EK%dBs{pA4k z<U@>6#wdqnH1<w&Ic9p_`XZ687)739{=r_8^JgQ!7M*cFdysjQBZZntL?AcdMrY{_ zJn5gKXJ?-o1=*_Jlq0;s)kUM)L7!M3qz=WCKiX6T>Uju!rm@k|Mm^Or^FTf2b{=bu za|cRE^c|I)^~IZ7<$8u|HJaC!pNe4$Zu&gSY{1=2P~Ogp24ALO)TO0uxUWk&)-g{U zzr>s}S2gq}mC#DrTFf84p}xyC1=6zQ(|sx_&HyYr=Y3DidS=UWs^=2Ub>p5Jdn2j8 zoZ+#qjXJi>#9u^-x$;hJWzhtfmW-W|J1<qy7uUdMST%;Y^kpu+kWY}Dskl(e)R;q# zVn*I967#If>~Hzu9?oLhfZGtX4{{Sd`}58c^Te$Mq|UZBN^cb&dcbOF<1YJFjt*>d z)JIi%8PXDMrV&~u?-jE=attvflhZnGbOs0c(IU1xQ~g>>{d8^E`(B!JBvFHwvBsNp zxmI{xpG&&wF`k06T7RakFY+eOa$aZDi={QWZ<Q`9Ys<>qeQfX6#omubywM&5`BUrl zo`!AbS!ccWo?mBZuG}F47jm-nSe`gJW_;Dq%gFhjXvcZ1x-VyFYGhVxeAbDex2%i2 zsnwy#x%WEH)!qn}(9&PIA0s@>wJo`JuM1ouagHg+MkNW;Y$8qEyx0S?%=f&n%O?8F z)McL}jU446;~?#2Xjv#q9${X;W~hpBM*Ty*SY`;G#<*0+EejuSG|92fOidr%Ye`yb z);+hh*Q_U5dBL%$wY^%`^X9b`->y-gW-%mY>4W5KAxw;nsqcY~fL06>>o2_>$lky* zkMlGOaIATlo2Q)>yROpNdk;xNAH!9v7}YJS4R3T%uADrKeF4t>ymx$4-h1$nlBF+l zH{(}3l1=rsPmD!7Qrh8g-vZ3NZi@42OCRn@|D`U5L(}Ar)&P-HLswkR3Y>Ml6UJN9 zUQJ<ZOQ9rP&kE$et{SP47RMf!xa}|>lq;IfqD67m?~gg9<HCh$)o58$dukOez>7Np z{pDQGUS0II$VD1kS1NND%U-EBx~OJ&-jCXhA@&o>r(N?My}Acox6FCm>!zDknnkYe zX9KC$j%9x7Nw;~f!P62$n_c!K<jI$uf2rL}&f6SoOm}-~+<oI70cF@%ta8|jn3{;? zvc{3=a1WXM#oAp`y37d4QSE9tc1etKxU4@rgJ&f2!LtjwvmkmFOJD1$Ran<xDd=KW zXMJ%xHMNX#o>G$|NT|p&&niRBHI>HIDC?2qQMhG?nzEKV2mGtb<8nIk6#GQ3Bcj~5 zR%s}0LY<|u8{c0WDtAbqVm-)yi~E7jwP8wA>XoHe^rjzDYgj|qEG^d?9>z|moNriK zt-J9u)s}DRQQh}L9id5bP18?nF2)X?L~%F8=@ib=x4G|=Si2*w=dO0%m=IT}EG^AF zFFBqK5qmv6VU#&bVbznS9IDkgb)LJbVi$wGk%f!*YaPdJ5YeAyw~p?VvpQ2S^reFH zXymCEXeW9s&QiJSBd==mNwp(WTV+`+ZN(FJulZU|;5_m5*sn0JmYJA0Eys2D*^sMc zed%7qlrE{g1m@S}zJMivp7esJer!h(s2lFF3`UDE?RDm|YKI){c*4qENVP92G|6TB zVqE97P7o!S*UD4Qqp90mXQhw}ml0m3&kMbS5r=XxpWjltwV0Bnk23R?Gi2^6%d;fT zlX(}4dn`unSb9nK{Zp#FoFy0Txp+7Cbgw5~_LNV3)>#8P?A6R?ot6>F(+n<ENx7`a z9hxEMbV1mM?IdcQ`|176yDM^3DrVI!v!-~-!{u(2d39pGXW**e;>5w_tkzKqH@a%k zHBWsN^C5TF3~l{e*2;4J=3xe6$*a4uUyWaK9%tm$vj6XngRC`DIOfdO7H^zUN-eO= zS>3ld=e;b`Y>WLsnmDCA12D>L8I9bx;gorC<TK9x>}-XiN44w#y64;ovk2ZClqWK# zJAG*!IUFa(a>c|uR>LSWI?IUeX%uqos<UQ?>GKbn!`9dxXzS>cEmHK%S>FAUC#>@P zmv<*QZkld?rLpYX_fm5tdH%~gW~^y35?b1ar~WXNKHufWk-0BRWu&x}!&5Kf+=FqY z9|pOg9PMi3m5~6r>X-@hsV+24hVWckhSbtSsv03R^^jUPeU&sac13WJ@$2fe6>;OZ znobj_$5IqBydp*!x@t(9Ps|NnRrrxZ%go7}u{|7mA7;!!O)Wi@wVb3!S{9x2CN0h* zJoKWLx^mYCvX2^$847RTH3Da90@oO(xr${i<&GQM7-w7DC*?~-oCB%3rP`GiI}MgK zhWmch!&<6h+Ex(k_2ro1X)VE4Cvt0%fH$?I*2QXFV$z9J?vqEM=j7QpQhkc_T=y5` zc>CX!fjca&=hAW)6}=IEvQO4uZg`9^*uvKuH;xz-F|0|yFkighV7yG@8=FRNAmg@& z9qxh}<KiZw^acoTobt91-bCf?ExZ^iB=Jak1NCg^tO5n+a*A`H;2aFE;2bD8H-=Ym z4iuc5!7Dfi3eGLy6`aEi&LVD@;7r@$(knPKA?X#IYrrcwhY8M1S8xs!oEyR`IBU+L z3k*cc;wM;Hu=tV-upc6>l$9VJX?Vkk4TV?6jia{*yt?S<eFa`!bo6$GR~H?<yWtg_ zE!hYZoZF+8q^tzz_J}EEmB_g5wOKl=Wa+(z0N+^OFp=k@;4Fos7f@#vCODT<oWlg? zV8uC1aBi$PhY8NCBf;4soUky6R{UfEodpY1zQ9s+QaFM1PB*+FE+r|kal{UUR~H?< z6s#^fdV9mGi;muPDsG_Q{GlpQpw8J4on&Q*j@}-sfPu;MvW`Rn!$h80DI!;4g7a?0 z*;3vxk>~ax6}bvaBrDdDWF<JWl`UhXSVR{W7YAbg1TmoQ)igm&EJY`!5lHVG!y88L z+lE)Lq9k?E5jzB4U3B#JhgTOJy(<)Ppy2!=aDq5caGq{>b<PT#$hZR?qNA5}q>GN; z?-b`S!Fiox6(%@;Xvj+EY=};>GDJr&+fhoQOH7n+tI|lfkd;Mr#8Py!_~O;pxrR54 zSSq2!#?kwx;T4=INr_D+HWFT4bo73quz`Z}hlVr+=Q)N~aDLnH>YR-ROIEBSU3BzP zpGCT1g7XR$H%xG59Z6!rnRO(+I%nk-d1gCGNpu`oplbMC*L+=c5;_PhMJLLOUIgBG zhBu7fS%x=`-pPhHk=|ItD-xn4b<q*K%<u}%Oh^;~jSN`Uk@O1AtRv|aoLNWGYj74` zj01?f8d#AK`Zjo3M-nSIGa(@j=pe9cN75@evmHsV!8t|I=`B<V$GO4A8Q2ySY@8Ua zvVpVoiqWcw;T5A*Im0VPt7`Cy+K1{RlR@x`5+xd(1vXJ|&Z3AD1!oS65-T_tH@t!~ z6OvfLIRIY48L8mEW_ShXOomr*&S`iB=Yob;aP~L6f-@5moWWFZCU;+`nZUMB1sf+u zt24mrqT^VG?*r-55TjLI!z)Isa)wuoRy9!BBHcJKT5;SLwVx<BpNCf#Umpi`;zYqY zn~Iw#I2SRzf^#{;D>$=`1m|SI`9JVVN$Q*xR&Zt=Nn*j7btJulGwVot1!sy*cu{gE z(OH_LGd50)R(~L_E;<fCM-AcVqqE+}#);9Yoa%w&#AwBFU!)r+Mk~(Ema)nb1!qnn zbkULX8IX$dChDB^xQT)@>qxLl6r5Q{(knP~ZYDS<3(hCu)kR0ntRq33taDbxf-~EZ zj4L>^9Z9d?OwkFiMRaKD;GCLH#%Ua4b|Y>JmN!m}R=bfWQQkN)TJ1Ju<vdu&iE)r~ zGm&mwGFef*6Qt<q{S97SboBn=5FNd&BPkr6v(73}aOT`ha84AQsn3FQvdHs6cy-Z9 zR)*;4WjhjalXcE2uHZ~1l&l123P*S?qJz?bmC<`!uyGnkt1XBt3Mh?7e5VQ+Cq^rd z`=WqxVzlDiOv*|ht&~@cR-8hJY$OWKtQ5gHQH+DT73W03nRTR#j@jVcOv*}dMpkuJ zf-@`SpynIvn=Cm00<SJQ#$_GpT1PM2kuExVsr({W$vS7nN^qv=1ZRtIpmZWvdO{W~ zI#FOZAg;&;ItF+-?n_yT(Ta03DJwBraqtq^fFME4VNrUGIuc&=$G|24D>$Q%ftPh8 zWhFRsZYE_VI5S-tS8!%RqD1f^E^A+SEhR#C1uW}G7oGCzqElYM8KTmOB`d)hGQso% z<|TaP41_k`Z4A_Zj%Q&8LWCkBIjO!;k7<0K>Ys^;<en}~4tP%)6A@iwrY@ljddUI8 zo+S6Clt%GSY#fH~FOsPh{7EX0@)lMq1TA7DKaY6HJy@3UWb*~Z@jFXKemYC>!3<Uy z%{5d8<^ViNfR0LZRIVe;#=V#{?4`+*1iqit2|Fjen=JR4qL3SY*Q0TV&W(nL4v6T~ zFFJa_kZ>Bdp-LgM(pEJ6OcJ5Ygv>~Po7!X%Xv-f*X8Gk0#$kwEJW&$(fgi&JUqJq> z90eWz2qeGj_ZMQkpmpjqqF<<gNQ{4@(1?(J{>=vUiR$m)Wx$Zoh}Wb1YgZ2N4;emS zP^f?P+SUD|2Mq4lH)8mZX#aZtRjXC48Bjf_T8$clU;3Z_c?ozj{zOAjS%jm>$fkw~ zD{qZk$+&4ZaFs=vxXSWh8@b9N%v{M_@W!d*Zb(XIyeead`|mV$l_kXrRt--f%}o_c zP%cBYY#_>LJ_Pn)>`KK;qqVCyklLGY6X4#0dmC;d+$6Zka8ux>!cBvl4)+e+47iza zv*2dKy$d%7?mf8o;pW1905=Z~>q>1t+yc0GxP@?w;1<Ju2=@`(61b1yK7sobj@@ti z@Bfbknmg$pgzx-I!3J2Nf1?essBQ_Z)zBp-T`U&eQ`)UEqEQ@5L`)!cvtLdak{bD- z$NVEda~PkMUqO(>S{%IkPgwygB&>i{(`X5dr}DL6bEy{2I_bk^NK$e(-h_}}YT<WU znxb#xJ$RmWi`+3a=7zH{RZ6D8=Vu_&()8eGh=UPC78zalWa@;M<p$$&J`eT`t8c(7 zj?`ostL*=&YO;&TT^6lzn|`4K`n)h8Ix1uKHjog_URf(F5Y+~GW|CJ1cu^u!P=W_U zPPwI2NBI$6mKB7b+d7gY`0H9H4Dp4+=s#c0Pd@z*8Zdi`L(cwCYhGja{!mrLfP5_z zc~2J@90%d%BXaPON5W5U>dfEyxZ3kIlT^*EJ?qTL{pB3Dmys;j?7TVP=IbPUao&)K z<ualt`Ks$%j4!UXSgsn$Ym{N)NIdnI-iDwJ@wyPWq+s~VdS#E-CR|@H;w1(7>JX=m zrfW+sFEhytW2qQEv*?$*YZAQB;KAscMN8aqb6nlBT(zK7(!j@It|bLN|Kld8Jn2&k zX0t3kj3*9W8S`?vFl=3J_+zV28f2hep$6z&E?n`|8@J}m$~d=e&%K1)YA|12<>fhf z0UJ4xy;hpJs=kM>Mx|=<&2nMN{be4dTW+tKTg(c$)BaShxLNAnn;y;e3Ju$->2*cR zOB>$slo!1`T-UPHiZ^^6FXW{#7N&CP%rNKWqKzCI+?wZfxp-{7CYz#Rv;W4FTB)?@ zze65!Zk390H;YzyYE_Pls4TBnM(HdUG~JKMDVoiBim|xAJ}+WB7h|cVMS7!A@+B<q zwaIvC%W@&tQ!gtohI(aW%Q7SI#M#A+flbV|U0xnx8Tk?wrD8HU=F+pbM33i%Ni&zW zAzx%MzxbTOEB=<*f+tNhUki5b*F}9>MtM)%9G9Y9jLTW(l%6=5^W|dl&QeDAZJ~)+ zwDw26xLg_K2>KMST)Ms-<)I(8l--lQk(+wymb#?BLMKOB7j5#=oS9{e@g#po55?T1 zYFy1y6YfW7*$2oiR5e=bmv>ncmLATVzD16L#w^6rV|c?stu{Q=;8So`7j->ww!Bv2 zO`cu#&->ohFe~NqQg~<7bBczq()bFr^96mDo;B_;mf*o4mqi|)+DaOYi&^y56L<C< z?9);)gyu2=$hD;^uc4PNbS@)`k8aS-GC%e78ipGqa+Ztm?)ylNNU~kBq)uk-EE03i z$K2PZXcWZK#@+W9Db8XnW4C(_a?VB_{O^nux?3m6muXy#DO%>4-n8qdG?wLJv_Z}j zR1d4xL)1nwrdu?_(@5YL(=F!1ETftyK8_K^#h{sGR_Q&bR7|Z|c8uKXY%1$KOG|Xm z!_%IVH?{9rX&5zS(REL~L8`q<8s*D5EML_0$|P7Cc{{WzRRd<0mg8RXUhH_KiJ$Xs zrfNf`S&F4Ubl?A&`@<A?{VlJ*%Dn^+vkc4Z&l`R8%GlLY%${9$L*xrZ-p^sUHV`|r zmeIu1XwLmiX?EEdnJs;ocYDJlkh-&x0MW0yyb5mJ{V=cGQZ&zIX-l5kd)js1y|(_{ z{5-a$f6`!-Wk<#vjaO>{?=_Jz#7RXOH8GVj$Ff7?NuN_SO7P#AFms8`zQy%)BSqtB zE+-q#I&U%4X6Z{k>AP&5shWthaC5Kg=AJplnW|;fa5n=~`|{Fg!Z4g?JMYVgS3NBn z;*CBUJ7G4#!J-}Ba8PSdqrZEKb!>lq575I1^S6uyaxC+{{TZgK(zr%-ysGP5D)pMN zG=!w`VLA(xGib}G;i;X<@huetW0sNG6EEv3UFFgA8n8RlXf7+!R1CJctSKlbwI}5; zYGLS=%WgudCgxJv)szMqQZ-@cvg;*JOl2yn?3`OVR<B}AwyXp^^)N1m`Yf&1{aiHF z{@AkOa^Ev~zZUnV2XNghGV087I^;?7Jhlz);aU0@Pdqszllu;AV|-HjY-)4l`_CHl z^3I@`r4~J{QXMNDi}^AOANM+?R+f~$lQA_*zu}%s%BERTSdpYDZ|tqzn4+`Hz}#!S zmj<9L?b+R^oN8;d@bIP;IhojU>5H6=oUo=+H0_mkBVsPSwe#L8Te2{wlNOU_mRXV~ zEv6BVP^_9#F}7w|vAEYlrEh9Sijo=x$F&s8B6{q<WlbzcT<5V}jS@ymmcHFnUzLLS zDwna$E3;Yut+B4Z!(f=pTGf$rIkI{-TjqR@?rCIAwKYEV38RZiH%ouxUKgLPzj5D( zrLwBC=$U&SsmjSRT6^1Td1wQc_UjGTaP$UGWs=C!^LT1+&V3zcMPcYG(0c#<hMrvR z!8nf)W+}5bN@;!QsXe8lYZe)M>fOz!?D8DL$tajb=R9#!_uM=fF0;%LJ#$re#W-HL zHMEw-(mPHh<m$u89GqqE-F<J8s)0I-1l@B<d6wq5g$Z487|^q<LEZN%DRVY-FHO9h zclAu8D%+;z^w!<{OpY_8aI7b-b0>?DL`zTVj=P#S4?w?Rx=U;sBg`#P?k-W+oXx9- zBE*fcs(+19Ew$I9R#2vz@oX6EpEq@8Sy{N(*R-uH-01-|$}7WhmcGLsPqu*Jn6sv8 z+K#WR=&!oSHzwR0Fv}oc1Xu4+c=ifYC49NRphjY0s)XJE;T5Jz=xrgq!c+;py@eOo zhNZQJk@T7kn9(aZ^W}cQ*=)d!SixBuFr!y+mIln|6`WfjuHYPoH+)zkJy&J}W*`m| zd1gW)&tZbIG+;)o;7r30BF`|90agtaXD~J1h+?|B^$|@kzBATrzzoEiAm+>cy69+a zMH(<8R+uW02F&Ocrb?s%GkS%olCCNnfx-w1EdfYbIcLLczzlH%1?Tn<jVMu|;4BT8 z5i2;ej%Kk^%m&Qp)j89k7rnx~iZozGuiz{Vn9(aZO9N)~3eM7i8N3$JnGJfmV$BB3 zh&357qgOXGW@sG^nMea>#0pa-(tsJg!c<9bhv-O50}P_}%?8XsY&Kv<uP}lV>JS~{ zN&{xZ3eM7i8N6l#X7rj2n9-}7SD`I6dIe``z>HpzXV#Id1;Lq>vW&zQ(U}dHxnl9= zDl$ov60!}N449Evm{*Yo%;?pPfhl5Psze$vBUYFy>F*F7Inzjn;A}Qv24b@TGkSH- zhSo8zG+;)o;4BT8!5b#>EDe~^YcgO)ugQQJy*g(a*P&PBnRTR#jtNNvX24oRXEtEw ziq(Xv5{gdtS0)2yBo;<cqyaN}g?SZez>Hqqyo!n|OqE1BL`S<O(tsI=%?8Zq6`Z93 zGkOJQX~2wLoii-}(JMGh17`4si9A!ErCyl~m=P;DO9N)~3eM7i8NE7ZLv+lfG++j- zMRej_NQBXXh$|L7AL3GUB9rK!;GJi9g%OllhF2ItnQVB4sghX3%a<;}MrVa#0p4YX zS8!%RqPoon%#bT64v3`zGkOJQX~2wLgR@i>!FjdfjJ^$Vr2#V#qrJk*ghU%O8!#hQ zaFzzl=ruT})L_8}|235mo`jb{h-)@rMz0tLX?RJrGFlVSG-<$$STS0aGq7T`k_OC( z6{A&<O2}-$3|O-PGkOK*ydV~ulPEY#17^eu&P+&R1?K?8*;1lpk>^YXR&dT~cm?Nz zhF5U*H@t!~6Ox+aEF2UbX|+!UYc^oU;_IW8-si-L(MlRHBUX%7(tsJgVziP5%;*)P z6~}#{8)gG$z$WUP^)_fWU`DLqEDe~^D>zF7X7mcq(tsJfW&>vQ>YVj-lT8N9h!vb! zM<Q3rg0nPWMy%jW(Fv?YudGedS+HgUW?&U3Mk{H+j9z`T()(Dm0W)I7XeAAp(JMwP zX}}C#vjH=D1!rl%j9#6y-shMNm=P;DO9N)~3eM7i8N6l#X7mcq(tsJgI%mDXCYubH z5i2-L17`FJ&J<mW4c4trnhltNmDzw9y(R-@^y<dIXmo;JF<MCjX7q}2km{X4Y@!$k zr2#W~#W*Mpn9(aZO9N)~>YQnXi(bK58Ze_*aFzzl;58dCqgQaIoh_+Xg0nPWMy$?R z&sDPEOeGYVOctCeI^nfyozWAf)SS%*%#e`TfEm4Fw2}tQ=oO=tG+;)rK3eJJjT7Ub zG++j-*?<|nCIe>l3eM7i8NGtDG+;)r;LPq=)`H;7N;ycunhluID>zF7X7mcq(tsJg zf-?mxWu<dgtORF@PH?t}4oZi<Za1(gi;mb03X6^bUXJ@xuf%924VWPts6b#jc!_Kv zQ}9XyX2cqGB+Dz(O;DWC$ADNGFat5#4ZPBT8NGrt)0J@rXC@>{1RsbwcI%>}*C-LX zE8VMWo$?9=hFa-ZU3AJTSqaXpqw6pQkdYNb@uhB`OPGluJxV9zf;)eD%%`wmmX?^Z z_f-RZ8e($9V@}haTTxP%n5j!B1EnE<o-LSpl((?rAh;ptURf}+88*GrO_)i+!G2Iw zj$o|;T9CX>G7uX*{LWJdAP+x=X!W#`*z7EcFn%+czApG$L>sJT+aOM3(DetV1-|*n ztJIwU+hUuuFW^A@t&KP(!M{E%V{!bh1IGhnZb$PQ3I4)A2<h<qP9p_>+LekBIjEzD zE9xrX#Tbf9G}2&>8W}PCVRXF>rf>2~KFpCn%!O2j(GI#w$WZ_+ztF5m4g9SPR|DZS z;rP`Ie?Wc#I!LR6zqRl;5U>(VkOU!38Y1D}AkaDgD=Eq+!-64)P;67x!Pk$P;EIQH z2_=qs?vL_ELlSk6N)>#MjsGgcF<0FB4@YQK$dCV+n`-!54gV_X{3}6XF=D%q7ZWN8 zNtFU$O4^(|M}Bxb=K6A*zmeZQkU1}2L<^agwD2+WWF0!{jP>bSBGzbS)Uc|{%8)%T z3sgaFX|jc-tBi87POW)Xl9akq2U^CO<fR!(hS#`wm|owh-W^9etou%=PZ|;6H#EXT zx%s^cZjbV^f3U~}^PM_xXDOzhBYv$$UgxQg+6h3Zq{i@XHTXKi)j~SdDr!%lRsqk{ zBx+j9IWhBepN}>u8{1K+$U`45^P==Q^}M9c*HeD@O;H}2#{7+WNr|U(J}5`k?o!rs ztB(EC?IINV?%FCM(Y}U3108LgbX8D`G&;e4jvM$<2x04}3YdE9V9Yv@G~2{rQUCSv zHxmDN^`GA#;|t={`6{^1NQ;`z?NPpjL&>GY>EAA2**CO7Z|^E)@B5y?qDS(!uZx02 zd3i+kkj_20_i09<Pl!P+^@HSjH6sdjM6KYfh>oi%DfQ*fy%5V@2d#{Uc=8M4q2e+& zds#=X&T*ZWj`|s?QeM_{OCm4U7Lsym&L&q{BK`X4(b<<)7A-#%d8&;buNlhH6g_cG z*g)k7+eG|p2A$@p))@b)f#wDDij9P8gpj77s{uMkuc*qHQmW1xno@3gk%D#B2awWr z&g}q5?VreP%BgzJZ97qqa@NIB%4*)mIrr>k|B2jtmkZCOX@UGv_UxTvQqe6{XR7C> z#owWBX{|BX)1_V4Q`U6J+x$0Jlt8xlI?y7=i{15s>4Tnt$D-6$N6%oTOG#4ZG*pSq z960a(|D(5_Q+=BJzmC~0M>6*_qSR+0=3F^=Jxxy7w}wFrUl+Y#KlC;7l6W-oW?nU< zb@ph^p}RDmCeQpzJ$o$XG!*%);-X<z3Qwt+XGd%??)2YG>#jXo`)K#=-OSa~{LD-% z*HFx_Oi!)+)QZquNnBgmzdOWJE&jW6Z_ZtMNzBstcRZ)p$-ko>%(+Of6SFk_9na}? z^6#hzb1u^B#4L?}$8&m}{5$HwoQw22F-zm$@tj^K|BiYv=OVpM%+mOGJU?xnaA&~v z{F=K@^0fMO>~{0~nJ+1*pSYkQ?`UY)TF^9qT;9N;p}S9YRSht{)m5Xq^;=y*wQAO? fUadCXFyJq?Rl_m)a2qCv<0BFhk^c98u>}4fd_a<B literal 0 HcmV?d00001 diff --git a/_samples/assets/output_for_flash.swf b/_samples/assets/output_for_flash.swf new file mode 100644 index 0000000000000000000000000000000000000000..dbe17b6bce5b9311776f43c2b527f5d696181e31 GIT binary patch literal 15571 zcmeI3c{tVG-|yF+OsTe6h|M--%1n}(GRAHji<?4}L{!qWE8LPqNRc~fD>Ic;R45Ut z=++=<(5&IsK#}2m*1GRszw=zzd9HJw^Vf5(>+G&xy}j33pY>V8cd)<ToP3uF{b`9% z0%H7z(Ci|FL@CHYjDirdr%q2#Thm%WrUoGq<Ye#44NHi(-4GUnBI4IY;UB<s{AHrJ zuy}`%_z)By5gCWVqe9{$5Y!3V5FHYQ9RCr{(O`s!tO`RRp`rF6QBf;HR;@)DGQS#A z5LF9NBL0pv3mu{&A*67Kj)W+5%2NCj_3xjAXyhll0`?dRhlG(3U62OJ3JDNP&;u6; z5ejo;(6r<;D5RhS$}28Q{y;oRpeA#kDb8MxC{zR^okrijeVe98LM8Z2D=&Jt`L<hq zc<joSJ~_t_zF%nK;esxU!I<b5A9tJ@j#%&YTiLgfpU)m9?qK{b@RgIf-ndnuqLgJ( zK4?{6d3VAuggSLLn8Cf@tek>0<Rq!(Q9QxSMTwcCi;~_O@?G>%{^v->5@V!fVLiHU zaMio-w`%UCr(LNu6r25ATSe(P({;k)*w@cqbb4eM&p0oM^`v~os8_g^lFwqh8IHWY zp)<d4{BlTBQpm2WX`Al{vz(-nS1gnwAV7gZqG|D)N(fOAog!enArj_a78xRAbQ_H# zHHsa@h<cG~MY~D!rB~3S8P^%F8Q&RPfj)tCf~N)d3cV0oESxL+P?(9BGv8k|8BM%Y zG~(O$vSPJoVeT8vqrS5cW78ERkYT>dTPCD_r_;S{-`cv-{3CuyPr*#Inj3YO-+4rN znOdk(Ct^e#MwHD$Eu2qmiiY)OzcdA{3nDT4{m$jr)~WMZsNA1NeU)Bbk#1OR>|K7L zhl?m{%8{UlN?1ba?@||)(mMG&wACz;$dLpjRw1S3RLPwq)Ybx-rI#WlzXyM$1z0Sf zarg7;G=reo58}_YCy4~jYf5BmzKfdgQp$sR`!3*mg|p`kzA(#EVCR3}m>rqQGae1~ zV*Vb+vwW~XR%5HDYWDR-8L3fFz4JFj8Ofh~9x3B?EKxTU!pyM0>~9-y9}I<Wr5D9U z?wRRgEH!jG!M7#`X&o#=*WIcsqzp5WwnZjo5iAYA#y52DA7zXE-$lfwrMeC<8=qD< zXfz4Ue3ypG&CwezG^6gBo>j%N`ou~^tq?&oOBJ;06QUPxk!$D>Oyw%d=r}wo^paSk zA{4)IiE?*Z9g@=GA-T*VPH!3|a}oCltyxn>&8BVv4;`9Y7F>yhZ_}DjmCfw*ELYb{ zEj<+<I6K6l)@H?&RM@?c;2U<$>E0V{ZQFKbIYfj8cbUi<{y-MJJVw#p0}KaqOCe(< z#p0nkzDk_V)5o_JdJ9Y6L5!*m_nTqB6<3j9anR*eLGk8`)ArwEmzbD&BF+e+#TZJ~ zuM*8Tl&smZN>cEZXOU7SVvhtPZ=dRYCEkI0IZF}4%M;0zEF91Zow2XFqO%BXUMXav zwcmO9p;Dyf+>A`R=%o+lzeOyUTJ+nVBS%##^lQ`ldDMzfB+9p0b0%{dQC{iWkZCtx zop|0e&b$A%``RVS-lZ(#e8kwi4GGj6zY98B*Na4MbCG!FV(*V$bA8V^M=_kmsykuY zOqoa}<N|kZN|$<9?tPaeiyDE;x@k{bq8Kj^@TldrNVIy9%h(FbBE%Z6ManVZdpb*R z&7S9isC-pKZF{h0pM2o%@#<QVgeXFZYsD*Pt-RrfL@G7W{5UVI%eoHzHx(<QDm{^U zS`j*0EMBuF)uoY{y{z2M-NWk{DtU$&kHgCX+ic!z*2oQ5$p5_8so`*$I=H>U4L0zz z2eUg*tgu!+h(r#?Akm*pEh9HmB;-(uWVXF(r)b?wr=Nv`q!-c5XLGKso$ZN)tnlW4 zyLJI5v4Ium-648;?P6i?Dh1V5a8$lV0+q)1g39Wek;rEsB+@FCy;v$Yd$G`AI1o9A z;<eA)-)kQiG1#6+Qt8aD=R(OgHy*Wpi}#lA>6w>_INy2HOHEQzuO~$BwFUDoltuPj zlF_Od)Ru@hNvq^HiJXLy7a_xEcgj0oSdE88<6QQ?MM}$e7E0v)=`~k$-JcuoA;vq# z=mf`BOC_h%Thdom^%>$^LA1ltg<CsP%Ni8p1dvF0FuIqVSm@`=qcy)uEKHSt=bLeJ zB#}>lo5_Nh>px#etgqe8kw4<~P0w3$cwE&6agW*{Z-qH7r7e4|T5-h+&Q0C5^**B= zp9x!G0}|*pDhuj0Dn&DDxJZ)aaG&BO;d^H08nq?LrTgee%Ay&mtNe(6C}?k$c;Yb} zGquAZbggHq0*!-y<sXGt#vp2G4w@0&IaJj+4;6FtZB}?}^vvZ^81`0*45w`g!mUV3 zy&1_lsc|D^d59_IiR`60AyWP(Nj?ckDu9Q=T86yy1ar`A%5E4!S~@xJ%n}>qhdK8- zA3#V7CPH5SJ*O`tWLtRdjI4Y_6HTbg?NL%R?B^n>jpqv%`SeAVyh98l9^%?NyIUA7 z_gdxsC^;PoUmrY|=dcaJKIdvgZe4$``}y2b>9+@Xe&vYrK0xC5)kWMZ@r#>rzn1^> zJM>DT*y^7|0=f%D%kEyfchFUBNikx~N64`FvMWm~#a5ORD#j}c_NKAM5j8g9ECbRp zTFFH+k+1qYmg+V7HU=--VscI&Nv&X_aItmXd5k(V`}5$r#Uz~;u1|6$l1wymD%A3> z2;Is;RbtIZJ2paFJ2s4m{?KYhJiR;O8>(`gwWBr5t1^qrmmuv1Ph{eLvV3I0$s*+a zlg?=U?33(?tXnQCy>j}t!zCR_&4a1BPxUdYrXuS2Jw(?CH5K$ea9G&Cnc^LY1niY^ z{Y7`!plMmWTS}aEn%y`4Zf_i4p*Bx^t#0LWuXS;TLWto~goIeWxvX75%!53xo%07Y z<GCj?9DSlWvOKgnkL#NoNb&d2M9Y*A!=gLq&zZveb>F0=1d0vM*vGGeQvyq9^|jv8 zI|sZp;FM5{Xe*kB+De*jP*6h=+NE=~dFadwTGcb8b%BLC=;k$<t$J|LC8vwDP^9$t ztao@zgxzH3xp8(IU)_WxFFZr<#WezRBG#-8Ppslm3qp~BSHvkPsZTM5<sa>v5k3C1 z&kM40#hZ?PuSneNXseTaJ#?|Rl<i#g7{o0=$Q2F)zh)b1B?sw@eCqX%-<-;kS?n!z zbk6a)25wV5eM8O5j%wGUKXP~?@ti70HR>I<=yPX&pX=H@PTc~w6_V0mqPewoocA+q zue#^X5;I_MXd4fr;Zv<{H}~(?>c4G#B^Z@=BHGrJH3g5uc~tcx<h#Fh<(^oTjr)d@ z%;!iJ1!!#!nVP@LrDU@tZAHO6la5-nAkBuB)FisQ;PLh2VizieQX1NM)JC{mY*FBs z|8*w&oLT`L)~nMqZru<oeVx0Iq;wHlHUlwU_Hm!M=XU6a1vxj{P)z<X7K`_3cXx=N zw|HH2!}*byn=bx5-rC^(qIlsYKRZ6sXWcN<&^41!)tadyoQX7DkzhpwIWNxTp~Th2 zmva<UMw-z{EhJoZa^8{rRf~dL;*uYIkSMP?_~aS7Fn><Ag#!C}j24d)yz4?@nUw1s zi8<w72AN?t)I(e(Z5m#(D(tGiN4dDJJ`$<@d`kZB1I)b^vakGv1fLoYbr;Us`!cd* zqH%BETq(-pirL?0ZIN5E)#G=IF9v6+bC)>(Y}}hR{baF1k;L(Hm%j>e#(JcKwuB!& zQDd}tbK&b_LvPdIEHZOmuwch4Df2DuLoFVyVVe!VM3*htC!4M);(k3!&u_-XrpmB~ zDeKMeX^6cXeYJg|-sLBMWh=Z{uWDB4lo|A)@fl(vd*p~*5f_D^m1q?TMPVo$tws?j z5=EhCv>wHv4JZ!9qm5`Y+~`Lw`Nj+uc98B~u)<`8$y@zYom3s9iRmDX*)7&BhW|~~ z;maXS>~$|dnnG|J{$KgCpJof0rT=sT3Qc+flcu<Y{)AaHT$)2zKzJOOG{q+@A*>*r z!@?1qkPedl?g^|N;S%iwEdAjNO#kUm{0&5J0y4)p6TOA#Y?=<z`F<SOI>INqglHOF z2U(6v5VC*|hgE>G-`T+65hLQ;5yu|*?RyYmCh@sQ7y9)f^aUnO`2$OTl+bk1r5{d6 zk7TPyvc=j59GtBl$rk$?h~5Om*<ybS(b+UTlC2)e7V8plT1RMfJ(4XZ3pCCaM`i<Y zw%E5Ljy(`(i<wD$17rZbaFGSc!~*8i7c|b<0{Z3CEJ!a{v*;Gcc#2J!NytLB;5!j| z0&yHnA3|TC(4_xA{!)m^f}NN&Wea4EyAg8!aeRn_$w5A(jxV%zL%ziEC2jqQ?@wxC zau9a#-o|qn0*)^b_lPwY_PgwNF6?+*8U}g#0`a)QV79~IIKXWqp}r3=Y04LfAR>0S zaAe?C>q)Eiq}6(8<qyXTbKD=rg66`JgWF>I0&%oBXf=lwNAyNgis=hS7w&f>M6*Sk zh~7l>W>RxA(OW>fp)F9K3&i^eYhR$-G>u+?j*d$ZssOi5un9AP&0{orBPqpXflm0T z0>pJ1QN)Bja2RC*o5#3l2Mv#F2MtHwLBm<?ptX+kX*+0mFYTb=Ro+3vtBjdR2){al zpFzu{@ddJh5dwUmpI`}L1@T!Zi`2=YF~_rMS+vq0hk;2`#|V!Dna~Sn3E@d#>0|}b zER;jq=8(2Iq-_pqn?qYNb)1HMK4A%A1z`&9FqCEh6Mkk9okN%p<V_Y3%?Bn;l>ifd zRuHmK0qLuN^i@FmDj<Df9;acSPgp`&L6|~2M*2EN`ocPgIQc-_7k2nS+!wA>LC8XU za8hV|h?zy01N8h^Kr{=LkkS$;O{bO6q9zXjSyNd+=6DX_Vd57MeT?Xngk?Y$L_P^~ zm;uByfOS3)AG0S(CfKhar5Us`n$83th%>~xf{=wONDdXy;{h6+Q=xaPa|jOuqhNH{ zIY#tJ!ZILhDxX$Kn}AVQ!p<oLew(NV9vyEWej~7X>I$%XvKiPr)k@e-96qfIT4m6x zA#w>}1z|lf3D&d*_GbxU1tFhSOA{T-pq-{&`jHRB{hlT}7CWV&zrl#Gt_R{AaGgdV z&fzr4;WWtsvz<68w6oAx79k%fI#vSIfl-{L@h9?Wbr7Kxh{sh2`7{ux5r|{fLCjVl zj)pa#b`J8%r`1EN2Er>qJob9hFJ?P&GHB;v)O?^Sj2-I=!g^p5%<2Ww?*&@SR6S^& zi3Z|i&@Ms_*}zO#N32T-D+ud>c-|Vwd}3A*T@Or}s-rbRv<rkyge`<^gdK!kgtrMZ zXqQNamq><KR}d$KcA3l=CLeVA&w3!9t1D#Gn2n(E{9J*tXV99+dNqO12aV4#*eM0# z^}@Oyh}R3(X$0c7O=RAh$h={;6Xyi28D;}!ADnt1e*$WQZXs+V>>%tSgzr6|w1IY& zM7|0;_6lgcB3Hq0C2S{72JITj^BT$X8p#torQqW{v91T=JaL^yAkOm|iFS=d!)zzc z30f=3vlX0r&^S-5TL{|-I|#c7Zxixq*J-S=MxZFHV;jk*jpWlt^1)6i_&6V|>w!2Q zT&EG31o^a)eA-ApnC-+#p|z7$!{mcb|5*p@o@^p)BkUmTBD_t=r`>?n&!=@j{8Au3 z3OY!S*l7gaJk<=uGl|&_#4FxO>!oD_W8fUuNv;u{v{rfr@%iwrB0h?{$mqJr=(@=0 zuu}>?9v#;8Ks-8JrxA!}y9?sC6Y^=dAWkDD951&?hPO$Ew@EAPG=h&ayiGF1YzN&v zsmP+zo5vJcGk{`rCf#^S9OySG0X#acNE{Z?%0#OG{U+JOQ6-KJp&s#>bV+(CRUBwM zB>}_{ux1ghOtcCRN06jPOsEpALwsGL^?=(Z#Ocz|N|BHSWKOF9hmj7@Z&DXHF{KAI zo?_Bvpj3=d9EdZQ0bhzxn)q^rEaE5=twP8qjvAp3adZipba{FgMI6YSmH;OFlp$J? zkVPD2px>kl5Z@bMtxBi^bbt)8qX&$bkf1BjSug_%5KWm-2Z%FQ1d0Kf)8as!xgzu> zO?(;R%Mr4OqfDp*jDR~CTwje)o%lM0dO+qhldeRlOya}3L40KrUm4m;gJw?45Xup< z2-SdolR7|Sm|I+jNmn7eLIqlhgFZSg4ID-?K)j~dR|ev-t3c*Dz;EC6h*o6bwoE!3 zR#Obff_=q?nv%d_Bn|AM$N-tsa>P*t;+UAqKpc||@tJg0&|*M53all8##1uHkpntR z$`h?X$Rbn$;ys3`Mkq#CgI40eZ4-*XhzS;<G7x8u9bKRUtQyu#x&|4$255265fhR? zhe;Wr@st9PIju;vG7x8reH~!)m>zKyS=bk&YXQZ9cxAO<)XG2yIPS2|r0YT}F(BR> zm~7&x0Ucm1up>sF4-^OD9fB!C97Q0WF-#RgHlZreVNwf-S93lY7p}vk>%+`T0C6T* zD-g1Pev`^Xs{kV=)PY@;dBiaQvZf4y%xNQ_@stIyi(*F{dqPJ-dAb3_WCM+%z5&!X zAv7hv8POKNE{Y}5_QZD}+L2I#ZV0)l0P(##)@-^FnSW!5CP6nQ=M!Uy&jQ^%273hv zGYI+X0V5`$Z=fL%XN$E7(0Iy>(2CFo$eOYP`c2vsIuPHT(1TEdZbEju37lsXKo27p zaNC3m5NCx;4S>vPLqa1U?gcv*z+q%Zv^}9Cp%bAqp*wIGDbr11HrPOXPBR6^0ElB^ znh;tM+5&M*Q#iZY6YW8KNxB(0Y+%AqeIRq%0Ep)wYa>Dv;+PR_0USn_L|YNs5IPb% z5xNsf(9OwOn3J_IhnZy47eJmWbPM8GfFnj<2)#%E6MiZZtpda~7sC9g0`a&o^@wjk zXb5CY83B!_On`oqW<We|3n4cv;@bcnChdr}Cv+fmC-fi`r(2TVElHl1Br8kkU6=TJ zga$x78@Q%Dp$DM^eG#-`1M&IU3bK_1;`5Rf)Knmv1;i_EMRpplqee;%35|ew#c_QL z;4oT9XiI2Ee0$);lq1njgwBNSz+t39w<bATlN@ZwC@|S{8*uD_%xNjQEy>50)VC$2 zwq);N-;k6V0dXeSu>j(Ig0(%NBcT%^lMcHc&VhC?=lVn&5}FXl0*L1y*RdgVAan#W zr`>?fWA4Q9AY{_*!50JKm{>~y@l4vou9hZ_JP@B}FjasFKh=Q7Q}cjb6n!AxvDh&r zG$D>Da2S~pZ9%jpp%rm#2<?dDK(sT_Ou7TKG63S4!89YZCv+qfr#phLNT>qD=NU(s zZ3Cd+qzTY?$_mJwwjp#U^dMx@ouH;TeKFKj0OB(?rasVk%7FNWKzz=@bxeUc2dozY zab!#zLR%nn+JR_CLO0;iaSx)|^d%5Sh3-r;bS4?PKpaClrZLcX$`sf|F(X=n?n?HL zE7X^uyAkaMnn`zuItoC127@yk<mnFm8WYEY(3a4i_!4vv($<6Y>p{l56zWURmqKnV zAU*>ug*t5F=mPNyE``X3L>m#>5ZV(u5V{l6=#ngQX9$G*Kp@-)vY6AEM9Z>dS@_$q zIV}8b*c?{+&v4*2$_C&MY8DOq!t^<;<}nfA(Qzg);ineSI>evDngbDbihqS~uBga{ z3jh55p)NAQ;)xxNnrQkj<?~C;vig^&WsQ|2)DtA7Smhi3%hUT+8u80(`&G~OSLr<P z%B*l(@n5BrBm?Yef>%OH%^`}KHTHym)f4@t{@vp6FHiDU+kcn-Qr6OGkSP`Y{Tc&z zOH5ceygkCYTE^l=gt6S$N3V|uk7d7pL(KXOA@PyxqggRgtMpj-O_cv#t@$_{YuWm! zjksML%Q+ev8Z20#uM05LW7$SUu{e>dBjV#&oUpjC4V%J3(KIy{@}Z#^bW@mzgoY7A zID@RoWB3NnP{lo!d)&s}YnG7j%oQfPr91EM4@wS@q+2lWCSM#((q}$Q){<V$V|FFG zNNM^)%`|C8A!X0xa>+MI$32rNv!FqQ{Ypu?euYz!_%0zI_-VJaBSKB$@c0?J^~B3Y zK4}61R4^0{r|u4(7S|O(h>jTldfj6tQb3Bx2446$N{Od_rv}iXXfx=UbZf?OhJXNm zv14Bsd3|DUcjK~<=PH}muDT@i_M`jn$uvbB?M+_zL1N40#j)@l+D39TNlVGK$TTXY z^nu|V%0-uwfc~~AB+}=JXm^y>ob6PKKr<&Q(aa~;PLEbxJN-?)6^Xo#N1_XZhb}D) zZbstV7E0`gta2Yj9}xR-+?)M{2X7H@2W(KrAt`^kdW2>$e9#QZ=s&}x0=;vbx{<fM z4JBT<FX$~ibftd|#?MJwHUwP$R5v@G%i6~cWq5h*ld?O37_K^qaqgUC)eK9devU<* zSm$ow(b?0>-s0V)ctrMbWMI|8u+~`|Z(pBuBp&IB0x32j=NvvJ?+t18Rx_g*cO#!l z9+G;N=dHaVkZSa0^9dfS{G0ZnJ`d@Nl@|=*=~ekCnyId=73;-CLPMEoHzZQ&M7eLz z+gSmBQ&}o&GG%`kHvd?zYF~*M(WOY@te2Q!m4m}gq}*AFl8QBvb{Pv92iA&w3#?hc z-ai{Z0c#s`^8YKiMviOp=Z`%B3;YEd%y$JN?t6sdXvwaJ%^08kxq6PCXqNla3AgT2 z$dE0Pm_;v{aq!27GBqpL_)Rm;Sq;q`e7MX_>SdR9Z`ak!GCamIeI#3!d2gkUJ!1HA z5c_#`X-@u7{59i^PK@q-kpohT@)paq2geLZ@`S67nuM)*-s=kw%X?UqJmIhfF<I-c zckHIV(X5oL*h0PAzh|f-dUo~U*&@+BDM)x_Cd%I5Qq6xX_sSE^gO_CdgFBawCP~Vy z$s9O|=(AomAQ;!}!LTErYS4S{OX<Sv1-!k_&!Oic#zs9PaQ5^-&{$n1Jf4U55*|ur zJKoF9c1X2Cj7U2~@kw{|_enRHa9Wz+O!1tpA?7IcN^73KWf8?C2MNw_<HXc8zdkC< z(%W)yt4mYb9n%vl%g#wtIY?xc4LT>1SXDajnaJY5=yH(4OYIXu+q`F$aW&>W<Wci- zkZedqNs9CyR{A{s8_lj-X}k5|nR(bHKc5e!X8Y~n+4AMBf=XVsi~md>^9X+e&+?af zA;u%EoPpx9mfYOHAKnO^`a>&p6IcGe$(xl|cyR1&BahhA#z!{n?eh$VPM<H-w%aPX z=<Ydh?fA2n2yvzn^^<W<^@}A5a=BVxd<`ovx@z6bfF(X?gTm}vT(vCPY`eIsu*5T- z5B8dc*<OlpDMcE~&R@8DbYzWsEjrnUW()_+Yhs+(uibemqLN41Y`N?MPFXV-(Z{y> zDtVn-eBZ~}qxoeXJird*F@9+GKHYt}L$V~un8QO&L0XbH<vJElZ+Qizx8?3N$z$)D z`)b3SZndN?K~f94ktXM!k7w~cM6tieqqyaN&~x;Dc)lkcNp>KL$2lqEYhE5@frF<Y zL3jy>`ck|+qZG;iIK6*EZhG%Ac)eu^F{Bo0X;uy)VQMK-d+&EPApg3_aV9FC;?aCW zcUSot1f!62e8xHc?6_}3i)G1@y71J)4>)`Gv!5U-6($lhGxxk0i0Ixnl;G8KHd;0w z<wRGlsJ2jR*X#6Nd1MKaoC#-(LFJVtp>~7CmOM&;GD3E?tGG$Y>4qW$PwHBRPF483 zc~_OS$~{_wM5;@XInTYcc4jjrs0g`=?QyBSLJyf^J5?o1nUe3msAWd|gcz2kNc!#_ z=9<fYFxT9(LDj>}=;0|<t=h`WH|26IknU>(SW>TDJxoQ-6<j2uDY)yRc?bW7ljm<@ zsm&DU6f`4y%Vxpd%34=j_-A<NWD=UOsHN;||JV4{BAZ6Tzj#~JoO~XPivN;NY|!qn ze>+!1s(+i_dwN&<T6hNrA1rU};f<ozS_KKc#m9###D6azgO{J~!aGTW<zbt&x(_x~ zCv`qU#Y^YJER-4<Je(YioRB7M(pG2O$T>_sB1<Ef;?j+T-Y?>0oaNm;pS#Dk-UeN0 z-`_nKb|z=6Zv}oh?1Yx0W$>^p3?2wap>=TG`ukDvPVr>8jL`qX4aL829wy-;u4RXB zE!LXis|{8I<c0!Y*rk5mDA+>j8FJb8AoXzREx0L2A>Q0y-oHx|etG(!Dseq)X?QsX zQX!XkmfiZOQ1sv7I=>K-VxS0tfk6tdn}_Hk8FV}qHk1g8ghXtcgQ4b)RWSl~PWq2e z54v}m=_F7x@6ZjEZL(wA9ASd~zG5@};}x3*5fvWP+7?X<l`s(!K>2W4pME&q4-fGL z=nMe{T|j^#ASfsxB*GLC5f&DaoHbjNDI+N>D<df_EjL$9Nlu=vAT7<(VX@UU=4s8F zqok{^tEsQ1IZqP@p$G~JiU^5Fh=@pN%1O&<{+B<~tw;%8lVwoI2agwjC{!9GCnzK= zG6O1{V<IYrMx)Yc3<e$Mgt8sV5nYTSu54f{AmJ4vs1hq_xGU?p5Zmr_ixj74Sk-9d zhTXy<(lWAh<kZwPH0Nm<o0yuJFR-w8aCBO{#MxyT*W1U}&p%*QXju5_h{!c@@f$a7 zPS}#TCn-7Q_td><2eWf>59J*`l3#p+UvlzPX<7N1vvud{&tJIMaP?a2^|tmK9i4ao z?7esY!Na~s&j(+;eD(Ux+jm2szkK~RGWz|;*f<^+1=0Q<7Vv*LE-@Gvl}@M81@X8j z)XjL{VswVGfq=NJmtaV&go@!VAxXQe<ELAM*+!gUsg)agM5I-XpR0YwLn9;mKO5NY z|ErPx8rZ+b)d#!h8DhFPIXfXdtiNCX{qM7%nvs|gT7*u}C@P35MxlvO{{I&He{73A zLZUQyEnkc#hOE&Tr_Q)gX4!o;gLf9&2j1`5%}PF|v|^U_(9Wc%Gq<s4@BS9(v)%M5 zr>U{tb+7tG#R#8ZVb4>q<d@Dhx}JDyloQZjY<cJqlk%l4fwfg7{XwYy`Lo%l2Or!T zTfSd2Xdr0c_|F3ezU|zjsC8N7`|1A3o<FW^J6@pJd2u2``^=wKB9W%ere&oALDn1h zI=D_Q9nyZP7uvJ#&g}<zRa3WBmOjuJ<9>N(m+&|s;`LzL64#cEl<*vb6}%l$3TB;7 zjLplgb)Tv%ep>VGz^p5)GFk(d<p+5^`0PCSeZ*?PkJHcPe-jz1-{WC8nK5L@U9!PD zhj-2DXxYTt<eDNYi^#UWuI}3)Id*7Sh2jE{r}LDK{MLD8XSKpcDVMWeeM4Kv6!rWn zRm04-XrG!)^wTU(d$A~{I877%Cx2-}fAux3Fq=lRc3fkJyIVYePP@`J);kq-ZMeqs zv+>1CU%!5NtkPvIcISQ8Z~9ZW0`5GV@G6bWc$hK%H1U9M`pca!DyLEIcC|9+(ftCC zJa??!5+E>*HeLyv-2CADo^3tpR~BD;BR0CR{LjB4=f8hFH5jP=QNroUz&fd`?JAa^ z&+NY?#&8xaWqo`Ze{0nmp?KX5Pqu~|+EnJ5e%ZO*DC@`PJ)dSeo*dHfXmTDM%ldM# zEpf^3Da%Hrs<yAx(=EAsVwJYj$**pCmrg4NSl7&HFVA|?C^s6nxo;Z%_WR3;1M0K; zdt9s~H;oKzpGNt=b#1Vgh)?(wcK_SG_U!od9>s?nAOAjlW1`}v04Lphm*^~^Mf<mx z44VE7N-iFv9TGD+df`LQvAk(CHw@}LO|{rLx<1`Rle^L^`}R^d>su2YO37Qs(&bMH zj|5o1f4P13?E7A=-o^E~{3|<$-+x;0sM~#El&jjychOZhM1@yc<tk>&-7K>?(D~`M z)zLpq<^`>Nmv4W2(2D1qxji!Yq0QS{>$WQ-+b;BXkvQP8d+^VWv*(ZP*!E%K!n?GJ zK$F5tX3_x(M-Su}aIM?oY|=N@_J>AChkn`hbKiNjX%z6Nc6c=Bk#6o(Ma_2JfJ~p# z!zaHrJhUtu_fae}{u<cyh<jo_Wuazuo!>j(KW28%s(_^n&oz@5><d~qjV`_U^sQZ~ z5XFtZKF0TNk&g^`I+~vTF!U$;THUH@zpsAx{_Ov;)2;D=PG#M|+K=^L1h($I($%xY z<wWfBhT)k@HPVdxSL;V!k-z(>HMZfCk<RUfg=5c-MdwiVPad?c{kT#3B3EL-<h0MS zq~>K8va+9^T<E2q@nQUg|6}{Ob*Coo7#^gR1s9c$ADg<oQSR92#`cuD1;!5pv?I@{ zuRfpo*OvmJIYy6Tv;JtS8*JL=lHFEodor>{s&2QVzix}DXj-EXecOrBx%(+`H{Vv* zw?164c<11vpti?02UYd`0%~$4Zl3?<DX_H6_{X-TB~P43w=chzAL`>4``X`W<spOj zjn)QARW$SQCwC_dHkSLf$F7cx`1Gnd>1@URg3TLz*MB~>b8!3xKalO#V_X<=&Ybi0 zgIUkv80wL0PA+B9$Cm`R&i?d3scg;HCwH`+vizIJs89MfITa<}7QAx3<F8#dX${Hz zLo(k@<D?AxJ9`!^%XB$7Yte<`;(ULNeCO~@2mNKwHYyy_IOsf5ysN-U@ZQeTmVx{s zMm^tb#%ra~*_}^+yfYaMKlC)>d~fCWkzm83X|%?=U>eyz9eZ$fWF+s}#~sV>%#3(c zX*jzsm1`8UW8>Iz_TxS6mlONezUG{IuyJyGduObw)PiNLi_Y!)wsTl7vTLO2<jD%t z?5NX^T;(6F5MDQ5RmJ>;;33W}o>R<D>wx3)Q>#~YoK3mi(U7;BF>@MiSIGJywqj}O zL~Kb5+p4Nc^=w8_XZX$=p=l%Kix&M<doww|Yb?r=lUo+&er4~@Yg5Y$SErqmeKIxm z=h7^X!w;O|y}kDTXwgc1QN8GN5aV<GjTr+LlZ&4^B~PPg8tiFgXPvud=&95Pwpx7u zoKLgAmxRboBhF5juQgH$C#O;C!PfQk*z3}p9A#P5#Oyy#UiuKOzNh$|<G?ZdoUn%v zUr4K0Zdq0H_^)CoRgN*IGBu`i!^}vJ`bT@V^mHBidj6@iIcK|VWw~~%Ro9=(wf(&E zUw_e1_UKLh)ba6_O!oZIKwgI9SBY5V<+*RZRd#C9Lfr+**44keD}SN=CR;&3aipPv z8_=E{@3+ja=cD>LqrL2g2BD`$FN4u`?Y+f3i}!1lpD%pB&Us`Jo3n3A%JQuXj~VpM zSrV;p-nM1r`t0Z1P2b&WD;RXwjXJO}`lW%}o(p{$OGe+X*e^+WyvFDq^KF3c$-GTx zb*~h;9b6!C=jv<s%idc>$GL4oZC_je&_1*EXM#$vt)E`tG>Z2#4>_cOV((v&)0E0+ z=!nuiab@^P&GzWvgARYp`04X?Wk%rT@vtT4R!Pf>huiYPG#;7!CKh?HZ{D4}Fy%x3 zf+rtu<4@(b_t@NST7JLy-X-g@TMgzV$2fcMK8<<I_B*mzk;j-bQf>Fo#iRQ7YflXB zPgqB))#q(_W%KdU36%>ohYV+F|502nku!JjL)TExsQ}AdmHe;0_wQYDtX$LIRJT$4 zNbiW<OO44d=9Aj$X_`4l3txURUzTiglYa1vh-NXr_CL8U{p)%~o9;_^^zlgJreYh} z_SGjor=+RMoluX>I~t`Iz4AHjVfS*c{+<BNqr3jg`}%(%$t&p154yrrq!h9#<vm*E z@Zyi>A38R39Bf{<Z~nP69c}BkuK$!^QOK7$pmfWW*{@Z&ZStMmxT)K3@fsC#RoCU8 zd8=2izvlh7;h6(3_xZaVTz_Ww)^$0%@1J?tawn?IVlsR<bDb<(Q9Y^lrnCV?S>cpY zY>RYk9*QlPT9LH<Wa<gk)Ts8kR>CSTB3BnCW$6wY3#;_+sys%|D&KWx&GWdF^5WUz zNeAN+cp1g)l<8MtZ<o`yak`V^&d*H~=v0pl5@9+zl=5h)7QNlM<H6RssZFIWhbBXE zTla7KCM}nAC@qiaUFaa`-v7H$Pf^V}c3Q*seJ!VosqwCx%Y!$h3EWmbD!A10yV&-t zcf<xxStgY>rVdCLd+wUDt6q>w6{!)pouVlmJ-<(}W|w*|g&`)9czZu9O|DwkJ)Y^U zIpg;J!q96SRCo878;l}ZPw8Dk!%Fqnd*n)gypnh7-TO$0z2?bwNs+<k`MTF_9U?<_ zc+v9or5)2#g=lY5m~ZN7Jzvy&SG2OaO9kJW|M+q@+(D)}qDrY|mlHqBJhhY~`X#^U zjb?WYJ7w-%N8^bPIl8V6zw7EAI$W^Iq+7LffsI2)cpBH?n#zI2%&@_5k@4U5(Z`Hu z^0#`KE^$)nRvB|}k&K<?IQZPX$gv=KQlO9?E9auSMo&bQy-Tw%%*J%CxR*wu>G|%E zccOBd*Zf?+7G$*lU^oOcS_aU*e{($eIi~2|_FX6U%kDLfk=(>SqJQRtaB%Yy)47Qk zOY1iDjIv;2^5@43t<9jm+b?Ft-mAH+AY-u2`hI-ro=2bMB9>Yt1p1%#Zc%EpY`a#q ze0Pe?x&dyhgPiP>oXi_rVr|mv^j7K5A5^<{7$sIo6iQxRtLuyIj4HnM7;yET<vuX$ zgrw8AHlbam5iFg7?9&E=z29xx`p*^gHo0r`<vjeHzBy~Qcy-^We1%8K{Z(y&&5uXd zK1;kSSf<|~5FO6Wl-sx7B}!(MBEQr0`Ab*V_;=K^M^65=+Pc^zdNo^-|6u%Dh|ISB zol(|$XYwxEoo>z5&egi}p!V~&a{=?>R-Def6J{i%^X^REn2K-N{pxD@Tm3$7K21G8 zzPA6`WZ<cRHBWkL=vS`hid@uT-;O%Yb=o!(UJ>_nQq5{n)1}ER({I09KiOJyXX$~# zJHLBW^j&Dnxo#=nCOUfjqg}!0&+oo}eZRcs!Pc$YV}<^DbpA%xxixdfva;mo8*1Jy z*^n$#J+xn5^8Kdv)0-+b_DA*BBnL=s$qYQYXLm<v+(k>RBjW9`uMEp2GPI>)t5%%R zJ+yw|fk}oVU(UV>;io);DD>W0tJ~Q^RQu`aJ{$NR1OAJ!0Qy^r=3g#EEUEO{Zf2o9 z7ExbM=M~ONMSBGV=+I8~%VOD`!Z?Ny+Wd3&+?};qMITkDXc+$vK8*n%O@u6CSRql7 xtD_gGM1_UNt5{jikFomaTNEL*<nL<0CIM-nIs>A~t>MCVV*k_sOSXZM{{fd;5vc$G literal 0 HcmV?d00001 diff --git a/_samples/assets/output_xhtml.css b/_samples/assets/output_xhtml.css new file mode 100644 index 0000000..79ffb98 --- /dev/null +++ b/_samples/assets/output_xhtml.css @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + * + * Styles used by the XHTML 1.1 sample page (xhtml.html). + */ + +/** + * Basic definitions for the editing area. + */ +body +{ + font-family: Arial, Verdana, sans-serif; + font-size: 80%; + color: #000000; + background-color: #ffffff; + padding: 5px; + margin: 0px; +} + +/** + * Core styles. + */ + +.Bold +{ + font-weight: bold; +} + +.Italic +{ + font-style: italic; +} + +.Underline +{ + text-decoration: underline; +} + +.StrikeThrough +{ + text-decoration: line-through; +} + +.Subscript +{ + vertical-align: sub; + font-size: smaller; +} + +.Superscript +{ + vertical-align: super; + font-size: smaller; +} + +/** + * Font faces. + */ + +.FontComic +{ + font-family: 'Comic Sans MS'; +} + +.FontCourier +{ + font-family: 'Courier New'; +} + +.FontTimes +{ + font-family: 'Times New Roman'; +} + +/** + * Font sizes. + */ + +.FontSmaller +{ + font-size: smaller; +} + +.FontLarger +{ + font-size: larger; +} + +.FontSmall +{ + font-size: 8pt; +} + +.FontBig +{ + font-size: 14pt; +} + +.FontDouble +{ + font-size: 200%; +} + +/** + * Font colors. + */ +.FontColor1 +{ + color: #ff9900; +} + +.FontColor2 +{ + color: #0066cc; +} + +.FontColor3 +{ + color: #ff0000; +} + +.FontColor1BG +{ + background-color: #ff9900; +} + +.FontColor2BG +{ + background-color: #0066cc; +} + +.FontColor3BG +{ + background-color: #ff0000; +} + +/** + * Indentation. + */ + +.Indent1 +{ + margin-left: 40px; +} + +.Indent2 +{ + margin-left: 80px; +} + +.Indent3 +{ + margin-left: 120px; +} + +/** + * Alignment. + */ + +.JustifyLeft +{ + text-align: left; +} + +.JustifyRight +{ + text-align: right; +} + +.JustifyCenter +{ + text-align: center; +} + +.JustifyFull +{ + text-align: justify; +} + +/** + * Other. + */ + +code +{ + font-family: courier, monospace; + background-color: #eeeeee; + padding-left: 1px; + padding-right: 1px; + border: #c0c0c0 1px solid; +} + +kbd +{ + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; +} + +blockquote +{ + color: #808080; +} diff --git a/_samples/assets/parsesample.css b/_samples/assets/parsesample.css new file mode 100644 index 0000000..ce545ee --- /dev/null +++ b/_samples/assets/parsesample.css @@ -0,0 +1,70 @@ +body +{ + font-family: Arial, Verdana, sans-serif; + font-size: 12px; + color: #222; + background-color: #fff; +} + +/* preserved spaces for rtl list item bullets. (#6249)*/ +ol,ul,dl +{ + padding-right:40px; +} + +h1,h2,h3,h4 +{ + font-family: Georgia, Times, serif; +} + +h1.lightBlue +{ + color: #00A6C7; + font-size: 1.8em; + font-weight:normal; +} + +h3.green +{ + color: #739E39; + font-weight:normal; +} + +span.markYellow { background-color: yellow; } +span.markGreen { background-color: lime; } + +img.left +{ + padding: 5px; + margin-right: 5px; + float:left; + border:2px solid #DDD; +} + +img.right +{ + padding: 5px; + margin-right: 5px; + float:right; + border:2px solid #DDD; +} + +a.green +{ + color:#739E39; +} + +table.grey +{ + background-color : #F5F5F5; +} + +table.grey th +{ + background-color : #DDD; +} + +ul.square +{ + list-style-type : square; +} diff --git a/_samples/assets/swfobject.js b/_samples/assets/swfobject.js new file mode 100644 index 0000000..ef6d3b7 --- /dev/null +++ b/_samples/assets/swfobject.js @@ -0,0 +1,18 @@ +/** + * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ + * + * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + */ +/* +Copyright (c) 2007 Geoff Stearns + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +/*jsl:ignoreall*/ +if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject; diff --git a/_samples/autogrow.html b/_samples/autogrow.html new file mode 100644 index 0000000..560474f --- /dev/null +++ b/_samples/autogrow.html @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>AutoGrow Plugin — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using AutoGrow Plugin + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor instances to use the + <strong>autogrow</strong> plugin that lets the editor window expand and shrink + depending on the amount and size of content entered in the editing area. + </p> + <p> + In its default implementation the <strong>AutoGrow feature</strong> can expand the + CKEditor window infinitely in order to avoid introducing scrollbars to the editing area. + </p> + <p> + It is also possible to set a maximum height for the editor window. Once CKEditor + editing area reaches the value in pixels specified in the <code>autoGrow_maxHeight</code> + attribute, scrollbars will be added and the editor window will no longer expand. + </p> + <p> + To add a CKEditor instance using the <strong>autogrow</strong> plugin and its + <code>autoGrow_maxHeight</code> attribute, insert the following JavaScript call to your code: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>extraPlugins : 'autogrow',</strong> + autoGrow_maxHeight : 800, + // Remove the resize plugin, as it doesn't make sense to use it in conjunction with the AutoGrow plugin. + removePlugins : 'resize' + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced with CKEditor. The maximum height should + be given in pixels. + </p> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + CKEditor using the <strong>autogrow</strong> plugin with its default configuration:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor1', { + extraPlugins : 'autogrow', + removePlugins : 'resize' + }); + + //]]> + </script> + </p> + <p> + <label for="editor2"> + CKEditor using the <strong>autogrow</strong> plugin with maximum height set to 400:</label> + <textarea cols="80" id="editor2" name="editor2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor2', { + extraPlugins : 'autogrow', + autoGrow_maxHeight : 400, + removePlugins : 'resize' + }); + + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/bbcode.html b/_samples/bbcode.html new file mode 100644 index 0000000..6dafd02 --- /dev/null +++ b/_samples/bbcode.html @@ -0,0 +1,125 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>BBCode Plugin — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — BBCode Plugin + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor to output <a href="http://en.wikipedia.org/wiki/BBCode">BBCode</a> format instead of HTML. + Please note that the editor configuration was modified to reflect what is needed in a BBCode editing environment. + Smiley images, for example, were stripped to the emoticons that are commonly used in some BBCode dialects. + </p> + <p> + Please note that currently there is no standard for the BBCode markup language, so its implementation + for different platforms (message boards, blogs etc.) can vary. This means that before using CKEditor to + output BBCode you may need to adjust the implementation to your own environment. + </p> + <p> + A snippet of the configuration code can be seen below; check the source of this page for + a full definition: + </p> + <pre class="samples"> +CKEDITOR.replace( 'editor1', + { + <strong>extraPlugins : 'bbcode',</strong> + toolbar : + [ + ['Source', '-', 'Save','NewPage','-','Undo','Redo'], + ['Find','Replace','-','SelectAll','RemoveFormat'], + ['Link', 'Unlink', 'Image'], + '/', + ['FontSize', 'Bold', 'Italic','Underline'], + ['NumberedList','BulletedList','-','Blockquote'], + ['TextColor', '-', 'Smiley','SpecialChar', '-', 'Maximize'] + ], + ... <i>some other configurations omitted here</i> + }); </pre> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10">This is some [b]sample text[/b]. You are using [url=http://ckeditor.com/]CKEditor[/url].</textarea> + <script type="text/javascript"> + //<![CDATA[ + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using the "bbcode" plugin, shaping some of the + // editor configuration to fit BBCode environment. + CKEDITOR.replace( 'editor1', + { + extraPlugins : 'bbcode', + // Remove unused plugins. + removePlugins : 'bidi,button,dialogadvtab,div,filebrowser,flash,format,forms,horizontalrule,iframe,indent,justify,liststyle,pagebreak,showborders,stylescombo,table,tabletools,templates', + // Width and height are not supported in the BBCode format, so object resizing is disabled. + disableObjectResizing : true, + // Define font sizes in percent values. + fontSize_sizes : "30/30%;50/50%;100/100%;120/120%;150/150%;200/200%;300/300%", + toolbar : + [ + ['Source', '-', 'Save','NewPage','-','Undo','Redo'], + ['Find','Replace','-','SelectAll','RemoveFormat'], + ['Link', 'Unlink', 'Image', 'Smiley','SpecialChar'], + '/', + ['Bold', 'Italic','Underline'], + ['FontSize'], + ['TextColor'], + ['NumberedList','BulletedList','-','Blockquote'], + ['Maximize'] + ], + // Strip CKEditor smileys to those commonly used in BBCode. + smiley_images : + [ + 'regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','tounge_smile.gif', + 'embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angel_smile.gif','shades_smile.gif', + 'cry_smile.gif','kiss.gif' + ], + smiley_descriptions : + [ + 'smiley', 'sad', 'wink', 'laugh', 'cheeky', 'blush', 'surprise', + 'indecision', 'angel', 'cool', 'crying', 'kiss' + ] + } ); + + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/devtools.html b/_samples/devtools.html new file mode 100644 index 0000000..87a3a7f --- /dev/null +++ b/_samples/devtools.html @@ -0,0 +1,94 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Using DevTools Plugin — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using the Developer Tools Plugin + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor instances to use the + <strong>Developer Tools</strong> (<code>devtools</code>) plugin that displays + information about dialog window elements, including the name of the dialog window, + tab, and UI element. Please note that the tooltip also contains a link to the + <a href="http://docs.cksource.com/ckeditor_api/">CKEditor JavaScript API</a> + documentation for each of the selected elements. + </p> + <p> + This plugin is aimed at developers who would like to customize their CKEditor + instances and create their own plugins. By default it is turned off; it is + usually useful to only turn it on in the development phase. Note that it works with + all CKEditor dialog windows, including the ones that were created by custom plugins. + </p> + <p> + To add a CKEditor instance using the <strong>devtools</strong> plugin, insert + the following JavaScript call into your code: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>extraPlugins : 'devtools'</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced with CKEditor. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + // This call can be placed at any point after the + // <textarea>, or inside a <head><script> in a + // window.onload event handler. + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + CKEDITOR.replace( 'editor1' , + { + extraPlugins : 'devtools' + }); + + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/divreplace.html b/_samples/divreplace.html new file mode 100644 index 0000000..4568f52 --- /dev/null +++ b/_samples/divreplace.html @@ -0,0 +1,154 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Replace DIV — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <style id="styles" type="text/css"> + + div.editable + { + border: solid 2px Transparent; + padding-left: 15px; + padding-right: 15px; + } + + div.editable:hover + { + border-color: black; + } + + </style> + <script type="text/javascript"> + //<![CDATA[ + +// Uncomment the following code to test the "Timeout Loading Method". +// CKEDITOR.loadFullCoreTimeout = 5; + +window.onload = function() +{ + // Listen to the double click event. + if ( window.addEventListener ) + document.body.addEventListener( 'dblclick', onDoubleClick, false ); + else if ( window.attachEvent ) + document.body.attachEvent( 'ondblclick', onDoubleClick ); + +}; + +function onDoubleClick( ev ) +{ + // Get the element which fired the event. This is not necessarily the + // element to which the event has been attached. + var element = ev.target || ev.srcElement; + + // Find out the div that holds this element. + var name; + do + { + element = element.parentNode; + } + while ( element && ( name = element.nodeName.toLowerCase() ) && ( name != 'div' || element.className.indexOf( 'editable' ) == -1 ) && name != 'body' ) + + + if ( name == 'div' && element.className.indexOf( 'editable' ) != -1 ) + replaceDiv( element ); +} + +var editor; + +function replaceDiv( div ) +{ + if ( editor ) + editor.destroy(); + + editor = CKEDITOR.replace( div ); +} + + //]]> + </script> + +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Replace DIV with CKEditor on the Fly + </h1> + <div class="description"> + <p> + This sample shows how to automatically replace <code><div></code> elements + with a CKEditor instance on the fly, following user's doubleclick. The content + that was previously placed inside the <code><div></code> element will now + be moved into CKEditor editing area. + </p> + <p> + For details on how to create this setup check the source code of this sample page. + </p> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <p> + Double-click any of the following <code><div></code> elements to transform them into + editor instances.</p> + <div class="editable"> + <h3> + Part 1</h3> + <p> + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. + </p> + </div> + <div class="editable"> + <h3> + Part 2</h3> + <p> + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. + </p> + <p> + Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus + sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum + vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. + </p> + </div> + <div class="editable"> + <h3> + Part 3</h3> + <p> + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. + </p> + </div> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/enterkey.html b/_samples/enterkey.html new file mode 100644 index 0000000..e6e6c8f --- /dev/null +++ b/_samples/enterkey.html @@ -0,0 +1,115 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>ENTER Key Configuration — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <script type="text/javascript"> + //<![CDATA[ + +var editor; + +function changeEnter() +{ + // If we already have an editor, let's destroy it first. + if ( editor ) + editor.destroy( true ); + + // Create the editor again, with the appropriate settings. + editor = CKEDITOR.replace( 'editor1', + { + enterMode : Number( document.getElementById( 'xEnter' ).value ), + shiftEnterMode : Number( document.getElementById( 'xShiftEnter' ).value ) + }); +} + +window.onload = changeEnter; + + //]]> + </script> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — ENTER Key Configuration + </h1> + <div class="description"> + <p> + This sample shows how to configure the <em>Enter</em> and <em>Shift+Enter</em> keys + to perform actions specified in the + <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode"><code>enterMode</code></a> + and <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.shiftEnterMode"><code>shiftEnterMode</code></a> + parameters, respectively. + You can choose from the following options: + </p> + <ul class="samples"> + <li><strong><code>ENTER_P</code></strong> – new <code><p></code> paragraphs are created;</li> + <li><strong><code>ENTER_BR</code></strong> – lines are broken with <code><br></code> elements;</li> + <li><strong><code>ENTER_DIV</code></strong> – new <code><div></code> blocks are created.</li> + </ul> + <p> + The sample code below shows how to configure CKEditor to create a <code><div></code> block when <em>Enter</em> key is pressed. + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>enterMode : CKEDITOR.ENTER_DIV</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <div style="float: left; margin-right: 20px"> + When <em>Enter</em> is pressed:<br /> + <select id="xEnter" onchange="changeEnter();"> + <option selected="selected" value="1">Create a new <P> (recommended)</option> + <option value="3">Create a new <DIV></option> + <option value="2">Break the line with a <BR></option> + </select> + </div> + <div style="float: left"> + When <em>Shift+Enter</em> is pressed:<br /> + <select id="xShiftEnter" onchange="changeEnter();"> + <option value="1">Create a new <P></option> + <option value="3">Create a new <DIV></option> + <option selected="selected" value="2">Break the line with a <BR> (recommended)</option> + </select> + </div> + <br style="clear: both" /> + <form action="sample_posteddata.php" method="post"> + <p> + <br /> + <textarea cols="80" id="editor1" name="editor1" rows="10">This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</textarea> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/fullpage.html b/_samples/fullpage.html new file mode 100644 index 0000000..0b0070e --- /dev/null +++ b/_samples/fullpage.html @@ -0,0 +1,82 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Full Page Editing with Document Properties Plugin — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Full Page Editing with Document Properties Plugin + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor to edit entire HTML pages, from the + <code><html></code> tag to the <code></html></code> tag. + </p> + <p> + The <strong>Document Properties</strong> (<code>docprops</code>) plugin is also turned on. + This plugin allows you to set the metadata of the page, including the page encoding, margins, + meta tags, or background. + </p> + <p> + The CKEditor instance below is inserted with a JavaScript call using the following code: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>fullPage : true, + extraPlugins : 'docprops'</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <label for="editor1"> + CKEditor using the <code>docprops</code> plugin and working in the Full Page mode:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><html><head><title>CKEditor Sample</title></head><body><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></body></html></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor1', + { + fullPage : true, + extraPlugins : 'docprops' + }); + + //]]> + </script> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/index.html b/_samples/index.html new file mode 100644 index 0000000..dabc9af --- /dev/null +++ b/_samples/index.html @@ -0,0 +1,116 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>CKEditor Samples</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <link type="text/css" rel="stylesheet" href="sample.css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Samples Site + </h1> + <h2 class="samples"> + Basic Samples + </h2> + <ul class="samples"> + <li> + <a class="samples" href="replacebyclass.html">Replace textarea elements by class name</a><br /> + Automatic replacement of all textarea elements of a given class with a CKEditor instance. + </li> + <li><a class="samples" href="replacebycode.html">Replace textarea elements by code</a><br /> + Replacement of textarea elements with CKEditor instances by using a JavaScript call. + </li> + <li><a class="samples" href="fullpage.html">Full page support with the Document Properties plugin</a><br /> + CKEditor inserted with a JavaScript call and used to edit the whole page from <code><html></code> to <code></html></code>. + </li> + </ul> + <h2 class="samples"> + Basic Customization + </h2> + <ul class="samples"> + <li><a class="samples" href="skins.html">Skins</a><br /> + Changing the CKEditor skin by adjusting a single configuration option. + </li> + <li><a class="samples" href="ui_color.html">User Interface color</a><br /> + Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color. + </li> + <li><a class="samples" href="ui_languages.html">User Interface languages</a><br /> + Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language. + </li> + </ul> + <h2 class="samples"> + Advanced Samples + </h2> + <ul class="samples"> + <li><a class="samples" href="divreplace.html">Replace DIV elements on the fly</a><br /> + Transforming a <code>div</code> element into an instance of CKEditor with a mouse click. + </li> + <li><a class="samples" href="ajax.html">Create and destroy editor instances for Ajax applications</a><br /> + Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window. + </li> + <li><a class="samples" href="api.html">Basic usage of the API</a><br /> + Using the CKEditor JavaScript API to interact with the editor at runtime. + </li> + <li><a class="samples" href="api_dialog.html">Using the JavaScript API to customize dialog windows</a><br /> + Using the dialog windows API to customize dialog windows without changing the original editor code. + </li> + <li><a class="samples" href="enterkey.html">Using the "Enter" key in CKEditor</a><br /> + Configuring the behavior of <em>Enter</em> and <em>Shift+Enter</em> keys. + </li> + <li><a class="samples" href="sharedspaces.html">Shared toolbars</a><br /> + Displaying multiple editor instances that share the toolbar and/or the elements path. + </li> + <li><a class="samples" href="jqueryadapter.html">jQuery adapter example</a><br /> + Using the jQuery adapter to configure CKEditor. + </li> + <li><a class="samples" href="output_xhtml.html">Output XHTML</a><br /> + Configuring CKEditor to produce XHTML 1.1 compliant code. + </li> + <li><a class="samples" href="output_html.html">Output HTML</a><br /> + Configuring CKEditor to produce legacy HTML 4 code. + </li> + <li><a class="samples" href="output_for_flash.html">Output for Flash</a><br /> + Configuring CKEditor to produce HTML code that can be used with Adobe Flash. + </li> + <li><a class="samples" href="readonly.html">Read-only mode</a><br /> + Using the readOnly API to block introducing changes to the editor contents. + </li> + </ul> + <h2 class="samples"> + Additional plugins + </h2> + <ul class="samples"> + <li><a class="samples" href="autogrow.html">AutoGrow plugin</a><br /> + Using the AutoGrow plugin in order to make the editor grow to fit the size of its content. + </li> + <li><a class="samples" href="bbcode.html">Output for BBCode</a><br /> + Configuring CKEditor to produce BBCode tags instead of HTML. + </li> + <li><a class="samples" href="stylesheetparser.html">Stylesheet Parser plugin</a><br /> + Using the Stylesheet Parser plugin to fill the Styles drop-down list based on the CSS classes available in the document stylesheet. + </li> + <li><a class="samples" href="devtools.html">Developer Tools plugin</a><br /> + Using the Developer Tools plugin to display information about dialog window UI elements to allow for easier customization. + </li> + <li><a class="samples" href="placeholder.html">Placeholder plugin</a><br /> + Using the Placeholder plugin to create uneditable sections that can only be created and modified with a proper dialog window. + </li> + <li><a class="samples" href="tableresize.html">TableResize plugin</a><br /> + Using the TableResize plugin to enable table column resizing. + </li> + </ul> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/jqueryadapter.html b/_samples/jqueryadapter.html new file mode 100644 index 0000000..2772878 --- /dev/null +++ b/_samples/jqueryadapter.html @@ -0,0 +1,99 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>jQuery Adapter — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> + <script type="text/javascript" src="../ckeditor.js"></script> + <script type="text/javascript" src="../adapters/jquery.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <script type="text/javascript"> + //<![CDATA[ + +$(function() +{ + var config = { + toolbar: + [ + ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink'], + ['UIColor'] + ] + }; + + // Initialize the editor. + // Callback function can be passed and executed after full instance creation. + $('.jquery_ckeditor').ckeditor(config); +}); + + //]]> + </script> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using jQuery Adapter + </h1> + <div class="description"> + <p> + This sample shows how to load CKEditor and configure it using the + <a class="samples" href="http://docs.cksource.com/CKEditor_3.x/Developers_Guide/jQuery_Adapter">jQuery adapter</a>. + In this case the jQuery adapter is responsible for transforming a <code><textarea></code> + element into a CKEditor instance and setting the configuration of the toolbar. + </p> + <p> + CKEditor instance with custom configuration set in jQuery can be inserted with the + following JavaScript code: + </p> + <pre class="samples">$(function() +{ + var config = { + skin:'v2' + }; + + $('.<em>textarea_class</em>').ckeditor(config); +});</pre> + <p> + Note that <code><em>textarea_class</em></code> in the code above is the + <code>class</code> attribute of the <code><textarea></code> element to be replaced with + CKEditor. Any other jQuery selector can be used to match the target element. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <!-- This <fieldset> holds the HTML that you will usually find in your + pages. --> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea class="jquery_ckeditor" cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/output_for_flash.html b/_samples/output_for_flash.html new file mode 100644 index 0000000..5dc63a4 --- /dev/null +++ b/_samples/output_for_flash.html @@ -0,0 +1,275 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Output for Flash — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <script type="text/javascript" src="assets/swfobject.js"></script> + <script type="text/javascript"> +function sendToFlash() +{ + var html = CKEDITOR.instances.editor1.getData() ; + var flash = document.getElementById( 'ckFlash' ) ; + flash.setData( html ) ; +} + +function init() +{ + var so = new SWFObject("assets/output_for_flash.swf", "ckFlash", "550", "400", "8", "#ffffff") ; + so.addParam("wmode", "transparent"); + so.write("ckFlashContainer") ; +} + </script> + </head> +<body onload="init()"> + <h1 class="samples"> + CKEditor Sample — Producing Flash Compliant HTML Output + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor to output + HTML code that can be used with + <a class="samples" href="http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000922.html"> + Adobe Flash</a>. + The code will contain a subset of standard HTML elements like <code><b></code>, + <code><i></code>, and <code><p></code> as well as HTML attributes. + </p> + <p> + To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard + JavaScript call, and define CKEditor features to use HTML elements and attributes. + </p> + <p> + For details on how to create this setup check the source code of this sample page. + </p> + </div> + <p> + To see how it works, create some content in the editing area of CKEditor on the left + and send it to the Flash object on the right side of the page by using the + <strong>Send to Flash</strong> button. + </p> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <hr /> + <table width="100%" cellpadding="0" cellspacing="0"> + <tr> + <td style="width: 100%"> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <b>sample text</b>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + if ( document.location.protocol == 'file:' ) + alert( 'Warning: This samples does not work when loaded from local filesystem due to security restrictions implemented in Flash.' + + '\n\nPlease load the sample from a web server instead.') ; + + CKEDITOR.replace( 'editor1', + { + height : 300, + width : '100%', + toolbar : [ + ['Source','-','Bold','Italic','Underline','-','BulletedList','-','Link','Unlink'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], + '/', + ['Font','FontSize'], + ['TextColor','-','About'] + ], + + /* + * Style sheet for the contents + */ + contentsCss : 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}', + + /* + * Quirks doctype + */ + docType : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', + + /* + * Core styles. + */ + coreStyles_bold : { element : 'b' }, + coreStyles_italic : { element : 'i' }, + coreStyles_underline : { element : 'u'}, + + /* + * Font face + */ + // Define the way font elements will be applied to the document. The "font" + // element will be used. + font_style : + { + element : 'font', + attributes : { 'face' : '#(family)' } + }, + + /* + * Font sizes. + * The CSS part of the font sizes isn't used by Flash, it is there to get the + * font rendered correctly in CKEditor. + */ + fontSize_sizes : '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72', + fontSize_style : + { + element : 'font', + attributes : { 'size' : '#(size)' }, + styles : { 'font-size' : '#(size)px' } + } , + + /* + * Font colors. + */ + colorButton_enableMore : true, + + colorButton_foreStyle : + { + element : 'font', + attributes : { 'color' : '#(color)' } + }, + + colorButton_backStyle : + { + element : 'font', + styles : { 'background-color' : '#(color)' } + }, + + + on : { 'instanceReady' : configureFlashOutput } + }); + +/* + * Adjust the behavior of the dataProcessor to match the + * requirements of Flash + */ +function configureFlashOutput( ev ) +{ + var editor = ev.editor, + dataProcessor = editor.dataProcessor, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + // Out self closing tags the HTML4 way, like <br>. + dataProcessor.writer.selfClosingEnd = '>'; + + // Make output formatting match Flash expectations + var dtd = CKEDITOR.dtd; + for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) + { + dataProcessor.writer.setRules( e, + { + indent : false, + breakBeforeOpen : false, + breakAfterOpen : false, + breakBeforeClose : false, + breakAfterClose : false + }); + } + dataProcessor.writer.setRules( 'br', + { + indent : false, + breakBeforeOpen : false, + breakAfterOpen : false, + breakBeforeClose : false, + breakAfterClose : false + }); + + // Output properties as attributes, not styles. + htmlFilter.addRules( + { + elements : + { + $ : function( element ) + { + var style, match, width, height, align; + + // Output dimensions of images as width and height + if ( element.name == 'img' ) + { + style = element.attributes.style; + + if ( style ) + { + // Get the width from the style. + match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec( style ); + width = match && match[1]; + + // Get the height from the style. + match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec( style ); + height = match && match[1]; + + if ( width ) + { + element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' ); + element.attributes.width = width; + } + + if ( height ) + { + element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' ); + element.attributes.height = height; + } + } + } + + // Output alignment of paragraphs using align + if ( element.name == 'p' ) + { + style = element.attributes.style; + + if ( style ) + { + // Get the align from the style. + match = /(?:^|\s)text-align\s*:\s*(\w*);?/i.exec( style ); + align = match && match[1]; + + if ( align ) + { + element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' ); + element.attributes.align = align; + } + } + } + + if ( element.attributes.style === '' ) + delete element.attributes.style; + + return element; + } + } + + } ); +} + + //]]> + </script> + <input type="button" value="Send to Flash" onclick="sendToFlash();" /> + </td> + <td valign="top" style="padding-left: 15px" id="ckFlashContainer"> + </td> + </tr> + </table> + + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/output_html.html b/_samples/output_html.html new file mode 100644 index 0000000..ad63716 --- /dev/null +++ b/_samples/output_html.html @@ -0,0 +1,285 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>HTML Compliant Output — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Producing HTML Compliant Output + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor to output valid + <a class="samples" href="http://www.w3.org/TR/html401/">HTML 4.01</a> code. + Traditional HTML elements like <code><b></code>, + <code><i></code>, and <code><font></code> are used in place of + <code><strong></code>, <code><em></code>, and CSS styles. + </p> + <p> + To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard + JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. + </p> + <p> + A snippet of the configuration code can be seen below; check the source of this page for + full definition: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + coreStyles_bold : { element : 'b' }, + coreStyles_italic : { element : 'i' }, + + fontSize_style : + { + element : 'font', + attributes : { 'size' : '#(size)' } + } + + // More definitions follow. + });</pre> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <b>sample text</b>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor1', + { + /* + * Style sheet for the contents + */ + contentsCss : 'body {color:#000; background-color#:FFF;}', + + /* + * Simple HTML5 doctype + */ + docType : '<!DOCTYPE HTML>', + + /* + * Core styles. + */ + coreStyles_bold : { element : 'b' }, + coreStyles_italic : { element : 'i' }, + coreStyles_underline : { element : 'u'}, + coreStyles_strike : { element : 'strike' }, + + /* + * Font face + */ + // Define the way font elements will be applied to the document. The "font" + // element will be used. + font_style : + { + element : 'font', + attributes : { 'face' : '#(family)' } + }, + + /* + * Font sizes. + */ + fontSize_sizes : 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7', + fontSize_style : + { + element : 'font', + attributes : { 'size' : '#(size)' } + } , + + /* + * Font colors. + */ + colorButton_enableMore : true, + + colorButton_foreStyle : + { + element : 'font', + attributes : { 'color' : '#(color)' } + }, + + colorButton_backStyle : + { + element : 'font', + styles : { 'background-color' : '#(color)' } + }, + + /* + * Styles combo. + */ + stylesSet : + [ + { name : 'Computer Code', element : 'code' }, + { name : 'Keyboard Phrase', element : 'kbd' }, + { name : 'Sample Text', element : 'samp' }, + { name : 'Variable', element : 'var' }, + + { name : 'Deleted Text', element : 'del' }, + { name : 'Inserted Text', element : 'ins' }, + + { name : 'Cited Work', element : 'cite' }, + { name : 'Inline Quotation', element : 'q' } + ], + + on : { 'instanceReady' : configureHtmlOutput } + }); + +/* + * Adjust the behavior of the dataProcessor to avoid styles + * and make it look like FCKeditor HTML output. + */ +function configureHtmlOutput( ev ) +{ + var editor = ev.editor, + dataProcessor = editor.dataProcessor, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + // Out self closing tags the HTML4 way, like <br>. + dataProcessor.writer.selfClosingEnd = '>'; + + // Make output formatting behave similar to FCKeditor + var dtd = CKEDITOR.dtd; + for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) + { + dataProcessor.writer.setRules( e, + { + indent : true, + breakBeforeOpen : true, + breakAfterOpen : false, + breakBeforeClose : !dtd[ e ][ '#' ], + breakAfterClose : true + }); + } + + // Output properties as attributes, not styles. + htmlFilter.addRules( + { + elements : + { + $ : function( element ) + { + // Output dimensions of images as width and height + if ( element.name == 'img' ) + { + var style = element.attributes.style; + + if ( style ) + { + // Get the width from the style. + var match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec( style ), + width = match && match[1]; + + // Get the height from the style. + match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec( style ); + var height = match && match[1]; + + if ( width ) + { + element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' ); + element.attributes.width = width; + } + + if ( height ) + { + element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' ); + element.attributes.height = height; + } + } + } + + // Output alignment of paragraphs using align + if ( element.name == 'p' ) + { + style = element.attributes.style; + + if ( style ) + { + // Get the align from the style. + match = /(?:^|\s)text-align\s*:\s*(\w*);/i.exec( style ); + var align = match && match[1]; + + if ( align ) + { + element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' ); + element.attributes.align = align; + } + } + } + + if ( !element.attributes.style ) + delete element.attributes.style; + + return element; + } + }, + + attributes : + { + style : function( value, element ) + { + // Return #RGB for background and border colors + return convertRGBToHex( value ); + } + } + } ); +} + + +/** +* Convert a CSS rgb(R, G, B) color back to #RRGGBB format. +* @param Css style string (can include more than one color +* @return Converted css style. +*/ +function convertRGBToHex( cssStyle ) +{ + return cssStyle.replace( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, function( match, red, green, blue ) + { + red = parseInt( red, 10 ).toString( 16 ); + green = parseInt( green, 10 ).toString( 16 ); + blue = parseInt( blue, 10 ).toString( 16 ); + var color = [red, green, blue] ; + + // Add padding zeros if the hex value is less than 0x10. + for ( var i = 0 ; i < color.length ; i++ ) + color[i] = String( '0' + color[i] ).slice( -2 ) ; + + return '#' + color.join( '' ) ; + }); +} + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/output_xhtml.html b/_samples/output_xhtml.html new file mode 100644 index 0000000..2fcd5b2 --- /dev/null +++ b/_samples/output_xhtml.html @@ -0,0 +1,177 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>XHTML Compliant Output — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Producing XHTML Compliant Output + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor to output valid + <a class="samples" href="http://www.w3.org/TR/xhtml11/">XHTML 1.1</a> code. + Deprecated elements (<code><font></code>, <code><u></code>) or attributes + (<code>size</code>, <code>face</code>) will be replaced with XHTML compliant code. + </p> + <p> + To add a CKEditor instance outputting valid XHTML code, load the editor using a standard + JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. + </p> + <p> + A snippet of the configuration code can be seen below; check the source of this page for + full definition: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + contentsCss : 'assets/output_xhtml.css', + + coreStyles_bold : { element : 'span', attributes : {'class': 'Bold'} }, + coreStyles_italic : { element : 'span', attributes : {'class': 'Italic'} }, + + // More definitions follow. + });</pre> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <span class="Bold">sample text</span>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor1', + { + /* + * Style sheet for the contents + */ + contentsCss : 'assets/output_xhtml.css', + + /* + * Core styles. + */ + coreStyles_bold : { element : 'span', attributes : {'class': 'Bold'} }, + coreStyles_italic : { element : 'span', attributes : {'class': 'Italic'}}, + coreStyles_underline : { element : 'span', attributes : {'class': 'Underline'}}, + coreStyles_strike : { element : 'span', attributes : {'class': 'StrikeThrough'}, overrides : 'strike' }, + + coreStyles_subscript : { element : 'span', attributes : {'class': 'Subscript'}, overrides : 'sub' }, + coreStyles_superscript : { element : 'span', attributes : {'class': 'Superscript'}, overrides : 'sup' }, + + /* + * Font face + */ + // List of fonts available in the toolbar combo. Each font definition is + // separated by a semi-colon (;). We are using class names here, so each font + // is defined by {Combo Label}/{Class Name}. + font_names : 'Comic Sans MS/FontComic;Courier New/FontCourier;Times New Roman/FontTimes', + + // Define the way font elements will be applied to the document. The "span" + // element will be used. When a font is selected, the font name defined in the + // above list is passed to this definition with the name "Font", being it + // injected in the "class" attribute. + // We must also instruct the editor to replace span elements that are used to + // set the font (Overrides). + font_style : + { + element : 'span', + attributes : { 'class' : '#(family)' } + }, + + /* + * Font sizes. + */ + fontSize_sizes : 'Smaller/FontSmaller;Larger/FontLarger;8pt/FontSmall;14pt/FontBig;Double Size/FontDouble', + fontSize_style : + { + element : 'span', + attributes : { 'class' : '#(size)' } + } , + + /* + * Font colors. + */ + colorButton_enableMore : false, + + colorButton_colors : 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00', + colorButton_foreStyle : + { + element : 'span', + attributes : { 'class' : '#(color)' } + }, + + colorButton_backStyle : + { + element : 'span', + attributes : { 'class' : '#(color)BG' } + }, + + /* + * Indentation. + */ + indentClasses : ['Indent1', 'Indent2', 'Indent3'], + + /* + * Paragraph justification. + */ + justifyClasses : [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyFull' ], + + /* + * Styles combo. + */ + stylesSet : + [ + { name : 'Strong Emphasis', element : 'strong' }, + { name : 'Emphasis', element : 'em' }, + + { name : 'Computer Code', element : 'code' }, + { name : 'Keyboard Phrase', element : 'kbd' }, + { name : 'Sample Text', element : 'samp' }, + { name : 'Variable', element : 'var' }, + + { name : 'Deleted Text', element : 'del' }, + { name : 'Inserted Text', element : 'ins' }, + + { name : 'Cited Work', element : 'cite' }, + { name : 'Inline Quotation', element : 'q' } + ] + + }); + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/php/advanced.php b/_samples/php/advanced.php new file mode 100644 index 0000000..1d62ce5 --- /dev/null +++ b/_samples/php/advanced.php @@ -0,0 +1,120 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Setting Configuration Options — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Setting Configuration Options + </h1> + <p> + This sample shows how to insert a CKEditor instance with custom configuration options. + </p> + <p> + To set configuration options, use the <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html"><code>config</code></a> property. To set the attributes of a <code><textarea></code> element (which is displayed instead of CKEditor in unsupported browsers), use the <code>textareaAttributes</code> property. + </p> + <pre class="samples"> +<?php +// Include the CKEditor class. +include_once "ckeditor/ckeditor.php"; + +// Create a class instance. +$CKEditor = new CKEditor(); + +// Path to the CKEditor directory. +$CKEditor->basePath = '/ckeditor/'; + +// Set global configuration (used by every instance of CKEditor). +$CKEditor-><strong>config['width']</strong> = 600; + +// Change default textarea attributes. +$CKEditor-><strong>textareaAttributes</strong> = array("cols" => 80, "rows" => 10); + +// The initial value to be displayed in the editor. +$initialValue = 'This is some sample text.'; + +// Create the first instance. +$CKEditor->editor("textarea_id", $initialValue); +?></pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>name</code> attribute of + the <code><textarea></code> element to be created. + </p> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="../sample_posteddata.php" method="post"> + <label>Editor 1:</label> +<?php +// Include the CKEditor class. +include("../../ckeditor.php"); + +// Create a class instance. +$CKEditor = new CKEditor(); + +// Do not print the code directly to the browser, return it instead. +$CKEditor->returnOutput = true; + +// Path to the CKEditor directory, ideally use an absolute path instead of a relative dir. +// $CKEditor->basePath = '/ckeditor/' +// If not set, CKEditor will try to detect the correct path. +$CKEditor->basePath = '../../'; + +// Set global configuration (will be used by all instances of CKEditor). +$CKEditor->config['width'] = 600; + +// Change default textarea attributes. +$CKEditor->textareaAttributes = array("cols" => 80, "rows" => 10); + +// The initial value to be displayed in the editor. +$initialValue = '<p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p>'; + +// Create the first instance. +$code = $CKEditor->editor("editor1", $initialValue); + +echo $code; +?> + <br /> + <label>Editor 2:</label> +<?php +// Configuration that will only be used by the second editor. +$config['toolbar'] = array( + array( 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike' ), + array( 'Image', 'Link', 'Unlink', 'Anchor' ) +); + +$config['skin'] = 'v2'; + +// Create the second instance. +echo $CKEditor->editor("editor2", $initialValue, $config); +?> + <p> + <input type="submit" value="Submit"/> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/php/events.php b/_samples/php/events.php new file mode 100644 index 0000000..a625192 --- /dev/null +++ b/_samples/php/events.php @@ -0,0 +1,153 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Adding Event Handlers — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Adding Event Handlers + </h1> + <div class="description"> + <p> + This sample shows how to add event handlers to CKEditor with PHP. + </p> + <p> + A snippet of the configuration code can be seen below; check the source code of this page for + the full definition: + </p> + <pre class="samples"><?php +// Include the CKEditor class. +include("ckeditor/ckeditor.php"); + +// Create a class instance. +$CKEditor = new CKEditor(); + +// Path to the CKEditor directory. +$CKEditor->basePath = '/ckeditor/'; + +// The initial value to be displayed in the editor. +$initialValue = 'This is some sample text.'; + +// Add event handler, <em>instanceReady</em> is fired when editor is loaded. +$CKEditor-><strong>addEventHandler</strong>('instanceReady', 'function (evt) { + alert("Loaded editor: " + evt.editor.name); +}'); + +// Create an editor instance. +$CKEditor->editor("editor1", $initialValue); +</pre> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="../sample_posteddata.php" method="post"> + <label>Editor 1:</label> +<?php + +/** + * Adds a global event, will hide the "Target" tab in the "Link" dialog window in all instances. + */ +function CKEditorHideLinkTargetTab(&$CKEditor) { + + $function = 'function (ev) { + // Take the dialog window name and its definition from the event data. + var dialogName = ev.data.name; + var dialogDefinition = ev.data.definition; + + // Check if the definition comes from the "Link" dialog window. + if ( dialogName == "link" ) + dialogDefinition.removeContents("target") + }'; + + $CKEditor->addGlobalEventHandler('dialogDefinition', $function); +} + +/** + * Adds a global event, will notify about an open dialog window. + */ +function CKEditorNotifyAboutOpenedDialog(&$CKEditor) { + $function = 'function (evt) { + alert("Loading a dialog window: " + evt.data.name); + }'; + + $CKEditor->addGlobalEventHandler('dialogDefinition', $function); +} + +// Include the CKEditor class. +include("../../ckeditor.php"); + +// Create a class instance. +$CKEditor = new CKEditor(); + +// Set a configuration option for all editors. +$CKEditor->config['width'] = 750; + +// Path to the CKEditor directory, ideally use an absolute path instead of a relative dir. +// $CKEditor->basePath = '/ckeditor/' +// If not set, CKEditor will try to detect the correct path. +$CKEditor->basePath = '../../'; + +// The initial value to be displayed in the editor. +$initialValue = '<p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p>'; + +// Event that will be handled only by the first editor. +$CKEditor->addEventHandler('instanceReady', 'function (evt) { + alert("Loaded editor: " + evt.editor.name); +}'); + +// Create the first instance. +$CKEditor->editor("editor1", $initialValue); + +// Clear event handlers. Instances that will be created later will not have +// the 'instanceReady' listener defined a couple of lines above. +$CKEditor->clearEventHandlers(); +?> + <br /> + <label>Editor 2:</label> +<?php +// Configuration that will only be used by the second editor. +$config['width'] = '600'; +$config['toolbar'] = 'Basic'; + +// Add some global event handlers (for all editors). +CKEditorHideLinkTargetTab($CKEditor); +CKEditorNotifyAboutOpenedDialog($CKEditor); + +// Event that will only be handled by the second editor. +// Instead of calling addEventHandler(), events may be passed as an argument. +$events['instanceReady'] = 'function (evt) { + alert("Loaded second editor: " + evt.editor.name); +}'; + +// Create the second instance. +$CKEditor->editor("editor2", $initialValue, $config, $events); +?> + <p> + <input type="submit" value="Submit"/> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/php/index.html b/_samples/php/index.html new file mode 100644 index 0000000..b26792d --- /dev/null +++ b/_samples/php/index.html @@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <title>CKEditor Samples — PHP Integration</title> + <link type="text/css" rel="stylesheet" href="../sample.css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Samples List for PHP + </h1> + <h2 class="samples"> + Basic Samples + </h2> + <ul class="samples"> + <li><a class="samples" href="replace.php">Replace existing textarea elements by code</a><br /> + Replacement of selected textarea elements with CKEditor instances by using a JavaScript call.</li> + <li><a class="samples" href="replaceall.php">Replace all textarea elements by code</a><br /> + Replacement of all textarea elements with CKEditor instances by using a JavaScript call.</li> + <li><a class="samples" href="standalone.php">Create CKEditor instances in PHP</a><br /> + Creating a CKEditor instance (no initial textarea element is required).</li> + </ul> + <h2 class="samples"> + Advanced Samples + </h2> + <ul class="samples"> + <li><a class="samples" href="advanced.php">Setting configuration options</a><br /> + Creating a CKEditor instance with custom configuration options.</li> + <li><a class="samples" href="events.php">Listening to events</a><br /> + Creating event handlers. + </li> + </ul> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/php/replace.php b/_samples/php/replace.php new file mode 100644 index 0000000..d22dcb7 --- /dev/null +++ b/_samples/php/replace.php @@ -0,0 +1,87 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Replace Selected Textarea Elements — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Replace Selected Textarea Elements Using PHP Code + </h1> + <div class="description"> + <p> + This sample shows how to replace a selected <code><textarea></code> element + with a CKEditor instance by using PHP code. + </p> + <p> + To replace a <code><textarea></code> element, place the following call at any point + after the <code><textarea></code> element: + </p> + <pre class="samples"> +<?php +// Include the CKEditor class. +include_once "ckeditor/ckeditor.php"; + +// Create a class instance. +$CKEditor = new CKEditor(); + +// Path to the CKEditor directory. +$CKEditor->basePath = '/ckeditor/'; + +// Replace a textarea element with an id (or name) of "textarea_id". +$CKEditor->replace("textarea_id"); +?></pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced. + </p> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="../sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <input type="submit" value="Submit"/> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> + <?php + // Include the CKEditor class. + include_once "../../ckeditor.php"; + // Create a class instance. + $CKEditor = new CKEditor(); + // Path to the CKEditor directory, ideally use an absolute path instead of a relative dir. + // $CKEditor->basePath = '/ckeditor/' + // If not set, CKEditor will try to detect the correct path. + $CKEditor->basePath = '../../'; + // Replace a textarea element with an id (or name) of "editor1". + $CKEditor->replace("editor1"); + ?> +</body> +</html> diff --git a/_samples/php/replaceall.php b/_samples/php/replaceall.php new file mode 100644 index 0000000..4415fbd --- /dev/null +++ b/_samples/php/replaceall.php @@ -0,0 +1,88 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Replace All Textarea Elements — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Replace All Textarea Elements Using PHP Code + </h1> + <div class="description"> + <p> + This sample shows how to replace all <code><textarea></code> elements + with CKEditor by using PHP code. + </p> + <p> + To replace all <code><textarea></code> elements, place the following call at any point + after the last <code><textarea></code> element: + </p> + <pre class="samples"> +<?php +// Include the CKEditor class. +include("ckeditor/ckeditor.php"); + +// Create a class instance. +$CKEditor = new CKEditor(); + +// Path to the CKEditor directory. +$CKEditor->basePath = '/ckeditor/'; + +// Replace all textarea elements with CKEditor. +$CKEditor->replaceAll(); +?></pre> + </div> + <!-- This <div> holds alert messages to be displayed in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="../sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <label for="editor2"> + Editor 2:</label> + <textarea cols="80" id="editor2" name="editor2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <input type="submit" value="Submit"/> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> + <?php + // Include the CKEditor class. + include("../../ckeditor.php"); + // Create a class instance. + $CKEditor = new CKEditor(); + // Path to the CKEditor directory, ideally use an absolute path instead of a relative dir. + // $CKEditor->basePath = '/ckeditor/' + // If not set, CKEditor will try to detect the correct path. + $CKEditor->basePath = '../../'; + // Replace all textarea elements with CKEditor. + $CKEditor->replaceAll(); + ?> +</body> +</html> diff --git a/_samples/php/standalone.php b/_samples/php/standalone.php new file mode 100644 index 0000000..cb8d2de --- /dev/null +++ b/_samples/php/standalone.php @@ -0,0 +1,83 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Creating CKEditor Instances — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type"/> + <link href="../sample.css" rel="stylesheet" type="text/css"/> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Creating CKEditor Instances + </h1> + <div class="description"> + <p> + This sample shows how to create a CKEditor instance with PHP. + </p> + <pre class="samples"> +<?php +include_once "ckeditor/ckeditor.php"; + +// Create a class instance. +$CKEditor = new CKEditor(); + +// Path to the CKEditor directory. +$CKEditor->basePath = '/ckeditor/'; + +// Create a textarea element and attach CKEditor to it. +$CKEditor->editor("textarea_id", "This is some sample text"); +?></pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> and <code>name</code> attribute of + the <code><textarea></code> element that will be created. + </p> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <!-- This <fieldset> holds the HTML code that you will usually find in your pages. --> + <form action="../sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + </p> + <p> + <?php + // Include the CKEditor class. + include_once "../../ckeditor.php"; + // The initial value to be displayed in the editor. + $initialValue = '<p>This is some <strong>sample text</strong>.</p>'; + // Create a class instance. + $CKEditor = new CKEditor(); + // Path to the CKEditor directory, ideally use an absolute path instead of a relative dir. + // $CKEditor->basePath = '/ckeditor/' + // If not set, CKEditor will try to detect the correct path. + $CKEditor->basePath = '../../'; + // Create a textarea element and attach CKEditor to it. + $CKEditor->editor("editor1", $initialValue); + ?> + <input type="submit" value="Submit"/> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/placeholder.html b/_samples/placeholder.html new file mode 100644 index 0000000..015e01b --- /dev/null +++ b/_samples/placeholder.html @@ -0,0 +1,81 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Placeholder Plugin — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using the Placeholder Plugin + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor instances to use the + <strong>Placeholder</strong> plugin that lets you insert read-only elements + into your content. To enter and modify read-only text, use the + <strong>Create Placeholder</strong> button and its matching dialog window. + </p> + <p> + To add a CKEditor instance that uses the <code>placeholder</code> plugin and a related + <strong>Create Placeholder</strong> toolbar button, insert the following JavaScript + call to your code: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>extraPlugins : 'placeholder',</strong> + toolbar : [ [ 'Source', 'Bold' ], [<strong>'CreatePlaceholder'</strong>] ] + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced with CKEditor. + </p> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + CKEditor using the <code>placeholder</code> plugin with its default configuration:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is a [[sample placeholder]]. You are using <a href="http://ckeditor.com/">CKEditor</a>. </p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor1', { + extraPlugins : 'placeholder', + toolbar : [ [ 'Source', 'CreatePlaceholder' ] ] + }); + + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/readonly.html b/_samples/readonly.html new file mode 100644 index 0000000..8b6c3a8 --- /dev/null +++ b/_samples/readonly.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Read-only State — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <script type="text/javascript"> + //<![CDATA[ + +var editor; + +// The instanceReady event is fired, when an instance of CKEditor has finished +// its initialization. +CKEDITOR.on( 'instanceReady', function( ev ) + { + editor = ev.editor; + + // Show this "on" button. + document.getElementById( 'readOnlyOn' ).style.display = ''; + + // Event fired when the readOnly property changes. + editor.on( 'readOnly', function() + { + document.getElementById( 'readOnlyOn' ).style.display = this.readOnly ? 'none' : ''; + document.getElementById( 'readOnlyOff' ).style.display = this.readOnly ? '' : 'none'; + }); + }); + +function toggleReadOnly( isReadOnly ) +{ + // Change the read-only state of the editor. + // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setReadOnly + editor.setReadOnly( isReadOnly ); +} + + //]]> + </script> + +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using the CKEditor Read-Only API + </h1> + <div class="description"> + <p> + This sample shows how to use the + <code><a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setReadOnly">setReadOnly</a></code> + API to put editor into the read-only state that makes it impossible for users to change the editor contents. + </p> + <p> + For details on how to create this setup check the source code of this sample page. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <textarea class="ckeditor" id="editor1" name="editor1" cols="100" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <input id="readOnlyOn" onclick="toggleReadOnly();" type="button" value="Make it read-only" style="display:none" /> + <input id="readOnlyOff" onclick="toggleReadOnly( false );" type="button" value="Make it editable again" style="display:none" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/replacebyclass.html b/_samples/replacebyclass.html new file mode 100644 index 0000000..117640f --- /dev/null +++ b/_samples/replacebyclass.html @@ -0,0 +1,64 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Replace Textareas by Class Name — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Replace Textarea Elements by Class Name + </h1> + <div class="description"> + <p> + This sample shows how to automatically replace all <code><textarea></code> elements + of a given class with a CKEditor instance. + </p> + <p> + To replace a <code><textarea></code> element, simply assign it the <code>ckeditor</code> + class, as in the code below: + </p> + <pre class="samples"><textarea <strong>class="ckeditor</strong>" name="editor1"></textarea></pre> + <p> + Note that other <code><textarea></code> attributes (like <code>id</code> or <code>name</code>) need to be adjusted to your document. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/replacebycode.html b/_samples/replacebycode.html new file mode 100644 index 0000000..beb779e --- /dev/null +++ b/_samples/replacebycode.html @@ -0,0 +1,97 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Replace Textarea by Code — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Replace Textarea Elements Using JavaScript Code + </h1> + <div class="description"> + <p> + This sample shows how to automatically replace all <code><textarea></code> elements + with a CKEditor instance by using a JavaScript call. + </p> + <p> + To replace a <code><textarea></code> element, place the following call at any point + after the <code><textarea></code> element or inside a <code><script></code> element located + in the <code><head></code> section of the page, in a <code>window.onload</code> event handler: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>' );</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + Editor 1:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + // This call can be placed at any point after the + // <textarea>, or inside a <head><script> in a + // window.onload event handler. + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + CKEDITOR.replace( 'editor1' ); + + //]]> + </script> + </p> + <p> + <label for="editor2"> + Editor 2:</label> + <textarea cols="80" id="editor2" name="editor2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + // This call can be placed at any point after the + // <textarea>, or inside a <head><script> in a + // window.onload event handler. + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + CKEDITOR.replace( 'editor2' ); + + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/sample.css b/_samples/sample.css new file mode 100644 index 0000000..a9a57ee --- /dev/null +++ b/_samples/sample.css @@ -0,0 +1,163 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre { + line-height: 1.5em; +} + +body { + padding:10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th { + font-size: 100%; +} + +pre, +code, +kbd, +samp, +tt{ + font-family: monospace,monospace; + font-size: 1em; +} + +h1.samples { + color:#0782C1; + font-size:200%; + font-weight:normal; + margin: 0; + padding: 0; +} + +h2.samples { + color:#000000; + font-size:130%; + margin: 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples { + margin-bottom:15px; +} + +ul.samples { + margin-bottom:15px; +} + +.clear { + clear:both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea { + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body { + font-size: 75%; +} + +a.samples { + color:#189DE1; + text-decoration:none; +} + +a.samples:hover { + text-decoration:underline; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; +} + +#alerts +{ + color: Red; +} + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; + white-space: pre; /* CSS2 */ + white-space: -moz-pre-wrap; /* Mozilla*/ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS 2.1 */ + white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */ + word-wrap: break-word; /* IE */ +} + +.description { + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 10px 10px 0; +} + +label { + display: block; + margin-bottom:6px; +} + +.cke_dialog label +{ + display: inline; + margin-bottom: auto; +} diff --git a/_samples/sample.js b/_samples/sample.js new file mode 100644 index 0000000..9e0b411 --- /dev/null +++ b/_samples/sample.js @@ -0,0 +1,65 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +// This file is not required by CKEditor and may be safely ignored. +// It is just a helper file that displays a red message about browser compatibility +// at the top of the samples (if incompatible browser is detected). + +if ( window.CKEDITOR ) +{ + (function() + { + var showCompatibilityMsg = function() + { + var env = CKEDITOR.env; + + var html = '<p><strong>Your browser is not compatible with CKEditor.</strong>'; + + var browsers = + { + gecko : 'Firefox 2.0', + ie : 'Internet Explorer 6.0', + opera : 'Opera 9.5', + webkit : 'Safari 3.0' + }; + + var alsoBrowsers = ''; + + for ( var key in env ) + { + if ( browsers[ key ] ) + { + if ( env[key] ) + html += ' CKEditor is compatible with ' + browsers[ key ] + ' or higher.'; + else + alsoBrowsers += browsers[ key ] + '+, '; + } + } + + alsoBrowsers = alsoBrowsers.replace( /\+,([^,]+), $/, '+ and $1' ); + + html += ' It is also compatible with ' + alsoBrowsers + '.'; + + html += '</p><p>With non compatible browsers, you should still be able to see and edit the contents (HTML) in a plain text field.</p>'; + + var alertsEl = document.getElementById( 'alerts' ); + alertsEl && ( alertsEl.innerHTML = html ); + }; + + var onload = function() + { + // Show a friendly compatibility message as soon as the page is loaded, + // for those browsers that are not compatible with CKEditor. + if ( !CKEDITOR.env.isCompatible ) + showCompatibilityMsg(); + }; + + // Register the onload listener. + if ( window.addEventListener ) + window.addEventListener( 'load', onload, false ); + else if ( window.attachEvent ) + window.attachEvent( 'onload', onload ); + })(); +} diff --git a/_samples/sample_posteddata.php b/_samples/sample_posteddata.php new file mode 100644 index 0000000..71cdd84 --- /dev/null +++ b/_samples/sample_posteddata.php @@ -0,0 +1,21 @@ +<?php /* + + +------------------------------------------------------------------------------------------- + CKEditor - Posted Data + + We are sorry, but your Web server does not support the PHP language used in this script. + + Please note that CKEditor can be used with any other server-side language than just PHP. + To save the content created with CKEditor you need to read the POST data on the server + side and write it to a file or a database. + + + Copyright 2003-2011, CKSource - Frederico Knabben. + All rights reserved. +------------------------------------------------------------------------------------------- + + + + +*/ include "assets/_posteddata.php"; ?> diff --git a/_samples/sharedspaces.html b/_samples/sharedspaces.html new file mode 100644 index 0000000..624b5fc --- /dev/null +++ b/_samples/sharedspaces.html @@ -0,0 +1,153 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Shared Toolbars — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> + <style id="styles" type="text/css"> + + #editorsForm + { + height: 400px; + overflow: auto; + border: solid 1px #555; + margin: 10px 0; + padding: 0 10px; + } + + </style> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Shared Toolbars + </h1> + <div class="description"> + <p> + This sample shows how to configure multiple CKEditor instances to share some parts of the interface. + You can choose to share the toolbar (<code>topSpace</code>), the elements path + (<code>bottomSpace</code>), or both. + </p> + <p> + CKEditor instances with shared spaces can be inserted with a JavaScript call using the following code: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>sharedSpaces : + { + top : 'topSpace', + bottom : 'bottomSpace' + }</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced with CKEditor. + </p> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <div id="topSpace"> + </div> + <form action="sample_posteddata.php" id="editorsForm" method="post"> + <p> + <label for="editor1"> + Editor 1 (uses the shared toolbar and elements path):</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <label for="editor2"> + Editor 2 (uses the shared toolbar and elements path):</label> + <textarea cols="80" id="editor2" name="editor2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <label for="editor3"> + Editor 3 (uses the shared toolbar only):</label> + <textarea cols="80" id="editor3" name="editor3" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <label for="editor4"> + Editor 4 (no shared spaces):</label> + <textarea cols="80" id="editor4" name="editor4" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="bottomSpace"> + </div> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> + <script type="text/javascript"> + //<![CDATA[ + + // Create all editor instances at the end of the page, so we are sure + // that the "bottomSpace" div is available in the DOM (IE issue). + + CKEDITOR.replace( 'editor1', + { + sharedSpaces : + { + top : 'topSpace', + bottom : 'bottomSpace' + }, + + // Removes the maximize plugin as it's not usable + // in a shared toolbar. + // Removes the resizer as it's not usable in a + // shared elements path. + removePlugins : 'maximize,resize' + } ); + + CKEDITOR.replace( 'editor2', + { + sharedSpaces : + { + top : 'topSpace', + bottom : 'bottomSpace' + }, + + // Removes the maximize plugin as it's not usable + // in a shared toolbar. + // Removes the resizer as it's not usable in a + // shared elements path. + removePlugins : 'maximize,resize' + } ); + + CKEDITOR.replace( 'editor3', + { + sharedSpaces : + { + top : 'topSpace' + }, + + // Removes the maximize plugin as it's not usable + // in a shared toolbar. + removePlugins : 'maximize' + } ); + + CKEDITOR.replace( 'editor4' ); + //]]> + </script> +</body> +</html> diff --git a/_samples/skins.html b/_samples/skins.html new file mode 100644 index 0000000..a9d7b6e --- /dev/null +++ b/_samples/skins.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Skins — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Skins + </h1> + <div class="description"> + <p> + This sample shows how to automatically replace <code><textarea></code> elements + with a CKEditor instance using a specific <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.skin">skin</a>. + </p> + <p> + CKEditor with a specified skin (in this case, the "Office 2003" skin) is inserted with a JavaScript call using the following code: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>skin : 'office2003'</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <h2 class="samples">"Kama" skin</h2> + <p>The default skin used in CKEditor. No additional configuration is required.</p> + <p> + <textarea cols="80" id="editor_kama" name="editor_kama" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor_kama', + { + skin : 'kama' + }); + + //]]> + </script> + </p> + <h2 class="samples">"Office 2003" skin</h2> + <p>Use the following code to configure a CKEditor instance to use the "Office 2003" skin.</p> +<pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>skin : 'office2003'</strong> + });</pre> + <p> + <textarea cols="80" id="editor_office2003" name="editor_office2003" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor_office2003', + { + skin : 'office2003' + }); + + //]]> + </script> + </p> + <h2 class="samples">"V2" skin</h2> + <p>Use the following code to configure a CKEditor instance to use the "V2" skin.</p> +<pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>skin : 'v2'</strong> + });</pre> + <textarea cols="80" id="editor_v2" name="editor_v2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + CKEDITOR.replace( 'editor_v2', + { + skin : 'v2' + }); + + //]]> + </script> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/stylesheetparser.html b/_samples/stylesheetparser.html new file mode 100644 index 0000000..a938802 --- /dev/null +++ b/_samples/stylesheetparser.html @@ -0,0 +1,93 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Using Stylesheet Parser Plugin — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using the Stylesheet Parser Plugin + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor instances to use the + <strong>Stylesheet Parser</strong> (<code>stylesheetparser</code>) plugin that fills + the <strong>Styles</strong> drop-down list based on the CSS rules available in the document stylesheet. + </p> + <p> + To add a CKEditor instance using the <code>stylesheetparser</code> plugin, insert + the following JavaScript call into your code: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>extraPlugins : 'stylesheetparser'</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced with CKEditor. + </p> + </div> + + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + CKEditor using the <code>stylesheetparser</code> plugin with its default configuration:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + // This call can be placed at any point after the + // <textarea>, or inside a <head><script> in a + // window.onload event handler. + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + CKEDITOR.replace( 'editor1' , + { + extraPlugins : 'stylesheetparser', + /* + * Stylesheet for the contents. + */ + contentsCss : 'assets/parsesample.css', + /* + * Do not load the default Styles configuration. + */ + stylesSet : [] + }); + + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/tableresize.html b/_samples/tableresize.html new file mode 100644 index 0000000..0bb3919 --- /dev/null +++ b/_samples/tableresize.html @@ -0,0 +1,115 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Using TableResize Plugin — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — Using the TableResize Plugin + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor instances to use the + <strong>TableResize</strong> (<code>tableresize</code>) plugin that allows + the user to edit table columns by using the mouse. + </p> + <p> + The TableResize plugin makes it possible to modify table column width. Hover + your mouse over the column border to see the cursor change to indicate that + the column can be resized. Click and drag your mouse to set the desired width. + </p> + <p> + By default the plugin is turned off. To add a CKEditor instance using the + TableResize plugin, insert the following JavaScript call into your code: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>extraPlugins : 'tableresize'</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced with CKEditor. + </p> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + CKEditor using the <code>tableresize</code> plugin:</label> + <textarea cols="80" id="editor1" name="editor1" rows="10"> +<table style="width: 500px;"> + <caption> + A sample table</caption> + <tbody> + <tr> + <td> + Column 1</td> + <td> + Column 2</td> + </tr> + <tr> + <td> + You can resize a table column.</td> + <td> + Hover your mouse over its border.</td> + </tr> + <tr> + <td> + Watch the cursor change.</td> + <td> + Now click and drag to resize.</td> + </tr> + </tbody> +</table> + + + </textarea> + <script type="text/javascript"> + //<![CDATA[ + + // This call can be placed at any point after the + // <textarea>, or inside a <head><script> in a + // window.onload event handler. + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + CKEDITOR.replace( 'editor1', { + extraPlugins : 'tableresize' + }); + + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/ui_color.html b/_samples/ui_color.html new file mode 100644 index 0000000..78e0104 --- /dev/null +++ b/_samples/ui_color.html @@ -0,0 +1,129 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>UI Color Picker — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — UI Color Picker + </h1> + <div class="description"> + <p> + This sample shows how to automatically replace <code><textarea></code> elements + with a CKEditor instance with an option to change the color of its user interface. + </p> + <h2 class="samples">Setting the User Interface Color</h2> + <p> + To specify the color of the user interface, set the <code>uiColor</code> property: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>uiColor: '#EE0000'</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced. + </p> + <h2 class="samples">Enabling the Color Picker</h2> + <p> + If the <strong>uicolor</strong> plugin along with the dedicated <strong>UIColor</strong> + toolbar button is added to CKEditor, the user will also be able to pick the color of the + UI from the color palette available in the <strong>UI Color Picker</strong> dialog window. + </p> + <p> + To insert a CKEditor instance with the <strong>uicolor</strong> plugin enabled, + use the following JavaScript call: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + <strong>extraPlugins : 'uicolor',</strong> + toolbar : [ [ 'Bold', 'Italic' ], [ <strong>'UIColor'</strong> ] ] + });</pre> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <p> + Click the <strong>UI Color Picker</strong> button to test your color preferences at runtime. + </p> + <p> + The first editor instance includes the <strong>UI Color Picker</strong> toolbar button, + but the default UI color is not defined, so the editor uses the skin color. + </p> + <form action="sample_posteddata.php" method="post"> + <p> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + CKEDITOR.replace( 'editor1', + { + extraPlugins : 'uicolor', + toolbar : + [ + [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ], + [ 'UIColor' ] + ] + }); + + //]]> + </script> + </p> + <p> + The second editor instance includes the <strong>UI Color Picker</strong> toolbar button. The + default UI color was defined, so the skin color is not used. + </p> + <p> + <textarea cols="80" id="editor2" name="editor2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + CKEDITOR.replace( 'editor2', + { + extraPlugins : 'uicolor', + uiColor: '#14B8C4', + toolbar : + [ + [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ], + [ 'UIColor' ] + ] + } ); + + //]]> + </script> + </p> + <p> + <input type="submit" value="Submit" /> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_samples/ui_languages.html b/_samples/ui_languages.html new file mode 100644 index 0000000..0832a9a --- /dev/null +++ b/_samples/ui_languages.html @@ -0,0 +1,134 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>User Interface Globalization — CKEditor Sample</title> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <script type="text/javascript" src="../ckeditor.js"></script> + <script type="text/javascript" src="../lang/_languages.js"></script> + <script src="sample.js" type="text/javascript"></script> + <link href="sample.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <h1 class="samples"> + CKEditor Sample — User Interface Languages + </h1> + <div class="description"> + <p> + This sample shows how to automatically replace <code><textarea></code> elements + with a CKEditor instance with an option to change the language of its user interface. + </p> + <p> + It pulls the language list from CKEditor <code>_languages.js</code> file that contains the list of supported languages and creates + a drop-down list that lets the user change the UI language. + </p> + <p> + By default, CKEditor automatically localizes the editor to the language of the user. + The UI language can be controlled with two configuration options: + <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.language"> + <code>language</code></a> and <a class="samples" href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.defaultLanguage"> + <code>defaultLanguage</code></a>. The <code>defaultLanguage</code> setting specifies the + default CKEditor language to be used when a localization suitable for user's settings is not available. + </p> + <p> + To specify the user interface language that will be used no matter what language is + specified in user's browser or operating system, set the <code>language</code> property: + </p> + <pre class="samples">CKEDITOR.replace( '<em>textarea_id</em>', + { + // Load the German interface. + <strong>language: 'de'</strong> + });</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced. + </p> + </div> + <!-- This <div> holds alert messages to be display in the sample page. --> + <div id="alerts"> + <noscript> + <p> + <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript + support, like yours, you should still see the contents (HTML data) and you should + be able to edit it normally, without a rich editor interface. + </p> + </noscript> + </div> + <form action="sample_posteddata.php" method="post"> + <p> + Available languages (<span id="count"> </span> languages!):<br /> + <script type="text/javascript"> + //<![CDATA[ + document.write( '<select disabled="disabled" id="languages" onchange="createEditor( this.value );">' ); + // Get the language list from the _languages.js file. + for ( var i = 0 ; i < window.CKEDITOR_LANGS.length ; i++ ) + { + document.write( + '<option value="' + window.CKEDITOR_LANGS[i].code + '">' + + window.CKEDITOR_LANGS[i].name + + '</option>' ); + } + document.write( '</select>' ); + //]]> + </script> + <br /> + <span style="color: #888888">(You may see strange characters if your system does not + support the selected language)</span> + </p> + <p> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> + <script type="text/javascript"> + //<![CDATA[ + + // Set the number of languages. + document.getElementById( 'count' ).innerHTML = window.CKEDITOR_LANGS.length; + + var editor; + + function createEditor( languageCode ) + { + if ( editor ) + editor.destroy(); + + // Replace the <textarea id="editor"> with an CKEditor + // instance, using default configurations. + editor = CKEDITOR.replace( 'editor1', + { + language : languageCode, + + on : + { + instanceReady : function() + { + // Wait for the editor to be ready to set + // the language combo. + var languages = document.getElementById( 'languages' ); + languages.value = this.langCode; + languages.disabled = false; + } + } + } ); + } + + // At page startup, load the default language: + createEditor( '' ); + + //]]> + </script> + </p> + </form> + <div id="footer"> + <hr /> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/_source/adapters/jquery.js b/_source/adapters/jquery.js new file mode 100644 index 0000000..1b0a994 --- /dev/null +++ b/_source/adapters/jquery.js @@ -0,0 +1,306 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview jQuery adapter provides easy use of basic CKEditor functions + * and access to internal API. It also integrates some aspects of CKEditor with + * jQuery framework. + * + * Every TEXTAREA, DIV and P elements can be converted to working editor. + * + * Plugin exposes some of editor's event to jQuery event system. All of those are namespaces inside + * ".ckeditor" namespace and can be binded/listened on supported textarea, div and p nodes. + * + * Available jQuery events: + * - instanceReady.ckeditor( editor, rootNode ) + * Triggered when new instance is ready. + * - destroy.ckeditor( editor ) + * Triggered when instance is destroyed. + * - getData.ckeditor( editor, eventData ) + * Triggered when getData event is fired inside editor. It can change returned data using eventData reference. + * - setData.ckeditor( editor ) + * Triggered when getData event is fired inside editor. + * + * @example + * <script src="jquery.js"></script> + * <script src="ckeditor.js"></script> + * <script src="adapters/jquery/adapter.js"></script> + */ + +(function() +{ + /** + * Allows CKEditor to override jQuery.fn.val(), making it possible to use the val() + * function on textareas, as usual, having it synchronized with CKEditor.<br> + * <br> + * This configuration option is global and executed during the jQuery Adapter loading. + * It can't be customized across editor instances. + * @type Boolean + * @example + * <script> + * CKEDITOR.config.jqueryOverrideVal = true; + * </script> + * <!-- Important: The JQuery adapter is loaded *after* setting jqueryOverrideVal --> + * <script src="/ckeditor/adapters/jquery.js"></script> + * @example + * // ... then later in the code ... + * + * $( 'textarea' ).ckeditor(); + * // ... + * $( 'textarea' ).val( 'New content' ); + */ + CKEDITOR.config.jqueryOverrideVal = typeof CKEDITOR.config.jqueryOverrideVal == 'undefined' + ? true : CKEDITOR.config.jqueryOverrideVal; + + var jQuery = window.jQuery; + + if ( typeof jQuery == 'undefined' ) + return; + + // jQuery object methods. + jQuery.extend( jQuery.fn, + /** @lends jQuery.fn */ + { + /** + * Return existing CKEditor instance for first matched element. + * Allows to easily use internal API. Doesn't return jQuery object. + * + * Raised exception if editor doesn't exist or isn't ready yet. + * + * @name jQuery.ckeditorGet + * @return CKEDITOR.editor + * @see CKEDITOR.editor + */ + ckeditorGet: function() + { + var instance = this.eq( 0 ).data( 'ckeditorInstance' ); + if ( !instance ) + throw "CKEditor not yet initialized, use ckeditor() with callback."; + return instance; + }, + /** + * Triggers creation of CKEditor in all matched elements (reduced to DIV, P and TEXTAREAs). + * Binds callback to instanceReady event of all instances. If editor is already created, than + * callback is fired right away. + * + * Mixed parameter order allowed. + * + * @param callback Function to be run on editor instance. Passed parameters: [ textarea ]. + * Callback is fiered in "this" scope being ckeditor instance and having source textarea as first param. + * + * @param config Configuration options for new instance(s) if not already created. + * See URL + * + * @example + * $( 'textarea' ).ckeditor( function( textarea ) { + * $( textarea ).val( this.getData() ) + * } ); + * + * @name jQuery.fn.ckeditor + * @return jQuery.fn + */ + ckeditor: function( callback, config ) + { + if ( !CKEDITOR.env.isCompatible ) + return this; + + if ( !jQuery.isFunction( callback )) + { + var tmp = config; + config = callback; + callback = tmp; + } + config = config || {}; + + this.filter( 'textarea, div, p' ).each( function() + { + var $element = jQuery( this ), + editor = $element.data( 'ckeditorInstance' ), + instanceLock = $element.data( '_ckeditorInstanceLock' ), + element = this; + + if ( editor && !instanceLock ) + { + if ( callback ) + callback.apply( editor, [ this ] ); + } + else if ( !instanceLock ) + { + // CREATE NEW INSTANCE + + // Handle config.autoUpdateElement inside this plugin if desired. + if ( config.autoUpdateElement + || ( typeof config.autoUpdateElement == 'undefined' && CKEDITOR.config.autoUpdateElement ) ) + { + config.autoUpdateElementJquery = true; + } + + // Always disable config.autoUpdateElement. + config.autoUpdateElement = false; + $element.data( '_ckeditorInstanceLock', true ); + + // Set instance reference in element's data. + editor = CKEDITOR.replace( element, config ); + $element.data( 'ckeditorInstance', editor ); + + // Register callback. + editor.on( 'instanceReady', function( event ) + { + var editor = event.editor; + setTimeout( function() + { + // Delay bit more if editor is still not ready. + if ( !editor.element ) + { + setTimeout( arguments.callee, 100 ); + return; + } + + // Remove this listener. + event.removeListener( 'instanceReady', this.callee ); + + // Forward setData on dataReady. + editor.on( 'dataReady', function() + { + $element.trigger( 'setData' + '.ckeditor', [ editor ] ); + }); + + // Forward getData. + editor.on( 'getData', function( event ) { + $element.trigger( 'getData' + '.ckeditor', [ editor, event.data ] ); + }, 999 ); + + // Forward destroy event. + editor.on( 'destroy', function() + { + $element.trigger( 'destroy.ckeditor', [ editor ] ); + }); + + // Integrate with form submit. + if ( editor.config.autoUpdateElementJquery && $element.is( 'textarea' ) && $element.parents( 'form' ).length ) + { + var onSubmit = function() + { + $element.ckeditor( function() + { + editor.updateElement(); + }); + }; + + // Bind to submit event. + $element.parents( 'form' ).submit( onSubmit ); + + // Bind to form-pre-serialize from jQuery Forms plugin. + $element.parents( 'form' ).bind( 'form-pre-serialize', onSubmit ); + + // Unbind when editor destroyed. + $element.bind( 'destroy.ckeditor', function() + { + $element.parents( 'form' ).unbind( 'submit', onSubmit ); + $element.parents( 'form' ).unbind( 'form-pre-serialize', onSubmit ); + }); + } + + // Garbage collect on destroy. + editor.on( 'destroy', function() + { + $element.data( 'ckeditorInstance', null ); + }); + + // Remove lock. + $element.data( '_ckeditorInstanceLock', null ); + + // Fire instanceReady event. + $element.trigger( 'instanceReady.ckeditor', [ editor ] ); + + // Run given (first) code. + if ( callback ) + callback.apply( editor, [ element ] ); + }, 0 ); + }, null, null, 9999); + } + else + { + // Editor is already during creation process, bind our code to the event. + CKEDITOR.on( 'instanceReady', function( event ) + { + var editor = event.editor; + setTimeout( function() + { + // Delay bit more if editor is still not ready. + if ( !editor.element ) + { + setTimeout( arguments.callee, 100 ); + return; + } + + if ( editor.element.$ == element ) + { + // Run given code. + if ( callback ) + callback.apply( editor, [ element ] ); + } + }, 0 ); + }, null, null, 9999); + } + }); + return this; + } + }); + + // New val() method for objects. + if ( CKEDITOR.config.jqueryOverrideVal ) + { + jQuery.fn.val = CKEDITOR.tools.override( jQuery.fn.val, function( oldValMethod ) + { + /** + * CKEditor-aware val() method. + * + * Acts same as original jQuery val(), but for textareas which have CKEditor instances binded to them, method + * returns editor's content. It also works for settings values. + * + * @param oldValMethod + * @name jQuery.fn.val + */ + return function( newValue, forceNative ) + { + var isSetter = typeof newValue != 'undefined', + result; + + this.each( function() + { + var $this = jQuery( this ), + editor = $this.data( 'ckeditorInstance' ); + + if ( !forceNative && $this.is( 'textarea' ) && editor ) + { + if ( isSetter ) + editor.setData( newValue ); + else + { + result = editor.getData(); + // break; + return null; + } + } + else + { + if ( isSetter ) + oldValMethod.call( $this, newValue ); + else + { + result = oldValMethod.call( $this ); + // break; + return null; + } + } + + return true; + }); + return isSetter ? this : result; + }; + }); + } +})(); diff --git a/_source/core/_bootstrap.js b/_source/core/_bootstrap.js new file mode 100644 index 0000000..1fa5f5e --- /dev/null +++ b/_source/core/_bootstrap.js @@ -0,0 +1,87 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview API initialization code. + */ + +(function() +{ + // Disable HC detaction in WebKit. (#5429) + if ( CKEDITOR.env.webkit ) + { + CKEDITOR.env.hc = false; + return; + } + + // Check whether high contrast is active by creating a colored border. + var hcDetect = CKEDITOR.dom.element.createFromHtml( + '<div style="width:0px;height:0px;position:absolute;left:-10000px;' + + 'border: 1px solid;border-color: red blue;"></div>', CKEDITOR.document ); + + hcDetect.appendTo( CKEDITOR.document.getHead() ); + + // Update CKEDITOR.env. + // Catch exception needed sometimes for FF. (#4230) + try + { + CKEDITOR.env.hc = hcDetect.getComputedStyle( 'border-top-color' ) == hcDetect.getComputedStyle( 'border-right-color' ); + } + catch (e) + { + CKEDITOR.env.hc = false; + } + + if ( CKEDITOR.env.hc ) + CKEDITOR.env.cssClass += ' cke_hc'; + + hcDetect.remove(); +})(); + +// Load core plugins. +CKEDITOR.plugins.load( CKEDITOR.config.corePlugins.split( ',' ), function() + { + CKEDITOR.status = 'loaded'; + CKEDITOR.fire( 'loaded' ); + + // Process all instances created by the "basic" implementation. + var pending = CKEDITOR._.pending; + if ( pending ) + { + delete CKEDITOR._.pending; + + for ( var i = 0 ; i < pending.length ; i++ ) + CKEDITOR.add( pending[ i ] ); + } + }); + +// Needed for IE6 to not request image (HTTP 200 or 304) for every CSS background. (#6187) +if ( CKEDITOR.env.ie ) +{ + // Remove IE mouse flickering on IE6 because of background images. + try + { + document.execCommand( 'BackgroundImageCache', false, true ); + } + catch (e) + { + // We have been reported about loading problems caused by the above + // line. For safety, let's just ignore errors. + } +} + +/** + * Indicates that CKEditor is running on a High Contrast environment. + * @name CKEDITOR.env.hc + * @example + * if ( CKEDITOR.env.hc ) + * alert( 'You're running on High Contrast mode. The editor interface will get adapted to provide you a better experience.' ); + */ + +/** + * Fired when a CKEDITOR core object is fully loaded and ready for interaction. + * @name CKEDITOR#loaded + * @event + */ diff --git a/_source/core/ckeditor.js b/_source/core/ckeditor.js new file mode 100644 index 0000000..201c195 --- /dev/null +++ b/_source/core/ckeditor.js @@ -0,0 +1,141 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Contains the third and last part of the {@link CKEDITOR} object + * definition. + */ + +// Remove the CKEDITOR.loadFullCore reference defined on ckeditor_basic. +delete CKEDITOR.loadFullCore; + +/** + * Holds references to all editor instances created. The name of the properties + * in this object correspond to instance names, and their values contains the + * {@link CKEDITOR.editor} object representing them. + * @type {Object} + * @example + * alert( <b>CKEDITOR.instances</b>.editor1.name ); // "editor1" + */ +CKEDITOR.instances = {}; + +/** + * The document of the window holding the CKEDITOR object. + * @type {CKEDITOR.dom.document} + * @example + * alert( <b>CKEDITOR.document</b>.getBody().getName() ); // "body" + */ +CKEDITOR.document = new CKEDITOR.dom.document( document ); + +/** + * Adds an editor instance to the global {@link CKEDITOR} object. This function + * is available for internal use mainly. + * @param {CKEDITOR.editor} editor The editor instance to be added. + * @example + */ +CKEDITOR.add = function( editor ) +{ + CKEDITOR.instances[ editor.name ] = editor; + + editor.on( 'focus', function() + { + if ( CKEDITOR.currentInstance != editor ) + { + CKEDITOR.currentInstance = editor; + CKEDITOR.fire( 'currentInstance' ); + } + }); + + editor.on( 'blur', function() + { + if ( CKEDITOR.currentInstance == editor ) + { + CKEDITOR.currentInstance = null; + CKEDITOR.fire( 'currentInstance' ); + } + }); +}; + +/** + * Removes an editor instance from the global {@link CKEDITOR} object. This function + * is available for internal use only. External code must use {@link CKEDITOR.editor.prototype.destroy} + * to avoid memory leaks. + * @param {CKEDITOR.editor} editor The editor instance to be removed. + * @example + */ +CKEDITOR.remove = function( editor ) +{ + delete CKEDITOR.instances[ editor.name ]; +}; + +/** + * Perform global clean up to free as much memory as possible + * when there are no instances left + */ +CKEDITOR.on( 'instanceDestroyed', function () + { + if ( CKEDITOR.tools.isEmpty( this.instances ) ) + CKEDITOR.fire( 'reset' ); + }); + +// Load the bootstrap script. +CKEDITOR.loader.load( 'core/_bootstrap' ); // @Packager.RemoveLine + +// Tri-state constants. + +/** + * Used to indicate the ON or ACTIVE state. + * @constant + * @example + */ +CKEDITOR.TRISTATE_ON = 1; + +/** + * Used to indicate the OFF or NON ACTIVE state. + * @constant + * @example + */ +CKEDITOR.TRISTATE_OFF = 2; + +/** + * Used to indicate DISABLED state. + * @constant + * @example + */ +CKEDITOR.TRISTATE_DISABLED = 0; + +/** + * The editor which is currently active (have user focus). + * @name CKEDITOR.currentInstance + * @type CKEDITOR.editor + * @see CKEDITOR#currentInstance + * @example + * function showCurrentEditorName() + * { + * if ( CKEDITOR.currentInstance ) + * alert( CKEDITOR.currentInstance.name ); + * else + * alert( 'Please focus an editor first.' ); + * } + */ + +/** + * Fired when the CKEDITOR.currentInstance object reference changes. This may + * happen when setting the focus on different editor instances in the page. + * @name CKEDITOR#currentInstance + * @event + * var editor; // Variable to hold a reference to the current editor. + * CKEDITOR.on( 'currentInstance' , function( e ) + * { + * editor = CKEDITOR.currentInstance; + * }); + */ + +/** + * Fired when the last instance has been destroyed. This event is used to perform + * global memory clean up. + * @name CKEDITOR#reset + * @event + */ diff --git a/_source/core/ckeditor_base.js b/_source/core/ckeditor_base.js new file mode 100644 index 0000000..4ad3d87 --- /dev/null +++ b/_source/core/ckeditor_base.js @@ -0,0 +1,227 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Contains the first and essential part of the {@link CKEDITOR} + * object definition. + */ + +// #### Compressed Code +// Must be updated on changes in the script as well as updated in the +// ckeditor_source.js and ckeditor_basic_source.js files. + +// if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.6.1',rev:'7072',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})(); + +// #### Raw code +// ATTENTION: read the above "Compressed Code" notes when changing this code. + +/* @Packager.RemoveLine +// Avoid having the editor code initialized twice. (#7588) +// Use CKEDITOR.dom to check whether the full ckeditor.js code has been loaded +// or just ckeditor_basic.js. +// Remove these lines when compressing manually. +if ( window.CKEDITOR && window.CKEDITOR.dom ) + return; +@Packager.RemoveLine */ + +if ( !window.CKEDITOR ) +{ + /** + * @name CKEDITOR + * @namespace This is the API entry point. The entire CKEditor code runs under this object. + * @example + */ + window.CKEDITOR = (function() + { + var CKEDITOR = + /** @lends CKEDITOR */ + { + + /** + * A constant string unique for each release of CKEditor. Its value + * is used, by default, to build the URL for all resources loaded + * by the editor code, guaranteeing clean cache results when + * upgrading. + * @type String + * @example + * alert( CKEDITOR.timestamp ); // e.g. '87dm' + */ + // The production implementation contains a fixed timestamp, unique + // for each release and generated by the releaser. + // (Base 36 value of each component of YYMMDDHH - 4 chars total - e.g. 87bm == 08071122) + timestamp : 'B5GJ5GG', + + /** + * Contains the CKEditor version number. + * @type String + * @example + * alert( CKEDITOR.version ); // e.g. 'CKEditor 3.4.1' + */ + version : '3.6.1', + + /** + * Contains the CKEditor revision number. + * The revision number is incremented automatically, following each + * modification to the CKEditor source code. + * @type String + * @example + * alert( CKEDITOR.revision ); // e.g. '3975' + */ + revision : '7072', + + /** + * Private object used to hold core stuff. It should not be used outside of + * the API code as properties defined here may change at any time + * without notice. + * @private + */ + _ : {}, + + /** + * Indicates the API loading status. The following statuses are available: + * <ul> + * <li><b>unloaded</b>: the API is not yet loaded.</li> + * <li><b>basic_loaded</b>: the basic API features are available.</li> + * <li><b>basic_ready</b>: the basic API is ready to load the full core code.</li> + * <li><b>loading</b>: the full API is being loaded.</li> + * <li><b>loaded</b>: the API can be fully used.</li> + * </ul> + * @type String + * @example + * if ( <b>CKEDITOR.status</b> == 'loaded' ) + * { + * // The API can now be fully used. + * } + */ + status : 'unloaded', + + /** + * Contains the full URL for the CKEditor installation directory. + * It is possible to manually provide the base path by setting a + * global variable named CKEDITOR_BASEPATH. This global variable + * must be set <strong>before</strong> the editor script loading. + * @type String + * @example + * alert( <b>CKEDITOR.basePath</b> ); // "http://www.example.com/ckeditor/" (e.g.) + */ + basePath : (function() + { + // ATTENTION: fixes to this code must be ported to + // var basePath in "core/loader.js". + + // Find out the editor directory path, based on its <script> tag. + var path = window.CKEDITOR_BASEPATH || ''; + + if ( !path ) + { + var scripts = document.getElementsByTagName( 'script' ); + + for ( var i = 0 ; i < scripts.length ; i++ ) + { + var match = scripts[i].src.match( /(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i ); + + if ( match ) + { + path = match[1]; + break; + } + } + } + + // In IE (only) the script.src string is the raw value entered in the + // HTML source. Other browsers return the full resolved URL instead. + if ( path.indexOf(':/') == -1 ) + { + // Absolute path. + if ( path.indexOf( '/' ) === 0 ) + path = location.href.match( /^.*?:\/\/[^\/]*/ )[0] + path; + // Relative path. + else + path = location.href.match( /^[^\?]*\/(?:)/ )[0] + path; + } + + if ( !path ) + throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.'; + + return path; + })(), + + /** + * Gets the full URL for CKEditor resources. By default, URLs + * returned by this function contain a querystring parameter ("t") + * set to the {@link CKEDITOR.timestamp} value.<br /> + * <br /> + * It is possible to provide a custom implementation of this + * function by setting a global variable named CKEDITOR_GETURL. + * This global variable must be set <strong>before</strong> the editor script + * loading. If the custom implementation returns nothing (==null), the + * default implementation is used. + * @param {String} resource The resource whose full URL we want to get. + * It may be a full, absolute, or relative URL. + * @returns {String} The full URL. + * @example + * // e.g. http://www.example.com/ckeditor/skins/default/editor.css?t=87dm + * alert( CKEDITOR.getUrl( 'skins/default/editor.css' ) ); + * @example + * // e.g. http://www.example.com/skins/default/editor.css?t=87dm + * alert( CKEDITOR.getUrl( '/skins/default/editor.css' ) ); + * @example + * // e.g. http://www.somesite.com/skins/default/editor.css?t=87dm + * alert( CKEDITOR.getUrl( 'http://www.somesite.com/skins/default/editor.css' ) ); + */ + getUrl : function( resource ) + { + // If this is not a full or absolute path. + if ( resource.indexOf(':/') == -1 && resource.indexOf( '/' ) !== 0 ) + resource = this.basePath + resource; + + // Add the timestamp, except for directories. + if ( this.timestamp && resource.charAt( resource.length - 1 ) != '/' && !(/[&?]t=/).test( resource ) ) + resource += ( resource.indexOf( '?' ) >= 0 ? '&' : '?' ) + 't=' + this.timestamp; + + return resource; + } + }; + + // Make it possible to override the getUrl function with a custom + // implementation pointing to a global named CKEDITOR_GETURL. + var newGetUrl = window.CKEDITOR_GETURL; + if ( newGetUrl ) + { + var originalGetUrl = CKEDITOR.getUrl; + CKEDITOR.getUrl = function ( resource ) + { + return newGetUrl.call( CKEDITOR, resource ) || + originalGetUrl.call( CKEDITOR, resource ); + }; + } + + return CKEDITOR; + })(); +} + +/** + * Function called upon loading a custom configuration file that can + * modify the editor instance configuration ({@link CKEDITOR.editor#config }). + * It is usually defined inside the custom configuration files that can + * include developer defined settings. + * @name CKEDITOR.editorConfig + * @function + * @param {CKEDITOR.config} config A configuration object containing the + * settings defined for a {@link CKEDITOR.editor} instance up to this + * function call. Note that not all settings may still be available. See + * <a href="http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Setting_Configurations#Configuration_Loading_Order">Configuration Loading Order</a> + * for details. + * @example + * // This is supposed to be placed in the config.js file. + * CKEDITOR.editorConfig = function( config ) + * { + * // Define changes to default configuration here. For example: + * config.language = 'fr'; + * config.uiColor = '#AADC6E'; + * }; + */ + +// PACKAGER_RENAME( CKEDITOR ) diff --git a/_source/core/ckeditor_basic.js b/_source/core/ckeditor_basic.js new file mode 100644 index 0000000..be06db8 --- /dev/null +++ b/_source/core/ckeditor_basic.js @@ -0,0 +1,238 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Contains the second part of the {@link CKEDITOR} object + * definition, which defines the basic editor features to be available in + * the root ckeditor_basic.js file. + */ + +if ( CKEDITOR.status == 'unloaded' ) +{ + (function() + { + CKEDITOR.event.implementOn( CKEDITOR ); + + /** + * Forces the full CKEditor core code, in the case only the basic code has been + * loaded (ckeditor_basic.js). This method self-destroys (becomes undefined) in + * the first call or as soon as the full code is available. + * @example + * // Check if the full core code has been loaded and load it. + * if ( CKEDITOR.loadFullCore ) + * <b>CKEDITOR.loadFullCore()</b>; + */ + CKEDITOR.loadFullCore = function() + { + // If not the basic code is not ready it, just mark it to be loaded. + if ( CKEDITOR.status != 'basic_ready' ) + { + CKEDITOR.loadFullCore._load = 1; + return; + } + + // Destroy this function. + delete CKEDITOR.loadFullCore; + + // Append the script to the head. + var script = document.createElement( 'script' ); + script.type = 'text/javascript'; + script.src = CKEDITOR.basePath + 'ckeditor.js'; + + document.getElementsByTagName( 'head' )[0].appendChild( script ); + }; + + /** + * The time to wait (in seconds) to load the full editor code after the + * page load, if the "ckeditor_basic" file is used. If set to zero, the + * editor is loaded on demand, as soon as an instance is created. + * + * This value must be set on the page before the page load completion. + * @type Number + * @default 0 (zero) + * @example + * // Loads the full source after five seconds. + * CKEDITOR.loadFullCoreTimeout = 5; + */ + CKEDITOR.loadFullCoreTimeout = 0; + + /** + * The class name used to identify <textarea> elements to be replace + * by CKEditor instances. + * @type String + * @default 'ckeditor' + * @example + * <b>CKEDITOR.replaceClass</b> = 'rich_editor'; + */ + CKEDITOR.replaceClass = 'ckeditor'; + + /** + * Enables the replacement of all textareas with class name matching + * {@link CKEDITOR.replaceClass}. + * @type Boolean + * @default true + * @example + * // Disable the auto-replace feature. + * <b>CKEDITOR.replaceByClassEnabled</b> = false; + */ + CKEDITOR.replaceByClassEnabled = 1; + + var createInstance = function( elementOrIdOrName, config, creationFunction, data ) + { + if ( CKEDITOR.env.isCompatible ) + { + // Load the full core. + if ( CKEDITOR.loadFullCore ) + CKEDITOR.loadFullCore(); + + var editor = creationFunction( elementOrIdOrName, config, data ); + CKEDITOR.add( editor ); + return editor; + } + + return null; + }; + + /** + * Replaces a <textarea> or a DOM element (DIV) with a CKEditor + * instance. For textareas, the initial value in the editor will be the + * textarea value. For DOM elements, their innerHTML will be used + * instead. We recommend using TEXTAREA and DIV elements only. + * @param {Object|String} elementOrIdOrName The DOM element (textarea), its + * ID or name. + * @param {Object} [config] The specific configurations to apply to this + * editor instance. Configurations set here will override global CKEditor + * settings. + * @returns {CKEDITOR.editor} The editor instance created. + * @example + * <textarea id="myfield" name="myfield"><:/textarea> + * ... + * <b>CKEDITOR.replace( 'myfield' )</b>; + * @example + * var textarea = document.body.appendChild( document.createElement( 'textarea' ) ); + * <b>CKEDITOR.replace( textarea )</b>; + */ + CKEDITOR.replace = function( elementOrIdOrName, config ) + { + return createInstance( elementOrIdOrName, config, CKEDITOR.editor.replace ); + }; + + /** + * Creates a new editor instance inside a specific DOM element. + * @param {Object|String} elementOrId The DOM element or its ID. + * @param {Object} [config] The specific configurations to apply to this + * editor instance. Configurations set here will override global CKEditor + * settings. + * @param {String} [data] Since 3.3. Initial value for the instance. + * @returns {CKEDITOR.editor} The editor instance created. + * @example + * <div id="editorSpace"><:/div> + * ... + * <b>CKEDITOR.appendTo( 'editorSpace' )</b>; + */ + CKEDITOR.appendTo = function( elementOrId, config, data ) + { + return createInstance( elementOrId, config, CKEDITOR.editor.appendTo, data ); + }; + + // Documented at ckeditor.js. + CKEDITOR.add = function( editor ) + { + // For now, just put the editor in the pending list. It will be + // processed as soon as the full code gets loaded. + var pending = this._.pending || ( this._.pending = [] ); + pending.push( editor ); + }; + + /** + * Replace all <textarea> elements available in the document with + * editor instances. + * @example + * // Replace all <textarea> elements in the page. + * CKEDITOR.replaceAll(); + * @example + * // Replace all <textarea class="myClassName"> elements in the page. + * CKEDITOR.replaceAll( 'myClassName' ); + * @example + * // Selectively replace <textarea> elements, based on custom assertions. + * CKEDITOR.replaceAll( function( textarea, config ) + * { + * // Custom code to evaluate the replace, returning false + * // if it must not be done. + * // It also passes the "config" parameter, so the + * // developer can customize the instance. + * } ); + */ + CKEDITOR.replaceAll = function() + { + var textareas = document.getElementsByTagName( 'textarea' ); + + for ( var i = 0 ; i < textareas.length ; i++ ) + { + var config = null, + textarea = textareas[i]; + + // The "name" and/or "id" attribute must exist. + if ( !textarea.name && !textarea.id ) + continue; + + if ( typeof arguments[0] == 'string' ) + { + // The textarea class name could be passed as the function + // parameter. + + var classRegex = new RegExp( '(?:^|\\s)' + arguments[0] + '(?:$|\\s)' ); + + if ( !classRegex.test( textarea.className ) ) + continue; + } + else if ( typeof arguments[0] == 'function' ) + { + // An assertion function could be passed as the function parameter. + // It must explicitly return "false" to ignore a specific <textarea>. + config = {}; + if ( arguments[0]( textarea, config ) === false ) + continue; + } + + this.replace( textarea, config ); + } + }; + + (function() + { + var onload = function() + { + var loadFullCore = CKEDITOR.loadFullCore, + loadFullCoreTimeout = CKEDITOR.loadFullCoreTimeout; + + // Replace all textareas with the default class name. + if ( CKEDITOR.replaceByClassEnabled ) + CKEDITOR.replaceAll( CKEDITOR.replaceClass ); + + CKEDITOR.status = 'basic_ready'; + + if ( loadFullCore && loadFullCore._load ) + loadFullCore(); + else if ( loadFullCoreTimeout ) + { + setTimeout( function() + { + if ( CKEDITOR.loadFullCore ) + CKEDITOR.loadFullCore(); + } + , loadFullCoreTimeout * 1000 ); + } + }; + + if ( window.addEventListener ) + window.addEventListener( 'load', onload, false ); + else if ( window.attachEvent ) + window.attachEvent( 'onload', onload ); + })(); + + CKEDITOR.status = 'basic_loaded'; + })(); +} diff --git a/_source/core/command.js b/_source/core/command.js new file mode 100644 index 0000000..c0868f0 --- /dev/null +++ b/_source/core/command.js @@ -0,0 +1,209 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Creates a command class instance. + * @class Represents a command that can be executed on an editor instance. + * @param {CKEDITOR.editor} editor The editor instance this command will be + * related to. + * @param {CKEDITOR.commandDefinition} commandDefinition The command + * definition. + * @augments CKEDITOR.event + * @example + * var command = new CKEDITOR.command( editor, + * { + * exec : function( editor ) + * { + * alert( editor.document.getBody().getHtml() ); + * } + * }); + */ +CKEDITOR.command = function( editor, commandDefinition ) +{ + /** + * Lists UI items that are associated to this command. This list can be + * used to interact with the UI on command execution (by the execution code + * itself, for example). + * @type Array + * @example + * alert( 'Number of UI items associated to this command: ' + command.<b>uiItems</b>.length ); + */ + this.uiItems = []; + + /** + * Executes the command. + * @param {Object} [data] Any data to pass to the command. Depends on the + * command implementation and requirements. + * @returns {Boolean} A boolean indicating that the command has been + * successfully executed. + * @example + * command.<b>exec()</b>; // The command gets executed. + */ + this.exec = function( data ) + { + if ( this.state == CKEDITOR.TRISTATE_DISABLED ) + return false; + + if ( this.editorFocus ) // Give editor focus if necessary (#4355). + editor.focus(); + + return ( commandDefinition.exec.call( this, editor, data ) !== false ); + }; + + CKEDITOR.tools.extend( this, commandDefinition, + // Defaults + /** @lends CKEDITOR.command.prototype */ + { + /** + * The editor modes within which the command can be executed. The + * execution will have no action if the current mode is not listed + * in this property. + * @type Object + * @default { wysiwyg : 1 } + * @see CKEDITOR.editor.prototype.mode + * @example + * // Enable the command in both WYSIWYG and Source modes. + * command.<b>modes</b> = { wysiwyg : 1, source : 1 }; + * @example + * // Enable the command in Source mode only. + * command.<b>modes</b> = { source : 1 }; + */ + modes : { wysiwyg : 1 }, + + /** + * Indicates that the editor will get the focus before executing + * the command. + * @type Boolean + * @default true + * @example + * // Do not force the editor to have focus when executing the command. + * command.<b>editorFocus</b> = false; + */ + editorFocus : 1, + + /** + * Indicates the editor state. Possible values are: + * <ul> + * <li>{@link CKEDITOR.TRISTATE_DISABLED}: the command is + * disabled. It's execution will have no effect. Same as + * {@link disable}.</li> + * <li>{@link CKEDITOR.TRISTATE_ON}: the command is enabled + * and currently active in the editor (for context sensitive commands, + * for example).</li> + * <li>{@link CKEDITOR.TRISTATE_OFF}: the command is enabled + * and currently inactive in the editor (for context sensitive + * commands, for example).</li> + * </ul> + * Do not set this property directly, using the {@link #setState} + * method instead. + * @type Number + * @default {@link CKEDITOR.TRISTATE_OFF} + * @example + * if ( command.<b>state</b> == CKEDITOR.TRISTATE_DISABLED ) + * alert( 'This command is disabled' ); + */ + state : CKEDITOR.TRISTATE_OFF + }); + + // Call the CKEDITOR.event constructor to initialize this instance. + CKEDITOR.event.call( this ); +}; + +CKEDITOR.command.prototype = +{ + /** + * Enables the command for execution. The command state (see + * {@link CKEDITOR.command.prototype.state}) available before disabling it + * is restored. + * @example + * command.<b>enable()</b>; + * command.exec(); // Execute the command. + */ + enable : function() + { + if ( this.state == CKEDITOR.TRISTATE_DISABLED ) + this.setState( ( !this.preserveState || ( typeof this.previousState == 'undefined' ) ) ? CKEDITOR.TRISTATE_OFF : this.previousState ); + }, + + /** + * Disables the command for execution. The command state (see + * {@link CKEDITOR.command.prototype.state}) will be set to + * {@link CKEDITOR.TRISTATE_DISABLED}. + * @example + * command.<b>disable()</b>; + * command.exec(); // "false" - Nothing happens. + */ + disable : function() + { + this.setState( CKEDITOR.TRISTATE_DISABLED ); + }, + + /** + * Sets the command state. + * @param {Number} newState The new state. See {@link #state}. + * @returns {Boolean} Returns "true" if the command state changed. + * @example + * command.<b>setState( CKEDITOR.TRISTATE_ON )</b>; + * command.exec(); // Execute the command. + * command.<b>setState( CKEDITOR.TRISTATE_DISABLED )</b>; + * command.exec(); // "false" - Nothing happens. + * command.<b>setState( CKEDITOR.TRISTATE_OFF )</b>; + * command.exec(); // Execute the command. + */ + setState : function( newState ) + { + // Do nothing if there is no state change. + if ( this.state == newState ) + return false; + + this.previousState = this.state; + + // Set the new state. + this.state = newState; + + // Fire the "state" event, so other parts of the code can react to the + // change. + this.fire( 'state' ); + + return true; + }, + + /** + * Toggles the on/off (active/inactive) state of the command. This is + * mainly used internally by context sensitive commands. + * @example + * command.<b>toggleState()</b>; + */ + toggleState : function() + { + if ( this.state == CKEDITOR.TRISTATE_OFF ) + this.setState( CKEDITOR.TRISTATE_ON ); + else if ( this.state == CKEDITOR.TRISTATE_ON ) + this.setState( CKEDITOR.TRISTATE_OFF ); + } +}; + +CKEDITOR.event.implementOn( CKEDITOR.command.prototype, true ); + +/** + * Indicates the previous command state. + * @name CKEDITOR.command.prototype.previousState + * @type Number + * @see #state + * @example + * alert( command.<b>previousState</b> ); + */ + +/** + * Fired when the command state changes. + * @name CKEDITOR.command#state + * @event + * @example + * command.on( <b>'state'</b> , function( e ) + * { + * // Alerts the new state. + * alert( this.state ); + * }); + */ diff --git a/_source/core/commanddefinition.js b/_source/core/commanddefinition.js new file mode 100644 index 0000000..de078ca --- /dev/null +++ b/_source/core/commanddefinition.js @@ -0,0 +1,129 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the "virtual" {@link CKEDITOR.commandDefinition} class, + * which contains the defintion of a command. This file is for + * documentation purposes only. + */ + +/** + * (Virtual Class) Do not call this constructor. This class is not really part + * of the API. + * @name CKEDITOR.commandDefinition + * @class Virtual class that illustrates the features of command objects to be + * passed to the {@link CKEDITOR.editor.prototype.addCommand} function. + * @example + */ + + /** + * The function to be fired when the commend is executed. + * @name CKEDITOR.commandDefinition.prototype.exec + * @function + * @param {CKEDITOR.editor} editor The editor within which run the command. + * @param {Object} [data] Additional data to be used to execute the command. + * @returns {Boolean} Whether the command has been successfully executed. + * Defaults to "true", if nothing is returned. + * @example + * editorInstance.addCommand( 'sample', + * { + * exec : function( editor ) + * { + * alert( 'Executing a command for the editor name "' + editor.name + '"!' ); + * } + * }); + */ + +/** + * Whether the command need to be hooked into the redo/undo system. + * @name CKEDITOR.commandDefinition.prototype.canUndo + * @type {Boolean} + * @default true + * @field + * @example + * editorInstance.addCommand( 'alertName', + * { + * exec : function( editor ) + * { + * alert( editor.name ); + * }, + * canUndo : false // No support for undo/redo + * }); + */ + +/** + * Whether the command is asynchronous, which means that the + * {@link CKEDITOR.editor#event:afterCommandExec} event will be fired by the + * command itself manually, and that the return value of this command is not to + * be returned by the {@link CKEDITOR.command#exec} function. + * @name CKEDITOR.commandDefinition.prototype.async + * @default false + * @type {Boolean} + * @example + * editorInstance.addCommand( 'loadOptions', + * { + * exec : function( editor ) + * { + * // Asynchronous operation below. + * CKEDITOR.ajax.loadXml( 'data.xml', function() + * { + * editor.fire( 'afterCommandExec' ); + * )); + * }, + * async : true // The command need some time to complete after exec function returns. + * }); + */ + +/** + * Whether the command should give focus to the editor before execution. + * @name CKEDITOR.commandDefinition.prototype.editorFocus + * @type {Boolean} + * @default true + * @see CKEDITOR.command#editorFocus + * @example + * editorInstance.addCommand( 'maximize', + * { + * exec : function( editor ) + * { + * // ... + * }, + * editorFocus : false // The command doesn't require focusing the editing document. + * }); + */ + + +/** + * Whether the command state should be set to {@link CKEDITOR.TRISTATE_DISABLED} on startup. + * @name CKEDITOR.commandDefinition.prototype.startDisabled + * @type {Boolean} + * @default false + * @example + * editorInstance.addCommand( 'unlink', + * { + * exec : function( editor ) + * { + * // ... + * }, + * startDisabled : true // Command is unavailable until selection is inside a link. + * }); + */ + +/** + * The editor modes within which the command can be executed. The execution + * will have no action if the current mode is not listed in this property. + * @name CKEDITOR.commandDefinition.prototype.modes + * @type Object + * @default { wysiwyg : 1 } + * @see CKEDITOR.command#modes + * @example + * editorInstance.addCommand( 'link', + * { + * exec : function( editor ) + * { + * // ... + * }, + * modes : { wysiwyg : 1 } // Command is available in wysiwyg mode only. + * }); + */ diff --git a/_source/core/config.js b/_source/core/config.js new file mode 100644 index 0000000..8d45ebe --- /dev/null +++ b/_source/core/config.js @@ -0,0 +1,431 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.config} object, which holds the + * default configuration settings. + */ + +/** + * Used in conjuction with {@link CKEDITOR.config.enterMode} and + * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce <p> + * tags when using the ENTER key. + * @constant + */ +CKEDITOR.ENTER_P = 1; + +/** + * Used in conjuction with {@link CKEDITOR.config.enterMode} and + * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce <br> + * tags when using the ENTER key. + * @constant + */ +CKEDITOR.ENTER_BR = 2; + +/** + * Used in conjuction with {@link CKEDITOR.config.enterMode} and + * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce <div> + * tags when using the ENTER key. + * @constant + */ +CKEDITOR.ENTER_DIV = 3; + +/** + * @namespace Holds the default configuration settings. Changes to this object are + * reflected in all editor instances, if not specificaly specified for those + * instances. + */ +CKEDITOR.config = +{ + /** + * The URL path for the custom configuration file to be loaded. If not + * overloaded with inline configurations, it defaults to the "config.js" + * file present in the root of the CKEditor installation directory.<br /><br /> + * + * CKEditor will recursively load custom configuration files defined inside + * other custom configuration files. + * @type String + * @default '<CKEditor folder>/config.js' + * @example + * // Load a specific configuration file. + * CKEDITOR.replace( 'myfiled', { customConfig : '/myconfig.js' } ); + * @example + * // Do not load any custom configuration file. + * CKEDITOR.replace( 'myfiled', { customConfig : '' } ); + */ + customConfig : 'config.js', + + /** + * Whether the replaced element (usually a textarea) is to be updated + * automatically when posting the form containing the editor. + * @type Boolean + * @default true + * @example + * config.autoUpdateElement = true; + */ + autoUpdateElement : true, + + /** + * The base href URL used to resolve relative and absolute URLs in the + * editor content. + * @type String + * @default '' (empty) + * @example + * config.baseHref = 'http://www.example.com/path/'; + */ + baseHref : '', + + /** + * The CSS file(s) to be used to apply style to the contents. It should + * reflect the CSS used in the final pages where the contents are to be + * used. + * @type String|Array + * @default '<CKEditor folder>/contents.css' + * @example + * config.contentsCss = '/css/mysitestyles.css'; + * config.contentsCss = ['/css/mysitestyles.css', '/css/anotherfile.css']; + */ + contentsCss : CKEDITOR.basePath + 'contents.css', + + /** + * The writting direction of the language used to write the editor + * contents. Allowed values are: + * <ul> + * <li>'ui' - which indicate content direction will be the same with the user interface language direction;</li> + * <li>'ltr' - for Left-To-Right language (like English);</li> + * <li>'rtl' - for Right-To-Left languages (like Arabic).</li> + * </ul> + * @default 'ui' + * @type String + * @example + * config.contentsLangDirection = 'rtl'; + */ + contentsLangDirection : 'ui', + + /** + * Language code of the writting language which is used to author the editor + * contents. + * @default Same value with editor's UI language. + * @type String + * @example + * config.contentsLanguage = 'fr'; + */ + contentsLanguage : '', + + /** + * The user interface language localization to use. If empty, the editor + * automatically localize the editor to the user language, if supported, + * otherwise the {@link CKEDITOR.config.defaultLanguage} language is used. + * @default '' (empty) + * @type String + * @example + * // Load the German interface. + * config.language = 'de'; + */ + language : '', + + /** + * The language to be used if {@link CKEDITOR.config.language} is left empty and it's not + * possible to localize the editor to the user language. + * @default 'en' + * @type String + * @example + * config.defaultLanguage = 'it'; + */ + defaultLanguage : 'en', + + /** + * Sets the behavior for the ENTER key. It also dictates other behaviour + * rules in the editor, like whether the <br> element is to be used + * as a paragraph separator when indenting text. + * The allowed values are the following constants, and their relative + * behavior: + * <ul> + * <li>{@link CKEDITOR.ENTER_P} (1): new <p> paragraphs are created;</li> + * <li>{@link CKEDITOR.ENTER_BR} (2): lines are broken with <br> elements;</li> + * <li>{@link CKEDITOR.ENTER_DIV} (3): new <div> blocks are created.</li> + * </ul> + * <strong>Note</strong>: It's recommended to use the + * {@link CKEDITOR.ENTER_P} value because of its semantic value and + * correctness. The editor is optimized for this value. + * @type Number + * @default {@link CKEDITOR.ENTER_P} + * @example + * // Not recommended. + * config.enterMode = CKEDITOR.ENTER_BR; + */ + enterMode : CKEDITOR.ENTER_P, + + /** + * Force the respect of {@link CKEDITOR.config.enterMode} as line break regardless of the context, + * E.g. If {@link CKEDITOR.config.enterMode} is set to {@link CKEDITOR.ENTER_P}, + * press enter key inside a 'div' will create a new paragraph with 'p' instead of 'div'. + * @since 3.2.1 + * @default false + * @example + * // Not recommended. + * config.forceEnterMode = true; + */ + forceEnterMode : false, + + /** + * Just like the {@link CKEDITOR.config.enterMode} setting, it defines the behavior for the SHIFT+ENTER key. + * The allowed values are the following constants, and their relative + * behavior: + * <ul> + * <li>{@link CKEDITOR.ENTER_P} (1): new <p> paragraphs are created;</li> + * <li>{@link CKEDITOR.ENTER_BR} (2): lines are broken with <br> elements;</li> + * <li>{@link CKEDITOR.ENTER_DIV} (3): new <div> blocks are created.</li> + * </ul> + * @type Number + * @default {@link CKEDITOR.ENTER_BR} + * @example + * config.shiftEnterMode = CKEDITOR.ENTER_P; + */ + shiftEnterMode : CKEDITOR.ENTER_BR, + + /** + * A comma separated list of plugins that are not related to editor + * instances. Reserved to plugins that extend the core code only.<br /><br /> + * + * There are no ways to override this setting, except by editing the source + * code of CKEditor (_source/core/config.js). + * @type String + * @example + */ + corePlugins : '', + + /** + * Sets the doctype to be used when loading the editor content as HTML. + * @type String + * @default '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + * @example + * // Set the doctype to the HTML 4 (quirks) mode. + * config.docType = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'; + */ + docType : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">', + + /** + * Sets the "id" attribute to be used on the body element of the editing + * area. This can be useful when reusing the original CSS file you're using + * on your live website and you want to assing to the editor the same id + * you're using for the region that'll hold the contents. In this way, + * id specific CSS rules will be enabled. + * @since 3.1 + * @type String + * @default '' (empty) + * @example + * config.bodyId = 'contents_id'; + */ + bodyId : '', + + /** + * Sets the "class" attribute to be used on the body element of the editing + * area. This can be useful when reusing the original CSS file you're using + * on your live website and you want to assing to the editor the same class + * name you're using for the region that'll hold the contents. In this way, + * class specific CSS rules will be enabled. + * @since 3.1 + * @type String + * @default '' (empty) + * @example + * config.bodyClass = 'contents'; + */ + bodyClass : '', + + /** + * Indicates whether the contents to be edited are being inputted as a full + * HTML page. A full page includes the <html>, <head> and + * <body> tags. The final output will also reflect this setting, + * including the <body> contents only if this setting is disabled. + * @since 3.1 + * @type Boolean + * @default false + * @example + * config.fullPage = true; + */ + fullPage : false, + + /** + * The height of editing area( content ), in relative or absolute, e.g. 30px, 5em. + * Note: Percentage unit is not supported yet. e.g. 30%. + * @type Number|String + * @default '200' + * @example + * config.height = 500; + * config.height = '25em'; + * config.height = '300px'; + */ + height : 200, + + /** + * Comma separated list of plugins to load and initialize for an editor + * instance. This should be rarely changed, using instead the + * {@link CKEDITOR.config.extraPlugins} and + * {@link CKEDITOR.config.removePlugins} for customizations. + * @type String + * @example + */ + plugins : + 'about,' + + 'a11yhelp,' + + 'basicstyles,' + + 'bidi,' + + 'blockquote,' + + 'button,' + + 'clipboard,' + + 'colorbutton,' + + 'colordialog,' + + 'contextmenu,' + + 'dialogadvtab,' + + 'div,' + + 'elementspath,' + + 'enterkey,' + + 'entities,' + + 'filebrowser,' + + 'find,' + + 'flash,' + + 'font,' + + 'format,' + + 'forms,' + + 'horizontalrule,' + + 'htmldataprocessor,' + + 'iframe,' + + 'image,' + + 'indent,' + + 'justify,' + + 'keystrokes,' + + 'link,' + + 'list,' + + 'liststyle,' + + 'maximize,' + + 'newpage,' + + 'pagebreak,' + + 'pastefromword,' + + 'pastetext,' + + 'popup,' + + 'preview,' + + 'print,' + + 'removeformat,' + + 'resize,' + + 'save,' + + 'scayt,' + + 'smiley,' + + 'showblocks,' + + 'showborders,' + + 'sourcearea,' + + 'stylescombo,' + + 'table,' + + 'tabletools,' + + 'specialchar,' + + 'tab,' + + 'templates,' + + 'toolbar,' + + 'undo,' + + 'wysiwygarea,' + + 'wsc', + + /** + * List of additional plugins to be loaded. This is a tool setting which + * makes it easier to add new plugins, whithout having to touch and + * possibly breaking the {@link CKEDITOR.config.plugins} setting. + * @type String + * @example + * config.extraPlugins = 'myplugin,anotherplugin'; + */ + extraPlugins : '', + + /** + * List of plugins that must not be loaded. This is a tool setting which + * makes it easier to avoid loading plugins definied in the + * {@link CKEDITOR.config.plugins} setting, whithout having to touch it and + * potentially breaking it. + * @type String + * @example + * config.removePlugins = 'elementspath,save,font'; + */ + removePlugins : '', + + /** + * List of regular expressions to be executed over the input HTML, + * indicating HTML source code that matched must <strong>not</strong> present in WYSIWYG mode for editing. + * @type Array + * @default [] (empty array) + * @example + * config.protectedSource.push( /<\?[\s\S]*?\?>/g ); // PHP Code + * config.protectedSource.push( /<%[\s\S]*?%>/g ); // ASP Code + * config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ); // ASP.Net Code + */ + protectedSource : [], + + /** + * The editor tabindex value. + * @type Number + * @default 0 (zero) + * @example + * config.tabIndex = 1; + */ + tabIndex : 0, + + /** + * The theme to be used to build the UI. + * @type String + * @default 'default' + * @see CKEDITOR.config.skin + * @example + * config.theme = 'default'; + */ + theme : 'default', + + /** + * The skin to load. It may be the name of the skin folder inside the + * editor installation path, or the name and the path separated by a comma. + * @type String + * @default 'default' + * @example + * config.skin = 'v2'; + * @example + * config.skin = 'myskin,/customstuff/myskin/'; + */ + skin : 'kama', + + /** + * The editor width in CSS size format or pixel integer. + * @type String|Number + * @default '' (empty) + * @example + * config.width = 850; + * @example + * config.width = '75%'; + */ + width : '', + + /** + * The base Z-index for floating dialogs and popups. + * @type Number + * @default 10000 + * @example + * config.baseFloatZIndex = 2000 + */ + baseFloatZIndex : 10000 +}; + +/** + * Indicates that some of the editor features, like alignment and text + * direction, should used the "computed value" of the feature to indicate it's + * on/off state, instead of using the "real value".<br /> + * <br /> + * If enabled, in a left to right written document, the "Left Justify" + * alignment button will show as active, even if the aligment style is not + * explicitly applied to the current paragraph in the editor. + * @name CKEDITOR.config.useComputedState + * @type Boolean + * @default true + * @since 3.4 + * @example + * config.useComputedState = false; + */ + +// PACKAGER_RENAME( CKEDITOR.config ) diff --git a/_source/core/dataprocessor.js b/_source/core/dataprocessor.js new file mode 100644 index 0000000..e8677ed --- /dev/null +++ b/_source/core/dataprocessor.js @@ -0,0 +1,65 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the "virtual" {@link CKEDITOR.dataProcessor} class, which + * defines the basic structure of data processor objects to be + * set to {@link CKEDITOR.editor.dataProcessor}. + */ + +/** + * If defined, points to the data processor which is responsible to translate + * and transform the editor data on input and output. + * Generaly it will point to an instance of {@link CKEDITOR.htmlDataProcessor}, + * which handles HTML data. The editor may also handle other data formats by + * using different data processors provided by specific plugins. + * @name CKEDITOR.editor.prototype.dataProcessor + * @type CKEDITOR.dataProcessor + */ + +/** + * This class is here for documentation purposes only and is not really part of + * the API. It serves as the base ("interface") for data processors + * implementation. + * @name CKEDITOR.dataProcessor + * @class Represents a data processor, which is responsible to translate and + * transform the editor data on input and output. + * @example + */ + +/** + * Transforms input data into HTML to be loaded in the editor. + * While the editor is able to handle non HTML data (like BBCode), at runtime + * it can handle HTML data only. The role of the data processor is transforming + * the input data into HTML through this function. + * @name CKEDITOR.dataProcessor.prototype.toHtml + * @function + * @param {String} data The input data to be transformed. + * @param {String} [fixForBody] The tag name to be used if the data must be + * fixed because it is supposed to be loaded direcly into the <body> + * tag. This is generally not used by non-HTML data processors. + * @example + * // Tranforming BBCode data, having a custom BBCode data processor. + * var data = 'This is [b]an example[/b].'; + * var html = editor.dataProcessor.toHtml( data ); // '<p>This is <b>an example</b>.</p>' + */ + +/** + * Transforms HTML into data to be outputted by the editor, in the format + * expected by the data processor. + * While the editor is able to handle non HTML data (like BBCode), at runtime + * it can handle HTML data only. The role of the data processor is transforming + * the HTML data containined by the editor into a specific data format through + * this function. + * @name CKEDITOR.dataProcessor.prototype.toDataFormat + * @function + * @param {String} html The HTML to be transformed. + * @param {String} fixForBody The tag name to be used if the output data is + * coming from <body> and may be eventually fixed for it. This is + * generally not used by non-HTML data processors. + * // Tranforming into BBCode data, having a custom BBCode data processor. + * var html = '<p>This is <b>an example</b>.</p>'; + * var data = editor.dataProcessor.toDataFormat( html ); // 'This is [b]an example[/b].' + */ diff --git a/_source/core/dom.js b/_source/core/dom.js new file mode 100644 index 0000000..06c5ae7 --- /dev/null +++ b/_source/core/dom.js @@ -0,0 +1,20 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dom} object, which contains DOM + * manipulation objects and function. + */ + +/** + * @namespace DOM manipulation objects, classes and functions. + * @see CKEDITOR.dom.element + * @see CKEDITOR.dom.node + * @example + */ +CKEDITOR.dom = +{}; + +// PACKAGER_RENAME( CKEDITOR.dom ) diff --git a/_source/core/dom/comment.js b/_source/core/dom/comment.js new file mode 100644 index 0000000..4c580da --- /dev/null +++ b/_source/core/dom/comment.js @@ -0,0 +1,32 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dom.comment} class, which represents + * a DOM comment node. + */ + +CKEDITOR.dom.comment = CKEDITOR.tools.createClass( +{ + base : CKEDITOR.dom.node, + + $ : function( text, ownerDocument ) + { + if ( typeof text == 'string' ) + text = ( ownerDocument ? ownerDocument.$ : document ).createComment( text ); + + this.base( text ); + }, + + proto : + { + type : CKEDITOR.NODE_COMMENT, + + getOuterHtml : function() + { + return '<!--' + this.$.nodeValue + '-->'; + } + } +}); diff --git a/_source/core/dom/document.js b/_source/core/dom/document.js new file mode 100644 index 0000000..8880de8 --- /dev/null +++ b/_source/core/dom/document.js @@ -0,0 +1,251 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which + * represents a DOM document. + */ + +/** + * Represents a DOM document. + * @constructor + * @augments CKEDITOR.dom.domObject + * @param {Object} domDocument A native DOM document. + * @example + * var document = new CKEDITOR.dom.document( document ); + */ +CKEDITOR.dom.document = function( domDocument ) +{ + CKEDITOR.dom.domObject.call( this, domDocument ); +}; + +// PACKAGER_RENAME( CKEDITOR.dom.document ) + +CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject(); + +CKEDITOR.tools.extend( CKEDITOR.dom.document.prototype, + /** @lends CKEDITOR.dom.document.prototype */ + { + /** + * Appends a CSS file to the document. + * @param {String} cssFileUrl The CSS file URL. + * @example + * <b>CKEDITOR.document.appendStyleSheet( '/mystyles.css' )</b>; + */ + appendStyleSheet : function( cssFileUrl ) + { + if ( this.$.createStyleSheet ) + this.$.createStyleSheet( cssFileUrl ); + else + { + var link = new CKEDITOR.dom.element( 'link' ); + link.setAttributes( + { + rel :'stylesheet', + type : 'text/css', + href : cssFileUrl + }); + + this.getHead().append( link ); + } + }, + + appendStyleText : function( cssStyleText ) + { + if ( this.$.createStyleSheet ) + { + var styleSheet = this.$.createStyleSheet( "" ); + styleSheet.cssText = cssStyleText ; + } + else + { + var style = new CKEDITOR.dom.element( 'style', this ); + style.append( new CKEDITOR.dom.text( cssStyleText, this ) ); + this.getHead().append( style ); + } + }, + + createElement : function( name, attribsAndStyles ) + { + var element = new CKEDITOR.dom.element( name, this ); + + if ( attribsAndStyles ) + { + if ( attribsAndStyles.attributes ) + element.setAttributes( attribsAndStyles.attributes ); + + if ( attribsAndStyles.styles ) + element.setStyles( attribsAndStyles.styles ); + } + + return element; + }, + + createText : function( text ) + { + return new CKEDITOR.dom.text( text, this ); + }, + + focus : function() + { + this.getWindow().focus(); + }, + + /** + * Gets and element based on its id. + * @param {String} elementId The element id. + * @returns {CKEDITOR.dom.element} The element instance, or null if not found. + * @example + * var element = <b>CKEDITOR.document.getById( 'myElement' )</b>; + * alert( element.getId() ); // "myElement" + */ + getById : function( elementId ) + { + var $ = this.$.getElementById( elementId ); + return $ ? new CKEDITOR.dom.element( $ ) : null; + }, + + getByAddress : function( address, normalized ) + { + var $ = this.$.documentElement; + + for ( var i = 0 ; $ && i < address.length ; i++ ) + { + var target = address[ i ]; + + if ( !normalized ) + { + $ = $.childNodes[ target ]; + continue; + } + + var currentIndex = -1; + + for (var j = 0 ; j < $.childNodes.length ; j++ ) + { + var candidate = $.childNodes[ j ]; + + if ( normalized === true && + candidate.nodeType == 3 && + candidate.previousSibling && + candidate.previousSibling.nodeType == 3 ) + { + continue; + } + + currentIndex++; + + if ( currentIndex == target ) + { + $ = candidate; + break; + } + } + } + + return $ ? new CKEDITOR.dom.node( $ ) : null; + }, + + getElementsByTag : function( tagName, namespace ) + { + if ( !( CKEDITOR.env.ie && ! ( document.documentMode > 8 ) ) && namespace ) + tagName = namespace + ':' + tagName; + return new CKEDITOR.dom.nodeList( this.$.getElementsByTagName( tagName ) ); + }, + + /** + * Gets the <head> element for this document. + * @returns {CKEDITOR.dom.element} The <head> element. + * @example + * var element = <b>CKEDITOR.document.getHead()</b>; + * alert( element.getName() ); // "head" + */ + getHead : function() + { + var head = this.$.getElementsByTagName( 'head' )[0]; + if ( !head ) + head = this.getDocumentElement().append( new CKEDITOR.dom.element( 'head' ), true ); + else + head = new CKEDITOR.dom.element( head ); + + return ( + this.getHead = function() + { + return head; + })(); + }, + + /** + * Gets the <body> element for this document. + * @returns {CKEDITOR.dom.element} The <body> element. + * @example + * var element = <b>CKEDITOR.document.getBody()</b>; + * alert( element.getName() ); // "body" + */ + getBody : function() + { + var body = new CKEDITOR.dom.element( this.$.body ); + + return ( + this.getBody = function() + { + return body; + })(); + }, + + /** + * Gets the DOM document element for this document. + * @returns {CKEDITOR.dom.element} The DOM document element. + */ + getDocumentElement : function() + { + var documentElement = new CKEDITOR.dom.element( this.$.documentElement ); + + return ( + this.getDocumentElement = function() + { + return documentElement; + })(); + }, + + /** + * Gets the window object that holds this document. + * @returns {CKEDITOR.dom.window} The window object. + */ + getWindow : function() + { + var win = new CKEDITOR.dom.window( this.$.parentWindow || this.$.defaultView ); + + return ( + this.getWindow = function() + { + return win; + })(); + }, + + /** + * Defines the document contents through document.write. Note that the + * previous document contents will be lost (cleaned). + * @since 3.5 + * @param {String} html The HTML defining the document contents. + * @example + * document.write( + * '<html>' + + * '<head><title>Sample Doc</title></head>' + + * '<body>Document contents created by code</body>' + + * '</html>' ); + */ + write : function( html ) + { + // Don't leave any history log in IE. (#5657) + this.$.open( 'text/html', 'replace' ); + + // Support for custom document.domain in IE. + CKEDITOR.env.isCustomDomain() && ( this.$.domain = document.domain ); + + this.$.write( html ); + this.$.close(); + } + }); diff --git a/_source/core/dom/documentfragment.js b/_source/core/dom/documentfragment.js new file mode 100644 index 0000000..6152031 --- /dev/null +++ b/_source/core/dom/documentfragment.js @@ -0,0 +1,49 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @class DocumentFragment is a "lightweight" or "minimal" Document object. It is + * commonly used to extract a portion of a document's tree or to create a new + * fragment of a document. Various operations may take DocumentFragment objects + * as arguments and results in all the child nodes of the DocumentFragment being + * moved to the child list of this node. + * @param {Object} ownerDocument + */ +CKEDITOR.dom.documentFragment = function( ownerDocument ) +{ + ownerDocument = ownerDocument || CKEDITOR.document; + this.$ = ownerDocument.$.createDocumentFragment(); +}; + +CKEDITOR.tools.extend( CKEDITOR.dom.documentFragment.prototype, + CKEDITOR.dom.element.prototype, + { + type : CKEDITOR.NODE_DOCUMENT_FRAGMENT, + insertAfterNode : function( node ) + { + node = node.$; + node.parentNode.insertBefore( this.$, node.nextSibling ); + } + }, + true, + { + 'append' : 1, + 'appendBogus' : 1, + 'getFirst' : 1, + 'getLast' : 1, + 'appendTo' : 1, + 'moveChildren' : 1, + 'insertBefore' : 1, + 'insertAfterNode' : 1, + 'replace' : 1, + 'trim' : 1, + 'type' : 1, + 'ltrim' : 1, + 'rtrim' : 1, + 'getDocument' : 1, + 'getChildCount' : 1, + 'getChild' : 1, + 'getChildren' : 1 + } ); diff --git a/_source/core/dom/domobject.js b/_source/core/dom/domobject.js new file mode 100644 index 0000000..d37790f --- /dev/null +++ b/_source/core/dom/domobject.js @@ -0,0 +1,258 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.editor} class, which is the base + * for other classes representing DOM objects. + */ + +/** + * Represents a DOM object. This class is not intended to be used directly. It + * serves as the base class for other classes representing specific DOM + * objects. + * @constructor + * @param {Object} nativeDomObject A native DOM object. + * @augments CKEDITOR.event + * @example + */ +CKEDITOR.dom.domObject = function( nativeDomObject ) +{ + if ( nativeDomObject ) + { + /** + * The native DOM object represented by this class instance. + * @type Object + * @example + * var element = new CKEDITOR.dom.element( 'span' ); + * alert( element.$.nodeType ); // "1" + */ + this.$ = nativeDomObject; + } +}; + +CKEDITOR.dom.domObject.prototype = (function() +{ + // Do not define other local variables here. We want to keep the native + // listener closures as clean as possible. + + var getNativeListener = function( domObject, eventName ) + { + return function( domEvent ) + { + // In FF, when reloading the page with the editor focused, it may + // throw an error because the CKEDITOR global is not anymore + // available. So, we check it here first. (#2923) + if ( typeof CKEDITOR != 'undefined' ) + domObject.fire( eventName, new CKEDITOR.dom.event( domEvent ) ); + }; + }; + + return /** @lends CKEDITOR.dom.domObject.prototype */ { + + getPrivate : function() + { + var priv; + + // Get the main private function from the custom data. Create it if not + // defined. + if ( !( priv = this.getCustomData( '_' ) ) ) + this.setCustomData( '_', ( priv = {} ) ); + + return priv; + }, + + /** @ignore */ + on : function( eventName ) + { + // We customize the "on" function here. The basic idea is that we'll have + // only one listener for a native event, which will then call all listeners + // set to the event. + + // Get the listeners holder object. + var nativeListeners = this.getCustomData( '_cke_nativeListeners' ); + + if ( !nativeListeners ) + { + nativeListeners = {}; + this.setCustomData( '_cke_nativeListeners', nativeListeners ); + } + + // Check if we have a listener for that event. + if ( !nativeListeners[ eventName ] ) + { + var listener = nativeListeners[ eventName ] = getNativeListener( this, eventName ); + + if ( this.$.attachEvent ) + this.$.attachEvent( 'on' + eventName, listener ); + else if ( this.$.addEventListener ) + this.$.addEventListener( eventName, listener, !!CKEDITOR.event.useCapture ); + } + + // Call the original implementation. + return CKEDITOR.event.prototype.on.apply( this, arguments ); + }, + + /** @ignore */ + removeListener : function( eventName ) + { + // Call the original implementation. + CKEDITOR.event.prototype.removeListener.apply( this, arguments ); + + // If we don't have listeners for this event, clean the DOM up. + if ( !this.hasListeners( eventName ) ) + { + var nativeListeners = this.getCustomData( '_cke_nativeListeners' ); + var listener = nativeListeners && nativeListeners[ eventName ]; + if ( listener ) + { + if ( this.$.detachEvent ) + this.$.detachEvent( 'on' + eventName, listener ); + else if ( this.$.removeEventListener ) + this.$.removeEventListener( eventName, listener, false ); + + delete nativeListeners[ eventName ]; + } + } + }, + + /** + * Removes any listener set on this object. + * To avoid memory leaks we must assure that there are no + * references left after the object is no longer needed. + */ + removeAllListeners : function() + { + var nativeListeners = this.getCustomData( '_cke_nativeListeners' ); + for ( var eventName in nativeListeners ) + { + var listener = nativeListeners[ eventName ]; + if ( this.$.detachEvent ) + this.$.detachEvent( 'on' + eventName, listener ); + else if ( this.$.removeEventListener ) + this.$.removeEventListener( eventName, listener, false ); + + delete nativeListeners[ eventName ]; + } + } + }; +})(); + +(function( domObjectProto ) +{ + var customData = {}; + + CKEDITOR.on( 'reset', function() + { + customData = {}; + }); + + /** + * Determines whether the specified object is equal to the current object. + * @name CKEDITOR.dom.domObject.prototype.equals + * @function + * @param {Object} object The object to compare with the current object. + * @returns {Boolean} "true" if the object is equal. + * @example + * var doc = new CKEDITOR.dom.document( document ); + * alert( doc.equals( CKEDITOR.document ) ); // "true" + * alert( doc == CKEDITOR.document ); // "false" + */ + domObjectProto.equals = function( object ) + { + return ( object && object.$ === this.$ ); + }; + + /** + * Sets a data slot value for this object. These values are shared by all + * instances pointing to that same DOM object. + * <strong>Note:</strong> The created data slot is only guarantied to be available on this unique dom node, + * thus any wish to continue access it from other element clones (either created by clone node or from innerHtml) + * will fail, for such usage, please use {@link CKEDITOR.dom.element::setAttribute} instead. + * @name CKEDITOR.dom.domObject.prototype.setCustomData + * @function + * @param {String} key A key used to identify the data slot. + * @param {Object} value The value to set to the data slot. + * @returns {CKEDITOR.dom.domObject} This DOM object instance. + * @see CKEDITOR.dom.domObject.prototype.getCustomData + * @example + * var element = new CKEDITOR.dom.element( 'span' ); + * element.setCustomData( 'hasCustomData', true ); + */ + domObjectProto.setCustomData = function( key, value ) + { + var expandoNumber = this.getUniqueId(), + dataSlot = customData[ expandoNumber ] || ( customData[ expandoNumber ] = {} ); + + dataSlot[ key ] = value; + + return this; + }; + + /** + * Gets the value set to a data slot in this object. + * @name CKEDITOR.dom.domObject.prototype.getCustomData + * @function + * @param {String} key The key used to identify the data slot. + * @returns {Object} This value set to the data slot. + * @see CKEDITOR.dom.domObject.prototype.setCustomData + * @example + * var element = new CKEDITOR.dom.element( 'span' ); + * alert( element.getCustomData( 'hasCustomData' ) ); // e.g. 'true' + */ + domObjectProto.getCustomData = function( key ) + { + var expandoNumber = this.$[ 'data-cke-expando' ], + dataSlot = expandoNumber && customData[ expandoNumber ]; + + return dataSlot && dataSlot[ key ]; + }; + + /** + * @name CKEDITOR.dom.domObject.prototype.removeCustomData + */ + domObjectProto.removeCustomData = function( key ) + { + var expandoNumber = this.$[ 'data-cke-expando' ], + dataSlot = expandoNumber && customData[ expandoNumber ], + retval = dataSlot && dataSlot[ key ]; + + if ( typeof retval != 'undefined' ) + delete dataSlot[ key ]; + + return retval || null; + }; + + /** + * Removes any data stored on this object. + * To avoid memory leaks we must assure that there are no + * references left after the object is no longer needed. + * @name CKEDITOR.dom.domObject.prototype.clearCustomData + * @function + */ + domObjectProto.clearCustomData = function() + { + // Clear all event listeners + this.removeAllListeners(); + + var expandoNumber = this.$[ 'data-cke-expando' ]; + expandoNumber && delete customData[ expandoNumber ]; + }; + + /** + * Gets an ID that can be used to identiquely identify this DOM object in + * the running session. + * @name CKEDITOR.dom.domObject.prototype.getUniqueId + * @function + * @returns {Number} A unique ID. + */ + domObjectProto.getUniqueId = function() + { + return this.$[ 'data-cke-expando' ] || ( this.$[ 'data-cke-expando' ] = CKEDITOR.tools.getNextNumber() ); + }; + + // Implement CKEDITOR.event. + CKEDITOR.event.implementOn( domObjectProto ); + +})( CKEDITOR.dom.domObject.prototype ); diff --git a/_source/core/dom/element.js b/_source/core/dom/element.js new file mode 100644 index 0000000..5df3d19 --- /dev/null +++ b/_source/core/dom/element.js @@ -0,0 +1,1681 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dom.element} class, which + * represents a DOM element. + */ + +/** + * Represents a DOM element. + * @constructor + * @augments CKEDITOR.dom.node + * @param {Object|String} element A native DOM element or the element name for + * new elements. + * @param {CKEDITOR.dom.document} [ownerDocument] The document that will contain + * the element in case of element creation. + * @example + * // Create a new <span> element. + * var element = new CKEDITOR.dom.element( 'span' ); + * @example + * // Create an element based on a native DOM element. + * var element = new CKEDITOR.dom.element( document.getElementById( 'myId' ) ); + */ +CKEDITOR.dom.element = function( element, ownerDocument ) +{ + if ( typeof element == 'string' ) + element = ( ownerDocument ? ownerDocument.$ : document ).createElement( element ); + + // Call the base constructor (we must not call CKEDITOR.dom.node). + CKEDITOR.dom.domObject.call( this, element ); +}; + +// PACKAGER_RENAME( CKEDITOR.dom.element ) + +/** + * The the {@link CKEDITOR.dom.element} representing and element. If the + * element is a native DOM element, it will be transformed into a valid + * CKEDITOR.dom.element object. + * @returns {CKEDITOR.dom.element} The transformed element. + * @example + * var element = new CKEDITOR.dom.element( 'span' ); + * alert( element == <b>CKEDITOR.dom.element.get( element )</b> ); "true" + * @example + * var element = document.getElementById( 'myElement' ); + * alert( <b>CKEDITOR.dom.element.get( element )</b>.getName() ); e.g. "p" + */ +CKEDITOR.dom.element.get = function( element ) +{ + return element && ( element.$ ? element : new CKEDITOR.dom.element( element ) ); +}; + +CKEDITOR.dom.element.prototype = new CKEDITOR.dom.node(); + +/** + * Creates an instance of the {@link CKEDITOR.dom.element} class based on the + * HTML representation of an element. + * @param {String} html The element HTML. It should define only one element in + * the "root" level. The "root" element can have child nodes, but not + * siblings. + * @returns {CKEDITOR.dom.element} The element instance. + * @example + * var element = <b>CKEDITOR.dom.element.createFromHtml( '<strong class="anyclass">My element</strong>' )</b>; + * alert( element.getName() ); // "strong" + */ +CKEDITOR.dom.element.createFromHtml = function( html, ownerDocument ) +{ + var temp = new CKEDITOR.dom.element( 'div', ownerDocument ); + temp.setHtml( html ); + + // When returning the node, remove it from its parent to detach it. + return temp.getFirst().remove(); +}; + +CKEDITOR.dom.element.setMarker = function( database, element, name, value ) +{ + var id = element.getCustomData( 'list_marker_id' ) || + ( element.setCustomData( 'list_marker_id', CKEDITOR.tools.getNextNumber() ).getCustomData( 'list_marker_id' ) ), + markerNames = element.getCustomData( 'list_marker_names' ) || + ( element.setCustomData( 'list_marker_names', {} ).getCustomData( 'list_marker_names' ) ); + database[id] = element; + markerNames[name] = 1; + + return element.setCustomData( name, value ); +}; + +CKEDITOR.dom.element.clearAllMarkers = function( database ) +{ + for ( var i in database ) + CKEDITOR.dom.element.clearMarkers( database, database[i], 1 ); +}; + +CKEDITOR.dom.element.clearMarkers = function( database, element, removeFromDatabase ) +{ + var names = element.getCustomData( 'list_marker_names' ), + id = element.getCustomData( 'list_marker_id' ); + for ( var i in names ) + element.removeCustomData( i ); + element.removeCustomData( 'list_marker_names' ); + if ( removeFromDatabase ) + { + element.removeCustomData( 'list_marker_id' ); + delete database[id]; + } +}; + +CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, + /** @lends CKEDITOR.dom.element.prototype */ + { + /** + * The node type. This is a constant value set to + * {@link CKEDITOR.NODE_ELEMENT}. + * @type Number + * @example + */ + type : CKEDITOR.NODE_ELEMENT, + + /** + * Adds a CSS class to the element. It appends the class to the + * already existing names. + * @param {String} className The name of the class to be added. + * @example + * var element = new CKEDITOR.dom.element( 'div' ); + * element.addClass( 'classA' ); // <div class="classA"> + * element.addClass( 'classB' ); // <div class="classA classB"> + * element.addClass( 'classA' ); // <div class="classA classB"> + */ + addClass : function( className ) + { + var c = this.$.className; + if ( c ) + { + var regex = new RegExp( '(?:^|\\s)' + className + '(?:\\s|$)', '' ); + if ( !regex.test( c ) ) + c += ' ' + className; + } + this.$.className = c || className; + }, + + /** + * Removes a CSS class name from the elements classes. Other classes + * remain untouched. + * @param {String} className The name of the class to remove. + * @example + * var element = new CKEDITOR.dom.element( 'div' ); + * element.addClass( 'classA' ); // <div class="classA"> + * element.addClass( 'classB' ); // <div class="classA classB"> + * element.removeClass( 'classA' ); // <div class="classB"> + * element.removeClass( 'classB' ); // <div> + */ + removeClass : function( className ) + { + var c = this.getAttribute( 'class' ); + if ( c ) + { + var regex = new RegExp( '(?:^|\\s+)' + className + '(?=\\s|$)', 'i' ); + if ( regex.test( c ) ) + { + c = c.replace( regex, '' ).replace( /^\s+/, '' ); + + if ( c ) + this.setAttribute( 'class', c ); + else + this.removeAttribute( 'class' ); + } + } + }, + + hasClass : function( className ) + { + var regex = new RegExp( '(?:^|\\s+)' + className + '(?=\\s|$)', '' ); + return regex.test( this.getAttribute('class') ); + }, + + /** + * Append a node as a child of this element. + * @param {CKEDITOR.dom.node|String} node The node or element name to be + * appended. + * @param {Boolean} [toStart] Indicates that the element is to be + * appended at the start. + * @returns {CKEDITOR.dom.node} The appended node. + * @example + * var p = new CKEDITOR.dom.element( 'p' ); + * + * var strong = new CKEDITOR.dom.element( 'strong' ); + * <b>p.append( strong );</b> + * + * var em = <b>p.append( 'em' );</b> + * + * // result: "<p><strong></strong><em></em></p>" + */ + append : function( node, toStart ) + { + if ( typeof node == 'string' ) + node = this.getDocument().createElement( node ); + + if ( toStart ) + this.$.insertBefore( node.$, this.$.firstChild ); + else + this.$.appendChild( node.$ ); + + return node; + }, + + appendHtml : function( html ) + { + if ( !this.$.childNodes.length ) + this.setHtml( html ); + else + { + var temp = new CKEDITOR.dom.element( 'div', this.getDocument() ); + temp.setHtml( html ); + temp.moveChildren( this ); + } + }, + + /** + * Append text to this element. + * @param {String} text The text to be appended. + * @returns {CKEDITOR.dom.node} The appended node. + * @example + * var p = new CKEDITOR.dom.element( 'p' ); + * p.appendText( 'This is' ); + * p.appendText( ' some text' ); + * + * // result: "<p>This is some text</p>" + */ + appendText : function( text ) + { + if ( this.$.text != undefined ) + this.$.text += text; + else + this.append( new CKEDITOR.dom.text( text ) ); + }, + + appendBogus : function() + { + var lastChild = this.getLast() ; + + // Ignore empty/spaces text. + while ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim( lastChild.getText() ) ) + lastChild = lastChild.getPrevious(); + if ( !lastChild || !lastChild.is || !lastChild.is( 'br' ) ) + { + var bogus = CKEDITOR.env.opera ? + this.getDocument().createText('') : + this.getDocument().createElement( 'br' ); + + CKEDITOR.env.gecko && bogus.setAttribute( 'type', '_moz' ); + + this.append( bogus ); + } + }, + + /** + * Breaks one of the ancestor element in the element position, moving + * this element between the broken parts. + * @param {CKEDITOR.dom.element} parent The anscestor element to get broken. + * @example + * // Before breaking: + * // <b>This <i>is some<span /> sample</i> test text</b> + * // If "element" is <span /> and "parent" is <i>: + * // <b>This <i>is some</i><span /><i> sample</i> test text</b> + * element.breakParent( parent ); + * @example + * // Before breaking: + * // <b>This <i>is some<span /> sample</i> test text</b> + * // If "element" is <span /> and "parent" is <b>: + * // <b>This <i>is some</i></b><span /><b><i> sample</i> test text</b> + * element.breakParent( parent ); + */ + breakParent : function( parent ) + { + var range = new CKEDITOR.dom.range( this.getDocument() ); + + // We'll be extracting part of this element, so let's use our + // range to get the correct piece. + range.setStartAfter( this ); + range.setEndAfter( parent ); + + // Extract it. + var docFrag = range.extractContents(); + + // Move the element outside the broken element. + range.insertNode( this.remove() ); + + // Re-insert the extracted piece after the element. + docFrag.insertAfterNode( this ); + }, + + contains : + CKEDITOR.env.ie || CKEDITOR.env.webkit ? + function( node ) + { + var $ = this.$; + + return node.type != CKEDITOR.NODE_ELEMENT ? + $.contains( node.getParent().$ ) : + $ != node.$ && $.contains( node.$ ); + } + : + function( node ) + { + return !!( this.$.compareDocumentPosition( node.$ ) & 16 ); + }, + + /** + * Moves the selection focus to this element. + * @function + * @param {Boolean} defer Whether to asynchronously defer the + * execution by 100 ms. + * @example + * var element = CKEDITOR.document.getById( 'myTextarea' ); + * <b>element.focus()</b>; + */ + focus : ( function() + { + function exec() + { + // IE throws error if the element is not visible. + try + { + this.$.focus(); + } + catch (e) + {} + } + + return function( defer ) + { + if ( defer ) + CKEDITOR.tools.setTimeout( exec, 100, this ); + else + exec.call( this ); + }; + })(), + + /** + * Gets the inner HTML of this element. + * @returns {String} The inner HTML of this element. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<div><b>Example</b></div>' ); + * alert( <b>p.getHtml()</b> ); // "<b>Example</b>" + */ + getHtml : function() + { + var retval = this.$.innerHTML; + // Strip <?xml:namespace> tags in IE. (#3341). + return CKEDITOR.env.ie ? retval.replace( /<\?[^>]*>/g, '' ) : retval; + }, + + getOuterHtml : function() + { + if ( this.$.outerHTML ) + { + // IE includes the <?xml:namespace> tag in the outerHTML of + // namespaced element. So, we must strip it here. (#3341) + return this.$.outerHTML.replace( /<\?[^>]*>/, '' ); + } + + var tmpDiv = this.$.ownerDocument.createElement( 'div' ); + tmpDiv.appendChild( this.$.cloneNode( true ) ); + return tmpDiv.innerHTML; + }, + + /** + * Sets the inner HTML of this element. + * @param {String} html The HTML to be set for this element. + * @returns {String} The inserted HTML. + * @example + * var p = new CKEDITOR.dom.element( 'p' ); + * <b>p.setHtml( '<b>Inner</b> HTML' );</b> + * + * // result: "<p><b>Inner</b> HTML</p>" + */ + setHtml : function( html ) + { + return ( this.$.innerHTML = html ); + }, + + /** + * Sets the element contents as plain text. + * @param {String} text The text to be set. + * @returns {String} The inserted text. + * @example + * var element = new CKEDITOR.dom.element( 'div' ); + * element.setText( 'A > B & C < D' ); + * alert( element.innerHTML ); // "A &gt; B &amp; C &lt; D" + */ + setText : function( text ) + { + CKEDITOR.dom.element.prototype.setText = ( this.$.innerText != undefined ) ? + function ( text ) + { + return this.$.innerText = text; + } : + function ( text ) + { + return this.$.textContent = text; + }; + + return this.setText( text ); + }, + + /** + * Gets the value of an element attribute. + * @function + * @param {String} name The attribute name. + * @returns {String} The attribute value or null if not defined. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<input type="text" />' ); + * alert( <b>element.getAttribute( 'type' )</b> ); // "text" + */ + getAttribute : (function() + { + var standard = function( name ) + { + return this.$.getAttribute( name, 2 ); + }; + + if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) + { + return function( name ) + { + switch ( name ) + { + case 'class': + name = 'className'; + break; + + case 'http-equiv': + name = 'httpEquiv'; + break; + + case 'name': + return this.$.name; + + case 'tabindex': + var tabIndex = standard.call( this, name ); + + // IE returns tabIndex=0 by default for all + // elements. For those elements, + // getAtrribute( 'tabindex', 2 ) returns 32768 + // instead. So, we must make this check to give a + // uniform result among all browsers. + if ( tabIndex !== 0 && this.$.tabIndex === 0 ) + tabIndex = null; + + return tabIndex; + break; + + case 'checked': + { + var attr = this.$.attributes.getNamedItem( name ), + attrValue = attr.specified ? attr.nodeValue // For value given by parser. + : this.$.checked; // For value created via DOM interface. + + return attrValue ? 'checked' : null; + } + + case 'hspace': + case 'value': + return this.$[ name ]; + + case 'style': + // IE does not return inline styles via getAttribute(). See #2947. + return this.$.style.cssText; + } + + return standard.call( this, name ); + }; + } + else + return standard; + })(), + + getChildren : function() + { + return new CKEDITOR.dom.nodeList( this.$.childNodes ); + }, + + /** + * Gets the current computed value of one of the element CSS style + * properties. + * @function + * @param {String} propertyName The style property name. + * @returns {String} The property value. + * @example + * var element = new CKEDITOR.dom.element( 'span' ); + * alert( <b>element.getComputedStyle( 'display' )</b> ); // "inline" + */ + getComputedStyle : + CKEDITOR.env.ie ? + function( propertyName ) + { + return this.$.currentStyle[ CKEDITOR.tools.cssStyleToDomStyle( propertyName ) ]; + } + : + function( propertyName ) + { + return this.getWindow().$.getComputedStyle( this.$, '' ).getPropertyValue( propertyName ); + }, + + /** + * Gets the DTD entries for this element. + * @returns {Object} An object containing the list of elements accepted + * by this element. + */ + getDtd : function() + { + var dtd = CKEDITOR.dtd[ this.getName() ]; + + this.getDtd = function() + { + return dtd; + }; + + return dtd; + }, + + getElementsByTag : CKEDITOR.dom.document.prototype.getElementsByTag, + + /** + * Gets the computed tabindex for this element. + * @function + * @returns {Number} The tabindex value. + * @example + * var element = CKEDITOR.document.getById( 'myDiv' ); + * alert( <b>element.getTabIndex()</b> ); // e.g. "-1" + */ + getTabIndex : + CKEDITOR.env.ie ? + function() + { + var tabIndex = this.$.tabIndex; + + // IE returns tabIndex=0 by default for all elements. In + // those cases we must check that the element really has + // the tabindex attribute set to zero, or it is one of + // those element that should have zero by default. + if ( tabIndex === 0 && !CKEDITOR.dtd.$tabIndex[ this.getName() ] && parseInt( this.getAttribute( 'tabindex' ), 10 ) !== 0 ) + tabIndex = -1; + + return tabIndex; + } + : CKEDITOR.env.webkit ? + function() + { + var tabIndex = this.$.tabIndex; + + // Safari returns "undefined" for elements that should not + // have tabindex (like a div). So, we must try to get it + // from the attribute. + // https://bugs.webkit.org/show_bug.cgi?id=20596 + if ( tabIndex == undefined ) + { + tabIndex = parseInt( this.getAttribute( 'tabindex' ), 10 ); + + // If the element don't have the tabindex attribute, + // then we should return -1. + if ( isNaN( tabIndex ) ) + tabIndex = -1; + } + + return tabIndex; + } + : + function() + { + return this.$.tabIndex; + }, + + /** + * Gets the text value of this element. + * + * Only in IE (which uses innerText), <br> will cause linebreaks, + * and sucessive whitespaces (including line breaks) will be reduced to + * a single space. This behavior is ok for us, for now. It may change + * in the future. + * @returns {String} The text value. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<div>Same <i>text</i>.</div>' ); + * alert( <b>element.getText()</b> ); // "Sample text." + */ + getText : function() + { + return this.$.textContent || this.$.innerText || ''; + }, + + /** + * Gets the window object that contains this element. + * @returns {CKEDITOR.dom.window} The window object. + * @example + */ + getWindow : function() + { + return this.getDocument().getWindow(); + }, + + /** + * Gets the value of the "id" attribute of this element. + * @returns {String} The element id, or null if not available. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<p id="myId"></p>' ); + * alert( <b>element.getId()</b> ); // "myId" + */ + getId : function() + { + return this.$.id || null; + }, + + /** + * Gets the value of the "name" attribute of this element. + * @returns {String} The element name, or null if not available. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<input name="myName"></input>' ); + * alert( <b>element.getNameAtt()</b> ); // "myName" + */ + getNameAtt : function() + { + return this.$.name || null; + }, + + /** + * Gets the element name (tag name). The returned name is guaranteed to + * be always full lowercased. + * @returns {String} The element name. + * @example + * var element = new CKEDITOR.dom.element( 'span' ); + * alert( <b>element.getName()</b> ); // "span" + */ + getName : function() + { + // Cache the lowercased name inside a closure. + var nodeName = this.$.nodeName.toLowerCase(); + + if ( CKEDITOR.env.ie && ! ( document.documentMode > 8 ) ) + { + var scopeName = this.$.scopeName; + if ( scopeName != 'HTML' ) + nodeName = scopeName.toLowerCase() + ':' + nodeName; + } + + return ( + this.getName = function() + { + return nodeName; + })(); + }, + + /** + * Gets the value set to this element. This value is usually available + * for form field elements. + * @returns {String} The element value. + */ + getValue : function() + { + return this.$.value; + }, + + /** + * Gets the first child node of this element. + * @param {Function} evaluator Filtering the result node. + * @returns {CKEDITOR.dom.node} The first child node or null if not + * available. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<div><b>Example</b></div>' ); + * var first = <b>element.getFirst()</b>; + * alert( first.getName() ); // "b" + */ + getFirst : function( evaluator ) + { + var first = this.$.firstChild, + retval = first && new CKEDITOR.dom.node( first ); + if ( retval && evaluator && !evaluator( retval ) ) + retval = retval.getNext( evaluator ); + + return retval; + }, + + /** + * @param {Function} evaluator Filtering the result node. + */ + getLast : function( evaluator ) + { + var last = this.$.lastChild, + retval = last && new CKEDITOR.dom.node( last ); + if ( retval && evaluator && !evaluator( retval ) ) + retval = retval.getPrevious( evaluator ); + + return retval; + }, + + getStyle : function( name ) + { + return this.$.style[ CKEDITOR.tools.cssStyleToDomStyle( name ) ]; + }, + + /** + * Checks if the element name matches one or more names. + * @param {String} name[,name[,...]] One or more names to be checked. + * @returns {Boolean} true if the element name matches any of the names. + * @example + * var element = new CKEDITOR.element( 'span' ); + * alert( <b>element.is( 'span' )</b> ); "true" + * alert( <b>element.is( 'p', 'span' )</b> ); "true" + * alert( <b>element.is( 'p' )</b> ); "false" + * alert( <b>element.is( 'p', 'div' )</b> ); "false" + */ + is : function() + { + var name = this.getName(); + for ( var i = 0 ; i < arguments.length ; i++ ) + { + if ( arguments[ i ] == name ) + return true; + } + return false; + }, + + isEditable : function() + { + if ( this.isReadOnly() ) + return false; + + // Get the element name. + var name = this.getName(); + + // Get the element DTD (defaults to span for unknown elements). + var dtd = !CKEDITOR.dtd.$nonEditable[ name ] + && ( CKEDITOR.dtd[ name ] || CKEDITOR.dtd.span ); + + // In the DTD # == text node. + return ( dtd && dtd['#'] ); + }, + + isIdentical : function( otherElement ) + { + if ( this.getName() != otherElement.getName() ) + return false; + + var thisAttribs = this.$.attributes, + otherAttribs = otherElement.$.attributes; + + var thisLength = thisAttribs.length, + otherLength = otherAttribs.length; + + for ( var i = 0 ; i < thisLength ; i++ ) + { + var attribute = thisAttribs[ i ]; + + if ( attribute.nodeName == '_moz_dirty' ) + continue; + + if ( ( !CKEDITOR.env.ie || ( attribute.specified && attribute.nodeName != 'data-cke-expando' ) ) && attribute.nodeValue != otherElement.getAttribute( attribute.nodeName ) ) + return false; + } + + // For IE, we have to for both elements, because it's difficult to + // know how the atttibutes collection is organized in its DOM. + if ( CKEDITOR.env.ie ) + { + for ( i = 0 ; i < otherLength ; i++ ) + { + attribute = otherAttribs[ i ]; + if ( attribute.specified && attribute.nodeName != 'data-cke-expando' + && attribute.nodeValue != this.getAttribute( attribute.nodeName ) ) + return false; + } + } + + return true; + }, + + /** + * Checks if this element is visible. May not work if the element is + * child of an element with visibility set to "hidden", but works well + * on the great majority of cases. + * @return {Boolean} True if the element is visible. + */ + isVisible : function() + { + var isVisible = !!this.$.offsetHeight && this.getComputedStyle( 'visibility' ) != 'hidden', + elementWindow, + elementWindowFrame; + + // Webkit and Opera report non-zero offsetHeight despite that + // element is inside an invisible iframe. (#4542) + if ( isVisible && ( CKEDITOR.env.webkit || CKEDITOR.env.opera ) ) + { + elementWindow = this.getWindow(); + + if ( !elementWindow.equals( CKEDITOR.document.getWindow() ) + && ( elementWindowFrame = elementWindow.$.frameElement ) ) + { + isVisible = new CKEDITOR.dom.element( elementWindowFrame ).isVisible(); + } + } + + return isVisible; + }, + + /** + * Whether it's an empty inline elements which has no visual impact when removed. + */ + isEmptyInlineRemoveable : function() + { + if ( !CKEDITOR.dtd.$removeEmpty[ this.getName() ] ) + return false; + + var children = this.getChildren(); + for ( var i = 0, count = children.count(); i < count; i++ ) + { + var child = children.getItem( i ); + + if ( child.type == CKEDITOR.NODE_ELEMENT && child.data( 'cke-bookmark' ) ) + continue; + + if ( child.type == CKEDITOR.NODE_ELEMENT && !child.isEmptyInlineRemoveable() + || child.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim( child.getText() ) ) + { + return false; + } + } + return true; + }, + + /** + * Checks if the element has any defined attributes. + * @function + * @returns {Boolean} True if the element has attributes. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<div title="Test">Example</div>' ); + * alert( <b>element.hasAttributes()</b> ); // "true" + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<div>Example</div>' ); + * alert( <b>element.hasAttributes()</b> ); // "false" + */ + hasAttributes : + CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ? + function() + { + var attributes = this.$.attributes; + + for ( var i = 0 ; i < attributes.length ; i++ ) + { + var attribute = attributes[i]; + + switch ( attribute.nodeName ) + { + case 'class' : + // IE has a strange bug. If calling removeAttribute('className'), + // the attributes collection will still contain the "class" + // attribute, which will be marked as "specified", even if the + // outerHTML of the element is not displaying the class attribute. + // Note : I was not able to reproduce it outside the editor, + // but I've faced it while working on the TC of #1391. + if ( this.getAttribute( 'class' ) ) + return true; + + // Attributes to be ignored. + case 'data-cke-expando' : + continue; + + /*jsl:fallthru*/ + + default : + if ( attribute.specified ) + return true; + } + } + + return false; + } + : + function() + { + var attrs = this.$.attributes, + attrsNum = attrs.length; + + // The _moz_dirty attribute might get into the element after pasting (#5455) + var execludeAttrs = { 'data-cke-expando' : 1, _moz_dirty : 1 }; + + return attrsNum > 0 && + ( attrsNum > 2 || + !execludeAttrs[ attrs[0].nodeName ] || + ( attrsNum == 2 && !execludeAttrs[ attrs[1].nodeName ] ) ); + }, + + /** + * Checks if the specified attribute is defined for this element. + * @returns {Boolean} True if the specified attribute is defined. + * @param {String} name The attribute name. + * @example + */ + hasAttribute : (function() + { + function standard( name ) + { + var $attr = this.$.attributes.getNamedItem( name ); + return !!( $attr && $attr.specified ); + } + + return ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) ? + function( name ) + { + // On IE < 8 the name attribute cannot be retrieved + // right after the element creation and setting the + // name with setAttribute. + if ( name == 'name' ) + return !!this.$.name; + + return standard.call( this, name ); + } + : + standard; + })(), + + /** + * Hides this element (display:none). + * @example + * var element = CKEDITOR.dom.element.getById( 'myElement' ); + * <b>element.hide()</b>; + */ + hide : function() + { + this.setStyle( 'display', 'none' ); + }, + + moveChildren : function( target, toStart ) + { + var $ = this.$; + target = target.$; + + if ( $ == target ) + return; + + var child; + + if ( toStart ) + { + while ( ( child = $.lastChild ) ) + target.insertBefore( $.removeChild( child ), target.firstChild ); + } + else + { + while ( ( child = $.firstChild ) ) + target.appendChild( $.removeChild( child ) ); + } + }, + + /** + * Merges sibling elements that are identical to this one.<br> + * <br> + * Identical child elements are also merged. For example:<br> + * <b><i></i></b><b><i></i></b> => <b><i></i></b> + * @function + * @param {Boolean} [inlineOnly] Allow only inline elements to be merged. Defaults to "true". + */ + mergeSiblings : ( function() + { + function mergeElements( element, sibling, isNext ) + { + if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT ) + { + // Jumping over bookmark nodes and empty inline elements, e.g. <b><i></i></b>, + // queuing them to be moved later. (#5567) + var pendingNodes = []; + + while ( sibling.data( 'cke-bookmark' ) + || sibling.isEmptyInlineRemoveable() ) + { + pendingNodes.push( sibling ); + sibling = isNext ? sibling.getNext() : sibling.getPrevious(); + if ( !sibling || sibling.type != CKEDITOR.NODE_ELEMENT ) + return; + } + + if ( element.isIdentical( sibling ) ) + { + // Save the last child to be checked too, to merge things like + // <b><i></i></b><b><i></i></b> => <b><i></i></b> + var innerSibling = isNext ? element.getLast() : element.getFirst(); + + // Move pending nodes first into the target element. + while( pendingNodes.length ) + pendingNodes.shift().move( element, !isNext ); + + sibling.moveChildren( element, !isNext ); + sibling.remove(); + + // Now check the last inner child (see two comments above). + if ( innerSibling && innerSibling.type == CKEDITOR.NODE_ELEMENT ) + innerSibling.mergeSiblings(); + } + } + } + + return function( inlineOnly ) + { + if ( ! ( inlineOnly === false + || CKEDITOR.dtd.$removeEmpty[ this.getName() ] + || this.is( 'a' ) ) ) // Merge empty links and anchors also. (#5567) + { + return; + } + + mergeElements( this, this.getNext(), true ); + mergeElements( this, this.getPrevious() ); + }; + } )(), + + /** + * Shows this element (display it). + * @example + * var element = CKEDITOR.dom.element.getById( 'myElement' ); + * <b>element.show()</b>; + */ + show : function() + { + this.setStyles( + { + display : '', + visibility : '' + }); + }, + + /** + * Sets the value of an element attribute. + * @param {String} name The name of the attribute. + * @param {String} value The value to be set to the attribute. + * @function + * @returns {CKEDITOR.dom.element} This element instance. + * @example + * var element = CKEDITOR.dom.element.getById( 'myElement' ); + * <b>element.setAttribute( 'class', 'myClass' )</b>; + * <b>element.setAttribute( 'title', 'This is an example' )</b>; + */ + setAttribute : (function() + { + var standard = function( name, value ) + { + this.$.setAttribute( name, value ); + return this; + }; + + if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) + { + return function( name, value ) + { + if ( name == 'class' ) + this.$.className = value; + else if ( name == 'style' ) + this.$.style.cssText = value; + else if ( name == 'tabindex' ) // Case sensitive. + this.$.tabIndex = value; + else if ( name == 'checked' ) + this.$.checked = value; + else + standard.apply( this, arguments ); + return this; + }; + } + else if ( CKEDITOR.env.ie8Compat && CKEDITOR.env.secure ) + { + return function( name, value ) + { + // IE8 throws error when setting src attribute to non-ssl value. (#7847) + if ( name == 'src' && value.match( /^http:\/\// ) ) + try { standard.apply( this, arguments ); } catch( e ){} + else + standard.apply( this, arguments ); + return this; + }; + } + else + return standard; + })(), + + /** + * Sets the value of several element attributes. + * @param {Object} attributesPairs An object containing the names and + * values of the attributes. + * @returns {CKEDITOR.dom.element} This element instance. + * @example + * var element = CKEDITOR.dom.element.getById( 'myElement' ); + * <b>element.setAttributes({ + * 'class' : 'myClass', + * 'title' : 'This is an example' })</b>; + */ + setAttributes : function( attributesPairs ) + { + for ( var name in attributesPairs ) + this.setAttribute( name, attributesPairs[ name ] ); + return this; + }, + + /** + * Sets the element value. This function is usually used with form + * field element. + * @param {String} value The element value. + * @returns {CKEDITOR.dom.element} This element instance. + */ + setValue : function( value ) + { + this.$.value = value; + return this; + }, + + /** + * Removes an attribute from the element. + * @param {String} name The attribute name. + * @function + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA"></div>' ); + * element.removeAttribute( 'class' ); + */ + removeAttribute : (function() + { + var standard = function( name ) + { + this.$.removeAttribute( name ); + }; + + if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) + { + return function( name ) + { + if ( name == 'class' ) + name = 'className'; + else if ( name == 'tabindex' ) + name = 'tabIndex'; + standard.call( this, name ); + }; + } + else + return standard; + })(), + + removeAttributes : function ( attributes ) + { + if ( CKEDITOR.tools.isArray( attributes ) ) + { + for ( var i = 0 ; i < attributes.length ; i++ ) + this.removeAttribute( attributes[ i ] ); + } + else + { + for ( var attr in attributes ) + attributes.hasOwnProperty( attr ) && this.removeAttribute( attr ); + } + }, + + /** + * Removes a style from the element. + * @param {String} name The style name. + * @function + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<div style="display:none"></div>' ); + * element.removeStyle( 'display' ); + */ + removeStyle : function( name ) + { + this.setStyle( name, '' ); + if ( this.$.style.removeAttribute ) + this.$.style.removeAttribute( CKEDITOR.tools.cssStyleToDomStyle( name ) ); + + if ( !this.$.style.cssText ) + this.removeAttribute( 'style' ); + }, + + /** + * Sets the value of an element style. + * @param {String} name The name of the style. The CSS naming notation + * must be used (e.g. "background-color"). + * @param {String} value The value to be set to the style. + * @returns {CKEDITOR.dom.element} This element instance. + * @example + * var element = CKEDITOR.dom.element.getById( 'myElement' ); + * <b>element.setStyle( 'background-color', '#ff0000' )</b>; + * <b>element.setStyle( 'margin-top', '10px' )</b>; + * <b>element.setStyle( 'float', 'right' )</b>; + */ + setStyle : function( name, value ) + { + this.$.style[ CKEDITOR.tools.cssStyleToDomStyle( name ) ] = value; + return this; + }, + + /** + * Sets the value of several element styles. + * @param {Object} stylesPairs An object containing the names and + * values of the styles. + * @returns {CKEDITOR.dom.element} This element instance. + * @example + * var element = CKEDITOR.dom.element.getById( 'myElement' ); + * <b>element.setStyles({ + * 'position' : 'absolute', + * 'float' : 'right' })</b>; + */ + setStyles : function( stylesPairs ) + { + for ( var name in stylesPairs ) + this.setStyle( name, stylesPairs[ name ] ); + return this; + }, + + /** + * Sets the opacity of an element. + * @param {Number} opacity A number within the range [0.0, 1.0]. + * @example + * var element = CKEDITOR.dom.element.getById( 'myElement' ); + * <b>element.setOpacity( 0.75 )</b>; + */ + setOpacity : function( opacity ) + { + if ( CKEDITOR.env.ie ) + { + opacity = Math.round( opacity * 100 ); + this.setStyle( 'filter', opacity >= 100 ? '' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')' ); + } + else + this.setStyle( 'opacity', opacity ); + }, + + /** + * Makes the element and its children unselectable. + * @function + * @example + * var element = CKEDITOR.dom.element.getById( 'myElement' ); + * element.unselectable(); + */ + unselectable : + CKEDITOR.env.gecko ? + function() + { + this.$.style.MozUserSelect = 'none'; + this.on( 'dragstart', function( evt ) { evt.data.preventDefault(); } ); + } + : CKEDITOR.env.webkit ? + function() + { + this.$.style.KhtmlUserSelect = 'none'; + this.on( 'dragstart', function( evt ) { evt.data.preventDefault(); } ); + } + : + function() + { + if ( CKEDITOR.env.ie || CKEDITOR.env.opera ) + { + var element = this.$, + e, + i = 0; + + element.unselectable = 'on'; + + while ( ( e = element.all[ i++ ] ) ) + { + switch ( e.tagName.toLowerCase() ) + { + case 'iframe' : + case 'textarea' : + case 'input' : + case 'select' : + /* Ignore the above tags */ + break; + default : + e.unselectable = 'on'; + } + } + } + }, + + getPositionedAncestor : function() + { + var current = this; + while ( current.getName() != 'html' ) + { + if ( current.getComputedStyle( 'position' ) != 'static' ) + return current; + + current = current.getParent(); + } + return null; + }, + + getDocumentPosition : function( refDocument ) + { + var x = 0, y = 0, + body = this.getDocument().getBody(), + quirks = this.getDocument().$.compatMode == 'BackCompat'; + + var doc = this.getDocument(); + + if ( document.documentElement[ "getBoundingClientRect" ] ) + { + var box = this.$.getBoundingClientRect(), + $doc = doc.$, + $docElem = $doc.documentElement; + + var clientTop = $docElem.clientTop || body.$.clientTop || 0, + clientLeft = $docElem.clientLeft || body.$.clientLeft || 0, + needAdjustScrollAndBorders = true; + + /* + * #3804: getBoundingClientRect() works differently on IE and non-IE + * browsers, regarding scroll positions. + * + * On IE, the top position of the <html> element is always 0, no matter + * how much you scrolled down. + * + * On other browsers, the top position of the <html> element is negative + * scrollTop. + */ + if ( CKEDITOR.env.ie ) + { + var inDocElem = doc.getDocumentElement().contains( this ), + inBody = doc.getBody().contains( this ); + + needAdjustScrollAndBorders = ( quirks && inBody ) || ( !quirks && inDocElem ); + } + + if ( needAdjustScrollAndBorders ) + { + x = box.left + ( !quirks && $docElem.scrollLeft || body.$.scrollLeft ); + x -= clientLeft; + y = box.top + ( !quirks && $docElem.scrollTop || body.$.scrollTop ); + y -= clientTop; + } + } + else + { + var current = this, previous = null, offsetParent; + while ( current && !( current.getName() == 'body' || current.getName() == 'html' ) ) + { + x += current.$.offsetLeft - current.$.scrollLeft; + y += current.$.offsetTop - current.$.scrollTop; + + // Opera includes clientTop|Left into offsetTop|Left. + if ( !current.equals( this ) ) + { + x += ( current.$.clientLeft || 0 ); + y += ( current.$.clientTop || 0 ); + } + + var scrollElement = previous; + while ( scrollElement && !scrollElement.equals( current ) ) + { + x -= scrollElement.$.scrollLeft; + y -= scrollElement.$.scrollTop; + scrollElement = scrollElement.getParent(); + } + + previous = current; + current = ( offsetParent = current.$.offsetParent ) ? + new CKEDITOR.dom.element( offsetParent ) : null; + } + } + + if ( refDocument ) + { + var currentWindow = this.getWindow(), + refWindow = refDocument.getWindow(); + + if ( !currentWindow.equals( refWindow ) && currentWindow.$.frameElement ) + { + var iframePosition = ( new CKEDITOR.dom.element( currentWindow.$.frameElement ) ).getDocumentPosition( refDocument ); + + x += iframePosition.x; + y += iframePosition.y; + } + } + + if ( !document.documentElement[ "getBoundingClientRect" ] ) + { + // In Firefox, we'll endup one pixel before the element positions, + // so we must add it here. + if ( CKEDITOR.env.gecko && !quirks ) + { + x += this.$.clientLeft ? 1 : 0; + y += this.$.clientTop ? 1 : 0; + } + } + + return { x : x, y : y }; + }, + + scrollIntoView : function( alignTop ) + { + // Get the element window. + var win = this.getWindow(), + winHeight = win.getViewPaneSize().height; + + // Starts from the offset that will be scrolled with the negative value of + // the visible window height. + var offset = winHeight * -1; + + // Append the view pane's height if align to top. + // Append element height if we are aligning to the bottom. + if ( alignTop ) + offset += winHeight; + else + { + offset += this.$.offsetHeight || 0; + + // Consider the margin in the scroll, which is ok for our current needs, but + // needs investigation if we will be using this function in other places. + offset += parseInt( this.getComputedStyle( 'marginBottom' ) || 0, 10 ) || 0; + } + + // Append the offsets for the entire element hierarchy. + var elementPosition = this.getDocumentPosition(); + offset += elementPosition.y; + + // offset value might be out of range(nagative), fix it(#3692). + offset = offset < 0 ? 0 : offset; + + // Scroll the window to the desired position, if not already visible(#3795). + var currentScroll = win.getScrollPosition().y; + if ( offset > currentScroll || offset < currentScroll - winHeight ) + win.$.scrollTo( 0, offset ); + }, + + setState : function( state ) + { + switch ( state ) + { + case CKEDITOR.TRISTATE_ON : + this.addClass( 'cke_on' ); + this.removeClass( 'cke_off' ); + this.removeClass( 'cke_disabled' ); + break; + case CKEDITOR.TRISTATE_DISABLED : + this.addClass( 'cke_disabled' ); + this.removeClass( 'cke_off' ); + this.removeClass( 'cke_on' ); + break; + default : + this.addClass( 'cke_off' ); + this.removeClass( 'cke_on' ); + this.removeClass( 'cke_disabled' ); + break; + } + }, + + /** + * Returns the inner document of this IFRAME element. + * @returns {CKEDITOR.dom.document} The inner document. + */ + getFrameDocument : function() + { + var $ = this.$; + + try + { + // In IE, with custom document.domain, it may happen that + // the iframe is not yet available, resulting in "Access + // Denied" for the following property access. + $.contentWindow.document; + } + catch ( e ) + { + // Trick to solve this issue, forcing the iframe to get ready + // by simply setting its "src" property. + $.src = $.src; + + // In IE6 though, the above is not enough, so we must pause the + // execution for a while, giving it time to think. + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 ) + { + window.showModalDialog( + 'javascript:document.write("' + + '<script>' + + 'window.setTimeout(' + + 'function(){window.close();}' + + ',50);' + + '</script>")' ); + } + } + + return $ && new CKEDITOR.dom.document( $.contentWindow.document ); + }, + + /** + * Copy all the attributes from one node to the other, kinda like a clone + * skipAttributes is an object with the attributes that must NOT be copied. + * @param {CKEDITOR.dom.element} dest The destination element. + * @param {Object} skipAttributes A dictionary of attributes to skip. + * @example + */ + copyAttributes : function( dest, skipAttributes ) + { + var attributes = this.$.attributes; + skipAttributes = skipAttributes || {}; + + for ( var n = 0 ; n < attributes.length ; n++ ) + { + var attribute = attributes[n]; + + // Lowercase attribute name hard rule is broken for + // some attribute on IE, e.g. CHECKED. + var attrName = attribute.nodeName.toLowerCase(), + attrValue; + + // We can set the type only once, so do it with the proper value, not copying it. + if ( attrName in skipAttributes ) + continue; + + if ( attrName == 'checked' && ( attrValue = this.getAttribute( attrName ) ) ) + dest.setAttribute( attrName, attrValue ); + // IE BUG: value attribute is never specified even if it exists. + else if ( attribute.specified || + ( CKEDITOR.env.ie && attribute.nodeValue && attrName == 'value' ) ) + { + attrValue = this.getAttribute( attrName ); + if ( attrValue === null ) + attrValue = attribute.nodeValue; + + dest.setAttribute( attrName, attrValue ); + } + } + + // The style: + if ( this.$.style.cssText !== '' ) + dest.$.style.cssText = this.$.style.cssText; + }, + + /** + * Changes the tag name of the current element. + * @param {String} newTag The new tag for the element. + */ + renameNode : function( newTag ) + { + // If it's already correct exit here. + if ( this.getName() == newTag ) + return; + + var doc = this.getDocument(); + + // Create the new node. + var newNode = new CKEDITOR.dom.element( newTag, doc ); + + // Copy all attributes. + this.copyAttributes( newNode ); + + // Move children to the new node. + this.moveChildren( newNode ); + + // Replace the node. + this.getParent() && this.$.parentNode.replaceChild( newNode.$, this.$ ); + newNode.$[ 'data-cke-expando' ] = this.$[ 'data-cke-expando' ]; + this.$ = newNode.$; + }, + + /** + * Gets a DOM tree descendant under the current node. + * @param {Array|Number} indices The child index or array of child indices under the node. + * @returns {CKEDITOR.dom.node} The specified DOM child under the current node. Null if child does not exist. + * @example + * var strong = p.getChild(0); + */ + getChild : function( indices ) + { + var rawNode = this.$; + + if ( !indices.slice ) + rawNode = rawNode.childNodes[ indices ]; + else + { + while ( indices.length > 0 && rawNode ) + rawNode = rawNode.childNodes[ indices.shift() ]; + } + + return rawNode ? new CKEDITOR.dom.node( rawNode ) : null; + }, + + getChildCount : function() + { + return this.$.childNodes.length; + }, + + disableContextMenu : function() + { + this.on( 'contextmenu', function( event ) + { + // Cancel the browser context menu. + if ( !event.data.getTarget().hasClass( 'cke_enable_context_menu' ) ) + event.data.preventDefault(); + } ); + }, + + /** + * Gets element's direction. Supports both CSS 'direction' prop and 'dir' attr. + */ + getDirection : function( useComputed ) + { + return useComputed ? + this.getComputedStyle( 'direction' ) + // Webkit: offline element returns empty direction (#8053). + || this.getDirection() + || this.getDocument().$.dir + || this.getDocument().getBody().getDirection( 1 ) + : this.getStyle( 'direction' ) || this.getAttribute( 'dir' ); + }, + + /** + * Gets, sets and removes custom data to be stored as HTML5 data-* attributes. + * @param {String} name The name of the attribute, excluding the 'data-' part. + * @param {String} [value] The value to set. If set to false, the attribute will be removed. + * @example + * element.data( 'extra-info', 'test' ); // appended the attribute data-extra-info="test" to the element + * alert( element.data( 'extra-info' ) ); // "test" + * element.data( 'extra-info', false ); // remove the data-extra-info attribute from the element + */ + data : function ( name, value ) + { + name = 'data-' + name; + if ( value === undefined ) + return this.getAttribute( name ); + else if ( value === false ) + this.removeAttribute( name ); + else + this.setAttribute( name, value ); + + return null; + } + }); + +( function() +{ + var sides = { + width : [ "border-left-width", "border-right-width","padding-left", "padding-right" ], + height : [ "border-top-width", "border-bottom-width", "padding-top", "padding-bottom" ] + }; + + function marginAndPaddingSize( type ) + { + var adjustment = 0; + for ( var i = 0, len = sides[ type ].length; i < len; i++ ) + adjustment += parseInt( this.getComputedStyle( sides [ type ][ i ] ) || 0, 10 ) || 0; + return adjustment; + } + + /** + * Sets the element size considering the box model. + * @name CKEDITOR.dom.element.prototype.setSize + * @function + * @param {String} type The dimension to set. It accepts "width" and "height". + * @param {Number} size The length unit in px. + * @param {Boolean} isBorderBox Apply the size based on the border box model. + */ + CKEDITOR.dom.element.prototype.setSize = function( type, size, isBorderBox ) + { + if ( typeof size == 'number' ) + { + if ( isBorderBox && !( CKEDITOR.env.ie && CKEDITOR.env.quirks ) ) + size -= marginAndPaddingSize.call( this, type ); + + this.setStyle( type, size + 'px' ); + } + }; + + /** + * Gets the element size, possibly considering the box model. + * @name CKEDITOR.dom.element.prototype.getSize + * @function + * @param {String} type The dimension to get. It accepts "width" and "height". + * @param {Boolean} isBorderBox Get the size based on the border box model. + */ + CKEDITOR.dom.element.prototype.getSize = function( type, isBorderBox ) + { + var size = Math.max( this.$[ 'offset' + CKEDITOR.tools.capitalize( type ) ], + this.$[ 'client' + CKEDITOR.tools.capitalize( type ) ] ) || 0; + + if ( isBorderBox ) + size -= marginAndPaddingSize.call( this, type ); + + return size; + }; +})(); diff --git a/_source/core/dom/elementpath.js b/_source/core/dom/elementpath.js new file mode 100644 index 0000000..6dcd4d4 --- /dev/null +++ b/_source/core/dom/elementpath.js @@ -0,0 +1,119 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + // Elements that may be considered the "Block boundary" in an element path. + var pathBlockElements = { address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,dd:1, legend:1,caption:1 }; + + // Elements that may be considered the "Block limit" in an element path. + var pathBlockLimitElements = { body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,form:1,fieldset:1 }; + + // Check if an element contains any block element. + var checkHasBlock = function( element ) + { + var childNodes = element.getChildren(); + + for ( var i = 0, count = childNodes.count() ; i < count ; i++ ) + { + var child = childNodes.getItem( i ); + + if ( child.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[ child.getName() ] ) + return true; + } + + return false; + }; + + /** + * @class + */ + CKEDITOR.dom.elementPath = function( lastNode ) + { + var block = null; + var blockLimit = null; + var elements = []; + + var e = lastNode; + + while ( e ) + { + if ( e.type == CKEDITOR.NODE_ELEMENT ) + { + if ( !this.lastElement ) + this.lastElement = e; + + var elementName = e.getName(); + if ( CKEDITOR.env.ie && e.$.scopeName != 'HTML' ) + elementName = e.$.scopeName.toLowerCase() + ':' + elementName; + + if ( !blockLimit ) + { + if ( !block && pathBlockElements[ elementName ] ) + block = e; + + if ( pathBlockLimitElements[ elementName ] ) + { + // DIV is considered the Block, if no block is available (#525) + // and if it doesn't contain other blocks. + if ( !block && elementName == 'div' && !checkHasBlock( e ) ) + block = e; + else + blockLimit = e; + } + } + + elements.push( e ); + + if ( elementName == 'body' ) + break; + } + e = e.getParent(); + } + + this.block = block; + this.blockLimit = blockLimit; + this.elements = elements; + }; +})(); + +CKEDITOR.dom.elementPath.prototype = +{ + /** + * Compares this element path with another one. + * @param {CKEDITOR.dom.elementPath} otherPath The elementPath object to be + * compared with this one. + * @returns {Boolean} "true" if the paths are equal, containing the same + * number of elements and the same elements in the same order. + */ + compare : function( otherPath ) + { + var thisElements = this.elements; + var otherElements = otherPath && otherPath.elements; + + if ( !otherElements || thisElements.length != otherElements.length ) + return false; + + for ( var i = 0 ; i < thisElements.length ; i++ ) + { + if ( !thisElements[ i ].equals( otherElements[ i ] ) ) + return false; + } + + return true; + }, + + contains : function( tagNames ) + { + var elements = this.elements; + for ( var i = 0 ; i < elements.length ; i++ ) + { + if ( elements[ i ].getName() in tagNames ) + return elements[ i ]; + } + + return null; + } +}; diff --git a/_source/core/dom/event.js b/_source/core/dom/event.js new file mode 100644 index 0000000..618a110 --- /dev/null +++ b/_source/core/dom/event.js @@ -0,0 +1,145 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dom.event} class, which + * represents the a native DOM event object. + */ + +/** + * Represents a native DOM event object. + * @constructor + * @param {Object} domEvent A native DOM event object. + * @example + */ +CKEDITOR.dom.event = function( domEvent ) +{ + /** + * The native DOM event object represented by this class instance. + * @type Object + * @example + */ + this.$ = domEvent; +}; + +CKEDITOR.dom.event.prototype = +{ + /** + * Gets the key code associated to the event. + * @returns {Number} The key code. + * @example + * alert( event.getKey() ); "65" is "a" has been pressed + */ + getKey : function() + { + return this.$.keyCode || this.$.which; + }, + + /** + * Gets a number represeting the combination of the keys pressed during the + * event. It is the sum with the current key code and the {@link CKEDITOR.CTRL}, + * {@link CKEDITOR.SHIFT} and {@link CKEDITOR.ALT} constants. + * @returns {Number} The number representing the keys combination. + * @example + * alert( event.getKeystroke() == 65 ); // "a" key + * alert( event.getKeystroke() == CKEDITOR.CTRL + 65 ); // CTRL + "a" key + * alert( event.getKeystroke() == CKEDITOR.CTRL + CKEDITOR.SHIFT + 65 ); // CTRL + SHIFT + "a" key + */ + getKeystroke : function() + { + var keystroke = this.getKey(); + + if ( this.$.ctrlKey || this.$.metaKey ) + keystroke += CKEDITOR.CTRL; + + if ( this.$.shiftKey ) + keystroke += CKEDITOR.SHIFT; + + if ( this.$.altKey ) + keystroke += CKEDITOR.ALT; + + return keystroke; + }, + + /** + * Prevents the original behavior of the event to happen. It can optionally + * stop propagating the event in the event chain. + * @param {Boolean} [stopPropagation] Stop propagating this event in the + * event chain. + * @example + * var element = CKEDITOR.document.getById( 'myElement' ); + * element.on( 'click', function( ev ) + * { + * // The DOM event object is passed by the "data" property. + * var domEvent = ev.data; + * // Prevent the click to chave any effect in the element. + * domEvent.preventDefault(); + * }); + */ + preventDefault : function( stopPropagation ) + { + var $ = this.$; + if ( $.preventDefault ) + $.preventDefault(); + else + $.returnValue = false; + + if ( stopPropagation ) + this.stopPropagation(); + }, + + stopPropagation : function() + { + var $ = this.$; + if ( $.stopPropagation ) + $.stopPropagation(); + else + $.cancelBubble = true; + }, + + /** + * Returns the DOM node where the event was targeted to. + * @returns {CKEDITOR.dom.node} The target DOM node. + * @example + * var element = CKEDITOR.document.getById( 'myElement' ); + * element.on( 'click', function( ev ) + * { + * // The DOM event object is passed by the "data" property. + * var domEvent = ev.data; + * // Add a CSS class to the event target. + * domEvent.getTarget().addClass( 'clicked' ); + * }); + */ + + getTarget : function() + { + var rawNode = this.$.target || this.$.srcElement; + return rawNode ? new CKEDITOR.dom.node( rawNode ) : null; + } +}; + +// For the followind constants, we need to go over the Unicode boundaries +// (0x10FFFF) to avoid collision. + +/** + * CTRL key (0x110000). + * @constant + * @example + */ +CKEDITOR.CTRL = 0x110000; + +/** + * SHIFT key (0x220000). + * @constant + * @example + */ +CKEDITOR.SHIFT = 0x220000; + +/** + * ALT key (0x440000). + * @constant + * @example + */ +CKEDITOR.ALT = 0x440000; diff --git a/_source/core/dom/node.js b/_source/core/dom/node.js new file mode 100644 index 0000000..293ce23 --- /dev/null +++ b/_source/core/dom/node.js @@ -0,0 +1,695 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dom.node} class which is the base + * class for classes that represent DOM nodes. + */ + +/** + * Base class for classes representing DOM nodes. This constructor may return + * an instance of a class that inherits from this class, like + * {@link CKEDITOR.dom.element} or {@link CKEDITOR.dom.text}. + * @augments CKEDITOR.dom.domObject + * @param {Object} domNode A native DOM node. + * @constructor + * @see CKEDITOR.dom.element + * @see CKEDITOR.dom.text + * @example + */ +CKEDITOR.dom.node = function( domNode ) +{ + if ( domNode ) + { + switch ( domNode.nodeType ) + { + // Safari don't consider document as element node type. (#3389) + case CKEDITOR.NODE_DOCUMENT : + return new CKEDITOR.dom.document( domNode ); + + case CKEDITOR.NODE_ELEMENT : + return new CKEDITOR.dom.element( domNode ); + + case CKEDITOR.NODE_TEXT : + return new CKEDITOR.dom.text( domNode ); + } + + // Call the base constructor. + CKEDITOR.dom.domObject.call( this, domNode ); + } + + return this; +}; + +CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject(); + +/** + * Element node type. + * @constant + * @example + */ +CKEDITOR.NODE_ELEMENT = 1; + +/** + * Document node type. + * @constant + * @example + */ +CKEDITOR.NODE_DOCUMENT = 9; + +/** + * Text node type. + * @constant + * @example + */ +CKEDITOR.NODE_TEXT = 3; + +/** + * Comment node type. + * @constant + * @example + */ +CKEDITOR.NODE_COMMENT = 8; + +CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11; + +CKEDITOR.POSITION_IDENTICAL = 0; +CKEDITOR.POSITION_DISCONNECTED = 1; +CKEDITOR.POSITION_FOLLOWING = 2; +CKEDITOR.POSITION_PRECEDING = 4; +CKEDITOR.POSITION_IS_CONTAINED = 8; +CKEDITOR.POSITION_CONTAINS = 16; + +CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype, + /** @lends CKEDITOR.dom.node.prototype */ + { + /** + * Makes this node a child of another element. + * @param {CKEDITOR.dom.element} element The target element to which + * this node will be appended. + * @returns {CKEDITOR.dom.element} The target element. + * @example + * var p = new CKEDITOR.dom.element( 'p' ); + * var strong = new CKEDITOR.dom.element( 'strong' ); + * strong.appendTo( p ); + * + * // result: "<p><strong></strong></p>" + */ + appendTo : function( element, toStart ) + { + element.append( this, toStart ); + return element; + }, + + clone : function( includeChildren, cloneId ) + { + var $clone = this.$.cloneNode( includeChildren ); + + var removeIds = function( node ) + { + if ( node.nodeType != CKEDITOR.NODE_ELEMENT ) + return; + + if ( !cloneId ) + node.removeAttribute( 'id', false ); + node.removeAttribute( 'data-cke-expando', false ); + + if ( includeChildren ) + { + var childs = node.childNodes; + for ( var i=0; i < childs.length; i++ ) + removeIds( childs[ i ] ); + } + }; + + // The "id" attribute should never be cloned to avoid duplication. + removeIds( $clone ); + + return new CKEDITOR.dom.node( $clone ); + }, + + hasPrevious : function() + { + return !!this.$.previousSibling; + }, + + hasNext : function() + { + return !!this.$.nextSibling; + }, + + /** + * Inserts this element after a node. + * @param {CKEDITOR.dom.node} node The node that will precede this element. + * @returns {CKEDITOR.dom.node} The node preceding this one after + * insertion. + * @example + * var em = new CKEDITOR.dom.element( 'em' ); + * var strong = new CKEDITOR.dom.element( 'strong' ); + * strong.insertAfter( em ); + * + * // result: "<em></em><strong></strong>" + */ + insertAfter : function( node ) + { + node.$.parentNode.insertBefore( this.$, node.$.nextSibling ); + return node; + }, + + /** + * Inserts this element before a node. + * @param {CKEDITOR.dom.node} node The node that will succeed this element. + * @returns {CKEDITOR.dom.node} The node being inserted. + * @example + * var em = new CKEDITOR.dom.element( 'em' ); + * var strong = new CKEDITOR.dom.element( 'strong' ); + * strong.insertBefore( em ); + * + * // result: "<strong></strong><em></em>" + */ + insertBefore : function( node ) + { + node.$.parentNode.insertBefore( this.$, node.$ ); + return node; + }, + + insertBeforeMe : function( node ) + { + this.$.parentNode.insertBefore( node.$, this.$ ); + return node; + }, + + /** + * Retrieves a uniquely identifiable tree address for this node. + * The tree address returned is an array of integers, with each integer + * indicating a child index of a DOM node, starting from + * <code>document.documentElement</code>. + * + * For example, assuming <code><body></code> is the second child + * of <code><html></code> (<code><head></code> being the first), + * and we would like to address the third child under the + * fourth child of <code><body></code>, the tree address returned would be: + * [1, 3, 2] + * + * The tree address cannot be used for finding back the DOM tree node once + * the DOM tree structure has been modified. + */ + getAddress : function( normalized ) + { + var address = []; + var $documentElement = this.getDocument().$.documentElement; + var node = this.$; + + while ( node && node != $documentElement ) + { + var parentNode = node.parentNode; + + if ( parentNode ) + { + // Get the node index. For performance, call getIndex + // directly, instead of creating a new node object. + address.unshift( this.getIndex.call( { $ : node }, normalized ) ); + } + + node = parentNode; + } + + return address; + }, + + /** + * Gets the document containing this element. + * @returns {CKEDITOR.dom.document} The document. + * @example + * var element = CKEDITOR.document.getById( 'example' ); + * alert( <strong>element.getDocument().equals( CKEDITOR.document )</strong> ); // "true" + */ + getDocument : function() + { + return new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument ); + }, + + getIndex : function( normalized ) + { + // Attention: getAddress depends on this.$ + + var current = this.$, + index = 0; + + while ( ( current = current.previousSibling ) ) + { + // When normalizing, do not count it if this is an + // empty text node or if it's a text node following another one. + if ( normalized && current.nodeType == 3 && + ( !current.nodeValue.length || + ( current.previousSibling && current.previousSibling.nodeType == 3 ) ) ) + { + continue; + } + + index++; + } + + return index; + }, + + getNextSourceNode : function( startFromSibling, nodeType, guard ) + { + // If "guard" is a node, transform it in a function. + if ( guard && !guard.call ) + { + var guardNode = guard; + guard = function( node ) + { + return !node.equals( guardNode ); + }; + } + + var node = ( !startFromSibling && this.getFirst && this.getFirst() ), + parent; + + // Guarding when we're skipping the current element( no children or 'startFromSibling' ). + // send the 'moving out' signal even we don't actually dive into. + if ( !node ) + { + if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false ) + return null; + node = this.getNext(); + } + + while ( !node && ( parent = ( parent || this ).getParent() ) ) + { + // The guard check sends the "true" paramenter to indicate that + // we are moving "out" of the element. + if ( guard && guard( parent, true ) === false ) + return null; + + node = parent.getNext(); + } + + if ( !node ) + return null; + + if ( guard && guard( node ) === false ) + return null; + + if ( nodeType && nodeType != node.type ) + return node.getNextSourceNode( false, nodeType, guard ); + + return node; + }, + + getPreviousSourceNode : function( startFromSibling, nodeType, guard ) + { + if ( guard && !guard.call ) + { + var guardNode = guard; + guard = function( node ) + { + return !node.equals( guardNode ); + }; + } + + var node = ( !startFromSibling && this.getLast && this.getLast() ), + parent; + + // Guarding when we're skipping the current element( no children or 'startFromSibling' ). + // send the 'moving out' signal even we don't actually dive into. + if ( !node ) + { + if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false ) + return null; + node = this.getPrevious(); + } + + while ( !node && ( parent = ( parent || this ).getParent() ) ) + { + // The guard check sends the "true" paramenter to indicate that + // we are moving "out" of the element. + if ( guard && guard( parent, true ) === false ) + return null; + + node = parent.getPrevious(); + } + + if ( !node ) + return null; + + if ( guard && guard( node ) === false ) + return null; + + if ( nodeType && node.type != nodeType ) + return node.getPreviousSourceNode( false, nodeType, guard ); + + return node; + }, + + getPrevious : function( evaluator ) + { + var previous = this.$, retval; + do + { + previous = previous.previousSibling; + retval = previous && new CKEDITOR.dom.node( previous ); + } + while ( retval && evaluator && !evaluator( retval ) ) + return retval; + }, + + /** + * Gets the node that follows this element in its parent's child list. + * @param {Function} evaluator Filtering the result node. + * @returns {CKEDITOR.dom.node} The next node or null if not available. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<div><b>Example</b> <i>next</i></div>' ); + * var first = <strong>element.getFirst().getNext()</strong>; + * alert( first.getName() ); // "i" + */ + getNext : function( evaluator ) + { + var next = this.$, retval; + do + { + next = next.nextSibling; + retval = next && new CKEDITOR.dom.node( next ); + } + while ( retval && evaluator && !evaluator( retval ) ) + return retval; + }, + + /** + * Gets the parent element for this node. + * @returns {CKEDITOR.dom.element} The parent element. + * @example + * var node = editor.document.getBody().getFirst(); + * var parent = node.<strong>getParent()</strong>; + * alert( node.getName() ); // "body" + */ + getParent : function() + { + var parent = this.$.parentNode; + return ( parent && parent.nodeType == 1 ) ? new CKEDITOR.dom.node( parent ) : null; + }, + + getParents : function( closerFirst ) + { + var node = this; + var parents = []; + + do + { + parents[ closerFirst ? 'push' : 'unshift' ]( node ); + } + while ( ( node = node.getParent() ) ) + + return parents; + }, + + getCommonAncestor : function( node ) + { + if ( node.equals( this ) ) + return this; + + if ( node.contains && node.contains( this ) ) + return node; + + var start = this.contains ? this : this.getParent(); + + do + { + if ( start.contains( node ) ) + return start; + } + while ( ( start = start.getParent() ) ); + + return null; + }, + + getPosition : function( otherNode ) + { + var $ = this.$; + var $other = otherNode.$; + + if ( $.compareDocumentPosition ) + return $.compareDocumentPosition( $other ); + + // IE and Safari have no support for compareDocumentPosition. + + if ( $ == $other ) + return CKEDITOR.POSITION_IDENTICAL; + + // Only element nodes support contains and sourceIndex. + if ( this.type == CKEDITOR.NODE_ELEMENT && otherNode.type == CKEDITOR.NODE_ELEMENT ) + { + if ( $.contains ) + { + if ( $.contains( $other ) ) + return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING; + + if ( $other.contains( $ ) ) + return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING; + } + + if ( 'sourceIndex' in $ ) + { + return ( $.sourceIndex < 0 || $other.sourceIndex < 0 ) ? CKEDITOR.POSITION_DISCONNECTED : + ( $.sourceIndex < $other.sourceIndex ) ? CKEDITOR.POSITION_PRECEDING : + CKEDITOR.POSITION_FOLLOWING; + } + } + + // For nodes that don't support compareDocumentPosition, contains + // or sourceIndex, their "address" is compared. + + var addressOfThis = this.getAddress(), + addressOfOther = otherNode.getAddress(), + minLevel = Math.min( addressOfThis.length, addressOfOther.length ); + + // Determinate preceed/follow relationship. + for ( var i = 0 ; i <= minLevel - 1 ; i++ ) + { + if ( addressOfThis[ i ] != addressOfOther[ i ] ) + { + if ( i < minLevel ) + { + return addressOfThis[ i ] < addressOfOther[ i ] ? + CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING; + } + break; + } + } + + // Determinate contains/contained relationship. + return ( addressOfThis.length < addressOfOther.length ) ? + CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING : + CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING; + }, + + /** + * Gets the closest ancestor node of this node, specified by its name. + * @param {String} reference The name of the ancestor node to search or + * an object with the node names to search for. + * @param {Boolean} [includeSelf] Whether to include the current + * node in the search. + * @returns {CKEDITOR.dom.node} The located ancestor node or null if not found. + * @since 3.6.1 + * @example + * // Suppose we have the following HTML structure: + * // <div id="outer"><div id="inner"><p><b>Some text</b></p></div></div> + * // If node == <b> + * ascendant = node.getAscendant( 'div' ); // ascendant == <div id="inner"> + * ascendant = node.getAscendant( 'b' ); // ascendant == null + * ascendant = node.getAscendant( 'b', true ); // ascendant == <b> + * ascendant = node.getAscendant( { div: 1, p: 1} ); // Searches for the first 'div' or 'p': ascendant == <div id="inner"> + */ + getAscendant : function( reference, includeSelf ) + { + var $ = this.$, + name; + + if ( !includeSelf ) + $ = $.parentNode; + + while ( $ ) + { + if ( $.nodeName && ( name = $.nodeName.toLowerCase(), ( typeof reference == 'string' ? name == reference : name in reference ) ) ) + return new CKEDITOR.dom.node( $ ); + + $ = $.parentNode; + } + return null; + }, + + hasAscendant : function( name, includeSelf ) + { + var $ = this.$; + + if ( !includeSelf ) + $ = $.parentNode; + + while ( $ ) + { + if ( $.nodeName && $.nodeName.toLowerCase() == name ) + return true; + + $ = $.parentNode; + } + return false; + }, + + move : function( target, toStart ) + { + target.append( this.remove(), toStart ); + }, + + /** + * Removes this node from the document DOM. + * @param {Boolean} [preserveChildren] Indicates that the children + * elements must remain in the document, removing only the outer + * tags. + * @example + * var element = CKEDITOR.dom.element.getById( 'MyElement' ); + * <strong>element.remove()</strong>; + */ + remove : function( preserveChildren ) + { + var $ = this.$; + var parent = $.parentNode; + + if ( parent ) + { + if ( preserveChildren ) + { + // Move all children before the node. + for ( var child ; ( child = $.firstChild ) ; ) + { + parent.insertBefore( $.removeChild( child ), $ ); + } + } + + parent.removeChild( $ ); + } + + return this; + }, + + replace : function( nodeToReplace ) + { + this.insertBefore( nodeToReplace ); + nodeToReplace.remove(); + }, + + trim : function() + { + this.ltrim(); + this.rtrim(); + }, + + ltrim : function() + { + var child; + while ( this.getFirst && ( child = this.getFirst() ) ) + { + if ( child.type == CKEDITOR.NODE_TEXT ) + { + var trimmed = CKEDITOR.tools.ltrim( child.getText() ), + originalLength = child.getLength(); + + if ( !trimmed ) + { + child.remove(); + continue; + } + else if ( trimmed.length < originalLength ) + { + child.split( originalLength - trimmed.length ); + + // IE BUG: child.remove() may raise JavaScript errors here. (#81) + this.$.removeChild( this.$.firstChild ); + } + } + break; + } + }, + + rtrim : function() + { + var child; + while ( this.getLast && ( child = this.getLast() ) ) + { + if ( child.type == CKEDITOR.NODE_TEXT ) + { + var trimmed = CKEDITOR.tools.rtrim( child.getText() ), + originalLength = child.getLength(); + + if ( !trimmed ) + { + child.remove(); + continue; + } + else if ( trimmed.length < originalLength ) + { + child.split( trimmed.length ); + + // IE BUG: child.getNext().remove() may raise JavaScript errors here. + // (#81) + this.$.lastChild.parentNode.removeChild( this.$.lastChild ); + } + } + break; + } + + if ( !CKEDITOR.env.ie && !CKEDITOR.env.opera ) + { + child = this.$.lastChild; + + if ( child && child.type == 1 && child.nodeName.toLowerCase() == 'br' ) + { + // Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324). + child.parentNode.removeChild( child ) ; + } + } + }, + + /** + * Checks if this node is read-only (should not be changed). Additionally + * it returns the element that defines the read-only state of this node + * (if present). It may be the node itself or any of its parent + * nodes. + * @returns {CKEDITOR.dom.element|Boolean} An element containing + * read-only attributes or "false" if none is found. + * @since 3.5 + * @example + * // For the following HTML: + * // <div contenteditable="false">Some <b>text</b></div> + * + * // If "ele" is the above <div> + * ele.isReadOnly(); // the <div> element + * + * // If "ele" is the above <b> + * ele.isReadOnly(); // the <div> element + */ + isReadOnly : function() + { + var current = this; + while( current ) + { + if ( current.type == CKEDITOR.NODE_ELEMENT ) + { + if ( current.is( 'body' ) || !!current.data( 'cke-editable' ) ) + break; + + if ( current.getAttribute( 'contentEditable' ) == 'false' ) + return current; + else if ( current.getAttribute( 'contentEditable' ) == 'true' ) + break; + } + current = current.getParent(); + } + + return false; + } + } +); diff --git a/_source/core/dom/nodelist.js b/_source/core/dom/nodelist.js new file mode 100644 index 0000000..42efafc --- /dev/null +++ b/_source/core/dom/nodelist.js @@ -0,0 +1,26 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @class + */ +CKEDITOR.dom.nodeList = function( nativeList ) +{ + this.$ = nativeList; +}; + +CKEDITOR.dom.nodeList.prototype = +{ + count : function() + { + return this.$.length; + }, + + getItem : function( index ) + { + var $node = this.$[ index ]; + return $node ? new CKEDITOR.dom.node( $node ) : null; + } +}; diff --git a/_source/core/dom/range.js b/_source/core/dom/range.js new file mode 100644 index 0000000..477197e --- /dev/null +++ b/_source/core/dom/range.js @@ -0,0 +1,2032 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Creates a CKEDITOR.dom.range instance that can be used inside a specific + * DOM Document. + * @class Represents a delimited piece of content in a DOM Document. + * It is contiguous in the sense that it can be characterized as selecting all + * of the content between a pair of boundary-points.<br> + * <br> + * This class shares much of the W3C + * <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html">Document Object Model Range</a> + * ideas and features, adding several range manipulation tools to it, but it's + * not intended to be compatible with it. + * @param {CKEDITOR.dom.document} document The document into which the range + * features will be available. + * @example + * // Create a range for the entire contents of the editor document body. + * var range = new CKEDITOR.dom.range( editor.document ); + * range.selectNodeContents( editor.document.getBody() ); + * // Delete the contents. + * range.deleteContents(); + */ +CKEDITOR.dom.range = function( document ) +{ + /** + * Node within which the range begins. + * @type {CKEDITOR.NODE_ELEMENT|CKEDITOR.NODE_TEXT} + * @example + * var range = new CKEDITOR.dom.range( editor.document ); + * range.selectNodeContents( editor.document.getBody() ); + * alert( range.startContainer.getName() ); // "body" + */ + this.startContainer = null; + + /** + * Offset within the starting node of the range. + * @type {Number} + * @example + * var range = new CKEDITOR.dom.range( editor.document ); + * range.selectNodeContents( editor.document.getBody() ); + * alert( range.startOffset ); // "0" + */ + this.startOffset = null; + + /** + * Node within which the range ends. + * @type {CKEDITOR.NODE_ELEMENT|CKEDITOR.NODE_TEXT} + * @example + * var range = new CKEDITOR.dom.range( editor.document ); + * range.selectNodeContents( editor.document.getBody() ); + * alert( range.endContainer.getName() ); // "body" + */ + this.endContainer = null; + + /** + * Offset within the ending node of the range. + * @type {Number} + * @example + * var range = new CKEDITOR.dom.range( editor.document ); + * range.selectNodeContents( editor.document.getBody() ); + * alert( range.endOffset ); // == editor.document.getBody().getChildCount() + */ + this.endOffset = null; + + /** + * Indicates that this is a collapsed range. A collapsed range has it's + * start and end boudaries at the very same point so nothing is contained + * in it. + * @example + * var range = new CKEDITOR.dom.range( editor.document ); + * range.selectNodeContents( editor.document.getBody() ); + * alert( range.collapsed ); // "false" + * range.collapse(); + * alert( range.collapsed ); // "true" + */ + this.collapsed = true; + + /** + * The document within which the range can be used. + * @type {CKEDITOR.dom.document} + * @example + * // Selects the body contents of the range document. + * range.selectNodeContents( range.document.getBody() ); + */ + this.document = document; +}; + +(function() +{ + // Updates the "collapsed" property for the given range object. + var updateCollapsed = function( range ) + { + range.collapsed = ( + range.startContainer && + range.endContainer && + range.startContainer.equals( range.endContainer ) && + range.startOffset == range.endOffset ); + }; + + // This is a shared function used to delete, extract and clone the range + // contents. + // V2 + var execContentsAction = function( range, action, docFrag, mergeThen ) + { + range.optimizeBookmark(); + + var startNode = range.startContainer; + var endNode = range.endContainer; + + var startOffset = range.startOffset; + var endOffset = range.endOffset; + + var removeStartNode; + var removeEndNode; + + // For text containers, we must simply split the node and point to the + // second part. The removal will be handled by the rest of the code . + if ( endNode.type == CKEDITOR.NODE_TEXT ) + endNode = endNode.split( endOffset ); + else + { + // If the end container has children and the offset is pointing + // to a child, then we should start from it. + if ( endNode.getChildCount() > 0 ) + { + // If the offset points after the last node. + if ( endOffset >= endNode.getChildCount() ) + { + // Let's create a temporary node and mark it for removal. + endNode = endNode.append( range.document.createText( '' ) ); + removeEndNode = true; + } + else + endNode = endNode.getChild( endOffset ); + } + } + + // For text containers, we must simply split the node. The removal will + // be handled by the rest of the code . + if ( startNode.type == CKEDITOR.NODE_TEXT ) + { + startNode.split( startOffset ); + + // In cases the end node is the same as the start node, the above + // splitting will also split the end, so me must move the end to + // the second part of the split. + if ( startNode.equals( endNode ) ) + endNode = startNode.getNext(); + } + else + { + // If the start container has children and the offset is pointing + // to a child, then we should start from its previous sibling. + + // If the offset points to the first node, we don't have a + // sibling, so let's use the first one, but mark it for removal. + if ( !startOffset ) + { + // Let's create a temporary node and mark it for removal. + startNode = startNode.getFirst().insertBeforeMe( range.document.createText( '' ) ); + removeStartNode = true; + } + else if ( startOffset >= startNode.getChildCount() ) + { + // Let's create a temporary node and mark it for removal. + startNode = startNode.append( range.document.createText( '' ) ); + removeStartNode = true; + } + else + startNode = startNode.getChild( startOffset ).getPrevious(); + } + + // Get the parent nodes tree for the start and end boundaries. + var startParents = startNode.getParents(); + var endParents = endNode.getParents(); + + // Compare them, to find the top most siblings. + var i, topStart, topEnd; + + for ( i = 0 ; i < startParents.length ; i++ ) + { + topStart = startParents[ i ]; + topEnd = endParents[ i ]; + + // The compared nodes will match until we find the top most + // siblings (different nodes that have the same parent). + // "i" will hold the index in the parents array for the top + // most element. + if ( !topStart.equals( topEnd ) ) + break; + } + + var clone = docFrag, levelStartNode, levelClone, currentNode, currentSibling; + + // Remove all successive sibling nodes for every node in the + // startParents tree. + for ( var j = i ; j < startParents.length ; j++ ) + { + levelStartNode = startParents[j]; + + // For Extract and Clone, we must clone this level. + if ( clone && !levelStartNode.equals( startNode ) ) // action = 0 = Delete + levelClone = clone.append( levelStartNode.clone() ); + + currentNode = levelStartNode.getNext(); + + while ( currentNode ) + { + // Stop processing when the current node matches a node in the + // endParents tree or if it is the endNode. + if ( currentNode.equals( endParents[ j ] ) || currentNode.equals( endNode ) ) + break; + + // Cache the next sibling. + currentSibling = currentNode.getNext(); + + // If cloning, just clone it. + if ( action == 2 ) // 2 = Clone + clone.append( currentNode.clone( true ) ); + else + { + // Both Delete and Extract will remove the node. + currentNode.remove(); + + // When Extracting, move the removed node to the docFrag. + if ( action == 1 ) // 1 = Extract + clone.append( currentNode ); + } + + currentNode = currentSibling; + } + + if ( clone ) + clone = levelClone; + } + + clone = docFrag; + + // Remove all previous sibling nodes for every node in the + // endParents tree. + for ( var k = i ; k < endParents.length ; k++ ) + { + levelStartNode = endParents[ k ]; + + // For Extract and Clone, we must clone this level. + if ( action > 0 && !levelStartNode.equals( endNode ) ) // action = 0 = Delete + levelClone = clone.append( levelStartNode.clone() ); + + // The processing of siblings may have already been done by the parent. + if ( !startParents[ k ] || levelStartNode.$.parentNode != startParents[ k ].$.parentNode ) + { + currentNode = levelStartNode.getPrevious(); + + while ( currentNode ) + { + // Stop processing when the current node matches a node in the + // startParents tree or if it is the startNode. + if ( currentNode.equals( startParents[ k ] ) || currentNode.equals( startNode ) ) + break; + + // Cache the next sibling. + currentSibling = currentNode.getPrevious(); + + // If cloning, just clone it. + if ( action == 2 ) // 2 = Clone + clone.$.insertBefore( currentNode.$.cloneNode( true ), clone.$.firstChild ) ; + else + { + // Both Delete and Extract will remove the node. + currentNode.remove(); + + // When Extracting, mode the removed node to the docFrag. + if ( action == 1 ) // 1 = Extract + clone.$.insertBefore( currentNode.$, clone.$.firstChild ); + } + + currentNode = currentSibling; + } + } + + if ( clone ) + clone = levelClone; + } + + if ( action == 2 ) // 2 = Clone. + { + // No changes in the DOM should be done, so fix the split text (if any). + + var startTextNode = range.startContainer; + if ( startTextNode.type == CKEDITOR.NODE_TEXT ) + { + startTextNode.$.data += startTextNode.$.nextSibling.data; + startTextNode.$.parentNode.removeChild( startTextNode.$.nextSibling ); + } + + var endTextNode = range.endContainer; + if ( endTextNode.type == CKEDITOR.NODE_TEXT && endTextNode.$.nextSibling ) + { + endTextNode.$.data += endTextNode.$.nextSibling.data; + endTextNode.$.parentNode.removeChild( endTextNode.$.nextSibling ); + } + } + else + { + // Collapse the range. + + // If a node has been partially selected, collapse the range between + // topStart and topEnd. Otherwise, simply collapse it to the start. (W3C specs). + if ( topStart && topEnd && ( startNode.$.parentNode != topStart.$.parentNode || endNode.$.parentNode != topEnd.$.parentNode ) ) + { + var endIndex = topEnd.getIndex(); + + // If the start node is to be removed, we must correct the + // index to reflect the removal. + if ( removeStartNode && topEnd.$.parentNode == startNode.$.parentNode ) + endIndex--; + + // Merge splitted parents. + if ( mergeThen && topStart.type == CKEDITOR.NODE_ELEMENT ) + { + var span = CKEDITOR.dom.element.createFromHtml( '<span ' + + 'data-cke-bookmark="1" style="display:none"> </span>', range.document ); + span.insertAfter( topStart ); + topStart.mergeSiblings( false ); + range.moveToBookmark( { startNode : span } ); + } + else + range.setStart( topEnd.getParent(), endIndex ); + } + + // Collapse it to the start. + range.collapse( true ); + } + + // Cleanup any marked node. + if ( removeStartNode ) + startNode.remove(); + + if ( removeEndNode && endNode.$.parentNode ) + endNode.remove(); + }; + + var inlineChildReqElements = { abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 }; + + // Creates the appropriate node evaluator for the dom walker used inside + // check(Start|End)OfBlock. + function getCheckStartEndBlockEvalFunction( isStart ) + { + var hadBr = false, bookmarkEvaluator = CKEDITOR.dom.walker.bookmark( true ); + return function( node ) + { + // First ignore bookmark nodes. + if ( bookmarkEvaluator( node ) ) + return true; + + if ( node.type == CKEDITOR.NODE_TEXT ) + { + // If there's any visible text, then we're not at the start. + if ( node.hasAscendant( 'pre' ) || CKEDITOR.tools.trim( node.getText() ).length ) + return false; + } + else if ( node.type == CKEDITOR.NODE_ELEMENT ) + { + // If there are non-empty inline elements (e.g. <img />), then we're not + // at the start. + if ( !inlineChildReqElements[ node.getName() ] ) + { + // If we're working at the end-of-block, forgive the first <br /> in non-IE + // browsers. + if ( !isStart && !CKEDITOR.env.ie && node.getName() == 'br' && !hadBr ) + hadBr = true; + else + return false; + } + } + return true; + }; + } + + // Evaluator for CKEDITOR.dom.element::checkBoundaryOfElement, reject any + // text node and non-empty elements unless it's being bookmark text. + function elementBoundaryEval( node ) + { + // Reject any text node unless it's being bookmark + // OR it's spaces. (#3883) + return node.type != CKEDITOR.NODE_TEXT + && node.getName() in CKEDITOR.dtd.$removeEmpty + || !CKEDITOR.tools.trim( node.getText() ) + || !!node.getParent().data( 'cke-bookmark' ); + } + + var whitespaceEval = new CKEDITOR.dom.walker.whitespaces(), + bookmarkEval = new CKEDITOR.dom.walker.bookmark(); + + function nonWhitespaceOrBookmarkEval( node ) + { + // Whitespaces and bookmark nodes are to be ignored. + return !whitespaceEval( node ) && !bookmarkEval( node ); + } + + CKEDITOR.dom.range.prototype = + { + clone : function() + { + var clone = new CKEDITOR.dom.range( this.document ); + + clone.startContainer = this.startContainer; + clone.startOffset = this.startOffset; + clone.endContainer = this.endContainer; + clone.endOffset = this.endOffset; + clone.collapsed = this.collapsed; + + return clone; + }, + + collapse : function( toStart ) + { + if ( toStart ) + { + this.endContainer = this.startContainer; + this.endOffset = this.startOffset; + } + else + { + this.startContainer = this.endContainer; + this.startOffset = this.endOffset; + } + + this.collapsed = true; + }, + + /** + * The content nodes of the range are cloned and added to a document fragment, which is returned. + * <strong> Note: </strong> Text selection may lost after invoking this method. (caused by text node splitting). + */ + cloneContents : function() + { + var docFrag = new CKEDITOR.dom.documentFragment( this.document ); + + if ( !this.collapsed ) + execContentsAction( this, 2, docFrag ); + + return docFrag; + }, + + /** + * Deletes the content nodes of the range permanently from the DOM tree. + * @param {Boolean} [mergeThen] Merge any splitted elements result in DOM true due to partial selection. + */ + deleteContents : function( mergeThen ) + { + if ( this.collapsed ) + return; + + execContentsAction( this, 0, null, mergeThen ); + }, + + /** + * The content nodes of the range are cloned and added to a document fragment, + * meanwhile they're removed permanently from the DOM tree. + * @param {Boolean} [mergeThen] Merge any splitted elements result in DOM true due to partial selection. + */ + extractContents : function( mergeThen ) + { + var docFrag = new CKEDITOR.dom.documentFragment( this.document ); + + if ( !this.collapsed ) + execContentsAction( this, 1, docFrag, mergeThen ); + + return docFrag; + }, + + /** + * Creates a bookmark object, which can be later used to restore the + * range by using the moveToBookmark function. + * This is an "intrusive" way to create a bookmark. It includes <span> tags + * in the range boundaries. The advantage of it is that it is possible to + * handle DOM mutations when moving back to the bookmark. + * Attention: the inclusion of nodes in the DOM is a design choice and + * should not be changed as there are other points in the code that may be + * using those nodes to perform operations. See GetBookmarkNode. + * @param {Boolean} [serializable] Indicates that the bookmark nodes + * must contain ids, which can be used to restore the range even + * when these nodes suffer mutations (like a clonation or innerHTML + * change). + * @returns {Object} And object representing a bookmark. + */ + createBookmark : function( serializable ) + { + var startNode, endNode; + var baseId; + var clone; + var collapsed = this.collapsed; + + startNode = this.document.createElement( 'span' ); + startNode.data( 'cke-bookmark', 1 ); + startNode.setStyle( 'display', 'none' ); + + // For IE, it must have something inside, otherwise it may be + // removed during DOM operations. + startNode.setHtml( ' ' ); + + if ( serializable ) + { + baseId = 'cke_bm_' + CKEDITOR.tools.getNextNumber(); + startNode.setAttribute( 'id', baseId + 'S' ); + } + + // If collapsed, the endNode will not be created. + if ( !collapsed ) + { + endNode = startNode.clone(); + endNode.setHtml( ' ' ); + + if ( serializable ) + endNode.setAttribute( 'id', baseId + 'E' ); + + clone = this.clone(); + clone.collapse(); + clone.insertNode( endNode ); + } + + clone = this.clone(); + clone.collapse( true ); + clone.insertNode( startNode ); + + // Update the range position. + if ( endNode ) + { + this.setStartAfter( startNode ); + this.setEndBefore( endNode ); + } + else + this.moveToPosition( startNode, CKEDITOR.POSITION_AFTER_END ); + + return { + startNode : serializable ? baseId + 'S' : startNode, + endNode : serializable ? baseId + 'E' : endNode, + serializable : serializable, + collapsed : collapsed + }; + }, + + /** + * Creates a "non intrusive" and "mutation sensible" bookmark. This + * kind of bookmark should be used only when the DOM is supposed to + * remain stable after its creation. + * @param {Boolean} [normalized] Indicates that the bookmark must + * normalized. When normalized, the successive text nodes are + * considered a single node. To sucessful load a normalized + * bookmark, the DOM tree must be also normalized before calling + * moveToBookmark. + * @returns {Object} An object representing the bookmark. + */ + createBookmark2 : function( normalized ) + { + var startContainer = this.startContainer, + endContainer = this.endContainer; + + var startOffset = this.startOffset, + endOffset = this.endOffset; + + var collapsed = this.collapsed; + + var child, previous; + + // If there is no range then get out of here. + // It happens on initial load in Safari #962 and if the editor it's + // hidden also in Firefox + if ( !startContainer || !endContainer ) + return { start : 0, end : 0 }; + + if ( normalized ) + { + // Find out if the start is pointing to a text node that will + // be normalized. + if ( startContainer.type == CKEDITOR.NODE_ELEMENT ) + { + child = startContainer.getChild( startOffset ); + + // In this case, move the start information to that text + // node. + if ( child && child.type == CKEDITOR.NODE_TEXT + && startOffset > 0 && child.getPrevious().type == CKEDITOR.NODE_TEXT ) + { + startContainer = child; + startOffset = 0; + } + + // Get the normalized offset. + if ( child && child.type == CKEDITOR.NODE_ELEMENT ) + startOffset = child.getIndex( 1 ); + } + + // Normalize the start. + while ( startContainer.type == CKEDITOR.NODE_TEXT + && ( previous = startContainer.getPrevious() ) + && previous.type == CKEDITOR.NODE_TEXT ) + { + startContainer = previous; + startOffset += previous.getLength(); + } + + // Process the end only if not normalized. + if ( !collapsed ) + { + // Find out if the start is pointing to a text node that + // will be normalized. + if ( endContainer.type == CKEDITOR.NODE_ELEMENT ) + { + child = endContainer.getChild( endOffset ); + + // In this case, move the start information to that + // text node. + if ( child && child.type == CKEDITOR.NODE_TEXT + && endOffset > 0 && child.getPrevious().type == CKEDITOR.NODE_TEXT ) + { + endContainer = child; + endOffset = 0; + } + + // Get the normalized offset. + if ( child && child.type == CKEDITOR.NODE_ELEMENT ) + endOffset = child.getIndex( 1 ); + } + + // Normalize the end. + while ( endContainer.type == CKEDITOR.NODE_TEXT + && ( previous = endContainer.getPrevious() ) + && previous.type == CKEDITOR.NODE_TEXT ) + { + endContainer = previous; + endOffset += previous.getLength(); + } + } + } + + return { + start : startContainer.getAddress( normalized ), + end : collapsed ? null : endContainer.getAddress( normalized ), + startOffset : startOffset, + endOffset : endOffset, + normalized : normalized, + collapsed : collapsed, + is2 : true // It's a createBookmark2 bookmark. + }; + }, + + moveToBookmark : function( bookmark ) + { + if ( bookmark.is2 ) // Created with createBookmark2(). + { + // Get the start information. + var startContainer = this.document.getByAddress( bookmark.start, bookmark.normalized ), + startOffset = bookmark.startOffset; + + // Get the end information. + var endContainer = bookmark.end && this.document.getByAddress( bookmark.end, bookmark.normalized ), + endOffset = bookmark.endOffset; + + // Set the start boundary. + this.setStart( startContainer, startOffset ); + + // Set the end boundary. If not available, collapse it. + if ( endContainer ) + this.setEnd( endContainer, endOffset ); + else + this.collapse( true ); + } + else // Created with createBookmark(). + { + var serializable = bookmark.serializable, + startNode = serializable ? this.document.getById( bookmark.startNode ) : bookmark.startNode, + endNode = serializable ? this.document.getById( bookmark.endNode ) : bookmark.endNode; + + // Set the range start at the bookmark start node position. + this.setStartBefore( startNode ); + + // Remove it, because it may interfere in the setEndBefore call. + startNode.remove(); + + // Set the range end at the bookmark end node position, or simply + // collapse it if it is not available. + if ( endNode ) + { + this.setEndBefore( endNode ); + endNode.remove(); + } + else + this.collapse( true ); + } + }, + + getBoundaryNodes : function() + { + var startNode = this.startContainer, + endNode = this.endContainer, + startOffset = this.startOffset, + endOffset = this.endOffset, + childCount; + + if ( startNode.type == CKEDITOR.NODE_ELEMENT ) + { + childCount = startNode.getChildCount(); + if ( childCount > startOffset ) + startNode = startNode.getChild( startOffset ); + else if ( childCount < 1 ) + startNode = startNode.getPreviousSourceNode(); + else // startOffset > childCount but childCount is not 0 + { + // Try to take the node just after the current position. + startNode = startNode.$; + while ( startNode.lastChild ) + startNode = startNode.lastChild; + startNode = new CKEDITOR.dom.node( startNode ); + + // Normally we should take the next node in DFS order. But it + // is also possible that we've already reached the end of + // document. + startNode = startNode.getNextSourceNode() || startNode; + } + } + if ( endNode.type == CKEDITOR.NODE_ELEMENT ) + { + childCount = endNode.getChildCount(); + if ( childCount > endOffset ) + endNode = endNode.getChild( endOffset ).getPreviousSourceNode( true ); + else if ( childCount < 1 ) + endNode = endNode.getPreviousSourceNode(); + else // endOffset > childCount but childCount is not 0 + { + // Try to take the node just before the current position. + endNode = endNode.$; + while ( endNode.lastChild ) + endNode = endNode.lastChild; + endNode = new CKEDITOR.dom.node( endNode ); + } + } + + // Sometimes the endNode will come right before startNode for collapsed + // ranges. Fix it. (#3780) + if ( startNode.getPosition( endNode ) & CKEDITOR.POSITION_FOLLOWING ) + startNode = endNode; + + return { startNode : startNode, endNode : endNode }; + }, + + /** + * Find the node which fully contains the range. + * @param includeSelf + * @param {Boolean} ignoreTextNode Whether ignore CKEDITOR.NODE_TEXT type. + */ + getCommonAncestor : function( includeSelf , ignoreTextNode ) + { + var start = this.startContainer, + end = this.endContainer, + ancestor; + + if ( start.equals( end ) ) + { + if ( includeSelf + && start.type == CKEDITOR.NODE_ELEMENT + && this.startOffset == this.endOffset - 1 ) + ancestor = start.getChild( this.startOffset ); + else + ancestor = start; + } + else + ancestor = start.getCommonAncestor( end ); + + return ignoreTextNode && !ancestor.is ? ancestor.getParent() : ancestor; + }, + + /** + * Transforms the startContainer and endContainer properties from text + * nodes to element nodes, whenever possible. This is actually possible + * if either of the boundary containers point to a text node, and its + * offset is set to zero, or after the last char in the node. + */ + optimize : function() + { + var container = this.startContainer; + var offset = this.startOffset; + + if ( container.type != CKEDITOR.NODE_ELEMENT ) + { + if ( !offset ) + this.setStartBefore( container ); + else if ( offset >= container.getLength() ) + this.setStartAfter( container ); + } + + container = this.endContainer; + offset = this.endOffset; + + if ( container.type != CKEDITOR.NODE_ELEMENT ) + { + if ( !offset ) + this.setEndBefore( container ); + else if ( offset >= container.getLength() ) + this.setEndAfter( container ); + } + }, + + /** + * Move the range out of bookmark nodes if they'd been the container. + */ + optimizeBookmark: function() + { + var startNode = this.startContainer, + endNode = this.endContainer; + + if ( startNode.is && startNode.is( 'span' ) + && startNode.data( 'cke-bookmark' ) ) + this.setStartAt( startNode, CKEDITOR.POSITION_BEFORE_START ); + if ( endNode && endNode.is && endNode.is( 'span' ) + && endNode.data( 'cke-bookmark' ) ) + this.setEndAt( endNode, CKEDITOR.POSITION_AFTER_END ); + }, + + trim : function( ignoreStart, ignoreEnd ) + { + var startContainer = this.startContainer, + startOffset = this.startOffset, + collapsed = this.collapsed; + if ( ( !ignoreStart || collapsed ) + && startContainer && startContainer.type == CKEDITOR.NODE_TEXT ) + { + // If the offset is zero, we just insert the new node before + // the start. + if ( !startOffset ) + { + startOffset = startContainer.getIndex(); + startContainer = startContainer.getParent(); + } + // If the offset is at the end, we'll insert it after the text + // node. + else if ( startOffset >= startContainer.getLength() ) + { + startOffset = startContainer.getIndex() + 1; + startContainer = startContainer.getParent(); + } + // In other case, we split the text node and insert the new + // node at the split point. + else + { + var nextText = startContainer.split( startOffset ); + + startOffset = startContainer.getIndex() + 1; + startContainer = startContainer.getParent(); + + // Check all necessity of updating the end boundary. + if ( this.startContainer.equals( this.endContainer ) ) + this.setEnd( nextText, this.endOffset - this.startOffset ); + else if ( startContainer.equals( this.endContainer ) ) + this.endOffset += 1; + } + + this.setStart( startContainer, startOffset ); + + if ( collapsed ) + { + this.collapse( true ); + return; + } + } + + var endContainer = this.endContainer; + var endOffset = this.endOffset; + + if ( !( ignoreEnd || collapsed ) + && endContainer && endContainer.type == CKEDITOR.NODE_TEXT ) + { + // If the offset is zero, we just insert the new node before + // the start. + if ( !endOffset ) + { + endOffset = endContainer.getIndex(); + endContainer = endContainer.getParent(); + } + // If the offset is at the end, we'll insert it after the text + // node. + else if ( endOffset >= endContainer.getLength() ) + { + endOffset = endContainer.getIndex() + 1; + endContainer = endContainer.getParent(); + } + // In other case, we split the text node and insert the new + // node at the split point. + else + { + endContainer.split( endOffset ); + + endOffset = endContainer.getIndex() + 1; + endContainer = endContainer.getParent(); + } + + this.setEnd( endContainer, endOffset ); + } + }, + + /** + * Expands the range so that partial units are completely contained. + * @param unit {Number} The unit type to expand with. + * @param {Boolean} [excludeBrs=false] Whether include line-breaks when expanding. + */ + enlarge : function( unit, excludeBrs ) + { + switch ( unit ) + { + case CKEDITOR.ENLARGE_ELEMENT : + + if ( this.collapsed ) + return; + + // Get the common ancestor. + var commonAncestor = this.getCommonAncestor(); + + var body = this.document.getBody(); + + // For each boundary + // a. Depending on its position, find out the first node to be checked (a sibling) or, if not available, to be enlarge. + // b. Go ahead checking siblings and enlarging the boundary as much as possible until the common ancestor is not reached. After reaching the common ancestor, just save the enlargeable node to be used later. + + var startTop, endTop; + + var enlargeable, sibling, commonReached; + + // Indicates that the node can be added only if whitespace + // is available before it. + var needsWhiteSpace = false; + var isWhiteSpace; + var siblingText; + + // Process the start boundary. + + var container = this.startContainer; + var offset = this.startOffset; + + if ( container.type == CKEDITOR.NODE_TEXT ) + { + if ( offset ) + { + // Check if there is any non-space text before the + // offset. Otherwise, container is null. + container = !CKEDITOR.tools.trim( container.substring( 0, offset ) ).length && container; + + // If we found only whitespace in the node, it + // means that we'll need more whitespace to be able + // to expand. For example, <i> can be expanded in + // "A <i> [B]</i>", but not in "A<i> [B]</i>". + needsWhiteSpace = !!container; + } + + if ( container ) + { + if ( !( sibling = container.getPrevious() ) ) + enlargeable = container.getParent(); + } + } + else + { + // If we have offset, get the node preceeding it as the + // first sibling to be checked. + if ( offset ) + sibling = container.getChild( offset - 1 ) || container.getLast(); + + // If there is no sibling, mark the container to be + // enlarged. + if ( !sibling ) + enlargeable = container; + } + + while ( enlargeable || sibling ) + { + if ( enlargeable && !sibling ) + { + // If we reached the common ancestor, mark the flag + // for it. + if ( !commonReached && enlargeable.equals( commonAncestor ) ) + commonReached = true; + + if ( !body.contains( enlargeable ) ) + break; + + // If we don't need space or this element breaks + // the line, then enlarge it. + if ( !needsWhiteSpace || enlargeable.getComputedStyle( 'display' ) != 'inline' ) + { + needsWhiteSpace = false; + + // If the common ancestor has been reached, + // we'll not enlarge it immediately, but just + // mark it to be enlarged later if the end + // boundary also enlarges it. + if ( commonReached ) + startTop = enlargeable; + else + this.setStartBefore( enlargeable ); + } + + sibling = enlargeable.getPrevious(); + } + + // Check all sibling nodes preceeding the enlargeable + // node. The node wil lbe enlarged only if none of them + // blocks it. + while ( sibling ) + { + // This flag indicates that this node has + // whitespaces at the end. + isWhiteSpace = false; + + if ( sibling.type == CKEDITOR.NODE_TEXT ) + { + siblingText = sibling.getText(); + + if ( /[^\s\ufeff]/.test( siblingText ) ) + sibling = null; + + isWhiteSpace = /[\s\ufeff]$/.test( siblingText ); + } + else + { + // If this is a visible element. + // We need to check for the bookmark attribute because IE insists on + // rendering the display:none nodes we use for bookmarks. (#3363) + // Line-breaks (br) are rendered with zero width, which we don't want to include. (#7041) + if ( ( sibling.$.offsetWidth > 0 || excludeBrs && sibling.is( 'br' ) ) && !sibling.data( 'cke-bookmark' ) ) + { + // We'll accept it only if we need + // whitespace, and this is an inline + // element with whitespace only. + if ( needsWhiteSpace && CKEDITOR.dtd.$removeEmpty[ sibling.getName() ] ) + { + // It must contains spaces and inline elements only. + + siblingText = sibling.getText(); + + if ( (/[^\s\ufeff]/).test( siblingText ) ) // Spaces + Zero Width No-Break Space (U+FEFF) + sibling = null; + else + { + var allChildren = sibling.$.all || sibling.$.getElementsByTagName( '*' ); + for ( var i = 0, child ; child = allChildren[ i++ ] ; ) + { + if ( !CKEDITOR.dtd.$removeEmpty[ child.nodeName.toLowerCase() ] ) + { + sibling = null; + break; + } + } + } + + if ( sibling ) + isWhiteSpace = !!siblingText.length; + } + else + sibling = null; + } + } + + // A node with whitespaces has been found. + if ( isWhiteSpace ) + { + // Enlarge the last enlargeable node, if we + // were waiting for spaces. + if ( needsWhiteSpace ) + { + if ( commonReached ) + startTop = enlargeable; + else if ( enlargeable ) + this.setStartBefore( enlargeable ); + } + else + needsWhiteSpace = true; + } + + if ( sibling ) + { + var next = sibling.getPrevious(); + + if ( !enlargeable && !next ) + { + // Set the sibling as enlargeable, so it's + // parent will be get later outside this while. + enlargeable = sibling; + sibling = null; + break; + } + + sibling = next; + } + else + { + // If sibling has been set to null, then we + // need to stop enlarging. + enlargeable = null; + } + } + + if ( enlargeable ) + enlargeable = enlargeable.getParent(); + } + + // Process the end boundary. This is basically the same + // code used for the start boundary, with small changes to + // make it work in the oposite side (to the right). This + // makes it difficult to reuse the code here. So, fixes to + // the above code are likely to be replicated here. + + container = this.endContainer; + offset = this.endOffset; + + // Reset the common variables. + enlargeable = sibling = null; + commonReached = needsWhiteSpace = false; + + if ( container.type == CKEDITOR.NODE_TEXT ) + { + // Check if there is any non-space text after the + // offset. Otherwise, container is null. + container = !CKEDITOR.tools.trim( container.substring( offset ) ).length && container; + + // If we found only whitespace in the node, it + // means that we'll need more whitespace to be able + // to expand. For example, <i> can be expanded in + // "A <i> [B]</i>", but not in "A<i> [B]</i>". + needsWhiteSpace = !( container && container.getLength() ); + + if ( container ) + { + if ( !( sibling = container.getNext() ) ) + enlargeable = container.getParent(); + } + } + else + { + // Get the node right after the boudary to be checked + // first. + sibling = container.getChild( offset ); + + if ( !sibling ) + enlargeable = container; + } + + while ( enlargeable || sibling ) + { + if ( enlargeable && !sibling ) + { + if ( !commonReached && enlargeable.equals( commonAncestor ) ) + commonReached = true; + + if ( !body.contains( enlargeable ) ) + break; + + if ( !needsWhiteSpace || enlargeable.getComputedStyle( 'display' ) != 'inline' ) + { + needsWhiteSpace = false; + + if ( commonReached ) + endTop = enlargeable; + else if ( enlargeable ) + this.setEndAfter( enlargeable ); + } + + sibling = enlargeable.getNext(); + } + + while ( sibling ) + { + isWhiteSpace = false; + + if ( sibling.type == CKEDITOR.NODE_TEXT ) + { + siblingText = sibling.getText(); + + if ( /[^\s\ufeff]/.test( siblingText ) ) + sibling = null; + + isWhiteSpace = /^[\s\ufeff]/.test( siblingText ); + } + else + { + // If this is a visible element. + // We need to check for the bookmark attribute because IE insists on + // rendering the display:none nodes we use for bookmarks. (#3363) + // Line-breaks (br) are rendered with zero width, which we don't want to include. (#7041) + if ( ( sibling.$.offsetWidth > 0 || excludeBrs && sibling.is( 'br' ) ) && !sibling.data( 'cke-bookmark' ) ) + { + // We'll accept it only if we need + // whitespace, and this is an inline + // element with whitespace only. + if ( needsWhiteSpace && CKEDITOR.dtd.$removeEmpty[ sibling.getName() ] ) + { + // It must contains spaces and inline elements only. + + siblingText = sibling.getText(); + + if ( (/[^\s\ufeff]/).test( siblingText ) ) + sibling = null; + else + { + allChildren = sibling.$.all || sibling.$.getElementsByTagName( '*' ); + for ( i = 0 ; child = allChildren[ i++ ] ; ) + { + if ( !CKEDITOR.dtd.$removeEmpty[ child.nodeName.toLowerCase() ] ) + { + sibling = null; + break; + } + } + } + + if ( sibling ) + isWhiteSpace = !!siblingText.length; + } + else + sibling = null; + } + } + + if ( isWhiteSpace ) + { + if ( needsWhiteSpace ) + { + if ( commonReached ) + endTop = enlargeable; + else + this.setEndAfter( enlargeable ); + } + } + + if ( sibling ) + { + next = sibling.getNext(); + + if ( !enlargeable && !next ) + { + enlargeable = sibling; + sibling = null; + break; + } + + sibling = next; + } + else + { + // If sibling has been set to null, then we + // need to stop enlarging. + enlargeable = null; + } + } + + if ( enlargeable ) + enlargeable = enlargeable.getParent(); + } + + // If the common ancestor can be enlarged by both boundaries, then include it also. + if ( startTop && endTop ) + { + commonAncestor = startTop.contains( endTop ) ? endTop : startTop; + + this.setStartBefore( commonAncestor ); + this.setEndAfter( commonAncestor ); + } + break; + + case CKEDITOR.ENLARGE_BLOCK_CONTENTS: + case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: + + // Enlarging the start boundary. + var walkerRange = new CKEDITOR.dom.range( this.document ); + + body = this.document.getBody(); + + walkerRange.setStartAt( body, CKEDITOR.POSITION_AFTER_START ); + walkerRange.setEnd( this.startContainer, this.startOffset ); + + var walker = new CKEDITOR.dom.walker( walkerRange ), + blockBoundary, // The node on which the enlarging should stop. + tailBr, // In case BR as block boundary. + notBlockBoundary = CKEDITOR.dom.walker.blockBoundary( + ( unit == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ) ? { br : 1 } : null ), + // Record the encountered 'blockBoundary' for later use. + boundaryGuard = function( node ) + { + var retval = notBlockBoundary( node ); + if ( !retval ) + blockBoundary = node; + return retval; + }, + // Record the encounted 'tailBr' for later use. + tailBrGuard = function( node ) + { + var retval = boundaryGuard( node ); + if ( !retval && node.is && node.is( 'br' ) ) + tailBr = node; + return retval; + }; + + walker.guard = boundaryGuard; + + enlargeable = walker.lastBackward(); + + // It's the body which stop the enlarging if no block boundary found. + blockBoundary = blockBoundary || body; + + // Start the range either after the end of found block (<p>...</p>[text) + // or at the start of block (<p>[text...), by comparing the document position + // with 'enlargeable' node. + this.setStartAt( + blockBoundary, + !blockBoundary.is( 'br' ) && + ( !enlargeable && this.checkStartOfBlock() + || enlargeable && blockBoundary.contains( enlargeable ) ) ? + CKEDITOR.POSITION_AFTER_START : + CKEDITOR.POSITION_AFTER_END ); + + // Enlarging the end boundary. + walkerRange = this.clone(); + walkerRange.collapse(); + walkerRange.setEndAt( body, CKEDITOR.POSITION_BEFORE_END ); + walker = new CKEDITOR.dom.walker( walkerRange ); + + // tailBrGuard only used for on range end. + walker.guard = ( unit == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ) ? + tailBrGuard : boundaryGuard; + blockBoundary = null; + // End the range right before the block boundary node. + + enlargeable = walker.lastForward(); + + // It's the body which stop the enlarging if no block boundary found. + blockBoundary = blockBoundary || body; + + // Close the range either before the found block start (text]<p>...</p>) or at the block end (...text]</p>) + // by comparing the document position with 'enlargeable' node. + this.setEndAt( + blockBoundary, + ( !enlargeable && this.checkEndOfBlock() + || enlargeable && blockBoundary.contains( enlargeable ) ) ? + CKEDITOR.POSITION_BEFORE_END : + CKEDITOR.POSITION_BEFORE_START ); + // We must include the <br> at the end of range if there's + // one and we're expanding list item contents + if ( tailBr ) + this.setEndAfter( tailBr ); + } + }, + + /** + * Descrease the range to make sure that boundaries + * always anchor beside text nodes or innermost element. + * @param {Number} mode ( CKEDITOR.SHRINK_ELEMENT | CKEDITOR.SHRINK_TEXT ) The shrinking mode. + * <dl> + * <dt>CKEDITOR.SHRINK_ELEMENT</dt> + * <dd>Shrink the range boundaries to the edge of the innermost element.</dd> + * <dt>CKEDITOR.SHRINK_TEXT</dt> + * <dd>Shrink the range boudaries to anchor by the side of enclosed text node, range remains if there's no text nodes on boundaries at all.</dd> + * </dl> + * @param {Boolean} selectContents Whether result range anchors at the inner OR outer boundary of the node. + */ + shrink : function( mode, selectContents ) + { + // Unable to shrink a collapsed range. + if ( !this.collapsed ) + { + mode = mode || CKEDITOR.SHRINK_TEXT; + + var walkerRange = this.clone(); + + var startContainer = this.startContainer, + endContainer = this.endContainer, + startOffset = this.startOffset, + endOffset = this.endOffset, + collapsed = this.collapsed; + + // Whether the start/end boundary is moveable. + var moveStart = 1, + moveEnd = 1; + + if ( startContainer && startContainer.type == CKEDITOR.NODE_TEXT ) + { + if ( !startOffset ) + walkerRange.setStartBefore( startContainer ); + else if ( startOffset >= startContainer.getLength( ) ) + walkerRange.setStartAfter( startContainer ); + else + { + // Enlarge the range properly to avoid walker making + // DOM changes caused by triming the text nodes later. + walkerRange.setStartBefore( startContainer ); + moveStart = 0; + } + } + + if ( endContainer && endContainer.type == CKEDITOR.NODE_TEXT ) + { + if ( !endOffset ) + walkerRange.setEndBefore( endContainer ); + else if ( endOffset >= endContainer.getLength( ) ) + walkerRange.setEndAfter( endContainer ); + else + { + walkerRange.setEndAfter( endContainer ); + moveEnd = 0; + } + } + + var walker = new CKEDITOR.dom.walker( walkerRange ), + isBookmark = CKEDITOR.dom.walker.bookmark(); + + walker.evaluator = function( node ) + { + return node.type == ( mode == CKEDITOR.SHRINK_ELEMENT ? + CKEDITOR.NODE_ELEMENT : CKEDITOR.NODE_TEXT ); + }; + + var currentElement; + walker.guard = function( node, movingOut ) + { + if ( isBookmark( node ) ) + return true; + + // Stop when we're shrink in element mode while encountering a text node. + if ( mode == CKEDITOR.SHRINK_ELEMENT && node.type == CKEDITOR.NODE_TEXT ) + return false; + + // Stop when we've already walked "through" an element. + if ( movingOut && node.equals( currentElement ) ) + return false; + + if ( !movingOut && node.type == CKEDITOR.NODE_ELEMENT ) + currentElement = node; + + return true; + }; + + if ( moveStart ) + { + var textStart = walker[ mode == CKEDITOR.SHRINK_ELEMENT ? 'lastForward' : 'next'](); + textStart && this.setStartAt( textStart, selectContents ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_START ); + } + + if ( moveEnd ) + { + walker.reset(); + var textEnd = walker[ mode == CKEDITOR.SHRINK_ELEMENT ? 'lastBackward' : 'previous'](); + textEnd && this.setEndAt( textEnd, selectContents ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_END ); + } + + return !!( moveStart || moveEnd ); + } + }, + + /** + * Inserts a node at the start of the range. The range will be expanded + * the contain the node. + */ + insertNode : function( node ) + { + this.optimizeBookmark(); + this.trim( false, true ); + + var startContainer = this.startContainer; + var startOffset = this.startOffset; + + var nextNode = startContainer.getChild( startOffset ); + + if ( nextNode ) + node.insertBefore( nextNode ); + else + startContainer.append( node ); + + // Check if we need to update the end boundary. + if ( node.getParent().equals( this.endContainer ) ) + this.endOffset++; + + // Expand the range to embrace the new node. + this.setStartBefore( node ); + }, + + moveToPosition : function( node, position ) + { + this.setStartAt( node, position ); + this.collapse( true ); + }, + + selectNodeContents : function( node ) + { + this.setStart( node, 0 ); + this.setEnd( node, node.type == CKEDITOR.NODE_TEXT ? node.getLength() : node.getChildCount() ); + }, + + /** + * Sets the start position of a Range. + * @param {CKEDITOR.dom.node} startNode The node to start the range. + * @param {Number} startOffset An integer greater than or equal to zero + * representing the offset for the start of the range from the start + * of startNode. + */ + setStart : function( startNode, startOffset ) + { + // W3C requires a check for the new position. If it is after the end + // boundary, the range should be collapsed to the new start. It seams + // we will not need this check for our use of this class so we can + // ignore it for now. + + // Fixing invalid range start inside dtd empty elements. + if( startNode.type == CKEDITOR.NODE_ELEMENT + && CKEDITOR.dtd.$empty[ startNode.getName() ] ) + startOffset = startNode.getIndex(), startNode = startNode.getParent(); + + this.startContainer = startNode; + this.startOffset = startOffset; + + if ( !this.endContainer ) + { + this.endContainer = startNode; + this.endOffset = startOffset; + } + + updateCollapsed( this ); + }, + + /** + * Sets the end position of a Range. + * @param {CKEDITOR.dom.node} endNode The node to end the range. + * @param {Number} endOffset An integer greater than or equal to zero + * representing the offset for the end of the range from the start + * of endNode. + */ + setEnd : function( endNode, endOffset ) + { + // W3C requires a check for the new position. If it is before the start + // boundary, the range should be collapsed to the new end. It seams we + // will not need this check for our use of this class so we can ignore + // it for now. + + // Fixing invalid range end inside dtd empty elements. + if( endNode.type == CKEDITOR.NODE_ELEMENT + && CKEDITOR.dtd.$empty[ endNode.getName() ] ) + endOffset = endNode.getIndex() + 1, endNode = endNode.getParent(); + + this.endContainer = endNode; + this.endOffset = endOffset; + + if ( !this.startContainer ) + { + this.startContainer = endNode; + this.startOffset = endOffset; + } + + updateCollapsed( this ); + }, + + setStartAfter : function( node ) + { + this.setStart( node.getParent(), node.getIndex() + 1 ); + }, + + setStartBefore : function( node ) + { + this.setStart( node.getParent(), node.getIndex() ); + }, + + setEndAfter : function( node ) + { + this.setEnd( node.getParent(), node.getIndex() + 1 ); + }, + + setEndBefore : function( node ) + { + this.setEnd( node.getParent(), node.getIndex() ); + }, + + setStartAt : function( node, position ) + { + switch( position ) + { + case CKEDITOR.POSITION_AFTER_START : + this.setStart( node, 0 ); + break; + + case CKEDITOR.POSITION_BEFORE_END : + if ( node.type == CKEDITOR.NODE_TEXT ) + this.setStart( node, node.getLength() ); + else + this.setStart( node, node.getChildCount() ); + break; + + case CKEDITOR.POSITION_BEFORE_START : + this.setStartBefore( node ); + break; + + case CKEDITOR.POSITION_AFTER_END : + this.setStartAfter( node ); + } + + updateCollapsed( this ); + }, + + setEndAt : function( node, position ) + { + switch( position ) + { + case CKEDITOR.POSITION_AFTER_START : + this.setEnd( node, 0 ); + break; + + case CKEDITOR.POSITION_BEFORE_END : + if ( node.type == CKEDITOR.NODE_TEXT ) + this.setEnd( node, node.getLength() ); + else + this.setEnd( node, node.getChildCount() ); + break; + + case CKEDITOR.POSITION_BEFORE_START : + this.setEndBefore( node ); + break; + + case CKEDITOR.POSITION_AFTER_END : + this.setEndAfter( node ); + } + + updateCollapsed( this ); + }, + + fixBlock : function( isStart, blockTag ) + { + var bookmark = this.createBookmark(), + fixedBlock = this.document.createElement( blockTag ); + + this.collapse( isStart ); + + this.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS ); + + this.extractContents().appendTo( fixedBlock ); + fixedBlock.trim(); + + if ( !CKEDITOR.env.ie ) + fixedBlock.appendBogus(); + + this.insertNode( fixedBlock ); + + this.moveToBookmark( bookmark ); + + return fixedBlock; + }, + + splitBlock : function( blockTag ) + { + var startPath = new CKEDITOR.dom.elementPath( this.startContainer ), + endPath = new CKEDITOR.dom.elementPath( this.endContainer ); + + var startBlockLimit = startPath.blockLimit, + endBlockLimit = endPath.blockLimit; + + var startBlock = startPath.block, + endBlock = endPath.block; + + var elementPath = null; + // Do nothing if the boundaries are in different block limits. + if ( !startBlockLimit.equals( endBlockLimit ) ) + return null; + + // Get or fix current blocks. + if ( blockTag != 'br' ) + { + if ( !startBlock ) + { + startBlock = this.fixBlock( true, blockTag ); + endBlock = new CKEDITOR.dom.elementPath( this.endContainer ).block; + } + + if ( !endBlock ) + endBlock = this.fixBlock( false, blockTag ); + } + + // Get the range position. + var isStartOfBlock = startBlock && this.checkStartOfBlock(), + isEndOfBlock = endBlock && this.checkEndOfBlock(); + + // Delete the current contents. + // TODO: Why is 2.x doing CheckIsEmpty()? + this.deleteContents(); + + if ( startBlock && startBlock.equals( endBlock ) ) + { + if ( isEndOfBlock ) + { + elementPath = new CKEDITOR.dom.elementPath( this.startContainer ); + this.moveToPosition( endBlock, CKEDITOR.POSITION_AFTER_END ); + endBlock = null; + } + else if ( isStartOfBlock ) + { + elementPath = new CKEDITOR.dom.elementPath( this.startContainer ); + this.moveToPosition( startBlock, CKEDITOR.POSITION_BEFORE_START ); + startBlock = null; + } + else + { + endBlock = this.splitElement( startBlock ); + + // In Gecko, the last child node must be a bogus <br>. + // Note: bogus <br> added under <ul> or <ol> would cause + // lists to be incorrectly rendered. + if ( !CKEDITOR.env.ie && !startBlock.is( 'ul', 'ol') ) + startBlock.appendBogus() ; + } + } + + return { + previousBlock : startBlock, + nextBlock : endBlock, + wasStartOfBlock : isStartOfBlock, + wasEndOfBlock : isEndOfBlock, + elementPath : elementPath + }; + }, + + /** + * Branch the specified element from the collapsed range position and + * place the caret between the two result branches. + * Note: The range must be collapsed and been enclosed by this element. + * @param {CKEDITOR.dom.element} element + * @return {CKEDITOR.dom.element} Root element of the new branch after the split. + */ + splitElement : function( toSplit ) + { + if ( !this.collapsed ) + return null; + + // Extract the contents of the block from the selection point to the end + // of its contents. + this.setEndAt( toSplit, CKEDITOR.POSITION_BEFORE_END ); + var documentFragment = this.extractContents(); + + // Duplicate the element after it. + var clone = toSplit.clone( false ); + + // Place the extracted contents into the duplicated element. + documentFragment.appendTo( clone ); + clone.insertAfter( toSplit ); + this.moveToPosition( toSplit, CKEDITOR.POSITION_AFTER_END ); + return clone; + }, + + /** + * Check whether a range boundary is at the inner boundary of a given + * element. + * @param {CKEDITOR.dom.element} element The target element to check. + * @param {Number} checkType The boundary to check for both the range + * and the element. It can be CKEDITOR.START or CKEDITOR.END. + * @returns {Boolean} "true" if the range boundary is at the inner + * boundary of the element. + */ + checkBoundaryOfElement : function( element, checkType ) + { + var checkStart = ( checkType == CKEDITOR.START ); + + // Create a copy of this range, so we can manipulate it for our checks. + var walkerRange = this.clone(); + + // Collapse the range at the proper size. + walkerRange.collapse( checkStart ); + + // Expand the range to element boundary. + walkerRange[ checkStart ? 'setStartAt' : 'setEndAt' ] + ( element, checkStart ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_END ); + + // Create the walker, which will check if we have anything useful + // in the range. + var walker = new CKEDITOR.dom.walker( walkerRange ); + walker.evaluator = elementBoundaryEval; + + return walker[ checkStart ? 'checkBackward' : 'checkForward' ](); + }, + + // Calls to this function may produce changes to the DOM. The range may + // be updated to reflect such changes. + checkStartOfBlock : function() + { + var startContainer = this.startContainer, + startOffset = this.startOffset; + + // If the starting node is a text node, and non-empty before the offset, + // then we're surely not at the start of block. + if ( startOffset && startContainer.type == CKEDITOR.NODE_TEXT ) + { + var textBefore = CKEDITOR.tools.ltrim( startContainer.substring( 0, startOffset ) ); + if ( textBefore.length ) + return false; + } + + // Antecipate the trim() call here, so the walker will not make + // changes to the DOM, which would not get reflected into this + // range otherwise. + this.trim(); + + // We need to grab the block element holding the start boundary, so + // let's use an element path for it. + var path = new CKEDITOR.dom.elementPath( this.startContainer ); + + // Creates a range starting at the block start until the range start. + var walkerRange = this.clone(); + walkerRange.collapse( true ); + walkerRange.setStartAt( path.block || path.blockLimit, CKEDITOR.POSITION_AFTER_START ); + + var walker = new CKEDITOR.dom.walker( walkerRange ); + walker.evaluator = getCheckStartEndBlockEvalFunction( true ); + + return walker.checkBackward(); + }, + + checkEndOfBlock : function() + { + var endContainer = this.endContainer, + endOffset = this.endOffset; + + // If the ending node is a text node, and non-empty after the offset, + // then we're surely not at the end of block. + if ( endContainer.type == CKEDITOR.NODE_TEXT ) + { + var textAfter = CKEDITOR.tools.rtrim( endContainer.substring( endOffset ) ); + if ( textAfter.length ) + return false; + } + + // Antecipate the trim() call here, so the walker will not make + // changes to the DOM, which would not get reflected into this + // range otherwise. + this.trim(); + + // We need to grab the block element holding the start boundary, so + // let's use an element path for it. + var path = new CKEDITOR.dom.elementPath( this.endContainer ); + + // Creates a range starting at the block start until the range start. + var walkerRange = this.clone(); + walkerRange.collapse( false ); + walkerRange.setEndAt( path.block || path.blockLimit, CKEDITOR.POSITION_BEFORE_END ); + + var walker = new CKEDITOR.dom.walker( walkerRange ); + walker.evaluator = getCheckStartEndBlockEvalFunction( false ); + + return walker.checkForward(); + }, + + /** + * Check if elements at which the range boundaries anchor are read-only, + * with respect to "contenteditable" attribute. + */ + checkReadOnly : ( function() + { + function checkNodesEditable( node, anotherEnd ) + { + while( node ) + { + if ( node.type == CKEDITOR.NODE_ELEMENT ) + { + if ( node.getAttribute( 'contentEditable' ) == 'false' + && !node.data( 'cke-editable' ) ) + { + return 0; + } + // Range enclosed entirely in an editable element. + else if ( node.is( 'html' ) + || node.getAttribute( 'contentEditable' ) == 'true' + && ( node.contains( anotherEnd ) || node.equals( anotherEnd ) ) ) + { + break; + } + } + node = node.getParent(); + } + + return 1; + } + + return function() + { + var startNode = this.startContainer, + endNode = this.endContainer; + + // Check if elements path at both boundaries are editable. + return !( checkNodesEditable( startNode, endNode ) && checkNodesEditable( endNode, startNode ) ); + }; + })(), + + /** + * Moves the range boundaries to the first/end editing point inside an + * element. For example, in an element tree like + * "<p><b><i></i></b> Text</p>", the start editing point is + * "<p><b><i>^</i></b> Text</p>" (inside <i>). + * @param {CKEDITOR.dom.element} el The element into which look for the + * editing spot. + * @param {Boolean} isMoveToEnd Whether move to the end editable position. + */ + moveToElementEditablePosition : function( el, isMoveToEnd ) + { + var isEditable; + + // Empty elements are rejected. + if ( CKEDITOR.dtd.$empty[ el.getName() ] ) + return false; + + while ( el && el.type == CKEDITOR.NODE_ELEMENT ) + { + isEditable = el.isEditable(); + + // If an editable element is found, move inside it. + if ( isEditable ) + this.moveToPosition( el, isMoveToEnd ? + CKEDITOR.POSITION_BEFORE_END : + CKEDITOR.POSITION_AFTER_START ); + // Stop immediately if we've found a non editable inline element (e.g <img>). + else if ( CKEDITOR.dtd.$inline[ el.getName() ] ) + { + this.moveToPosition( el, isMoveToEnd ? + CKEDITOR.POSITION_AFTER_END : + CKEDITOR.POSITION_BEFORE_START ); + return true; + } + + // Non-editable non-inline elements are to be bypassed, getting the next one. + if ( CKEDITOR.dtd.$empty[ el.getName() ] ) + el = el[ isMoveToEnd ? 'getPrevious' : 'getNext' ]( nonWhitespaceOrBookmarkEval ); + else + el = el[ isMoveToEnd ? 'getLast' : 'getFirst' ]( nonWhitespaceOrBookmarkEval ); + + // Stop immediately if we've found a text node. + if ( el && el.type == CKEDITOR.NODE_TEXT ) + { + this.moveToPosition( el, isMoveToEnd ? + CKEDITOR.POSITION_AFTER_END : + CKEDITOR.POSITION_BEFORE_START ); + return true; + } + } + + return isEditable; + }, + + /** + *@see {CKEDITOR.dom.range.moveToElementEditablePosition} + */ + moveToElementEditStart : function( target ) + { + return this.moveToElementEditablePosition( target ); + }, + + /** + *@see {CKEDITOR.dom.range.moveToElementEditablePosition} + */ + moveToElementEditEnd : function( target ) + { + return this.moveToElementEditablePosition( target, true ); + }, + + /** + * Get the single node enclosed within the range if there's one. + */ + getEnclosedNode : function() + { + var walkerRange = this.clone(); + + // Optimize and analyze the range to avoid DOM destructive nature of walker. (#5780) + walkerRange.optimize(); + if ( walkerRange.startContainer.type != CKEDITOR.NODE_ELEMENT + || walkerRange.endContainer.type != CKEDITOR.NODE_ELEMENT ) + return null; + + var walker = new CKEDITOR.dom.walker( walkerRange ), + isNotBookmarks = CKEDITOR.dom.walker.bookmark( true ), + isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ), + evaluator = function( node ) + { + return isNotWhitespaces( node ) && isNotBookmarks( node ); + }; + walkerRange.evaluator = evaluator; + var node = walker.next(); + walker.reset(); + return node && node.equals( walker.previous() ) ? node : null; + }, + + getTouchedStartNode : function() + { + var container = this.startContainer ; + + if ( this.collapsed || container.type != CKEDITOR.NODE_ELEMENT ) + return container ; + + return container.getChild( this.startOffset ) || container ; + }, + + getTouchedEndNode : function() + { + var container = this.endContainer ; + + if ( this.collapsed || container.type != CKEDITOR.NODE_ELEMENT ) + return container ; + + return container.getChild( this.endOffset - 1 ) || container ; + } + }; +})(); + +CKEDITOR.POSITION_AFTER_START = 1; // <element>^contents</element> "^text" +CKEDITOR.POSITION_BEFORE_END = 2; // <element>contents^</element> "text^" +CKEDITOR.POSITION_BEFORE_START = 3; // ^<element>contents</element> ^"text" +CKEDITOR.POSITION_AFTER_END = 4; // <element>contents</element>^ "text" + +CKEDITOR.ENLARGE_ELEMENT = 1; +CKEDITOR.ENLARGE_BLOCK_CONTENTS = 2; +CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS = 3; + +// Check boundary types. +// @see CKEDITOR.dom.range.prototype.checkBoundaryOfElement +CKEDITOR.START = 1; +CKEDITOR.END = 2; +CKEDITOR.STARTEND = 3; + +// Shrink range types. +// @see CKEDITOR.dom.range.prototype.shrink +CKEDITOR.SHRINK_ELEMENT = 1; +CKEDITOR.SHRINK_TEXT = 2; diff --git a/_source/core/dom/rangelist.js b/_source/core/dom/rangelist.js new file mode 100644 index 0000000..2685506 --- /dev/null +++ b/_source/core/dom/rangelist.js @@ -0,0 +1,213 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + /** + * Represents a list os CKEDITOR.dom.range objects, which can be easily + * iterated sequentially. + * @constructor + * @param {CKEDITOR.dom.range|Array} [ranges] The ranges contained on this list. + * Note that, if an array of ranges is specified, the range sequence + * should match its DOM order. This class will not help to sort them. + */ + CKEDITOR.dom.rangeList = function( ranges ) + { + if ( ranges instanceof CKEDITOR.dom.rangeList ) + return ranges; + + if ( !ranges ) + ranges = []; + else if ( ranges instanceof CKEDITOR.dom.range ) + ranges = [ ranges ]; + + return CKEDITOR.tools.extend( ranges, mixins ); + }; + + var mixins = + /** @lends CKEDITOR.dom.rangeList.prototype */ + { + /** + * Creates an instance of the rangeList iterator, it should be used + * only when the ranges processing could be DOM intrusive, which + * means it may pollute and break other ranges in this list. + * Otherwise, it's enough to just iterate over this array in a for loop. + * @returns {CKEDITOR.dom.rangeListIterator} + */ + createIterator : function() + { + var rangeList = this, + bookmark = CKEDITOR.dom.walker.bookmark(), + guard = function( node ) { return ! ( node.is && node.is( 'tr' ) ); }, + bookmarks = [], + current; + + /** + * @lends CKEDITOR.dom.rangeListIterator.prototype + */ + return { + + /** + * Retrieves the next range in the list. + * @param {Boolean} mergeConsequent Whether join two adjacent ranges into single, e.g. consequent table cells. + */ + getNextRange : function( mergeConsequent ) + { + current = current == undefined ? 0 : current + 1; + + var range = rangeList[ current ]; + + // Multiple ranges might be mangled by each other. + if ( range && rangeList.length > 1 ) + { + // Bookmarking all other ranges on the first iteration, + // the range correctness after it doesn't matter since we'll + // restore them before the next iteration. + if ( !current ) + { + // Make sure bookmark correctness by reverse processing. + for ( var i = rangeList.length - 1; i >= 0; i-- ) + bookmarks.unshift( rangeList[ i ].createBookmark( true ) ); + } + + if ( mergeConsequent ) + { + // Figure out how many ranges should be merged. + var mergeCount = 0; + while ( rangeList[ current + mergeCount + 1 ] ) + { + var doc = range.document, + found = 0, + left = doc.getById( bookmarks[ mergeCount ].endNode ), + right = doc.getById( bookmarks[ mergeCount + 1 ].startNode ), + next; + + // Check subsequent range. + while ( 1 ) + { + next = left.getNextSourceNode( false ); + if ( !right.equals( next ) ) + { + // This could be yet another bookmark or + // walking across block boundaries. + if ( bookmark( next ) || ( next.type == CKEDITOR.NODE_ELEMENT && next.isBlockBoundary() ) ) + { + left = next; + continue; + } + } + else + found = 1; + + break; + } + + if ( !found ) + break; + + mergeCount++; + } + } + + range.moveToBookmark( bookmarks.shift() ); + + // Merge ranges finally after moving to bookmarks. + while( mergeCount-- ) + { + next = rangeList[ ++current ]; + next.moveToBookmark( bookmarks.shift() ); + range.setEnd( next.endContainer, next.endOffset ); + } + } + + return range; + } + }; + }, + + createBookmarks : function( serializable ) + { + var retval = [], bookmark; + for ( var i = 0; i < this.length ; i++ ) + { + retval.push( bookmark = this[ i ].createBookmark( serializable, true) ); + + // Updating the container & offset values for ranges + // that have been touched. + for ( var j = i + 1; j < this.length; j++ ) + { + this[ j ] = updateDirtyRange( bookmark, this[ j ] ); + this[ j ] = updateDirtyRange( bookmark, this[ j ], true ); + } + } + return retval; + }, + + createBookmarks2 : function( normalized ) + { + var bookmarks = []; + + for ( var i = 0 ; i < this.length ; i++ ) + bookmarks.push( this[ i ].createBookmark2( normalized ) ); + + return bookmarks; + }, + + /** + * Move each range in the list to the position specified by a list of bookmarks. + * @param {Array} bookmarks The list of bookmarks, each one matching a range in the list. + */ + moveToBookmarks : function( bookmarks ) + { + for ( var i = 0 ; i < this.length ; i++ ) + this[ i ].moveToBookmark( bookmarks[ i ] ); + } + }; + + // Update the specified range which has been mangled by previous insertion of + // range bookmark nodes.(#3256) + function updateDirtyRange( bookmark, dirtyRange, checkEnd ) + { + var serializable = bookmark.serializable, + container = dirtyRange[ checkEnd ? 'endContainer' : 'startContainer' ], + offset = checkEnd ? 'endOffset' : 'startOffset'; + + var bookmarkStart = serializable ? + dirtyRange.document.getById( bookmark.startNode ) + : bookmark.startNode; + + var bookmarkEnd = serializable ? + dirtyRange.document.getById( bookmark.endNode ) + : bookmark.endNode; + + if ( container.equals( bookmarkStart.getPrevious() ) ) + { + dirtyRange.startOffset = dirtyRange.startOffset + - container.getLength() + - bookmarkEnd.getPrevious().getLength(); + container = bookmarkEnd.getNext(); + } + else if ( container.equals( bookmarkEnd.getPrevious() ) ) + { + dirtyRange.startOffset = dirtyRange.startOffset - container.getLength(); + container = bookmarkEnd.getNext(); + } + + container.equals( bookmarkStart.getParent() ) && dirtyRange[ offset ]++; + container.equals( bookmarkEnd.getParent() ) && dirtyRange[ offset ]++; + + // Update and return this range. + dirtyRange[ checkEnd ? 'endContainer' : 'startContainer' ] = container; + return dirtyRange; + } +})(); + +/** + * (Virtual Class) Do not call this constructor. This class is not really part + * of the API. It just describes the return type of {@link CKEDITOR.dom.rangeList#createIterator}. + * @name CKEDITOR.dom.rangeListIterator + * @constructor + * @example + */ diff --git a/_source/core/dom/text.js b/_source/core/dom/text.js new file mode 100644 index 0000000..4abf8fc --- /dev/null +++ b/_source/core/dom/text.js @@ -0,0 +1,128 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dom.text} class, which represents + * a DOM text node. + */ + +/** + * Represents a DOM text node. + * @constructor + * @augments CKEDITOR.dom.node + * @param {Object|String} text A native DOM text node or a string containing + * the text to use to create a new text node. + * @param {CKEDITOR.dom.document} [ownerDocument] The document that will contain + * the node in case of new node creation. Defaults to the current document. + * @example + * var nativeNode = document.createTextNode( 'Example' ); + * var text = CKEDITOR.dom.text( nativeNode ); + * @example + * var text = CKEDITOR.dom.text( 'Example' ); + */ +CKEDITOR.dom.text = function( text, ownerDocument ) +{ + if ( typeof text == 'string' ) + text = ( ownerDocument ? ownerDocument.$ : document ).createTextNode( text ); + + // Theoretically, we should call the base constructor here + // (not CKEDITOR.dom.node though). But, IE doesn't support expando + // properties on text node, so the features provided by domObject will not + // work for text nodes (which is not a big issue for us). + // + // CKEDITOR.dom.domObject.call( this, element ); + + /** + * The native DOM text node represented by this class instance. + * @type Object + * @example + * var element = new CKEDITOR.dom.text( 'Example' ); + * alert( element.$.nodeType ); // "3" + */ + this.$ = text; +}; + +CKEDITOR.dom.text.prototype = new CKEDITOR.dom.node(); + +CKEDITOR.tools.extend( CKEDITOR.dom.text.prototype, + /** @lends CKEDITOR.dom.text.prototype */ + { + /** + * The node type. This is a constant value set to + * {@link CKEDITOR.NODE_TEXT}. + * @type Number + * @example + */ + type : CKEDITOR.NODE_TEXT, + + getLength : function() + { + return this.$.nodeValue.length; + }, + + getText : function() + { + return this.$.nodeValue; + }, + + setText : function( text ) + { + this.$.nodeValue = text; + }, + + /** + * Breaks this text node into two nodes at the specified offset, + * keeping both in the tree as siblings. This node then only contains + * all the content up to the offset point. A new text node, which is + * inserted as the next sibling of this node, contains all the content + * at and after the offset point. When the offset is equal to the + * length of this node, the new node has no data. + * @param {Number} The position at which to split, starting from zero. + * @returns {CKEDITOR.dom.text} The new text node. + */ + split : function( offset ) + { + // If the offset is after the last char, IE creates the text node + // on split, but don't include it into the DOM. So, we have to do + // that manually here. + if ( CKEDITOR.env.ie && offset == this.getLength() ) + { + var next = this.getDocument().createText( '' ); + next.insertAfter( this ); + return next; + } + + var doc = this.getDocument(); + var retval = new CKEDITOR.dom.text( this.$.splitText( offset ), doc ); + + // IE BUG: IE8 does not update the childNodes array in DOM after splitText(), + // we need to make some DOM changes to make it update. (#3436) + if ( CKEDITOR.env.ie8 ) + { + var workaround = new CKEDITOR.dom.text( '', doc ); + workaround.insertAfter( retval ); + workaround.remove(); + } + + return retval; + }, + + /** + * Extracts characters from indexA up to but not including indexB. + * @param {Number} indexA An integer between 0 and one less than the + * length of the text. + * @param {Number} [indexB] An integer between 0 and the length of the + * string. If omitted, extracts characters to the end of the text. + */ + substring : function( indexA, indexB ) + { + // We need the following check due to a Firefox bug + // https://bugzilla.mozilla.org/show_bug.cgi?id=458886 + if ( typeof indexB != 'number' ) + return this.$.nodeValue.substr( indexA ); + else + return this.$.nodeValue.substring( indexA, indexB ); + } + }); diff --git a/_source/core/dom/walker.js b/_source/core/dom/walker.js new file mode 100644 index 0000000..7f430b8 --- /dev/null +++ b/_source/core/dom/walker.js @@ -0,0 +1,462 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + // This function is to be called under a "walker" instance scope. + function iterate( rtl, breakOnFalse ) + { + // Return null if we have reached the end. + if ( this._.end ) + return null; + + var node, + range = this.range, + guard, + userGuard = this.guard, + type = this.type, + getSourceNodeFn = ( rtl ? 'getPreviousSourceNode' : 'getNextSourceNode' ); + + // This is the first call. Initialize it. + if ( !this._.start ) + { + this._.start = 1; + + // Trim text nodes and optmize the range boundaries. DOM changes + // may happen at this point. + range.trim(); + + // A collapsed range must return null at first call. + if ( range.collapsed ) + { + this.end(); + return null; + } + } + + // Create the LTR guard function, if necessary. + if ( !rtl && !this._.guardLTR ) + { + // Gets the node that stops the walker when going LTR. + var limitLTR = range.endContainer, + blockerLTR = limitLTR.getChild( range.endOffset ); + + this._.guardLTR = function( node, movingOut ) + { + return ( ( !movingOut || !limitLTR.equals( node ) ) + && ( !blockerLTR || !node.equals( blockerLTR ) ) + && ( node.type != CKEDITOR.NODE_ELEMENT || !movingOut || node.getName() != 'body' ) ); + }; + } + + // Create the RTL guard function, if necessary. + if ( rtl && !this._.guardRTL ) + { + // Gets the node that stops the walker when going LTR. + var limitRTL = range.startContainer, + blockerRTL = ( range.startOffset > 0 ) && limitRTL.getChild( range.startOffset - 1 ); + + this._.guardRTL = function( node, movingOut ) + { + return ( ( !movingOut || !limitRTL.equals( node ) ) + && ( !blockerRTL || !node.equals( blockerRTL ) ) + && ( node.type != CKEDITOR.NODE_ELEMENT || !movingOut || node.getName() != 'body' ) ); + }; + } + + // Define which guard function to use. + var stopGuard = rtl ? this._.guardRTL : this._.guardLTR; + + // Make the user defined guard function participate in the process, + // otherwise simply use the boundary guard. + if ( userGuard ) + { + guard = function( node, movingOut ) + { + if ( stopGuard( node, movingOut ) === false ) + return false; + + return userGuard( node, movingOut ); + }; + } + else + guard = stopGuard; + + if ( this.current ) + node = this.current[ getSourceNodeFn ]( false, type, guard ); + else + { + // Get the first node to be returned. + + if ( rtl ) + { + node = range.endContainer; + + if ( range.endOffset > 0 ) + { + node = node.getChild( range.endOffset - 1 ); + if ( guard( node ) === false ) + node = null; + } + else + node = ( guard ( node, true ) === false ) ? + null : node.getPreviousSourceNode( true, type, guard ); + } + else + { + node = range.startContainer; + node = node.getChild( range.startOffset ); + + if ( node ) + { + if ( guard( node ) === false ) + node = null; + } + else + node = ( guard ( range.startContainer, true ) === false ) ? + null : range.startContainer.getNextSourceNode( true, type, guard ) ; + } + } + + while ( node && !this._.end ) + { + this.current = node; + + if ( !this.evaluator || this.evaluator( node ) !== false ) + { + if ( !breakOnFalse ) + return node; + } + else if ( breakOnFalse && this.evaluator ) + return false; + + node = node[ getSourceNodeFn ]( false, type, guard ); + } + + this.end(); + return this.current = null; + } + + function iterateToLast( rtl ) + { + var node, last = null; + + while ( ( node = iterate.call( this, rtl ) ) ) + last = node; + + return last; + } + + CKEDITOR.dom.walker = CKEDITOR.tools.createClass( + { + /** + * Utility class to "walk" the DOM inside a range boundaries. If + * necessary, partially included nodes (text nodes) are broken to + * reflect the boundaries limits, so DOM and range changes may happen. + * Outside changes to the range may break the walker. + * + * The walker may return nodes that are not totaly included into the + * range boundaires. Let's take the following range representation, + * where the square brackets indicate the boundaries: + * + * [<p>Some <b>sample] text</b> + * + * While walking forward into the above range, the following nodes are + * returned: <p>, "Some ", <b> and "sample". Going + * backwards instead we have: "sample" and "Some ". So note that the + * walker always returns nodes when "entering" them, but not when + * "leaving" them. The guard function is instead called both when + * entering and leaving nodes. + * + * @constructor + * @param {CKEDITOR.dom.range} range The range within which walk. + */ + $ : function( range ) + { + this.range = range; + + /** + * A function executed for every matched node, to check whether + * it's to be considered into the walk or not. If not provided, all + * matched nodes are considered good. + * If the function returns "false" the node is ignored. + * @name CKEDITOR.dom.walker.prototype.evaluator + * @property + * @type Function + */ + // this.evaluator = null; + + /** + * A function executed for every node the walk pass by to check + * whether the walk is to be finished. It's called when both + * entering and exiting nodes, as well as for the matched nodes. + * If this function returns "false", the walking ends and no more + * nodes are evaluated. + * @name CKEDITOR.dom.walker.prototype.guard + * @property + * @type Function + */ + // this.guard = null; + + /** @private */ + this._ = {}; + }, + +// statics : +// { +// /* Creates a CKEDITOR.dom.walker instance to walk inside DOM boundaries set by nodes. +// * @param {CKEDITOR.dom.node} startNode The node from wich the walk +// * will start. +// * @param {CKEDITOR.dom.node} [endNode] The last node to be considered +// * in the walk. No more nodes are retrieved after touching or +// * passing it. If not provided, the walker stops at the +// * <body> closing boundary. +// * @returns {CKEDITOR.dom.walker} A DOM walker for the nodes between the +// * provided nodes. +// */ +// createOnNodes : function( startNode, endNode, startInclusive, endInclusive ) +// { +// var range = new CKEDITOR.dom.range(); +// if ( startNode ) +// range.setStartAt( startNode, startInclusive ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_END ) ; +// else +// range.setStartAt( startNode.getDocument().getBody(), CKEDITOR.POSITION_AFTER_START ) ; +// +// if ( endNode ) +// range.setEndAt( endNode, endInclusive ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START ) ; +// else +// range.setEndAt( startNode.getDocument().getBody(), CKEDITOR.POSITION_BEFORE_END ) ; +// +// return new CKEDITOR.dom.walker( range ); +// } +// }, +// + proto : + { + /** + * Stop walking. No more nodes are retrieved if this function gets + * called. + */ + end : function() + { + this._.end = 1; + }, + + /** + * Retrieves the next node (at right). + * @returns {CKEDITOR.dom.node} The next node or null if no more + * nodes are available. + */ + next : function() + { + return iterate.call( this ); + }, + + /** + * Retrieves the previous node (at left). + * @returns {CKEDITOR.dom.node} The previous node or null if no more + * nodes are available. + */ + previous : function() + { + return iterate.call( this, 1 ); + }, + + /** + * Check all nodes at right, executing the evaluation fuction. + * @returns {Boolean} "false" if the evaluator function returned + * "false" for any of the matched nodes. Otherwise "true". + */ + checkForward : function() + { + return iterate.call( this, 0, 1 ) !== false; + }, + + /** + * Check all nodes at left, executing the evaluation fuction. + * @returns {Boolean} "false" if the evaluator function returned + * "false" for any of the matched nodes. Otherwise "true". + */ + checkBackward : function() + { + return iterate.call( this, 1, 1 ) !== false; + }, + + /** + * Executes a full walk forward (to the right), until no more nodes + * are available, returning the last valid node. + * @returns {CKEDITOR.dom.node} The last node at the right or null + * if no valid nodes are available. + */ + lastForward : function() + { + return iterateToLast.call( this ); + }, + + /** + * Executes a full walk backwards (to the left), until no more nodes + * are available, returning the last valid node. + * @returns {CKEDITOR.dom.node} The last node at the left or null + * if no valid nodes are available. + */ + lastBackward : function() + { + return iterateToLast.call( this, 1 ); + }, + + reset : function() + { + delete this.current; + this._ = {}; + } + + } + }); + + /* + * Anything whose display computed style is block, list-item, table, + * table-row-group, table-header-group, table-footer-group, table-row, + * table-column-group, table-column, table-cell, table-caption, or whose node + * name is hr, br (when enterMode is br only) is a block boundary. + */ + var blockBoundaryDisplayMatch = + { + block : 1, + 'list-item' : 1, + table : 1, + 'table-row-group' : 1, + 'table-header-group' : 1, + 'table-footer-group' : 1, + 'table-row' : 1, + 'table-column-group' : 1, + 'table-column' : 1, + 'table-cell' : 1, + 'table-caption' : 1 + }; + + CKEDITOR.dom.element.prototype.isBlockBoundary = function( customNodeNames ) + { + var nodeNameMatches = customNodeNames ? + CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$block, customNodeNames || {} ) : + CKEDITOR.dtd.$block; + + // Don't consider floated formatting as block boundary, fall back to dtd check in that case. (#6297) + return this.getComputedStyle( 'float' ) == 'none' && blockBoundaryDisplayMatch[ this.getComputedStyle( 'display' ) ] + || nodeNameMatches[ this.getName() ]; + }; + + CKEDITOR.dom.walker.blockBoundary = function( customNodeNames ) + { + return function( node , type ) + { + return ! ( node.type == CKEDITOR.NODE_ELEMENT + && node.isBlockBoundary( customNodeNames ) ); + }; + }; + + CKEDITOR.dom.walker.listItemBoundary = function() + { + return this.blockBoundary( { br : 1 } ); + }; + + /** + * Whether the to-be-evaluated node is a bookmark node OR bookmark node + * inner contents. + * @param {Boolean} contentOnly Whether only test againt the text content of + * bookmark node instead of the element itself(default). + * @param {Boolean} isReject Whether should return 'false' for the bookmark + * node instead of 'true'(default). + */ + CKEDITOR.dom.walker.bookmark = function( contentOnly, isReject ) + { + function isBookmarkNode( node ) + { + return ( node && node.getName + && node.getName() == 'span' + && node.data( 'cke-bookmark' ) ); + } + + return function( node ) + { + var isBookmark, parent; + // Is bookmark inner text node? + isBookmark = ( node && !node.getName && ( parent = node.getParent() ) + && isBookmarkNode( parent ) ); + // Is bookmark node? + isBookmark = contentOnly ? isBookmark : isBookmark || isBookmarkNode( node ); + return !! ( isReject ^ isBookmark ); + }; + }; + + /** + * Whether the node is a text node containing only whitespaces characters. + * @param isReject + */ + CKEDITOR.dom.walker.whitespaces = function( isReject ) + { + return function( node ) + { + var isWhitespace = node && ( node.type == CKEDITOR.NODE_TEXT ) + && !CKEDITOR.tools.trim( node.getText() ); + return !! ( isReject ^ isWhitespace ); + }; + }; + + /** + * Whether the node is invisible in wysiwyg mode. + * @param isReject + */ + CKEDITOR.dom.walker.invisible = function( isReject ) + { + var whitespace = CKEDITOR.dom.walker.whitespaces(); + return function( node ) + { + // Nodes that take no spaces in wysiwyg: + // 1. White-spaces but not including NBSP; + // 2. Empty inline elements, e.g. <b></b> we're checking here + // 'offsetHeight' instead of 'offsetWidth' for properly excluding + // all sorts of empty paragraph, e.g. <br />. + var isInvisible = whitespace( node ) || node.is && !node.$.offsetHeight; + return !! ( isReject ^ isInvisible ); + }; + }; + + CKEDITOR.dom.walker.nodeType = function( type, isReject ) + { + return function( node ) + { + return !! ( isReject ^ ( node.type == type ) ); + }; + }; + + var tailNbspRegex = /^[\t\r\n ]*(?: |\xa0)$/, + isWhitespaces = CKEDITOR.dom.walker.whitespaces(), + isBookmark = CKEDITOR.dom.walker.bookmark(), + toSkip = function( node ) + { + return isBookmark( node ) + || isWhitespaces( node ) + || node.type == CKEDITOR.NODE_ELEMENT + && node.getName() in CKEDITOR.dtd.$inline + && !( node.getName() in CKEDITOR.dtd.$empty ); + }; + + // Check if there's a filler node at the end of an element, and return it. + CKEDITOR.dom.element.prototype.getBogus = function() + { + // Bogus are not always at the end, e.g. <p><a>text<br /></a></p> (#7070). + var tail = this; + do { tail = tail.getPreviousSourceNode(); } + while ( toSkip( tail ) ) + + if ( tail && ( !CKEDITOR.env.ie ? tail.is && tail.is( 'br' ) + : tail.getText && tailNbspRegex.test( tail.getText() ) ) ) + { + return tail; + } + return false; + }; + +})(); diff --git a/_source/core/dom/window.js b/_source/core/dom/window.js new file mode 100644 index 0000000..c5492b6 --- /dev/null +++ b/_source/core/dom/window.js @@ -0,0 +1,96 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which + * represents a DOM document. + */ + +/** + * Represents a DOM window. + * @constructor + * @augments CKEDITOR.dom.domObject + * @param {Object} domWindow A native DOM window. + * @example + * var document = new CKEDITOR.dom.window( window ); + */ +CKEDITOR.dom.window = function( domWindow ) +{ + CKEDITOR.dom.domObject.call( this, domWindow ); +}; + +CKEDITOR.dom.window.prototype = new CKEDITOR.dom.domObject(); + +CKEDITOR.tools.extend( CKEDITOR.dom.window.prototype, + /** @lends CKEDITOR.dom.window.prototype */ + { + /** + * Moves the selection focus to this window. + * @function + * @example + * var win = new CKEDITOR.dom.window( window ); + * <b>win.focus()</b>; + */ + focus : function() + { + // Webkit is sometimes failed to focus iframe, blur it first(#3835). + if ( CKEDITOR.env.webkit && this.$.parent ) + this.$.parent.focus(); + this.$.focus(); + }, + + /** + * Gets the width and height of this window's viewable area. + * @function + * @returns {Object} An object with the "width" and "height" + * properties containing the size. + * @example + * var win = new CKEDITOR.dom.window( window ); + * var size = <b>win.getViewPaneSize()</b>; + * alert( size.width ); + * alert( size.height ); + */ + getViewPaneSize : function() + { + var doc = this.$.document, + stdMode = doc.compatMode == 'CSS1Compat'; + return { + width : ( stdMode ? doc.documentElement.clientWidth : doc.body.clientWidth ) || 0, + height : ( stdMode ? doc.documentElement.clientHeight : doc.body.clientHeight ) || 0 + }; + }, + + /** + * Gets the current position of the window's scroll. + * @function + * @returns {Object} An object with the "x" and "y" properties + * containing the scroll position. + * @example + * var win = new CKEDITOR.dom.window( window ); + * var pos = <b>win.getScrollPosition()</b>; + * alert( pos.x ); + * alert( pos.y ); + */ + getScrollPosition : function() + { + var $ = this.$; + + if ( 'pageXOffset' in $ ) + { + return { + x : $.pageXOffset || 0, + y : $.pageYOffset || 0 + }; + } + else + { + var doc = $.document; + return { + x : doc.documentElement.scrollLeft || doc.body.scrollLeft || 0, + y : doc.documentElement.scrollTop || doc.body.scrollTop || 0 + }; + } + } + }); diff --git a/_source/core/dtd.js b/_source/core/dtd.js new file mode 100644 index 0000000..51293a0 --- /dev/null +++ b/_source/core/dtd.js @@ -0,0 +1,266 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.dtd} object, which holds the DTD + * mapping for XHTML 1.0 Transitional. This file was automatically + * generated from the file: xhtml1-transitional.dtd. + */ + +/** + * @namespace Holds and object representation of the HTML DTD to be used by the + * editor in its internal operations.<br /> + * <br /> + * Each element in the DTD is represented by a property in this object. Each + * property contains the list of elements that can be contained by the element. + * Text is represented by the "#" property.<br /> + * <br /> + * Several special grouping properties are also available. Their names start + * with the "$" character. + * @example + * // Check if "div" can be contained in a "p" element. + * alert( !!CKEDITOR.dtd[ 'p' ][ 'div' ] ); "false" + * @example + * // Check if "p" can be contained in a "div" element. + * alert( !!CKEDITOR.dtd[ 'div' ][ 'p' ] ); "true" + * @example + * // Check if "p" is a block element. + * alert( !!CKEDITOR.dtd.$block[ 'p' ] ); "true" + */ +CKEDITOR.dtd = (function() +{ + var X = CKEDITOR.tools.extend, + + A = {isindex:1,fieldset:1}, + B = {input:1,button:1,select:1,textarea:1,label:1}, + C = X({a:1},B), + D = X({iframe:1},C), + E = {hr:1,ul:1,menu:1,div:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,mark:1,time:1,meter:1,command:1,keygen:1,output:1,progress:1,audio:1,video:1,details:1,datagrid:1,datalist:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1}, + F = {ins:1,del:1,script:1,style:1}, + G = X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1,wbr:1},F), + H = X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1,mark:1},G), + I = X({p:1},H), + J = X({iframe:1},H,B), + K = {img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,mark:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,audio:1,video:1,details:1,datagrid:1,datalist:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1}, + + L = X({a:1},J), + M = {tr:1}, + N = {'#':1}, + O = X({param:1},K), + P = X({form:1},A,D,E,I), + Q = {li:1}, + R = {style:1,script:1}, + S = {base:1,link:1,meta:1,title:1}, + T = X(S,R), + U = {head:1,body:1}, + V = {html:1}; + + var block = {address:1,blockquote:1,center:1,dir:1,div:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,audio:1,video:1,details:1,datagrid:1,datalist:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}; + + return /** @lends CKEDITOR.dtd */ { + + // The "$" items have been added manually. + + // List of elements living outside body. + $nonBodyContent: X(V,U,S), + + /** + * List of block elements, like "p" or "div". + * @type Object + * @example + */ + $block : block, + + /** + * List of block limit elements. + * @type Object + * @example + */ + $blockLimit : { body:1,div:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,audio:1,video:1,details:1,datagrid:1,datalist:1,td:1,th:1,caption:1,form:1 }, + + /** + * List of inline (<span> like) elements. + */ + $inline : L, // Just like span. + + /** + * list of elements that can be children at <body>. + */ + $body : X({script:1,style:1}, block), + + $cdata : {script:1,style:1}, + + /** + * List of empty (self-closing) elements, like "br" or "img". + * @type Object + * @example + */ + $empty : {area:1,base:1,br:1,col:1,hr:1,img:1,input:1,link:1,meta:1,param:1,wbr:1}, + + /** + * List of list item elements, like "li" or "dd". + * @type Object + * @example + */ + $listItem : {dd:1,dt:1,li:1}, + + /** + * List of list root elements. + * @type Object + * @example + */ + $list: {ul:1,ol:1,dl:1}, + + /** + * Elements that accept text nodes, but are not possible to edit into + * the browser. + * @type Object + * @example + */ + $nonEditable : {applet:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,script:1,textarea:1,param:1,audio:1,video:1}, + + /** + * List of block tags with each one a singleton element lives in the corresponding structure for description. + */ + $captionBlock : { caption:1, legend:1 }, + + /** + * List of elements that can be ignored if empty, like "b" or "span". + * @type Object + * @example + */ + $removeEmpty : {abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1,mark:1}, + + /** + * List of elements that have tabindex set to zero by default. + * @type Object + * @example + */ + $tabIndex : {a:1,area:1,button:1,input:1,object:1,select:1,textarea:1}, + + /** + * List of elements used inside the "table" element, like "tbody" or "td". + * @type Object + * @example + */ + $tableContent : {caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}, + + html: U, + head: T, + style: N, + script: N, + body: P, + base: {}, + link: {}, + meta: {}, + title: N, + col : {}, + tr : {td:1,th:1}, + img : {}, + colgroup : {col:1}, + noscript : P, + td : P, + br : {}, + wbr : {}, + th : P, + center : P, + kbd : L, + button : X(I,E), + basefont : {}, + h5 : L, + h4 : L, + samp : L, + h6 : L, + ol : Q, + h1 : L, + h3 : L, + option : N, + h2 : L, + form : X(A,D,E,I), + select : {optgroup:1,option:1}, + font : L, + ins : L, + menu : Q, + abbr : L, + label : L, + table : {thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1}, + code : L, + tfoot : M, + cite : L, + li : P, + input : {}, + iframe : P, + strong : L, + textarea : N, + noframes : P, + big : L, + small : L, + span : L, + hr : {}, + dt : L, + sub : L, + optgroup : {option:1}, + param : {}, + bdo : L, + 'var' : L, + div : P, + object : O, + sup : L, + dd : P, + strike : L, + area : {}, + dir : Q, + map : X({area:1,form:1,p:1},A,F,E), + applet : O, + dl : {dt:1,dd:1}, + del : L, + isindex : {}, + fieldset : X({legend:1},K), + thead : M, + ul : Q, + acronym : L, + b : L, + a : J, + blockquote : P, + caption : L, + i : L, + u : L, + tbody : M, + s : L, + address : X(D,I), + tt : L, + legend : L, + q : L, + pre : X(G,C), + p : L, + em : L, + dfn : L, + //HTML5 + section : P, + header : P, + footer : P, + nav : P, + article : P, + aside : P, + figure: P, + dialog : P, + hgroup : P, + mark : L, + time : L, + meter : L, + menu : L, + command : L, + keygen : L, + output : L, + progress : O, + audio : O, + video : O, + details : O, + datagrid : O, + datalist : O + }; +})(); + +// PACKAGER_RENAME( CKEDITOR.dtd ) diff --git a/_source/core/editor.js b/_source/core/editor.js new file mode 100644 index 0000000..ff17efb --- /dev/null +++ b/_source/core/editor.js @@ -0,0 +1,1059 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.editor} class, which represents an + * editor instance. + */ + +(function() +{ + // The counter for automatic instance names. + var nameCounter = 0; + + var getNewName = function() + { + var name = 'editor' + ( ++nameCounter ); + return ( CKEDITOR.instances && CKEDITOR.instances[ name ] ) ? getNewName() : name; + }; + + // ##### START: Config Privates + + // These function loads custom configuration files and cache the + // CKEDITOR.editorConfig functions defined on them, so there is no need to + // download them more than once for several instances. + var loadConfigLoaded = {}; + var loadConfig = function( editor ) + { + var customConfig = editor.config.customConfig; + + // Check if there is a custom config to load. + if ( !customConfig ) + return false; + + customConfig = CKEDITOR.getUrl( customConfig ); + + var loadedConfig = loadConfigLoaded[ customConfig ] || ( loadConfigLoaded[ customConfig ] = {} ); + + // If the custom config has already been downloaded, reuse it. + if ( loadedConfig.fn ) + { + // Call the cached CKEDITOR.editorConfig defined in the custom + // config file for the editor instance depending on it. + loadedConfig.fn.call( editor, editor.config ); + + // If there is no other customConfig in the chain, fire the + // "configLoaded" event. + if ( CKEDITOR.getUrl( editor.config.customConfig ) == customConfig || !loadConfig( editor ) ) + editor.fireOnce( 'customConfigLoaded' ); + } + else + { + // Load the custom configuration file. + CKEDITOR.scriptLoader.load( customConfig, function() + { + // If the CKEDITOR.editorConfig function has been properly + // defined in the custom configuration file, cache it. + if ( CKEDITOR.editorConfig ) + loadedConfig.fn = CKEDITOR.editorConfig; + else + loadedConfig.fn = function(){}; + + // Call the load config again. This time the custom + // config is already cached and so it will get loaded. + loadConfig( editor ); + }); + } + + return true; + }; + + var initConfig = function( editor, instanceConfig ) + { + // Setup the lister for the "customConfigLoaded" event. + editor.on( 'customConfigLoaded', function() + { + if ( instanceConfig ) + { + // Register the events that may have been set at the instance + // configuration object. + if ( instanceConfig.on ) + { + for ( var eventName in instanceConfig.on ) + { + editor.on( eventName, instanceConfig.on[ eventName ] ); + } + } + + // Overwrite the settings from the in-page config. + CKEDITOR.tools.extend( editor.config, instanceConfig, true ); + + delete editor.config.on; + } + + onConfigLoaded( editor ); + }); + + // The instance config may override the customConfig setting to avoid + // loading the default ~/config.js file. + if ( instanceConfig && instanceConfig.customConfig != undefined ) + editor.config.customConfig = instanceConfig.customConfig; + + // Load configs from the custom configuration files. + if ( !loadConfig( editor ) ) + editor.fireOnce( 'customConfigLoaded' ); + }; + + // ##### END: Config Privates + + var onConfigLoaded = function( editor ) + { + // Set config related properties. + + var skin = editor.config.skin.split( ',' ), + skinName = skin[ 0 ], + skinPath = CKEDITOR.getUrl( skin[ 1 ] || ( + '_source/' + // @Packager.RemoveLine + 'skins/' + skinName + '/' ) ); + + /** + * The name of the skin used by this editor instance. The skin name can + * be set through the <code>{@link CKEDITOR.config.skin}</code> setting. + * @name CKEDITOR.editor.prototype.skinName + * @type String + * @example + * alert( editor.skinName ); // E.g. "kama" + */ + editor.skinName = skinName; + + /** + * The full URL of the skin directory. + * @name CKEDITOR.editor.prototype.skinPath + * @type String + * @example + * alert( editor.skinPath ); // E.g. "http://example.com/ckeditor/skins/kama/" + */ + editor.skinPath = skinPath; + + /** + * The CSS class name used for skin identification purposes. + * @name CKEDITOR.editor.prototype.skinClass + * @type String + * @example + * alert( editor.skinClass ); // E.g. "cke_skin_kama" + */ + editor.skinClass = 'cke_skin_' + skinName; + + /** + * The <a href="http://en.wikipedia.org/wiki/Tabbing_navigation">tabbing + * navigation</a> order that has been calculated for this editor + * instance. This can be set by the <code>{@link CKEDITOR.config.tabIndex}</code> + * setting or taken from the <code>tabindex</code> attribute of the + * <code>{@link #element}</code> associated with the editor. + * @name CKEDITOR.editor.prototype.tabIndex + * @type Number + * @default 0 (zero) + * @example + * alert( editor.tabIndex ); // E.g. "0" + */ + editor.tabIndex = editor.config.tabIndex || editor.element.getAttribute( 'tabindex' ) || 0; + + /** + * Indicates the read-only state of this editor. This is a read-only property. + * @name CKEDITOR.editor.prototype.readOnly + * @type Boolean + * @since 3.6 + * @see CKEDITOR.editor#setReadOnly + */ + editor.readOnly = !!( editor.config.readOnly || editor.element.getAttribute( 'disabled' ) ); + + // Fire the "configLoaded" event. + editor.fireOnce( 'configLoaded' ); + + // Load language file. + loadSkin( editor ); + }; + + var loadLang = function( editor ) + { + CKEDITOR.lang.load( editor.config.language, editor.config.defaultLanguage, function( languageCode, lang ) + { + /** + * The code for the language resources that have been loaded + * for the user interface elements of this editor instance. + * @name CKEDITOR.editor.prototype.langCode + * @type String + * @example + * alert( editor.langCode ); // E.g. "en" + */ + editor.langCode = languageCode; + + /** + * An object that contains all language strings used by the editor + * interface. + * @name CKEDITOR.editor.prototype.lang + * @type CKEDITOR.lang + * @example + * alert( editor.lang.bold ); // E.g. "Negrito" (if the language is set to Portuguese) + */ + // As we'll be adding plugin specific entries that could come + // from different language code files, we need a copy of lang, + // not a direct reference to it. + editor.lang = CKEDITOR.tools.prototypedCopy( lang ); + + // We're not able to support RTL in Firefox 2 at this time. + if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 && editor.lang.dir == 'rtl' ) + editor.lang.dir = 'ltr'; + + editor.fire( 'langLoaded' ); + + var config = editor.config; + config.contentsLangDirection == 'ui' && ( config.contentsLangDirection = editor.lang.dir ); + + loadPlugins( editor ); + }); + }; + + var loadPlugins = function( editor ) + { + var config = editor.config, + plugins = config.plugins, + extraPlugins = config.extraPlugins, + removePlugins = config.removePlugins; + + if ( extraPlugins ) + { + // Remove them first to avoid duplications. + var removeRegex = new RegExp( '(?:^|,)(?:' + extraPlugins.replace( /\s*,\s*/g, '|' ) + ')(?=,|$)' , 'g' ); + plugins = plugins.replace( removeRegex, '' ); + + plugins += ',' + extraPlugins; + } + + if ( removePlugins ) + { + removeRegex = new RegExp( '(?:^|,)(?:' + removePlugins.replace( /\s*,\s*/g, '|' ) + ')(?=,|$)' , 'g' ); + plugins = plugins.replace( removeRegex, '' ); + } + + // Load the Adobe AIR plugin conditionally. + CKEDITOR.env.air && ( plugins += ',adobeair' ); + + // Load all plugins defined in the "plugins" setting. + CKEDITOR.plugins.load( plugins.split( ',' ), function( plugins ) + { + // The list of plugins. + var pluginsArray = []; + + // The language code to get loaded for each plugin. Null + // entries will be appended for plugins with no language files. + var languageCodes = []; + + // The list of URLs to language files. + var languageFiles = []; + + /** + * An object that contains references to all plugins used by this + * editor instance. + * @name CKEDITOR.editor.prototype.plugins + * @type Object + * @example + * alert( editor.plugins.dialog.path ); // E.g. "http://example.com/ckeditor/plugins/dialog/" + */ + editor.plugins = plugins; + + // Loop through all plugins, to build the list of language + // files to get loaded. + for ( var pluginName in plugins ) + { + var plugin = plugins[ pluginName ], + pluginLangs = plugin.lang, + pluginPath = CKEDITOR.plugins.getPath( pluginName ), + lang = null; + + // Set the plugin path in the plugin. + plugin.path = pluginPath; + + // If the plugin has "lang". + if ( pluginLangs ) + { + // Resolve the plugin language. If the current language + // is not available, get the first one (default one). + lang = ( CKEDITOR.tools.indexOf( pluginLangs, editor.langCode ) >= 0 ? editor.langCode : pluginLangs[ 0 ] ); + + if ( !plugin.langEntries || !plugin.langEntries[ lang ] ) + { + // Put the language file URL into the list of files to + // get downloaded. + languageFiles.push( CKEDITOR.getUrl( pluginPath + 'lang/' + lang + '.js' ) ); + } + else + { + CKEDITOR.tools.extend( editor.lang, plugin.langEntries[ lang ] ); + lang = null; + } + } + + // Save the language code, so we know later which + // language has been resolved to this plugin. + languageCodes.push( lang ); + + pluginsArray.push( plugin ); + } + + // Load all plugin specific language files in a row. + CKEDITOR.scriptLoader.load( languageFiles, function() + { + // Initialize all plugins that have the "beforeInit" and "init" methods defined. + var methods = [ 'beforeInit', 'init', 'afterInit' ]; + for ( var m = 0 ; m < methods.length ; m++ ) + { + for ( var i = 0 ; i < pluginsArray.length ; i++ ) + { + var plugin = pluginsArray[ i ]; + + // Uses the first loop to update the language entries also. + if ( m === 0 && languageCodes[ i ] && plugin.lang ) + CKEDITOR.tools.extend( editor.lang, plugin.langEntries[ languageCodes[ i ] ] ); + + // Call the plugin method (beforeInit and init). + if ( plugin[ methods[ m ] ] ) + plugin[ methods[ m ] ]( editor ); + } + } + + // Load the editor skin. + editor.fire( 'pluginsLoaded' ); + loadTheme( editor ); + }); + }); + }; + + var loadSkin = function( editor ) + { + CKEDITOR.skins.load( editor, 'editor', function() + { + loadLang( editor ); + }); + }; + + var loadTheme = function( editor ) + { + var theme = editor.config.theme; + CKEDITOR.themes.load( theme, function() + { + /** + * The theme used by this editor instance. + * @name CKEDITOR.editor.prototype.theme + * @type CKEDITOR.theme + * @example + * alert( editor.theme ); // E.g. "http://example.com/ckeditor/themes/default/" + */ + var editorTheme = editor.theme = CKEDITOR.themes.get( theme ); + editorTheme.path = CKEDITOR.themes.getPath( theme ); + editorTheme.build( editor ); + + if ( editor.config.autoUpdateElement ) + attachToForm( editor ); + }); + }; + + var attachToForm = function( editor ) + { + var element = editor.element; + + // If are replacing a textarea, we must + if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && element.is( 'textarea' ) ) + { + var form = element.$.form && new CKEDITOR.dom.element( element.$.form ); + if ( form ) + { + function onSubmit() + { + editor.updateElement(); + } + form.on( 'submit',onSubmit ); + + // Setup the submit function because it doesn't fire the + // "submit" event. + if ( !form.$.submit.nodeName && !form.$.submit.length ) + { + form.$.submit = CKEDITOR.tools.override( form.$.submit, function( originalSubmit ) + { + return function() + { + editor.updateElement(); + + // For IE, the DOM submit function is not a + // function, so we need thid check. + if ( originalSubmit.apply ) + originalSubmit.apply( this, arguments ); + else + originalSubmit(); + }; + }); + } + + // Remove 'submit' events registered on form element before destroying.(#3988) + editor.on( 'destroy', function() + { + form.removeListener( 'submit', onSubmit ); + } ); + } + } + }; + + function updateCommands() + { + var command, + commands = this._.commands, + mode = this.mode; + + if ( !mode ) + return; + + for ( var name in commands ) + { + command = commands[ name ]; + command[ command.startDisabled ? 'disable' : + this.readOnly && !command.readOnly ? 'disable' : command.modes[ mode ] ? 'enable' : 'disable' ](); + } + } + + /** + * Initializes the editor instance. This function is called by the editor + * contructor (<code>editor_basic.js</code>). + * @private + */ + CKEDITOR.editor.prototype._init = function() + { + // Get the properties that have been saved in the editor_base + // implementation. + var element = CKEDITOR.dom.element.get( this._.element ), + instanceConfig = this._.instanceConfig; + delete this._.element; + delete this._.instanceConfig; + + this._.commands = {}; + this._.styles = []; + + /** + * The DOM element that was replaced by this editor instance. This + * element stores the editor data on load and post. + * @name CKEDITOR.editor.prototype.element + * @type CKEDITOR.dom.element + * @example + * var editor = CKEDITOR.instances.editor1; + * alert( <strong>editor.element</strong>.getName() ); // E.g. "textarea" + */ + this.element = element; + + /** + * The editor instance name. It may be the replaced element ID, name, or + * a default name using the progressive counter (<code>editor1</code>, + * <code>editor2</code>, ...). + * @name CKEDITOR.editor.prototype.name + * @type String + * @example + * var editor = CKEDITOR.instances.editor1; + * alert( <strong>editor.name</strong> ); // "editor1" + */ + this.name = ( element && ( this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ) + && ( element.getId() || element.getNameAtt() ) ) + || getNewName(); + + if ( this.name in CKEDITOR.instances ) + throw '[CKEDITOR.editor] The instance "' + this.name + '" already exists.'; + + /** + * A unique random string assigned to each editor instance on the page. + * @name CKEDITOR.editor.prototype.id + * @type String + */ + this.id = CKEDITOR.tools.getNextId(); + + /** + * The configurations for this editor instance. It inherits all + * settings defined in <code>(@link CKEDITOR.config}</code>, combined with settings + * loaded from custom configuration files and those defined inline in + * the page when creating the editor. + * @name CKEDITOR.editor.prototype.config + * @type Object + * @example + * var editor = CKEDITOR.instances.editor1; + * alert( <strong>editor.config.theme</strong> ); // E.g. "default" + */ + this.config = CKEDITOR.tools.prototypedCopy( CKEDITOR.config ); + + /** + * The namespace containing UI features related to this editor instance. + * @name CKEDITOR.editor.prototype.ui + * @type CKEDITOR.ui + * @example + */ + this.ui = new CKEDITOR.ui( this ); + + /** + * Controls the focus state of this editor instance. This property + * is rarely used for normal API operations. It is mainly + * intended for developers adding UI elements to the editor interface. + * @name CKEDITOR.editor.prototype.focusManager + * @type CKEDITOR.focusManager + * @example + */ + this.focusManager = new CKEDITOR.focusManager( this ); + + CKEDITOR.fire( 'instanceCreated', null, this ); + + this.on( 'mode', updateCommands, null, null, 1 ); + this.on( 'readOnly', updateCommands, null, null, 1 ); + + initConfig( this, instanceConfig ); + }; +})(); + +CKEDITOR.tools.extend( CKEDITOR.editor.prototype, + /** @lends CKEDITOR.editor.prototype */ + { + /** + * Adds a command definition to the editor instance. Commands added with + * this function can be executed later with the <code>{@link #execCommand}</code> method. + * @param {String} commandName The indentifier name of the command. + * @param {CKEDITOR.commandDefinition} commandDefinition The command definition. + * @example + * editorInstance.addCommand( 'sample', + * { + * exec : function( editor ) + * { + * alert( 'Executing a command for the editor name "' + editor.name + '"!' ); + * } + * }); + */ + addCommand : function( commandName, commandDefinition ) + { + return this._.commands[ commandName ] = new CKEDITOR.command( this, commandDefinition ); + }, + + /** + * Adds a piece of CSS code to the editor which will be applied to the WYSIWYG editing document. + * This CSS would not be added to the output, and is there mainly for editor-specific editing requirements. + * Note: This function should be called before the editor is loaded to take effect. + * @param css {String} CSS text. + * @example + * editorInstance.addCss( 'body { background-color: grey; }' ); + */ + addCss : function( css ) + { + this._.styles.push( css ); + }, + + /** + * Destroys the editor instance, releasing all resources used by it. + * If the editor replaced an element, the element will be recovered. + * @param {Boolean} [noUpdate] If the instance is replacing a DOM + * element, this parameter indicates whether or not to update the + * element with the instance contents. + * @example + * alert( CKEDITOR.instances.editor1 ); // E.g "object" + * <strong>CKEDITOR.instances.editor1.destroy()</strong>; + * alert( CKEDITOR.instances.editor1 ); // "undefined" + */ + destroy : function( noUpdate ) + { + if ( !noUpdate ) + this.updateElement(); + + this.fire( 'destroy' ); + this.theme && this.theme.destroy( this ); + + CKEDITOR.remove( this ); + CKEDITOR.fire( 'instanceDestroyed', null, this ); + }, + + /** + * Executes a command associated with the editor. + * @param {String} commandName The indentifier name of the command. + * @param {Object} [data] Data to be passed to the command. + * @returns {Boolean} <code>true</code> if the command was executed + * successfully, otherwise <code>false</code>. + * @see CKEDITOR.editor.addCommand + * @example + * editorInstance.execCommand( 'bold' ); + */ + execCommand : function( commandName, data ) + { + var command = this.getCommand( commandName ); + + var eventData = + { + name: commandName, + commandData: data, + command: command + }; + + if ( command && command.state != CKEDITOR.TRISTATE_DISABLED ) + { + if ( this.fire( 'beforeCommandExec', eventData ) !== true ) + { + eventData.returnValue = command.exec( eventData.commandData ); + + // Fire the 'afterCommandExec' immediately if command is synchronous. + if ( !command.async && this.fire( 'afterCommandExec', eventData ) !== true ) + return eventData.returnValue; + } + } + + // throw 'Unknown command name "' + commandName + '"'; + return false; + }, + + /** + * Gets one of the registered commands. Note that after registering a + * command definition with <code>{@link #addCommand}</code>, it is + * transformed internally into an instance of + * <code>{@link CKEDITOR.command}</code>, which will then be returned + * by this function. + * @param {String} commandName The name of the command to be returned. + * This is the same name that is used to register the command with + * <code>addCommand</code>. + * @returns {CKEDITOR.command} The command object identified by the + * provided name. + */ + getCommand : function( commandName ) + { + return this._.commands[ commandName ]; + }, + + /** + * Gets the editor data. The data will be in raw format. It is the same + * data that is posted by the editor. + * @type String + * @returns (String) The editor data. + * @example + * if ( CKEDITOR.instances.editor1.<strong>getData()</strong> == '' ) + * alert( 'There is no data available' ); + */ + getData : function() + { + this.fire( 'beforeGetData' ); + + var eventData = this._.data; + + if ( typeof eventData != 'string' ) + { + var element = this.element; + if ( element && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ) + eventData = element.is( 'textarea' ) ? element.getValue() : element.getHtml(); + else + eventData = ''; + } + + eventData = { dataValue : eventData }; + + // Fire "getData" so data manipulation may happen. + this.fire( 'getData', eventData ); + + return eventData.dataValue; + }, + + /** + * Gets the "raw data" currently available in the editor. This is a + * fast method which returns the data as is, without processing, so it is + * not recommended to use it on resulting pages. Instead it can be used + * combined with the <code>{@link #loadSnapshot}</code> method in order + * to be able to automatically save the editor data from time to time + * while the user is using the editor, to avoid data loss, without risking + * performance issues. + * @see CKEDITOR.editor.getData + * @example + * alert( editor.getSnapshot() ); + */ + getSnapshot : function() + { + var data = this.fire( 'getSnapshot' ); + + if ( typeof data != 'string' ) + { + var element = this.element; + if ( element && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ) + data = element.is( 'textarea' ) ? element.getValue() : element.getHtml(); + } + + return data; + }, + + /** + * Loads "raw data" into the editor. The data is loaded with processing + * straight to the editing area. It should not be used as a way to load + * any kind of data, but instead in combination with + * <code>{@link #getSnapshot}</code> produced data. + * @see CKEDITOR.editor.setData + * @example + * var data = editor.getSnapshot(); + * editor.<strong>loadSnapshot( data )</strong>; + */ + loadSnapshot : function( snapshot ) + { + this.fire( 'loadSnapshot', snapshot ); + }, + + /** + * Sets the editor data. The data must be provided in the raw format (HTML).<br /> + * <br /> + * Note that this method is asynchronous. The <code>callback</code> parameter must + * be used if interaction with the editor is needed after setting the data. + * @param {String} data HTML code to replace the curent content in the + * editor. + * @param {Function} callback Function to be called after the <code>setData</code> + * is completed. + *@param {Boolean} internal Whether to suppress any event firing when copying data + * internally inside the editor. + * @example + * CKEDITOR.instances.editor1.<strong>setData</strong>( '<p>This is the editor data.</p>' ); + * @example + * CKEDITOR.instances.editor1.<strong>setData</strong>( '<p>Some other editor data.</p>', function() + * { + * this.checkDirty(); // true + * }); + */ + setData : function( data , callback, internal ) + { + if( callback ) + { + this.on( 'dataReady', function( evt ) + { + evt.removeListener(); + callback.call( evt.editor ); + } ); + } + + // Fire "setData" so data manipulation may happen. + var eventData = { dataValue : data }; + !internal && this.fire( 'setData', eventData ); + + this._.data = eventData.dataValue; + + !internal && this.fire( 'afterSetData', eventData ); + }, + + /** + * Puts or restores the editor into read-only state. When in read-only, + * the user is not able to change the editor contents, but can still use + * some editor features. This function sets the <code>{@link CKEDITOR.config.readOnly}</code> + * property of the editor, firing the <code>{@link CKEDITOR.editor#readOnly}</code> event.<br><br> + * <strong>Note:</strong> the current editing area will be reloaded. + * @param {Boolean} [isReadOnly] Indicates that the editor must go + * read-only (<code>true</code>, default) or be restored and made editable + * (<code>false</code>). + * @since 3.6 + */ + setReadOnly : function( isReadOnly ) + { + isReadOnly = ( isReadOnly == undefined ) || isReadOnly; + + if ( this.readOnly != isReadOnly ) + { + this.readOnly = isReadOnly; + + // Fire the readOnly event so the editor features can update + // their state accordingly. + this.fire( 'readOnly' ); + } + }, + + /** + * Inserts HTML code into the currently selected position in the editor in WYSIWYG mode. + * @param {String} data HTML code to be inserted into the editor. + * @example + * CKEDITOR.instances.editor1.<strong>insertHtml( '<p>This is a new paragraph.</p>' )</strong>; + */ + insertHtml : function( data ) + { + this.fire( 'insertHtml', data ); + }, + + /** + * Insert text content into the currently selected position in the + * editor in WYSIWYG mode. The styles of the selected element will be applied to the inserted text. + * Spaces around the text will be leaving untouched. + * <strong>Note:</strong> two subsequent line-breaks will introduce one paragraph. This depends on <code>{@link CKEDITOR.config.enterMode}</code>; + * A single line-break will be instead translated into one <br />. + * @since 3.5 + * @param {String} text Text to be inserted into the editor. + * @example + * CKEDITOR.instances.editor1.<strong>insertText( ' line1 \n\n line2' )</strong>; + */ + insertText : function( text ) + { + this.fire( 'insertText', text ); + }, + + /** + * Inserts an element into the currently selected position in the + * editor in WYSIWYG mode. + * @param {CKEDITOR.dom.element} element The element to be inserted + * into the editor. + * @example + * var element = CKEDITOR.dom.element.createFromHtml( '<img src="hello.png" border="0" title="Hello" />' ); + * CKEDITOR.instances.editor1.<strong>insertElement( element )</strong>; + */ + insertElement : function( element ) + { + this.fire( 'insertElement', element ); + }, + + /** + * Checks whether the current editor contents contain changes when + * compared to the contents loaded into the editor at startup, or to + * the contents available in the editor when <code>{@link #resetDirty}</code> + * was called. + * @returns {Boolean} "true" is the contents contain changes. + * @example + * function beforeUnload( e ) + * { + * if ( CKEDITOR.instances.editor1.<strong>checkDirty()</strong> ) + * return e.returnValue = "You will lose the changes made in the editor."; + * } + * + * if ( window.addEventListener ) + * window.addEventListener( 'beforeunload', beforeUnload, false ); + * else + * window.attachEvent( 'onbeforeunload', beforeUnload ); + */ + checkDirty : function() + { + return ( this.mayBeDirty && this._.previousValue !== this.getSnapshot() ); + }, + + /** + * Resets the "dirty state" of the editor so subsequent calls to + * <code>{@link #checkDirty}</code> will return <code>false</code> if the user will not + * have made further changes to the contents. + * @example + * alert( editor.checkDirty() ); // E.g. "true" + * editor.<strong>resetDirty()</strong>; + * alert( editor.checkDirty() ); // "false" + */ + resetDirty : function() + { + if ( this.mayBeDirty ) + this._.previousValue = this.getSnapshot(); + }, + + /** + * Updates the <code><textarea></code> element that was replaced by the editor with + * the current data available in the editor. + * @see CKEDITOR.editor.element + * @example + * CKEDITOR.instances.editor1.updateElement(); + * alert( document.getElementById( 'editor1' ).value ); // The current editor data. + */ + updateElement : function() + { + var element = this.element; + if ( element && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ) + { + var data = this.getData(); + + if ( this.config.htmlEncodeOutput ) + data = CKEDITOR.tools.htmlEncode( data ); + + if ( element.is( 'textarea' ) ) + element.setValue( data ); + else + element.setHtml( data ); + } + } + }); + +CKEDITOR.on( 'loaded', function() + { + // Run the full initialization for pending editors. + var pending = CKEDITOR.editor._pending; + if ( pending ) + { + delete CKEDITOR.editor._pending; + + for ( var i = 0 ; i < pending.length ; i++ ) + pending[ i ]._init(); + } + }); + +/** + * Whether to escape HTML when the editor updates the original input element. + * @name CKEDITOR.config.htmlEncodeOutput + * @since 3.1 + * @type Boolean + * @default false + * @example + * config.htmlEncodeOutput = true; + */ + +/** + * If <code>true</code>, makes the editor start in read-only state. Otherwise, it will check + * if the linked <code><textarea></code> element has the <code>disabled</code> attribute. + * @name CKEDITOR.config.readOnly + * @see CKEDITOR.editor#setReadOnly + * @type Boolean + * @default false + * @since 3.6 + * @example + * config.readOnly = true; + */ + +/** + * Fired when a CKEDITOR instance is created, but still before initializing it. + * To interact with a fully initialized instance, use the + * <code>{@link CKEDITOR#instanceReady}</code> event instead. + * @name CKEDITOR#instanceCreated + * @event + * @param {CKEDITOR.editor} editor The editor instance that has been created. + */ + +/** + * Fired when a CKEDITOR instance is destroyed. + * @name CKEDITOR#instanceDestroyed + * @event + * @param {CKEDITOR.editor} editor The editor instance that has been destroyed. + */ + +/** + * Fired when the language is loaded into the editor instance. + * @name CKEDITOR.editor#langLoaded + * @event + * @since 3.6.1 + * @param {CKEDITOR.editor} editor This editor instance. + */ + +/** + * Fired when all plugins are loaded and initialized into the editor instance. + * @name CKEDITOR.editor#pluginsLoaded + * @event + * @param {CKEDITOR.editor} editor This editor instance. + */ + +/** + * Fired before the command execution when <code>{@link #execCommand}</code> is called. + * @name CKEDITOR.editor#beforeCommandExec + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {String} data.name The command name. + * @param {Object} data.commandData The data to be sent to the command. This + * can be manipulated by the event listener. + * @param {CKEDITOR.command} data.command The command itself. + */ + +/** + * Fired after the command execution when <code>{@link #execCommand}</code> is called. + * @name CKEDITOR.editor#afterCommandExec + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {String} data.name The command name. + * @param {Object} data.commandData The data sent to the command. + * @param {CKEDITOR.command} data.command The command itself. + * @param {Object} data.returnValue The value returned by the command execution. + */ + +/** + * Fired when the custom configuration file is loaded, before the final + * configurations initialization.<br /> + * <br /> + * Custom configuration files can be loaded thorugh the + * <code>{@link CKEDITOR.config.customConfig}</code> setting. Several files can be loaded + * by changing this setting. + * @name CKEDITOR.editor#customConfigLoaded + * @event + * @param {CKEDITOR.editor} editor This editor instance. + */ + +/** + * Fired once the editor configuration is ready (loaded and processed). + * @name CKEDITOR.editor#configLoaded + * @event + * @param {CKEDITOR.editor} editor This editor instance. + */ + +/** + * Fired when this editor instance is destroyed. The editor at this + * point is not usable and this event should be used to perform the clean-up + * in any plugin. + * @name CKEDITOR.editor#destroy + * @event + */ + +/** + * Internal event to get the current data. + * @name CKEDITOR.editor#beforeGetData + * @event + */ + +/** + * Internal event to perform the <code>#getSnapshot</code> call. + * @name CKEDITOR.editor#getSnapshot + * @event + */ + +/** + * Internal event to perform the <code>#loadSnapshot</code> call. + * @name CKEDITOR.editor#loadSnapshot + * @event + */ + +/** + * Event fired before the <code>#getData</code> call returns allowing additional manipulation. + * @name CKEDITOR.editor#getData + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {String} data.dataValue The data that will be returned. + */ + +/** + * Event fired before the <code>#setData</code> call is executed allowing additional manipulation. + * @name CKEDITOR.editor#setData + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {String} data.dataValue The data that will be used. + */ + +/** + * Event fired at the end of the <code>#setData</code> call execution. Usually it is better to use the + * <code>{@link CKEDITOR.editor.prototype.dataReady}</code> event. + * @name CKEDITOR.editor#afterSetData + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {String} data.dataValue The data that has been set. + */ + +/** + * Internal event to perform the <code>#insertHtml</code> call + * @name CKEDITOR.editor#insertHtml + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {String} data The HTML to insert. + */ + +/** + * Internal event to perform the <code>#insertText</code> call + * @name CKEDITOR.editor#insertText + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {String} text The text to insert. + */ + +/** + * Internal event to perform the <code>#insertElement</code> call + * @name CKEDITOR.editor#insertElement + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {Object} element The element to insert. + */ + +/** + * Event fired after the <code>{@link CKEDITOR.editor#readOnly}</code> property changes. + * @name CKEDITOR.editor#readOnly + * @event + * @since 3.6 + * @param {CKEDITOR.editor} editor This editor instance. + */ diff --git a/_source/core/editor_basic.js b/_source/core/editor_basic.js new file mode 100644 index 0000000..8d109c8 --- /dev/null +++ b/_source/core/editor_basic.js @@ -0,0 +1,186 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +if ( !CKEDITOR.editor ) +{ + /** + * No element is linked to the editor instance. + * @constant + * @example + */ + CKEDITOR.ELEMENT_MODE_NONE = 0; + + /** + * The element is to be replaced by the editor instance. + * @constant + * @example + */ + CKEDITOR.ELEMENT_MODE_REPLACE = 1; + + /** + * The editor is to be created inside the element. + * @constant + * @example + */ + CKEDITOR.ELEMENT_MODE_APPENDTO = 2; + + /** + * Creates an editor class instance. This constructor should be rarely + * used, in favor of the {@link CKEDITOR} editor creation functions. + * @ class Represents an editor instance. + * @param {Object} instanceConfig Configuration values for this specific + * instance. + * @param {CKEDITOR.dom.element} [element] The element linked to this + * instance. + * @param {Number} [mode] The mode in which the element is linked to this + * instance. See {@link #elementMode}. + * @param {String} [data] Since 3.3. Initial value for the instance. + * @augments CKEDITOR.event + * @example + */ + CKEDITOR.editor = function( instanceConfig, element, mode, data ) + { + this._ = + { + // Save the config to be processed later by the full core code. + instanceConfig : instanceConfig, + element : element, + data : data + }; + + /** + * The mode in which the {@link #element} is linked to this editor + * instance. It can be any of the following values: + * <ul> + * <li>{@link CKEDITOR.ELEMENT_MODE_NONE}: No element is linked to the + * editor instance.</li> + * <li>{@link CKEDITOR.ELEMENT_MODE_REPLACE}: The element is to be + * replaced by the editor instance.</li> + * <li>{@link CKEDITOR.ELEMENT_MODE_APPENDTO}: The editor is to be + * created inside the element.</li> + * </ul> + * @name CKEDITOR.editor.prototype.elementMode + * @type Number + * @example + * var editor = CKEDITOR.replace( 'editor1' ); + * alert( <b>editor.elementMode</b> ); "1" + */ + this.elementMode = mode || CKEDITOR.ELEMENT_MODE_NONE; + + // Call the CKEDITOR.event constructor to initialize this instance. + CKEDITOR.event.call( this ); + + this._init(); + }; + + /** + * Replaces a <textarea> or a DOM element (DIV) with a CKEditor + * instance. For textareas, the initial value in the editor will be the + * textarea value. For DOM elements, their innerHTML will be used + * instead. We recommend using TEXTAREA and DIV elements only. Do not use + * this function directly. Use {@link CKEDITOR.replace} instead. + * @param {Object|String} elementOrIdOrName The DOM element (textarea), its + * ID or name. + * @param {Object} [config] The specific configurations to apply to this + * editor instance. Configurations set here will override global CKEditor + * settings. + * @returns {CKEDITOR.editor} The editor instance created. + * @example + */ + CKEDITOR.editor.replace = function( elementOrIdOrName, config ) + { + var element = elementOrIdOrName; + + if ( typeof element != 'object' ) + { + // Look for the element by id. We accept any kind of element here. + element = document.getElementById( elementOrIdOrName ); + + // Elements that should go into head are unacceptable (#6791). + if ( element && element.tagName.toLowerCase() in {style:1,script:1,base:1,link:1,meta:1,title:1} ) + element = null; + + // If not found, look for elements by name. In this case we accept only + // textareas. + if ( !element ) + { + var i = 0, + textareasByName = document.getElementsByName( elementOrIdOrName ); + + while ( ( element = textareasByName[ i++ ] ) && element.tagName.toLowerCase() != 'textarea' ) + { /*jsl:pass*/ } + } + + if ( !element ) + throw '[CKEDITOR.editor.replace] The element with id or name "' + elementOrIdOrName + '" was not found.'; + } + + // Do not replace the textarea right now, just hide it. The effective + // replacement will be done by the _init function. + element.style.visibility = 'hidden'; + + // Create the editor instance. + return new CKEDITOR.editor( config, element, CKEDITOR.ELEMENT_MODE_REPLACE ); + }; + + /** + * Creates a new editor instance inside a specific DOM element. Do not use + * this function directly. Use {@link CKEDITOR.appendTo} instead. + * @param {Object|String} elementOrId The DOM element or its ID. + * @param {Object} [config] The specific configurations to apply to this + * editor instance. Configurations set here will override global CKEditor + * settings. + * @param {String} [data] Since 3.3. Initial value for the instance. + * @returns {CKEDITOR.editor} The editor instance created. + * @example + */ + CKEDITOR.editor.appendTo = function( elementOrId, config, data ) + { + var element = elementOrId; + if ( typeof element != 'object' ) + { + element = document.getElementById( elementOrId ); + + if ( !element ) + throw '[CKEDITOR.editor.appendTo] The element with id "' + elementOrId + '" was not found.'; + } + + // Create the editor instance. + return new CKEDITOR.editor( config, element, CKEDITOR.ELEMENT_MODE_APPENDTO, data ); + }; + + CKEDITOR.editor.prototype = + { + /** + * Initializes the editor instance. This function will be overriden by the + * full CKEDITOR.editor implementation (editor.js). + * @private + */ + _init : function() + { + var pending = CKEDITOR.editor._pending || ( CKEDITOR.editor._pending = [] ); + pending.push( this ); + }, + + // Both fire and fireOnce will always pass this editor instance as the + // "editor" param in CKEDITOR.event.fire. So, we override it to do that + // automaticaly. + + /** @ignore */ + fire : function( eventName, data ) + { + return CKEDITOR.event.prototype.fire.call( this, eventName, data, this ); + }, + + /** @ignore */ + fireOnce : function( eventName, data ) + { + return CKEDITOR.event.prototype.fireOnce.call( this, eventName, data, this ); + } + }; + + // "Inherit" (copy actually) from CKEDITOR.event. + CKEDITOR.event.implementOn( CKEDITOR.editor.prototype, true ); +} diff --git a/_source/core/env.js b/_source/core/env.js new file mode 100644 index 0000000..9b73aea --- /dev/null +++ b/_source/core/env.js @@ -0,0 +1,291 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.env} object, which constains + * environment and browser information. + */ + +if ( !CKEDITOR.env ) +{ + /** + * @namespace Environment and browser information. + */ + CKEDITOR.env = (function() + { + var agent = navigator.userAgent.toLowerCase(); + var opera = window.opera; + + var env = + /** @lends CKEDITOR.env */ + { + /** + * Indicates that CKEditor is running on Internet Explorer. + * @type Boolean + * @example + * if ( CKEDITOR.env.ie ) + * alert( "I'm on IE!" ); + */ + ie : /*@cc_on!@*/false, + + /** + * Indicates that CKEditor is running on Opera. + * @type Boolean + * @example + * if ( CKEDITOR.env.opera ) + * alert( "I'm on Opera!" ); + */ + opera : ( !!opera && opera.version ), + + /** + * Indicates that CKEditor is running on a WebKit based browser, like + * Safari. + * @type Boolean + * @example + * if ( CKEDITOR.env.webkit ) + * alert( "I'm on WebKit!" ); + */ + webkit : ( agent.indexOf( ' applewebkit/' ) > -1 ), + + /** + * Indicates that CKEditor is running on Adobe AIR. + * @type Boolean + * @example + * if ( CKEDITOR.env.air ) + * alert( "I'm on AIR!" ); + */ + air : ( agent.indexOf( ' adobeair/' ) > -1 ), + + /** + * Indicates that CKEditor is running on Macintosh. + * @type Boolean + * @example + * if ( CKEDITOR.env.mac ) + * alert( "I love apples!" ); + */ + mac : ( agent.indexOf( 'macintosh' ) > -1 ), + + /** + * Indicates that CKEditor is running on a quirks mode environemnt. + * @type Boolean + * @example + * if ( CKEDITOR.env.quirks ) + * alert( "Nooooo!" ); + */ + quirks : ( document.compatMode == 'BackCompat' ), + + /** + * Indicates that CKEditor is running on a mobile like environemnt. + * @type Boolean + * @example + * if ( CKEDITOR.env.mobile ) + * alert( "I'm running with CKEditor today!" ); + */ + mobile : ( agent.indexOf( 'mobile' ) > -1 ), + + /** + * Indicates that the browser has a custom domain enabled. This has + * been set with "document.domain". + * @returns {Boolean} "true" if a custom domain is enabled. + * @example + * if ( CKEDITOR.env.isCustomDomain() ) + * alert( "I'm in a custom domain!" ); + */ + isCustomDomain : function() + { + if ( !this.ie ) + return false; + + var domain = document.domain, + hostname = window.location.hostname; + + return domain != hostname && + domain != ( '[' + hostname + ']' ); // IPv6 IP support (#5434) + }, + + /** + * Indicates that page is running under an encrypted connection. + * @returns {Boolean} "true" if the page has an encrypted connection. + * @example + * if ( CKEDITOR.env.secure ) + * alert( "I'm in SSL!" ); + */ + secure : location.protocol == 'https:' + }; + + /** + * Indicates that CKEditor is running on a Gecko based browser, like + * Firefox. + * @name CKEDITOR.env.gecko + * @type Boolean + * @example + * if ( CKEDITOR.env.gecko ) + * alert( "I'm riding a gecko!" ); + */ + env.gecko = ( navigator.product == 'Gecko' && !env.webkit && !env.opera ); + + var version = 0; + + // Internet Explorer 6.0+ + if ( env.ie ) + { + version = parseFloat( agent.match( /msie (\d+)/ )[1] ); + + /** + * Indicates that CKEditor is running on Internet Explorer 8. + * @name CKEDITOR.env.ie8 + * @type Boolean + * @example + * if ( CKEDITOR.env.ie8 ) + * alert( "I'm on IE8!" ); + */ + env.ie8 = !!document.documentMode; + + /** + * Indicates that CKEditor is running on Internet Explorer 8 on + * standards mode. + * @name CKEDITOR.env.ie8Compat + * @type Boolean + * @example + * if ( CKEDITOR.env.ie8Compat ) + * alert( "Now I'm on IE8, for real!" ); + */ + env.ie8Compat = document.documentMode == 8; + + /** + * Indicates that CKEditor is running on Internet Explorer 9's standards mode. + * @name CKEDITOR.env.ie9Compat + * @type Boolean + * @example + * if ( CKEDITOR.env.ie9Compat ) + * alert( "IE9, the beauty of the web!" ); + */ + env.ie9Compat = document.documentMode == 9; + + /** + * Indicates that CKEditor is running on an IE7-like environment, which + * includes IE7 itself and IE8's IE7 document mode. + * @name CKEDITOR.env.ie7Compat + * @type Boolean + * @example + * if ( CKEDITOR.env.ie8Compat ) + * alert( "I'm on IE7 or on an IE7 like IE8!" ); + */ + env.ie7Compat = ( ( version == 7 && !document.documentMode ) + || document.documentMode == 7 ); + + /** + * Indicates that CKEditor is running on an IE6-like environment, which + * includes IE6 itself and IE7 and IE8 quirks mode. + * @name CKEDITOR.env.ie6Compat + * @type Boolean + * @example + * if ( CKEDITOR.env.ie6Compat ) + * alert( "I'm on IE6 or quirks mode!" ); + */ + env.ie6Compat = ( version < 7 || env.quirks ); + } + + // Gecko. + if ( env.gecko ) + { + var geckoRelease = agent.match( /rv:([\d\.]+)/ ); + if ( geckoRelease ) + { + geckoRelease = geckoRelease[1].split( '.' ); + version = geckoRelease[0] * 10000 + ( geckoRelease[1] || 0 ) * 100 + ( geckoRelease[2] || 0 ) * 1; + } + } + + // Opera 9.50+ + if ( env.opera ) + version = parseFloat( opera.version() ); + + // Adobe AIR 1.0+ + // Checked before Safari because AIR have the WebKit rich text editor + // features from Safari 3.0.4, but the version reported is 420. + if ( env.air ) + version = parseFloat( agent.match( / adobeair\/(\d+)/ )[1] ); + + // WebKit 522+ (Safari 3+) + if ( env.webkit ) + version = parseFloat( agent.match( / applewebkit\/(\d+)/ )[1] ); + + /** + * Contains the browser version.<br /> + * <br /> + * For gecko based browsers (like Firefox) it contains the revision + * number with first three parts concatenated with a padding zero + * (e.g. for revision 1.9.0.2 we have 10900).<br /> + * <br /> + * For webkit based browser (like Safari and Chrome) it contains the + * WebKit build version (e.g. 522). + * @name CKEDITOR.env.version + * @type Boolean + * @example + * if ( CKEDITOR.env.ie && <b>CKEDITOR.env.version</b> <= 6 ) + * alert( "Ouch!" ); + */ + env.version = version; + + /** + * Indicates that CKEditor is running on a compatible browser. + * @name CKEDITOR.env.isCompatible + * @type Boolean + * @example + * if ( CKEDITOR.env.isCompatible ) + * alert( "Your browser is pretty cool!" ); + */ + env.isCompatible = + !env.mobile && ( + ( env.ie && version >= 6 ) || + ( env.gecko && version >= 10801 ) || + ( env.opera && version >= 9.5 ) || + ( env.air && version >= 1 ) || + ( env.webkit && version >= 522 ) || + false ); + + /** + * The CSS class to be appended on the main UI containers, making it + * easy to apply browser specific styles to it. + * @name CKEDITOR.env.cssClass + * @type String + * @example + * myDiv.className = CKEDITOR.env.cssClass; + */ + env.cssClass = + 'cke_browser_' + ( + env.ie ? 'ie' : + env.gecko ? 'gecko' : + env.opera ? 'opera' : + env.webkit ? 'webkit' : + 'unknown' ); + + if ( env.quirks ) + env.cssClass += ' cke_browser_quirks'; + + if ( env.ie ) + { + env.cssClass += ' cke_browser_ie' + ( + env.version < 7 ? '6' : + env.version >= 8 ? document.documentMode: + '7' ); + + if ( env.quirks ) + env.cssClass += ' cke_browser_iequirks'; + } + + if ( env.gecko && version < 10900 ) + env.cssClass += ' cke_browser_gecko18'; + + if ( env.air ) + env.cssClass += ' cke_browser_air'; + + return env; + })(); +} + +// PACKAGER_RENAME( CKEDITOR.env ) +// PACKAGER_RENAME( CKEDITOR.env.ie ) diff --git a/_source/core/event.js b/_source/core/event.js new file mode 100644 index 0000000..fa19060 --- /dev/null +++ b/_source/core/event.js @@ -0,0 +1,342 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.event} class, which serves as the + * base for classes and objects that require event handling features. + */ + +if ( !CKEDITOR.event ) +{ + /** + * Creates an event class instance. This constructor is rearely used, being + * the {@link #.implementOn} function used in class prototypes directly + * instead. + * @class This is a base class for classes and objects that require event + * handling features.<br /> + * <br /> + * Do not confuse this class with {@link CKEDITOR.dom.event} which is + * instead used for DOM events. The CKEDITOR.event class implements the + * internal event system used by the CKEditor to fire API related events. + * @example + */ + CKEDITOR.event = function() + {}; + + /** + * Implements the {@link CKEDITOR.event} features in an object. + * @param {Object} targetObject The object into which implement the features. + * @example + * var myObject = { message : 'Example' }; + * <b>CKEDITOR.event.implementOn( myObject }</b>; + * myObject.on( 'testEvent', function() + * { + * alert( this.message ); // "Example" + * }); + * myObject.fire( 'testEvent' ); + */ + CKEDITOR.event.implementOn = function( targetObject ) + { + var eventProto = CKEDITOR.event.prototype; + + for ( var prop in eventProto ) + { + if ( targetObject[ prop ] == undefined ) + targetObject[ prop ] = eventProto[ prop ]; + } + }; + + CKEDITOR.event.prototype = (function() + { + // Returns the private events object for a given object. + var getPrivate = function( obj ) + { + var _ = ( obj.getPrivate && obj.getPrivate() ) || obj._ || ( obj._ = {} ); + return _.events || ( _.events = {} ); + }; + + var eventEntry = function( eventName ) + { + this.name = eventName; + this.listeners = []; + }; + + eventEntry.prototype = + { + // Get the listener index for a specified function. + // Returns -1 if not found. + getListenerIndex : function( listenerFunction ) + { + for ( var i = 0, listeners = this.listeners ; i < listeners.length ; i++ ) + { + if ( listeners[i].fn == listenerFunction ) + return i; + } + return -1; + } + }; + + return /** @lends CKEDITOR.event.prototype */ { + /** + * Registers a listener to a specific event in the current object. + * @param {String} eventName The event name to which listen. + * @param {Function} listenerFunction The function listening to the + * event. A single {@link CKEDITOR.eventInfo} object instanced + * is passed to this function containing all the event data. + * @param {Object} [scopeObj] The object used to scope the listener + * call (the this object. If omitted, the current object is used. + * @param {Object} [listenerData] Data to be sent as the + * {@link CKEDITOR.eventInfo#listenerData} when calling the + * listener. + * @param {Number} [priority] The listener priority. Lower priority + * listeners are called first. Listeners with the same priority + * value are called in registration order. Defaults to 10. + * @example + * someObject.on( 'someEvent', function() + * { + * alert( this == someObject ); // "true" + * }); + * @example + * someObject.on( 'someEvent', function() + * { + * alert( this == anotherObject ); // "true" + * } + * , anotherObject ); + * @example + * someObject.on( 'someEvent', function( event ) + * { + * alert( event.listenerData ); // "Example" + * } + * , null, 'Example' ); + * @example + * someObject.on( 'someEvent', function() { ... } ); // 2nd called + * someObject.on( 'someEvent', function() { ... }, null, null, 100 ); // 3rd called + * someObject.on( 'someEvent', function() { ... }, null, null, 1 ); // 1st called + */ + on : function( eventName, listenerFunction, scopeObj, listenerData, priority ) + { + // Get the event entry (create it if needed). + var events = getPrivate( this ), + event = events[ eventName ] || ( events[ eventName ] = new eventEntry( eventName ) ); + + if ( event.getListenerIndex( listenerFunction ) < 0 ) + { + // Get the listeners. + var listeners = event.listeners; + + // Fill the scope. + if ( !scopeObj ) + scopeObj = this; + + // Default the priority, if needed. + if ( isNaN( priority ) ) + priority = 10; + + var me = this; + + // Create the function to be fired for this listener. + var listenerFirer = function( editor, publisherData, stopFn, cancelFn ) + { + var ev = + { + name : eventName, + sender : this, + editor : editor, + data : publisherData, + listenerData : listenerData, + stop : stopFn, + cancel : cancelFn, + removeListener : function() + { + me.removeListener( eventName, listenerFunction ); + } + }; + + listenerFunction.call( scopeObj, ev ); + + return ev.data; + }; + listenerFirer.fn = listenerFunction; + listenerFirer.priority = priority; + + // Search for the right position for this new listener, based on its + // priority. + for ( var i = listeners.length - 1 ; i >= 0 ; i-- ) + { + // Find the item which should be before the new one. + if ( listeners[ i ].priority <= priority ) + { + // Insert the listener in the array. + listeners.splice( i + 1, 0, listenerFirer ); + return; + } + } + + // If no position has been found (or zero length), put it in + // the front of list. + listeners.unshift( listenerFirer ); + } + }, + + /** + * Fires an specific event in the object. All registered listeners are + * called at this point. + * @function + * @param {String} eventName The event name to fire. + * @param {Object} [data] Data to be sent as the + * {@link CKEDITOR.eventInfo#data} when calling the + * listeners. + * @param {CKEDITOR.editor} [editor] The editor instance to send as the + * {@link CKEDITOR.eventInfo#editor} when calling the + * listener. + * @returns {Boolean|Object} A booloan indicating that the event is to be + * canceled, or data returned by one of the listeners. + * @example + * someObject.on( 'someEvent', function() { ... } ); + * someObject.on( 'someEvent', function() { ... } ); + * <b>someObject.fire( 'someEvent' )</b>; // both listeners are called + * @example + * someObject.on( 'someEvent', function( event ) + * { + * alert( event.data ); // "Example" + * }); + * <b>someObject.fire( 'someEvent', 'Example' )</b>; + */ + fire : (function() + { + // Create the function that marks the event as stopped. + var stopped = false; + var stopEvent = function() + { + stopped = true; + }; + + // Create the function that marks the event as canceled. + var canceled = false; + var cancelEvent = function() + { + canceled = true; + }; + + return function( eventName, data, editor ) + { + // Get the event entry. + var event = getPrivate( this )[ eventName ]; + + // Save the previous stopped and cancelled states. We may + // be nesting fire() calls. + var previousStopped = stopped, + previousCancelled = canceled; + + // Reset the stopped and canceled flags. + stopped = canceled = false; + + if ( event ) + { + var listeners = event.listeners; + + if ( listeners.length ) + { + // As some listeners may remove themselves from the + // event, the original array length is dinamic. So, + // let's make a copy of all listeners, so we are + // sure we'll call all of them. + listeners = listeners.slice( 0 ); + + // Loop through all listeners. + for ( var i = 0 ; i < listeners.length ; i++ ) + { + // Call the listener, passing the event data. + var retData = listeners[i].call( this, editor, data, stopEvent, cancelEvent ); + + if ( typeof retData != 'undefined' ) + data = retData; + + // No further calls is stopped or canceled. + if ( stopped || canceled ) + break; + } + } + } + + var ret = canceled || ( typeof data == 'undefined' ? false : data ); + + // Restore the previous stopped and canceled states. + stopped = previousStopped; + canceled = previousCancelled; + + return ret; + }; + })(), + + /** + * Fires an specific event in the object, releasing all listeners + * registered to that event. The same listeners are not called again on + * successive calls of it or of {@link #fire}. + * @param {String} eventName The event name to fire. + * @param {Object} [data] Data to be sent as the + * {@link CKEDITOR.eventInfo#data} when calling the + * listeners. + * @param {CKEDITOR.editor} [editor] The editor instance to send as the + * {@link CKEDITOR.eventInfo#editor} when calling the + * listener. + * @returns {Boolean|Object} A booloan indicating that the event is to be + * canceled, or data returned by one of the listeners. + * @example + * someObject.on( 'someEvent', function() { ... } ); + * someObject.fire( 'someEvent' ); // above listener called + * <b>someObject.fireOnce( 'someEvent' )</b>; // above listener called + * someObject.fire( 'someEvent' ); // no listeners called + */ + fireOnce : function( eventName, data, editor ) + { + var ret = this.fire( eventName, data, editor ); + delete getPrivate( this )[ eventName ]; + return ret; + }, + + /** + * Unregisters a listener function from being called at the specified + * event. No errors are thrown if the listener has not been + * registered previously. + * @param {String} eventName The event name. + * @param {Function} listenerFunction The listener function to unregister. + * @example + * var myListener = function() { ... }; + * someObject.on( 'someEvent', myListener ); + * someObject.fire( 'someEvent' ); // myListener called + * <b>someObject.removeListener( 'someEvent', myListener )</b>; + * someObject.fire( 'someEvent' ); // myListener not called + */ + removeListener : function( eventName, listenerFunction ) + { + // Get the event entry. + var event = getPrivate( this )[ eventName ]; + + if ( event ) + { + var index = event.getListenerIndex( listenerFunction ); + if ( index >= 0 ) + event.listeners.splice( index, 1 ); + } + }, + + /** + * Checks if there is any listener registered to a given event. + * @param {String} eventName The event name. + * @example + * var myListener = function() { ... }; + * someObject.on( 'someEvent', myListener ); + * alert( someObject.<b>hasListeners( 'someEvent' )</b> ); // "true" + * alert( someObject.<b>hasListeners( 'noEvent' )</b> ); // "false" + */ + hasListeners : function( eventName ) + { + var event = getPrivate( this )[ eventName ]; + return ( event && event.listeners.length > 0 ) ; + } + }; + })(); +} diff --git a/_source/core/eventInfo.js b/_source/core/eventInfo.js new file mode 100644 index 0000000..0f313e8 --- /dev/null +++ b/_source/core/eventInfo.js @@ -0,0 +1,120 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the "virtual" {@link CKEDITOR.eventInfo} class, which + * contains the defintions of the event object passed to event listeners. + * This file is for documentation purposes only. + */ + +/** + * (Virtual Class) Do not call this constructor. This class is not really part + * of the API. + * @class Virtual class that illustrates the features of the event object to be + * passed to event listeners by a {@link CKEDITOR.event} based object. + * @name CKEDITOR.eventInfo + * @example + * // Do not do this. + * var myEvent = new CKEDITOR.eventInfo(); // Error: CKEDITOR.eventInfo is undefined + */ + +/** + * The event name. + * @name CKEDITOR.eventInfo.prototype.name + * @field + * @type String + * @example + * someObject.on( 'someEvent', function( event ) + * { + * alert( <b>event.name</b> ); // "someEvent" + * }); + * someObject.fire( 'someEvent' ); + */ + +/** + * The object that publishes (sends) the event. + * @name CKEDITOR.eventInfo.prototype.sender + * @field + * @type Object + * @example + * someObject.on( 'someEvent', function( event ) + * { + * alert( <b>event.sender</b> == someObject ); // "true" + * }); + * someObject.fire( 'someEvent' ); + */ + +/** + * The editor instance that holds the sender. May be the same as sender. May be + * null if the sender is not part of an editor instance, like a component + * running in standalone mode. + * @name CKEDITOR.eventInfo.prototype.editor + * @field + * @type CKEDITOR.editor + * @example + * myButton.on( 'someEvent', function( event ) + * { + * alert( <b>event.editor</b> == myEditor ); // "true" + * }); + * myButton.fire( 'someEvent', null, <b>myEditor</b> ); + */ + +/** + * Any kind of additional data. Its format and usage is event dependent. + * @name CKEDITOR.eventInfo.prototype.data + * @field + * @type Object + * @example + * someObject.on( 'someEvent', function( event ) + * { + * alert( <b>event.data</b> ); // "Example" + * }); + * someObject.fire( 'someEvent', <b>'Example'</b> ); + */ + +/** + * Any extra data appended during the listener registration. + * @name CKEDITOR.eventInfo.prototype.listenerData + * @field + * @type Object + * @example + * someObject.on( 'someEvent', function( event ) + * { + * alert( <b>event.listenerData</b> ); // "Example" + * } + * , null, <b>'Example'</b> ); + */ + +/** + * Indicates that no further listeners are to be called. + * @name CKEDITOR.eventInfo.prototype.stop + * @function + * @example + * someObject.on( 'someEvent', function( event ) + * { + * <b>event.stop()</b>; + * }); + * someObject.on( 'someEvent', function( event ) + * { + * // This one will not be called. + * }); + * alert( someObject.fire( 'someEvent' ) ); // "false" + */ + +/** + * Indicates that the event is to be cancelled (if cancelable). + * @name CKEDITOR.eventInfo.prototype.cancel + * @function + * @example + * someObject.on( 'someEvent', function( event ) + * { + * <b>event.cancel()</b>; + * }); + * someObject.on( 'someEvent', function( event ) + * { + * // This one will not be called. + * }); + * alert( someObject.fire( 'someEvent' ) ); // "true" + */ diff --git a/_source/core/focusmanager.js b/_source/core/focusmanager.js new file mode 100644 index 0000000..e59900d --- /dev/null +++ b/_source/core/focusmanager.js @@ -0,0 +1,152 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.focusManager} class, which is used + * to handle the focus on editor instances.. + */ + +/** + * Creates a focusManager class instance. + * @class Manages the focus activity in an editor instance. This class is to be + * used mainly by UI elements coders when adding interface elements that need + * to set the focus state of the editor. + * @param {CKEDITOR.editor} editor The editor instance. + * @example + * var focusManager = <b>new CKEDITOR.focusManager( editor )</b>; + * focusManager.focus(); + */ +CKEDITOR.focusManager = function( editor ) +{ + if ( editor.focusManager ) + return editor.focusManager; + + /** + * Indicates that the editor instance has focus. + * @type Boolean + * @example + * alert( CKEDITOR.instances.editor1.focusManager.hasFocus ); // e.g "true" + */ + this.hasFocus = false; + + /** + * Object used to hold private stuff. + * @private + */ + this._ = + { + editor : editor + }; + + return this; +}; + +CKEDITOR.focusManager.prototype = +{ + /** + * Used to indicate that the editor instance has the focus.<br /> + * <br /> + * Note that this function will not explicitelly set the focus in the + * editor (for example, making the caret blinking on it). Use + * {@link CKEDITOR.editor#focus} for it instead. + * @example + * var editor = CKEDITOR.instances.editor1; + * <b>editor.focusManager.focus()</b>; + */ + focus : function() + { + if ( this._.timer ) + clearTimeout( this._.timer ); + + if ( !this.hasFocus ) + { + // If another editor has the current focus, we first "blur" it. In + // this way the events happen in a more logical sequence, like: + // "focus 1" > "blur 1" > "focus 2" + // ... instead of: + // "focus 1" > "focus 2" > "blur 1" + if ( CKEDITOR.currentInstance ) + CKEDITOR.currentInstance.focusManager.forceBlur(); + + var editor = this._.editor; + + editor.container.getChild( 1 ).addClass( 'cke_focus' ); + + this.hasFocus = true; + editor.fire( 'focus' ); + } + }, + + /** + * Used to indicate that the editor instance has lost the focus.<br /> + * <br /> + * Note that this functions acts asynchronously with a delay of 100ms to + * avoid subsequent blur/focus effects. If you want the "blur" to happen + * immediately, use the {@link #forceBlur} function instead. + * @example + * var editor = CKEDITOR.instances.editor1; + * <b>editor.focusManager.blur()</b>; + */ + blur : function() + { + var focusManager = this; + + if ( focusManager._.timer ) + clearTimeout( focusManager._.timer ); + + focusManager._.timer = setTimeout( + function() + { + delete focusManager._.timer; + focusManager.forceBlur(); + } + , 100 ); + }, + + /** + * Used to indicate that the editor instance has lost the focus. Unlike + * {@link #blur}, this function is synchronous, marking the instance as + * "blured" immediately. + * @example + * var editor = CKEDITOR.instances.editor1; + * <b>editor.focusManager.forceBlur()</b>; + */ + forceBlur : function() + { + if ( this.hasFocus ) + { + var editor = this._.editor; + + editor.container.getChild( 1 ).removeClass( 'cke_focus' ); + + this.hasFocus = false; + editor.fire( 'blur' ); + } + } +}; + +/** + * Fired when the editor instance receives the input focus. + * @name CKEDITOR.editor#focus + * @event + * @param {CKEDITOR.editor} editor The editor instance. + * @example + * editor.on( 'focus', function( e ) + * { + * alert( 'The editor named ' + e.editor.name + ' is now focused' ); + * }); + */ + +/** + * Fired when the editor instance loses the input focus. + * @name CKEDITOR.editor#blur + * @event + * @param {CKEDITOR.editor} editor The editor instance. + * @example + * editor.on( 'blur', function( e ) + * { + * alert( 'The editor named ' + e.editor.name + ' lost the focus' ); + * }); + */ diff --git a/_source/core/htmlparser.js b/_source/core/htmlparser.js new file mode 100644 index 0000000..45808e3 --- /dev/null +++ b/_source/core/htmlparser.js @@ -0,0 +1,224 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Creates a {@link CKEDITOR.htmlParser} class instance. + * @class Provides an "event like" system to parse strings of HTML data. + * @example + * var parser = new CKEDITOR.htmlParser(); + * parser.onTagOpen = function( tagName, attributes, selfClosing ) + * { + * alert( tagName ); + * }; + * parser.parse( '<p>Some <b>text</b>.</p>' ); + */ +CKEDITOR.htmlParser = function() +{ + this._ = + { + htmlPartsRegex : new RegExp( '<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:"[^"]*")|(?:\'[^\']*\')|[^"\'>])*)\\/?>))', 'g' ) + }; +}; + +(function() +{ + var attribsRegex = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g, + emptyAttribs = {checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1}; + + CKEDITOR.htmlParser.prototype = + { + /** + * Function to be fired when a tag opener is found. This function + * should be overriden when using this class. + * @param {String} tagName The tag name. The name is guarantted to be + * lowercased. + * @param {Object} attributes An object containing all tag attributes. Each + * property in this object represent and attribute name and its + * value is the attribute value. + * @param {Boolean} selfClosing true if the tag closes itself, false if the + * tag doesn't. + * @example + * var parser = new CKEDITOR.htmlParser(); + * parser.onTagOpen = function( tagName, attributes, selfClosing ) + * { + * alert( tagName ); // e.g. "b" + * }); + * parser.parse( "<!-- Example --><b>Hello</b>" ); + */ + onTagOpen : function() {}, + + /** + * Function to be fired when a tag closer is found. This function + * should be overriden when using this class. + * @param {String} tagName The tag name. The name is guarantted to be + * lowercased. + * @example + * var parser = new CKEDITOR.htmlParser(); + * parser.onTagClose = function( tagName ) + * { + * alert( tagName ); // e.g. "b" + * }); + * parser.parse( "<!-- Example --><b>Hello</b>" ); + */ + onTagClose : function() {}, + + /** + * Function to be fired when text is found. This function + * should be overriden when using this class. + * @param {String} text The text found. + * @example + * var parser = new CKEDITOR.htmlParser(); + * parser.onText = function( text ) + * { + * alert( text ); // e.g. "Hello" + * }); + * parser.parse( "<!-- Example --><b>Hello</b>" ); + */ + onText : function() {}, + + /** + * Function to be fired when CDATA section is found. This function + * should be overriden when using this class. + * @param {String} cdata The CDATA been found. + * @example + * var parser = new CKEDITOR.htmlParser(); + * parser.onCDATA = function( cdata ) + * { + * alert( cdata ); // e.g. "var hello;" + * }); + * parser.parse( "<script>var hello;</script>" ); + */ + onCDATA : function() {}, + + /** + * Function to be fired when a commend is found. This function + * should be overriden when using this class. + * @param {String} comment The comment text. + * @example + * var parser = new CKEDITOR.htmlParser(); + * parser.onComment = function( comment ) + * { + * alert( comment ); // e.g. " Example " + * }); + * parser.parse( "<!-- Example --><b>Hello</b>" ); + */ + onComment : function() {}, + + /** + * Parses text, looking for HTML tokens, like tag openers or closers, + * or comments. This function fires the onTagOpen, onTagClose, onText + * and onComment function during its execution. + * @param {String} html The HTML to be parsed. + * @example + * var parser = new CKEDITOR.htmlParser(); + * // The onTagOpen, onTagClose, onText and onComment should be overriden + * // at this point. + * parser.parse( "<!-- Example --><b>Hello</b>" ); + */ + parse : function( html ) + { + var parts, + tagName, + nextIndex = 0, + cdata; // The collected data inside a CDATA section. + + while ( ( parts = this._.htmlPartsRegex.exec( html ) ) ) + { + var tagIndex = parts.index; + if ( tagIndex > nextIndex ) + { + var text = html.substring( nextIndex, tagIndex ); + + if ( cdata ) + cdata.push( text ); + else + this.onText( text ); + } + + nextIndex = this._.htmlPartsRegex.lastIndex; + + /* + "parts" is an array with the following items: + 0 : The entire match for opening/closing tags and comments. + 1 : Group filled with the tag name for closing tags. + 2 : Group filled with the comment text. + 3 : Group filled with the tag name for opening tags. + 4 : Group filled with the attributes part of opening tags. + */ + + // Closing tag + if ( ( tagName = parts[ 1 ] ) ) + { + tagName = tagName.toLowerCase(); + + if ( cdata && CKEDITOR.dtd.$cdata[ tagName ] ) + { + // Send the CDATA data. + this.onCDATA( cdata.join('') ); + cdata = null; + } + + if ( !cdata ) + { + this.onTagClose( tagName ); + continue; + } + } + + // If CDATA is enabled, just save the raw match. + if ( cdata ) + { + cdata.push( parts[ 0 ] ); + continue; + } + + // Opening tag + if ( ( tagName = parts[ 3 ] ) ) + { + tagName = tagName.toLowerCase(); + + // There are some tag names that can break things, so let's + // simply ignore them when parsing. (#5224) + if ( /="/.test( tagName ) ) + continue; + + var attribs = {}, + attribMatch, + attribsPart = parts[ 4 ], + selfClosing = !!( attribsPart && attribsPart.charAt( attribsPart.length - 1 ) == '/' ); + + if ( attribsPart ) + { + while ( ( attribMatch = attribsRegex.exec( attribsPart ) ) ) + { + var attName = attribMatch[1].toLowerCase(), + attValue = attribMatch[2] || attribMatch[3] || attribMatch[4] || ''; + + if ( !attValue && emptyAttribs[ attName ] ) + attribs[ attName ] = attName; + else + attribs[ attName ] = attValue; + } + } + + this.onTagOpen( tagName, attribs, selfClosing ); + + // Open CDATA mode when finding the appropriate tags. + if ( !cdata && CKEDITOR.dtd.$cdata[ tagName ] ) + cdata = []; + + continue; + } + + // Comment + if ( ( tagName = parts[ 2 ] ) ) + this.onComment( tagName ); + } + + if ( html.length > nextIndex ) + this.onText( html.substring( nextIndex, html.length ) ); + } + }; +})(); diff --git a/_source/core/htmlparser/basicwriter.js b/_source/core/htmlparser/basicwriter.js new file mode 100644 index 0000000..010ae74 --- /dev/null +++ b/_source/core/htmlparser/basicwriter.js @@ -0,0 +1,145 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.htmlParser.basicWriter = CKEDITOR.tools.createClass( +{ + $ : function() + { + this._ = + { + output : [] + }; + }, + + proto : + { + /** + * Writes the tag opening part for a opener tag. + * @param {String} tagName The element name for this tag. + * @param {Object} attributes The attributes defined for this tag. The + * attributes could be used to inspect the tag. + * @example + * // Writes "<p". + * writer.openTag( 'p', { class : 'MyClass', id : 'MyId' } ); + */ + openTag : function( tagName, attributes ) + { + this._.output.push( '<', tagName ); + }, + + /** + * Writes the tag closing part for a opener tag. + * @param {String} tagName The element name for this tag. + * @param {Boolean} isSelfClose Indicates that this is a self-closing tag, + * like "br" or "img". + * @example + * // Writes ">". + * writer.openTagClose( 'p', false ); + * @example + * // Writes " />". + * writer.openTagClose( 'br', true ); + */ + openTagClose : function( tagName, isSelfClose ) + { + if ( isSelfClose ) + this._.output.push( ' />' ); + else + this._.output.push( '>' ); + }, + + /** + * Writes an attribute. This function should be called after opening the + * tag with {@link #openTagClose}. + * @param {String} attName The attribute name. + * @param {String} attValue The attribute value. + * @example + * // Writes ' class="MyClass"'. + * writer.attribute( 'class', 'MyClass' ); + */ + attribute : function( attName, attValue ) + { + // Browsers don't always escape special character in attribute values. (#4683, #4719). + if ( typeof attValue == 'string' ) + attValue = CKEDITOR.tools.htmlEncodeAttr( attValue ); + + this._.output.push( ' ', attName, '="', attValue, '"' ); + }, + + /** + * Writes a closer tag. + * @param {String} tagName The element name for this tag. + * @example + * // Writes "</p>". + * writer.closeTag( 'p' ); + */ + closeTag : function( tagName ) + { + this._.output.push( '</', tagName, '>' ); + }, + + /** + * Writes text. + * @param {String} text The text value + * @example + * // Writes "Hello Word". + * writer.text( 'Hello Word' ); + */ + text : function( text ) + { + this._.output.push( text ); + }, + + /** + * Writes a comment. + * @param {String} comment The comment text. + * @example + * // Writes "<!-- My comment -->". + * writer.comment( ' My comment ' ); + */ + comment : function( comment ) + { + this._.output.push( '<!--', comment, '-->' ); + }, + + /** + * Writes any kind of data to the ouput. + * @example + * writer.write( 'This is an <b>example</b>.' ); + */ + write : function( data ) + { + this._.output.push( data ); + }, + + /** + * Empties the current output buffer. + * @example + * writer.reset(); + */ + reset : function() + { + this._.output = []; + this._.indent = false; + }, + + /** + * Empties the current output buffer. + * @param {Boolean} reset Indicates that the {@link reset} function is to + * be automatically called after retrieving the HTML. + * @returns {String} The HTML written to the writer so far. + * @example + * var html = writer.getHtml(); + */ + getHtml : function( reset ) + { + var html = this._.output.join( '' ); + + if ( reset ) + this.reset(); + + return html; + } + } +}); diff --git a/_source/core/htmlparser/cdata.js b/_source/core/htmlparser/cdata.js new file mode 100644 index 0000000..422f603 --- /dev/null +++ b/_source/core/htmlparser/cdata.js @@ -0,0 +1,43 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + + /** + * A lightweight representation of HTML text. + * @constructor + * @example + */ + CKEDITOR.htmlParser.cdata = function( value ) + { + /** + * The CDATA value. + * @type String + * @example + */ + this.value = value; + }; + + CKEDITOR.htmlParser.cdata.prototype = + { + /** + * CDATA has the same type as {@link CKEDITOR.htmlParser.text} This is + * a constant value set to {@link CKEDITOR.NODE_TEXT}. + * @type Number + * @example + */ + type : CKEDITOR.NODE_TEXT, + + /** + * Writes write the CDATA with no special manipulations. + * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML. + */ + writeHtml : function( writer ) + { + writer.write( this.value ); + } + }; +})(); diff --git a/_source/core/htmlparser/comment.js b/_source/core/htmlparser/comment.js new file mode 100644 index 0000000..a55b489 --- /dev/null +++ b/_source/core/htmlparser/comment.js @@ -0,0 +1,60 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * A lightweight representation of an HTML comment. + * @constructor + * @example + */ +CKEDITOR.htmlParser.comment = function( value ) +{ + /** + * The comment text. + * @type String + * @example + */ + this.value = value; + + /** @private */ + this._ = + { + isBlockLike : false + }; +}; + +CKEDITOR.htmlParser.comment.prototype = +{ + /** + * The node type. This is a constant value set to {@link CKEDITOR.NODE_COMMENT}. + * @type Number + * @example + */ + type : CKEDITOR.NODE_COMMENT, + + /** + * Writes the HTML representation of this comment to a CKEDITOR.htmlWriter. + * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML. + * @example + */ + writeHtml : function( writer, filter ) + { + var comment = this.value; + + if ( filter ) + { + if ( !( comment = filter.onComment( comment, this ) ) ) + return; + + if ( typeof comment != 'string' ) + { + comment.parent = this.parent; + comment.writeHtml( writer, filter ); + return; + } + } + + writer.comment( comment ); + } +}; diff --git a/_source/core/htmlparser/element.js b/_source/core/htmlparser/element.js new file mode 100644 index 0000000..b1d5547 --- /dev/null +++ b/_source/core/htmlparser/element.js @@ -0,0 +1,308 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * A lightweight representation of an HTML element. + * @param {String} name The element name. + * @param {Object} attributes And object holding all attributes defined for + * this element. + * @constructor + * @example + */ +CKEDITOR.htmlParser.element = function( name, attributes ) +{ + /** + * The element name. + * @type String + * @example + */ + this.name = name; + + /** + * Holds the attributes defined for this element. + * @type Object + * @example + */ + this.attributes = attributes || ( attributes = {} ); + + /** + * The nodes that are direct children of this element. + * @type Array + * @example + */ + this.children = []; + + var tagName = attributes[ 'data-cke-real-element-type' ] || name || ''; + + // Reveal the real semantic of our internal custom tag name (#6639). + var internalTag = tagName.match( /^cke:(.*)/ ); + internalTag && ( tagName = internalTag[ 1 ] ); + + var dtd = CKEDITOR.dtd, + isBlockLike = !!( dtd.$nonBodyContent[ tagName ] + || dtd.$block[ tagName ] + || dtd.$listItem[ tagName ] + || dtd.$tableContent[ tagName ] + || dtd.$nonEditable[ tagName ] + || tagName == 'br' ), + isEmpty = !!dtd.$empty[ name ]; + + this.isEmpty = isEmpty; + this.isUnknown = !dtd[ name ]; + + /** @private */ + this._ = + { + isBlockLike : isBlockLike, + hasInlineStarted : isEmpty || !isBlockLike + }; +}; + +/** + * Object presentation of CSS style declaration text. + * @param {CKEDITOR.htmlParser.element|String} elementOrStyleText A html parser element or the inline style text. + */ +CKEDITOR.htmlParser.cssStyle = function() +{ + var styleText, + arg = arguments[ 0 ], + rules = {}; + + styleText = arg instanceof CKEDITOR.htmlParser.element ? arg.attributes.style : arg; + + // html-encoded quote might be introduced by 'font-family' + // from MS-Word which confused the following regexp. e.g. + //'font-family: "Lucida, Console"' + ( styleText || '' ) + .replace( /"/g, '"' ) + .replace( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, + function( match, name, value ) + { + name == 'font-family' && ( value = value.replace( /["']/g, '' ) ); + rules[ name.toLowerCase() ] = value; + }); + + return { + + rules : rules, + + /** + * Apply the styles onto the specified element or object. + * @param {CKEDITOR.htmlParser.element|CKEDITOR.dom.element|Object} obj + */ + populate : function( obj ) + { + var style = this.toString(); + if ( style ) + { + obj instanceof CKEDITOR.dom.element ? + obj.setAttribute( 'style', style ) : + obj instanceof CKEDITOR.htmlParser.element ? + obj.attributes.style = style : + obj.style = style; + } + }, + + toString : function() + { + var output = []; + for ( var i in rules ) + rules[ i ] && output.push( i, ':', rules[ i ], ';' ); + return output.join( '' ); + } + }; +}; + +(function() +{ + // Used to sort attribute entries in an array, where the first element of + // each object is the attribute name. + var sortAttribs = function( a, b ) + { + a = a[0]; + b = b[0]; + return a < b ? -1 : a > b ? 1 : 0; + }; + + CKEDITOR.htmlParser.element.prototype = + { + /** + * The node type. This is a constant value set to {@link CKEDITOR.NODE_ELEMENT}. + * @type Number + * @example + */ + type : CKEDITOR.NODE_ELEMENT, + + /** + * Adds a node to the element children list. + * @param {Object} node The node to be added. It can be any of of the + * following types: {@link CKEDITOR.htmlParser.element}, + * {@link CKEDITOR.htmlParser.text} and + * {@link CKEDITOR.htmlParser.comment}. + * @function + * @example + */ + add : CKEDITOR.htmlParser.fragment.prototype.add, + + /** + * Clone this element. + * @returns {CKEDITOR.htmlParser.element} The element clone. + * @example + */ + clone : function() + { + return new CKEDITOR.htmlParser.element( this.name, this.attributes ); + }, + + /** + * Writes the element HTML to a CKEDITOR.htmlWriter. + * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML. + * @example + */ + writeHtml : function( writer, filter ) + { + var attributes = this.attributes; + + // Ignore cke: prefixes when writing HTML. + var element = this, + writeName = element.name, + a, newAttrName, value; + + var isChildrenFiltered; + + /** + * Providing an option for bottom-up filtering order ( element + * children to be pre-filtered before the element itself ). + */ + element.filterChildren = function() + { + if ( !isChildrenFiltered ) + { + var writer = new CKEDITOR.htmlParser.basicWriter(); + CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.call( element, writer, filter ); + element.children = new CKEDITOR.htmlParser.fragment.fromHtml( writer.getHtml(), 0, element.clone() ).children; + isChildrenFiltered = 1; + } + }; + + if ( filter ) + { + while ( true ) + { + if ( !( writeName = filter.onElementName( writeName ) ) ) + return; + + element.name = writeName; + + if ( !( element = filter.onElement( element ) ) ) + return; + + element.parent = this.parent; + + if ( element.name == writeName ) + break; + + // If the element has been replaced with something of a + // different type, then make the replacement write itself. + if ( element.type != CKEDITOR.NODE_ELEMENT ) + { + element.writeHtml( writer, filter ); + return; + } + + writeName = element.name; + + // This indicate that the element has been dropped by + // filter but not the children. + if ( !writeName ) + { + // Fix broken parent refs. + for ( var c = 0, length = this.children.length ; c < length ; c++ ) + this.children[ c ].parent = element.parent; + + this.writeChildrenHtml.call( element, writer, isChildrenFiltered ? null : filter ); + return; + } + } + + // The element may have been changed, so update the local + // references. + attributes = element.attributes; + } + + // Open element tag. + writer.openTag( writeName, attributes ); + + // Copy all attributes to an array. + var attribsArray = []; + // Iterate over the attributes twice since filters may alter + // other attributes. + for ( var i = 0 ; i < 2; i++ ) + { + for ( a in attributes ) + { + newAttrName = a; + value = attributes[ a ]; + if ( i == 1 ) + attribsArray.push( [ a, value ] ); + else if ( filter ) + { + while ( true ) + { + if ( !( newAttrName = filter.onAttributeName( a ) ) ) + { + delete attributes[ a ]; + break; + } + else if ( newAttrName != a ) + { + delete attributes[ a ]; + a = newAttrName; + continue; + } + else + break; + } + if ( newAttrName ) + { + if ( ( value = filter.onAttribute( element, newAttrName, value ) ) === false ) + delete attributes[ newAttrName ]; + else + attributes [ newAttrName ] = value; + } + } + } + } + // Sort the attributes by name. + if ( writer.sortAttributes ) + attribsArray.sort( sortAttribs ); + + // Send the attributes. + var len = attribsArray.length; + for ( i = 0 ; i < len ; i++ ) + { + var attrib = attribsArray[ i ]; + writer.attribute( attrib[0], attrib[1] ); + } + + // Close the tag. + writer.openTagClose( writeName, element.isEmpty ); + + if ( !element.isEmpty ) + { + this.writeChildrenHtml.call( element, writer, isChildrenFiltered ? null : filter ); + // Close the element. + writer.closeTag( writeName ); + } + }, + + writeChildrenHtml : function( writer, filter ) + { + // Send children. + CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.apply( this, arguments ); + + } + }; +})(); diff --git a/_source/core/htmlparser/filter.js b/_source/core/htmlparser/filter.js new file mode 100644 index 0000000..a1f16e2 --- /dev/null +++ b/_source/core/htmlparser/filter.js @@ -0,0 +1,288 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + CKEDITOR.htmlParser.filter = CKEDITOR.tools.createClass( + { + $ : function( rules ) + { + this._ = + { + elementNames : [], + attributeNames : [], + elements : { $length : 0 }, + attributes : { $length : 0 } + }; + + if ( rules ) + this.addRules( rules, 10 ); + }, + + proto : + { + addRules : function( rules, priority ) + { + if ( typeof priority != 'number' ) + priority = 10; + + // Add the elementNames. + addItemsToList( this._.elementNames, rules.elementNames, priority ); + + // Add the attributeNames. + addItemsToList( this._.attributeNames, rules.attributeNames, priority ); + + // Add the elements. + addNamedItems( this._.elements, rules.elements, priority ); + + // Add the attributes. + addNamedItems( this._.attributes, rules.attributes, priority ); + + // Add the text. + this._.text = transformNamedItem( this._.text, rules.text, priority ) || this._.text; + + // Add the comment. + this._.comment = transformNamedItem( this._.comment, rules.comment, priority ) || this._.comment; + + // Add root fragment. + this._.root = transformNamedItem( this._.root, rules.root, priority ) || this._.root; + }, + + onElementName : function( name ) + { + return filterName( name, this._.elementNames ); + }, + + onAttributeName : function( name ) + { + return filterName( name, this._.attributeNames ); + }, + + onText : function( text ) + { + var textFilter = this._.text; + return textFilter ? textFilter.filter( text ) : text; + }, + + onComment : function( commentText, comment ) + { + var textFilter = this._.comment; + return textFilter ? textFilter.filter( commentText, comment ) : commentText; + }, + + onFragment : function( element ) + { + var rootFilter = this._.root; + return rootFilter ? rootFilter.filter( element ) : element; + }, + + onElement : function( element ) + { + // We must apply filters set to the specific element name as + // well as those set to the generic $ name. So, add both to an + // array and process them in a small loop. + var filters = [ this._.elements[ '^' ], this._.elements[ element.name ], this._.elements.$ ], + filter, ret; + + for ( var i = 0 ; i < 3 ; i++ ) + { + filter = filters[ i ]; + if ( filter ) + { + ret = filter.filter( element, this ); + + if ( ret === false ) + return null; + + if ( ret && ret != element ) + return this.onNode( ret ); + + // The non-root element has been dismissed by one of the filters. + if ( element.parent && !element.name ) + break; + } + } + + return element; + }, + + onNode : function( node ) + { + var type = node.type; + + return type == CKEDITOR.NODE_ELEMENT ? this.onElement( node ) : + type == CKEDITOR.NODE_TEXT ? new CKEDITOR.htmlParser.text( this.onText( node.value ) ) : + type == CKEDITOR.NODE_COMMENT ? new CKEDITOR.htmlParser.comment( this.onComment( node.value ) ): + null; + }, + + onAttribute : function( element, name, value ) + { + var filter = this._.attributes[ name ]; + + if ( filter ) + { + var ret = filter.filter( value, element, this ); + + if ( ret === false ) + return false; + + if ( typeof ret != 'undefined' ) + return ret; + } + + return value; + } + } + }); + + function filterName( name, filters ) + { + for ( var i = 0 ; name && i < filters.length ; i++ ) + { + var filter = filters[ i ]; + name = name.replace( filter[ 0 ], filter[ 1 ] ); + } + return name; + } + + function addItemsToList( list, items, priority ) + { + if ( typeof items == 'function' ) + items = [ items ]; + + var i, j, + listLength = list.length, + itemsLength = items && items.length; + + if ( itemsLength ) + { + // Find the index to insert the items at. + for ( i = 0 ; i < listLength && list[ i ].pri < priority ; i++ ) + { /*jsl:pass*/ } + + // Add all new items to the list at the specific index. + for ( j = itemsLength - 1 ; j >= 0 ; j-- ) + { + var item = items[ j ]; + if ( item ) + { + item.pri = priority; + list.splice( i, 0, item ); + } + } + } + } + + function addNamedItems( hashTable, items, priority ) + { + if ( items ) + { + for ( var name in items ) + { + var current = hashTable[ name ]; + + hashTable[ name ] = + transformNamedItem( + current, + items[ name ], + priority ); + + if ( !current ) + hashTable.$length++; + } + } + } + + function transformNamedItem( current, item, priority ) + { + if ( item ) + { + item.pri = priority; + + if ( current ) + { + // If the current item is not an Array, transform it. + if ( !current.splice ) + { + if ( current.pri > priority ) + current = [ item, current ]; + else + current = [ current, item ]; + + current.filter = callItems; + } + else + addItemsToList( current, item, priority ); + + return current; + } + else + { + item.filter = item; + return item; + } + } + } + + // Invoke filters sequentially on the array, break the iteration + // when it doesn't make sense to continue anymore. + function callItems( currentEntry ) + { + var isNode = currentEntry.type + || currentEntry instanceof CKEDITOR.htmlParser.fragment; + + for ( var i = 0 ; i < this.length ; i++ ) + { + // Backup the node info before filtering. + if ( isNode ) + { + var orgType = currentEntry.type, + orgName = currentEntry.name; + } + + var item = this[ i ], + ret = item.apply( window, arguments ); + + if ( ret === false ) + return ret; + + // We're filtering node (element/fragment). + if ( isNode ) + { + // No further filtering if it's not anymore + // fitable for the subsequent filters. + if ( ret && ( ret.name != orgName + || ret.type != orgType ) ) + { + return ret; + } + } + // Filtering value (nodeName/textValue/attrValue). + else + { + // No further filtering if it's not + // any more values. + if ( typeof ret != 'string' ) + return ret; + } + + ret != undefined && ( currentEntry = ret ); + } + + return currentEntry; + } +})(); + +// "entities" plugin +/* +{ + text : function( text ) + { + // TODO : Process entities. + return text.toUpperCase(); + } +}; +*/ diff --git a/_source/core/htmlparser/fragment.js b/_source/core/htmlparser/fragment.js new file mode 100644 index 0000000..bfa5cc5 --- /dev/null +++ b/_source/core/htmlparser/fragment.js @@ -0,0 +1,497 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * A lightweight representation of an HTML DOM structure. + * @constructor + * @example + */ +CKEDITOR.htmlParser.fragment = function() +{ + /** + * The nodes contained in the root of this fragment. + * @type Array + * @example + * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<b>Sample</b> Text' ); + * alert( fragment.children.length ); "2" + */ + this.children = []; + + /** + * Get the fragment parent. Should always be null. + * @type Object + * @default null + * @example + */ + this.parent = null; + + /** @private */ + this._ = + { + isBlockLike : true, + hasInlineStarted : false + }; +}; + +(function() +{ + // Block-level elements whose internal structure should be respected during + // parser fixing. + var nonBreakingBlocks = CKEDITOR.tools.extend( { table:1,ul:1,ol:1,dl:1 }, CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl ); + + // IE < 8 don't output the close tag on definition list items. (#6975) + var optionalCloseTags = CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? { dd : 1, dt :1 } : {}; + + var listBlocks = { ol:1, ul:1 }; + + // Dtd of the fragment element, basically it accept anything except for intermediate structure, e.g. orphan <li>. + var rootDtd = CKEDITOR.tools.extend( {}, { html: 1 }, CKEDITOR.dtd.html, CKEDITOR.dtd.body, CKEDITOR.dtd.head, { style:1,script:1 } ); + + /** + * Creates a {@link CKEDITOR.htmlParser.fragment} from an HTML string. + * @param {String} fragmentHtml The HTML to be parsed, filling the fragment. + * @param {Number} [fixForBody=false] Wrap body with specified element if needed. + * @param {CKEDITOR.htmlParser.element} contextNode Parse the html as the content of this element. + * @returns CKEDITOR.htmlParser.fragment The fragment created. + * @example + * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<b>Sample</b> Text' ); + * alert( fragment.children[0].name ); "b" + * alert( fragment.children[1].value ); " Text" + */ + CKEDITOR.htmlParser.fragment.fromHtml = function( fragmentHtml, fixForBody, contextNode ) + { + var parser = new CKEDITOR.htmlParser(), + fragment = contextNode || new CKEDITOR.htmlParser.fragment(), + pendingInline = [], + pendingBRs = [], + currentNode = fragment, + // Indicate we're inside a <pre> element, spaces should be touched differently. + inPre = false; + + function checkPending( newTagName ) + { + var pendingBRsSent; + + if ( pendingInline.length > 0 ) + { + for ( var i = 0 ; i < pendingInline.length ; i++ ) + { + var pendingElement = pendingInline[ i ], + pendingName = pendingElement.name, + pendingDtd = CKEDITOR.dtd[ pendingName ], + currentDtd = currentNode.name && CKEDITOR.dtd[ currentNode.name ]; + + if ( ( !currentDtd || currentDtd[ pendingName ] ) && ( !newTagName || !pendingDtd || pendingDtd[ newTagName ] || !CKEDITOR.dtd[ newTagName ] ) ) + { + if ( !pendingBRsSent ) + { + sendPendingBRs(); + pendingBRsSent = 1; + } + + // Get a clone for the pending element. + pendingElement = pendingElement.clone(); + + // Add it to the current node and make it the current, + // so the new element will be added inside of it. + pendingElement.parent = currentNode; + currentNode = pendingElement; + + // Remove the pending element (back the index by one + // to properly process the next entry). + pendingInline.splice( i, 1 ); + i--; + } + } + } + } + + function sendPendingBRs() + { + while ( pendingBRs.length ) + currentNode.add( pendingBRs.shift() ); + } + + /* + * Beside of simply append specified element to target, this function also takes + * care of other dirty lifts like forcing block in body, trimming spaces at + * the block boundaries etc. + * + * @param {Element} element The element to be added as the last child of {@link target}. + * @param {Element} target The parent element to relieve the new node. + * @param {Boolean} [moveCurrent=false] Don't change the "currentNode" global unless + * there's a return point node specified on the element, otherwise move current onto {@link target} node. + */ + function addElement( element, target, moveCurrent ) + { + // Ignore any element that has already been added. + if ( element.previous !== undefined ) + return; + + target = target || currentNode || fragment; + + // Current element might be mangled by fix body below, + // save it for restore later. + var savedCurrent = currentNode; + + // If the target is the fragment and this inline element can't go inside + // body (if fixForBody). + if ( fixForBody && ( !target.type || target.name == 'body' ) ) + { + var elementName, realElementName; + if ( element.attributes + && ( realElementName = + element.attributes[ 'data-cke-real-element-type' ] ) ) + elementName = realElementName; + else + elementName = element.name; + + if ( elementName && !( elementName in CKEDITOR.dtd.$body || elementName == 'body' || element.isOrphan ) ) + { + // Create a <p> in the fragment. + currentNode = target; + parser.onTagOpen( fixForBody, {} ); + + // The new target now is the <p>. + element.returnPoint = target = currentNode; + } + } + + // Rtrim empty spaces on block end boundary. (#3585) + if ( element._.isBlockLike + && element.name != 'pre' ) + { + + var length = element.children.length, + lastChild = element.children[ length - 1 ], + text; + if ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT ) + { + if ( !( text = CKEDITOR.tools.rtrim( lastChild.value ) ) ) + element.children.length = length -1; + else + lastChild.value = text; + } + } + + target.add( element ); + + if ( element.returnPoint ) + { + currentNode = element.returnPoint; + delete element.returnPoint; + } + else + currentNode = moveCurrent ? target : savedCurrent; + } + + parser.onTagOpen = function( tagName, attributes, selfClosing, optionalClose ) + { + var element = new CKEDITOR.htmlParser.element( tagName, attributes ); + + // "isEmpty" will be always "false" for unknown elements, so we + // must force it if the parser has identified it as a selfClosing tag. + if ( element.isUnknown && selfClosing ) + element.isEmpty = true; + + // Check for optional closed elements, including browser quirks and manually opened blocks. + element.isOptionalClose = tagName in optionalCloseTags || optionalClose; + + // This is a tag to be removed if empty, so do not add it immediately. + if ( CKEDITOR.dtd.$removeEmpty[ tagName ] ) + { + pendingInline.push( element ); + return; + } + else if ( tagName == 'pre' ) + inPre = true; + else if ( tagName == 'br' && inPre ) + { + currentNode.add( new CKEDITOR.htmlParser.text( '\n' ) ); + return; + } + + if ( tagName == 'br' ) + { + pendingBRs.push( element ); + return; + } + + while( 1 ) + { + var currentName = currentNode.name; + + var currentDtd = currentName ? ( CKEDITOR.dtd[ currentName ] + || ( currentNode._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span ) ) + : rootDtd; + + // If the element cannot be child of the current element. + if ( !element.isUnknown && !currentNode.isUnknown && !currentDtd[ tagName ] ) + { + // Current node doesn't have a close tag, time for a close + // as this element isn't fit in. (#7497) + if ( currentNode.isOptionalClose ) + parser.onTagClose( currentName ); + // Fixing malformed nested lists by moving it into a previous list item. (#3828) + else if ( tagName in listBlocks + && currentName in listBlocks ) + { + var children = currentNode.children, + lastChild = children[ children.length - 1 ]; + + // Establish the list item if it's not existed. + if ( !( lastChild && lastChild.name == 'li' ) ) + addElement( ( lastChild = new CKEDITOR.htmlParser.element( 'li' ) ), currentNode ); + + !element.returnPoint && ( element.returnPoint = currentNode ); + currentNode = lastChild; + } + // Establish new list root for orphan list items. + else if ( tagName in CKEDITOR.dtd.$listItem && currentName != tagName ) + parser.onTagOpen( tagName == 'li' ? 'ul' : 'dl', {}, 0, 1 ); + // We're inside a structural block like table and list, AND the incoming element + // is not of the same type (e.g. <td>td1<td>td2</td>), we simply add this new one before it, + // and most importantly, return back to here once this element is added, + // e.g. <table><tr><td>td1</td><p>p1</p><td>td2</td></tr></table> + else if ( currentName in nonBreakingBlocks && currentName != tagName ) + { + !element.returnPoint && ( element.returnPoint = currentNode ); + currentNode = currentNode.parent; + } + else + { + // The current element is an inline element, which + // need to be continued even after the close, so put + // it in the pending list. + if ( currentName in CKEDITOR.dtd.$inline ) + pendingInline.unshift( currentNode ); + + // The most common case where we just need to close the + // current one and append the new one to the parent. + if ( currentNode.parent ) + addElement( currentNode, currentNode.parent, 1 ); + // We've tried our best to fix the embarrassment here, while + // this element still doesn't find it's parent, mark it as + // orphan and show our tolerance to it. + else + { + element.isOrphan = 1; + break; + } + } + } + else + break; + } + + checkPending( tagName ); + sendPendingBRs(); + + element.parent = currentNode; + + if ( element.isEmpty ) + addElement( element ); + else + currentNode = element; + }; + + parser.onTagClose = function( tagName ) + { + // Check if there is any pending tag to be closed. + for ( var i = pendingInline.length - 1 ; i >= 0 ; i-- ) + { + // If found, just remove it from the list. + if ( tagName == pendingInline[ i ].name ) + { + pendingInline.splice( i, 1 ); + return; + } + } + + var pendingAdd = [], + newPendingInline = [], + candidate = currentNode; + + while ( candidate != fragment && candidate.name != tagName ) + { + // If this is an inline element, add it to the pending list, if we're + // really closing one of the parents element later, they will continue + // after it. + if ( !candidate._.isBlockLike ) + newPendingInline.unshift( candidate ); + + // This node should be added to it's parent at this point. But, + // it should happen only if the closing tag is really closing + // one of the nodes. So, for now, we just cache it. + pendingAdd.push( candidate ); + + // Make sure return point is properly restored. + candidate = candidate.returnPoint || candidate.parent; + } + + if ( candidate != fragment ) + { + // Add all elements that have been found in the above loop. + for ( i = 0 ; i < pendingAdd.length ; i++ ) + { + var node = pendingAdd[ i ]; + addElement( node, node.parent ); + } + + currentNode = candidate; + + if ( currentNode.name == 'pre' ) + inPre = false; + + if ( candidate._.isBlockLike ) + sendPendingBRs(); + + addElement( candidate, candidate.parent ); + + // The parent should start receiving new nodes now, except if + // addElement changed the currentNode. + if ( candidate == currentNode ) + currentNode = currentNode.parent; + + pendingInline = pendingInline.concat( newPendingInline ); + } + + if ( tagName == 'body' ) + fixForBody = false; + }; + + parser.onText = function( text ) + { + // Trim empty spaces at beginning of text contents except <pre>. + if ( ( !currentNode._.hasInlineStarted || pendingBRs.length ) && !inPre ) + { + text = CKEDITOR.tools.ltrim( text ); + + if ( text.length === 0 ) + return; + } + + sendPendingBRs(); + checkPending(); + + if ( fixForBody + && ( !currentNode.type || currentNode.name == 'body' ) + && CKEDITOR.tools.trim( text ) ) + { + this.onTagOpen( fixForBody, {}, 0, 1 ); + } + + // Shrinking consequential spaces into one single for all elements + // text contents. + if ( !inPre ) + text = text.replace( /[\t\r\n ]{2,}|[\t\r\n]/g, ' ' ); + + currentNode.add( new CKEDITOR.htmlParser.text( text ) ); + }; + + parser.onCDATA = function( cdata ) + { + currentNode.add( new CKEDITOR.htmlParser.cdata( cdata ) ); + }; + + parser.onComment = function( comment ) + { + sendPendingBRs(); + checkPending(); + currentNode.add( new CKEDITOR.htmlParser.comment( comment ) ); + }; + + // Parse it. + parser.parse( fragmentHtml ); + + // Send all pending BRs except one, which we consider a unwanted bogus. (#5293) + sendPendingBRs( !CKEDITOR.env.ie && 1 ); + + // Close all pending nodes, make sure return point is properly restored. + while ( currentNode != fragment ) + addElement( currentNode, currentNode.parent, 1 ); + + return fragment; + }; + + CKEDITOR.htmlParser.fragment.prototype = + { + /** + * Adds a node to this fragment. + * @param {Object} node The node to be added. It can be any of of the + * following types: {@link CKEDITOR.htmlParser.element}, + * {@link CKEDITOR.htmlParser.text} and + * {@link CKEDITOR.htmlParser.comment}. + * @param {Number} [index] From where the insertion happens. + * @example + */ + add : function( node, index ) + { + isNaN( index ) && ( index = this.children.length ); + + var previous = index > 0 ? this.children[ index - 1 ] : null; + if ( previous ) + { + // If the block to be appended is following text, trim spaces at + // the right of it. + if ( node._.isBlockLike && previous.type == CKEDITOR.NODE_TEXT ) + { + previous.value = CKEDITOR.tools.rtrim( previous.value ); + + // If we have completely cleared the previous node. + if ( previous.value.length === 0 ) + { + // Remove it from the list and add the node again. + this.children.pop(); + this.add( node ); + return; + } + } + + previous.next = node; + } + + node.previous = previous; + node.parent = this; + + this.children.splice( index, 0, node ); + + this._.hasInlineStarted = node.type == CKEDITOR.NODE_TEXT || ( node.type == CKEDITOR.NODE_ELEMENT && !node._.isBlockLike ); + }, + + /** + * Writes the fragment HTML to a CKEDITOR.htmlWriter. + * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML. + * @example + * var writer = new CKEDITOR.htmlWriter(); + * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<P><B>Example' ); + * fragment.writeHtml( writer ) + * alert( writer.getHtml() ); "<p><b>Example</b></p>" + */ + writeHtml : function( writer, filter ) + { + var isChildrenFiltered; + this.filterChildren = function() + { + var writer = new CKEDITOR.htmlParser.basicWriter(); + this.writeChildrenHtml.call( this, writer, filter, true ); + var html = writer.getHtml(); + this.children = new CKEDITOR.htmlParser.fragment.fromHtml( html ).children; + isChildrenFiltered = 1; + }; + + // Filtering the root fragment before anything else. + !this.name && filter && filter.onFragment( this ); + + this.writeChildrenHtml( writer, isChildrenFiltered ? null : filter ); + }, + + writeChildrenHtml : function( writer, filter ) + { + for ( var i = 0 ; i < this.children.length ; i++ ) + this.children[i].writeHtml( writer, filter ); + } + }; +})(); diff --git a/_source/core/htmlparser/text.js b/_source/core/htmlparser/text.js new file mode 100644 index 0000000..02f8935 --- /dev/null +++ b/_source/core/htmlparser/text.js @@ -0,0 +1,55 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var spacesRegex = /[\t\r\n ]{2,}|[\t\r\n]/g; + + /** + * A lightweight representation of HTML text. + * @constructor + * @example + */ + CKEDITOR.htmlParser.text = function( value ) + { + /** + * The text value. + * @type String + * @example + */ + this.value = value; + + /** @private */ + this._ = + { + isBlockLike : false + }; + }; + + CKEDITOR.htmlParser.text.prototype = + { + /** + * The node type. This is a constant value set to {@link CKEDITOR.NODE_TEXT}. + * @type Number + * @example + */ + type : CKEDITOR.NODE_TEXT, + + /** + * Writes the HTML representation of this text to a CKEDITOR.htmlWriter. + * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML. + * @example + */ + writeHtml : function( writer, filter ) + { + var text = this.value; + + if ( filter && !( text = filter.onText( text, this ) ) ) + return; + + writer.text( text ); + } + }; +})(); diff --git a/_source/core/lang.js b/_source/core/lang.js new file mode 100644 index 0000000..19b903d --- /dev/null +++ b/_source/core/lang.js @@ -0,0 +1,157 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var loadedLangs = {}; + + /** + * @namespace Holds language related functions. + */ + CKEDITOR.lang = + { + /** + * The list of languages available in the editor core. + * @type Object + * @example + * alert( CKEDITOR.lang.en ); // "true" + */ + languages : + { + 'af' : 1, + 'ar' : 1, + 'bg' : 1, + 'bn' : 1, + 'bs' : 1, + 'ca' : 1, + 'cs' : 1, + 'cy' : 1, + 'da' : 1, + 'de' : 1, + 'el' : 1, + 'en-au' : 1, + 'en-ca' : 1, + 'en-gb' : 1, + 'en' : 1, + 'eo' : 1, + 'es' : 1, + 'et' : 1, + 'eu' : 1, + 'fa' : 1, + 'fi' : 1, + 'fo' : 1, + 'fr-ca' : 1, + 'fr' : 1, + 'gl' : 1, + 'gu' : 1, + 'he' : 1, + 'hi' : 1, + 'hr' : 1, + 'hu' : 1, + 'is' : 1, + 'it' : 1, + 'ja' : 1, + 'ka' : 1, + 'km' : 1, + 'ko' : 1, + 'lt' : 1, + 'lv' : 1, + 'mn' : 1, + 'ms' : 1, + 'nb' : 1, + 'nl' : 1, + 'no' : 1, + 'pl' : 1, + 'pt-br' : 1, + 'pt' : 1, + 'ro' : 1, + 'ru' : 1, + 'sk' : 1, + 'sl' : 1, + 'sr-latn' : 1, + 'sr' : 1, + 'sv' : 1, + 'th' : 1, + 'tr' : 1, + 'uk' : 1, + 'vi' : 1, + 'zh-cn' : 1, + 'zh' : 1 + }, + + /** + * Loads a specific language file, or auto detect it. A callback is + * then called when the file gets loaded. + * @param {String} languageCode The code of the language file to be + * loaded. If null or empty, autodetection will be performed. The + * same happens if the language is not supported. + * @param {String} defaultLanguage The language to be used if + * languageCode is not supported or if the autodetection fails. + * @param {Function} callback A function to be called once the + * language file is loaded. Two parameters are passed to this + * function: the language code and the loaded language entries. + * @example + */ + load : function( languageCode, defaultLanguage, callback ) + { + // If no languageCode - fallback to browser or default. + // If languageCode - fallback to no-localized version or default. + if ( !languageCode || !CKEDITOR.lang.languages[ languageCode ] ) + languageCode = this.detect( defaultLanguage, languageCode ); + + if ( !this[ languageCode ] ) + { + CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( + '_source/' + // @Packager.RemoveLine + 'lang/' + languageCode + '.js' ), + function() + { + callback( languageCode, this[ languageCode ] ); + } + , this ); + } + else + callback( languageCode, this[ languageCode ] ); + }, + + /** + * Returns the language that best fit the user language. For example, + * suppose that the user language is "pt-br". If this language is + * supported by the editor, it is returned. Otherwise, if only "pt" is + * supported, it is returned instead. If none of the previous are + * supported, a default language is then returned. + * @param {String} defaultLanguage The default language to be returned + * if the user language is not supported. + * @param {String} [probeLanguage] A language code to try to use, + * instead of the browser based autodetection. + * @returns {String} The detected language code. + * @example + * alert( CKEDITOR.lang.detect( 'en' ) ); // e.g., in a German browser: "de" + */ + detect : function( defaultLanguage, probeLanguage ) + { + var languages = this.languages; + probeLanguage = probeLanguage || navigator.userLanguage || navigator.language; + + var parts = probeLanguage + .toLowerCase() + .match( /([a-z]+)(?:-([a-z]+))?/ ), + lang = parts[1], + locale = parts[2]; + + if ( languages[ lang + '-' + locale ] ) + lang = lang + '-' + locale; + else if ( !languages[ lang ] ) + lang = null; + + CKEDITOR.lang.detect = lang ? + function() { return lang; } : + function( defaultLanguage ) { return defaultLanguage; }; + + return lang || defaultLanguage; + } + }; + +})(); diff --git a/_source/core/loader.js b/_source/core/loader.js new file mode 100644 index 0000000..d8a8302 --- /dev/null +++ b/_source/core/loader.js @@ -0,0 +1,240 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.loader} objects, which is used to + * load core scripts and their dependencies from _source. + */ + +if ( typeof CKEDITOR == 'undefined' ) + CKEDITOR = {}; + +if ( !CKEDITOR.loader ) +{ + /** + * Load core scripts and their dependencies from _source. + * @namespace + * @example + */ + CKEDITOR.loader = (function() + { + // Table of script names and their dependencies. + var scripts = + { + 'core/_bootstrap' : [ 'core/config', 'core/ckeditor', 'core/plugins', 'core/scriptloader', 'core/tools', /* The following are entries that we want to force loading at the end to avoid dependence recursion */ 'core/dom/comment', 'core/dom/elementpath', 'core/dom/text', 'core/dom/rangelist' ], + 'core/ckeditor' : [ 'core/ckeditor_basic', 'core/dom', 'core/dtd', 'core/dom/document', 'core/dom/element', 'core/editor', 'core/event', 'core/htmlparser', 'core/htmlparser/element', 'core/htmlparser/fragment', 'core/htmlparser/filter', 'core/htmlparser/basicwriter', 'core/tools' ], + 'core/ckeditor_base' : [], + 'core/ckeditor_basic' : [ 'core/editor_basic', 'core/env', 'core/event' ], + 'core/command' : [], + 'core/config' : [ 'core/ckeditor_base' ], + 'core/dom' : [], + 'core/dom/comment' : [ 'core/dom/node' ], + 'core/dom/document' : [ 'core/dom', 'core/dom/domobject', 'core/dom/window' ], + 'core/dom/documentfragment' : [ 'core/dom/element' ], + 'core/dom/element' : [ 'core/dom', 'core/dom/document', 'core/dom/domobject', 'core/dom/node', 'core/dom/nodelist', 'core/tools' ], + 'core/dom/elementpath' : [ 'core/dom/element' ], + 'core/dom/event' : [], + 'core/dom/node' : [ 'core/dom/domobject', 'core/tools' ], + 'core/dom/nodelist' : [ 'core/dom/node' ], + 'core/dom/domobject' : [ 'core/dom/event' ], + 'core/dom/range' : [ 'core/dom/document', 'core/dom/documentfragment', 'core/dom/element', 'core/dom/walker' ], + 'core/dom/rangelist' : [ 'core/dom/range' ], + 'core/dom/text' : [ 'core/dom/node', 'core/dom/domobject' ], + 'core/dom/walker' : [ 'core/dom/node' ], + 'core/dom/window' : [ 'core/dom/domobject' ], + 'core/dtd' : [ 'core/tools' ], + 'core/editor' : [ 'core/command', 'core/config', 'core/editor_basic', 'core/focusmanager', 'core/lang', 'core/plugins', 'core/skins', 'core/themes', 'core/tools', 'core/ui' ], + 'core/editor_basic' : [ 'core/event' ], + 'core/env' : [], + 'core/event' : [], + 'core/focusmanager' : [], + 'core/htmlparser' : [], + 'core/htmlparser/comment' : [ 'core/htmlparser' ], + 'core/htmlparser/element' : [ 'core/htmlparser', 'core/htmlparser/fragment' ], + 'core/htmlparser/fragment' : [ 'core/htmlparser', 'core/htmlparser/comment', 'core/htmlparser/text', 'core/htmlparser/cdata' ], + 'core/htmlparser/text' : [ 'core/htmlparser' ], + 'core/htmlparser/cdata' : [ 'core/htmlparser' ], + 'core/htmlparser/filter' : [ 'core/htmlparser' ], + 'core/htmlparser/basicwriter': [ 'core/htmlparser' ], + 'core/lang' : [], + 'core/plugins' : [ 'core/resourcemanager' ], + 'core/resourcemanager' : [ 'core/scriptloader', 'core/tools' ], + 'core/scriptloader' : [ 'core/dom/element', 'core/env' ], + 'core/skins' : [ 'core/scriptloader' ], + 'core/themes' : [ 'core/resourcemanager' ], + 'core/tools' : [ 'core/env' ], + 'core/ui' : [] + }; + + var basePath = (function() + { + // This is a copy of CKEDITOR.basePath, but requires the script having + // "_source/core/loader.js". + if ( CKEDITOR && CKEDITOR.basePath ) + return CKEDITOR.basePath; + + // Find out the editor directory path, based on its <script> tag. + var path = ''; + var scripts = document.getElementsByTagName( 'script' ); + + for ( var i = 0 ; i < scripts.length ; i++ ) + { + var match = scripts[i].src.match( /(^|.*?[\\\/])(?:_source\/)?core\/loader.js(?:\?.*)?$/i ); + + if ( match ) + { + path = match[1]; + break; + } + } + + // In IE (only) the script.src string is the raw valued entered in the + // HTML. Other browsers return the full resolved URL instead. + if ( path.indexOf('://') == -1 ) + { + // Absolute path. + if ( path.indexOf( '/' ) === 0 ) + path = location.href.match( /^.*?:\/\/[^\/]*/ )[0] + path; + // Relative path. + else + path = location.href.match( /^[^\?]*\// )[0] + path; + } + + return path; + })(); + + var timestamp = 'B5GJ5GG'; + + var getUrl = function( resource ) + { + if ( CKEDITOR && CKEDITOR.getUrl ) + return CKEDITOR.getUrl( resource ); + + return basePath + resource + + ( resource.indexOf( '?' ) >= 0 ? '&' : '?' ) + + 't=' + timestamp; + }; + + var pendingLoad = []; + + /** @lends CKEDITOR.loader */ + return { + /** + * The list of loaded scripts in their loading order. + * @type Array + * @example + * // Alert the loaded script names. + * alert( <b>CKEDITOR.loader.loadedScripts</b> ); + */ + loadedScripts : [], + + loadPending : function() + { + var scriptName = pendingLoad.shift(); + + if ( !scriptName ) + return; + + var scriptSrc = getUrl( '_source/' + scriptName + '.js' ); + + var script = document.createElement( 'script' ); + script.type = 'text/javascript'; + script.src = scriptSrc; + + function onScriptLoaded() + { + // Append this script to the list of loaded scripts. + CKEDITOR.loader.loadedScripts.push( scriptName ); + + // Load the next. + CKEDITOR.loader.loadPending(); + } + + // We must guarantee the execution order of the scripts, so we + // need to load them one by one. (#4145) + // The following if/else block has been taken from the scriptloader core code. + if ( typeof(script.onreadystatechange) !== "undefined" ) + { + /** @ignore */ + script.onreadystatechange = function() + { + if ( script.readyState == 'loaded' || script.readyState == 'complete' ) + { + script.onreadystatechange = null; + onScriptLoaded(); + } + }; + } + else + { + /** @ignore */ + script.onload = function() + { + // Some browsers, such as Safari, may call the onLoad function + // immediately. Which will break the loading sequence. (#3661) + setTimeout( function() { onScriptLoaded( scriptName ); }, 0 ); + }; + } + + document.body.appendChild( script ); + }, + + /** + * Loads a specific script, including its dependencies. This is not a + * synchronous loading, which means that the code to be loaded will + * not necessarily be available after this call. + * @example + * CKEDITOR.loader.load( 'core/dom/element' ); + */ + load : function( scriptName, defer ) + { + // Check if the script has already been loaded. + if ( scriptName in this.loadedScripts ) + return; + + // Get the script dependencies list. + var dependencies = scripts[ scriptName ]; + if ( !dependencies ) + throw 'The script name"' + scriptName + '" is not defined.'; + + // Mark the script as loaded, even before really loading it, to + // avoid cross references recursion. + this.loadedScripts[ scriptName ] = true; + + // Load all dependencies first. + for ( var i = 0 ; i < dependencies.length ; i++ ) + this.load( dependencies[ i ], true ); + + var scriptSrc = getUrl( '_source/' + scriptName + '.js' ); + + // Append the <script> element to the DOM. + // If the page is fully loaded, we can't use document.write + // but if the script is run while the body is loading then it's safe to use it + // Unfortunately, Firefox <3.6 doesn't support document.readyState, so it won't get this improvement + if ( document.body && (!document.readyState || document.readyState == 'complete') ) + { + pendingLoad.push( scriptName ); + + if ( !defer ) + this.loadPending(); + } + else + { + // Append this script to the list of loaded scripts. + this.loadedScripts.push( scriptName ); + + document.write( '<script src="' + scriptSrc + '" type="text/javascript"><\/script>' ); + } + } + }; + })(); +} + +// Check if any script has been defined for autoload. +if ( CKEDITOR._autoLoad ) +{ + CKEDITOR.loader.load( CKEDITOR._autoLoad ); + delete CKEDITOR._autoLoad; +} diff --git a/_source/core/plugindefinition.js b/_source/core/plugindefinition.js new file mode 100644 index 0000000..d9dc526 --- /dev/null +++ b/_source/core/plugindefinition.js @@ -0,0 +1,83 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the "virtual" {@link CKEDITOR.pluginDefinition} class, which + * contains the defintion of a plugin. This file is for documentation + * purposes only. + */ + +/** + * (Virtual Class) Do not call this constructor. This class is not really part + * of the API. It just illustrates the features of plugin objects to be + * passed to the {@link CKEDITOR.plugins.add} function. + * @name CKEDITOR.pluginDefinition + * @constructor + * @example + */ + +/** + * A list of plugins that are required by this plugin. Note that this property + * doesn't guarantee the loading order of the plugins. + * @name CKEDITOR.pluginDefinition.prototype.requires + * @type Array + * @example + * CKEDITOR.plugins.add( 'sample', + * { + * requires : [ 'button', 'selection' ] + * }); + */ + +/** + * A list of language files available for this plugin. These files are stored inside + * the "lang" directory, which is inside the plugin directory, follow the name + * pattern of "langCode.js", and contain a language definition created with {@link CKEDITOR.pluginDefinition#setLang}. + * While the plugin is being loaded, the editor checks this list to see if + * a language file of the current editor language ({@link CKEDITOR.editor#langCode}) + * is available, and if so, loads it. Otherwise, the file represented by the first list item + * in the list is loaded. + * @name CKEDITOR.pluginDefinition.prototype.lang + * @type Array + * @example + * CKEDITOR.plugins.add( 'sample', + * { + * lang : [ 'en', 'fr' ] + * }); + */ + + /** + * Function called on initialization of every editor instance created in the + * page before the init() call task. The beforeInit function will be called for + * all plugins, after that the init function is called for all of them. This + * feature makes it possible to initialize things that could be used in the + * init function of other plugins. + * @name CKEDITOR.pluginDefinition.prototype.beforeInit + * @function + * @param {CKEDITOR.editor} editor The editor instance being initialized. + * @example + * CKEDITOR.plugins.add( 'sample', + * { + * beforeInit : function( editor ) + * { + * alert( 'Editor "' + editor.name + '" is to be initialized!' ); + * } + * }); + */ + + /** + * Function called on initialization of every editor instance created in the + * page. + * @name CKEDITOR.pluginDefinition.prototype.init + * @function + * @param {CKEDITOR.editor} editor The editor instance being initialized. + * @example + * CKEDITOR.plugins.add( 'sample', + * { + * init : function( editor ) + * { + * alert( 'Editor "' + editor.name + '" is being initialized!' ); + * } + * }); + */ diff --git a/_source/core/plugins.js b/_source/core/plugins.js new file mode 100644 index 0000000..9a55980 --- /dev/null +++ b/_source/core/plugins.js @@ -0,0 +1,103 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.plugins} object, which is used to + * manage plugins registration and loading. + */ + +/** + * Manages plugins registration and loading. + * @namespace + * @augments CKEDITOR.resourceManager + * @example + */ +CKEDITOR.plugins = new CKEDITOR.resourceManager( + '_source/' + // @Packager.RemoveLine + 'plugins/', 'plugin' ); + +// PACKAGER_RENAME( CKEDITOR.plugins ) + +CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad ) + { + return function( name, callback, scope ) + { + var allPlugins = {}; + + var loadPlugins = function( names ) + { + originalLoad.call( this, names, function( plugins ) + { + CKEDITOR.tools.extend( allPlugins, plugins ); + + var requiredPlugins = []; + for ( var pluginName in plugins ) + { + var plugin = plugins[ pluginName ], + requires = plugin && plugin.requires; + + if ( requires ) + { + for ( var i = 0 ; i < requires.length ; i++ ) + { + if ( !allPlugins[ requires[ i ] ] ) + requiredPlugins.push( requires[ i ] ); + } + } + } + + if ( requiredPlugins.length ) + loadPlugins.call( this, requiredPlugins ); + else + { + // Call the "onLoad" function for all plugins. + for ( pluginName in allPlugins ) + { + plugin = allPlugins[ pluginName ]; + if ( plugin.onLoad && !plugin.onLoad._called ) + { + plugin.onLoad(); + plugin.onLoad._called = 1; + } + } + + // Call the callback. + if ( callback ) + callback.call( scope || window, allPlugins ); + } + } + , this); + + }; + + loadPlugins.call( this, name ); + }; + }); + +/** + * Loads a specific language file, or auto detect it. A callback is + * then called when the file gets loaded. + * @param {String} pluginName The name of the plugin to which the provided translation + * should be attached. + * @param {String} languageCode The code of the language translation provided. + * @param {Object} languageEntries An object that contains pairs of label and + * the respective translation. + * @example + * CKEDITOR.plugins.setLang( 'myPlugin', 'en', { + * title : 'My plugin', + * selectOption : 'Please select an option' + * } ); + */ +CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries ) +{ + var plugin = this.get( pluginName ), + pluginLangEntries = plugin.langEntries || ( plugin.langEntries = {} ), + pluginLang = plugin.lang || ( plugin.lang = [] ); + + if ( CKEDITOR.tools.indexOf( pluginLang, languageCode ) == -1 ) + pluginLang.push( languageCode ); + + pluginLangEntries[ languageCode ] = languageEntries; +}; diff --git a/_source/core/resourcemanager.js b/_source/core/resourcemanager.js new file mode 100644 index 0000000..4dab1d7 --- /dev/null +++ b/_source/core/resourcemanager.js @@ -0,0 +1,238 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.resourceManager} class, which is + * the base for resource managers, like plugins and themes. + */ + + /** + * Base class for resource managers, like plugins and themes. This class is not + * intended to be used out of the CKEditor core code. + * @param {String} basePath The path for the resources folder. + * @param {String} fileName The name used for resource files. + * @namespace + * @example + */ +CKEDITOR.resourceManager = function( basePath, fileName ) +{ + /** + * The base directory containing all resources. + * @name CKEDITOR.resourceManager.prototype.basePath + * @type String + * @example + */ + this.basePath = basePath; + + /** + * The name used for resource files. + * @name CKEDITOR.resourceManager.prototype.fileName + * @type String + * @example + */ + this.fileName = fileName; + + /** + * Contains references to all resources that have already been registered + * with {@link #add}. + * @name CKEDITOR.resourceManager.prototype.registered + * @type Object + * @example + */ + this.registered = {}; + + /** + * Contains references to all resources that have already been loaded + * with {@link #load}. + * @name CKEDITOR.resourceManager.prototype.loaded + * @type Object + * @example + */ + this.loaded = {}; + + /** + * Contains references to all resources that have already been registered + * with {@link #addExternal}. + * @name CKEDITOR.resourceManager.prototype.externals + * @type Object + * @example + */ + this.externals = {}; + + /** + * @private + */ + this._ = + { + // List of callbacks waiting for plugins to be loaded. + waitingList : {} + }; +}; + +CKEDITOR.resourceManager.prototype = +{ + /** + * Registers a resource. + * @param {String} name The resource name. + * @param {Object} [definition] The resource definition. + * @example + * CKEDITOR.plugins.add( 'sample', { ... plugin definition ... } ); + * @see CKEDITOR.pluginDefinition + */ + add : function( name, definition ) + { + if ( this.registered[ name ] ) + throw '[CKEDITOR.resourceManager.add] The resource name "' + name + '" is already registered.'; + + CKEDITOR.fire( name + CKEDITOR.tools.capitalize( this.fileName ) + 'Ready', + this.registered[ name ] = definition || {} ); + }, + + /** + * Gets the definition of a specific resource. + * @param {String} name The resource name. + * @type Object + * @example + * var definition = <b>CKEDITOR.plugins.get( 'sample' )</b>; + */ + get : function( name ) + { + return this.registered[ name ] || null; + }, + + /** + * Get the folder path for a specific loaded resource. + * @param {String} name The resource name. + * @type String + * @example + * alert( <b>CKEDITOR.plugins.getPath( 'sample' )</b> ); // "<editor path>/plugins/sample/" + */ + getPath : function( name ) + { + var external = this.externals[ name ]; + return CKEDITOR.getUrl( ( external && external.dir ) || this.basePath + name + '/' ); + }, + + /** + * Get the file path for a specific loaded resource. + * @param {String} name The resource name. + * @type String + * @example + * alert( <b>CKEDITOR.plugins.getFilePath( 'sample' )</b> ); // "<editor path>/plugins/sample/plugin.js" + */ + getFilePath : function( name ) + { + var external = this.externals[ name ]; + return CKEDITOR.getUrl( + this.getPath( name ) + + ( ( external && ( typeof external.file == 'string' ) ) ? external.file : this.fileName + '.js' ) ); + }, + + /** + * Registers one or more resources to be loaded from an external path + * instead of the core base path. + * @param {String} names The resource names, separated by commas. + * @param {String} path The path of the folder containing the resource. + * @param {String} [fileName] The resource file name. If not provided, the + * default name is used; If provided with a empty string, will implicitly indicates that {@param path} + * is already the full path. + * @example + * // Loads a plugin from '/myplugin/samples/plugin.js'. + * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/' ); + * @example + * // Loads a plugin from '/myplugin/samples/my_plugin.js'. + * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/', 'my_plugin.js' ); + * @example + * // Loads a plugin from '/myplugin/samples/my_plugin.js'. + * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/my_plugin.js', '' ); + */ + addExternal : function( names, path, fileName ) + { + names = names.split( ',' ); + for ( var i = 0 ; i < names.length ; i++ ) + { + var name = names[ i ]; + + this.externals[ name ] = + { + dir : path, + file : fileName + }; + } + }, + + /** + * Loads one or more resources. + * @param {String|Array} name The name of the resource to load. It may be a + * string with a single resource name, or an array with several names. + * @param {Function} callback A function to be called when all resources + * are loaded. The callback will receive an array containing all + * loaded names. + * @param {Object} [scope] The scope object to be used for the callback + * call. + * @example + * <b>CKEDITOR.plugins.load</b>( 'myplugin', function( plugins ) + * { + * alert( plugins['myplugin'] ); // "object" + * }); + */ + load : function( names, callback, scope ) + { + // Ensure that we have an array of names. + if ( !CKEDITOR.tools.isArray( names ) ) + names = names ? [ names ] : []; + + var loaded = this.loaded, + registered = this.registered, + urls = [], + urlsNames = {}, + resources = {}; + + // Loop through all names. + for ( var i = 0 ; i < names.length ; i++ ) + { + var name = names[ i ]; + + if ( !name ) + continue; + + // If not available yet. + if ( !loaded[ name ] && !registered[ name ] ) + { + var url = this.getFilePath( name ); + urls.push( url ); + if ( !( url in urlsNames ) ) + urlsNames[ url ] = []; + urlsNames[ url ].push( name ); + } + else + resources[ name ] = this.get( name ); + } + + CKEDITOR.scriptLoader.load( urls, function( completed, failed ) + { + if ( failed.length ) + { + throw '[CKEDITOR.resourceManager.load] Resource name "' + urlsNames[ failed[ 0 ] ].join( ',' ) + + '" was not found at "' + failed[ 0 ] + '".'; + } + + for ( var i = 0 ; i < completed.length ; i++ ) + { + var nameList = urlsNames[ completed[ i ] ]; + for ( var j = 0 ; j < nameList.length ; j++ ) + { + var name = nameList[ j ]; + resources[ name ] = this.get( name ); + + loaded[ name ] = 1; + } + } + + callback.call( scope, resources ); + } + , this); + } +}; diff --git a/_source/core/scriptloader.js b/_source/core/scriptloader.js new file mode 100644 index 0000000..c2df992 --- /dev/null +++ b/_source/core/scriptloader.js @@ -0,0 +1,180 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.scriptLoader} object, used to load scripts + * asynchronously. + */ + +/** + * Load scripts asynchronously. + * @namespace + * @example + */ +CKEDITOR.scriptLoader = (function() +{ + var uniqueScripts = {}, + waitingList = {}; + + return /** @lends CKEDITOR.scriptLoader */ { + /** + * Loads one or more external script checking if not already loaded + * previously by this function. + * @param {String|Array} scriptUrl One or more URLs pointing to the + * scripts to be loaded. + * @param {Function} [callback] A function to be called when the script + * is loaded and executed. If a string is passed to "scriptUrl", a + * boolean parameter is passed to the callback, indicating the + * success of the load. If an array is passed instead, two array + * parameters are passed to the callback; the first contains the + * URLs that have been properly loaded, and the second the failed + * ones. + * @param {Object} [scope] The scope ("this" reference) to be used for + * the callback call. Default to {@link CKEDITOR}. + * @param {Boolean} [showBusy] Changes the cursor of the document while ++ * the script is loaded. + * @example + * CKEDITOR.scriptLoader.load( '/myscript.js' ); + * @example + * CKEDITOR.scriptLoader.load( '/myscript.js', function( success ) + * { + * // Alerts "true" if the script has been properly loaded. + * // HTTP error 404 should return "false". + * alert( success ); + * }); + * @example + * CKEDITOR.scriptLoader.load( [ '/myscript1.js', '/myscript2.js' ], function( completed, failed ) + * { + * alert( 'Number of scripts loaded: ' + completed.length ); + * alert( 'Number of failures: ' + failed.length ); + * }); + */ + load : function( scriptUrl, callback, scope, showBusy ) + { + var isString = ( typeof scriptUrl == 'string' ); + + if ( isString ) + scriptUrl = [ scriptUrl ]; + + if ( !scope ) + scope = CKEDITOR; + + var scriptCount = scriptUrl.length, + completed = [], + failed = []; + + var doCallback = function( success ) + { + if ( callback ) + { + if ( isString ) + callback.call( scope, success ); + else + callback.call( scope, completed, failed ); + } + }; + + if ( scriptCount === 0 ) + { + doCallback( true ); + return; + } + + var checkLoaded = function( url, success ) + { + ( success ? completed : failed ).push( url ); + + if ( --scriptCount <= 0 ) + { + showBusy && CKEDITOR.document.getDocumentElement().removeStyle( 'cursor' ); + doCallback( success ); + } + }; + + var onLoad = function( url, success ) + { + // Mark this script as loaded. + uniqueScripts[ url ] = 1; + + // Get the list of callback checks waiting for this file. + var waitingInfo = waitingList[ url ]; + delete waitingList[ url ]; + + // Check all callbacks waiting for this file. + for ( var i = 0 ; i < waitingInfo.length ; i++ ) + waitingInfo[ i ]( url, success ); + }; + + var loadScript = function( url ) + { + if ( uniqueScripts[ url ] ) + { + checkLoaded( url, true ); + return; + } + + var waitingInfo = waitingList[ url ] || ( waitingList[ url ] = [] ); + waitingInfo.push( checkLoaded ); + + // Load it only for the first request. + if ( waitingInfo.length > 1 ) + return; + + // Create the <script> element. + var script = new CKEDITOR.dom.element( 'script' ); + script.setAttributes( { + type : 'text/javascript', + src : url } ); + + if ( callback ) + { + if ( CKEDITOR.env.ie ) + { + // FIXME: For IE, we are not able to return false on error (like 404). + + /** @ignore */ + script.$.onreadystatechange = function () + { + if ( script.$.readyState == 'loaded' || script.$.readyState == 'complete' ) + { + script.$.onreadystatechange = null; + onLoad( url, true ); + } + }; + } + else + { + /** @ignore */ + script.$.onload = function() + { + // Some browsers, such as Safari, may call the onLoad function + // immediately. Which will break the loading sequence. (#3661) + setTimeout( function() { onLoad( url, true ); }, 0 ); + }; + + // FIXME: Opera and Safari will not fire onerror. + + /** @ignore */ + script.$.onerror = function() + { + onLoad( url, false ); + }; + } + } + + // Append it to <head>. + script.appendTo( CKEDITOR.document.getHead() ); + + CKEDITOR.fire( 'download', url ); // @Packager.RemoveLine + }; + + showBusy && CKEDITOR.document.getDocumentElement().setStyle( 'cursor', 'wait' ); + for ( var i = 0 ; i < scriptCount ; i++ ) + { + loadScript( scriptUrl[ i ] ); + } + } + }; +})(); diff --git a/_source/core/skins.js b/_source/core/skins.js new file mode 100644 index 0000000..c23dcf2 --- /dev/null +++ b/_source/core/skins.js @@ -0,0 +1,184 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.skins} object, which is used to + * manage skins loading. + */ + +/** + * Manages skins loading. + * @namespace + * @example + */ +CKEDITOR.skins = (function() +{ + // Holds the list of loaded skins. + var loaded = {}, + paths = {}; + + var loadPart = function( editor, skinName, part, callback ) + { + // Get the skin definition. + var skinDefinition = loaded[ skinName ]; + + if ( !editor.skin ) + { + editor.skin = skinDefinition; + + // Trigger init function if any. + if ( skinDefinition.init ) + skinDefinition.init( editor ); + } + + var appendSkinPath = function( fileNames ) + { + for ( var n = 0 ; n < fileNames.length ; n++ ) + { + fileNames[ n ] = CKEDITOR.getUrl( paths[ skinName ] + fileNames[ n ] ); + } + }; + + function fixCSSTextRelativePath( cssStyleText, baseUrl ) + { + return cssStyleText.replace( /url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g, + function( match, opener, path, closer ) + { + if ( /^\/|^\w?:/.test( path ) ) + return match; + else + return 'url(' + baseUrl + opener + path + closer + ')'; + } ); + } + + // Get the part definition. + part = skinDefinition[ part ]; + var partIsLoaded = !part || !!part._isLoaded; + + // Call the callback immediately if already loaded. + if ( partIsLoaded ) + callback && callback(); + else + { + // Put the callback in a queue. + var pending = part._pending || ( part._pending = [] ); + pending.push( callback ); + + // We may have more than one skin part load request. Just the first + // one must do the loading job. + if ( pending.length > 1 ) + return; + + // Check whether the "css" and "js" properties have been defined + // for that part. + var cssIsLoaded = !part.css || !part.css.length, + jsIsLoaded = !part.js || !part.js.length; + + // This is the function that will trigger the callback calls on + // load. + var checkIsLoaded = function() + { + if ( cssIsLoaded && jsIsLoaded ) + { + // Mark the part as loaded. + part._isLoaded = 1; + + // Call all pending callbacks. + for ( var i = 0 ; i < pending.length ; i++ ) + { + if ( pending[ i ] ) + pending[ i ](); + } + } + }; + + // Load the "css" pieces. + if ( !cssIsLoaded ) + { + var cssPart = part.css; + + if ( CKEDITOR.tools.isArray( cssPart ) ) + { + appendSkinPath( cssPart ); + for ( var c = 0 ; c < cssPart.length ; c++ ) + CKEDITOR.document.appendStyleSheet( cssPart[ c ] ); + } + else + { + cssPart = fixCSSTextRelativePath( + cssPart, CKEDITOR.getUrl( paths[ skinName ] ) ); + // Processing Inline CSS part. + CKEDITOR.document.appendStyleText( cssPart ); + } + + part.css = cssPart; + + cssIsLoaded = 1; + } + + // Load the "js" pieces. + if ( !jsIsLoaded ) + { + appendSkinPath( part.js ); + CKEDITOR.scriptLoader.load( part.js, function() + { + jsIsLoaded = 1; + checkIsLoaded(); + }); + } + + // We may have nothing to load, so check it immediately. + checkIsLoaded(); + } + }; + + return /** @lends CKEDITOR.skins */ { + + /** + * Registers a skin definition. + * @param {String} skinName The skin name. + * @param {Object} skinDefinition The skin definition. + * @example + */ + add : function( skinName, skinDefinition ) + { + loaded[ skinName ] = skinDefinition; + + skinDefinition.skinPath = paths[ skinName ] + || ( paths[ skinName ] = + CKEDITOR.getUrl( + '_source/' + // @Packager.RemoveLine + 'skins/' + skinName + '/' ) ); + }, + + /** + * Loads a skin part. Skins are defined in parts, which are basically + * separated CSS files. This function is mainly used by the core code and + * should not have much use out of it. + * @param {String} skinName The name of the skin to be loaded. + * @param {String} skinPart The skin part to be loaded. Common skin parts + * are "editor" and "dialog". + * @param {Function} [callback] A function to be called once the skin + * part files are loaded. + * @example + */ + load : function( editor, skinPart, callback ) + { + var skinName = editor.skinName, + skinPath = editor.skinPath; + + if ( loaded[ skinName ] ) + loadPart( editor, skinName, skinPart, callback ); + else + { + paths[ skinName ] = skinPath; + CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( skinPath + 'skin.js' ), function() + { + loadPart( editor, skinName, skinPart, callback ); + }); + } + } + }; +})(); diff --git a/_source/core/themes.js b/_source/core/themes.js new file mode 100644 index 0000000..d412577 --- /dev/null +++ b/_source/core/themes.js @@ -0,0 +1,19 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.themes} object, which is used to + * manage themes registration and loading. + */ + +/** + * Manages themes registration and loading. + * @namespace + * @augments CKEDITOR.resourceManager + * @example + */ +CKEDITOR.themes = new CKEDITOR.resourceManager( + '_source/'+ // @Packager.RemoveLine + 'themes/', 'theme' ); diff --git a/_source/core/tools.js b/_source/core/tools.js new file mode 100644 index 0000000..5d0573c --- /dev/null +++ b/_source/core/tools.js @@ -0,0 +1,763 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.tools} object, which contains + * utility functions. + */ + +(function() +{ + var functions = []; + + CKEDITOR.on( 'reset', function() + { + functions = []; + }); + + /** + * Utility functions. + * @namespace + * @example + */ + CKEDITOR.tools = + { + /** + * Compare the elements of two arrays. + * @param {Array} arrayA An array to be compared. + * @param {Array} arrayB The other array to be compared. + * @returns {Boolean} "true" is the arrays have the same lenght and + * their elements match. + * @example + * var a = [ 1, 'a', 3 ]; + * var b = [ 1, 3, 'a' ]; + * var c = [ 1, 'a', 3 ]; + * var d = [ 1, 'a', 3, 4 ]; + * + * alert( CKEDITOR.tools.arrayCompare( a, b ) ); // false + * alert( CKEDITOR.tools.arrayCompare( a, c ) ); // true + * alert( CKEDITOR.tools.arrayCompare( a, d ) ); // false + */ + arrayCompare : function( arrayA, arrayB ) + { + if ( !arrayA && !arrayB ) + return true; + + if ( !arrayA || !arrayB || arrayA.length != arrayB.length ) + return false; + + for ( var i = 0 ; i < arrayA.length ; i++ ) + { + if ( arrayA[ i ] != arrayB[ i ] ) + return false; + } + + return true; + }, + + /** + * Creates a deep copy of an object. + * Attention: there is no support for recursive references. + * @param {Object} object The object to be cloned. + * @returns {Object} The object clone. + * @example + * var obj = + * { + * name : 'John', + * cars : + * { + * Mercedes : { color : 'blue' }, + * Porsche : { color : 'red' } + * } + * }; + * var clone = CKEDITOR.tools.clone( obj ); + * clone.name = 'Paul'; + * clone.cars.Porsche.color = 'silver'; + * alert( obj.name ); // John + * alert( clone.name ); // Paul + * alert( obj.cars.Porsche.color ); // red + * alert( clone.cars.Porsche.color ); // silver + */ + clone : function( obj ) + { + var clone; + + // Array. + if ( obj && ( obj instanceof Array ) ) + { + clone = []; + + for ( var i = 0 ; i < obj.length ; i++ ) + clone[ i ] = this.clone( obj[ i ] ); + + return clone; + } + + // "Static" types. + if ( obj === null + || ( typeof( obj ) != 'object' ) + || ( obj instanceof String ) + || ( obj instanceof Number ) + || ( obj instanceof Boolean ) + || ( obj instanceof Date ) + || ( obj instanceof RegExp) ) + { + return obj; + } + + // Objects. + clone = new obj.constructor(); + + for ( var propertyName in obj ) + { + var property = obj[ propertyName ]; + clone[ propertyName ] = this.clone( property ); + } + + return clone; + }, + + /** + * Turn the first letter of string to upper-case. + * @param {String} str + */ + capitalize: function( str ) + { + return str.charAt( 0 ).toUpperCase() + str.substring( 1 ).toLowerCase(); + }, + + /** + * Copy the properties from one object to another. By default, properties + * already present in the target object <strong>are not</strong> overwritten. + * @param {Object} target The object to be extended. + * @param {Object} source[,souce(n)] The objects from which copy + * properties. Any number of objects can be passed to this function. + * @param {Boolean} [overwrite] If 'true' is specified it indicates that + * properties already present in the target object could be + * overwritten by subsequent objects. + * @param {Object} [properties] Only properties within the specified names + * list will be received from the source object. + * @returns {Object} the extended object (target). + * @example + * // Create the sample object. + * var myObject = + * { + * prop1 : true + * }; + * + * // Extend the above object with two properties. + * CKEDITOR.tools.extend( myObject, + * { + * prop2 : true, + * prop3 : true + * } ); + * + * // Alert "prop1", "prop2" and "prop3". + * for ( var p in myObject ) + * alert( p ); + */ + extend : function( target ) + { + var argsLength = arguments.length, + overwrite, propertiesList; + + if ( typeof ( overwrite = arguments[ argsLength - 1 ] ) == 'boolean') + argsLength--; + else if ( typeof ( overwrite = arguments[ argsLength - 2 ] ) == 'boolean' ) + { + propertiesList = arguments [ argsLength -1 ]; + argsLength-=2; + } + for ( var i = 1 ; i < argsLength ; i++ ) + { + var source = arguments[ i ]; + for ( var propertyName in source ) + { + // Only copy existed fields if in overwrite mode. + if ( overwrite === true || target[ propertyName ] == undefined ) + { + // Only copy specified fields if list is provided. + if ( !propertiesList || ( propertyName in propertiesList ) ) + target[ propertyName ] = source[ propertyName ]; + + } + } + } + + return target; + }, + + /** + * Creates an object which is an instance of a class which prototype is a + * predefined object. All properties defined in the source object are + * automatically inherited by the resulting object, including future + * changes to it. + * @param {Object} source The source object to be used as the prototype for + * the final object. + * @returns {Object} The resulting copy. + */ + prototypedCopy : function( source ) + { + var copy = function() + {}; + copy.prototype = source; + return new copy(); + }, + + /** + * Checks if an object is an Array. + * @param {Object} object The object to be checked. + * @type Boolean + * @returns <i>true</i> if the object is an Array, otherwise <i>false</i>. + * @example + * alert( CKEDITOR.tools.isArray( [] ) ); // "true" + * alert( CKEDITOR.tools.isArray( 'Test' ) ); // "false" + */ + isArray : function( object ) + { + return ( !!object && object instanceof Array ); + }, + + /** + * Whether the object contains no properties of it's own. + * @param object + */ + isEmpty : function ( object ) + { + for ( var i in object ) + { + if ( object.hasOwnProperty( i ) ) + return false; + } + return true; + }, + + /** + * Transforms a CSS property name to its relative DOM style name. + * @param {String} cssName The CSS property name. + * @returns {String} The transformed name. + * @example + * alert( CKEDITOR.tools.cssStyleToDomStyle( 'background-color' ) ); // "backgroundColor" + * alert( CKEDITOR.tools.cssStyleToDomStyle( 'float' ) ); // "cssFloat" + */ + cssStyleToDomStyle : ( function() + { + var test = document.createElement( 'div' ).style; + + var cssFloat = ( typeof test.cssFloat != 'undefined' ) ? 'cssFloat' + : ( typeof test.styleFloat != 'undefined' ) ? 'styleFloat' + : 'float'; + + return function( cssName ) + { + if ( cssName == 'float' ) + return cssFloat; + else + { + return cssName.replace( /-./g, function( match ) + { + return match.substr( 1 ).toUpperCase(); + }); + } + }; + } )(), + + /** + * Build the HTML snippet of a set of <style>/<link>. + * @param css {String|Array} Each of which are url (absolute) of a CSS file or + * a trunk of style text. + */ + buildStyleHtml : function ( css ) + { + css = [].concat( css ); + var item, retval = []; + for ( var i = 0; i < css.length; i++ ) + { + item = css[ i ]; + // Is CSS style text ? + if ( /@import|[{}]/.test(item) ) + retval.push('<style>' + item + '</style>'); + else + retval.push('<link type="text/css" rel=stylesheet href="' + item + '">'); + } + return retval.join( '' ); + }, + + /** + * Replace special HTML characters in a string with their relative HTML + * entity values. + * @param {String} text The string to be encoded. + * @returns {String} The encode string. + * @example + * alert( CKEDITOR.tools.htmlEncode( 'A > B & C < D' ) ); // "A &gt; B &amp; C &lt; D" + */ + htmlEncode : function( text ) + { + var standard = function( text ) + { + var span = new CKEDITOR.dom.element( 'span' ); + span.setText( text ); + return span.getHtml(); + }; + + var fix1 = ( standard( '\n' ).toLowerCase() == '<br>' ) ? + function( text ) + { + // #3874 IE and Safari encode line-break into <br> + return standard( text ).replace( /<br>/gi, '\n' ); + } : + standard; + + var fix2 = ( standard( '>' ) == '>' ) ? + function( text ) + { + // WebKit does't encode the ">" character, which makes sense, but + // it's different than other browsers. + return fix1( text ).replace( />/g, '>' ); + } : + fix1; + + var fix3 = ( standard( ' ' ) == ' ' ) ? + function( text ) + { + // #3785 IE8 changes spaces (>= 2) to + return fix2( text ).replace( / /g, ' ' ); + } : + fix2; + + this.htmlEncode = fix3; + + return this.htmlEncode( text ); + }, + + /** + * Replace special HTML characters in HTMLElement's attribute with their relative HTML entity values. + * @param {String} The attribute's value to be encoded. + * @returns {String} The encode value. + * @example + * element.setAttribute( 'title', '<a " b >' ); + * alert( CKEDITOR.tools.htmlEncodeAttr( element.getAttribute( 'title' ) ); // ">a " b <" + */ + htmlEncodeAttr : function( text ) + { + return text.replace( /"/g, '"' ).replace( /</g, '<' ).replace( />/g, '>' ); + }, + + /** + * Gets a unique number for this CKEDITOR execution session. It returns + * progressive numbers starting at 1. + * @function + * @returns {Number} A unique number. + * @example + * alert( CKEDITOR.tools.<b>getNextNumber()</b> ); // "1" (e.g.) + * alert( CKEDITOR.tools.<b>getNextNumber()</b> ); // "2" + */ + getNextNumber : (function() + { + var last = 0; + return function() + { + return ++last; + }; + })(), + + /** + * Gets a unique ID for CKEditor's interface elements. It returns a + * string with the "cke_" prefix and a progressive number. + * @function + * @returns {String} A unique ID. + * @example + * alert( CKEDITOR.tools.<b>getNextId()</b> ); // "cke_1" (e.g.) + * alert( CKEDITOR.tools.<b>getNextId()</b> ); // "cke_2" + */ + getNextId : function() + { + return 'cke_' + this.getNextNumber(); + }, + + /** + * Creates a function override. + * @param {Function} originalFunction The function to be overridden. + * @param {Function} functionBuilder A function that returns the new + * function. The original function reference will be passed to this + * function. + * @returns {Function} The new function. + * @example + * var example = + * { + * myFunction : function( name ) + * { + * alert( 'Name: ' + name ); + * } + * }; + * + * example.myFunction = CKEDITOR.tools.override( example.myFunction, function( myFunctionOriginal ) + * { + * return function( name ) + * { + * alert( 'Override Name: ' + name ); + * myFunctionOriginal.call( this, name ); + * }; + * }); + */ + override : function( originalFunction, functionBuilder ) + { + return functionBuilder( originalFunction ); + }, + + /** + * Executes a function after specified delay. + * @param {Function} func The function to be executed. + * @param {Number} [milliseconds] The amount of time (millisecods) to wait + * to fire the function execution. Defaults to zero. + * @param {Object} [scope] The object to hold the function execution scope + * (the "this" object). By default the "window" object. + * @param {Object|Array} [args] A single object, or an array of objects, to + * pass as arguments to the function. + * @param {Object} [ownerWindow] The window that will be used to set the + * timeout. By default the current "window". + * @returns {Object} A value that can be used to cancel the function execution. + * @example + * CKEDITOR.tools.<b>setTimeout( + * function() + * { + * alert( 'Executed after 2 seconds' ); + * }, + * 2000 )</b>; + */ + setTimeout : function( func, milliseconds, scope, args, ownerWindow ) + { + if ( !ownerWindow ) + ownerWindow = window; + + if ( !scope ) + scope = ownerWindow; + + return ownerWindow.setTimeout( + function() + { + if ( args ) + func.apply( scope, [].concat( args ) ) ; + else + func.apply( scope ) ; + }, + milliseconds || 0 ); + }, + + /** + * Remove spaces from the start and the end of a string. The following + * characters are removed: space, tab, line break, line feed. + * @function + * @param {String} str The text from which remove the spaces. + * @returns {String} The modified string without the boundary spaces. + * @example + * alert( CKEDITOR.tools.trim( ' example ' ); // "example" + */ + trim : (function() + { + // We are not using \s because we don't want "non-breaking spaces" to be caught. + var trimRegex = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g; + return function( str ) + { + return str.replace( trimRegex, '' ) ; + }; + })(), + + /** + * Remove spaces from the start (left) of a string. The following + * characters are removed: space, tab, line break, line feed. + * @function + * @param {String} str The text from which remove the spaces. + * @returns {String} The modified string excluding the removed spaces. + * @example + * alert( CKEDITOR.tools.ltrim( ' example ' ); // "example " + */ + ltrim : (function() + { + // We are not using \s because we don't want "non-breaking spaces" to be caught. + var trimRegex = /^[ \t\n\r]+/g; + return function( str ) + { + return str.replace( trimRegex, '' ) ; + }; + })(), + + /** + * Remove spaces from the end (right) of a string. The following + * characters are removed: space, tab, line break, line feed. + * @function + * @param {String} str The text from which remove the spaces. + * @returns {String} The modified string excluding the removed spaces. + * @example + * alert( CKEDITOR.tools.ltrim( ' example ' ); // " example" + */ + rtrim : (function() + { + // We are not using \s because we don't want "non-breaking spaces" to be caught. + var trimRegex = /[ \t\n\r]+$/g; + return function( str ) + { + return str.replace( trimRegex, '' ) ; + }; + })(), + + /** + * Returns the index of an element in an array. + * @param {Array} array The array to be searched. + * @param {Object} entry The element to be found. + * @returns {Number} The (zero based) index of the first entry that matches + * the entry, or -1 if not found. + * @example + * var letters = [ 'a', 'b', 0, 'c', false ]; + * alert( CKEDITOR.tools.indexOf( letters, '0' ) ); "-1" because 0 !== '0' + * alert( CKEDITOR.tools.indexOf( letters, false ) ); "4" because 0 !== false + */ + indexOf : + // #2514: We should try to use Array.indexOf if it does exist. + ( Array.prototype.indexOf ) ? + function( array, entry ) + { + return array.indexOf( entry ); + } + : + function( array, entry ) + { + for ( var i = 0, len = array.length ; i < len ; i++ ) + { + if ( array[ i ] === entry ) + return i; + } + return -1; + }, + + /** + * Creates a function that will always execute in the context of a + * specified object. + * @param {Function} func The function to be executed. + * @param {Object} obj The object to which bind the execution context. + * @returns {Function} The function that can be used to execute the + * "func" function in the context of "obj". + * @example + * var obj = { text : 'My Object' }; + * + * function alertText() + * { + * alert( this.text ); + * } + * + * var newFunc = <b>CKEDITOR.tools.bind( alertText, obj )</b>; + * newFunc(); // Alerts "My Object". + */ + bind : function( func, obj ) + { + return function() { return func.apply( obj, arguments ); }; + }, + + /** + * Class creation based on prototype inheritance, with supports of the + * following features: + * <ul> + * <li> Static fields </li> + * <li> Private fields </li> + * <li> Public (prototype) fields </li> + * <li> Chainable base class constructor </li> + * </ul> + * @param {Object} definition The class definition object. + * @returns {Function} A class-like JavaScript function. + */ + createClass : function( definition ) + { + var $ = definition.$, + baseClass = definition.base, + privates = definition.privates || definition._, + proto = definition.proto, + statics = definition.statics; + + if ( privates ) + { + var originalConstructor = $; + $ = function() + { + // Create (and get) the private namespace. + var _ = this._ || ( this._ = {} ); + + // Make some magic so "this" will refer to the main + // instance when coding private functions. + for ( var privateName in privates ) + { + var priv = privates[ privateName ]; + + _[ privateName ] = + ( typeof priv == 'function' ) ? CKEDITOR.tools.bind( priv, this ) : priv; + } + + originalConstructor.apply( this, arguments ); + }; + } + + if ( baseClass ) + { + $.prototype = this.prototypedCopy( baseClass.prototype ); + $.prototype.constructor = $; + $.prototype.base = function() + { + this.base = baseClass.prototype.base; + baseClass.apply( this, arguments ); + this.base = arguments.callee; + }; + } + + if ( proto ) + this.extend( $.prototype, proto, true ); + + if ( statics ) + this.extend( $, statics, true ); + + return $; + }, + + /** + * Creates a function reference that can be called later using + * CKEDITOR.tools.callFunction. This approach is specially useful to + * make DOM attribute function calls to JavaScript defined functions. + * @param {Function} fn The function to be executed on call. + * @param {Object} [scope] The object to have the context on "fn" execution. + * @returns {Number} A unique reference to be used in conjuction with + * CKEDITOR.tools.callFunction. + * @example + * var ref = <b>CKEDITOR.tools.addFunction</b>( + * function() + * { + * alert( 'Hello!'); + * }); + * CKEDITOR.tools.callFunction( ref ); // Hello! + */ + addFunction : function( fn, scope ) + { + return functions.push( function() + { + return fn.apply( scope || this, arguments ); + }) - 1; + }, + + /** + * Removes the function reference created with {@see CKEDITOR.tools.addFunction}. + * @param {Number} ref The function reference created with + * CKEDITOR.tools.addFunction. + */ + removeFunction : function( ref ) + { + functions[ ref ] = null; + }, + + /** + * Executes a function based on the reference created with + * CKEDITOR.tools.addFunction. + * @param {Number} ref The function reference created with + * CKEDITOR.tools.addFunction. + * @param {[Any,[Any,...]} params Any number of parameters to be passed + * to the executed function. + * @returns {Any} The return value of the function. + * @example + * var ref = CKEDITOR.tools.addFunction( + * function() + * { + * alert( 'Hello!'); + * }); + * <b>CKEDITOR.tools.callFunction( ref )</b>; // Hello! + */ + callFunction : function( ref ) + { + var fn = functions[ ref ]; + return fn && fn.apply( window, Array.prototype.slice.call( arguments, 1 ) ); + }, + + /** + * Append the 'px' length unit to the size if it's missing. + * @param length + */ + cssLength : (function() + { + return function( length ) + { + return length + ( !length || isNaN( Number( length ) ) ? '' : 'px' ); + }; + })(), + + /** + * Convert the specified CSS length value to the calculated pixel length inside this page. + * <strong>Note:</strong> Percentage based value is left intact. + * @param {String} cssLength CSS length value. + */ + convertToPx : ( function () + { + var calculator; + + return function( cssLength ) + { + if ( !calculator ) + { + calculator = CKEDITOR.dom.element.createFromHtml( + '<div style="position:absolute;left:-9999px;' + + 'top:-9999px;margin:0px;padding:0px;border:0px;"' + + '></div>', CKEDITOR.document ); + CKEDITOR.document.getBody().append( calculator ); + } + + if ( !(/%$/).test( cssLength ) ) + { + calculator.setStyle( 'width', cssLength ); + return calculator.$.clientWidth; + } + + return cssLength; + }; + } )(), + + /** + * String specified by {@param str} repeats {@param times} times. + * @param str + * @param times + */ + repeat : function( str, times ) + { + return new Array( times + 1 ).join( str ); + }, + + /** + * Return the first successfully executed function's return value that + * doesn't throw any exception. + */ + tryThese : function() + { + var returnValue; + for ( var i = 0, length = arguments.length; i < length; i++ ) + { + var lambda = arguments[i]; + try + { + returnValue = lambda(); + break; + } + catch (e) {} + } + return returnValue; + }, + + /** + * Generate a combined key from a series of params. + * @param {String} subKey One or more string used as sub keys. + * @example + * var key = CKEDITOR.tools.genKey( 'key1', 'key2', 'key3' ); + * alert( key ); // "key1-key2-key3". + */ + genKey : function() + { + return Array.prototype.slice.call( arguments ).join( '-' ); + } + }; +})(); + +// PACKAGER_RENAME( CKEDITOR.tools ) diff --git a/_source/core/ui.js b/_source/core/ui.js new file mode 100644 index 0000000..b569d8a --- /dev/null +++ b/_source/core/ui.js @@ -0,0 +1,128 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Contains UI features related to an editor instance. + * @constructor + * @param {CKEDITOR.editor} editor The editor instance. + * @example + */ +CKEDITOR.ui = function( editor ) +{ + if ( editor.ui ) + return editor.ui; + + /** + * Object used to hold private stuff. + * @private + */ + this._ = + { + handlers : {}, + items : {}, + editor : editor + }; + + return this; +}; + +// PACKAGER_RENAME( CKEDITOR.ui ) + +CKEDITOR.ui.prototype = +{ + /** + * Adds a UI item to the items collection. These items can be later used in + * the interface. + * @param {String} name The UI item name. + * @param {Object} type The item type. + * @param {Object} definition The item definition. The properties of this + * object depend on the item type. + * @example + * // Add a new button named "MyBold". + * editorInstance.ui.add( 'MyBold', CKEDITOR.UI_BUTTON, + * { + * label : 'My Bold', + * command : 'bold' + * }); + */ + add : function( name, type, definition ) + { + this._.items[ name ] = + { + type : type, + // The name of {@link CKEDITOR.command} which associate with this UI. + command : definition.command || null, + args : Array.prototype.slice.call( arguments, 2 ) + }; + }, + + /** + * Gets a UI object. + * @param {String} name The UI item hame. + * @example + */ + create : function( name ) + { + var item = this._.items[ name ], + handler = item && this._.handlers[ item.type ], + command = item && item.command && this._.editor.getCommand( item.command ); + + var result = handler && handler.create.apply( this, item.args ); + + // Allow overrides from skin ui definitions.. + item && ( result = CKEDITOR.tools.extend( result, this._.editor.skin[ item.type ], true ) ); + + // Add reference inside command object. + if ( command ) + command.uiItems.push( result ); + + return result; + }, + + /** + * Adds a handler for a UI item type. The handler is responsible for + * transforming UI item definitions in UI objects. + * @param {Object} type The item type. + * @param {Object} handler The handler definition. + * @example + */ + addHandler : function( type, handler ) + { + this._.handlers[ type ] = handler; + } +}; + +CKEDITOR.event.implementOn( CKEDITOR.ui ); + +/** + * (Virtual Class) Do not call this constructor. This class is not really part + * of the API. It just illustrates the features of hanlder objects to be + * passed to the {@link CKEDITOR.ui.prototype.addHandler} function. + * @name CKEDITOR.ui.handlerDefinition + * @constructor + * @example + */ + + /** + * Transforms an item definition into an UI item object. + * @name CKEDITOR.handlerDefinition.prototype.create + * @function + * @param {Object} definition The item definition. + * @example + * editorInstance.ui.addHandler( CKEDITOR.UI_BUTTON, + * { + * create : function( definition ) + * { + * return new CKEDITOR.ui.button( definition ); + * } + * }); + */ + +/** + * Internal event fired when a new UI element is ready + * @name CKEDITOR.ui#ready + * @event + * @param {Object} element The new element + */ diff --git a/_source/lang/_languages.js b/_source/lang/_languages.js new file mode 100644 index 0000000..179e8a3 --- /dev/null +++ b/_source/lang/_languages.js @@ -0,0 +1,84 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +var CKEDITOR_LANGS = (function() +{ + var langs = + { + af : 'Afrikaans', + ar : 'Arabic', + bg : 'Bulgarian', + bn : 'Bengali/Bangla', + bs : 'Bosnian', + ca : 'Catalan', + cs : 'Czech', + cy : 'Welsh', + da : 'Danish', + de : 'German', + el : 'Greek', + en : 'English', + 'en-au' : 'English (Australia)', + 'en-ca' : 'English (Canadian)', + 'en-gb' : 'English (United Kingdom)', + eo : 'Esperanto', + es : 'Spanish', + et : 'Estonian', + eu : 'Basque', + fa : 'Persian', + fi : 'Finnish', + fo : 'Faroese', + fr : 'French', + 'fr-ca' : 'French (Canada)', + gl : 'Galician', + gu : 'Gujarati', + he : 'Hebrew', + hi : 'Hindi', + hr : 'Croatian', + hu : 'Hungarian', + is : 'Icelandic', + it : 'Italian', + ja : 'Japanese', + ka : 'Georgian', + km : 'Khmer', + ko : 'Korean', + lt : 'Lithuanian', + lv : 'Latvian', + mn : 'Mongolian', + ms : 'Malay', + nb : 'Norwegian Bokmal', + nl : 'Dutch', + no : 'Norwegian', + pl : 'Polish', + pt : 'Portuguese (Portugal)', + 'pt-br' : 'Portuguese (Brazil)', + ro : 'Romanian', + ru : 'Russian', + sk : 'Slovak', + sl : 'Slovenian', + sr : 'Serbian (Cyrillic)', + 'sr-latn' : 'Serbian (Latin)', + sv : 'Swedish', + th : 'Thai', + tr : 'Turkish', + uk : 'Ukrainian', + vi : 'Vietnamese', + zh : 'Chinese Traditional', + 'zh-cn' : 'Chinese Simplified' + }; + + var langsArray = []; + + for ( var code in langs ) + { + langsArray.push( { code : code, name : langs[ code ] } ); + } + + langsArray.sort( function( a, b ) + { + return ( a.name < b.name ) ? -1 : 1; + }); + + return langsArray; +})(); diff --git a/_source/lang/_translationstatus.txt b/_source/lang/_translationstatus.txt new file mode 100644 index 0000000..1ae0dd8 --- /dev/null +++ b/_source/lang/_translationstatus.txt @@ -0,0 +1,61 @@ +Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license + +af.js Found: 549 Missing: 24 +ar.js Found: 467 Missing: 106 +bg.js Found: 291 Missing: 282 +bn.js Found: 292 Missing: 281 +bs.js Found: 175 Missing: 398 +ca.js Found: 550 Missing: 23 +cs.js Found: 550 Missing: 23 +cy.js Found: 573 Missing: 0 +da.js Found: 417 Missing: 156 +de.js Found: 568 Missing: 5 +el.js Found: 306 Missing: 267 +en-au.js Found: 345 Missing: 228 +en-ca.js Found: 345 Missing: 228 +en-gb.js Found: 518 Missing: 55 +eo.js Found: 270 Missing: 303 +es.js Found: 570 Missing: 3 +et.js Found: 320 Missing: 253 +eu.js Found: 417 Missing: 156 +fa.js Found: 322 Missing: 251 +fi.js Found: 552 Missing: 21 +fo.js Found: 551 Missing: 22 +fr-ca.js Found: 319 Missing: 254 +fr.js Found: 551 Missing: 22 +gl.js Found: 292 Missing: 281 +gu.js Found: 320 Missing: 253 +he.js Found: 573 Missing: 0 +hi.js Found: 322 Missing: 251 +hr.js Found: 419 Missing: 154 +hu.js Found: 542 Missing: 31 +is.js Found: 326 Missing: 247 +it.js Found: 418 Missing: 155 +ja.js Found: 494 Missing: 79 +ka.js Found: 569 Missing: 4 +km.js Found: 286 Missing: 287 +ko.js Found: 304 Missing: 269 +lt.js Found: 326 Missing: 247 +lv.js Found: 294 Missing: 279 +mn.js Found: 320 Missing: 253 +ms.js Found: 276 Missing: 297 +nb.js Found: 550 Missing: 23 +nl.js Found: 570 Missing: 3 +no.js Found: 550 Missing: 23 +pl.js Found: 573 Missing: 0 +pt-br.js Found: 535 Missing: 38 +pt.js Found: 293 Missing: 280 +ro.js Found: 317 Missing: 256 +ru.js Found: 484 Missing: 89 +sk.js Found: 365 Missing: 208 +sl.js Found: 426 Missing: 147 +sr-latn.js Found: 287 Missing: 286 +sr.js Found: 286 Missing: 287 +sv.js Found: 551 Missing: 22 +th.js Found: 298 Missing: 275 +tr.js Found: 536 Missing: 37 +uk.js Found: 544 Missing: 29 +vi.js Found: 493 Missing: 80 +zh-cn.js Found: 548 Missing: 25 +zh.js Found: 419 Missing: 154 diff --git a/_source/lang/af.js b/_source/lang/af.js new file mode 100644 index 0000000..4e2151d --- /dev/null +++ b/_source/lang/af.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Afrikaans language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['af'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Teksverwerker, %1, druk op ALT 0 vir hulp.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Teksverwerker', + + // Toolbar buttons without dialogs. + source : 'Bron', + newPage : 'Nuwe bladsy', + save : 'Bewaar', + preview : 'Voorbeeld', + cut : 'Knip', + copy : 'Kopiëer', + paste : 'Plak', + print : 'Druk', + underline : 'Onderstreep', + bold : 'Vet', + italic : 'Skuins', + selectAll : 'Selekteer alles', + removeFormat : 'Verwyder opmaak', + strike : 'Deurstreep', + subscript : 'Onderskrif', + superscript : 'Bo-skrif', + horizontalrule : 'Horisontale lyn invoeg', + pagebreak : 'Bladsy-einde invoeg', + pagebreakAlt : 'Bladsy-einde', + unlink : 'Verwyder skakel', + undo : 'Ontdoen', + redo : 'Oordoen', + + // Common messages and labels. + common : + { + browseServer : 'Blaai op bediener', + url : 'URL', + protocol : 'Protokol', + upload : 'Oplaai', + uploadSubmit : 'Stuur na bediener', + image : 'Afbeelding', + flash : 'Flash', + form : 'Vorm', + checkbox : 'Merkhokkie', + radio : 'Radioknoppie', + textField : 'Teksveld', + textarea : 'Teks-area', + hiddenField : 'Blinde veld', + button : 'Knop', + select : 'Keuseveld', + imageButton : 'Afbeeldingsknop', + notSet : '<geen instelling>', + id : 'Id', + name : 'Naam', + langDir : 'Skryfrigting', + langDirLtr : 'Links na regs (LTR)', + langDirRtl : 'Regs na links (RTL)', + langCode : 'Taalkode', + longDescr : 'Lang beskrywing URL', + cssClass : 'CSS klasse', + advisoryTitle : 'Aanbevole titel', + cssStyle : 'Styl', + ok : 'OK', + cancel : 'Kanselleer', + close : 'Sluit', + preview : 'Voorbeeld', + generalTab : 'Algemeen', + advancedTab : 'Gevorderd', + validateNumberFailed : 'Hierdie waarde is nie \'n getal nie.', + confirmNewPage : 'Alle wysiginge sal verlore gaan. Is u seker dat u \'n nuwe bladsy wil laai?', + confirmCancel : 'Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?', + options : 'Opsies', + target : 'Doel', + targetNew : 'Nuwe venster (_blank)', + targetTop : 'Boonste venster (_top)', + targetSelf : 'Selfde venster (_self)', + targetParent : 'Oorspronklike venster (_parent)', + langDirLTR : 'Links na Regs (LTR)', + langDirRTL : 'Regs na Links (RTL)', + styles : 'Styl', + cssClasses : 'CSS klasse', + width : 'Breedte', + height : 'Hoogte', + align : 'Oplyn', + alignLeft : 'Links', + alignRight : 'Regs', + alignCenter : 'Sentreer', + alignTop : 'Bo', + alignMiddle : 'Middel', + alignBottom : 'Onder', + invalidHeight : 'Hoogte moet \'n getal wees', + invalidWidth : 'Breedte moet \'n getal wees.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, nie beskikbaar nie</span>' + }, + + contextmenu : + { + options : 'Konteks Spyskaart-opsies' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Voeg spesiaale karakter in', + title : 'Kies spesiale karakter', + options : 'Spesiale karakter-opsies' + }, + + // Link dialog. + link : + { + toolbar : 'Skakel invoeg/wysig', + other : '<ander>', + menu : 'Wysig skakel', + title : 'Skakel', + info : 'Skakel informasie', + target : 'Doel', + upload : 'Oplaai', + advanced : 'Gevorderd', + type : 'Skakelsoort', + toUrl : 'URL', + toAnchor : 'Anker in bladsy', + toEmail : 'E-pos', + targetFrame : '<raam>', + targetPopup : '<opspringvenster>', + targetFrameName : 'Naam van doelraam', + targetPopupName : 'Naam van opspringvenster', + popupFeatures : 'Eienskappe van opspringvenster', + popupResizable : 'Herskaalbaar', + popupStatusBar : 'Statusbalk', + popupLocationBar: 'Adresbalk', + popupToolbar : 'Werkbalk', + popupMenuBar : 'Spyskaartbalk', + popupFullScreen : 'Volskerm (IE)', + popupScrollBars : 'Skuifbalke', + popupDependent : 'Afhanklik (Netscape)', + popupLeft : 'Posisie links', + popupTop : 'Posisie bo', + id : 'Id', + langDir : 'Skryfrigting', + langDirLTR : 'Links na regs (LTR)', + langDirRTL : 'Regs na links (RTL)', + acccessKey : 'Toegangsleutel', + name : 'Naam', + langCode : 'Taalkode', + tabIndex : 'Tab indeks', + advisoryTitle : 'Aanbevole titel', + advisoryContentType : 'Aanbevole inhoudstipe', + cssClasses : 'CSS klasse', + charset : 'Karakterstel van geskakelde bron', + styles : 'Styl', + rel : 'Relationship', // MISSING + selectAnchor : 'Kies \'n anker', + anchorName : 'Op ankernaam', + anchorId : 'Op element Id', + emailAddress : 'E-posadres', + emailSubject : 'Berig-onderwerp', + emailBody : 'Berig-inhoud', + noAnchors : '(Geen ankers beskikbaar in dokument)', + noUrl : 'Gee die skakel se URL', + noEmail : 'Gee die e-posadres' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Anker byvoeg/verander', + menu : 'Anker-eienskappe', + title : 'Anker-eienskappe', + name : 'Ankernaam', + errorName : 'Voltooi die ankernaam asseblief', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Eienskappe van genommerde lys', + bulletedTitle : 'Eienskappe van ongenommerde lys', + type : 'Tipe', + start : 'Begin', + validateStartNumber :'Beginnommer van lys moet \'n heelgetal wees.', + circle : 'Sirkel', + disc : 'Skyf', + square : 'Vierkant', + none : 'Geen', + notset : '<nie ingestel nie>', + armenian : 'Armeense nommering', + georgian : 'Georgiese nommering (an, ban, gan, ens.)', + lowerRoman : 'Romeinse kleinletters (i, ii, iii, iv, v, ens.)', + upperRoman : 'Romeinse hoofletters (I, II, III, IV, V, ens.)', + lowerAlpha : 'Kleinletters (a, b, c, d, e, ens.)', + upperAlpha : 'Hoofletters (A, B, C, D, E, ens.)', + lowerGreek : 'Griekse kleinletters (alpha, beta, gamma, ens.)', + decimal : 'Desimale syfers (1, 2, 3, ens.)', + decimalLeadingZero : 'Desimale syfers met voorloopnul (01, 02, 03, ens.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Soek en vervang', + find : 'Soek', + replace : 'Vervang', + findWhat : 'Soek na:', + replaceWith : 'Vervang met:', + notFoundMsg : 'Teks nie gevind nie.', + matchCase : 'Hoof/kleinletter sensitief', + matchWord : 'Hele woord moet voorkom', + matchCyclic : 'Soek deurlopend', + replaceAll : 'Vervang alles', + replaceSuccessMsg : '%1 voorkoms(te) vervang.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabel', + title : 'Tabel eienskappe', + menu : 'Tabel eienskappe', + deleteTable : 'Verwyder tabel', + rows : 'Rye', + columns : 'Kolomme', + border : 'Randbreedte', + widthPx : 'piksels', + widthPc : 'persent', + widthUnit : 'breedte-eenheid', + cellSpace : 'Sel-afstand', + cellPad : 'Sel-spasie', + caption : 'Naam', + summary : 'Opsomming', + headers : 'Opskrifte', + headersNone : 'Geen', + headersColumn : 'Eerste kolom', + headersRow : 'Eerste ry', + headersBoth : 'Beide ', + invalidRows : 'Aantal rye moet \'n getal groter as 0 wees.', + invalidCols : 'Aantal kolomme moet \'n getal groter as 0 wees.', + invalidBorder : 'Randbreedte moet \'n getal wees.', + invalidWidth : 'Tabelbreedte moet \'n getal wees.', + invalidHeight : 'Tabelhoogte moet \'n getal wees.', + invalidCellSpacing : 'Sel-afstand moet \'n getal wees.', + invalidCellPadding : 'Sel-spasie moet \'n getal wees.', + + cell : + { + menu : 'Sel', + insertBefore : 'Voeg sel in voor', + insertAfter : 'Voeg sel in na', + deleteCell : 'Verwyder sel', + merge : 'Voeg selle saam', + mergeRight : 'Voeg saam na regs', + mergeDown : 'Voeg saam ondertoe', + splitHorizontal : 'Splits sel horisontaal', + splitVertical : 'Splits sel vertikaal', + title : 'Sel eienskappe', + cellType : 'Sel tipe', + rowSpan : 'Omspan rye', + colSpan : 'Omspan kolomme', + wordWrap : 'Woord terugloop', + hAlign : 'Horisontale oplyning', + vAlign : 'Vertikale oplyning', + alignBaseline : 'Basislyn', + bgColor : 'Agtergrondkleur', + borderColor : 'Randkleur', + data : 'Inhoud', + header : 'Opskrif', + yes : 'Ja', + no : 'Nee', + invalidWidth : 'Selbreedte moet \'n getal wees.', + invalidHeight : 'Selhoogte moet \'n getal wees.', + invalidRowSpan : 'Omspan rye moet \'n heelgetal wees.', + invalidColSpan : 'Omspan kolomme moet \'n heelgetal wees.', + chooseColor : 'Kies' + }, + + row : + { + menu : 'Ry', + insertBefore : 'Voeg ry in voor', + insertAfter : 'Voeg ry in na', + deleteRow : 'Verwyder ry' + }, + + column : + { + menu : 'Kolom', + insertBefore : 'Voeg kolom in voor', + insertAfter : 'Voeg kolom in na', + deleteColumn : 'Verwyder kolom' + } + }, + + // Button Dialog. + button : + { + title : 'Knop eienskappe', + text : 'Teks (Waarde)', + type : 'Soort', + typeBtn : 'Knop', + typeSbm : 'Stuur', + typeRst : 'Maak leeg' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Merkhokkie eienskappe', + radioTitle : 'Radioknoppie eienskappe', + value : 'Waarde', + selected : 'Geselekteer' + }, + + // Form Dialog. + form : + { + title : 'Vorm eienskappe', + menu : 'Vorm eienskappe', + action : 'Aksie', + method : 'Metode', + encoding : 'Kodering' + }, + + // Select Field Dialog. + select : + { + title : 'Keuseveld eienskappe', + selectInfo : 'Info', + opAvail : 'Beskikbare opsies', + value : 'Waarde', + size : 'Grootte', + lines : 'Lyne', + chkMulti : 'Laat meer as een keuse toe', + opText : 'Teks', + opValue : 'Waarde', + btnAdd : 'Byvoeg', + btnModify : 'Wysig', + btnUp : 'Op', + btnDown : 'Af', + btnSetValue : 'Stel as geselekteerde waarde', + btnDelete : 'Verwyder' + }, + + // Textarea Dialog. + textarea : + { + title : 'Teks-area eienskappe', + cols : 'Kolomme', + rows : 'Rye' + }, + + // Text Field Dialog. + textfield : + { + title : 'Teksveld eienskappe', + name : 'Naam', + value : 'Waarde', + charWidth : 'Breedte (karakters)', + maxChars : 'Maksimum karakters', + type : 'Soort', + typeText : 'Teks', + typePass : 'Wagwoord' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Verborge veld eienskappe', + name : 'Naam', + value : 'Waarde' + }, + + // Image Dialog. + image : + { + title : 'Afbeelding eienskappe', + titleButton : 'Afbeeldingsknop eienskappe', + menu : 'Afbeelding eienskappe', + infoTab : 'Afbeelding informasie', + btnUpload : 'Stuur na bediener', + upload : 'Oplaai', + alt : 'Alternatiewe teks', + lockRatio : 'Vaste proporsie', + resetSize : 'Herstel grootte', + border : 'Rand', + hSpace : 'HSpasie', + vSpace : 'VSpasie', + alertUrl : 'Gee URL van afbeelding.', + linkTab : 'Skakel', + button2Img : 'Wil u die geselekteerde afbeeldingsknop vervang met \'n eenvoudige afbeelding?', + img2Button : 'Wil u die geselekteerde afbeelding vervang met \'n afbeeldingsknop?', + urlMissing : 'Die URL na die afbeelding ontbreek.', + validateBorder : 'Rand moet \'n heelgetal wees.', + validateHSpace : 'HSpasie moet \'n heelgetal wees.', + validateVSpace : 'VSpasie moet \'n heelgetal wees.' + }, + + // Flash Dialog + flash : + { + properties : 'Flash eienskappe', + propertiesTab : 'Eienskappe', + title : 'Flash eienskappe', + chkPlay : 'Speel outomaties', + chkLoop : 'Herhaal', + chkMenu : 'Flash spyskaart aan', + chkFull : 'Laat volledige skerm toe', + scale : 'Skaal', + scaleAll : 'Wys alles', + scaleNoBorder : 'Geen rand', + scaleFit : 'Presiese pas', + access : 'Skrip toegang', + accessAlways : 'Altyd', + accessSameDomain: 'Selfde domeinnaam', + accessNever : 'Nooit', + alignAbsBottom : 'Absoluut-onder', + alignAbsMiddle : 'Absoluut-middel', + alignBaseline : 'Basislyn', + alignTextTop : 'Teks bo', + quality : 'Kwaliteit', + qualityBest : 'Beste', + qualityHigh : 'Hoog', + qualityAutoHigh : 'Outomaties hoog', + qualityMedium : 'Gemiddeld', + qualityAutoLow : 'Outomaties laag', + qualityLow : 'Laag', + windowModeWindow: 'Venster', + windowModeOpaque: 'Ondeursigtig', + windowModeTransparent : 'Deursigtig', + windowMode : 'Venster modus', + flashvars : 'Veranderlikes vir Flash', + bgcolor : 'Agtergrondkleur', + hSpace : 'HSpasie', + vSpace : 'VSpasie', + validateSrc : 'Voeg die URL in', + validateHSpace : 'HSpasie moet \'n heelgetal wees.', + validateVSpace : 'VSpasie moet \'n heelgetal wees.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Speltoets', + title : 'Speltoetser', + notAvailable : 'Jammer, hierdie diens is nie nou beskikbaar nie.', + errorLoading : 'Fout by inlaai van diens: %s.', + notInDic : 'Nie in woordeboek nie', + changeTo : 'Verander na', + btnIgnore : 'Ignoreer', + btnIgnoreAll : 'Ignoreer alles', + btnReplace : 'Vervang', + btnReplaceAll : 'vervang alles', + btnUndo : 'Ontdoen', + noSuggestions : '- Geen voorstel -', + progress : 'Spelling word getoets...', + noMispell : 'Klaar met speltoets: Geen foute nie', + noChanges : 'Klaar met speltoets: Geen woorde verander nie', + oneChange : 'Klaar met speltoets: Een woord verander', + manyChanges : 'Klaar met speltoets: %1 woorde verander', + ieSpellDownload : 'Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?' + }, + + smiley : + { + toolbar : 'Lagbekkie', + title : 'Voeg lagbekkie by', + options : 'Lagbekkie opsies' + }, + + elementsPath : + { + eleLabel : 'Elemente-pad', + eleTitle : '%1 element' + }, + + numberedlist : 'Genommerde lys', + bulletedlist : 'Ongenommerde lys', + indent : 'Vergroot inspring', + outdent : 'Verklein inspring', + + justify : + { + left : 'Links oplyn', + center : 'Sentreer', + right : 'Regs oplyn', + block : 'Uitvul' + }, + + blockquote : 'Sitaatblok', + + clipboard : + { + title : 'Byvoeg', + cutError : 'U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).', + copyError : 'U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).', + pasteMsg : 'Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.', + securityMsg : 'Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.', + pasteArea : 'Plak-area' + }, + + pastefromword : + { + confirmCleanup : 'Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?', + toolbar : 'Plak vanuit Word', + title : 'Plak vanuit Word', + error : 'Die geplakte teks kon nie skoongemaak word nie, weens \'n interne fout' + }, + + pasteText : + { + button : 'Plak as eenvoudige teks', + title : 'Plak as eenvoudige teks' + }, + + templates : + { + button : 'Sjablone', + title : 'Inhoud Sjablone', + options : 'Sjabloon opsies', + insertOption : 'Vervang huidige inhoud', + selectPromptMsg : 'Kies die sjabloon om te gebruik in die redigeerder (huidige inhoud gaan verlore):', + emptyListMsg : '(Geen sjablone gedefineer nie)' + }, + + showBlocks : 'Toon blokke', + + stylesCombo : + { + label : 'Styl', + panelTitle : 'Opmaak style', + panelTitle1 : 'Blok style', + panelTitle2 : 'Inlyn style', + panelTitle3 : 'Objek style' + }, + + format : + { + label : 'Opmaak', + panelTitle : 'Opmaak', + + tag_p : 'Normaal', + tag_pre : 'Opgemaak', + tag_address : 'Adres', + tag_h1 : 'Opskrif 1', + tag_h2 : 'Opskrif 2', + tag_h3 : 'Opskrif 3', + tag_h4 : 'Opskrif 4', + tag_h5 : 'Opskrif 5', + tag_h6 : 'Opskrif 6', + tag_div : 'Normaal (DIV)' + }, + + div : + { + title : 'Skep Div houer', + toolbar : 'Skep Div houer', + cssClassInputLabel : 'CSS klasse', + styleSelectLabel : 'Styl', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Taalkode', + inlineStyleInputLabel : 'Inlyn Styl', + advisoryTitleInputLabel : 'Aanbevole Titel', + langDirLabel : 'Skryfrigting', + langDirLTRLabel : 'Links na regs (LTR)', + langDirRTLLabel : 'Regs na links (RTL)', + edit : 'Wysig Div', + remove : 'Verwyder Div' + }, + + iframe : + { + title : 'IFrame Eienskappe', + toolbar : 'IFrame', + noUrl : 'Gee die iframe URL', + scrolling : 'Skuifbalke aan', + border : 'Wys rand van raam' + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', + panelTitle : 'Fontnaam' + }, + + fontSize : + { + label : 'Grootte', + voiceLabel : 'Fontgrootte', + panelTitle : 'Fontgrootte' + }, + + colorButton : + { + textColorTitle : 'Tekskleur', + bgColorTitle : 'Agtergrondkleur', + panelTitle : 'Kleure', + auto : 'Outomaties', + more : 'Meer Kleure...' + }, + + colors : + { + '000' : 'Swart', + '800000' : 'Meroen', + '8B4513' : 'Sjokoladebruin', + '2F4F4F' : 'Donkerleisteengrys', + '008080' : 'Blougroen', + '000080' : 'Vlootblou', + '4B0082' : 'Indigo', + '696969' : 'Donkergrys', + 'B22222' : 'Rooibaksteen', + 'A52A2A' : 'Bruin', + 'DAA520' : 'Donkergeel', + '006400' : 'Donkergroen', + '40E0D0' : 'Turkoois', + '0000CD' : 'Middelblou', + '800080' : 'Pers', + '808080' : 'Grys', + 'F00' : 'Rooi', + 'FF8C00' : 'Donkeroranje', + 'FFD700' : 'Goud', + '008000' : 'Groen', + '0FF' : 'Siaan', + '00F' : 'Blou', + 'EE82EE' : 'Viooltjieblou', + 'A9A9A9' : 'Donkergrys', + 'FFA07A' : 'Ligsalm', + 'FFA500' : 'Oranje', + 'FFFF00' : 'Geel', + '00FF00' : 'Lemmetjie', + 'AFEEEE' : 'Ligturkoois', + 'ADD8E6' : 'Ligblou', + 'DDA0DD' : 'Pruim', + 'D3D3D3' : 'Liggrys', + 'FFF0F5' : 'Linne', + 'FAEBD7' : 'Ivoor', + 'FFFFE0' : 'Liggeel', + 'F0FFF0' : 'Heuningdou', + 'F0FFFF' : 'Asuur', + 'F0F8FF' : 'Ligte hemelsblou', + 'E6E6FA' : 'Laventel', + 'FFF' : 'Wit' + }, + + scayt : + { + title : 'Speltoets terwyl u tik', + opera_title : 'Nie ondersteun deur Opera nie', + enable : 'SCAYT aan', + disable : 'SCAYT af', + about : 'SCAYT info', + toggle : 'SCAYT wissel aan/af', + options : 'Opsies', + langs : 'Tale', + moreSuggestions : 'Meer voorstelle', + ignore : 'Ignoreer', + ignoreAll : 'Ignoreer alles', + addWord : 'Voeg woord by', + emptyDic : 'Woordeboeknaam mag nie leeg wees nie.', + + optionsTab : 'Opsies', + allCaps : 'Ignoreer woorde in hoofletters', + ignoreDomainNames : 'Ignoreer domeinname', + mixedCase : 'Ignoreer woorde met hoof- en kleinletters', + mixedWithDigits : 'Ignoreer woorde met syfers', + + languagesTab : 'Tale', + + dictionariesTab : 'Woordeboeke', + dic_field_name : 'Naam van woordeboek', + dic_create : 'Skep', + dic_restore : 'Herstel', + dic_delete : 'Verwijder', + dic_rename : 'Hernoem', + dic_info : 'Aanvanklik word die gebruikerswoordeboek in \'n koekie gestoor. Koekies is egter beperk in grootte. Wanneer die gebruikerswoordeboek te groot vir \'n koekie geword het, kan dit op ons bediener gestoor word. Om u persoonlike woordeboek op ons bediener te stoor, gee asb. \'n naam vir u woordeboek. Indien u alreeds \'n gestoorde woordeboek het, tik die naam en kliek op die Herstel knop.', + + aboutTab : 'Info' + }, + + about : + { + title : 'Info oor CKEditor', + dlgTitle : 'Info oor CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Vir lisensie-informasie, besoek asb. ons webwerf:', + copy : 'Kopiereg © $1. Alle regte voorbehou.' + }, + + maximize : 'Maksimaliseer', + minimize : 'Minimaliseer', + + fakeobjects : + { + anchor : 'Anker', + flash : 'Flash animasie', + iframe : 'IFrame', + hiddenfield : 'Verborge veld', + unknown : 'Onbekende objek' + }, + + resize : 'Sleep om te herskaal', + + colordialog : + { + title : 'Kies kleur', + options : 'Kleuropsies', + highlight : 'Aktief', + selected : 'Geselekteer', + clear : 'Herstel' + }, + + toolbarCollapse : 'Verklein werkbalk', + toolbarExpand : 'Vergroot werkbalk', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Skryfrigting van links na regs', + rtl : 'Skryfrigting van regs na links' + }, + + docprops : + { + label : 'Dokument Eienskappe', + title : 'Dokument Eienskappe', + design : 'Design', // MISSING + meta : 'Meta Data', + chooseColor : 'Kies', + other : '<ander>', + docTitle : 'Bladsy Opskrif', + charset : 'Karakterstel Kodeering', + charsetOther : 'Ander Karakterstel Kodeering', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Sentraal Europa', + charsetCT : 'Chinees Traditioneel (Big5)', + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Grieks', + charsetJP : 'Japanees', + charsetKR : 'Koreans', + charsetTR : 'Turks', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Dokument Opskrif Soort', + docTypeOther : 'Ander Dokument Opskrif Soort', + xhtmlDec : 'Voeg XHTML verklaring by', + bgColor : 'Agtergrond kleur', + bgImage : 'Agtergrond Beeld URL', + bgFixed : 'Vasgeklemde Agtergrond', + txtColor : 'Tekskleur', + margin : 'Bladsy Rante', + marginTop : 'Bo', + marginLeft : 'Links', + marginRight : 'Regs', + marginBottom : 'Onder', + metaKeywords : 'Dokument Index Sleutelwoorde(comma verdeelt)', + metaDescription : 'Dokument Beskrywing', + metaAuthor : 'Skrywer', + metaCopyright : 'Kopiereg', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/ar.js b/_source/lang/ar.js new file mode 100644 index 0000000..8f77a6f --- /dev/null +++ b/_source/lang/ar.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Arabic language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['ar'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'rtl', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'اÙ٠صدر', + newPage : 'صÙØØ© جدÙدة', + save : 'ØÙظ', + preview : '٠عاÙÙØ© اÙصÙØØ©', + cut : 'Ùص', + copy : 'Ùسخ', + paste : 'ÙصÙ', + print : 'طباعة', + underline : 'تسطÙر', + bold : 'غا٠Ù', + italic : '٠ائÙ', + selectAll : 'تØدÙد اÙÙÙ', + removeFormat : 'إزاÙØ© اÙتÙسÙÙات', + strike : 'ÙتÙسط٠خط', + subscript : 'Ù ÙØ®Ùض', + superscript : '٠رتÙع', + horizontalrule : 'خط ÙاصÙ', + pagebreak : 'إدخا٠صÙØØ© جدÙدة', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'إزاÙØ© رابط', + undo : 'تراجع', + redo : 'إعادة', + + // Common messages and labels. + common : + { + browseServer : 'تصÙØ', + url : 'اÙرابط', + protocol : 'اÙبرÙتÙÙÙÙ', + upload : 'رÙع', + uploadSubmit : 'أرسÙ', + image : 'صÙرة', + flash : 'ÙÙاش', + form : 'ÙÙ Ùذج', + checkbox : 'خاÙØ© إختÙار', + radio : 'زر اختÙار', + textField : '٠ربع Ùص', + textarea : '٠ساØØ© ÙصÙØ©', + hiddenField : 'إدراج ØÙÙ Ø®ÙÙ', + button : 'زر ضغط', + select : 'اختار', + imageButton : 'زر صÙرة', + notSet : '<بدÙ٠تØدÙد>', + id : 'اÙرÙÙ ', + name : 'اÙاس٠', + langDir : 'إتجا٠اÙÙص', + langDirLtr : 'اÙÙسار ÙÙÙÙ ÙÙ (LTR)', + langDirRtl : 'اÙÙÙ ÙÙ ÙÙÙسار (RTL)', + langCode : 'ر٠ز اÙÙغة', + longDescr : 'اÙÙص٠اÙتÙصÙÙÙ', + cssClass : 'Ùئات اÙتÙسÙÙ', + advisoryTitle : 'عÙÙا٠اÙتÙرÙر', + cssStyle : 'ÙÙ Ø·', + ok : 'Ù ÙاÙÙ', + cancel : 'Ø¥Ùغاء اÙأ٠ر', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'عا٠', + advancedTab : '٠تÙد٠', + validateNumberFailed : 'ÙاÙÙجد ÙتÙجة', + confirmNewPage : 'ستÙÙد أ٠٠تغÙÙرات اذا Ù٠تÙ٠بØÙظÙا اÙÙا. Ù٠أÙت ٠تأÙد Ø£Ù٠ترÙد صÙØØ© جدÙدةØ', + confirmCancel : 'بعض اÙØ®Ùارات Ùد تغÙرت. Ù٠أÙت ٠تأÙد ٠٠إغÙا٠٠ربع اÙÙصØ', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'اÙعرض', + height : 'اÙإرتÙاع', + align : 'Ù Øاذاة', + alignLeft : 'Ùسار', + alignRight : 'ÙÙ ÙÙ', + alignCenter : 'Ùسط', + alignTop : 'أعÙÙ', + alignMiddle : 'Ùسط', + alignBottom : 'أسÙÙ', + invalidHeight : 'اÙارتÙاع Ùجب Ø£Ù ÙÙÙ٠عدداÙ.', + invalidWidth : 'اÙعرض Ùجب Ø£Ù ÙÙÙ٠عدداÙ.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, غÙر ٠تاØ</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'إدراج خاص.Ù', + title : 'اختر اÙØ®Ùاص', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'رابط', + other : '<أخرÙ>', + menu : 'تØرÙر رابط', + title : 'إرتباط تشعبÙ', + info : '٠عÙÙ٠ات اÙرابط', + target : 'Ùد٠اÙرابط', + upload : 'رÙع', + advanced : '٠تÙد٠', + type : 'ÙÙع اÙربط', + toUrl : 'URL', // MISSING + toAnchor : 'Ù Ùا٠ÙÙ Ùذا اÙ٠ستÙد', + toEmail : 'برÙد Ø¥ÙÙترÙÙÙ', + targetFrame : '<إطار>', + targetPopup : '<ÙاÙذة Ù ÙبثÙØ©>', + targetFrameName : 'اس٠اÙإطار اÙ٠ستÙدÙ', + targetPopupName : 'اس٠اÙÙاÙذة اÙÙ ÙبثÙØ©', + popupFeatures : 'خصائص اÙÙاÙذة اÙÙ ÙبثÙØ©', + popupResizable : 'ÙابÙØ© اÙتشÙÙÙ', + popupStatusBar : 'شرÙØ· اÙØاÙØ©', + popupLocationBar: 'شرÙØ· اÙعÙÙاÙ', + popupToolbar : 'شرÙØ· اÙأدÙات', + popupMenuBar : 'اÙÙÙائ٠اÙرئÙسÙØ©', + popupFullScreen : 'Ù Ùئ اÙشاشة (IE)', + popupScrollBars : 'أشرطة اÙت٠رÙر', + popupDependent : 'تابع (Netscape)', + popupLeft : 'اÙت٠رÙز ÙÙÙسار', + popupTop : 'اÙت٠رÙز ÙÙأعÙÙ', + id : 'ÙÙÙØ©', + langDir : 'إتجا٠اÙÙص', + langDirLTR : 'اÙÙسار ÙÙÙÙ ÙÙ (LTR)', + langDirRTL : 'اÙÙÙ ÙÙ ÙÙÙسار (RTL)', + acccessKey : 'Ù ÙاتÙØ Ø§Ùإختصار', + name : 'اÙاس٠', + langCode : 'ÙÙد اÙÙص', + tabIndex : 'اÙترتÙب', + advisoryTitle : 'عÙÙا٠اÙتÙرÙر', + advisoryContentType : 'ÙÙع اÙتÙرÙر', + cssClasses : 'Ùئات اÙتÙسÙÙ', + charset : 'تر٠Ùز اÙ٠ادة اÙÙ Ø·ÙÙبة', + styles : 'ÙÙ Ø·', + rel : 'Relationship', // MISSING + selectAnchor : 'اختر عÙا٠ة ٠رجعÙØ©', + anchorName : 'Øسب اÙاس٠', + anchorId : 'Øسب رÙ٠اÙعÙصر', + emailAddress : 'عÙÙا٠اÙبرÙد Ø¥ÙÙترÙÙÙ', + emailSubject : 'Ù ÙضÙع اÙرساÙØ©', + emailBody : 'Ù ØتÙ٠اÙرساÙØ©', + noAnchors : '(Ùا تÙجد عÙا٠ات ٠رجعÙØ© ÙÙ Ùذا اÙ٠ستÙد)', + noUrl : 'Ù Ù ÙضÙ٠أدخ٠عÙÙا٠اÙÙ ÙÙع اÙØ°Ù ÙØ´Ùر Ø¥ÙÙ٠اÙرابط', + noEmail : 'Ù Ù ÙضÙ٠أدخ٠عÙÙا٠اÙبرÙد اÙØ¥ÙÙترÙÙÙ' + }, + + // Anchor dialog + anchor : + { + toolbar : 'إشارة ٠رجعÙØ©', + menu : 'تØرÙر اÙإشارة اÙ٠رجعÙØ©', + title : 'خصائص اÙإشارة اÙ٠رجعÙØ©', + name : 'اس٠اÙإشارة اÙ٠رجعÙØ©', + errorName : 'اÙرجاء Ùتابة اس٠اÙإشارة اÙ٠رجعÙØ©', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'بØØ« ÙاستبداÙ', + find : 'بØØ«', + replace : 'إستبداÙ', + findWhat : 'اÙبØØ« بÙ:', + replaceWith : 'إستبدا٠بÙ:', + notFoundMsg : 'ÙÙ Ùت٠اÙعثÙر عÙ٠اÙÙص اÙÙ Øدد.', + matchCase : '٠طابÙØ© ØاÙØ© اÙØ£ØرÙ', + matchWord : '٠طابÙØ© باÙÙا٠Ù', + matchCyclic : '٠طابÙØ© دÙرÙØ©', + replaceAll : 'إستبدا٠اÙÙÙ', + replaceSuccessMsg : 'ت٠استبدا٠1% ٠٠اÙØاÙات ' + }, + + // Table Dialog + table : + { + toolbar : 'جدÙÙ', + title : 'خصائص اÙجدÙÙ', + menu : 'خصائص اÙجدÙÙ', + deleteTable : 'Øذ٠اÙجدÙÙ', + rows : 'صÙÙÙ', + columns : 'أع٠دة', + border : 'اÙØدÙد', + widthPx : 'بÙسÙ', + widthPc : 'باÙ٠ئة', + widthUnit : 'width unit', // MISSING + cellSpace : 'تباعد اÙØ®ÙاÙا', + cellPad : 'اÙ٠ساÙØ© اÙبادئة', + caption : 'اÙÙصÙ', + summary : 'اÙØ®Ùاصة', + headers : 'اÙعÙاÙÙÙ', + headersNone : 'بدÙÙ', + headersColumn : 'اÙع٠Ùد اÙØ£ÙÙ', + headersRow : 'اÙص٠اÙØ£ÙÙ', + headersBoth : 'ÙÙاÙ٠ا', + invalidRows : 'عدد اÙصÙÙÙ Ùجب Ø£Ù ÙÙÙ٠عددا٠أÙبر ٠٠صÙر.', + invalidCols : 'عدد اÙأع٠دة Ùجب Ø£Ù ÙÙÙ٠عددا٠أÙبر ٠٠صÙر.', + invalidBorder : 'Øج٠اÙØد Ùجب Ø£Ù ÙÙÙ٠عدداÙ.', + invalidWidth : 'عرض اÙجدÙÙ Ùجب Ø£Ù ÙÙÙ٠عدداÙ.', + invalidHeight : 'ارتÙاع اÙجدÙÙ Ùجب Ø£Ù ÙÙÙ٠عدداÙ.', + invalidCellSpacing : 'اÙ٠ساÙØ© بÙ٠اÙØ®ÙاÙا Ùجب أ٠تÙÙ٠عدداÙ.', + invalidCellPadding : 'اÙ٠ساÙØ© اÙبادئة Ùجب أ٠تÙÙ٠عدداÙ', + + cell : + { + menu : 'Ø®ÙÙØ©', + insertBefore : 'إدراج Ø®ÙÙØ© ÙبÙ', + insertAfter : 'إدراج Ø®ÙÙØ© بعد', + deleteCell : 'ØØ°Ù Ø®ÙÙØ©', + merge : 'د٠ج Ø®ÙاÙا', + mergeRight : 'د٠ج ÙÙÙÙ ÙÙ', + mergeDown : 'د٠ج ÙÙأسÙÙ', + splitHorizontal : 'تÙسÙ٠اÙØ®ÙÙØ© Ø£ÙÙÙاÙ', + splitVertical : 'تÙسÙ٠اÙØ®ÙÙØ© ع٠ÙدÙاÙ', + title : 'خصائص اÙØ®ÙÙØ©', + cellType : 'ÙÙع اÙØ®ÙÙØ©', + rowSpan : 'ا٠تداد اÙصÙÙÙ', + colSpan : 'ا٠تداد اÙأع٠دة', + wordWrap : 'اÙتÙا٠اÙÙص', + hAlign : 'Ù Øاذاة Ø£ÙÙÙØ©', + vAlign : 'Ù Øاذاة رأسÙØ©', + alignBaseline : 'خط اÙÙاعدة', + bgColor : 'ÙÙ٠اÙØ®ÙÙÙØ©', + borderColor : 'ÙÙ٠اÙØدÙد', + data : 'بÙاÙات', + header : 'عÙÙاÙ', + yes : 'Ùع٠', + no : 'Ùا', + invalidWidth : 'عرض اÙØ®ÙÙØ© Ùجب Ø£Ù ÙÙÙ٠عدداÙ.', + invalidHeight : 'ارتÙاع اÙØ®ÙÙØ© Ùجب Ø£Ù ÙÙÙ٠عدداÙ.', + invalidRowSpan : 'ا٠تداد اÙصÙÙÙ Ùجب Ø£Ù ÙÙÙ٠عددا٠صØÙØاÙ.', + invalidColSpan : 'ا٠تداد اÙأع٠دة Ùجب Ø£Ù ÙÙÙ٠عددا٠صØÙØاÙ.', + chooseColor : 'اختر' + }, + + row : + { + menu : 'صÙ', + insertBefore : 'إدراج ص٠ÙبÙ', + insertAfter : 'إدراج ص٠بعد', + deleteRow : 'Øذ٠صÙÙÙ' + }, + + column : + { + menu : 'ع٠Ùد', + insertBefore : 'إدراج ع٠Ùد ÙبÙ', + insertAfter : 'إدراج ع٠Ùد بعد', + deleteColumn : 'Øذ٠أع٠دة' + } + }, + + // Button Dialog. + button : + { + title : 'خصائص زر اÙضغط', + text : 'اÙÙÙÙ Ø©/اÙتس٠ÙØ©', + type : 'ÙÙع اÙزر', + typeBtn : 'زر', + typeSbm : 'إرساÙ', + typeRst : 'إعادة تعÙÙÙ' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'خصائص خاÙØ© اÙإختÙار', + radioTitle : 'خصائص زر اÙØ®Ùار', + value : 'اÙÙÙÙ Ø©', + selected : 'Ù Øدد' + }, + + // Form Dialog. + form : + { + title : 'خصائص اÙÙÙ Ùذج', + menu : 'خصائص اÙÙÙ Ùذج', + action : 'اس٠اÙÙ ÙÙ', + method : 'اÙأسÙÙب', + encoding : 'تشÙÙر' + }, + + // Select Field Dialog. + select : + { + title : 'خصائص اختÙار اÙØÙÙ', + selectInfo : 'اختار ٠عÙÙ٠ات', + opAvail : 'اÙØ®Ùارات اÙ٠تاØØ©', + value : 'اÙÙÙÙ Ø©', + size : 'اÙØج٠', + lines : 'اÙأسطر', + chkMulti : 'اÙØ³Ù Ø§Ø Ø¨ØªØدÙدات ٠تعددة', + opText : 'اÙÙص', + opValue : 'اÙÙÙÙ Ø©', + btnAdd : 'إضاÙØ©', + btnModify : 'تعدÙÙ', + btnUp : 'أعÙÙ', + btnDown : 'أسÙÙ', + btnSetValue : 'إجعÙÙا Ù Øددة', + btnDelete : 'إزاÙØ©' + }, + + // Textarea Dialog. + textarea : + { + title : 'خصائص ٠ساØØ© اÙÙص', + cols : 'اÙأع٠دة', + rows : 'اÙصÙÙÙ' + }, + + // Text Field Dialog. + textfield : + { + title : 'خصائص ٠ربع اÙÙص', + name : 'اÙاس٠', + value : 'اÙÙÙÙ Ø©', + charWidth : 'عرض اÙس٠ات', + maxChars : 'اÙص٠عدد ÙÙس٠ات', + type : 'ÙÙع اÙÙ ØتÙÙ', + typeText : 'Ùص', + typePass : 'ÙÙÙ Ø© ٠رÙر' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'خصائص اÙØÙ٠اÙÙ Ø®ÙÙ', + name : 'اÙاس٠', + value : 'اÙÙÙÙ Ø©' + }, + + // Image Dialog. + image : + { + title : 'خصائص اÙصÙرة', + titleButton : 'خصائص زر اÙصÙرة', + menu : 'خصائص اÙصÙرة', + infoTab : '٠عÙÙ٠ات اÙصÙرة', + btnUpload : 'أرسÙÙا ÙÙخاد٠', + upload : 'رÙع', + alt : 'عÙÙا٠اÙصÙرة', + lockRatio : 'تÙاس٠اÙØج٠', + resetSize : 'إستعادة اÙØج٠اÙأصÙÙ', + border : 'س٠٠اÙØدÙد', + hSpace : 'تباعد Ø£ÙÙÙ', + vSpace : 'تباعد ع٠ÙدÙ', + alertUrl : 'ÙضÙا٠أÙتب اÙÙ ÙÙع اÙذ٠تÙجد عÙÙÙ Ùذ٠اÙصÙرة.', + linkTab : 'اÙرابط', + button2Img : 'Ù٠ترÙد تØÙÙ٠زر اÙصÙرة اÙ٠ختار Ø¥Ù٠صÙرة بسÙطةØ', + img2Button : 'Ù٠ترÙد تØÙÙ٠اÙصÙرة اÙ٠ختارة Ø¥Ù٠زر صÙرةØ', + urlMissing : 'عÙÙا٠٠صدر اÙصÙرة Ù ÙÙÙد', + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'خصائص اÙÙÙاش', + propertiesTab : 'اÙخصائص', + title : 'خصائص ÙÙÙ٠اÙÙÙاش', + chkPlay : 'تشغÙ٠تÙÙائÙ', + chkLoop : 'تÙرار', + chkMenu : 'ت٠ÙÙÙ Ùائ٠ة ÙÙÙ٠اÙÙÙاش', + chkFull : 'Ù ÙØ¡ اÙشاشة', + scale : 'اÙØج٠', + scaleAll : 'إظÙار اÙÙÙ', + scaleNoBorder : 'بÙا ØدÙد', + scaleFit : 'ضبط تا٠', + access : 'دخÙ٠اÙÙص اÙبر٠جÙ', + accessAlways : 'دائ٠اÙ', + accessSameDomain: 'ÙÙس اÙÙطاÙ', + accessNever : 'Ù Ø·ÙÙاÙ', + alignAbsBottom : 'أسÙ٠اÙÙص', + alignAbsMiddle : 'Ùسط اÙسطر', + alignBaseline : 'عÙ٠اÙسطر', + alignTextTop : 'أعÙ٠اÙÙص', + quality : 'جÙدة', + qualityBest : 'Ø£ÙضÙ', + qualityHigh : 'عاÙÙØ©', + qualityAutoHigh : 'عاÙÙØ© تÙÙائÙاÙ', + qualityMedium : '٠تÙسطة', + qualityAutoLow : 'Ù ÙØ®Ùضة تÙÙائÙاÙ', + qualityLow : 'Ù ÙØ®Ùضة', + windowModeWindow: 'ÙاÙذة', + windowModeOpaque: 'غÙر Ø´ÙاÙ', + windowModeTransparent : 'Ø´ÙاÙ', + windowMode : 'Ùضع اÙÙاÙذة', + flashvars : '٠تغÙرات اÙÙÙاش', + bgcolor : 'ÙÙ٠اÙØ®ÙÙÙØ©', + hSpace : 'تباعد Ø£ÙÙÙ', + vSpace : 'تباعد ع٠ÙدÙ', + validateSrc : 'ÙضÙا٠أدخ٠عÙÙا٠اÙÙ ÙÙع اÙØ°Ù ÙØ´Ùر Ø¥ÙÙ٠اÙرابط', + validateHSpace : 'HSpace Ùجب Ø£Ù ÙÙÙ٠عدداÙ.', + validateVSpace : 'VSpace Ùجب Ø£Ù ÙÙÙ٠عدداÙ.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'تدÙÙ٠إ٠ÙائÙ', + title : 'اÙتدÙÙ٠اÙØ¥Ù ÙائÙ', + notAvailable : 'عÙÙاÙØ ÙÙÙÙ Ùذ٠اÙخد٠ة غÙر ٠تاØØ© اÙاÙ', + errorLoading : 'خطأ Ù٠تØÙ Ù٠تطبÙ٠خد٠ة اÙاستضاÙØ©: %s.', + notInDic : 'ÙÙست Ù٠اÙÙا٠Ùس', + changeTo : 'اÙتغÙÙر Ø¥ÙÙ', + btnIgnore : 'تجاÙÙ', + btnIgnoreAll : 'تجاÙ٠اÙÙÙ', + btnReplace : 'تغÙÙر', + btnReplaceAll : 'تغÙÙر اÙÙÙ', + btnUndo : 'تراجع', + noSuggestions : '- Ùا تÙجد Ø¥ÙتراØات -', + progress : 'جار٠اÙتدÙÙ٠اÙا٠ÙائÙ', + noMispell : 'ت٠اÙتدÙÙ٠اÙØ¥Ù ÙائÙ: ÙÙ Ùت٠اÙعثÙر عÙ٠أ٠أخطاء Ø¥Ù ÙائÙØ©', + noChanges : 'ت٠اÙتدÙÙ٠اÙØ¥Ù ÙائÙ: ÙÙ Ùت٠تغÙÙر Ø£Ù ÙÙÙ Ø©', + oneChange : 'ت٠اÙتدÙÙ٠اÙØ¥Ù ÙائÙ: ت٠تغÙÙر ÙÙÙ Ø© ÙاØدة ÙÙØ·', + manyChanges : 'ت٠إÙ٠ا٠اÙتدÙÙ٠اÙØ¥Ù ÙائÙ: ت٠تغÙÙر %1 Ù Ù ÙÙ٠ات', + ieSpellDownload : 'اÙ٠دÙ٠اÙØ¥Ù Ùائ٠(اÙØ¥ÙجÙÙزÙ) غÙر ٠ثبÙت. Ù٠تÙد تØÙ ÙÙ٠اÙØ¢ÙØ' + }, + + smiley : + { + toolbar : 'ابتسا٠ات', + title : 'إدراج ابتسا٠ات', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : 'عÙصر 1%' + }, + + numberedlist : 'ادخاÙ/Øذ٠تعداد رÙÙ Ù', + bulletedlist : 'ادخاÙ/Øذ٠تعداد ÙÙØ·Ù', + indent : 'زÙادة اÙ٠ساÙØ© اÙبادئة', + outdent : 'Ø¥ÙÙاص اÙ٠ساÙØ© اÙبادئة', + + justify : + { + left : 'Ù Øاذاة Ø¥Ù٠اÙÙسار', + center : 'تÙسÙØ·', + right : 'Ù Øاذاة Ø¥Ù٠اÙÙÙ ÙÙ', + block : 'ضبط' + }, + + blockquote : 'اÙتباس', + + clipboard : + { + title : 'ÙصÙ', + cutError : 'اÙإعدادات اÙØ£Ù ÙÙØ© ÙÙ٠تصÙØ Ø§Ùذ٠تستخد٠٠ت٠Ùع اÙÙص اÙتÙÙائÙ. ÙضÙا٠إستخد٠ÙÙØØ© اÙÙ ÙاتÙØ ÙÙع٠ذÙÙ (Ctrl/Cmd+X).', + copyError : 'اÙإعدادات اÙØ£Ù ÙÙØ© ÙÙ٠تصÙØ Ø§Ùذ٠تستخد٠٠ت٠Ùع اÙÙسخ اÙتÙÙائÙ. ÙضÙا٠إستخد٠ÙÙØØ© اÙÙ ÙاتÙØ ÙÙع٠ذÙÙ (Ctrl/Cmd+C).', + pasteMsg : 'اÙص٠داخ٠اÙصÙدÙ٠بإستخدا٠زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) ÙÙ ÙÙØØ© اÙÙ ÙاتÙØØ Ø«Ù Ø§Ø¶ØºØ· زر <STRONG>Ù ÙاÙÙ</STRONG>.', + securityMsg : 'Ùظرا٠Ùإعدادات اÙأ٠ا٠اÙخاصة ب٠تصÙØÙØ ÙÙ Ùت٠ÙÙ Ùذا اÙÙ Øرر ٠٠اÙÙصÙÙ ÙÙ ØتÙÙ ØاÙظتÙØ ÙØ°ÙÙ Ùجب عÙÙÙ Ùص٠اÙÙ ØتÙ٠٠رة أخر٠ÙÙ Ùذ٠اÙÙاÙذة.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'Ùبد٠أ٠اÙÙص اÙ٠راد ÙصÙÙ Ù ÙسÙØ® ٠٠برÙا٠ج ÙÙرد. Ù٠تÙد تÙظÙÙÙ Ùب٠اÙشرÙع Ù٠ع٠ÙÙØ© اÙÙصÙØ', + toolbar : 'Ùص٠٠٠ÙÙرد', + title : 'Ùص٠٠٠ÙÙرد', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Ùص٠ÙÙص بسÙØ·', + title : 'Ùص٠ÙÙص بسÙØ·' + }, + + templates : + { + button : 'اÙÙÙاÙب', + title : 'ÙÙاÙب اÙÙ ØتÙÙ', + options : 'Template Options', // MISSING + insertOption : 'استبدا٠اÙÙ ØتÙÙ', + selectPromptMsg : 'اختر اÙÙاÙب اÙذ٠تÙد Ùضع٠Ù٠اÙÙ Øرر', + emptyListMsg : '(ÙÙ Ùت٠تعرÙ٠أ٠ÙاÙب)' + }, + + showBlocks : '٠خطط تÙصÙÙÙ', + + stylesCombo : + { + label : 'Ø£Ù٠اط', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Ø£Ù٠اط اÙÙÙرة', + panelTitle2 : 'Ø£Ù٠اط ٠ض٠ÙØ©', + panelTitle3 : 'Ø£Ù٠اط اÙÙائÙ' + }, + + format : + { + label : 'تÙسÙÙ', + panelTitle : 'تÙسÙ٠اÙÙÙرة', + + tag_p : 'عادÙ', + tag_pre : 'Ù ÙسÙÙ', + tag_address : 'عÙÙاÙ', + tag_h1 : 'اÙعÙÙا٠1', + tag_h2 : 'اÙعÙÙا٠2', + tag_h3 : 'اÙعÙÙا٠3', + tag_h4 : 'اÙعÙÙا٠4', + tag_h5 : 'اÙعÙÙا٠5', + tag_h6 : 'اÙعÙÙا٠6', + tag_div : 'عاد٠(DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'خط', + voiceLabel : 'Øج٠اÙخط', + panelTitle : 'Øج٠اÙخط' + }, + + fontSize : + { + label : 'Øج٠اÙخط', + voiceLabel : 'Øج٠اÙخط', + panelTitle : 'Øج٠اÙخط' + }, + + colorButton : + { + textColorTitle : 'ÙÙ٠اÙÙص', + bgColorTitle : 'ÙÙ٠اÙØ®ÙÙÙØ©', + panelTitle : 'Colors', // MISSING + auto : 'تÙÙائÙ', + more : 'Ø£ÙÙا٠إضاÙÙØ©...' + }, + + colors : + { + '000' : 'أسÙد', + '800000' : 'ÙستÙائÙ', + '8B4513' : 'بÙÙ ÙاتØ', + '2F4F4F' : 'ر٠اد٠أردÙاز٠غا٠Ù', + '008080' : 'أزر٠٠خضر', + '000080' : 'أزر٠داÙÙ', + '4B0082' : 'ÙØÙÙ', + '696969' : 'ر٠اد٠داÙÙ', + 'B22222' : 'Ø·ÙبÙ', + 'A52A2A' : 'بÙÙ', + 'DAA520' : 'Ø°Ùب٠داÙÙ', + '006400' : 'أخضر داÙÙ', + '40E0D0' : 'ÙÙرÙزÙ', + '0000CD' : 'أزر٠٠تÙسط', + '800080' : 'بÙÙسج٠غا٠Ù', + '808080' : 'ر٠ادÙ', + 'F00' : 'Ø£Ø٠ر', + 'FF8C00' : 'برتÙاÙ٠داÙÙ', + 'FFD700' : 'Ø°ÙبÙ', + '008000' : 'أخضر', + '0FF' : 'ترÙÙاز', + '00F' : 'أزرÙ', + 'EE82EE' : 'بÙÙسجÙ', + 'A9A9A9' : 'ر٠اد٠شاØب', + 'FFA07A' : 'برتÙاÙÙ ÙردÙ', + 'FFA500' : 'برتÙاÙÙ', + 'FFFF00' : 'أصÙر', + '00FF00' : 'ÙÙÙ ÙÙÙ', + 'AFEEEE' : 'ÙÙرÙز٠شاØب', + 'ADD8E6' : 'أزر٠ÙاتØ', + 'DDA0DD' : 'بÙÙسج٠ÙاتØ', + 'D3D3D3' : 'ر٠اد٠ÙاتØ', + 'FFF0F5' : 'Ùرد٠ÙاتØ', + 'FAEBD7' : 'أبÙض عتÙÙ', + 'FFFFE0' : 'أصÙر ÙاتØ', + 'F0FFF0' : 'أبÙض ٠ائ٠ÙÙأخضر', + 'F0FFFF' : 'س٠اÙÙ', + 'F0F8FF' : 'ÙبÙÙ', + 'E6E6FA' : 'أرجÙاÙÙ', + 'FFF' : 'أبÙض' + }, + + scayt : + { + title : 'تدÙÙ٠إ٠Ùائ٠أثÙاء اÙÙتابة', + opera_title : 'Not supported by Opera', // MISSING + enable : 'تÙعÙÙ SCAYT', + disable : 'تعطÙÙ SCAYT', + about : 'ع٠SCAYT', + toggle : 'تثبÙت SCAYT', + options : 'Ø®Ùارات', + langs : 'Ùغات', + moreSuggestions : 'اÙ٠زÙد ٠٠اÙÙ ÙترØات', + ignore : 'تجاÙÙ', + ignoreAll : 'تجاÙ٠اÙÙÙ', + addWord : 'إضاÙØ© ÙÙÙ Ø©', + emptyDic : 'اس٠اÙÙا٠Ùس Ùجب Ø£Ùا ÙÙÙÙ ÙارغاÙ.', + + optionsTab : 'Ø®Ùارات', + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Ùغات', + + dictionariesTab : 'ÙÙا٠Ùس', + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'عÙ' + }, + + about : + { + title : 'ع٠CKEditor', + dlgTitle : 'ع٠CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'ÙÙØصÙ٠عÙ٠٠عÙÙ٠ات اÙترخÙص Ø Ùرج٠زÙارة Ù ÙÙعÙا عÙ٠شبÙØ© اÙاÙترÙت:', + copy : 'ØÙÙ٠اÙÙشر © $1. ج٠Ùع اÙØÙÙÙ Ù ØÙÙظة.' + }, + + maximize : 'تÙبÙر', + minimize : 'تصغÙر', + + fakeobjects : + { + anchor : 'إرساء', + flash : 'رس٠٠تØر٠باÙÙÙاش', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Ùائ٠غÙر ٠عرÙÙ' + }, + + resize : 'اسØب ÙتغÙÙر اÙØج٠', + + colordialog : + { + title : 'اختر ÙÙÙ', + options : 'Color Options', // MISSING + highlight : 'Ø¥ÙÙاء اÙضÙØ¡', + selected : 'Ù Ùختار', + clear : '٠سØ' + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'خصائص اÙصÙØØ©', + title : 'خصائص اÙصÙØØ©', + design : 'Design', // MISSING + meta : 'اÙ٠عرÙÙات اÙرأسÙØ©', + chooseColor : 'اختر', + other : '<أخرÙ>', + docTitle : 'عÙÙا٠اÙصÙØØ©', + charset : 'تر٠Ùز اÙØرÙÙ', + charsetOther : 'تر٠Ùز آخر', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Ø£ÙرÙبا اÙÙسطÙ', + charsetCT : 'اÙصÙÙÙØ© اÙتÙÙÙدÙØ© (Big5)', + charsetCR : 'اÙسÙرÙÙÙØ©', + charsetGR : 'اÙÙÙÙاÙÙØ©', + charsetJP : 'اÙÙاباÙÙØ©', + charsetKR : 'اÙÙÙرÙØ©', + charsetTR : 'اÙترÙÙØ©', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Ø£ÙرÙبا اÙغربÙØ©', + docType : 'ترÙÙسة ÙÙع اÙصÙØØ©', + docTypeOther : 'ترÙÙسة ÙÙع صÙØØ© أخرÙ', + xhtmlDec : 'تض٠Ù٠إعÙاÙات Ùغة XHTMLÙ', + bgColor : 'ÙÙ٠اÙØ®ÙÙÙØ©', + bgImage : 'رابط اÙصÙرة اÙØ®ÙÙÙØ©', + bgFixed : 'جعÙÙا عÙا٠ة ٠ائÙØ©', + txtColor : 'ÙÙ٠اÙÙص', + margin : 'ÙÙا٠ش اÙصÙØØ©', + marginTop : 'عÙÙÙ', + marginLeft : 'Ø£Ùسر', + marginRight : 'Ø£ÙÙ Ù', + marginBottom : 'سÙÙÙ', + metaKeywords : 'اÙÙÙ٠ات اÙأساسÙØ© (Ù ÙصÙÙØ© بÙÙاصÙ)Ù', + metaDescription : 'Ùص٠اÙصÙØØ©', + metaAuthor : 'اÙÙاتب', + metaCopyright : 'اÙ٠اÙÙ', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/bg.js b/_source/lang/bg.js new file mode 100644 index 0000000..3f8c821 --- /dev/null +++ b/_source/lang/bg.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Bulgarian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['bg'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Ðод', + newPage : 'Ðова ÑÑÑаниÑа', + save : 'Ðапази', + preview : 'ÐÑедваÑиÑелен изглед', + cut : 'ÐзÑежи', + copy : 'ÐапамеÑи', + paste : 'ÐмÑкни', + print : 'ÐеÑаÑ', + underline : 'ÐодÑеÑÑан', + bold : 'Удебелен', + italic : 'ÐÑÑÑив', + selectAll : 'СелекÑиÑай вÑиÑко', + removeFormat : 'ÐзÑÑий ÑоÑмаÑиÑанеÑо', + strike : 'ÐаÑеÑÑан', + subscript : 'ÐÐ½Ð´ÐµÐºÑ Ð·Ð° база', + superscript : 'ÐÐ½Ð´ÐµÐºÑ Ð·Ð° ÑÑепен', + horizontalrule : 'ÐмÑкни Ñ Ð¾ÑизонÑална линиÑ', + pagebreak : 'ÐмÑкни нов Ñед', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'ÐзÑÑий вÑÑзка', + undo : 'ÐÑмени', + redo : 'ÐовÑоÑи', + + // Common messages and labels. + common : + { + browseServer : 'Разгледай ÑÑÑвÑÑа', + url : 'ÐÑлен пÑÑ (URL)', + protocol : 'ÐÑоÑокол', + upload : 'ÐаÑи', + uploadSubmit : 'ÐÑаÑи кÑм ÑÑÑвÑÑа', + image : 'ÐзобÑажение', + flash : 'Flash', + form : 'ФоÑмÑлÑÑ', + checkbox : 'Ðоле за оÑмеÑка', + radio : 'Ðоле за опÑиÑ', + textField : 'ТекÑÑово поле', + textarea : 'ТекÑÑова облаÑÑ', + hiddenField : 'СкÑиÑо поле', + button : 'ÐÑÑон', + select : 'ÐадаÑо Ð¼ÐµÐ½Ñ Ñ Ð¾Ð¿Ñии', + imageButton : 'ÐÑÑон-изобÑажение', + notSet : '<не е наÑÑÑоен>', + id : 'ÐденÑиÑикаÑоÑ', + name : 'Ðме', + langDir : 'поÑока на ÑеÑÑа', + langDirLtr : 'ÐÑ Ð»Ñво на дÑÑно', + langDirRtl : 'ÐÑ Ð´ÑÑно на лÑво', + langCode : 'Ðод на езика', + longDescr : 'ÐпиÑание на вÑÑзкаÑа', + cssClass : 'ÐÐ»Ð°Ñ Ð¾Ñ ÑÑиловиÑе ÑаблиÑи', + advisoryTitle : 'ÐÑепоÑÑÑиÑелно заглавие', + cssStyle : 'СÑил', + ok : 'ÐÐ', + cancel : 'ÐÑказ', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'ÐодÑобноÑÑи...', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'ШиÑина', + height : 'ÐиÑоÑина', + align : 'ÐодÑавнÑване', + alignLeft : 'ÐÑво', + alignRight : 'ÐÑÑно', + alignCenter : 'ЦенÑÑÑ', + alignTop : 'ÐÑгоÑе', + alignMiddle : 'Ðо ÑÑедаÑа', + alignBottom : 'ÐолÑ', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'ÐмÑкни ÑпеÑиален Ñимвол', + title : 'ÐзбеÑеÑе ÑпеÑиален Ñимвол', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Ðобави/РедакÑиÑай вÑÑзка', + other : '<дÑÑг>', + menu : 'РедакÑиÑай вÑÑзка', + title : 'ÐÑÑзка', + info : 'ÐнÑоÑмаÑÐ¸Ñ Ð·Ð° вÑÑзкаÑа', + target : 'Цел', + upload : 'ÐаÑи', + advanced : 'ÐодÑобноÑÑи...', + type : 'Ðид на вÑÑзкаÑа', + toUrl : 'URL', // MISSING + toAnchor : 'ÐоÑва в ÑекÑÑаÑа ÑÑÑаниÑа', + toEmail : 'Ð-поÑа', + targetFrame : '<Ñамка>', + targetPopup : '<дÑÑеÑен пÑозоÑеÑ>', + targetFrameName : 'Ðме на ÑÐµÐ»ÐµÐ²Ð¸Ñ Ð¿ÑозоÑеÑ', + targetPopupName : 'Ðме на дÑÑеÑÐ½Ð¸Ñ Ð¿ÑозоÑеÑ', + popupFeatures : 'ÐаÑамеÑÑи на дÑÑеÑÐ½Ð¸Ñ Ð¿ÑозоÑеÑ', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Ðоле за ÑÑаÑÑÑ', + popupLocationBar: 'Ðоле за адÑеÑ', + popupToolbar : 'Ðанел Ñ Ð±ÑÑони', + popupMenuBar : 'ÐенÑ', + popupFullScreen : 'ÐолÑм екÑан (MS IE)', + popupScrollBars : 'ÐлÑзгаÑ', + popupDependent : 'ÐавиÑим (Netscape)', + popupLeft : 'ÐооÑдинаÑи - X', + popupTop : 'ÐооÑдинаÑи - Y', + id : 'Id', // MISSING + langDir : 'поÑока на ÑеÑÑа', + langDirLTR : 'ÐÑ Ð»Ñво на дÑÑно', + langDirRTL : 'ÐÑ Ð´ÑÑно на лÑво', + acccessKey : 'ÐÑÑз клавиÑ', + name : 'Ðме', + langCode : 'поÑока на ÑеÑÑа', + tabIndex : 'Ред на доÑÑÑп', + advisoryTitle : 'ÐÑепоÑÑÑиÑелно заглавие', + advisoryContentType : 'ÐÑепоÑÑÑиÑелен Ñип на ÑÑдÑÑжаниеÑо', + cssClasses : 'ÐÐ»Ð°Ñ Ð¾Ñ ÑÑиловиÑе ÑаблиÑи', + charset : 'Тип на ÑвÑÑÐ·Ð°Ð½Ð¸Ñ ÑеÑÑÑÑ', + styles : 'СÑил', + rel : 'Relationship', // MISSING + selectAnchor : 'ÐзбеÑеÑе коÑва', + anchorName : 'Ðо име на коÑваÑа', + anchorId : 'Ðо иденÑиÑикаÑÐ¾Ñ Ð½Ð° елеменÑ', + emailAddress : 'ÐдÑÐµÑ Ð·Ð° е-поÑа', + emailSubject : 'Тема на пиÑмоÑо', + emailBody : 'ТекÑÑ Ð½Ð° пиÑмоÑо', + noAnchors : '(ÐÑма коÑви в ÑекÑÑÐ¸Ñ Ð´Ð¾ÐºÑменÑ)', + noUrl : 'ÐолÑ, напиÑеÑе пÑÐ»Ð½Ð¸Ñ Ð¿ÑÑ (URL)', + noEmail : 'ÐолÑ, напиÑеÑе адÑеÑа за е-поÑа' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Ðобави/РедакÑиÑай коÑва', + menu : 'ÐаÑамеÑÑи на коÑваÑа', + title : 'ÐаÑамеÑÑи на коÑваÑа', + name : 'Ðме на коÑваÑа', + errorName : 'ÐолÑ, вÑведеÑе име на коÑваÑа', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'ТÑÑÑи', + replace : 'ÐамеÑÑи', + findWhat : 'ТÑÑÑи:', + replaceWith : 'ÐамеÑÑи Ñ:', + notFoundMsg : 'Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑекÑÑ Ð½Ðµ беÑе намеÑен.', + matchCase : 'СÑÑ ÑÑÑÐ¸Ñ ÑегиÑÑÑÑ', + matchWord : 'ТÑÑÑи ÑÑÑаÑа дÑма', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'ÐамеÑÑи вÑиÑки', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'ТаблиÑа', + title : 'ÐаÑамеÑÑи на ÑаблиÑаÑа', + menu : 'ÐаÑамеÑÑи на ÑаблиÑаÑа', + deleteTable : 'ÐзÑÑий ÑаблиÑаÑа', + rows : 'Редове', + columns : 'Ðолони', + border : 'Ð Ð°Ð·Ð¼ÐµÑ Ð½Ð° ÑамкаÑа', + widthPx : 'пикÑели', + widthPc : 'пÑоÑенÑи', + widthUnit : 'width unit', // MISSING + cellSpace : 'РазÑÑоÑние Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»ÐµÑкиÑе', + cellPad : 'ÐÑÑÑÑп на ÑÑдÑÑжаниеÑо в клеÑкиÑе', + caption : 'Ðаглавие', + summary : 'РезÑме', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cell', // MISSING + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'ÐзÑÑий клеÑкиÑе', + merge : 'Ðбедини клеÑкиÑе', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', // MISSING + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'ÐзÑÑий ÑедовеÑе' + }, + + column : + { + menu : 'Column', // MISSING + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'ÐзÑÑий колониÑе' + } + }, + + // Button Dialog. + button : + { + title : 'ÐаÑамеÑÑи на бÑÑона', + text : 'ТекÑÑ (СÑойноÑÑ)', + type : 'Тип', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ÐаÑамеÑÑи на полеÑо за оÑмеÑка', + radioTitle : 'ÐаÑамеÑÑи на полеÑо за опÑиÑ', + value : 'СÑойноÑÑ', + selected : 'ÐÑмеÑнаÑо' + }, + + // Form Dialog. + form : + { + title : 'ÐаÑамеÑÑи на ÑоÑмÑлÑÑа', + menu : 'ÐаÑамеÑÑи на ÑоÑмÑлÑÑа', + action : 'ÐейÑÑвие', + method : 'ÐеÑод', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'ÐаÑамеÑÑи на падаÑоÑо Ð¼ÐµÐ½Ñ Ñ Ð¾Ð¿Ñии', + selectInfo : 'ÐнÑоÑмаÑиÑ', + opAvail : 'ÐÑзможни опÑии', + value : 'СÑойноÑÑ', + size : 'РазмеÑ', + lines : 'линии', + chkMulti : 'РазÑеÑено множеÑÑвено ÑелекÑиÑане', + opText : 'ТекÑÑ', + opValue : 'СÑойноÑÑ', + btnAdd : 'Ðобави', + btnModify : 'ÐÑомени', + btnUp : 'ÐагоÑе', + btnDown : 'ÐадолÑ', + btnSetValue : 'ÐаÑÑÑой каÑо избÑана ÑÑойноÑÑ', + btnDelete : 'ÐзÑÑий' + }, + + // Textarea Dialog. + textarea : + { + title : 'ÐаÑамеÑÑи на ÑекÑÑоваÑа облаÑÑ', + cols : 'Ðолони', + rows : 'Редове' + }, + + // Text Field Dialog. + textfield : + { + title : 'ÐаÑамеÑÑи на ÑекÑÑовоÑо-поле', + name : 'Ðме', + value : 'СÑойноÑÑ', + charWidth : 'ШиÑина на ÑимволиÑе', + maxChars : 'ÐакÑимÑм Ñимволи', + type : 'Тип', + typeText : 'ТекÑÑ', + typePass : 'ÐаÑола' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ÐаÑамеÑÑи на ÑкÑиÑоÑо поле', + name : 'Ðме', + value : 'СÑойноÑÑ' + }, + + // Image Dialog. + image : + { + title : 'ÐаÑамеÑÑи на изобÑажениеÑо', + titleButton : 'ÐаÑамеÑÑи на бÑÑона-изобÑажение', + menu : 'ÐаÑамеÑÑи на изобÑажениеÑо', + infoTab : 'ÐнÑоÑмаÑÐ¸Ñ Ð·Ð° изобÑажениеÑо', + btnUpload : 'ÐÑаÑи кÑм ÑÑÑвÑÑа', + upload : 'ÐаÑи', + alt : 'ÐлÑеÑнаÑивен ÑекÑÑ', + lockRatio : 'Ðапази пÑопоÑÑиÑÑа', + resetSize : 'ÐÑзÑÑанови ÑазмеÑа', + border : 'Рамка', + hSpace : 'ХоÑизонÑален оÑÑÑÑп', + vSpace : 'ÐеÑÑикален оÑÑÑÑп', + alertUrl : 'ÐолÑ, вÑведеÑе пÑÐ»Ð½Ð¸Ñ Ð¿ÑÑ Ð´Ð¾ изобÑажениеÑо', + linkTab : 'ÐÑÑзка', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'ÐаÑамеÑÑи на Flash обекÑа', + propertiesTab : 'Properties', // MISSING + title : 'ÐаÑамеÑÑи на Flash обекÑа', + chkPlay : 'ÐвÑомаÑиÑно ÑÑаÑÑиÑане', + chkLoop : 'Ðово ÑÑаÑÑиÑане Ñлед завÑÑÑванеÑо', + chkMenu : 'РазÑеÑено Flash менÑ', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'ÐÑазмеÑÑване', + scaleAll : 'Ðокажи ÑÐµÐ»Ð¸Ñ Ð¾Ð±ÐµÐºÑ', + scaleNoBorder : 'Ðез Ñамка', + scaleFit : 'СпоÑед мÑÑÑоÑо', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Ðай-долÑ', + alignAbsMiddle : 'ТоÑно по ÑÑедаÑа', + alignBaseline : 'Ðо базоваÑа линиÑ', + alignTextTop : 'ÐÑÑÑ Ñ ÑекÑÑа', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'ЦвÑÑ Ð½Ð° Ñона', + hSpace : 'ХоÑизонÑален оÑÑÑÑп', + vSpace : 'ÐеÑÑикален оÑÑÑÑп', + validateSrc : 'ÐолÑ, напиÑеÑе пÑÐ»Ð½Ð¸Ñ Ð¿ÑÑ (URL)', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'ÐÑовеÑи пÑавопиÑа', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'ÐипÑва в ÑеÑника', + changeTo : 'ÐÑомени на', + btnIgnore : 'ÐгноÑиÑай', + btnIgnoreAll : 'ÐгноÑиÑай вÑиÑки', + btnReplace : 'ÐамеÑÑи', + btnReplaceAll : 'ÐамеÑÑи вÑиÑки', + btnUndo : 'ÐÑмени', + noSuggestions : '- ÐÑма пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ -', + progress : 'ÐзвÑÑÑване на пÑовеÑкаÑа за пÑавопиÑ...', + noMispell : 'ÐÑовеÑкаÑа за пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑÑÑена: не Ñа оÑкÑиÑи пÑавопиÑни гÑеÑки', + noChanges : 'ÐÑовеÑкаÑа за пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑÑÑена: нÑма пÑоменени дÑми', + oneChange : 'ÐÑовеÑкаÑа за пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑÑÑена: една дÑма е пÑоменена', + manyChanges : 'ÐÑовеÑкаÑа за пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑÑÑена: %1 дÑми Ñа пÑоменени', + ieSpellDownload : 'ÐнÑÑÑÑменÑÑÑ Ð·Ð° пÑовеÑка на пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð½Ðµ е инÑÑалиÑан. ÐелаеÑе ли да го инÑÑалиÑаÑе ?' + }, + + smiley : + { + toolbar : 'УÑмивка', + title : 'Ðобави ÑÑмивка', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ÐÑмеÑиÑан ÑпиÑÑк', + bulletedlist : 'ÐенÑмеÑиÑан ÑпиÑÑк', + indent : 'УвелиÑи оÑÑÑÑпа', + outdent : 'Ðамали оÑÑÑÑпа', + + justify : + { + left : 'ÐодÑавнÑване в лÑво', + center : 'ÐодÑавнÑвне в ÑÑедаÑа', + right : 'ÐодÑавнÑване в дÑÑно', + block : 'ÐвÑÑÑÑанно подÑавнÑване' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'ÐмÑкни', + cutError : 'ÐаÑÑÑойкиÑе за ÑигÑÑноÑÑ Ð½Ð° ваÑÐ¸Ñ Ð±ÑазÑÑÑ Ð½Ðµ ÑазÑеÑÐ°Ð²Ð°Ñ Ð½Ð° ÑедакÑоÑа да изпÑлни изÑÑзванеÑо. Ðа ÑелÑа използвайÑе клавиаÑÑÑаÑа (Ctrl/Cmd+X).', + copyError : 'ÐаÑÑÑойкиÑе за ÑигÑÑноÑÑ Ð½Ð° ваÑÐ¸Ñ Ð±ÑазÑÑÑ Ð½Ðµ ÑазÑеÑÐ°Ð²Ð°Ñ Ð½Ð° ÑедакÑоÑа да изпÑлни запамеÑÑванеÑо. Ðа ÑелÑа използвайÑе клавиаÑÑÑаÑа (Ctrl/Cmd+C).', + pasteMsg : 'ÐмÑкнеÑе ÑÑк ÑÑдÑжаниеÑо Ñ ÐºÐ»Ð°Ð²Ð¸Ð°ÑÑаÑаÑа (<STRONG>Ctrl/Cmd+V</STRONG>) и наÑиÑнеÑе <STRONG>OK</STRONG>.', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'ÐмÑкни Ð¾Ñ MS Word', + title : 'ÐмÑкни Ð¾Ñ MS Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'ÐмÑкни каÑо ÑиÑÑ ÑекÑÑ', + title : 'ÐмÑкни каÑо ÑиÑÑ ÑекÑÑ' + }, + + templates : + { + button : 'Шаблони', + title : 'Шаблони', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'ÐзбеÑеÑе Ñаблон <br>(ÑекÑÑоÑо ÑÑдÑÑжание на ÑедакÑоÑа Ñе бÑде загÑбено):', + emptyListMsg : '(ÐÑма деÑиниÑани Ñаблони)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'СÑил', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'ФоÑмаÑ', + panelTitle : 'ФоÑмаÑ', + + tag_p : 'ÐоÑмален', + tag_pre : 'ФоÑмаÑиÑан', + tag_address : 'ÐдÑеÑ', + tag_h1 : 'Ðаглавие 1', + tag_h2 : 'Ðаглавие 2', + tag_h3 : 'Ðаглавие 3', + tag_h4 : 'Ðаглавие 4', + tag_h5 : 'Ðаглавие 5', + tag_h6 : 'Ðаглавие 6', + tag_div : 'ÐаÑагÑÐ°Ñ (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ШÑиÑÑ', + voiceLabel : 'Font', // MISSING + panelTitle : 'ШÑиÑÑ' + }, + + fontSize : + { + label : 'РазмеÑ', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'РазмеÑ' + }, + + colorButton : + { + textColorTitle : 'ЦвÑÑ Ð½Ð° ÑекÑÑа', + bgColorTitle : 'ЦвÑÑ Ð½Ð° Ñона', + panelTitle : 'Colors', // MISSING + auto : 'Ðо подÑазбиÑане', + more : 'ÐÑÑги ÑвеÑове...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'ÐаÑамеÑÑи на докÑменÑа', + title : 'ÐаÑамеÑÑи на докÑменÑа', + design : 'Design', // MISSING + meta : 'ÐеÑа данни', + chooseColor : 'Choose', // MISSING + other : '<дÑÑг>', + docTitle : 'Ðаглавие на ÑÑÑаниÑаÑа', + charset : 'ÐодиÑане на ÑимволиÑе', + charsetOther : 'ÐÑÑго кодиÑане на ÑимволиÑе', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Тип на докÑменÑа', + docTypeOther : 'ÐÑÑг Ñип на докÑменÑа', + xhtmlDec : 'ÐклÑÑи XHTML деклаÑаÑиÑ', + bgColor : 'ЦвÑÑ Ð½Ð° Ñона', + bgImage : 'ÐÑлен пÑÑ Ð´Ð¾ ÑоновоÑо изобÑажение', + bgFixed : 'Ðе-повÑаÑÑÑо Ñе Ñоново изобÑажение', + txtColor : 'ЦвÑÑ Ð½Ð° ÑекÑÑа', + margin : 'ÐÑÑÑÑпи на ÑÑÑаниÑаÑа', + marginTop : 'ÐоÑе', + marginLeft : 'ÐÑво', + marginRight : 'ÐÑÑно', + marginBottom : 'ÐолÑ', + metaKeywords : 'ÐлÑÑови дÑми за докÑменÑа (Ñазделени ÑÑÑ Ð·Ð°Ð¿ÐµÑаи)', + metaDescription : 'ÐпиÑание на докÑменÑа', + metaAuthor : 'ÐвÑоÑ', + metaCopyright : 'ÐвÑоÑÑки пÑава', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/bn.js b/_source/lang/bn.js new file mode 100644 index 0000000..a3454b5 --- /dev/null +++ b/_source/lang/bn.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Bengali/Bangla language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['bn'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'সà§à¦°à§à¦¸', + newPage : 'নতà§à¦¨ পà§à¦', + save : 'সà¦à¦°à¦à§à¦·à¦¨ à¦à¦°', + preview : 'পà§à¦°à¦¿à¦à¦¿à¦', + cut : 'à¦à¦¾à¦', + copy : 'à¦à¦ªà¦¿', + paste : 'পà§à¦¸à§à¦', + print : 'পà§à¦°à¦¿à¦¨à§à¦', + underline : 'à¦à¦¨à§à¦¡à¦¾à¦°à¦²à¦¾à¦à¦¨', + bold : 'বà§à¦²à§à¦¡', + italic : 'à¦à¦à¦¾à¦²à¦¿à¦', + selectAll : 'সব সিলà§à¦à§à¦ à¦à¦°', + removeFormat : 'ফরমà§à¦ সরাà¦', + strike : 'সà§à¦à§à¦°à¦¾à¦à¦ থà§à¦°à§', + subscript : 'ঠধà§à¦²à§à¦', + superscript : 'ঠà¦à¦¿à¦²à§à¦', + horizontalrule : 'রà§à¦à¦¾ যà§à¦à§à¦¤ à¦à¦°', + pagebreak : 'পà§à¦ বà§à¦°à§à¦', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'লিà¦à¦ সরাà¦', + undo : 'à¦à¦¨à¦¡à§', + redo : 'রি-ডà§', + + // Common messages and labels. + common : + { + browseServer : 'বà§à¦°à¦¾à¦à¦ সারà§à¦à¦¾à¦°', + url : 'URL', + protocol : 'পà§à¦°à§à¦à§à¦à¦²', + upload : 'à¦à¦ªà¦²à§à¦¡', + uploadSubmit : 'à¦à¦¹à¦¾à¦à§ সারà§à¦à¦¾à¦°à§ পà§à¦°à§à¦°à¦¨ à¦à¦°', + image : 'à¦à¦¬à¦¿à¦° লà§à¦¬à§à¦² যà§à¦à§à¦¤ à¦à¦°', + flash : 'ফà§à¦²à¦¾à¦¶ লà§à¦¬à§à¦² যà§à¦à§à¦¤ à¦à¦°', + form : 'ফরà§à¦®', + checkbox : 'à¦à§à¦ বাà¦à§à¦¸', + radio : 'রà§à¦¡à¦¿à¦ বাà¦à¦¨', + textField : 'à¦à§à¦à§à¦¸à¦ ফà§à¦²à§à¦¡', + textarea : 'à¦à§à¦à§à¦¸à¦ à¦à¦°à¦¿à§à¦¾', + hiddenField : 'à¦à§à¦ªà§à¦¤ ফà§à¦²à§à¦¡', + button : 'বাà¦à¦¨', + select : 'বাà¦à¦¾à¦ ফà§à¦²à§à¦¡', + imageButton : 'à¦à¦¬à¦¿à¦° বাà¦à¦¨', + notSet : '<সà§à¦ নà§à¦>', + id : 'à¦à¦à¦¡à¦¿', + name : 'নাম', + langDir : 'à¦à¦¾à¦·à¦¾ লà§à¦à¦¾à¦° দিà¦', + langDirLtr : 'বাম থà§à¦à§ ডান (LTR)', + langDirRtl : 'ডান থà§à¦à§ বাম (RTL)', + langCode : 'à¦à¦¾à¦·à¦¾ à¦à§à¦¡', + longDescr : 'URL à¦à¦° লমà§à¦¬à¦¾ বরà§à¦£à¦¨à¦¾', + cssClass : 'সà§à¦à¦¾à¦à¦²-শà§à¦ à¦à§à¦²à¦¾à¦¸', + advisoryTitle : 'পরামরà§à¦¶ শà§à¦°à§à¦·à¦', + cssStyle : 'সà§à¦à¦¾à¦à¦²', + ok : 'à¦à¦à§', + cancel : 'বাতিল', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'à¦à¦¡à¦à¦¾à¦¨à§à¦¸à¦¡', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'পà§à¦°à¦¸à§à¦¥', + height : 'দà§à¦°à§à¦à§à¦¯', + align : 'à¦à¦²à¦¾à¦à¦¨', + alignLeft : 'বামà§', + alignRight : 'ডানà§', + alignCenter : 'মাà¦à¦à¦¾à¦¨à§', + alignTop : 'à¦à¦ªà¦°', + alignMiddle : 'মধà§à¦¯', + alignBottom : 'নà§à¦à§', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'বিশà§à¦· ঠà¦à§à¦·à¦° যà§à¦à§à¦¤ à¦à¦°', + title : 'বিশà§à¦· à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦° বাà¦à¦¾à¦ à¦à¦°', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'লিà¦à¦ যà§à¦à§à¦¤ à¦à¦°', + other : '<other>', // MISSING + menu : 'লিà¦à¦ সমà§à¦ªà¦¾à¦¦à¦¨', + title : 'লিà¦à¦', + info : 'লিà¦à¦ তথà§à¦¯', + target : 'à¦à¦¾à¦°à§à¦à§à¦', + upload : 'à¦à¦ªà¦²à§à¦¡', + advanced : 'à¦à¦¡à¦à¦¾à¦¨à§à¦¸à¦¡', + type : 'লিà¦à¦ পà§à¦°à¦à¦¾à¦°', + toUrl : 'URL', // MISSING + toAnchor : 'à¦à¦ পà§à¦à§ নà§à¦à¦° à¦à¦°', + toEmail : 'à¦à¦®à§à¦à¦²', + targetFrame : '<ফà§à¦°à§à¦®>', + targetPopup : '<পপà¦à¦ª à¦à¦à¦¨à§à¦¡à§>', + targetFrameName : 'à¦à¦¾à¦°à§à¦à§à¦ ফà§à¦°à§à¦®à§à¦° নাম', + targetPopupName : 'পপà¦à¦ª à¦à¦à¦¨à§à¦¡à§à¦° নাম', + popupFeatures : 'পপà¦à¦ª à¦à¦à¦¨à§à¦¡à§ ফà§à¦à¦¾à¦° সমà§à¦¹', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'সà§à¦à§à¦¯à¦¾à¦à¦¾à¦¸ বার', + popupLocationBar: 'লà§à¦à§à¦¶à¦¨ বার', + popupToolbar : 'à¦à§à¦² বার', + popupMenuBar : 'মà§à¦¨à§à¦¯à§ বার', + popupFullScreen : 'পà§à¦°à§à¦£ পরà§à¦¦à¦¾ à¦à§à§à§ (IE)', + popupScrollBars : 'সà§à¦à§à¦°à¦² বার', + popupDependent : 'ডিপà§à¦¨à§à¦¡à§à¦¨à§à¦ (Netscape)', + popupLeft : 'বামà§à¦° পà¦à¦¿à¦¶à¦¨', + popupTop : 'ডানà§à¦° পà¦à¦¿à¦¶à¦¨', + id : 'Id', // MISSING + langDir : 'à¦à¦¾à¦·à¦¾ লà§à¦à¦¾à¦° দিà¦', + langDirLTR : 'বাম থà§à¦à§ ডান (LTR)', + langDirRTL : 'ডান থà§à¦à§ বাম (RTL)', + acccessKey : 'à¦à¦à§à¦¸à§à¦¸ à¦à§', + name : 'নাম', + langCode : 'à¦à¦¾à¦·à¦¾ লà§à¦à¦¾à¦° দিà¦', + tabIndex : 'à¦à§à¦¯à¦¾à¦¬ à¦à¦¨à§à¦¡à§à¦à§à¦¸', + advisoryTitle : 'পরামরà§à¦¶ শà§à¦°à§à¦·à¦', + advisoryContentType : 'পরামরà§à¦¶ à¦à¦¨à§à¦à§à¦¨à§à¦à§à¦° পà§à¦°à¦à¦¾à¦°', + cssClasses : 'সà§à¦à¦¾à¦à¦²-শà§à¦ à¦à§à¦²à¦¾à¦¸', + charset : 'লিà¦à¦ রিসà§à¦°à§à¦¸ à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦° সà§à¦', + styles : 'সà§à¦à¦¾à¦à¦²', + rel : 'Relationship', // MISSING + selectAnchor : 'নà§à¦à¦° বাà¦à¦¾à¦', + anchorName : 'নà§à¦à¦°à§à¦° নাম দিà§à§', + anchorId : 'নà§à¦à¦°à§à¦° à¦à¦à¦¡à¦¿ দিà§à§', + emailAddress : 'à¦à¦®à§à¦à¦² ঠিà¦à¦¾à¦¨à¦¾', + emailSubject : 'মà§à¦¸à§à¦à§à¦° বিষà§', + emailBody : 'মà§à¦¸à§à¦à§à¦° দà§à¦¹', + noAnchors : '(No anchors available in the document)', // MISSING + noUrl : 'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ URL লিà¦à¦ à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨', + noEmail : 'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦à¦®à§à¦à¦² à¦à¦¡à§à¦°à§à¦¸ à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨' + }, + + // Anchor dialog + anchor : + { + toolbar : 'নà§à¦à§à¦à¦°', + menu : 'নà§à¦à¦° পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + title : 'নà§à¦à¦° পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + name : 'নà§à¦à¦°à§à¦° নাম', + errorName : 'নà§à¦à¦°à§à¦° নাম à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'à¦à§à¦à§', + replace : 'রিপà§à¦²à§à¦¸', + findWhat : 'যা à¦à§à¦à¦à¦¤à§ হবà§:', + replaceWith : 'যার সাথৠবদলাতৠহবà§:', + notFoundMsg : 'à¦à¦ªà¦¨à¦¾à¦° à¦à¦²à§à¦²à§à¦à¦¿à¦¤ à¦à§à¦à¦¸à§à¦ পাà¦à§à¦¾ যাà§à¦¨à¦¿', + matchCase : 'à¦à§à¦¸ মিলাà¦', + matchWord : 'পà§à¦°à¦¾ শবà§à¦¦ মà§à¦²à¦¾à¦', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'সব বদলৠদাà¦', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'à¦à§à¦¬à¦¿à¦²à§à¦° লà§à¦¬à§à¦² যà§à¦à§à¦¤ à¦à¦°', + title : 'à¦à§à¦¬à¦¿à¦² পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + menu : 'à¦à§à¦¬à¦¿à¦² পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + deleteTable : 'à¦à§à¦¬à¦¿à¦² ডিলà§à¦ à¦à¦°', + rows : 'রà§', + columns : 'à¦à¦²à¦¾à¦®', + border : 'বরà§à¦¡à¦¾à¦° সাà¦à¦', + widthPx : 'পিà¦à§à¦¸à§à¦²', + widthPc : 'শতà¦à¦°à¦¾', + widthUnit : 'width unit', // MISSING + cellSpace : 'সà§à¦² সà§à¦ªà§à¦¸', + cellPad : 'সà§à¦² পà§à¦¯à¦¾à¦¡à¦¿à¦', + caption : 'শà§à¦°à§à¦·à¦', + summary : 'সারাà¦à¦¶', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'সà§à¦²', + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'সà§à¦² মà§à¦à§ দাà¦', + merge : 'সà§à¦² à¦à§à§à¦¾ দাà¦', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'রà§', + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'রৠমà§à¦à§ দাà¦' + }, + + column : + { + menu : 'à¦à¦²à¦¾à¦®', + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'à¦à¦²à¦¾à¦® মà§à¦à§ দাà¦' + } + }, + + // Button Dialog. + button : + { + title : 'বাà¦à¦¨ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + text : 'à¦à§à¦à§à¦¸à¦ (à¦à§à¦¯à¦¾à¦²à§)', + type : 'পà§à¦°à¦à¦¾à¦°', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'à¦à§à¦ বà¦à§à¦¸ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + radioTitle : 'রà§à¦¡à¦¿à¦ বাà¦à¦¨ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + value : 'à¦à§à¦¯à¦¾à¦²à§', + selected : 'সিলà§à¦à§à¦à§à¦¡' + }, + + // Form Dialog. + form : + { + title : 'ফরà§à¦® পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + menu : 'ফরà§à¦® পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + action : 'à¦à¦à¦¶à§à¦¯à¦¨', + method : 'পদà§à¦§à¦¤à¦¿', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'বাà¦à¦¾à¦ ফà§à¦²à§à¦¡ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + selectInfo : 'তথà§à¦¯', + opAvail : 'ঠনà§à¦¯à¦¾à¦¨à§à¦¯ বিà¦à¦²à§à¦ª', + value : 'à¦à§à¦¯à¦¾à¦²à§', + size : 'সাà¦à¦', + lines : 'লাà¦à¦¨ সমà§à¦¹', + chkMulti : 'à¦à¦à¦¾à¦§à¦¿à¦ সিলà§à¦à¦¶à¦¨ à¦à¦²à¦¾à¦ à¦à¦°', + opText : 'à¦à§à¦à§à¦¸à¦', + opValue : 'à¦à§à¦¯à¦¾à¦²à§', + btnAdd : 'যà§à¦à§à¦¤', + btnModify : 'বদলৠদাà¦', + btnUp : 'à¦à¦ªà¦°', + btnDown : 'নà§à¦à§', + btnSetValue : 'বাà¦à¦¾à¦ à¦à¦°à¦¾ à¦à§à¦¯à¦¾à¦²à§ হিসà§à¦¬à§ সà§à¦ à¦à¦°', + btnDelete : 'ডিলà§à¦' + }, + + // Textarea Dialog. + textarea : + { + title : 'à¦à§à¦à§à¦¸à¦ à¦à¦°à¦¿à§à¦¾ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + cols : 'à¦à¦²à¦¾à¦®', + rows : 'রà§' + }, + + // Text Field Dialog. + textfield : + { + title : 'à¦à§à¦à§à¦¸à¦ ফà§à¦²à§à¦¡ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + name : 'নাম', + value : 'à¦à§à¦¯à¦¾à¦²à§', + charWidth : 'à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦° পà§à¦°à¦¶à¦¸à§à¦¤à¦¤à¦¾', + maxChars : 'সরà§à¦¬à¦¾à¦§à¦¿à¦ à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦°', + type : 'à¦à¦¾à¦à¦ª', + typeText : 'à¦à§à¦à§à¦¸à¦', + typePass : 'পাসà¦à§à¦¾à¦°à§à¦¡' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'à¦à§à¦ªà§à¦¤ ফà§à¦²à§à¦¡ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + name : 'নাম', + value : 'à¦à§à¦¯à¦¾à¦²à§' + }, + + // Image Dialog. + image : + { + title : 'à¦à¦¬à¦¿à¦° পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + titleButton : 'à¦à¦¬à¦¿ বাà¦à¦¨ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + menu : 'à¦à¦¬à¦¿à¦° পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + infoTab : 'à¦à¦¬à¦¿à¦° তথà§à¦¯', + btnUpload : 'à¦à¦¹à¦¾à¦à§ সারà§à¦à¦¾à¦°à§ পà§à¦°à§à¦°à¦¨ à¦à¦°', + upload : 'à¦à¦ªà¦²à§à¦¡', + alt : 'বিà¦à¦²à§à¦ª à¦à§à¦à§à¦¸à¦', + lockRatio : 'ঠনà§à¦ªà¦¾à¦¤ লঠà¦à¦°', + resetSize : 'সাà¦à¦ পà§à¦°à§à¦¬à¦¾à¦¬à¦¸à§à¦¥à¦¾à§ ফিরিà§à§ দাà¦', + border : 'বরà§à¦¡à¦¾à¦°', + hSpace : 'হরাà¦à¦à¦¨à§à¦à¦¾à¦² সà§à¦ªà§à¦¸', + vSpace : 'à¦à¦¾à¦°à§à¦à¦¿à¦à§à¦² সà§à¦ªà§à¦¸', + alertUrl : 'ঠনà§à¦à§à¦°à¦¹à¦ à¦à¦°à§ à¦à¦¬à¦¿à¦° URL à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨', + linkTab : 'লিà¦à¦', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'ফà§à¦²à¦¾à¦¶ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + propertiesTab : 'Properties', // MISSING + title : 'ফà§à¦²à§à¦¯à¦¾à¦¶ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + chkPlay : 'ঠà¦à§ পà§à¦²à§', + chkLoop : 'লà§à¦ª', + chkMenu : 'ফà§à¦²à§à¦¯à¦¾à¦¶ মà§à¦¨à§ à¦à¦¨à¦¾à¦¬à¦² à¦à¦°', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'সà§à¦à§à¦²', + scaleAll : 'সব দà§à¦à¦¾à¦', + scaleNoBorder : 'à¦à§à¦¨à§ বরà§à¦¡à¦¾à¦° নà§à¦', + scaleFit : 'নিà¦à§à¦à¦¤ ফিà¦', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs নà§à¦à§', + alignAbsMiddle : 'Abs à¦à¦ªà¦°', + alignBaseline : 'মà§à¦² রà§à¦à¦¾', + alignTextTop : 'à¦à§à¦à§à¦¸à¦ à¦à¦ªà¦°', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'বà§à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡ রà¦', + hSpace : 'হরাà¦à¦à¦¨à§à¦à¦¾à¦² সà§à¦ªà§à¦¸', + vSpace : 'à¦à¦¾à¦°à§à¦à¦¿à¦à§à¦² সà§à¦ªà§à¦¸', + validateSrc : 'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ URL লিà¦à¦ à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'বানান à¦à§à¦', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'শবà§à¦¦à¦à§à¦·à§ নà§à¦', + changeTo : 'à¦à¦¤à§ বদলাà¦', + btnIgnore : 'à¦à¦à¦¨à§à¦° à¦à¦°', + btnIgnoreAll : 'সব à¦à¦à¦¨à§à¦° à¦à¦°', + btnReplace : 'বদলৠদাà¦', + btnReplaceAll : 'সব বদলৠদাà¦', + btnUndo : 'à¦à¦¨à§à¦¡à§', + noSuggestions : '- à¦à§à¦¨ সাà¦à§à¦¶à¦¨ নà§à¦ -', + progress : 'বানান পরà§à¦à§à¦·à¦¾ à¦à¦²à¦à§...', + noMispell : 'বানান পরà§à¦à§à¦·à¦¾ শà§à¦·: à¦à§à¦¨ à¦à§à¦² বানান পাà¦à§à¦¾ যাà§à¦¨à¦¿', + noChanges : 'বানান পরà§à¦à§à¦·à¦¾ শà§à¦·: à¦à§à¦¨ শবà§à¦¦ পরিবরà§à¦¤à¦¨ à¦à¦°à¦¾ হà§à¦¨à¦¿', + oneChange : 'বানান পরà§à¦à§à¦·à¦¾ শà§à¦·: à¦à¦à¦à¦¿ মাতà§à¦° শবà§à¦¦ পরিবরà§à¦¤à¦¨ à¦à¦°à¦¾ হà§à§à¦à§', + manyChanges : 'বানান পরà§à¦à§à¦·à¦¾ শà§à¦·: %1 à¦à§à¦²à§ শবà§à¦¦ বদলৠà¦à§à¦¯à¦¾à¦à§', + ieSpellDownload : 'বানান পরà§à¦à§à¦·à¦ à¦à¦¨à¦¸à§à¦à¦² à¦à¦°à¦¾ নà§à¦à¥¤ à¦à¦ªà¦¨à¦¿ à¦à¦¿ à¦à¦à¦¨à¦ à¦à¦à¦¾ ডাà¦à¦¨à¦²à§à¦¡ à¦à¦°à¦¤à§ à¦à¦¾à¦¨?' + }, + + smiley : + { + toolbar : 'সà§à¦®à¦¾à¦à¦²à§', + title : 'সà§à¦®à¦¾à¦à¦²à§ যà§à¦à§à¦¤ à¦à¦°', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'সাà¦à¦à§à¦¯à¦¿à¦ লিসà§à¦à§à¦° লà§à¦¬à§à¦²', + bulletedlist : 'বà§à¦²à§à¦ লিসà§à¦ লà§à¦¬à§à¦²', + indent : 'à¦à¦¨à¦¡à§à¦¨à§à¦ বাà§à¦¾à¦', + outdent : 'à¦à¦¨à¦¡à§à¦¨à§à¦ à¦à¦®à¦¾à¦', + + justify : + { + left : 'বা দিà¦à§ à¦à§à¦à¦·à¦¾', + center : 'মাঠবরাবর à¦à§à¦·à¦¾', + right : 'ডান দিà¦à§ à¦à§à¦à¦·à¦¾', + block : 'বà§à¦²à¦ à¦à¦¾à¦¸à§à¦à¦¿à¦«à¦¾à¦' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'পà§à¦¸à§à¦', + cutError : 'à¦à¦ªà¦¨à¦¾à¦° বà§à¦°à¦¾à¦à¦à¦¾à¦°à§à¦° সà§à¦°à¦à§à¦·à¦¾ সà§à¦à¦¿à¦à¦¸ à¦à¦¡à¦¿à¦à¦°à¦à§ ঠà¦à§à¦®à§à¦à¦¿à¦ à¦à¦¾à¦ à¦à¦°à¦¾à¦° ঠনà§à¦®à¦¤à¦¿ দà§à§à¦¨à¦¿à¥¤ দà§à¦¾ à¦à¦°à§ à¦à¦ à¦à¦¾à¦à§à¦° à¦à¦¨à§à¦¯ à¦à¦¿à¦¬à§à¦°à§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à§à¦¨ (Ctrl/Cmd+X)।', + copyError : 'à¦à¦ªà¦¨à¦¾à¦° বà§à¦°à¦¾à¦à¦à¦¾à¦°à§à¦° সà§à¦°à¦à§à¦·à¦¾ সà§à¦à¦¿à¦à¦¸ à¦à¦¡à¦¿à¦à¦°à¦à§ ঠà¦à§à¦®à§à¦à¦¿à¦ à¦à¦ªà¦¿ à¦à¦°à¦¾à¦° ঠনà§à¦®à¦¤à¦¿ দà§à§à¦¨à¦¿à¥¤ দà§à¦¾ à¦à¦°à§ à¦à¦ à¦à¦¾à¦à§à¦° à¦à¦¨à§à¦¯ à¦à¦¿à¦¬à§à¦°à§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à§à¦¨ (Ctrl/Cmd+C)।', + pasteMsg : 'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ নà§à¦à§à¦° বাà¦à§à¦¸à§ à¦à¦¿à¦¬à§à¦°à§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à§ (<STRONG>Ctrl/Cmd+V</STRONG>) পà§à¦¸à§à¦ à¦à¦°à§à¦¨ à¦à¦¬à¦ <STRONG>OK</STRONG> à¦à¦¾à¦ª দিন', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'পà§à¦¸à§à¦ (শবà§à¦¦)', + title : 'পà§à¦¸à§à¦ (শবà§à¦¦)', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'সাদা à¦à§à¦à§à¦¸à¦ হিসà§à¦¬à§ পà§à¦¸à§à¦ à¦à¦°', + title : 'সাদা à¦à§à¦à§à¦¸à¦ হিসà§à¦¬à§ পà§à¦¸à§à¦ à¦à¦°' + }, + + templates : + { + button : 'à¦à§à¦®à¦ªà§à¦²à§à¦', + title : 'à¦à¦¨à¦à§à¦¨à§à¦ à¦à§à¦®à¦ªà§à¦²à§à¦', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦à¦¡à¦¿à¦à¦°à§ à¦à¦ªà§à¦¨ à¦à¦°à¦¾à¦° à¦à¦¨à§à¦¯ à¦à§à¦®à¦ªà§à¦²à§à¦ বাà¦à¦¾à¦ à¦à¦°à§à¦¨<br>(à¦à¦¸à¦² à¦à¦¨à¦à§à¦¨à§à¦ হারিà§à§ যাবà§):', + emptyListMsg : '(à¦à§à¦¨ à¦à§à¦®à¦ªà§à¦²à§à¦ ডিফাà¦à¦¨ à¦à¦°à¦¾ নà§à¦)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'সà§à¦à¦¾à¦à¦²', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'ফনà§à¦ ফরমà§à¦', + panelTitle : 'ফনà§à¦ ফরমà§à¦', + + tag_p : 'সাধারণ', + tag_pre : 'ফরà§à¦®à§à¦à§à¦¡', + tag_address : 'ঠিà¦à¦¾à¦¨à¦¾', + tag_h1 : 'শà§à¦°à§à¦·à¦ ১', + tag_h2 : 'শà§à¦°à§à¦·à¦ ২', + tag_h3 : 'শà§à¦°à§à¦·à¦ ৩', + tag_h4 : 'শà§à¦°à§à¦·à¦ ৪', + tag_h5 : 'শà§à¦°à§à¦·à¦ ৫', + tag_h6 : 'শà§à¦°à§à¦·à¦ ৬', + tag_div : 'শà§à¦°à§à¦·à¦ (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ফনà§à¦', + voiceLabel : 'Font', // MISSING + panelTitle : 'ফনà§à¦' + }, + + fontSize : + { + label : 'সাà¦à¦', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'সাà¦à¦' + }, + + colorButton : + { + textColorTitle : 'à¦à§à¦à§à¦¸à§à¦ রà¦', + bgColorTitle : 'বà§à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡ রà¦', + panelTitle : 'Colors', // MISSING + auto : 'ঠà¦à§à¦®à§à¦à¦¿à¦', + more : 'à¦à¦°à¦ রà¦...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + title : 'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿', + design : 'Design', // MISSING + meta : 'মà§à¦à¦¾à¦¡à§à¦à¦¾', + chooseColor : 'Choose', // MISSING + other : '<other>', + docTitle : 'পà§à¦ শà§à¦°à§à¦·à¦', + charset : 'à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦° সà§à¦ à¦à¦¨à¦à§à¦¡à¦¿à¦', + charsetOther : 'ঠনà§à¦¯ à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦° সà§à¦ à¦à¦¨à¦à§à¦¡à¦¿à¦', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ à¦à¦¾à¦à¦ª হà§à¦¡à¦¿à¦', + docTypeOther : 'ঠনà§à¦¯ ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ à¦à¦¾à¦à¦ª হà§à¦¡à¦¿à¦', + xhtmlDec : 'XHTML ডà§à¦à§à¦²à¦¾à¦°à§à¦¶à¦¨ যà§à¦à§à¦¤ à¦à¦°', + bgColor : 'বà§à¦¯à¦¾à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡ রà¦', + bgImage : 'বà§à¦¯à¦¾à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡ à¦à¦¬à¦¿à¦° URL', + bgFixed : 'সà§à¦à§à¦°à¦²à¦¹à§à¦¨ বà§à¦¯à¦¾à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡', + txtColor : 'à¦à§à¦à§à¦¸à§à¦ রà¦', + margin : 'পà§à¦ মারà§à¦à¦¿à¦¨', + marginTop : 'à¦à¦ªà¦°', + marginLeft : 'বামà§', + marginRight : 'ডানà§', + marginBottom : 'নà§à¦à§', + metaKeywords : 'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ à¦à¦¿à¦à§à¦¾à¦°à§à¦¡ (à¦à¦®à¦¾ দà§à¦¬à¦¾à¦°à¦¾ বিà¦à§à¦à¦¿à¦¨à§à¦¨)', + metaDescription : 'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ বরà§à¦£à¦¨à¦¾', + metaAuthor : 'লà§à¦à¦', + metaCopyright : 'à¦à¦ªà§à¦°à¦¾à¦à¦', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/bs.js b/_source/lang/bs.js new file mode 100644 index 0000000..67019ff --- /dev/null +++ b/_source/lang/bs.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Bosnian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['bs'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'HTML kôd', + newPage : 'Novi dokument', + save : 'Snimi', + preview : 'Prikaži', + cut : 'Izreži', + copy : 'Kopiraj', + paste : 'Zalijepi', + print : 'Å tampaj', + underline : 'Podvuci', + bold : 'Boldiraj', + italic : 'Ukosi', + selectAll : 'Selektuj sve', + removeFormat : 'PoniÅ¡ti format', + strike : 'Precrtaj', + subscript : 'Subscript', + superscript : 'Superscript', + horizontalrule : 'Ubaci horizontalnu liniju', + pagebreak : 'Insert Page Break for Printing', // MISSING + pagebreakAlt : 'Page Break', // MISSING + unlink : 'IzbriÅ¡i link', + undo : 'Vrati', + redo : 'Ponovi', + + // Common messages and labels. + common : + { + browseServer : 'Browse Server', // MISSING + url : 'URL', + protocol : 'Protokol', + upload : 'Å alji', + uploadSubmit : 'Å alji na server', + image : 'Slika', + flash : 'Flash', // MISSING + form : 'Form', // MISSING + checkbox : 'Checkbox', // MISSING + radio : 'Radio Button', // MISSING + textField : 'Text Field', // MISSING + textarea : 'Textarea', // MISSING + hiddenField : 'Hidden Field', // MISSING + button : 'Button', // MISSING + select : 'Selection Field', // MISSING + imageButton : 'Image Button', // MISSING + notSet : '<nije podeÅ¡eno>', + id : 'Id', + name : 'Naziv', + langDir : 'Smjer pisanja', + langDirLtr : 'S lijeva na desno (LTR)', + langDirRtl : 'S desna na lijevo (RTL)', + langCode : 'Jezièni kôd', + longDescr : 'Dugaèki opis URL-a', + cssClass : 'Klase CSS stilova', + advisoryTitle : 'Advisory title', + cssStyle : 'Stil', + ok : 'OK', + cancel : 'Odustani', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Naprednije', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Å irina', + height : 'Visina', + align : 'Poravnanje', + alignLeft : 'Lijevo', + alignRight : 'Desno', + alignCenter : 'Centar', + alignTop : 'Vrh', + alignMiddle : 'Sredina', + alignBottom : 'Dno', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Ubaci specijalni karater', + title : 'Izaberi specijalni karakter', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Ubaci/Izmjeni link', + other : '<other>', // MISSING + menu : 'Izmjeni link', + title : 'Link', + info : 'Link info', + target : 'Prozor', + upload : 'Å alji', + advanced : 'Naprednije', + type : 'Tip linka', + toUrl : 'URL', // MISSING + toAnchor : 'Sidro na ovoj stranici', + toEmail : 'E-Mail', + targetFrame : '<frejm>', + targetPopup : '<popup prozor>', + targetFrameName : 'Target Frame Name', // MISSING + targetPopupName : 'Naziv popup prozora', + popupFeatures : 'Moguænosti popup prozora', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Statusna traka', + popupLocationBar: 'Traka za lokaciju', + popupToolbar : 'Traka sa alatima', + popupMenuBar : 'Izborna traka', + popupFullScreen : 'Cijeli ekran (IE)', + popupScrollBars : 'Scroll traka', + popupDependent : 'Ovisno (Netscape)', + popupLeft : 'Lijeva pozicija', + popupTop : 'Gornja pozicija', + id : 'Id', // MISSING + langDir : 'Smjer pisanja', + langDirLTR : 'S lijeva na desno (LTR)', + langDirRTL : 'S desna na lijevo (RTL)', + acccessKey : 'Pristupna tipka', + name : 'Naziv', + langCode : 'Smjer pisanja', + tabIndex : 'Tab indeks', + advisoryTitle : 'Advisory title', + advisoryContentType : 'Advisory vrsta sadržaja', + cssClasses : 'Klase CSS stilova', + charset : 'Linked Resource Charset', + styles : 'Stil', + rel : 'Relationship', // MISSING + selectAnchor : 'Izaberi sidro', + anchorName : 'Po nazivu sidra', + anchorId : 'Po Id-u elementa', + emailAddress : 'E-Mail Adresa', + emailSubject : 'Subjekt poruke', + emailBody : 'Poruka', + noAnchors : '(Nema dostupnih sidra na stranici)', + noUrl : 'Molimo ukucajte URL link', + noEmail : 'Molimo ukucajte e-mail adresu' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Anchor', // MISSING + menu : 'Edit Anchor', // MISSING + title : 'Anchor Properties', // MISSING + name : 'Anchor Name', // MISSING + errorName : 'Please type the anchor name', // MISSING + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'Naði', + replace : 'Zamjeni', + findWhat : 'Naði Å¡ta:', + replaceWith : 'Zamjeni sa:', + notFoundMsg : 'Traženi tekst nije pronaðen.', + matchCase : 'Uporeðuj velika/mala slova', + matchWord : 'Uporeðuj samo cijelu rijeè', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Zamjeni sve', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tabela', + title : 'Svojstva tabele', + menu : 'Svojstva tabele', + deleteTable : 'Delete Table', // MISSING + rows : 'Redova', + columns : 'Kolona', + border : 'Okvir', + widthPx : 'piksela', + widthPc : 'posto', + widthUnit : 'width unit', // MISSING + cellSpace : 'Razmak æelija', + cellPad : 'Uvod æelija', + caption : 'Naslov', + summary : 'Summary', // MISSING + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cell', // MISSING + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'BriÅ¡i æelije', + merge : 'Spoji æelije', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', // MISSING + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'BriÅ¡i redove' + }, + + column : + { + menu : 'Column', // MISSING + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'BriÅ¡i kolone' + } + }, + + // Button Dialog. + button : + { + title : 'Button Properties', // MISSING + text : 'Text (Value)', // MISSING + type : 'Type', // MISSING + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Checkbox Properties', // MISSING + radioTitle : 'Radio Button Properties', // MISSING + value : 'Value', // MISSING + selected : 'Selected' // MISSING + }, + + // Form Dialog. + form : + { + title : 'Form Properties', // MISSING + menu : 'Form Properties', // MISSING + action : 'Action', // MISSING + method : 'Method', // MISSING + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Selection Field Properties', // MISSING + selectInfo : 'Select Info', // MISSING + opAvail : 'Available Options', // MISSING + value : 'Value', // MISSING + size : 'Size', // MISSING + lines : 'lines', // MISSING + chkMulti : 'Allow multiple selections', // MISSING + opText : 'Text', // MISSING + opValue : 'Value', // MISSING + btnAdd : 'Add', // MISSING + btnModify : 'Modify', // MISSING + btnUp : 'Up', // MISSING + btnDown : 'Down', // MISSING + btnSetValue : 'Set as selected value', // MISSING + btnDelete : 'Delete' // MISSING + }, + + // Textarea Dialog. + textarea : + { + title : 'Textarea Properties', // MISSING + cols : 'Columns', // MISSING + rows : 'Rows' // MISSING + }, + + // Text Field Dialog. + textfield : + { + title : 'Text Field Properties', // MISSING + name : 'Name', // MISSING + value : 'Value', // MISSING + charWidth : 'Character Width', // MISSING + maxChars : 'Maximum Characters', // MISSING + type : 'Type', // MISSING + typeText : 'Text', // MISSING + typePass : 'Password' // MISSING + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Hidden Field Properties', // MISSING + name : 'Name', // MISSING + value : 'Value' // MISSING + }, + + // Image Dialog. + image : + { + title : 'Svojstva slike', + titleButton : 'Image Button Properties', // MISSING + menu : 'Svojstva slike', + infoTab : 'Info slike', + btnUpload : 'Å alji na server', + upload : 'Å alji', + alt : 'Tekst na slici', + lockRatio : 'Zakljuèaj odnos', + resetSize : 'Resetuj dimenzije', + border : 'Okvir', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Molimo ukucajte URL od slike.', + linkTab : 'Link', // MISSING + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash Properties', // MISSING + propertiesTab : 'Properties', // MISSING + title : 'Flash Properties', // MISSING + chkPlay : 'Auto Play', // MISSING + chkLoop : 'Loop', // MISSING + chkMenu : 'Enable Flash Menu', // MISSING + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Scale', // MISSING + scaleAll : 'Show all', // MISSING + scaleNoBorder : 'No Border', // MISSING + scaleFit : 'Exact Fit', // MISSING + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs dole', + alignAbsMiddle : 'Abs sredina', + alignBaseline : 'Bazno', + alignTextTop : 'Vrh teksta', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Boja pozadine', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'Molimo ukucajte URL link', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Check Spelling', // MISSING + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Not in dictionary', // MISSING + changeTo : 'Change to', // MISSING + btnIgnore : 'Ignore', // MISSING + btnIgnoreAll : 'Ignore All', // MISSING + btnReplace : 'Replace', // MISSING + btnReplaceAll : 'Replace All', // MISSING + btnUndo : 'Undo', // MISSING + noSuggestions : '- No suggestions -', // MISSING + progress : 'Spell check in progress...', // MISSING + noMispell : 'Spell check complete: No misspellings found', // MISSING + noChanges : 'Spell check complete: No words changed', // MISSING + oneChange : 'Spell check complete: One word changed', // MISSING + manyChanges : 'Spell check complete: %1 words changed', // MISSING + ieSpellDownload : 'Spell checker not installed. Do you want to download it now?' // MISSING + }, + + smiley : + { + toolbar : 'SmjeÅ¡ko', + title : 'Ubaci smjeÅ¡ka', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Numerisana lista', + bulletedlist : 'Lista', + indent : 'Poveæaj uvod', + outdent : 'Smanji uvod', + + justify : + { + left : 'Lijevo poravnanje', + center : 'Centralno poravnanje', + right : 'Desno poravnanje', + block : 'Puno poravnanje' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'Zalijepi', + cutError : 'Sigurnosne postavke vaÅ¡eg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).', + copyError : 'Sigurnosne postavke VaÅ¡eg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).', + pasteMsg : 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', // MISSING + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Zalijepi iz Word-a', + title : 'Zalijepi iz Word-a', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Zalijepi kao obièan tekst', + title : 'Zalijepi kao obièan tekst' + }, + + templates : + { + button : 'Templates', // MISSING + title : 'Content Templates', // MISSING + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'Please select the template to open in the editor', // MISSING + emptyListMsg : '(No templates defined)' // MISSING + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'Stil', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Format', + panelTitle : 'Format', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' // MISSING + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', // MISSING + panelTitle : 'Font' + }, + + fontSize : + { + label : 'Velièina', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Velièina' + }, + + colorButton : + { + textColorTitle : 'Boja teksta', + bgColorTitle : 'Boja pozadine', + panelTitle : 'Colors', // MISSING + auto : 'Automatska', + more : 'ViÅ¡e boja...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Document Properties', // MISSING + title : 'Document Properties', // MISSING + design : 'Design', // MISSING + meta : 'Meta Tags', // MISSING + chooseColor : 'Choose', // MISSING + other : 'Other...', // MISSING + docTitle : 'Page Title', // MISSING + charset : 'Character Set Encoding', // MISSING + charsetOther : 'Other Character Set Encoding', // MISSING + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Document Type Heading', // MISSING + docTypeOther : 'Other Document Type Heading', // MISSING + xhtmlDec : 'Include XHTML Declarations', // MISSING + bgColor : 'Background Color', // MISSING + bgImage : 'Background Image URL', // MISSING + bgFixed : 'Non-scrolling (Fixed) Background', // MISSING + txtColor : 'Text Color', // MISSING + margin : 'Page Margins', // MISSING + marginTop : 'Top', // MISSING + marginLeft : 'Left', // MISSING + marginRight : 'Right', // MISSING + marginBottom : 'Bottom', // MISSING + metaKeywords : 'Document Indexing Keywords (comma separated)', // MISSING + metaDescription : 'Document Description', // MISSING + metaAuthor : 'Author', // MISSING + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/ca.js b/_source/lang/ca.js new file mode 100644 index 0000000..88ce2a7 --- /dev/null +++ b/_source/lang/ca.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Catalan language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['ca'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Editor de text enriquit, %1, prem ALT 0 per obtenir ajuda.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Editor de text enriquit', + + // Toolbar buttons without dialogs. + source : 'Codi font', + newPage : 'Nova pà gina', + save : 'Desa', + preview : 'Visualització prèvia', + cut : 'Retalla', + copy : 'Copia', + paste : 'Enganxa', + print : 'Imprimeix', + underline : 'Subratllat', + bold : 'Negreta', + italic : 'Cursiva', + selectAll : 'Selecciona-ho tot', + removeFormat : 'Elimina Format', + strike : 'Barrat', + subscript : 'SubÃndex', + superscript : 'SuperÃndex', + horizontalrule : 'Insereix lÃnia horitzontal', + pagebreak : 'Insereix salt de pà gina', + pagebreakAlt : 'Salt de pà gina', + unlink : 'Elimina l\'enllaç', + undo : 'Desfés', + redo : 'Refés', + + // Common messages and labels. + common : + { + browseServer : 'Veure servidor', + url : 'URL', + protocol : 'Protocol', + upload : 'Puja', + uploadSubmit : 'Envia-la al servidor', + image : 'Imatge', + flash : 'Flash', + form : 'Formulari', + checkbox : 'Casella de verificació', + radio : 'Botó d\'opció', + textField : 'Camp de text', + textarea : 'Ãrea de text', + hiddenField : 'Camp ocult', + button : 'Botó', + select : 'Camp de selecció', + imageButton : 'Botó d\'imatge', + notSet : '<no definit>', + id : 'Id', + name : 'Nom', + langDir : 'Direcció de l\'idioma', + langDirLtr : 'D\'esquerra a dreta (LTR)', + langDirRtl : 'De dreta a esquerra (RTL)', + langCode : 'Codi d\'idioma', + longDescr : 'Descripció llarga de la URL', + cssClass : 'Classes del full d\'estil', + advisoryTitle : 'TÃtol consultiu', + cssStyle : 'Estil', + ok : 'D\'acord', + cancel : 'Cancel·la', + close : 'Tanca', + preview : 'Previsualitza', + generalTab : 'General', + advancedTab : 'Avançat', + validateNumberFailed : 'Aquest valor no és un número.', + confirmNewPage : 'Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pà gina nova?', + confirmCancel : 'Algunes opcions s\'han canviat. Esteu segur que voleu tancar la finestra de dià leg?', + options : 'Opcions', + target : 'DestÃ', + targetNew : 'Nova finestra (_blank)', + targetTop : 'Finestra major (_top)', + targetSelf : 'Mateixa finestra (_self)', + targetParent : 'Finestra pare (_parent)', + langDirLTR : 'D\'esquerra a dreta (LTR)', + langDirRTL : 'De dreta a esquerra (RTL)', + styles : 'Estil', + cssClasses : 'Classes del full d\'estil', + width : 'Amplada', + height : 'Alçada', + align : 'Alineació', + alignLeft : 'Ajusta a l\'esquerra', + alignRight : 'Ajusta a la dreta', + alignCenter : 'Centre', + alignTop : 'Superior', + alignMiddle : 'Centre', + alignBottom : 'Inferior', + invalidHeight : 'L\'alçada ha de ser un nombre.', + invalidWidth : 'L\'amplada ha de ser un nombre.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, no disponible</span>' + }, + + contextmenu : + { + options : 'Opcions del menú contextual' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Insereix carà cter especial', + title : 'Selecciona el carà cter especial', + options : 'Opcions de carà cters especials' + }, + + // Link dialog. + link : + { + toolbar : 'Insereix/Edita enllaç', + other : '<altre>', + menu : 'Edita l\'enllaç', + title : 'Enllaç', + info : 'Informació de l\'enllaç', + target : 'DestÃ', + upload : 'Puja', + advanced : 'Avançat', + type : 'Tipus d\'enllaç', + toUrl : 'URL', + toAnchor : 'Ãncora en aquesta pà gina', + toEmail : 'Correu electrònic', + targetFrame : '<marc>', + targetPopup : '<finestra emergent>', + targetFrameName : 'Nom del marc de destÃ', + targetPopupName : 'Nom finestra popup', + popupFeatures : 'CaracterÃstiques finestra popup', + popupResizable : 'Redimensionable', + popupStatusBar : 'Barra d\'estat', + popupLocationBar: 'Barra d\'adreça', + popupToolbar : 'Barra d\'eines', + popupMenuBar : 'Barra de menú', + popupFullScreen : 'Pantalla completa (IE)', + popupScrollBars : 'Barres d\'scroll', + popupDependent : 'Depenent (Netscape)', + popupLeft : 'Posició esquerra', + popupTop : 'Posició dalt', + id : 'Id', + langDir : 'Direcció de l\'idioma', + langDirLTR : 'D\'esquerra a dreta (LTR)', + langDirRTL : 'De dreta a esquerra (RTL)', + acccessKey : 'Clau d\'accés', + name : 'Nom', + langCode : 'Direcció de l\'idioma', + tabIndex : 'Index de Tab', + advisoryTitle : 'TÃtol consultiu', + advisoryContentType : 'Tipus de contingut consultiu', + cssClasses : 'Classes del full d\'estil', + charset : 'Conjunt de carà cters font enllaçat', + styles : 'Estil', + rel : 'Relationship', // MISSING + selectAnchor : 'Selecciona una à ncora', + anchorName : 'Per nom d\'à ncora', + anchorId : 'Per Id d\'element', + emailAddress : 'Adreça de correu electrònic', + emailSubject : 'Assumpte del missatge', + emailBody : 'Cos del missatge', + noAnchors : '(No hi ha à ncores disponibles en aquest document)', + noUrl : 'Si us plau, escrigui l\'enllaç URL', + noEmail : 'Si us plau, escrigui l\'adreça correu electrònic' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Insereix/Edita à ncora', + menu : 'Propietats de l\'à ncora', + title : 'Propietats de l\'à ncora', + name : 'Nom de l\'à ncora', + errorName : 'Si us plau, escriviu el nom de l\'ancora', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', + bulletedTitle : 'Bulleted List Properties', + type : 'Type', + start : 'Start', + validateStartNumber :'List start number must be a whole number.', + circle : 'Circle', + disc : 'Disc', + square : 'Square', + none : 'None', + notset : '<not set>', + armenian : 'Armenian numbering', + georgian : 'Georgian numbering (an, ban, gan, etc.)', + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', + decimal : 'Decimal (1, 2, 3, etc.)', + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Cerca i reemplaça', + find : 'Cerca', + replace : 'Reemplaça', + findWhat : 'Cerca:', + replaceWith : 'Remplaça amb:', + notFoundMsg : 'El text especificat no s\'ha trobat.', + matchCase : 'Distingeix majúscules/minúscules', + matchWord : 'Només paraules completes', + matchCyclic : 'Match cyclic', + replaceAll : 'Reemplaça-ho tot', + replaceSuccessMsg : '%1 ocurrència/es reemplaçada/es.' + }, + + // Table Dialog + table : + { + toolbar : 'Taula', + title : 'Propietats de la taula', + menu : 'Propietats de la taula', + deleteTable : 'Suprimeix la taula', + rows : 'Files', + columns : 'Columnes', + border : 'Mida vora', + widthPx : 'pÃxels', + widthPc : 'percentatge', + widthUnit : 'unitat d\'amplada', + cellSpace : 'Espaiat de cel·les', + cellPad : 'Encoixinament de cel·les', + caption : 'TÃtol', + summary : 'Resum', + headers : 'Capçaleres', + headersNone : 'Cap', + headersColumn : 'Primera columna', + headersRow : 'Primera fila', + headersBoth : 'Ambdues', + invalidRows : 'El nombre de files ha de ser un nombre major que 0.', + invalidCols : 'El nombre de columnes ha de ser un nombre major que 0.', + invalidBorder : 'El gruix de la vora ha de ser un nombre.', + invalidWidth : 'L\'amplada de la taula ha de ser un nombre.', + invalidHeight : 'L\'alçada de la taula ha de ser un nombre.', + invalidCellSpacing : 'L\'espaiat de cel·la ha de ser un nombre.', + invalidCellPadding : 'L\'encoixinament de cel·la ha de ser un nombre.', + + cell : + { + menu : 'Cel·la', + insertBefore : 'Insereix abans', + insertAfter : 'Insereix després', + deleteCell : 'Suprimeix', + merge : 'Fusiona', + mergeRight : 'Fusiona a la dreta', + mergeDown : 'Fusiona avall', + splitHorizontal : 'Divideix horitzontalment', + splitVertical : 'Divideix verticalment', + title : 'Propietats de la cel·la', + cellType : 'Tipus de cel·la', + rowSpan : 'Expansió de files', + colSpan : 'Expansió de columnes', + wordWrap : 'Ajustar al contingut', + hAlign : 'Alineació Horizontal', + vAlign : 'Alineació Vertical', + alignBaseline : 'A la lÃnia base', + bgColor : 'Color de fons', + borderColor : 'Color de la vora', + data : 'Dades', + header : 'Capçalera', + yes : 'SÃ', + no : 'No', + invalidWidth : 'L\'amplada de cel·la ha de ser un nombre.', + invalidHeight : 'L\'alçada de cel·la ha de ser un nombre.', + invalidRowSpan : 'L\'expansió de files ha de ser un nombre enter.', + invalidColSpan : 'L\'expansió de columnes ha de ser un nombre enter.', + chooseColor : 'Trieu' + }, + + row : + { + menu : 'Fila', + insertBefore : 'Insereix fila abans de', + insertAfter : 'Insereix fila darrera', + deleteRow : 'Suprimeix una fila' + }, + + column : + { + menu : 'Columna', + insertBefore : 'Insereix columna abans de', + insertAfter : 'Insereix columna darrera', + deleteColumn : 'Suprimeix una columna' + } + }, + + // Button Dialog. + button : + { + title : 'Propietats del botó', + text : 'Text (Valor)', + type : 'Tipus', + typeBtn : 'Botó', + typeSbm : 'Transmet formulari', + typeRst : 'Reinicia formulari' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Propietats de la casella de verificació', + radioTitle : 'Propietats del botó d\'opció', + value : 'Valor', + selected : 'Seleccionat' + }, + + // Form Dialog. + form : + { + title : 'Propietats del formulari', + menu : 'Propietats del formulari', + action : 'Acció', + method : 'Mètode', + encoding : 'Codificació' + }, + + // Select Field Dialog. + select : + { + title : 'Propietats del camp de selecció', + selectInfo : 'Info', + opAvail : 'Opcions disponibles', + value : 'Valor', + size : 'Mida', + lines : 'LÃnies', + chkMulti : 'Permet múltiples seleccions', + opText : 'Text', + opValue : 'Valor', + btnAdd : 'Afegeix', + btnModify : 'Modifica', + btnUp : 'Amunt', + btnDown : 'Avall', + btnSetValue : 'Selecciona per defecte', + btnDelete : 'Elimina' + }, + + // Textarea Dialog. + textarea : + { + title : 'Propietats de l\'à rea de text', + cols : 'Columnes', + rows : 'Files' + }, + + // Text Field Dialog. + textfield : + { + title : 'Propietats del camp de text', + name : 'Nom', + value : 'Valor', + charWidth : 'Amplada', + maxChars : 'Nombre mà xim de carà cters', + type : 'Tipus', + typeText : 'Text', + typePass : 'Contrasenya' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Propietats del camp ocult', + name : 'Nom', + value : 'Valor' + }, + + // Image Dialog. + image : + { + title : 'Propietats de la imatge', + titleButton : 'Propietats del botó d\'imatge', + menu : 'Propietats de la imatge', + infoTab : 'Informació de la imatge', + btnUpload : 'Envia-la al servidor', + upload : 'Puja', + alt : 'Text alternatiu', + lockRatio : 'Bloqueja les proporcions', + resetSize : 'Restaura la mida', + border : 'Vora', + hSpace : 'Espaiat horit.', + vSpace : 'Espaiat vert.', + alertUrl : 'Si us plau, escriviu la URL de la imatge', + linkTab : 'Enllaç', + button2Img : 'Voleu transformar el botó d\'imatge seleccionat en una simple imatge?', + img2Button : 'Voleu transformar la imatge seleccionada en un botó d\'imatge?', + urlMissing : 'Falta la URL de la imatge.', + validateBorder : 'La vora ha de ser un nombre enter.', + validateHSpace : 'HSpace ha de ser un nombre enter.', + validateVSpace : 'VSpace ha de ser un nombre enter.' + }, + + // Flash Dialog + flash : + { + properties : 'Propietats del Flash', + propertiesTab : 'Propietats', + title : 'Propietats del Flash', + chkPlay : 'Reprodució automà tica', + chkLoop : 'Bucle', + chkMenu : 'Habilita menú Flash', + chkFull : 'Permetre la pantalla completa', + scale : 'Escala', + scaleAll : 'Mostra-ho tot', + scaleNoBorder : 'Sense vores', + scaleFit : 'Mida exacta', + access : 'Accés a scripts', + accessAlways : 'Sempre', + accessSameDomain: 'El mateix domini', + accessNever : 'Mai', + alignAbsBottom : 'Abs Bottom', + alignAbsMiddle : 'Abs Middle', + alignBaseline : 'Baseline', + alignTextTop : 'Text Top', + quality : 'Qualitat', + qualityBest : 'La millor', + qualityHigh : 'Alta', + qualityAutoHigh : 'Alta automà tica', + qualityMedium : 'Mitjana', + qualityAutoLow : 'Baixa automà tica', + qualityLow : 'Baixa', + windowModeWindow: 'Finestra', + windowModeOpaque: 'Opaca', + windowModeTransparent : 'Transparent', + windowMode : 'Mode de la finestra', + flashvars : 'Variables de Flash', + bgcolor : 'Color de Fons', + hSpace : 'Espaiat horit.', + vSpace : 'Espaiat vert.', + validateSrc : 'Si us plau, escrigui l\'enllaç URL', + validateHSpace : 'L\'espaiat horitzonatal ha de ser un nombre.', + validateVSpace : 'L\'espaiat vertical ha de ser un nombre.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Revisa l\'ortografia', + title : 'Comprova l\'ortografia', + notAvailable : 'El servei no es troba disponible ara.', + errorLoading : 'Error carregant el servidor: %s.', + notInDic : 'No és al diccionari', + changeTo : 'Reemplaça amb', + btnIgnore : 'Ignora', + btnIgnoreAll : 'Ignora-les totes', + btnReplace : 'Canvia', + btnReplaceAll : 'Canvia-les totes', + btnUndo : 'Desfés', + noSuggestions : 'Cap suggeriment', + progress : 'Verificació ortogrà fica en curs...', + noMispell : 'Verificació ortogrà fica acabada: no hi ha cap paraula mal escrita', + noChanges : 'Verificació ortogrà fica: no s\'ha canviat cap paraula', + oneChange : 'Verificació ortogrà fica: s\'ha canviat una paraula', + manyChanges : 'Verificació ortogrà fica: s\'han canviat %1 paraules', + ieSpellDownload : 'Verificació ortogrà fica no instal·lada. Voleu descarregar-ho ara?' + }, + + smiley : + { + toolbar : 'Icona', + title : 'Insereix una icona', + options : 'Opcions d\'emoticones' + }, + + elementsPath : + { + eleLabel : 'Elements path', + eleTitle : '%1 element' + }, + + numberedlist : 'Llista numerada', + bulletedlist : 'Llista de pics', + indent : 'Augmenta el sagnat', + outdent : 'Redueix el sagnat', + + justify : + { + left : 'Alinea a l\'esquerra', + center : 'Centrat', + right : 'Alinea a la dreta', + block : 'Justificat' + }, + + blockquote : 'Bloc de cita', + + clipboard : + { + title : 'Enganxa', + cutError : 'La seguretat del vostre navegador no permet executar automà ticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).', + copyError : 'La seguretat del vostre navegador no permet executar automà ticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).', + pasteMsg : 'Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.', + securityMsg : 'A causa de la configuració de seguretat del vostre navegador, l\'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.', + pasteArea : 'Ãrea d\'enganxat' + }, + + pastefromword : + { + confirmCleanup : 'El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?', + toolbar : 'Enganxa des del Word', + title : 'Enganxa des del Word', + error : 'No ha estat possible netejar les dades enganxades degut a un error intern' + }, + + pasteText : + { + button : 'Enganxa com a text no formatat', + title : 'Enganxa com a text no formatat' + }, + + templates : + { + button : 'Plantilles', + title : 'Plantilles de contingut', + options : 'Opcions de plantilla', + insertOption : 'Reemplaça el contingut actual', + selectPromptMsg : 'Seleccioneu una plantilla per usar a l\'editor<br>(per defecte s\'elimina el contingut actual):', + emptyListMsg : '(No hi ha plantilles definides)' + }, + + showBlocks : 'Mostra els blocs', + + stylesCombo : + { + label : 'Estil', + panelTitle : 'Estils de format', + panelTitle1 : 'Estils de bloc', + panelTitle2 : 'Estils incrustats', + panelTitle3 : 'Estils d\'objecte' + }, + + format : + { + label : 'Format', + panelTitle : 'Format', + + tag_p : 'Normal', + tag_pre : 'Formatejat', + tag_address : 'Adreça', + tag_h1 : 'Encapçalament 1', + tag_h2 : 'Encapçalament 2', + tag_h3 : 'Encapçalament 3', + tag_h4 : 'Encapçalament 4', + tag_h5 : 'Encapçalament 5', + tag_h6 : 'Encapçalament 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Crea un contenidor Div', + toolbar : 'Crea un contenidor Div', + cssClassInputLabel : 'Classes de la fulla d\'estils', + styleSelectLabel : 'Estil', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Codi d\'idioma', + inlineStyleInputLabel : 'Estil en lÃnia', + advisoryTitleInputLabel : 'TÃtol de guia', + langDirLabel : 'Direcció de l\'idioma', + langDirLTRLabel : 'D\'esquerra a dreta (LTR)', + langDirRTLLabel : 'De dreta a esquerra (RTL)', + edit : 'Edita Div', + remove : 'Elimina Div' + }, + + iframe : + { + title : 'Propietats IFrame', + toolbar : 'IFrame', + noUrl : 'Si us plau, introduïu la URL de l\'iframe URL', + scrolling : 'Activa les barrres de desplaçament', + border : 'Mostra la vora del marc' + }, + + font : + { + label : 'Tipus de lletra', + voiceLabel : 'Tipus de lletra', + panelTitle : 'Tipus de lletra' + }, + + fontSize : + { + label : 'Mida', + voiceLabel : 'Mida de la lletra', + panelTitle : 'Mida' + }, + + colorButton : + { + textColorTitle : 'Color de Text', + bgColorTitle : 'Color de Fons', + panelTitle : 'Colors', + auto : 'Automà tic', + more : 'Més colors...' + }, + + colors : + { + '000' : 'Negre', + '800000' : 'Granat', + '8B4513' : 'Marró sella', + '2F4F4F' : 'Gris pissarra fosca', + '008080' : 'Blau xarxet', + '000080' : 'Blau marÃ', + '4B0082' : 'Indi', + '696969' : 'Gris intens', + 'B22222' : 'Maó', + 'A52A2A' : 'Marró (web)', + 'DAA520' : 'Solidago', + '006400' : 'Verd fosc', + '40E0D0' : 'Turquesa', + '0000CD' : 'Atzur', + '800080' : 'Lila', + '808080' : 'Gris', + 'F00' : 'Vermell', + 'FF8C00' : 'Taronja fosc', + 'FFD700' : 'Or', + '008000' : 'Verd', + '0FF' : 'Cian', + '00F' : 'Blau', + 'EE82EE' : 'Lavanda rosat', + 'A9A9A9' : 'Gris clar', + 'FFA07A' : 'Salmó clar', + 'FFA500' : 'Taronja', + 'FFFF00' : 'Groc', + '00FF00' : 'Verd llima', + 'AFEEEE' : 'Blau pà lid', + 'ADD8E6' : 'Blau clar', + 'DDA0DD' : 'Pruna', + 'D3D3D3' : 'Gris clar', + 'FFF0F5' : 'Lavanda rosat', + 'FAEBD7' : 'Blanc antic', + 'FFFFE0' : 'Groc clar', + 'F0FFF0' : 'Verd pà lid', + 'F0FFFF' : 'Blau cel pà lid', + 'F0F8FF' : 'Cian pà lid', + 'E6E6FA' : 'Lavanda', + 'FFF' : 'Blanc' + }, + + scayt : + { + title : 'Spell Check As You Type', + opera_title : 'No és compatible amb l\'Opera', + enable : 'Habilitat l\'SCAYT', + disable : 'Deshabilita SCAYT', + about : 'Quant a l\'SCAYT', + toggle : 'Commuta l\'SCAYT', + options : 'Opcions', + langs : 'Idiomes', + moreSuggestions : 'Més suggerències', + ignore : 'Ignora', + ignoreAll : 'Ignora\'ls tots', + addWord : 'Afegeix una paraula', + emptyDic : 'El nom del diccionari no hauria d\'estar buit.', + + optionsTab : 'Opcions', + allCaps : 'Ignora paraules en majúscules', + ignoreDomainNames : 'Ignora els noms de domini', + mixedCase : 'Ignora paraules amb majúscules i minúscules', + mixedWithDigits : 'Ignora paraules amb números ', + + languagesTab : 'Idiomes', + + dictionariesTab : 'Diccionaris', + dic_field_name : 'Nom del diccionari', + dic_create : 'Crea', + dic_restore : 'Restaura', + dic_delete : 'Elimina', + dic_rename : 'Canvia el nom', + dic_info : 'Inicialment el diccionari d\'usuari s\'emmagatzema en una galeta. De totes maneres, les galetes tenen la mida limitada. Quan el diccionari creix massa, llavors el diccionari es pot emmagatzemar al nostre servidor. Per desar el vostre diccionari personal al nostre servidor heu d.\'especificar un nom pel diccionari. Si ja heu desat un diccionari, teclegeu si us plau el seu nom i cliqueu el botó de restauració.', + + aboutTab : 'Quant a' + }, + + about : + { + title : 'Quant al CKEditor', + dlgTitle : 'Quant al CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Per informació sobre llicències visiteu el web:', + copy : 'Copyright © $1. Tots els drets reservats.' + }, + + maximize : 'Maximitza', + minimize : 'Minimitza', + + fakeobjects : + { + anchor : 'Ãncora', + flash : 'Animació Flash', + iframe : 'IFrame', + hiddenfield : 'Camp ocult', + unknown : 'Objecte desconegut' + }, + + resize : 'Arrossegueu per redimensionar', + + colordialog : + { + title : 'Selecciona el color', + options : 'Opcions del color', + highlight : 'Destacat', + selected : 'Seleccionat', + clear : 'Neteja' + }, + + toolbarCollapse : 'Redueix la barra d\'eines', + toolbarExpand : 'Amplia la barra d\'eines', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Direcció del text d\'esquerra a dreta', + rtl : 'Direcció del text de dreta a esquerra' + }, + + docprops : + { + label : 'Propietats del document', + title : 'Propietats del document', + design : 'Design', // MISSING + meta : 'Metadades', + chooseColor : 'Trieu', + other : '<altre>', + docTitle : 'TÃtol de la pà gina', + charset : 'Codificació de conjunt de carà cters', + charsetOther : 'Una altra codificació de carà cters', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Centreeuropeu', + charsetCT : 'Xinès tradicional (Big5)', + charsetCR : 'CirÃl·lic', + charsetGR : 'Grec', + charsetJP : 'Japonès', + charsetKR : 'Coreà ', + charsetTR : 'Turc', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Europeu occidental', + docType : 'Capçalera de tipus de document', + docTypeOther : 'Un altra capçalera de tipus de document', + xhtmlDec : 'Incloure declaracions XHTML', + bgColor : 'Color de fons', + bgImage : 'URL de la imatge de fons', + bgFixed : 'Fons fixe', + txtColor : 'Color de Text', + margin : 'Marges de pà gina', + marginTop : 'Cap', + marginLeft : 'Esquerra', + marginRight : 'Dreta', + marginBottom : 'Peu', + metaKeywords : 'Mots clau per a indexació (separats per coma)', + metaDescription : 'Descripció del document', + metaAuthor : 'Autor', + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/cs.js b/_source/lang/cs.js new file mode 100644 index 0000000..c2375fc --- /dev/null +++ b/_source/lang/cs.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Czech language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['cs'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Textový editor, %1, nápovÄdu zobrazÃte stiskem ALT 0.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Textový editor', + + // Toolbar buttons without dialogs. + source : 'Zdroj', + newPage : 'Nová stránka', + save : 'Uložit', + preview : 'Náhled', + cut : 'Vyjmout', + copy : 'KopÃrovat', + paste : 'Vložit', + print : 'Tisk', + underline : 'Podtržené', + bold : 'TuÄné', + italic : 'KurzÃva', + selectAll : 'Vybrat vÅ¡e', + removeFormat : 'Odstranit formátovánÃ', + strike : 'PÅeÅ¡krtnuté', + subscript : 'Dolnà index', + superscript : 'Hornà index', + horizontalrule : 'Vložit vodorovnou linku', + pagebreak : 'Vložit konec stránky', + pagebreakAlt : 'Konec stránky', + unlink : 'Odstranit odkaz', + undo : 'ZpÄt', + redo : 'Znovu', + + // Common messages and labels. + common : + { + browseServer : 'Vybrat na serveru', + url : 'URL', + protocol : 'Protokol', + upload : 'Odeslat', + uploadSubmit : 'Odeslat na server', + image : 'Obrázek', + flash : 'Flash', + form : 'FormuláÅ', + checkbox : 'ZaÅ¡krtávacà polÃÄko', + radio : 'PÅepÃnaÄ', + textField : 'Textové pole', + textarea : 'Textová oblast', + hiddenField : 'Skryté pole', + button : 'TlaÄÃtko', + select : 'Seznam', + imageButton : 'Obrázkové tlaÄÃtko', + notSet : '<nenastaveno>', + id : 'Id', + name : 'Jméno', + langDir : 'Orientace jazyka', + langDirLtr : 'Zleva do prava (LTR)', + langDirRtl : 'Zprava do leva (RTL)', + langCode : 'Kód jazyka', + longDescr : 'Dlouhý popis URL', + cssClass : 'TÅÃda stylu', + advisoryTitle : 'Pomocný titulek', + cssStyle : 'Styl', + ok : 'OK', + cancel : 'Storno', + close : 'ZavÅÃt', + preview : 'Náhled', + generalTab : 'Obecné', + advancedTab : 'RozÅ¡ÃÅené', + validateNumberFailed : 'Zadaná hodnota nenà ÄÃselná.', + confirmNewPage : 'Jakékoliv neuložené zmÄny obsahu budou ztraceny. SkuteÄnÄ chete otevrÃt novou stránku?', + confirmCancel : 'NÄkterá z nastavenà byla zmÄnÄna. SkuteÄnÄ chete zavÅÃt dialogové okno?', + options : 'NastavenÃ', + target : 'CÃl', + targetNew : 'Nové okno (_blank)', + targetTop : 'Okno nejvyššà úrovnÄ (_top)', + targetSelf : 'Stejné okno (_self)', + targetParent : 'RodiÄovské onko (_parent)', + langDirLTR : 'Zleva doprava (LTR)', + langDirRTL : 'Zprava doleva (RTL)', + styles : 'Styly', + cssClasses : 'TÅÃdy stylů', + width : 'Å ÃÅka', + height : 'Výška', + align : 'ZarovnánÃ', + alignLeft : 'Vlevo', + alignRight : 'Vpravo', + alignCenter : 'Na stÅed', + alignTop : 'Nahoru', + alignMiddle : 'Na stÅed', + alignBottom : 'Dolů', + invalidHeight : 'Zadaná výška musà být ÄÃslo.', + invalidWidth : 'Zadaná Å¡ÃÅka musà být ÄÃslo.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, nedostupné</span>' + }, + + contextmenu : + { + options : 'Nastavenà kontextové nabÃdky' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Vložit speciálnà znaky', + title : 'VýbÄr speciálnÃho znaku', + options : 'Nastavenà speciálnÃch znaků' + }, + + // Link dialog. + link : + { + toolbar : 'Vložit/zmÄnit odkaz', + other : '<jiný>', + menu : 'ZmÄnit odkaz', + title : 'Odkaz', + info : 'Informace o odkazu', + target : 'CÃl', + upload : 'Odeslat', + advanced : 'RozÅ¡ÃÅené', + type : 'Typ odkazu', + toUrl : 'URL', + toAnchor : 'Kotva v této stránce', + toEmail : 'E-Mail', + targetFrame : '<rámec>', + targetPopup : '<vyskakovacà okno>', + targetFrameName : 'Název cÃlového rámu', + targetPopupName : 'Název vyskakovacÃho okna', + popupFeatures : 'Vlastnosti vyskakovacÃho okna', + popupResizable : 'UmožÅujÃcà mÄnit velikost', + popupStatusBar : 'Stavový Åádek', + popupLocationBar: 'Panel umÃstÄnÃ', + popupToolbar : 'Panel nástrojů', + popupMenuBar : 'Panel nabÃdky', + popupFullScreen : 'Celá obrazovka (IE)', + popupScrollBars : 'PosuvnÃky', + popupDependent : 'Závislost (Netscape)', + popupLeft : 'Levý okraj', + popupTop : 'Hornà okraj', + id : 'Id', + langDir : 'Orientace jazyka', + langDirLTR : 'Zleva do prava (LTR)', + langDirRTL : 'Zprava do leva (RTL)', + acccessKey : 'PÅÃstupový klÃÄ', + name : 'Jméno', + langCode : 'Orientace jazyka', + tabIndex : 'PoÅadà prvku', + advisoryTitle : 'Pomocný titulek', + advisoryContentType : 'Pomocný typ obsahu', + cssClasses : 'TÅÃda stylu', + charset : 'PÅiÅazená znaková sada', + styles : 'Styl', + rel : 'Relationship', // MISSING + selectAnchor : 'Vybrat kotvu', + anchorName : 'Podle jména kotvy', + anchorId : 'Podle Id objektu', + emailAddress : 'E-Mailová adresa', + emailSubject : 'PÅedmÄt zprávy', + emailBody : 'TÄlo zprávy', + noAnchors : '(Ve stránce nenà definována žádná kotva!)', + noUrl : 'Zadejte prosÃm URL odkazu', + noEmail : 'Zadejte prosÃm e-mailovou adresu' + }, + + // Anchor dialog + anchor : + { + toolbar : 'VložÃt/zmÄnit záložku', + menu : 'Vlastnosti záložky', + title : 'Vlastnosti záložky', + name : 'Název záložky', + errorName : 'Zadejte prosÃm název záložky', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Vlastnosti ÄÃslovánÃ', + bulletedTitle : 'Vlastnosti odrážek', + type : 'Typ', + start : 'PoÄátek', + validateStartNumber :'ÄÃslovánà musà zaÄÃnat celým ÄÃslem.', + circle : 'Kroužky', + disc : 'KoleÄka', + square : 'Ätverce', + none : 'Nic', + notset : '<nenastaveno>', + armenian : 'Arménské', + georgian : 'GruzÃnské (an, ban, gan, atd.)', + lowerRoman : 'Malé ÅÃmské (i, ii, iii, iv, v, atd.)', + upperRoman : 'Velké ÅÃmské (I, II, III, IV, V, atd.)', + lowerAlpha : 'Malá latinka (a, b, c, d, e, atd.)', + upperAlpha : 'Velká latinka (A, B, C, D, E, atd.)', + lowerGreek : 'Malé Åecké (alpha, beta, gamma, atd.)', + decimal : 'Arabská ÄÃsla (1, 2, 3, atd.)', + decimalLeadingZero : 'Arabská ÄÃsla uvozená nulou (01, 02, 03, atd.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'NajÃt a nahradit', + find : 'Hledat', + replace : 'Nahradit', + findWhat : 'Co hledat:', + replaceWith : 'ÄÃm nahradit:', + notFoundMsg : 'Hledaný text nebyl nalezen.', + matchCase : 'RozliÅ¡ovat velikost pÃsma', + matchWord : 'Pouze celá slova', + matchCyclic : 'Procházet opakovanÄ', + replaceAll : 'Nahradit vÅ¡e', + replaceSuccessMsg : '%1 nahrazenÃ.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabulka', + title : 'Vlastnosti tabulky', + menu : 'Vlastnosti tabulky', + deleteTable : 'Smazat tabulku', + rows : 'Åádky', + columns : 'Sloupce', + border : 'OhraniÄenÃ', + widthPx : 'bodů', + widthPc : 'procent', + widthUnit : 'jednotka Å¡ÃÅky', + cellSpace : 'Vzdálenost bunÄk', + cellPad : 'Odsazenà obsahu v buÅce', + caption : 'Popis', + summary : 'Souhrn', + headers : 'ZáhlavÃ', + headersNone : 'Žádné', + headersColumn : 'Prvnà sloupec', + headersRow : 'Prvnà Åádek', + headersBoth : 'ObojÃ', + invalidRows : 'PoÄet Åádků musà být ÄÃslo vÄtÅ¡Ã než 0.', + invalidCols : 'PoÄet sloupců musà být ÄÃslo vÄtÅ¡Ã než 0.', + invalidBorder : 'Zdaná velikost okraje musà být ÄÃselná.', + invalidWidth : 'Zadaná Å¡ÃÅka tabulky musà být ÄÃselná.', + invalidHeight : 'zadaná výška tabulky musà být ÄÃselná.', + invalidCellSpacing : 'Zadaná vzdálenost bunÄk musà být ÄÃselná.', + invalidCellPadding : 'Zadané odsazenà obsahu v buÅce musà být ÄÃselné.', + + cell : + { + menu : 'BuÅka', + insertBefore : 'Vložit buÅku pÅed', + insertAfter : 'Vložit buÅku za', + deleteCell : 'Smazat buÅky', + merge : 'SlouÄit buÅky', + mergeRight : 'SlouÄit doprava', + mergeDown : 'SlouÄit dolů', + splitHorizontal : 'RozdÄlit buÅky vodorovnÄ', + splitVertical : 'RozdÄlit buÅky svisle', + title : 'Vlastnosti buÅky', + cellType : 'Typ buÅky', + rowSpan : 'Spojit Åádky', + colSpan : 'Spojit sloupce', + wordWrap : 'ZalamovánÃ', + hAlign : 'Vodorovné zarovnánÃ', + vAlign : 'Svislé zarovnánÃ', + alignBaseline : 'Na úÄaÅÃ', + bgColor : 'Barva pozadÃ', + borderColor : 'Barva okraje', + data : 'Data', + header : 'HlaviÄka', + yes : 'Ano', + no : 'Ne', + invalidWidth : 'Zadaná Å¡ÃÅka buÅky musà být ÄÃslená.', + invalidHeight : 'Zadaná výška buÅky musà být ÄÃslená.', + invalidRowSpan : 'Zadaný poÄet slouÄených Åádků musà být celé ÄÃslo.', + invalidColSpan : 'Zadaný poÄet slouÄených sloupců musà být celé ÄÃslo.', + chooseColor : 'VýbÄr' + }, + + row : + { + menu : 'Åádek', + insertBefore : 'Vložit Åádek pÅed', + insertAfter : 'Vložit Åádek za', + deleteRow : 'Smazat Åádky' + }, + + column : + { + menu : 'Sloupec', + insertBefore : 'Vložit sloupec pÅed', + insertAfter : 'Vložit sloupec za', + deleteColumn : 'Smazat sloupec' + } + }, + + // Button Dialog. + button : + { + title : 'Vlastnosti tlaÄÃtka', + text : 'Popisek', + type : 'Typ', + typeBtn : 'TlaÄÃtko', + typeSbm : 'Odeslat', + typeRst : 'Obnovit' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Vlastnosti zaÅ¡krtávacÃho polÃÄka', + radioTitle : 'Vlastnosti pÅepÃnaÄe', + value : 'Hodnota', + selected : 'ZaÅ¡krtnuto' + }, + + // Form Dialog. + form : + { + title : 'Vlastnosti formuláÅe', + menu : 'Vlastnosti formuláÅe', + action : 'Akce', + method : 'Metoda', + encoding : 'KódovánÃ' + }, + + // Select Field Dialog. + select : + { + title : 'Vlastnosti seznamu', + selectInfo : 'Info', + opAvail : 'Dostupná nastavenÃ', + value : 'Hodnota', + size : 'Velikost', + lines : 'Åádků', + chkMulti : 'Povolit mnohonásobné výbÄry', + opText : 'Text', + opValue : 'Hodnota', + btnAdd : 'PÅidat', + btnModify : 'ZmÄnit', + btnUp : 'Nahoru', + btnDown : 'Dolů', + btnSetValue : 'Nastavit jako vybranou hodnotu', + btnDelete : 'Smazat' + }, + + // Textarea Dialog. + textarea : + { + title : 'Vlastnosti textové oblasti', + cols : 'Sloupců', + rows : 'Åádků' + }, + + // Text Field Dialog. + textfield : + { + title : 'Vlastnosti textového pole', + name : 'Název', + value : 'Hodnota', + charWidth : 'Å ÃÅka ve znacÃch', + maxChars : 'Maximálnà poÄet znaků', + type : 'Typ', + typeText : 'Text', + typePass : 'Heslo' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Vlastnosti skrytého pole', + name : 'Název', + value : 'Hodnota' + }, + + // Image Dialog. + image : + { + title : 'Vlastnosti obrázku', + titleButton : 'Vlastnostà obrázkového tlaÄÃtka', + menu : 'Vlastnosti obrázku', + infoTab : 'Informace o obrázku', + btnUpload : 'Odeslat na server', + upload : 'Odeslat', + alt : 'Alternativnà text', + lockRatio : 'Zámek', + resetSize : 'Původnà velikost', + border : 'Okraje', + hSpace : 'H-mezera', + vSpace : 'V-mezera', + alertUrl : 'Zadejte prosÃm URL obrázku', + linkTab : 'Odkaz', + button2Img : 'SkuteÄnÄ chcete pÅevést zvolené obrázkové tlaÄÃtko na obyÄejný obrázek?', + img2Button : 'SkuteÄnÄ chcete pÅevést zvolený obrázek na obrázkové tlaÄÃtko?', + urlMissing : 'Zadané URL zdroje obrázku nebylo nalezeno.', + validateBorder : 'Okraj musà být nastaven v celých ÄÃslech.', + validateHSpace : 'H-mezera musà být nastavena v celých ÄÃslech.', + validateVSpace : 'V-mezera musà být nastavena v celých ÄÃslech.' + }, + + // Flash Dialog + flash : + { + properties : 'Vlastnosti Flashe', + propertiesTab : 'Vlastnosti', + title : 'Vlastnosti Flashe', + chkPlay : 'Automatické spuÅ¡tÄnÃ', + chkLoop : 'OpakovánÃ', + chkMenu : 'NabÃdka Flash', + chkFull : 'Povolit celoobrazovkový režim', + scale : 'Zobrazit', + scaleAll : 'Zobrazit vÅ¡e', + scaleNoBorder : 'Bez okraje', + scaleFit : 'PÅizpůsobit', + access : 'PÅÃstup ke skriptu', + accessAlways : 'Vždy', + accessSameDomain: 'Ve stejné doménÄ', + accessNever : 'Nikdy', + alignAbsBottom : 'Zcela dolů', + alignAbsMiddle : 'DoprostÅed', + alignBaseline : 'Na úÄaÅÃ', + alignTextTop : 'Na hornà okraj textu', + quality : 'Kvalita', + qualityBest : 'NejlepÅ¡Ã', + qualityHigh : 'Vysoká', + qualityAutoHigh : 'Vysoká - auto', + qualityMedium : 'StÅednÃ', + qualityAutoLow : 'NÃzká - auto', + qualityLow : 'NejnižšÃ', + windowModeWindow: 'Okno', + windowModeOpaque: 'Neprůhledné', + windowModeTransparent : 'Průhledné', + windowMode : 'Režim okna', + flashvars : 'PromÄnné pro Flash', + bgcolor : 'Barva pozadÃ', + hSpace : 'H-mezera', + vSpace : 'V-mezera', + validateSrc : 'Zadejte prosÃm URL odkazu', + validateHSpace : 'Zadaná H-mezera musà být ÄÃslo.', + validateVSpace : 'Zadaná V-mezera musà být ÄÃslo.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Zkontrolovat pravopis', + title : 'Kontrola pravopisu', + notAvailable : 'Omlouváme se, ale služba nynà nenà dostupná.', + errorLoading : 'Chyba nahrávánà služby aplikace z: %s.', + notInDic : 'Nenà ve slovnÃku', + changeTo : 'ZmÄnit na', + btnIgnore : 'PÅeskoÄit', + btnIgnoreAll : 'PÅeskakovat vÅ¡e', + btnReplace : 'ZamÄnit', + btnReplaceAll : 'ZamÄÅovat vÅ¡e', + btnUndo : 'ZpÄt', + noSuggestions : '- žádné návrhy -', + progress : 'ProbÃhá kontrola pravopisu...', + noMispell : 'Kontrola pravopisu dokonÄena: Žádné pravopisné chyby nenalezeny', + noChanges : 'Kontrola pravopisu dokonÄena: Beze zmÄn', + oneChange : 'Kontrola pravopisu dokonÄena: Jedno slovo zmÄnÄno', + manyChanges : 'Kontrola pravopisu dokonÄena: %1 slov zmÄnÄno', + ieSpellDownload : 'Kontrola pravopisu nenà nainstalována. Chcete ji nynà stáhnout?' + }, + + smiley : + { + toolbar : 'SmajlÃky', + title : 'Vkládánà smajlÃků', + options : 'Nastavenà smajlÃků' + }, + + elementsPath : + { + eleLabel : 'Cesta objektu', + eleTitle : '%1 objekt' + }, + + numberedlist : 'ÄÃslovánÃ', + bulletedlist : 'Odrážky', + indent : 'ZvÄtÅ¡it odsazenÃ', + outdent : 'ZmenÅ¡it odsazenÃ', + + justify : + { + left : 'Zarovnat vlevo', + center : 'Zarovnat na stÅed', + right : 'Zarovnat vpravo', + block : 'Zarovnat do bloku' + }, + + blockquote : 'Citace', + + clipboard : + { + title : 'Vložit', + cutError : 'BezpeÄnostnà nastavenà VaÅ¡eho prohlÞeÄe nedovolujà editoru spustit funkci pro vyjmutà zvoleného textu do schránky. ProsÃm vyjmÄte zvolený text do schránky pomocà klávesnice (Ctrl/Cmd+X).', + copyError : 'BezpeÄnostnà nastavenà VaÅ¡eho prohlÞeÄe nedovolujà editoru spustit funkci pro kopÃrovánà zvoleného textu do schránky. ProsÃm zkopÃrujte zvolený text do schránky pomocà klávesnice (Ctrl/Cmd+C).', + pasteMsg : 'Do následujÃcÃho pole vložte požadovaný obsah pomocà klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stisknÄte <STRONG>OK</STRONG>.', + securityMsg : 'Z důvodů nastavenà bezpeÄnosti VaÅ¡eho prohlÞeÄe nemůže editor pÅistupovat pÅÃmo do schránky. Obsah schránky prosÃm vložte znovu do tohoto okna.', + pasteArea : 'Oblast vlkádánÃ' + }, + + pastefromword : + { + confirmCleanup : 'Jak je vidÄt, vkládaný text je kopÃrován z Wordu. Chcete jej pÅed vloženÃm vyÄistit?', + toolbar : 'Vložit z Wordu', + title : 'Vložit z Wordu', + error : 'Z důvodu vnitÅnà chyby nebylo možné provést vyÄiÅ¡tÄnà vkládaného textu.' + }, + + pasteText : + { + button : 'Vložit jako Äistý text', + title : 'Vložit jako Äistý text' + }, + + templates : + { + button : 'Å ablony', + title : 'Å ablony obsahu', + options : 'Nastavenà šablon', + insertOption : 'Nahradit aktuálnà obsah', + selectPromptMsg : 'ProsÃm zvolte Å¡ablonu pro otevÅenà v editoru<br>(aktuálnà obsah editoru bude ztracen):', + emptyListMsg : '(Nenà definována žádná Å¡ablona)' + }, + + showBlocks : 'Ukázat bloky', + + stylesCombo : + { + label : 'Styl', + panelTitle : 'Formátovacà styly', + panelTitle1 : 'Blokové styly', + panelTitle2 : 'Åádkové styly', + panelTitle3 : 'Objektové styly' + }, + + format : + { + label : 'Formát', + panelTitle : 'Formát', + + tag_p : 'NormálnÃ', + tag_pre : 'Naformátováno', + tag_address : 'Adresa', + tag_h1 : 'Nadpis 1', + tag_h2 : 'Nadpis 2', + tag_h3 : 'Nadpis 3', + tag_h4 : 'Nadpis 4', + tag_h5 : 'Nadpis 5', + tag_h6 : 'Nadpis 6', + tag_div : 'Normálnà (DIV)' + }, + + div : + { + title : 'VytvoÅit Div kontejner', + toolbar : 'VytvoÅit Div kontejner', + cssClassInputLabel : 'TÅÃdy stylů', + styleSelectLabel : 'Styly', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Kód jazyka', + inlineStyleInputLabel : 'VnitÅnà styly', + advisoryTitleInputLabel : 'NápovÄdnà titulek', + langDirLabel : 'Orientace textu', + langDirLTRLabel : 'Zleva doprava (LTR)', + langDirRTLLabel : 'Zprava doleva (RTL)', + edit : 'ZmÄnit Div', + remove : 'Odstranit Div' + }, + + iframe : + { + title : 'Vlastnosti IFrame', + toolbar : 'IFrame', + noUrl : 'Zadejte prosÃm URL obsahu pro IFrame', + scrolling : 'Zapnout posuvnÃky', + border : 'Zobrazit okraj' + }, + + font : + { + label : 'PÃsmo', + voiceLabel : 'PÃsmo', + panelTitle : 'PÃsmo' + }, + + fontSize : + { + label : 'Velikost', + voiceLabel : 'Velikost pÃsma', + panelTitle : 'Velikost' + }, + + colorButton : + { + textColorTitle : 'Barva textu', + bgColorTitle : 'Barva pozadÃ', + panelTitle : 'Barvy', + auto : 'Automaticky', + more : 'VÃce barev...' + }, + + colors : + { + '000' : 'Äerná', + '800000' : 'KaÅ¡tanová', + '8B4513' : 'Sedlová hnÄÄ', + '2F4F4F' : 'TmavÄ bledÄ Å¡edá', + '008080' : 'ÄÃrka', + '000080' : 'NámoÅnická modÅ', + '4B0082' : 'Inkoustová', + '696969' : 'TmavÄ Å¡edá', + 'B22222' : 'Pálená cihla', + 'A52A2A' : 'HnÄdá', + 'DAA520' : 'Zlatý prut', + '006400' : 'TmavÄ zelená', + '40E0D0' : 'Tyrkisová', + '0000CD' : 'StÅednÄ modrá', + '800080' : 'Purpurová', + '808080' : 'Å edá', + 'F00' : 'Äervená', + 'FF8C00' : 'TmavÄ oranžová', + 'FFD700' : 'Zlatá', + '008000' : 'Zelená', + '0FF' : 'Kyanidová', + '00F' : 'Modrá', + 'EE82EE' : 'Fialová', + 'A9A9A9' : 'KalnÄ Å¡edá', + 'FFA07A' : 'SvÄtle lososová', + 'FFA500' : 'Oranžová', + 'FFFF00' : 'Žlutá', + '00FF00' : 'Limetková', + 'AFEEEE' : 'BledÄ tyrkisová', + 'ADD8E6' : 'SvÄtle modrá', + 'DDA0DD' : 'Å vestková', + 'D3D3D3' : 'SvÄtle Å¡edá', + 'FFF0F5' : 'LevandulovÄ rumÄnná', + 'FAEBD7' : 'Antická bÃlá', + 'FFFFE0' : 'SvÄtle žlutá', + 'F0FFF0' : 'Medová rosa', + 'F0FFFF' : 'Azurová', + 'F0F8FF' : 'AlenÄina modrá', + 'E6E6FA' : 'Lavendulová', + 'FFF' : 'BÃlá' + }, + + scayt : + { + title : 'Kontrola pravopisu bÄhem psanà (SCAYT)', + opera_title : 'Not supported by Opera', // MISSING + enable : 'Zapnout SCAYT', + disable : 'Vypnout SCAYT', + about : 'O aplikaci SCAYT', + toggle : 'VypÃnaÄ SCAYT', + options : 'NastavenÃ', + langs : 'Jazyky', + moreSuggestions : 'VÃce návrhů', + ignore : 'PÅeskoÄit', + ignoreAll : 'PÅeskoÄit vÅ¡e', + addWord : 'PÅidat slovo', + emptyDic : 'Název slovnÃku nesmà být prázdný.', + + optionsTab : 'NastavenÃ', + allCaps : 'Ignorovat slova velkými pÃsmeny', + ignoreDomainNames : 'Ignorovat doménová jména', + mixedCase : 'Ignorovat slova obsahujÃcà různou velikost pÃsma', + mixedWithDigits : 'Ignorovat slova obsahujÃcà ÄÃsla', + + languagesTab : 'Jazyky', + + dictionariesTab : 'SlovnÃky', + dic_field_name : 'Název slovnÃku', + dic_create : 'vytvoÅit', + dic_restore : 'Obnovit', + dic_delete : 'Smazat', + dic_rename : 'PÅejmenovat', + dic_info : 'ZpoÄátku se uživatelský slovnÃk ukládá do cookies ve vaÅ¡em prohlÞeÄi. OvÅ¡em cookies majà omezenou velikost, takže když slovnÃk dosáhne velikosti, kdy se již do cookies nevejde, může být uložen na naÅ¡em serveru. Chcete-li uložit Váš osobnà slovnÃk na naÅ¡em serveru, je tÅeba slovnÃk nejdÅÃve pojmenovat. Máte-li již slovnÃk pojmenován a uložen, zadejte jeho název a klepnÄte na tlaÄÃtko Obnovit.', + + aboutTab : 'O aplikaci' + }, + + about : + { + title : 'O aplikaci CKEditor', + dlgTitle : 'O aplikaci CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Pro informace o lincenci navÅ¡tivte naÅ¡i webovou stránku:', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'Maximalizovat', + minimize : 'Minimalizovat', + + fakeobjects : + { + anchor : 'Záložka', + flash : 'Flash animace', + iframe : 'IFrame', + hiddenfield : 'Skryté pole', + unknown : 'Neznámý objekt' + }, + + resize : 'Uchopit pro zmÄnu velikosti', + + colordialog : + { + title : 'VýbÄr barvy', + options : 'Nastavenà barvy', + highlight : 'Zvýraznit', + selected : 'Vybráno', + clear : 'VyÄistit' + }, + + toolbarCollapse : 'Skrýt panel nástrojů', + toolbarExpand : 'Zobrazit panel nástrojů', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Orientace textu zleva doprava', + rtl : 'Orientace textu zprava do leva' + }, + + docprops : + { + label : 'Vlastnosti dokumentu', + title : 'Vlastnosti dokumentu', + design : 'Design', // MISSING + meta : 'Metadata', + chooseColor : 'VýbÄr', + other : '<jiný>', + docTitle : 'Titulek stránky', + charset : 'Znaková sada', + charsetOther : 'DalÅ¡Ã znaková sada', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'StÅedoevropské jazyky', + charsetCT : 'TradiÄnà ÄÃnÅ¡tina (Big5)', + charsetCR : 'Cyrilice', + charsetGR : 'ÅeÄtina', + charsetJP : 'JaponÅ¡tina', + charsetKR : 'KorejÅ¡tina', + charsetTR : 'TureÄtina', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Západoevropské jazyky', + docType : 'Typ dokumentu', + docTypeOther : 'Jiný typ dokumetu', + xhtmlDec : 'Zahrnou deklarace XHTML', + bgColor : 'Barva pozadÃ', + bgImage : 'URL obrázku na pozadÃ', + bgFixed : 'Nerolovatelné pozadÃ', + txtColor : 'Barva textu', + margin : 'Okraje stránky', + marginTop : 'HornÃ', + marginLeft : 'Levý', + marginRight : 'Pravý', + marginBottom : 'DolnÃ', + metaKeywords : 'KlÃÄová slova (oddÄlená Äárkou)', + metaDescription : 'Popis dokumentu', + metaAuthor : 'Autor', + metaCopyright : 'Autorská práva', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/cy.js b/_source/lang/cy.js new file mode 100644 index 0000000..8402b00 --- /dev/null +++ b/_source/lang/cy.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Welsh language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['cy'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Golygydd testun cyfoethog, %1, gwasgwch ALT 0 am gymorth.', + + // ARIA descriptions. + toolbars : 'Bariau offer golygydd', + editor : 'Golygydd Testun Cyfoethog', + + // Toolbar buttons without dialogs. + source : 'Tarddle', + newPage : 'Tudalen newydd', + save : 'Cadw', + preview : 'Rhagolwg', + cut : 'Torri', + copy : 'Copïo', + paste : 'Gludo', + print : 'Argraffu', + underline : 'Tanlinellu', + bold : 'Bras', + italic : 'Italig', + selectAll : 'Dewis Popeth', + removeFormat : 'Tynnu Fformat', + strike : 'Llinell Trwyddo', + subscript : 'Is-sgript', + superscript : 'Uwchsgript', + horizontalrule : 'Mewnosod Llinell Lorweddol', + pagebreak : 'Mewnosod Toriad Tudalen i Argraffu', + pagebreakAlt : 'Toriad Tudalen', + unlink : 'Datgysylltu', + undo : 'Dadwneud', + redo : 'Ailadrodd', + + // Common messages and labels. + common : + { + browseServer : 'Pori\'r Gweinydd', + url : 'URL', + protocol : 'Protocol', + upload : 'Lanlwytho', + uploadSubmit : 'Anfon i\'r Gweinydd', + image : 'Delwedd', + flash : 'Flash', + form : 'Ffurflen', + checkbox : 'Blwch ticio', + radio : 'Botwm Radio', + textField : 'Maes Testun', + textarea : 'Ardal Testun', + hiddenField : 'Maes Cudd', + button : 'Botwm', + select : 'Maes Dewis', + imageButton : 'Botwm Delwedd', + notSet : '<heb osod>', + id : 'Id', + name : 'Name', + langDir : 'Cyfeiriad Iaith', + langDirLtr : 'Chwith i\'r Dde (LTR)', + langDirRtl : 'Dde i\'r Chwith (RTL)', + langCode : 'Cod Iaith', + longDescr : 'URL Disgrifiad Hir', + cssClass : 'Dosbarth Dalen Arddull', + advisoryTitle : 'Teitl Cynghorol', + cssStyle : 'Arddull', + ok : 'Iawn', + cancel : 'Diddymu', + close : 'Cau', + preview : 'Rhagolwg', + generalTab : 'Cyffredinol', + advancedTab : 'Uwch', + validateNumberFailed : 'Nid yw\'r gwerth hwn yn rhif.', + confirmNewPage : 'Byddwch yn colli unrhyw newidiadau i\'r cynnwys sydd heb eu cadw. A ydych am barhau i lwytho tudalen newydd?', + confirmCancel : 'Mae rhai o\'r opsiynau wedi\'u newid. A ydych wir am gau\'r deialog?', + options : 'Opsiynau', + target : 'Targed', + targetNew : 'Ffenest Newydd (_blank)', + targetTop : 'Ffenest ar y Brig (_top)', + targetSelf : 'Yr un Ffenest (_self)', + targetParent : 'Ffenest y Rhiant (_parent)', + langDirLTR : 'Chwith i\'r Dde (LTR)', + langDirRTL : 'Dde i\'r Chwith (RTL)', + styles : 'Arddull', + cssClasses : 'Dosbarthiadau Ffeil Ddiwyg', + width : 'Lled', + height : 'Uchder', + align : 'Alinio', + alignLeft : 'Chwith', + alignRight : 'Dde', + alignCenter : 'Canol', + alignTop : 'Brig', + alignMiddle : 'Canol', + alignBottom : 'Gwaelod', + invalidHeight : 'Rhaid i\'r Uchder fod yn rhif.', + invalidWidth : 'Rhaid i\'r Lled fod yn rhif.', + invalidCssLength : 'Mae\'n rhaid i\'r gwerth ar gyfer maes "%1" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).', + invalidHtmlLength : 'Mae\'n rhaid i\'r gwerth ar gyfer maes "%1" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).', + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, ddim ar gael</span>' + }, + + contextmenu : + { + options : 'Opsiynau Dewislen Cyd-destun' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Mewnosod Nodau Arbennig', + title : 'Dewis Nod Arbennig', + options : 'Opsiynau Nodau Arbennig' + }, + + // Link dialog. + link : + { + toolbar : 'Dolen', + other : '<eraill>', + menu : 'Golygu Dolen', + title : 'Dolen', + info : 'Gwyb ar y Ddolen', + target : 'Targed', + upload : 'Lanlwytho', + advanced : 'Uwch', + type : 'Math y Ddolen', + toUrl : 'URL', + toAnchor : 'Dolen at angor yn y testun', + toEmail : 'E-bost', + targetFrame : '<ffrâm>', + targetPopup : '<ffenestr bop>', + targetFrameName : 'Enw Ffrâm y Targed', + targetPopupName : 'Enw Ffenestr Bop', + popupFeatures : 'Nodweddion Ffenestr Bop', + popupResizable : 'Ailfeintiol', + popupStatusBar : 'Bar Statws', + popupLocationBar: 'Bar Safle', + popupToolbar : 'Bar Offer', + popupMenuBar : 'Dewislen', + popupFullScreen : 'Sgrin Llawn (IE)', + popupScrollBars : 'Barrau Sgrolio', + popupDependent : 'Dibynnol (Netscape)', + popupLeft : 'Safle Chwith', + popupTop : 'Safle Top', + id : 'Id', + langDir : 'Cyfeiriad Iaith', + langDirLTR : 'Chwith i\'r Dde (LTR)', + langDirRTL : 'Dde i\'r Chwith (RTL)', + acccessKey : 'Allwedd Mynediad', + name : 'Enw', + langCode : 'Cod Iaith', + tabIndex : 'Indecs Tab', + advisoryTitle : 'Teitl Cynghorol', + advisoryContentType : 'Math y Cynnwys Cynghorol', + cssClasses : 'Dosbarthiadau Dalen Arddull', + charset : 'Set nodau\'r Adnodd Cysylltiedig', + styles : 'Arddull', + rel : 'Perthynas', + selectAnchor : 'Dewiswch Angor', + anchorName : 'Gan Enw\'r Angor', + anchorId : 'Gan Id yr Elfen', + emailAddress : 'Cyfeiriad E-Bost', + emailSubject : 'Testun y Message Subject', + emailBody : 'Pwnc y Neges', + noAnchors : '(Dim angorau ar gael yn y ddogfen)', + noUrl : 'Teipiwch URL y ddolen', + noEmail : 'Teipiwch gyfeiriad yr e-bost' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Angor', + menu : 'Golygwch yr Angor', + title : 'Priodweddau\'r Angor', + name : 'Enw\'r Angor', + errorName : 'Teipiwch enw\'r angor', + remove : 'Tynnwch yr Angor' + }, + + // List style dialog + list: + { + numberedTitle : 'Priodweddau Rhestr Rifol', + bulletedTitle : 'Priodweddau Rhestr Fwled', + type : 'Math', + start : 'Dechrau', + validateStartNumber :'Rhaid bod y rhif cychwynnol yn gyfanrif.', + circle : 'Cylch', + disc : 'Disg', + square : 'Sgwâr', + none : 'Dim', + notset : '<heb osod>', + armenian : 'Rhifau Armeneg', + georgian : 'Rhifau Sioraidd (an, ban, gan, ayyb.)', + lowerRoman : 'Rhufeinig Is (i, ii, iii, iv, v, ayyb.)', + upperRoman : 'Rhufeinig Uwch (I, II, III, IV, V, ayyb.)', + lowerAlpha : 'Alffa Is (a, b, c, d, e, ayyb.)', + upperAlpha : 'Alffa Uwch (A, B, C, D, E, ayyb.)', + lowerGreek : 'Groeg Is (alpha, beta, gamma, ayyb.)', + decimal : 'Degol (1, 2, 3, ayyb.)', + decimalLeadingZero : 'Degol â sero arweiniol (01, 02, 03, ayyb.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Chwilio ac Amnewid', + find : 'Chwilio', + replace : 'Amnewid', + findWhat : 'Chwilio\'r term:', + replaceWith : 'Amnewid gyda:', + notFoundMsg : 'Nid oedd y testun wedi\'i ddarganfod.', + matchCase : 'Cyfateb i\'r cas', + matchWord : 'Cyfateb gair cyfan', + matchCyclic : 'Cyfateb cylchol', + replaceAll : 'Amnewid pob un', + replaceSuccessMsg : 'Amnewidiwyd %1 achlysur.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabl', + title : 'Nodweddion Tabl', + menu : 'Nodweddion Tabl', + deleteTable : 'Dileu Tabl', + rows : 'Rhesi', + columns : 'Colofnau', + border : 'Maint yr Ymyl', + widthPx : 'picsel', + widthPc : 'y cant', + widthUnit : 'uned lled', + cellSpace : 'Bylchu\'r gell', + cellPad : 'Padio\'r gell', + caption : 'Pennawd', + summary : 'Crynodeb', + headers : 'Penynnau', + headersNone : 'Dim', + headersColumn : 'Colofn gyntaf', + headersRow : 'Rhes gyntaf', + headersBoth : 'Y Ddau', + invalidRows : 'Mae\'n rhaid cael o leiaf un rhes.', + invalidCols : 'Mae\'n rhaid cael o leiaf un golofn.', + invalidBorder : 'Mae\'n rhaid i faint yr ymyl fod yn rhif.', + invalidWidth : 'Mae\'n rhaid i led y tabl fod yn rhif.', + invalidHeight : 'Mae\'n rhaid i uchder y tabl fod yn rhif.', + invalidCellSpacing : 'Mae\'n rhaid i fylchiad y gell fod yn rhif positif.', + invalidCellPadding : 'Mae\'n rhaid i badiad y gell fod yn rhif positif.', + + cell : + { + menu : 'Cell', + insertBefore : 'Mewnosod Cell Cyn', + insertAfter : 'Mewnosod Cell Ar Ãl', + deleteCell : 'Dileu Celloedd', + merge : 'Cyfuno Celloedd', + mergeRight : 'Cyfuno i\'r Dde', + mergeDown : 'Cyfuno i Lawr', + splitHorizontal : 'Hollti\'r Gell yn Lorweddol', + splitVertical : 'Hollti\'r Gell yn Fertigol', + title : 'Priodweddau\'r Gell', + cellType : 'Math y Gell', + rowSpan : 'Rhychwant Rhesi', + colSpan : 'Rhychwant Colofnau', + wordWrap : 'Lapio Geiriau', + hAlign : 'Aliniad Llorweddol', + vAlign : 'Aliniad Fertigol', + alignBaseline : 'Baslinell', + bgColor : 'Lliw Cefndir', + borderColor : 'Lliw Ymyl', + data : 'Data', + header : 'Pennyn', + yes : 'Ie', + no : 'Na', + invalidWidth : 'Mae\'n rhaid i led y gell fod yn rhif.', + invalidHeight : 'Mae\'n rhaid i uchder y gell fod yn rhif.', + invalidRowSpan : 'Mae\'n rhaid i rychwant y rhesi fod yn gyfanrif.', + invalidColSpan : 'Mae\'n rhaid i rychwant y colofnau fod yn gyfanrif.', + chooseColor : 'Choose' + }, + + row : + { + menu : 'Rhes', + insertBefore : 'Mewnosod Rhes Cyn', + insertAfter : 'Mewnosod Rhes Ar Ãl', + deleteRow : 'Dileu Rhesi' + }, + + column : + { + menu : 'Colofn', + insertBefore : 'Mewnosod Colofn Cyn', + insertAfter : 'Mewnosod Colofn Ar Ãl', + deleteColumn : 'Dileu Colofnau' + } + }, + + // Button Dialog. + button : + { + title : 'Priodweddau Botymau', + text : 'Testun (Gwerth)', + type : 'Math', + typeBtn : 'Botwm', + typeSbm : 'Gyrru', + typeRst : 'Ailosod' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Priodweddau Blwch Ticio', + radioTitle : 'Priodweddau Botwm Radio', + value : 'Gwerth', + selected : 'Dewiswyd' + }, + + // Form Dialog. + form : + { + title : 'Priodweddau Ffurflen', + menu : 'Priodweddau Ffurflen', + action : 'Gweithred', + method : 'Dull', + encoding : 'Amgodio' + }, + + // Select Field Dialog. + select : + { + title : 'Priodweddau Maes Dewis', + selectInfo : 'Gwyb Dewis', + opAvail : 'Opsiynau ar Gael', + value : 'Gwerth', + size : 'Maint', + lines : 'llinellau', + chkMulti : 'Caniatà u aml-ddewisiadau', + opText : 'Testun', + opValue : 'Gwerth', + btnAdd : 'Ychwanegu', + btnModify : 'Newid', + btnUp : 'Lan', + btnDown : 'Lawr', + btnSetValue : 'Gosod fel gwerth a ddewiswyd', + btnDelete : 'Dileu' + }, + + // Textarea Dialog. + textarea : + { + title : 'Priodweddau Ardal Testun', + cols : 'Colofnau', + rows : 'Rhesi' + }, + + // Text Field Dialog. + textfield : + { + title : 'Priodweddau Maes Testun', + name : 'Enw', + value : 'Gwerth', + charWidth : 'Lled Nod', + maxChars : 'Uchafswm y Nodau', + type : 'Math', + typeText : 'Testun', + typePass : 'Cyfrinair' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Priodweddau Maes Cudd', + name : 'Enw', + value : 'Gwerth' + }, + + // Image Dialog. + image : + { + title : 'Priodweddau Delwedd', + titleButton : 'Priodweddau Botwm Delwedd', + menu : 'Priodweddau Delwedd', + infoTab : 'Gwyb Delwedd', + btnUpload : 'Anfon i\'r Gweinydd', + upload : 'lanlwytho', + alt : 'Testun Amgen', + lockRatio : 'Cloi Cymhareb', + resetSize : 'Ailosod Maint', + border : 'Ymyl', + hSpace : 'BwlchLl', + vSpace : 'BwlchF', + alertUrl : 'Rhowch URL y ddelwedd', + linkTab : 'Dolen', + button2Img : 'Ydych am drawsffurfio\'r botwm ddelwedd hwn ar ddelwedd syml?', + img2Button : 'Ydych am drawsffurfio\'r ddelwedd hon ar fotwm delwedd?', + urlMissing : 'URL tarddle\'r ddelwedd ar goll.', + validateBorder : 'Rhaid i\'r ymyl fod yn gyfanrif.', + validateHSpace : 'Rhaid i\'r HSpace fod yn gyfanrif.', + validateVSpace : 'Rhaid i\'r VSpace fod yn gyfanrif.' + }, + + // Flash Dialog + flash : + { + properties : 'Priodweddau Flash', + propertiesTab : 'Priodweddau', + title : 'Priodweddau Flash', + chkPlay : 'AwtoChwarae', + chkLoop : 'Lwpio', + chkMenu : 'Galluogi Dewislen Flash', + chkFull : 'Caniatà u Sgrin Llawn', + scale : 'Graddfa', + scaleAll : 'Dangos pob', + scaleNoBorder : 'Dim Ymyl', + scaleFit : 'Ffit Union', + access : 'Mynediad Sgript', + accessAlways : 'Pob amser', + accessSameDomain: 'R\'un parth', + accessNever : 'Byth', + alignAbsBottom : 'Gwaelod Abs', + alignAbsMiddle : 'Canol Abs', + alignBaseline : 'Baslinell', + alignTextTop : 'Testun Top', + quality : 'Ansawdd', + qualityBest : 'Gorau', + qualityHigh : 'Uchel', + qualityAutoHigh : 'Uchel Awto', + qualityMedium : 'Canolig', + qualityAutoLow : 'Isel Awto', + qualityLow : 'Isel', + windowModeWindow: 'Ffenestr', + windowModeOpaque: 'Afloyw', + windowModeTransparent : 'Tryloyw', + windowMode : 'Modd ffenestr', + flashvars : 'Newidynnau ar gyfer Flash', + bgcolor : 'Lliw cefndir', + hSpace : 'BwlchLl', + vSpace : 'BwlchF', + validateSrc : 'Ni all yr URL fod yn wag.', + validateHSpace : 'Rhaid i\'r BwlchLl fod yn rhif.', + validateVSpace : 'Rhaid i\'r BwlchF fod yn rhif.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Gwirio Sillafu', + title : 'Gwirio Sillafu', + notAvailable : 'Nid yw\'r gwasanaeth hwn ar gael yn bresennol.', + errorLoading : 'Error loading application service host: %s.', + notInDic : 'Nid i\'w gael yn y geiriadur', + changeTo : 'Newid i', + btnIgnore : 'Anwybyddu Un', + btnIgnoreAll : 'Anwybyddu Pob', + btnReplace : 'Amnewid Un', + btnReplaceAll : 'Amnewid Pob', + btnUndo : 'Dadwneud', + noSuggestions : '- Dim awgrymiadau -', + progress : 'Gwirio sillafu yn ar y gweill...', + noMispell : 'Gwirio sillafu wedi gorffen: Dim camsillaf.', + noChanges : 'Gwirio sillafu wedi gorffen: Dim newidiadau', + oneChange : 'Gwirio sillafu wedi gorffen: Newidiwyd 1 gair', + manyChanges : 'Gwirio sillafu wedi gorffen: Newidiwyd %1 gair', + ieSpellDownload : 'Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?' + }, + + smiley : + { + toolbar : 'Gwenoglun', + title : 'Mewnosod Gwenoglun', + options : 'Opsiynau Gwenogluniau' + }, + + elementsPath : + { + eleLabel : 'Llwybr elfennau', + eleTitle : 'Elfen %1' + }, + + numberedlist : 'Mewnosod/Tynnu Rhestr Rhifol', + bulletedlist : 'Mewnosod/Tynnu Rhestr Bwled', + indent : 'Cynyddu\'r Mewnoliad', + outdent : 'Lleihau\'r Mewnoliad', + + justify : + { + left : 'Alinio i\'r Chwith', + center : 'Alinio i\'r Canol', + right : 'Alinio i\'r Dde', + block : 'Aliniad Bloc' + }, + + blockquote : 'Dyfyniad bloc', + + clipboard : + { + title : 'Gludo', + cutError : 'Nid yw gosodiadau diogelwch eich porwr yn caniatà u\'r golygydd i gynnal \'gweithredoedd torri\' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).', + copyError : 'Nid yw gosodiadau diogelwch eich porwr yn caniatà u\'r golygydd i gynnal \'gweithredoedd copïo\' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).', + pasteMsg : 'Gludwch i mewn i\'r blwch canlynol gan ddefnyddio\'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.', + securityMsg : 'Oherwydd gosodiadau diogelwch eich porwr, nid yw\'r porwr yn gallu ennill mynediad i\'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i\'r ffenestr hon.', + pasteArea : 'Ardal Gludo' + }, + + pastefromword : + { + confirmCleanup : 'Mae\'r testun rydych chi am ludo wedi\'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?', + toolbar : 'Gludo o Word', + title : 'Gludo o Word', + error : 'Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol' + }, + + pasteText : + { + button : 'Gludo fel testun plaen', + title : 'Gludo fel Testun Plaen' + }, + + templates : + { + button : 'Templedi', + title : 'Templedi Cynnwys', + options : 'Opsiynau Templedi', + insertOption : 'Amnewid y cynnwys go iawn', + selectPromptMsg : 'Dewiswch dempled i\'w agor yn y golygydd', + emptyListMsg : '(Dim templedi wedi\'u diffinio)' + }, + + showBlocks : 'Dangos Blociau', + + stylesCombo : + { + label : 'Arddulliau', + panelTitle : 'Arddulliau Fformatio', + panelTitle1 : 'Arddulliau Bloc', + panelTitle2 : 'Arddulliau Mewnol', + panelTitle3 : 'Arddulliau Gwrthrych' + }, + + format : + { + label : 'Fformat', + panelTitle : 'Fformat Paragraff', + + tag_p : 'Normal', + tag_pre : 'Wedi\'i Fformatio', + tag_address : 'Cyfeiriad', + tag_h1 : 'Pennawd 1', + tag_h2 : 'Pennawd 2', + tag_h3 : 'Pennawd 3', + tag_h4 : 'Pennawd 4', + tag_h5 : 'Pennawd 5', + tag_h6 : 'Pennawd 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Creu Cynhwysydd Div', + toolbar : 'Creu Cynhwysydd Div', + cssClassInputLabel : 'Dosbarthiadau Ffeil Ddiwyg', + styleSelectLabel : 'Arddull', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Cod Iaith', + inlineStyleInputLabel : 'Arddull Mewn Llinell', + advisoryTitleInputLabel : 'Teitl Cynghorol', + langDirLabel : 'Cyfeiriad yr Iaith', + langDirLTRLabel : 'Chwith i\'r Dde (LTR)', + langDirRTLLabel : 'Dde i\'r Chwith (RTL)', + edit : 'Golygu Div', + remove : 'Tynnu Div' + }, + + iframe : + { + title : 'Priodweddau IFrame', + toolbar : 'IFrame', + noUrl : 'Rhowch fath URL yr iframe', + scrolling : 'Galluogi bariau sgrolio', + border : 'Dangos ymyl y ffrâm' + }, + + font : + { + label : 'Ffont', + voiceLabel : 'Ffont', + panelTitle : 'Enw\'r Ffont' + }, + + fontSize : + { + label : 'Maint', + voiceLabel : 'Maint y Ffont', + panelTitle : 'Maint y Ffont' + }, + + colorButton : + { + textColorTitle : 'Lliw Testun', + bgColorTitle : 'Lliw Cefndir', + panelTitle : 'Lliwiau', + auto : 'Awtomatig', + more : 'Mwy o Liwiau...' + }, + + colors : + { + '000' : 'Du', + '800000' : 'Marwn', + '8B4513' : 'Brown Cyfrwy', + '2F4F4F' : 'Llechen Tywyll', + '008080' : 'Corhwyad', + '000080' : 'Nefi', + '4B0082' : 'Indigo', + '696969' : 'Llwyd Pwl', + 'B22222' : 'Bric Tân', + 'A52A2A' : 'Brown', + 'DAA520' : 'Rhoden Aur', + '006400' : 'Gwyrdd Tywyll', + '40E0D0' : 'Gwyrddlas', + '0000CD' : 'Glas Canolig', + '800080' : 'Porffor', + '808080' : 'Llwyd', + 'F00' : 'Coch', + 'FF8C00' : 'Oren Tywyll', + 'FFD700' : 'Aur', + '008000' : 'Gwyrdd', + '0FF' : 'Cyan', + '00F' : 'Glas', + 'EE82EE' : 'Fioled', + 'A9A9A9' : 'Llwyd Tywyll', + 'FFA07A' : 'Samwn Golau', + 'FFA500' : 'Oren', + 'FFFF00' : 'Melyn', + '00FF00' : 'Leim', + 'AFEEEE' : 'Gwyrddlas Golau', + 'ADD8E6' : 'Glas Golau', + 'DDA0DD' : 'Eirinen', + 'D3D3D3' : 'Llwyd Golau', + 'FFF0F5' : 'Gwrid Lafant', + 'FAEBD7' : 'Gwyn Hynafol', + 'FFFFE0' : 'Melyn Golau', + 'F0FFF0' : 'Melwn Gwyrdd Golau', + 'F0FFFF' : 'Aswr', + 'F0F8FF' : 'Glas Alys', + 'E6E6FA' : 'Lafant', + 'FFF' : 'Gwyn' + }, + + scayt : + { + title : 'Gwirio\'r Sillafu Wrth Deipio', + opera_title : 'Heb ei gynnal gan Opera', + enable : 'Galluogi SCAYT', + disable : 'Analluogi SCAYT', + about : 'Ynghylch SCAYT', + toggle : 'Togl SCAYT', + options : 'Opsiynau', + langs : 'Ieithoedd', + moreSuggestions : 'Awgrymiadau pellach', + ignore : 'Anwybyddu', + ignoreAll : 'Anwybyddu pob', + addWord : 'Ychwanegu Gair', + emptyDic : 'Ni ddylai enw\'r geiriadur fod yn wag.', + + optionsTab : 'Opsiynau', + allCaps : 'Anwybyddu Geiriau Nodau Uwch i Gyd', + ignoreDomainNames : 'Anwybyddu Enwau Parth', + mixedCase : 'Anwybyddu Geiriau â Chymysgedd Nodau Uwch ac Is', + mixedWithDigits : 'Anwybyddu Geiriau â Rhifau', + + languagesTab : 'Ieithoedd', + + dictionariesTab : 'Geiriaduron', + dic_field_name : 'Enw\'r geiriadur', + dic_create : 'Creu', + dic_restore : 'Adfer', + dic_delete : 'Dileu', + dic_rename : 'Ailenwi', + dic_info : 'Ar y cychwyn, caiff y Geiriadur ei storio mewn Cwci. Er, mae terfyn ar faint cwcis. Pan fydd Gweiriadur Defnyddiwr yn tyfu tu hwnt i gyfyngiadau maint Cwci, caiff y geiriadur ei storio ar ein gweinydd ni. er mwyn storio eich geiriadur poersonol chi ar ein gweinydd, bydd angen i chi osod enw ar gyfer y geiriadur. Os oes geiriadur \'da chi ar ein gweinydd yn barod, teipiwch ei enw a chliciwch y botwm Adfer.', + + aboutTab : 'Ynghylch' + }, + + about : + { + title : 'Ynghylch CKEditor', + dlgTitle : 'Ynghylch CKEditor', + help : 'Gwirio $1 am gymorth.', + userGuide : 'Canllawiau Defnyddiwr CKEditor', + moreInfo : 'Am wybodaeth ynghylch trwyddedau, ewch i\'n gwefan:', + copy : 'Hawlfraint © $1. Cedwir pob hawl.' + }, + + maximize : 'Mwyhau', + minimize : 'Lleihau', + + fakeobjects : + { + anchor : 'Angor', + flash : 'Animeiddiant Flash', + iframe : 'IFrame', + hiddenfield : 'Maes Cudd', + unknown : 'Gwrthrych Anhysbys' + }, + + resize : 'Llusgo i ailfeintio', + + colordialog : + { + title : 'Dewis lliw', + options : 'Opsiynau Lliw', + highlight : 'Uwcholeuo', + selected : 'Dewiswyd', + clear : 'Clirio' + }, + + toolbarCollapse : 'Cyfangu\'r Bar Offer', + toolbarExpand : 'Ehangu\'r Bar Offer', + + toolbarGroups : + { + document : 'Dogfen', + clipboard : 'Clipfwrdd/Dadwneud', + editing : 'Golygu', + forms : 'Ffurflenni', + basicstyles : 'Arddulliau Sylfaenol', + paragraph : 'Paragraff', + links : 'Dolenni', + insert : 'Mewnosod', + styles : 'Arddulliau', + colors : 'Lliwiau', + tools : 'Offer' + }, + + bidi : + { + ltr : 'Cyfeiriad testun o\'r chwith i\'r dde', + rtl : 'Cyfeiriad testun o\'r dde i\'r chwith' + }, + + docprops : + { + label : 'Priodweddau Dogfen', + title : 'Priodweddau Dogfen', + design : 'Cynllunio', + meta : 'Tagiau Meta', + chooseColor : 'Dewis', + other : 'Arall...', + docTitle : 'Teitl y Dudalen', + charset : 'Amgodio Set Nodau', + charsetOther : 'Amgodio Set Nodau Arall', + charsetASCII : 'ASCII', + charsetCE : 'Ewropeaidd Canol', + charsetCT : 'Tsieinëeg Traddodiadol (Big5)', + charsetCR : 'Syrilig', + charsetGR : 'Groeg', + charsetJP : 'Siapanëeg', + charsetKR : 'Corëeg', + charsetTR : 'Tyrceg', + charsetUN : 'Unicode (UTF-8)', + charsetWE : 'Ewropeaidd Gorllewinol', + docType : 'Pennawd Math y Ddogfen', + docTypeOther : 'Pennawd Math y Ddogfen Arall', + xhtmlDec : 'Cynnwys Datganiadau XHTML', + bgColor : 'Lliw Cefndir', + bgImage : 'URL Delwedd Cefndir', + bgFixed : 'Cefndir Sefydlog (Ddim yn Sgrolio)', + txtColor : 'Lliw y Testun', + margin : 'Ffin y Dudalen', + marginTop : 'Brig', + marginLeft : 'Chwith', + marginRight : 'Dde', + marginBottom : 'Gwaelod', + metaKeywords : 'Allweddeiriau Indecsio Dogfen (gwahanu gyda choma)', + metaDescription : 'Disgrifiad y Ddogfen', + metaAuthor : 'Awdur', + metaCopyright : 'Hawlfraint', + previewHtml : '<p>Dyma ychydig o <strong>destun sampl</strong>. Rydych chi\'n defnyddio <a href="javascript:void(0)">CKEditor</a>.</p>' + } +}; diff --git a/_source/lang/da.js b/_source/lang/da.js new file mode 100644 index 0000000..a5ba5dc --- /dev/null +++ b/_source/lang/da.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Danish language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['da'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Kilde', + newPage : 'Ny side', + save : 'Gem', + preview : 'Vis eksempel', + cut : 'Klip', + copy : 'Kopiér', + paste : 'Indsæt', + print : 'Udskriv', + underline : 'Understreget', + bold : 'Fed', + italic : 'Kursiv', + selectAll : 'Vælg alt', + removeFormat : 'Fjern formatering', + strike : 'Gennemstreget', + subscript : 'Sænket skrift', + superscript : 'Hævet skrift', + horizontalrule : 'Indsæt vandret streg', + pagebreak : 'Indsæt sideskift', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Fjern hyperlink', + undo : 'Fortryd', + redo : 'Annullér fortryd', + + // Common messages and labels. + common : + { + browseServer : 'Gennemse...', + url : 'URL', + protocol : 'Protokol', + upload : 'Upload', + uploadSubmit : 'Upload', + image : 'Indsæt billede', + flash : 'Indsæt Flash', + form : 'Indsæt formular', + checkbox : 'Indsæt afkrydsningsfelt', + radio : 'Indsæt alternativknap', + textField : 'Indsæt tekstfelt', + textarea : 'Indsæt tekstboks', + hiddenField : 'Indsæt skjult felt', + button : 'Indsæt knap', + select : 'Indsæt liste', + imageButton : 'Indsæt billedknap', + notSet : '<intet valgt>', + id : 'Id', + name : 'Navn', + langDir : 'Tekstretning', + langDirLtr : 'Fra venstre mod højre (LTR)', + langDirRtl : 'Fra højre mod venstre (RTL)', + langCode : 'Sprogkode', + longDescr : 'Udvidet beskrivelse', + cssClass : 'Typografiark (CSS)', + advisoryTitle : 'Titel', + cssStyle : 'Typografi (CSS)', + ok : 'OK', + cancel : 'Annullér', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'Generelt', + advancedTab : 'Avanceret', + validateNumberFailed : 'Værdien er ikke et tal.', + confirmNewPage : 'Alt indhold, der ikke er blevet gemt, vil gÃ¥ tabt. Er du sikker pÃ¥, at du vil indlæse en ny side?', + confirmCancel : 'Nogle af indstillingerne er blevet ændret. Er du sikker pÃ¥, at du vil lukke vinduet?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Bredde', + height : 'Højde', + align : 'Justering', + alignLeft : 'Venstre', + alignRight : 'Højre', + alignCenter : 'Centreret', + alignTop : 'Ãverst', + alignMiddle : 'Centreret', + alignBottom : 'Nederst', + invalidHeight : 'Højde skal være et tal.', + invalidWidth : 'Bredde skal være et tal.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, ikke tilgængelig</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Indsæt symbol', + title : 'Vælg symbol', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Indsæt/redigér hyperlink', + other : '<anden>', + menu : 'Redigér hyperlink', + title : 'Egenskaber for hyperlink', + info : 'Generelt', + target : 'MÃ¥l', + upload : 'Upload', + advanced : 'Avanceret', + type : 'Type', + toUrl : 'URL', // MISSING + toAnchor : 'Bogmærke pÃ¥ denne side', + toEmail : 'E-mail', + targetFrame : '<ramme>', + targetPopup : '<popup vindue>', + targetFrameName : 'Destinationsvinduets navn', + targetPopupName : 'Popup vinduets navn', + popupFeatures : 'Egenskaber for popup', + popupResizable : 'Justérbar', + popupStatusBar : 'Statuslinje', + popupLocationBar: 'Adresselinje', + popupToolbar : 'Værktøjslinje', + popupMenuBar : 'Menulinje', + popupFullScreen : 'Fuld skærm (IE)', + popupScrollBars : 'Scrollbar', + popupDependent : 'Koblet/dependent (Netscape)', + popupLeft : 'Position fra venstre', + popupTop : 'Position fra toppen', + id : 'Id', + langDir : 'Tekstretning', + langDirLTR : 'Fra venstre mod højre (LTR)', + langDirRTL : 'Fra højre mod venstre (RTL)', + acccessKey : 'Genvejstast', + name : 'Navn', + langCode : 'Tekstretning', + tabIndex : 'Tabulator indeks', + advisoryTitle : 'Titel', + advisoryContentType : 'Indholdstype', + cssClasses : 'Typografiark', + charset : 'Tegnsæt', + styles : 'Typografi', + rel : 'Relationship', // MISSING + selectAnchor : 'Vælg et anker', + anchorName : 'Efter anker navn', + anchorId : 'Efter element Id', + emailAddress : 'E-mail adresse', + emailSubject : 'Emne', + emailBody : 'Besked', + noAnchors : '(Ingen bogmærker i dokumentet)', + noUrl : 'Indtast hyperlink URL!', + noEmail : 'Indtast e-mail adresse!' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Indsæt/redigér bogmærke', + menu : 'Egenskaber for bogmærke', + title : 'Egenskaber for bogmærke', + name : 'Bogmærke navn', + errorName : 'Indtast bogmærke navn', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Søg og erstat', + find : 'Søg', + replace : 'Erstat', + findWhat : 'Søg efter:', + replaceWith : 'Erstat med:', + notFoundMsg : 'Søgeteksten blev ikke fundet', + matchCase : 'Forskel pÃ¥ store og smÃ¥ bogstaver', + matchWord : 'Kun hele ord', + matchCyclic : 'Match cyklisk', + replaceAll : 'Erstat alle', + replaceSuccessMsg : '%1 forekomst(er) erstattet.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabel', + title : 'Egenskaber for tabel', + menu : 'Egenskaber for tabel', + deleteTable : 'Slet tabel', + rows : 'Rækker', + columns : 'Kolonner', + border : 'Rammebredde', + widthPx : 'pixels', + widthPc : 'procent', + widthUnit : 'width unit', // MISSING + cellSpace : 'Celleafstand', + cellPad : 'Cellemargen', + caption : 'Titel', + summary : 'Resumé', + headers : 'Header', + headersNone : 'Ingen', + headersColumn : 'Første kolonne', + headersRow : 'Første række', + headersBoth : 'Begge', + invalidRows : 'Antallet af rækker skal være større end 0.', + invalidCols : 'Antallet af kolonner skal være større end 0.', + invalidBorder : 'Rammetykkelse skal være et tal.', + invalidWidth : 'Tabelbredde skal være et tal.', + invalidHeight : 'Tabelhøjde skal være et tal.', + invalidCellSpacing : 'Celleafstand skal være et tal.', + invalidCellPadding : 'Cellemargen skal være et tal.', + + cell : + { + menu : 'Celle', + insertBefore : 'Indsæt celle før', + insertAfter : 'Indsæt celle efter', + deleteCell : 'Slet celle', + merge : 'Flet celler', + mergeRight : 'Flet til højre', + mergeDown : 'Flet nedad', + splitHorizontal : 'Del celle vandret', + splitVertical : 'Del celle lodret', + title : 'Celleegenskaber', + cellType : 'Celletype', + rowSpan : 'Række span (rows span)', + colSpan : 'Kolonne span (columns span)', + wordWrap : 'Tekstombrydning', + hAlign : 'Vandret justering', + vAlign : 'Lodret justering', + alignBaseline : 'Grundlinje', + bgColor : 'Baggrundsfarve', + borderColor : 'Rammefarve', + data : 'Data', + header : 'Header', + yes : 'Ja', + no : 'Nej', + invalidWidth : 'Cellebredde skal være et tal.', + invalidHeight : 'Cellehøjde skal være et tal.', + invalidRowSpan : 'Række span skal være et heltal.', + invalidColSpan : 'Kolonne span skal være et heltal.', + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Række', + insertBefore : 'Indsæt række før', + insertAfter : 'Indsæt række efter', + deleteRow : 'Slet række' + }, + + column : + { + menu : 'Kolonne', + insertBefore : 'Indsæt kolonne før', + insertAfter : 'Indsæt kolonne efter', + deleteColumn : 'Slet kolonne' + } + }, + + // Button Dialog. + button : + { + title : 'Egenskaber for knap', + text : 'Tekst', + type : 'Type', + typeBtn : 'Knap', + typeSbm : 'Send', + typeRst : 'Nulstil' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Egenskaber for afkrydsningsfelt', + radioTitle : 'Egenskaber for alternativknap', + value : 'Værdi', + selected : 'Valgt' + }, + + // Form Dialog. + form : + { + title : 'Egenskaber for formular', + menu : 'Egenskaber for formular', + action : 'Handling', + method : 'Metode', + encoding : 'Kodning (encoding)' + }, + + // Select Field Dialog. + select : + { + title : 'Egenskaber for liste', + selectInfo : 'Generelt', + opAvail : 'Valgmuligheder', + value : 'Værdi', + size : 'Størrelse', + lines : 'Linjer', + chkMulti : 'Tillad flere valg', + opText : 'Tekst', + opValue : 'Værdi', + btnAdd : 'Tilføj', + btnModify : 'Redigér', + btnUp : 'Op', + btnDown : 'Ned', + btnSetValue : 'Sæt som valgt', + btnDelete : 'Slet' + }, + + // Textarea Dialog. + textarea : + { + title : 'Egenskaber for tekstboks', + cols : 'Kolonner', + rows : 'Rækker' + }, + + // Text Field Dialog. + textfield : + { + title : 'Egenskaber for tekstfelt', + name : 'Navn', + value : 'Værdi', + charWidth : 'Bredde (tegn)', + maxChars : 'Max. antal tegn', + type : 'Type', + typeText : 'Tekst', + typePass : 'Adgangskode' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Egenskaber for skjult felt', + name : 'Navn', + value : 'Værdi' + }, + + // Image Dialog. + image : + { + title : 'Egenskaber for billede', + titleButton : 'Egenskaber for billedknap', + menu : 'Egenskaber for billede', + infoTab : 'Generelt', + btnUpload : 'Upload', + upload : 'Upload', + alt : 'Alternativ tekst', + lockRatio : 'LÃ¥s størrelsesforhold', + resetSize : 'Nulstil størrelse', + border : 'Ramme', + hSpace : 'Vandret margen', + vSpace : 'Lodret margen', + alertUrl : 'Indtast stien til billedet', + linkTab : 'Hyperlink', + button2Img : 'Vil du lave billedknappen om til et almindeligt billede?', + img2Button : 'Vil du lave billedet om til en billedknap?', + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Egenskaber for Flash', + propertiesTab : 'Egenskaber', + title : 'Egenskaber for Flash', + chkPlay : 'Automatisk afspilning', + chkLoop : 'Gentagelse', + chkMenu : 'Vis Flash menu', + chkFull : 'Tillad fuldskærm', + scale : 'Skalér', + scaleAll : 'Vis alt', + scaleNoBorder : 'Ingen ramme', + scaleFit : 'Tilpas størrelse', + access : 'Script adgang', + accessAlways : 'Altid', + accessSameDomain: 'Samme domæne', + accessNever : 'Aldrig', + alignAbsBottom : 'Absolut nederst', + alignAbsMiddle : 'Absolut centreret', + alignBaseline : 'Grundlinje', + alignTextTop : 'Toppen af teksten', + quality : 'Kvalitet', + qualityBest : 'Bedste', + qualityHigh : 'Høj', + qualityAutoHigh : 'Auto høj', + qualityMedium : 'Medium', + qualityAutoLow : 'Auto lav', + qualityLow : 'Lav', + windowModeWindow: 'Vindue', + windowModeOpaque: 'Gennemsigtig (opaque)', + windowModeTransparent : 'Transparent', + windowMode : 'Vinduestilstand', + flashvars : 'Variabler for Flash', + bgcolor : 'Baggrundsfarve', + hSpace : 'Vandret margen', + vSpace : 'Lodret margen', + validateSrc : 'Indtast hyperlink URL!', + validateHSpace : 'Vandret margen skal være et tal.', + validateVSpace : 'Lodret margen skal være et tal.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Stavekontrol', + title : 'Stavekontrol', + notAvailable : 'Stavekontrol er desværre ikke tilgængelig.', + errorLoading : 'Fejl ved indlæsning af host: %s.', + notInDic : 'Ikke i ordbogen', + changeTo : 'Forslag', + btnIgnore : 'Ignorér', + btnIgnoreAll : 'Ignorér alle', + btnReplace : 'Erstat', + btnReplaceAll : 'Erstat alle', + btnUndo : 'Tilbage', + noSuggestions : '(ingen forslag)', + progress : 'Stavekontrollen arbejder...', + noMispell : 'Stavekontrol færdig: Ingen fejl fundet', + noChanges : 'Stavekontrol færdig: Ingen ord ændret', + oneChange : 'Stavekontrol færdig: Et ord ændret', + manyChanges : 'Stavekontrol færdig: %1 ord ændret', + ieSpellDownload : 'Stavekontrol ikke installeret. Vil du installere den nu?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Vælg smiley', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' + }, + + numberedlist : 'Talopstilling', + bulletedlist : 'Punktopstilling', + indent : 'Forøg indrykning', + outdent : 'Formindsk indrykning', + + justify : + { + left : 'Venstrestillet', + center : 'Centreret', + right : 'Højrestillet', + block : 'Lige margener' + }, + + blockquote : 'Blokcitat', + + clipboard : + { + title : 'Indsæt', + cutError : 'Din browsers sikkerhedsindstillinger tillader ikke editoren at fÃ¥ automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).', + copyError : 'Din browsers sikkerhedsindstillinger tillader ikke editoren at fÃ¥ automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).', + pasteMsg : 'Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik pÃ¥ <STRONG>OK</STRONG>.', + securityMsg : 'Din browsers sikkerhedsindstillinger tillader ikke editoren at fÃ¥ automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?', + toolbar : 'Indsæt fra Word', + title : 'Indsæt fra Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Indsæt som ikke-formateret tekst', + title : 'Indsæt som ikke-formateret tekst' + }, + + templates : + { + button : 'Skabeloner', + title : 'Indholdsskabeloner', + options : 'Template Options', // MISSING + insertOption : 'Erstat det faktiske indhold', + selectPromptMsg : 'Vælg den skabelon, som skal Ã¥bnes i editoren (nuværende indhold vil blive overskrevet):', + emptyListMsg : '(Der er ikke defineret nogen skabelon)' + }, + + showBlocks : 'Vis afsnitsmærker', + + stylesCombo : + { + label : 'Typografi', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block typografi', + panelTitle2 : 'Inline typografi', + panelTitle3 : 'Object typografi' + }, + + format : + { + label : 'Formatering', + panelTitle : 'Formatering', + + tag_p : 'Normal', + tag_pre : 'Formateret', + tag_address : 'Adresse', + tag_h1 : 'Overskrift 1', + tag_h2 : 'Overskrift 2', + tag_h3 : 'Overskrift 3', + tag_h4 : 'Overskrift 4', + tag_h5 : 'Overskrift 5', + tag_h6 : 'Overskrift 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Skrifttype', + voiceLabel : 'Skrifttype', + panelTitle : 'Skrifttype' + }, + + fontSize : + { + label : 'Skriftstørrelse', + voiceLabel : 'Skriftstørrelse', + panelTitle : 'Skriftstørrelse' + }, + + colorButton : + { + textColorTitle : 'Tekstfarve', + bgColorTitle : 'Baggrundsfarve', + panelTitle : 'Colors', // MISSING + auto : 'Automatisk', + more : 'Flere farver...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Stavekontrol mens du skriver', + opera_title : 'Not supported by Opera', // MISSING + enable : 'Aktivér SCAYT', + disable : 'Deaktivér SCAYT', + about : 'Om SCAYT', + toggle : 'Skift/toggle SCAYT', + options : 'Indstillinger', + langs : 'Sprog', + moreSuggestions : 'Flere forslag', + ignore : 'Ignorér', + ignoreAll : 'Ignorér alle', + addWord : 'Tilføj ord', + emptyDic : 'Ordbogsnavn mÃ¥ ikke være tom.', + + optionsTab : 'Indstillinger', + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Sprog', + + dictionariesTab : 'Ordbøger', + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'Om' + }, + + about : + { + title : 'Om CKEditor', + dlgTitle : 'Om CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For informationer omkring licens, se venligst vores hjemmeside (pÃ¥ engelsk):', + copy : 'Copyright © $1. Alle rettigheder forbeholdes.' + }, + + maximize : 'Maximér', + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anker', + flash : 'Flashanimation', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Ukendt objekt' + }, + + resize : 'Træk for at skalere', + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Egenskaber for dokument', + title : 'Egenskaber for dokument', + design : 'Design', // MISSING + meta : 'Meta Tags', // MISSING + chooseColor : 'Choose', // MISSING + other : '<anden>', + docTitle : 'Sidetitel', + charset : 'Tegnsæt kode', + charsetOther : 'Anden tegnsæt kode', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Centraleuropæisk', + charsetCT : 'Traditionel kinesisk (Big5)', + charsetCR : 'Kyrillisk', + charsetGR : 'Græsk', + charsetJP : 'Japansk', + charsetKR : 'Koreansk', + charsetTR : 'Tyrkisk', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Vesteuropæisk', + docType : 'Dokumenttype kategori', + docTypeOther : 'Anden dokumenttype kategori', + xhtmlDec : 'Inkludere XHTML deklartion', + bgColor : 'Baggrundsfarve', + bgImage : 'Baggrundsbillede URL', + bgFixed : 'FastlÃ¥st baggrund', + txtColor : 'Tekstfarve', + margin : 'Sidemargen', + marginTop : 'Ãverst', + marginLeft : 'Venstre', + marginRight : 'Højre', + marginBottom : 'Nederst', + metaKeywords : 'Dokument index nøgleord (kommasepareret)', + metaDescription : 'Dokument beskrivelse', + metaAuthor : 'Forfatter', + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/de.js b/_source/lang/de.js new file mode 100644 index 0000000..eccb369 --- /dev/null +++ b/_source/lang/de.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * German language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['de'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'WYSIWYG-Editor, %1, drücken Sie ALT 0 für Hilfe.', + + // ARIA descriptions. + toolbars : 'Editor Symbolleisten', + editor : 'WYSIWYG-Editor', + + // Toolbar buttons without dialogs. + source : 'Quellcode', + newPage : 'Neue Seite', + save : 'Speichern', + preview : 'Vorschau', + cut : 'Ausschneiden', + copy : 'Kopieren', + paste : 'Einfügen', + print : 'Drucken', + underline : 'Unterstrichen', + bold : 'Fett', + italic : 'Kursiv', + selectAll : 'Alles auswählen', + removeFormat : 'Formatierungen entfernen', + strike : 'Durchgestrichen', + subscript : 'Tiefgestellt', + superscript : 'Hochgestellt', + horizontalrule : 'Horizontale Linie einfügen', + pagebreak : 'Seitenumbruch einfügen', + pagebreakAlt : 'Seitenumbruch einfügen', + unlink : 'Link entfernen', + undo : 'Rückgängig', + redo : 'Wiederherstellen', + + // Common messages and labels. + common : + { + browseServer : 'Server durchsuchen', + url : 'URL', + protocol : 'Protokoll', + upload : 'Hochladen', + uploadSubmit : 'Zum Server senden', + image : 'Bild', + flash : 'Flash', + form : 'Formular', + checkbox : 'Checkbox', + radio : 'Radiobutton', + textField : 'Textfeld einzeilig', + textarea : 'Textfeld mehrzeilig', + hiddenField : 'Verstecktes Feld', + button : 'Klickbutton', + select : 'Auswahlfeld', + imageButton : 'Bildbutton', + notSet : '<nichts>', + id : 'ID', + name : 'Name', + langDir : 'Schreibrichtung', + langDirLtr : 'Links nach Rechts (LTR)', + langDirRtl : 'Rechts nach Links (RTL)', + langCode : 'Sprachenkürzel', + longDescr : 'Langform URL', + cssClass : 'Stylesheet Klasse', + advisoryTitle : 'Titel Beschreibung', + cssStyle : 'Style', + ok : 'OK', + cancel : 'Abbrechen', + close : 'SchlieÃen', + preview : 'Vorschau', + generalTab : 'Allgemein', + advancedTab : 'Erweitert', + validateNumberFailed : 'Dieser Wert ist keine Nummer.', + confirmNewPage : 'Alle nicht gespeicherten Ãnderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?', + confirmCancel : 'Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schlieÃen?', + options : 'Optionen', + target : 'Zielseite', + targetNew : 'Neues Fenster (_blank)', + targetTop : 'Oberstes Fenster (_top)', + targetSelf : 'Gleiches Fenster (_self)', + targetParent : 'Oberes Fenster (_parent)', + langDirLTR : 'Links nach Rechts (LNR)', + langDirRTL : 'Rechts nach Links (RNL)', + styles : 'Style', + cssClasses : 'Stylesheet Klasse', + width : 'Breite', + height : 'Höhe', + align : 'Ausrichtung', + alignLeft : 'Links', + alignRight : 'Rechts', + alignCenter : 'Zentriert', + alignTop : 'Oben', + alignMiddle : 'Mitte', + alignBottom : 'Unten', + invalidHeight : 'Höhe muss eine Zahl sein.', + invalidWidth : 'Breite muss eine Zahl sein.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, nicht verfügbar</span>' + }, + + contextmenu : + { + options : 'Kontextmenü Optionen' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Sonderzeichen einfügen/editieren', + title : 'Sonderzeichen auswählen', + options : 'Sonderzeichen Optionen' + }, + + // Link dialog. + link : + { + toolbar : 'Link einfügen/editieren', + other : '<andere>', + menu : 'Link editieren', + title : 'Link', + info : 'Link-Info', + target : 'Zielseite', + upload : 'Hochladen', + advanced : 'Erweitert', + type : 'Link-Typ', + toUrl : 'URL', + toAnchor : 'Anker in dieser Seite', + toEmail : 'E-Mail', + targetFrame : '<Frame>', + targetPopup : '<Pop-up Fenster>', + targetFrameName : 'Ziel-Fenster-Name', + targetPopupName : 'Pop-up Fenster-Name', + popupFeatures : 'Pop-up Fenster-Eigenschaften', + popupResizable : 'GröÃe änderbar', + popupStatusBar : 'Statusleiste', + popupLocationBar: 'Adress-Leiste', + popupToolbar : 'Symbolleiste', + popupMenuBar : 'Menü-Leiste', + popupFullScreen : 'Vollbild (IE)', + popupScrollBars : 'Rollbalken', + popupDependent : 'Abhängig (Netscape)', + popupLeft : 'Linke Position', + popupTop : 'Obere Position', + id : 'Id', + langDir : 'Schreibrichtung', + langDirLTR : 'Links nach Rechts (LTR)', + langDirRTL : 'Rechts nach Links (RTL)', + acccessKey : 'Zugriffstaste', + name : 'Name', + langCode : 'Sprachenkürzel', + tabIndex : 'Tab-Index', + advisoryTitle : 'Titel Beschreibung', + advisoryContentType : 'Inhaltstyp', + cssClasses : 'Stylesheet Klasse', + charset : 'Ziel-Zeichensatz', + styles : 'Style', + rel : 'Beziehung', + selectAnchor : 'Anker auswählen', + anchorName : 'nach Anker Name', + anchorId : 'nach Element Id', + emailAddress : 'E-Mail Addresse', + emailSubject : 'Betreffzeile', + emailBody : 'Nachrichtentext', + noAnchors : '(keine Anker im Dokument vorhanden)', + noUrl : 'Bitte geben Sie die Link-URL an', + noEmail : 'Bitte geben Sie e-Mail Adresse an' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Anker einfügen/editieren', + menu : 'Anker-Eigenschaften', + title : 'Anker-Eigenschaften', + name : 'Anker Name', + errorName : 'Bitte geben Sie den Namen des Ankers ein', + remove : 'Anker entfernen' + }, + + // List style dialog + list: + { + numberedTitle : 'Nummerierte Listen-Eigenschaften', + bulletedTitle : 'Listen-Eigenschaften', + type : 'Typ', + start : 'Start', + validateStartNumber :'List Startnummer muss eine ganze Zahl sein.', + circle : 'Ring', + disc : 'Kreis', + square : 'Quadrat', + none : 'Keine', + notset : '<nicht gesetzt>', + armenian : 'Armenisch Nummerierung', + georgian : 'Georgisch Nummerierung (an, ban, gan, etc.)', + lowerRoman : 'Klein römisch (i, ii, iii, iv, v, etc.)', + upperRoman : 'Groà römisch (I, II, III, IV, V, etc.)', + lowerAlpha : 'Klein alpha (a, b, c, d, e, etc.)', + upperAlpha : 'Groà alpha (A, B, C, D, E, etc.)', + lowerGreek : 'Klein griechisch (alpha, beta, gamma, etc.)', + decimal : 'Dezimal (1, 2, 3, etc.)', + decimalLeadingZero : 'Dezimal mit führende Null (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Suchen und Ersetzen', + find : 'Suchen', + replace : 'Ersetzen', + findWhat : 'Suche nach:', + replaceWith : 'Ersetze mit:', + notFoundMsg : 'Der gesuchte Text wurde nicht gefunden.', + matchCase : 'GroÃ-Kleinschreibung beachten', + matchWord : 'Nur ganze Worte suchen', + matchCyclic : 'Zyklische Suche', + replaceAll : 'Alle ersetzen', + replaceSuccessMsg : '%1 vorkommen ersetzt.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabelle', + title : 'Tabellen-Eigenschaften', + menu : 'Tabellen-Eigenschaften', + deleteTable : 'Tabelle löschen', + rows : 'Zeile', + columns : 'Spalte', + border : 'Rahmen', + widthPx : 'Pixel', + widthPc : '%', + widthUnit : 'Breite Einheit', + cellSpace : 'Zellenabstand auÃen', + cellPad : 'Zellenabstand innen', + caption : 'Ãberschrift', + summary : 'Inhaltsübersicht', + headers : 'Kopfzeile', + headersNone : 'Keine', + headersColumn : 'Erste Spalte', + headersRow : 'Erste Zeile', + headersBoth : 'Beide', + invalidRows : 'Die Anzahl der Zeilen muà gröÃer als 0 sein.', + invalidCols : 'Die Anzahl der Spalten muà gröÃer als 0 sein..', + invalidBorder : 'Die Rahmenbreite muà eine Zahl sein.', + invalidWidth : 'Die Tabellenbreite muss eine Zahl sein.', + invalidHeight : 'Die Tabellenbreite muà eine Zahl sein.', + invalidCellSpacing : 'Der Zellenabstand auÃen muà eine positive Zahl sein.', + invalidCellPadding : 'Der Zellenabstand innen muà eine positive Zahl sein.', + + cell : + { + menu : 'Zelle', + insertBefore : 'Zelle davor einfügen', + insertAfter : 'Zelle danach einfügen', + deleteCell : 'Zelle löschen', + merge : 'Zellen verbinden', + mergeRight : 'Nach rechts verbinden', + mergeDown : 'Nach unten verbinden', + splitHorizontal : 'Zelle horizontal teilen', + splitVertical : 'Zelle vertikal teilen', + title : 'Zellen-Eigenschaften', + cellType : 'Zellart', + rowSpan : 'Anzahl Zeilen verbinden', + colSpan : 'Anzahl Spalten verbinden', + wordWrap : 'Zeilenumbruch', + hAlign : 'Horizontale Ausrichtung', + vAlign : 'Vertikale Ausrichtung', + alignBaseline : 'Grundlinie', + bgColor : 'Hintergrundfarbe', + borderColor : 'Rahmenfarbe', + data : 'Daten', + header : 'Ãberschrift', + yes : 'Ja', + no : 'Nein', + invalidWidth : 'Zellenbreite muà eine Zahl sein.', + invalidHeight : 'Zellenhöhe muà eine Zahl sein.', + invalidRowSpan : '"Anzahl Zeilen verbinden" muss eine Ganzzahl sein.', + invalidColSpan : '"Anzahl Spalten verbinden" muss eine Ganzzahl sein.', + chooseColor : 'Wählen' + }, + + row : + { + menu : 'Zeile', + insertBefore : 'Zeile oberhalb einfügen', + insertAfter : 'Zeile unterhalb einfügen', + deleteRow : 'Zeile entfernen' + }, + + column : + { + menu : 'Spalte', + insertBefore : 'Spalte links davor einfügen', + insertAfter : 'Spalte rechts danach einfügen', + deleteColumn : 'Spalte löschen' + } + }, + + // Button Dialog. + button : + { + title : 'Button-Eigenschaften', + text : 'Text (Wert)', + type : 'Typ', + typeBtn : 'Button', + typeSbm : 'Absenden', + typeRst : 'Zurücksetzen' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Checkbox-Eigenschaften', + radioTitle : 'Optionsfeld-Eigenschaften', + value : 'Wert', + selected : 'ausgewählt' + }, + + // Form Dialog. + form : + { + title : 'Formular-Eigenschaften', + menu : 'Formular-Eigenschaften', + action : 'Action', + method : 'Method', + encoding : 'Zeichenkodierung' + }, + + // Select Field Dialog. + select : + { + title : 'Auswahlfeld-Eigenschaften', + selectInfo : 'Info', + opAvail : 'Mögliche Optionen', + value : 'Wert', + size : 'GröÃe', + lines : 'Linien', + chkMulti : 'Erlaube Mehrfachauswahl', + opText : 'Text', + opValue : 'Wert', + btnAdd : 'Hinzufügen', + btnModify : 'Ãndern', + btnUp : 'Hoch', + btnDown : 'Runter', + btnSetValue : 'Setze als Standardwert', + btnDelete : 'Entfernen' + }, + + // Textarea Dialog. + textarea : + { + title : 'Textfeld (mehrzeilig) Eigenschaften', + cols : 'Spalten', + rows : 'Reihen' + }, + + // Text Field Dialog. + textfield : + { + title : 'Textfeld (einzeilig) Eigenschaften', + name : 'Name', + value : 'Wert', + charWidth : 'Zeichenbreite', + maxChars : 'Max. Zeichen', + type : 'Typ', + typeText : 'Text', + typePass : 'Passwort' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Verstecktes Feld-Eigenschaften', + name : 'Name', + value : 'Wert' + }, + + // Image Dialog. + image : + { + title : 'Bild-Eigenschaften', + titleButton : 'Bildbutton-Eigenschaften', + menu : 'Bild-Eigenschaften', + infoTab : 'Bild-Info', + btnUpload : 'Zum Server senden', + upload : 'Hochladen', + alt : 'Alternativer Text', + lockRatio : 'GröÃenverhältnis beibehalten', + resetSize : 'GröÃe zurücksetzen', + border : 'Rahmen', + hSpace : 'Horizontal-Abstand', + vSpace : 'Vertikal-Abstand', + alertUrl : 'Bitte geben Sie die Bild-URL an', + linkTab : 'Link', + button2Img : 'Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?', + img2Button : 'Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?', + urlMissing : 'Imagequelle URL fehlt.', + validateBorder : 'Rahmen muà eine ganze Zahl sein.', + validateHSpace : 'Horizontal-Abstand muà eine ganze Zahl sein.', + validateVSpace : 'Vertikal-Abstand muà eine ganze Zahl sein.' + }, + + // Flash Dialog + flash : + { + properties : 'Flash-Eigenschaften', + propertiesTab : 'Eigenschaften', + title : 'Flash-Eigenschaften', + chkPlay : 'Automatisch Abspielen', + chkLoop : 'Endlosschleife', + chkMenu : 'Flash-Menü aktivieren', + chkFull : 'Vollbildmodus erlauben', + scale : 'Skalierung', + scaleAll : 'Alles anzeigen', + scaleNoBorder : 'Ohne Rand', + scaleFit : 'Passgenau', + access : 'Skript Zugang', + accessAlways : 'Immer', + accessSameDomain: 'Gleiche Domain', + accessNever : 'Nie', + alignAbsBottom : 'Abs Unten', + alignAbsMiddle : 'Abs Mitte', + alignBaseline : 'Baseline', + alignTextTop : 'Text Oben', + quality : 'Qualität', + qualityBest : 'Beste', + qualityHigh : 'Hoch', + qualityAutoHigh : 'Auto Hoch', + qualityMedium : 'Medium', + qualityAutoLow : 'Auto Niedrig', + qualityLow : 'Niedrig', + windowModeWindow: 'Fenster', + windowModeOpaque: 'Deckend', + windowModeTransparent : 'Transparent', + windowMode : 'Fenster Modus', + flashvars : 'Variablen für Flash', + bgcolor : 'Hintergrundfarbe', + hSpace : 'Horizontal-Abstand', + vSpace : 'Vertikal-Abstand', + validateSrc : 'Bitte geben Sie die Link-URL an', + validateHSpace : 'HSpace muss eine Zahl sein.', + validateVSpace : 'VSpace muss eine Zahl sein.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Rechtschreibprüfung', + title : 'Rechtschreibprüfung', + notAvailable : 'Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.', + errorLoading : 'Fehler beim laden des Dienstanbieters: %s.', + notInDic : 'Nicht im Wörterbuch', + changeTo : 'Ãndern in', + btnIgnore : 'Ignorieren', + btnIgnoreAll : 'Alle Ignorieren', + btnReplace : 'Ersetzen', + btnReplaceAll : 'Alle Ersetzen', + btnUndo : 'Rückgängig', + noSuggestions : ' - keine Vorschläge - ', + progress : 'Rechtschreibprüfung läuft...', + noMispell : 'Rechtschreibprüfung abgeschlossen - keine Fehler gefunden', + noChanges : 'Rechtschreibprüfung abgeschlossen - keine Worte geändert', + oneChange : 'Rechtschreibprüfung abgeschlossen - ein Wort geändert', + manyChanges : 'Rechtschreibprüfung abgeschlossen - %1 Wörter geändert', + ieSpellDownload : 'Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Smiley auswählen', + options : 'Smiley Optionen' + }, + + elementsPath : + { + eleLabel : 'Elements Pfad', + eleTitle : '%1 Element' + }, + + numberedlist : 'Nummerierte Liste', + bulletedlist : 'Liste', + indent : 'Einzug erhöhen', + outdent : 'Einzug verringern', + + justify : + { + left : 'Linksbündig', + center : 'Zentriert', + right : 'Rechtsbündig', + block : 'Blocksatz' + }, + + blockquote : 'Zitatblock', + + clipboard : + { + title : 'Einfügen', + cutError : 'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).', + copyError : 'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).', + pasteMsg : 'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.', + securityMsg : 'Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.', + pasteArea : 'Einfügebereich' + }, + + pastefromword : + { + confirmCleanup : 'Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?', + toolbar : 'Aus MS-Word einfügen', + title : 'Aus MS-Word einfügen', + error : 'Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen' + }, + + pasteText : + { + button : 'Als Text einfügen', + title : 'Als Text einfügen' + }, + + templates : + { + button : 'Vorlagen', + title : 'Vorlagen', + options : 'Vorlagen Optionen', + insertOption : 'Aktuellen Inhalt ersetzen', + selectPromptMsg : 'Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):', + emptyListMsg : '(keine Vorlagen definiert)' + }, + + showBlocks : 'Blöcke anzeigen', + + stylesCombo : + { + label : 'Stil', + panelTitle : 'Formatierungenstil', + panelTitle1 : 'Block Stilart', + panelTitle2 : 'Inline Stilart', + panelTitle3 : 'Objekt Stilart' + }, + + format : + { + label : 'Format', + panelTitle : 'Format', + + tag_p : 'Normal', + tag_pre : 'Formatiert', + tag_address : 'Addresse', + tag_h1 : 'Ãberschrift 1', + tag_h2 : 'Ãberschrift 2', + tag_h3 : 'Ãberschrift 3', + tag_h4 : 'Ãberschrift 4', + tag_h5 : 'Ãberschrift 5', + tag_h6 : 'Ãberschrift 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Div Container erzeugen', + toolbar : 'Div Container erzeugen', + cssClassInputLabel : 'Stylesheet Klasse', + styleSelectLabel : 'Style', + IdInputLabel : 'Id', + languageCodeInputLabel : 'Sprachenkürzel', + inlineStyleInputLabel : 'Inline Stil', + advisoryTitleInputLabel : 'Tooltip', + langDirLabel : 'Sprache Richtung', + langDirLTRLabel : 'Links nach Rechs (LTR)', + langDirRTLLabel : 'Rechs nach Links (RTL)', + edit : 'Div bearbeiten', + remove : 'Div entfernen' + }, + + iframe : + { + title : 'IFrame-Eigenschaften', + toolbar : 'IFrame', + noUrl : 'Bitte geben Sie die IFrame-URL an', + scrolling : 'Rollbalken anzeigen', + border : 'Rahmen anzeigen' + }, + + font : + { + label : 'Schriftart', + voiceLabel : 'Schriftart', + panelTitle : 'Schriftart' + }, + + fontSize : + { + label : 'GröÃe', + voiceLabel : 'SchrifgröÃe', + panelTitle : 'GröÃe' + }, + + colorButton : + { + textColorTitle : 'Textfarbe', + bgColorTitle : 'Hintergrundfarbe', + panelTitle : 'Farben', + auto : 'Automatisch', + more : 'Weitere Farben...' + }, + + colors : + { + '000' : 'Schwarz', + '800000' : 'Kastanienbraun', + '8B4513' : 'Braun', + '2F4F4F' : 'Dunkles Schiefergrau', + '008080' : 'Blaugrün', + '000080' : 'Navy', + '4B0082' : 'Indigo', + '696969' : 'Dunkelgrau', + 'B22222' : 'Ziegelrot', + 'A52A2A' : 'Braun', + 'DAA520' : 'Goldgelb', + '006400' : 'Dunkelgrün', + '40E0D0' : 'Türkis', + '0000CD' : 'Medium Blau', + '800080' : 'Lila', + '808080' : 'Grau', + 'F00' : 'Rot', + 'FF8C00' : 'Dunkelorange', + 'FFD700' : 'Gold', + '008000' : 'Grün', + '0FF' : 'Cyan', + '00F' : 'Blau', + 'EE82EE' : 'Hellviolett', + 'A9A9A9' : 'Dunkelgrau', + 'FFA07A' : 'Helles Lachsrosa', + 'FFA500' : 'Orange', + 'FFFF00' : 'Gelb', + '00FF00' : 'Lime', + 'AFEEEE' : 'BlaÃ-Türkis', + 'ADD8E6' : 'Hellblau', + 'DDA0DD' : 'Pflaumenblau', + 'D3D3D3' : 'Hellgrau', + 'FFF0F5' : 'Lavendel', + 'FAEBD7' : 'Antik WeiÃ', + 'FFFFE0' : 'Hellgelb', + 'F0FFF0' : 'Honigtau', + 'F0FFFF' : 'Azurblau', + 'F0F8FF' : 'Alice Blau', + 'E6E6FA' : 'Lavendel', + 'FFF' : 'WeiÃ' + }, + + scayt : + { + title : 'Rechtschreibprüfung während der Texteingabe (SCAYT)', + opera_title : 'Nicht von Opera unterstützt', + enable : 'SCAYT einschalten', + disable : 'SCAYT ausschalten', + about : 'Ãber SCAYT', + toggle : 'SCAYT umschalten', + options : 'Optionen', + langs : 'Sprachen', + moreSuggestions : 'Mehr Vorschläge', + ignore : 'Ignorieren', + ignoreAll : 'Alle ignorieren', + addWord : 'Wort hinzufügen', + emptyDic : 'Wörterbuchname sollte leer sein.', + + optionsTab : 'Optionen', + allCaps : 'Groà geschriebenen Wörter ignorieren', + ignoreDomainNames : 'Domain-Namen ignorieren', + mixedCase : 'Wörter mit gemischte Setzkasten ignorieren', + mixedWithDigits : 'Wörter mit Zahlen ignorieren', + + languagesTab : 'Sprachen', + + dictionariesTab : 'Wörterbücher', + dic_field_name : 'Wörterbuchname', + dic_create : 'Erzeugen', + dic_restore : 'Wiederherstellen', + dic_delete : 'Löschen', + dic_rename : 'Umbenennen', + dic_info : 'Anfangs wird das Benutzerwörterbuch in einem Cookie gespeichert. Allerdings sind Cookies in der GröÃe begrenzt. Wenn das Benutzerwörterbuch bis zu einem Punkt wächst, wo es nicht mehr in einem Cookie gespeichert werden kann, wird das Benutzerwörterbuch auf dem Server gespeichert. Um Ihr persönliches Wörterbuch auf dem Server zu speichern, müssen Sie einen Namen für das Wörterbuch angeben. Falls Sie schon ein gespeicherte Wörterbuch haben, geben Sie bitte dessen Namen ein und klicken Sie auf die Schaltfläche Wiederherstellen.', + + aboutTab : 'Ãber' + }, + + about : + { + title : 'Ãber CKEditor', + dlgTitle : 'Ãber CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:', + copy : 'Copyright © $1. Alle Rechte vorbehalten.' + }, + + maximize : 'Maximieren', + minimize : 'Minimieren', + + fakeobjects : + { + anchor : 'Anker', + flash : 'Flash Animation', + iframe : 'IFrame', + hiddenfield : 'Verstecktes Feld', + unknown : 'Unbekanntes Objekt' + }, + + resize : 'Zum VergröÃern ziehen', + + colordialog : + { + title : 'Farbe wählen', + options : 'Farbeoptionen', + highlight : 'Hervorheben', + selected : 'Ausgewählte Farbe', + clear : 'Entfernen' + }, + + toolbarCollapse : 'Symbolleiste einklappen', + toolbarExpand : 'Symbolleiste ausklappen', + + toolbarGroups : + { + document : 'Dokument', + clipboard : 'Zwischenablage/Rückgängig', + editing : 'Editieren', + forms : 'Formularen', + basicstyles : 'Grundstile', + paragraph : 'Absatz', + links : 'Links', + insert : 'Einfügen', + styles : 'Stile', + colors : 'Farben', + tools : 'Werkzeuge' + }, + + bidi : + { + ltr : 'Leserichtung von Links nach Rechts', + rtl : 'Leserichtung von Rechts nach Links' + }, + + docprops : + { + label : 'Dokument-Eigenschaften', + title : 'Dokument-Eigenschaften', + design : 'Design', + meta : 'Metadaten', + chooseColor : 'Wählen', + other : '<andere>', + docTitle : 'Seitentitel', + charset : 'Zeichenkodierung', + charsetOther : 'Andere Zeichenkodierung', + charsetASCII : 'ASCII', + charsetCE : 'Zentraleuropäisch', + charsetCT : 'traditionell Chinesisch (Big5)', + charsetCR : 'Kyrillisch', + charsetGR : 'Griechisch', + charsetJP : 'Japanisch', + charsetKR : 'Koreanisch', + charsetTR : 'Türkisch', + charsetUN : 'Unicode (UTF-8)', + charsetWE : 'Westeuropäisch', + docType : 'Dokumententyp', + docTypeOther : 'Anderer Dokumententyp', + xhtmlDec : 'Beziehe XHTML Deklarationen ein', + bgColor : 'Hintergrundfarbe', + bgImage : 'Hintergrundbild URL', + bgFixed : 'feststehender Hintergrund', + txtColor : 'Textfarbe', + margin : 'Seitenränder', + marginTop : 'Oben', + marginLeft : 'Links', + marginRight : 'Rechts', + marginBottom : 'Unten', + metaKeywords : 'Schlüsselwörter (durch Komma getrennt)', + metaDescription : 'Dokument-Beschreibung', + metaAuthor : 'Autor', + metaCopyright : 'Copyright', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/el.js b/_source/lang/el.js new file mode 100644 index 0000000..4ed1f04 --- /dev/null +++ b/_source/lang/el.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Greek language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['el'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'HTML κÏδικαÏ', + newPage : 'ÎÎα Σελίδα', + save : 'ÎÏÎ¿Î¸Î®ÎºÎµÏ Ïη', + preview : 'Î ÏοεÏιÏκÏÏιÏη', + cut : 'ÎÏοκοÏή', + copy : 'ÎνÏιγÏαÏή', + paste : 'ÎÏικÏλληÏη', + print : 'ÎκÏÏÏÏÏη', + underline : 'Î¥ÏογÏάμμιÏη', + bold : 'ÎνÏονα', + italic : 'Πλάγια', + selectAll : 'ÎÏιλογή ÏλÏν', + removeFormat : 'ÎÏαίÏεÏη ÎοÏÏοÏοίηÏηÏ', + strike : 'ÎιαγÏάμμιÏη', + subscript : 'ÎείκÏηÏ', + superscript : 'ÎκθÎÏηÏ', + horizontalrule : 'ÎιÏαγÏγή ÎÏιζÏνÏÎ¹Î±Ï ÎÏαμμήÏ', + pagebreak : 'ÎιÏαγÏγή ÏÎÎ»Î¿Ï Ï ÏελίδαÏ', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'ÎÏαίÏεÏη Î£Ï Î½Î´ÎÏÎ¼Î¿Ï (Link)', + undo : 'ÎναίÏεÏη', + redo : 'ÎÏαναÏοÏά', + + // Common messages and labels. + common : + { + browseServer : 'ÎξεÏεÏνηÏη διακομιÏÏή', + url : 'URL', + protocol : 'Î ÏοÏÏκολο', + upload : 'ÎÏοÏÏολή', + uploadSubmit : 'ÎÏοÏÏολή ÏÏον ÎιακομιÏÏή', + image : 'ÎικÏνα', + flash : 'ÎιÏαγÏγή Flash', + form : 'ΦÏÏμα', + checkbox : 'ÎÎ¿Ï Ïί εÏιλογήÏ', + radio : 'ÎÎ¿Ï Î¼Ïί Radio', + textField : 'Πεδίο κειμÎÎ½Î¿Ï ', + textarea : 'ΠεÏιοÏή κειμÎÎ½Î¿Ï ', + hiddenField : 'ÎÏÏ ÏÏ Ïεδίο', + button : 'ÎÎ¿Ï Î¼Ïί', + select : 'Πεδίο εÏιλογήÏ', + imageButton : 'ÎÎ¿Ï Î¼Ïί εικÏναÏ', + notSet : '<ÏÏÏίÏ>', + id : 'Id', + name : 'Îνομα', + langDir : 'ÎαÏεÏÎ¸Ï Î½Ïη κειμÎÎ½Î¿Ï ', + langDirLtr : 'ÎÏιÏÏεÏά ÏÏÎ¿Ï Îεξιά (LTR)', + langDirRtl : 'Îεξιά ÏÏÎ¿Ï ÎÏιÏÏεÏά (RTL)', + langCode : 'ÎÏδικÏÏ ÎλÏÏÏαÏ', + longDescr : 'ÎÎ½Î±Î»Ï Ïική ÏεÏιγÏαÏή URL', + cssClass : 'Stylesheet Classes', + advisoryTitle : 'Î£Ï Î¼Î²Î¿Ï Î»ÎµÏ ÏικÏÏ ÏίÏλοÏ', + cssStyle : 'ΣÏÏλ', + ok : 'OK', + cancel : 'ÎκÏÏÏÏη', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Îια ÏÏοÏÏÏημÎÎ½Î¿Ï Ï', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'ΠλάÏοÏ', + height : 'ÎÏοÏ', + align : 'ÎÏ Î¸Ï Î³ÏάμμιÏη (Align)', + alignLeft : 'ÎÏιÏÏεÏά', + alignRight : 'Îεξιά (Right)', + alignCenter : 'ÎÎνÏÏο', + alignTop : 'Î Î¬Î½Ï (Top)', + alignMiddle : 'ÎÎÏη (Middle)', + alignBottom : 'ÎάÏÏ (Bottom)', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'ÎιÏαγÏγή ÎÎ¹Î´Î¹ÎºÎ¿Ï Î£Ï Î¼Î²ÏÎ»Î¿Ï ', + title : 'ÎÏιλÎξÏε Îνα ÎÎ¹Î´Î¹ÎºÏ Î£Ïμβολο', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'ÎιÏαγÏγή/ÎεÏαβολή Î£Ï Î½Î´ÎÏÎ¼Î¿Ï (Link)', + other : '<άλλοÏ>', + menu : 'ÎεÏαβολή Î£Ï Î½Î´ÎÏÎ¼Î¿Ï (Link)', + title : 'ΣÏνδεÏÎ¼Î¿Ï (Link)', + info : 'Link', + target : 'ΠαÏÎ¬Î¸Ï Ïο ΣÏÏÏÎ¿Ï (Target)', + upload : 'ÎÏοÏÏολή', + advanced : 'Îια ÏÏοÏÏÏημÎÎ½Î¿Ï Ï', + type : 'ΤÏÏÎ¿Ï ÏÏ Î½Î´ÎÏÎ¼Î¿Ï (Link)', + toUrl : 'URL', // MISSING + toAnchor : 'ÎÎ³ÎºÏ Ïα Ïε Î±Ï Ïή Ïη Ïελίδα', + toEmail : 'E-Mail', + targetFrame : '<ÏλαίÏιο>', + targetPopup : '<ÏαÏÎ¬Î¸Ï Ïο popup>', + targetFrameName : 'Îνομα ÏλαιÏÎ¯Î¿Ï ÏÏÏÏÎ¿Ï ', + targetPopupName : 'Îνομα Popup Window', + popupFeatures : 'ÎÏιλογÎÏ Popup Window', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'ÎÏάÏα Status', + popupLocationBar: 'ÎÏάÏα ΤοÏοθεÏίαÏ', + popupToolbar : 'ÎÏάÏα ÎÏγαλείÏν', + popupMenuBar : 'ÎÏάÏα Menu', + popupFullScreen : 'ÎλÏκληÏη η ÎθÏνη (IE)', + popupScrollBars : 'ÎÏάÏÎµÏ ÎÏλιÏηÏ', + popupDependent : 'Dependent (Netscape)', + popupLeft : 'ΤοÏοθεÏία ÎÏιÏÏεÏÎ®Ï ÎκÏηÏ', + popupTop : 'ΤοÏοθεÏία Î Î¬Î½Ï ÎκÏηÏ', + id : 'Id', // MISSING + langDir : 'ÎαÏεÏÎ¸Ï Î½Ïη κειμÎÎ½Î¿Ï ', + langDirLTR : 'ÎÏιÏÏεÏά ÏÏÎ¿Ï Îεξιά (LTR)', + langDirRTL : 'Îεξιά ÏÏÎ¿Ï ÎÏιÏÏεÏά (RTL)', + acccessKey : 'Î£Ï Î½ÏÏÎ¼ÎµÏ Ïη (Access Key)', + name : 'Îνομα', + langCode : 'ÎαÏεÏÎ¸Ï Î½Ïη κειμÎÎ½Î¿Ï ', + tabIndex : 'Tab Index', + advisoryTitle : 'Î£Ï Î¼Î²Î¿Ï Î»ÎµÏ ÏικÏÏ ÏίÏλοÏ', + advisoryContentType : 'Î£Ï Î¼Î²Î¿Ï Î»ÎµÏ ÏικÏÏ ÏίÏÎ»Î¿Ï ÏεÏιεÏομÎÎ½Î¿Ï ', + cssClasses : 'Stylesheet Classes', + charset : 'Linked Resource Charset', + styles : 'ΣÏÏλ', + rel : 'Relationship', // MISSING + selectAnchor : 'ÎÏιλÎξÏε μια Î¬Î³ÎºÏ Ïα', + anchorName : 'ÎάÏει ÏÎ¿Ï ÎνÏμαÏÎ¿Ï (Name) ÏÎ·Ï Î¬Î³ÎºÏ ÏαÏ', + anchorId : 'ÎάÏει ÏÎ¿Ï Element Id', + emailAddress : 'ÎιεÏÎ¸Ï Î½Ïη ÎλεκÏÏÎ¿Î½Î¹ÎºÎ¿Ï Î¤Î±ÏÏ Î´ÏÎ¿Î¼ÎµÎ¯Î¿Ï ', + emailSubject : 'ÎÎμα ÎηνÏμαÏοÏ', + emailBody : 'Îείμενο ÎηνÏμαÏοÏ', + noAnchors : '(Îεν Ï ÏάÏÏÎ¿Ï Î½ Î¬Î³ÎºÏ ÏÎµÏ ÏÏο κείμενο)', + noUrl : 'ÎιÏάγεÏε Ïην ÏοÏοθεÏία (URL) ÏÎ¿Ï Ï ÏεÏÏÏ Î½Î´ÎÏÎ¼Î¿Ï (Link)', + noEmail : 'ÎιÏάγεÏε Ïην διεÏÎ¸Ï Î½Ïη ηλεκÏÏÎ¿Î½Î¹ÎºÎ¿Ï ÏαÏÏ Î´ÏÎ¿Î¼ÎµÎ¯Î¿Ï ' + }, + + // Anchor dialog + anchor : + { + toolbar : 'ÎιÏαγÏγή/εÏεξεÏγαÏία Anchor', + menu : 'ÎδιÏÏηÏÎµÏ Î¬Î³ÎºÏ ÏαÏ', + title : 'ÎδιÏÏηÏÎµÏ Î¬Î³ÎºÏ ÏαÏ', + name : 'Îνομα Î¬Î³ÎºÏ ÏαÏ', + errorName : 'ΠαÏακαλοÏμε ειÏάγεÏε Ïνομα Î¬Î³ÎºÏ ÏαÏ', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'ÎναζήÏηÏη', + replace : 'ÎνÏικαÏάÏÏαÏη', + findWhat : 'ÎναζήÏηÏη:', + replaceWith : 'ÎνÏικαÏάÏÏαÏη με:', + notFoundMsg : 'Το κείμενο δεν βÏÎθηκε.', + matchCase : 'ÎλεγÏÎ¿Ï ÏεζÏν/κεÏαλαίÏν', + matchWord : 'ÎÏÏεÏη ÏλήÏÎ¿Ï Ï Î»ÎξηÏ', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'ÎνÏικαÏάÏÏαÏη ÎλÏν', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'ΠίνακαÏ', + title : 'ÎδιÏÏηÏÎµÏ Î Î¯Î½Î±ÎºÎ±', + menu : 'ÎδιÏÏηÏÎµÏ Î Î¯Î½Î±ÎºÎ±', + deleteTable : 'ÎιαγÏαÏή Ïίνακα', + rows : 'ÎÏαμμÎÏ', + columns : 'ÎολÏνεÏ', + border : 'ÎÎÎ³ÎµÎ¸Î¿Ï Î ÎµÏιθÏÏÎ¯Î¿Ï ', + widthPx : 'pixels', + widthPc : '%', + widthUnit : 'width unit', // MISSING + cellSpace : 'ÎÏÏÏÏαÏη κελιÏν', + cellPad : 'ÎÎμιÏμα κελιÏν', + caption : 'Î¥ÏÎÏÏιÏλοÏ', + summary : 'ΠεÏίληÏη', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Îελί', + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'ÎιαγÏαÏή ÎελιÏν', + merge : 'ÎνοÏοίηÏη ÎελιÏν', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'ΣειÏά', + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'ÎιαγÏαÏή ÎÏαμμÏν' + }, + + column : + { + menu : 'ΣÏήλη', + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'ÎιαγÏαÏή ÎολÏνÏν' + } + }, + + // Button Dialog. + button : + { + title : 'ÎδιÏÏηÏÎµÏ ÎºÎ¿Ï Î¼ÏιοÏ', + text : 'Îείμενο (Τιμή)', + type : 'ΤÏÏοÏ', + typeBtn : 'ÎÎ¿Ï Î¼Ïί', + typeSbm : 'ÎαÏαÏÏÏηÏη', + typeRst : 'ÎÏαναÏοÏά' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ÎδιÏÏηÏÎµÏ ÎºÎ¿Ï Î¼ÏÎ¹Î¿Ï ÎµÏιλογήÏ', + radioTitle : 'ÎδιÏÏηÏÎµÏ ÎºÎ¿Ï Î¼ÏÎ¹Î¿Ï radio', + value : 'Τιμή', + selected : 'ÎÏιλεγμÎνο' + }, + + // Form Dialog. + form : + { + title : 'ÎδιÏÏηÏÎµÏ ÏÏÏμαÏ', + menu : 'ÎδιÏÏηÏÎµÏ ÏÏÏμαÏ', + action : 'ÎÏάÏη', + method : 'ÎάθοδοÏ', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'ÎδιÏÏηÏÎµÏ ÏÎµÎ´Î¯Î¿Ï ÎµÏιλογήÏ', + selectInfo : 'ΠληÏοÏοÏίεÏ', + opAvail : 'ÎιαθÎÏÎ¹Î¼ÎµÏ ÎµÏιλογÎÏ', + value : 'Τιμή', + size : 'ÎÎγεθοÏ', + lines : 'γÏαμμÎÏ', + chkMulti : 'ΠολλαÏλÎÏ ÎµÏιλογÎÏ', + opText : 'Îείμενο', + opValue : 'Τιμή', + btnAdd : 'Î ÏοÏθήκη', + btnModify : 'Îλλαγή', + btnUp : 'ΠάνÏ', + btnDown : 'ÎάÏÏ', + btnSetValue : 'Î ÏοεÏιλεγμÎνη εÏιλογή', + btnDelete : 'ÎιαγÏαÏή' + }, + + // Textarea Dialog. + textarea : + { + title : 'ÎδιÏÏηÏÎµÏ ÏεÏιοÏÎ®Ï ÎºÎµÎ¹Î¼ÎÎ½Î¿Ï ', + cols : 'ΣÏήλεÏ', + rows : 'ΣειÏÎÏ' + }, + + // Text Field Dialog. + textfield : + { + title : 'ÎδιÏÏηÏÎµÏ ÏÎµÎ´Î¯Î¿Ï ÎºÎµÎ¹Î¼ÎÎ½Î¿Ï ', + name : 'Îνομα', + value : 'Τιμή', + charWidth : 'ÎÎ®ÎºÎ¿Ï ÏαÏακÏήÏÏν', + maxChars : 'ÎÎγιÏÏοι ÏαÏακÏήÏεÏ', + type : 'ΤÏÏοÏ', + typeText : 'Îείμενο', + typePass : 'ÎÏδικÏÏ' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ÎδιÏÏηÏÎµÏ ÎºÏÏ ÏÎ¿Ï ÏÎµÎ´Î¯Î¿Ï ', + name : 'Îνομα', + value : 'Τιμή' + }, + + // Image Dialog. + image : + { + title : 'ÎδιÏÏηÏÎµÏ ÎικÏναÏ', + titleButton : 'ÎδιÏÏηÏÎµÏ ÎºÎ¿Ï Î¼ÏÎ¹Î¿Ï ÎµÎ¹ÎºÏναÏ', + menu : 'ÎδιÏÏηÏÎµÏ ÎικÏναÏ', + infoTab : 'ΠληÏοÏοÏÎ¯ÎµÏ ÎικÏναÏ', + btnUpload : 'ÎÏοÏÏολή ÏÏον ÎιακομιÏÏή', + upload : 'ÎÏοÏÏολή', + alt : 'ÎναλλακÏÎ¹ÎºÏ Îείμενο (ALT)', + lockRatio : 'ÎλείδÏμα ÎναλογίαÏ', + resetSize : 'ÎÏαναÏοÏά ÎÏÏÎ¹ÎºÎ¿Ï ÎεγÎÎ¸Î¿Ï Ï', + border : 'ΠεÏιθÏÏιο', + hSpace : 'ÎÏιζÏνÏÎ¹Î¿Ï Î§ÏÏÎ¿Ï (HSpace)', + vSpace : 'ÎάθεÏÎ¿Ï Î§ÏÏÎ¿Ï (VSpace)', + alertUrl : 'ÎιÏάγεÏε Ïην ÏοÏοθεÏία (URL) ÏÎ·Ï ÎµÎ¹ÎºÏναÏ', + linkTab : 'ΣÏνδεÏμοÏ', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'ÎδιÏÏηÏÎµÏ Flash', + propertiesTab : 'Properties', // MISSING + title : 'ÎδιÏÏηÏÎµÏ flash', + chkPlay : 'ÎÏ ÏÏμαÏη ÎναÏξη', + chkLoop : 'ÎÏανάληÏη', + chkMenu : 'ÎνεÏγοÏοίηÏη Flash Menu', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Îλίμακα', + scaleAll : 'ÎμÏάνιÏη ÏλÏν', + scaleNoBorder : 'ΧÏÏÎ¯Ï ÏÏια', + scaleFit : 'ÎκÏÎ¹Î²Î®Ï ÎµÏαÏμογή', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'ÎÏÏÎ»Ï Ïα ÎάÏÏ (Abs Bottom)', + alignAbsMiddle : 'ÎÏÏÎ»Ï Ïα ÏÏη ÎÎÏη (Abs Middle)', + alignBaseline : 'ÎÏαμμή ÎάÏÎ·Ï (Baseline)', + alignTextTop : 'ÎοÏÏ Ïή ÎειμÎÎ½Î¿Ï (Text Top)', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'ΧÏÏμα Î¥ÏοβάθÏÎ¿Ï ', + hSpace : 'ÎÏιζÏνÏÎ¹Î¿Ï Î§ÏÏÎ¿Ï (HSpace)', + vSpace : 'ÎάθεÏÎ¿Ï Î§ÏÏÎ¿Ï (VSpace)', + validateSrc : 'ÎιÏάγεÏε Ïην ÏοÏοθεÏία (URL) ÏÎ¿Ï Ï ÏεÏÏÏ Î½Î´ÎÏÎ¼Î¿Ï (Link)', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'ÎÏθογÏαÏικÏÏ ÎλεγÏοÏ', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Îεν Ï ÏάÏÏει ÏÏο λεξικÏ', + changeTo : 'Îλλαγή Ïε', + btnIgnore : 'ÎγνÏηÏη', + btnIgnoreAll : 'ÎγνÏηÏη ÏλÏν', + btnReplace : 'ÎνÏικαÏάÏÏαÏη', + btnReplaceAll : 'ÎνÏικαÏάÏÏαÏη ÏλÏν', + btnUndo : 'ÎναίÏεÏη', + noSuggestions : '- Îεν Ï ÏάÏÏÎ¿Ï Î½ ÏÏοÏάÏÎµÎ¹Ï -', + progress : 'ÎÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Ïε εξÎλιξη...', + noMispell : 'ΠοÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏθηκε: Îεν βÏÎθηκαν λάθη', + noChanges : 'ΠοÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏθηκε: Îεν άλλαξαν λÎξειÏ', + oneChange : 'ΠοÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏθηκε: Îια λÎξη άλλαξε', + manyChanges : 'ΠοÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏθηκε: %1 λÎÎ¾ÎµÎ¹Ï Î¬Î»Î»Î±Î¾Î±Î½', + ieSpellDownload : 'Îεν Ï ÏάÏÏει εγκαÏεÏÏημÎÎ½Î¿Ï Î¿ÏθογÏάÏοÏ. ÎÎλεÏε να Ïον καÏεβάÏεÏε ÏÏÏα;' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'ÎÏιλÎξÏε Îνα Smiley', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ÎίÏÏα με ÎÏιθμοÏÏ', + bulletedlist : 'ÎίÏÏα με Bullets', + indent : 'ÎÏξηÏη ÎÏοÏήÏ', + outdent : 'ÎείÏÏη ÎÏοÏήÏ', + + justify : + { + left : 'ΣÏοίÏιÏη ÎÏιÏÏεÏά', + center : 'ΣÏοίÏιÏη ÏÏο ÎÎνÏÏο', + right : 'ΣÏοίÏιÏη Îεξιά', + block : 'ΠλήÏÎ·Ï Î£ÏοίÏιÏη (Block)' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'ÎÏικÏλληÏη', + cutError : 'Îι ÏÏ Î¸Î¼Î¯ÏÎµÎ¹Ï Î±ÏÏÎ±Î»ÎµÎ¯Î±Ï ÏÎ¿Ï ÏÏ Î»Î»Î¿Î¼ÎµÏÏηÏή ÏÎ±Ï Î´ÎµÎ½ εÏιÏÏÎÏÎ¿Ï Î½ Ïην εÏιλεγμÎνη εÏγαÏία αÏοκοÏήÏ. ΧÏηÏιμοÏοιείÏÏε Ïο ÏληκÏÏολÏγιο (Ctrl/Cmd+X).', + copyError : 'Îι ÏÏ Î¸Î¼Î¯ÏÎµÎ¹Ï Î±ÏÏÎ±Î»ÎµÎ¯Î±Ï ÏÎ¿Ï ÏÏ Î»Î»Î¿Î¼ÎµÏÏηÏή ÏÎ±Ï Î´ÎµÎ½ εÏιÏÏÎÏÎ¿Ï Î½ Ïην εÏιλεγμÎνη εÏγαÏία ανÏιγÏαÏήÏ. ΧÏηÏιμοÏοιείÏÏε Ïο ÏληκÏÏολÏγιο (Ctrl/Cmd+C).', + pasteMsg : 'ΠαÏÎ±ÎºÎ±Î»Ï ÎµÏικολήÏÏε ÏÏο ακÏÎ»Î¿Ï Î¸Î¿ ÎºÎ¿Ï Ïί ÏÏηÏιμοÏοιÏνÏÎ±Ï Ïο ÏληκÏÏολÏγιο (<STRONG>Ctrl/Cmd+V</STRONG>) και ÏαÏήÏÏε <STRONG>OK</STRONG>.', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'ÎÏικÏλληÏη αÏÏ Ïο Word', + title : 'ÎÏικÏλληÏη αÏÏ Ïο Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'ÎÏικÏλληÏη ÏÏ ÎÏÎ»Ï Îείμενο', + title : 'ÎÏικÏλληÏη ÏÏ ÎÏÎ»Ï Îείμενο' + }, + + templates : + { + button : 'Î ÏÏÏÏ Ïα', + title : 'Î ÏÏÏÏ Ïα ÏεÏιεÏομÎÎ½Î¿Ï ', + options : 'Template Options', // MISSING + insertOption : 'ÎνÏικαÏάÏÏαÏη Ï ÏάÏÏονÏÏν ÏεÏιεÏομÎνÏν', + selectPromptMsg : 'ΠαÏÎ±ÎºÎ±Î»Ï ÎµÏιλÎξÏε ÏÏÏÏÏ Ïο για ειÏαγÏγή ÏÏο ÏÏÏγÏαμμα<br>(Ïα Ï ÏάÏÏονÏα ÏεÏιεÏÏμενα θα ÏαθοÏν):', + emptyListMsg : '(Îεν ÎÏÎ¿Ï Î½ καθοÏιÏÏεί ÏÏÏÏÏ Ïα)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'ΣÏÏ Î»', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'ÎοÏÏή ÎÏαμμαÏοÏειÏάÏ', + panelTitle : 'ÎοÏÏή ÎÏαμμαÏοÏειÏάÏ', + + tag_p : 'ÎανονικÏ', + tag_pre : 'ÎοÏÏοÏοιημÎνο', + tag_address : 'ÎιεÏÎ¸Ï Î½Ïη', + tag_h1 : 'ÎÏικεÏαλίδα 1', + tag_h2 : 'ÎÏικεÏαλίδα 2', + tag_h3 : 'ÎÏικεÏαλίδα 3', + tag_h4 : 'ÎÏικεÏαλίδα 4', + tag_h5 : 'ÎÏικεÏαλίδα 5', + tag_h6 : 'ÎÏικεÏαλίδα 6', + tag_div : 'Normal (DIV)' // MISSING + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ÎÏαμμαÏοÏειÏά', + voiceLabel : 'Font', // MISSING + panelTitle : 'ÎÏαμμαÏοÏειÏά' + }, + + fontSize : + { + label : 'ÎÎγεθοÏ', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'ÎÎγεθοÏ' + }, + + colorButton : + { + textColorTitle : 'ΧÏÏμα ÎÏαμμάÏÏν', + bgColorTitle : 'ΧÏÏμα Î¥ÏοβάθÏÎ¿Ï ', + panelTitle : 'Colors', // MISSING + auto : 'ÎÏ ÏÏμαÏο', + more : 'ΠεÏιÏÏÏÏεÏα ÏÏÏμαÏα...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'ÎδιÏÏηÏÎµÏ ÎµÎ³Î³ÏάÏÎ¿Ï ', + title : 'ÎδιÏÏηÏÎµÏ ÎµÎ³Î³ÏάÏÎ¿Ï ', + design : 'Design', // MISSING + meta : 'ÎεδομÎνα Meta', + chooseColor : 'Choose', // MISSING + other : '<άλλοÏ>', + docTitle : 'ΤίÏÎ»Î¿Ï ÏελίδαÏ', + charset : 'ÎÏδικοÏοίηÏη ÏαÏακÏήÏÏν', + charsetOther : 'Îλλη κÏδικοÏοίηÏη ÏαÏακÏήÏÏν', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'ÎενÏÏÎ¹ÎºÎ®Ï ÎÏ ÏÏÏηÏ', + charsetCT : 'ΠαÏαδοÏιακά κινÎζικα (Big5)', + charsetCR : 'ÎÏ Ïιλλική', + charsetGR : 'Îλληνική', + charsetJP : 'ÎαÏÏνική', + charsetKR : 'ÎοÏεάÏικη', + charsetTR : 'Î¤Î¿Ï Ïκική', + charsetUN : 'ÎÎ¹ÎµÎ¸Î½Î®Ï (UTF-8)', + charsetWE : 'ÎÏ ÏÎ¹ÎºÎ®Ï ÎÏ ÏÏÏηÏ', + docType : 'ÎÏικεÏαλίδα ÏÏÏÎ¿Ï ÎµÎ³Î³ÏάÏÎ¿Ï ', + docTypeOther : 'Îλλη εÏικεÏαλίδα ÏÏÏÎ¿Ï ÎµÎ³Î³ÏάÏÎ¿Ï ', + xhtmlDec : 'Îα ÏÏ Î¼ÏεÏιληÏθοÏν οι δηλÏÏÎµÎ¹Ï XHTML', + bgColor : 'ΧÏÏμα ÏÏνÏÎ¿Ï ', + bgImage : 'ÎιεÏÎ¸Ï Î½Ïη εικÏÎ½Î±Ï ÏÏνÏÎ¿Ï ', + bgFixed : 'ΦÏνÏο ÏÏÏÎ¯Ï ÎºÏλιÏη', + txtColor : 'ΧÏÏμα ÎÏαμμάÏÏν', + margin : 'ΠεÏιθÏÏια ÏελίδαÏ', + marginTop : 'ÎοÏÏ Ïή', + marginLeft : 'ÎÏιÏÏεÏά', + marginRight : 'Îεξιά', + marginBottom : 'ÎάÏÏ', + metaKeywords : 'ÎÎÎ¾ÎµÎ¹Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¬ δείκÏÎµÏ ÎµÎ³Î³ÏάÏÎ¿Ï (διαÏÏÏιÏμÏÏ Î¼Îµ κÏμμα)', + metaDescription : 'ΠεÏιγÏαÏή εγγÏάÏÎ¿Ï ', + metaAuthor : 'Î£Ï Î³Î³ÏαÏÎαÏ', + metaCopyright : 'Î Î½ÎµÏ Î¼Î±Ïικά δικαιÏμαÏα', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/en-au.js b/_source/lang/en-au.js new file mode 100644 index 0000000..8383905 --- /dev/null +++ b/_source/lang/en-au.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * English (Australia) language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['en-au'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Source', + newPage : 'New Page', + save : 'Save', + preview : 'Preview', + cut : 'Cut', + copy : 'Copy', + paste : 'Paste', + print : 'Print', + underline : 'Underline', + bold : 'Bold', + italic : 'Italic', + selectAll : 'Select All', + removeFormat : 'Remove Format', + strike : 'Strike Through', + subscript : 'Subscript', + superscript : 'Superscript', + horizontalrule : 'Insert Horizontal Line', + pagebreak : 'Insert Page Break for Printing', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Unlink', + undo : 'Undo', + redo : 'Redo', + + // Common messages and labels. + common : + { + browseServer : 'Browse Server', + url : 'URL', + protocol : 'Protocol', + upload : 'Upload', + uploadSubmit : 'Send it to the Server', + image : 'Image', + flash : 'Flash', + form : 'Form', + checkbox : 'Checkbox', + radio : 'Radio Button', + textField : 'Text Field', + textarea : 'Textarea', + hiddenField : 'Hidden Field', + button : 'Button', + select : 'Selection Field', + imageButton : 'Image Button', + notSet : '<not set>', + id : 'Id', + name : 'Name', + langDir : 'Language Direction', + langDirLtr : 'Left to Right (LTR)', + langDirRtl : 'Right to Left (RTL)', + langCode : 'Language Code', + longDescr : 'Long Description URL', + cssClass : 'Stylesheet Classes', + advisoryTitle : 'Advisory Title', + cssStyle : 'Style', + ok : 'OK', + cancel : 'Cancel', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', + advancedTab : 'Advanced', + validateNumberFailed : 'This value is not a number.', + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Width', // MISSING + height : 'Height', // MISSING + align : 'Align', + alignLeft : 'Left', // MISSING + alignRight : 'Right', // MISSING + alignCenter : 'Centre', + alignTop : 'Top', // MISSING + alignMiddle : 'Middle', // MISSING + alignBottom : 'Bottom', // MISSING + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Insert Special Character', + title : 'Select Special Character', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Link', + other : '<other>', + menu : 'Edit Link', + title : 'Link', + info : 'Link Info', + target : 'Target', + upload : 'Upload', + advanced : 'Advanced', + type : 'Link Type', + toUrl : 'URL', // MISSING + toAnchor : 'Link to anchor in the text', + toEmail : 'E-mail', + targetFrame : '<frame>', + targetPopup : '<popup window>', + targetFrameName : 'Target Frame Name', + targetPopupName : 'Popup Window Name', + popupFeatures : 'Popup Window Features', + popupResizable : 'Resizable', + popupStatusBar : 'Status Bar', + popupLocationBar: 'Location Bar', + popupToolbar : 'Toolbar', + popupMenuBar : 'Menu Bar', + popupFullScreen : 'Full Screen (IE)', + popupScrollBars : 'Scroll Bars', + popupDependent : 'Dependent (Netscape)', + popupLeft : 'Left Position', + popupTop : 'Top Position', + id : 'Id', + langDir : 'Language Direction', + langDirLTR : 'Left to Right (LTR)', + langDirRTL : 'Right to Left (RTL)', + acccessKey : 'Access Key', + name : 'Name', + langCode : 'Language Code', + tabIndex : 'Tab Index', + advisoryTitle : 'Advisory Title', + advisoryContentType : 'Advisory Content Type', + cssClasses : 'Stylesheet Classes', + charset : 'Linked Resource Charset', + styles : 'Style', + rel : 'Relationship', // MISSING + selectAnchor : 'Select an Anchor', + anchorName : 'By Anchor Name', + anchorId : 'By Element Id', + emailAddress : 'E-Mail Address', + emailSubject : 'Message Subject', + emailBody : 'Message Body', + noAnchors : '(No anchors available in the document)', + noUrl : 'Please type the link URL', + noEmail : 'Please type the e-mail address' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Anchor', + menu : 'Edit Anchor', + title : 'Anchor Properties', + name : 'Anchor Name', + errorName : 'Please type the anchor name', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', + find : 'Find', + replace : 'Replace', + findWhat : 'Find what:', + replaceWith : 'Replace with:', + notFoundMsg : 'The specified text was not found.', + matchCase : 'Match case', + matchWord : 'Match whole word', + matchCyclic : 'Match cyclic', + replaceAll : 'Replace All', + replaceSuccessMsg : '%1 occurrence(s) replaced.' + }, + + // Table Dialog + table : + { + toolbar : 'Table', + title : 'Table Properties', + menu : 'Table Properties', + deleteTable : 'Delete Table', + rows : 'Rows', + columns : 'Columns', + border : 'Border size', + widthPx : 'pixels', + widthPc : 'percent', + widthUnit : 'width unit', // MISSING + cellSpace : 'Cell spacing', + cellPad : 'Cell padding', + caption : 'Caption', + summary : 'Summary', + headers : 'Headers', + headersNone : 'None', + headersColumn : 'First column', + headersRow : 'First Row', + headersBoth : 'Both', + invalidRows : 'Number of rows must be a number greater than 0.', + invalidCols : 'Number of columns must be a number greater than 0.', + invalidBorder : 'Border size must be a number.', + invalidWidth : 'Table width must be a number.', + invalidHeight : 'Table height must be a number.', + invalidCellSpacing : 'Cell spacing must be a number.', + invalidCellPadding : 'Cell padding must be a number.', + + cell : + { + menu : 'Cell', + insertBefore : 'Insert Cell Before', + insertAfter : 'Insert Cell After', + deleteCell : 'Delete Cells', + merge : 'Merge Cells', + mergeRight : 'Merge Right', + mergeDown : 'Merge Down', + splitHorizontal : 'Split Cell Horizontally', + splitVertical : 'Split Cell Vertically', + title : 'Cell Properties', + cellType : 'Cell Type', + rowSpan : 'Rows Span', + colSpan : 'Columns Span', + wordWrap : 'Word Wrap', + hAlign : 'Horizontal Alignment', + vAlign : 'Vertical Alignment', + alignBaseline : 'Baseline', + bgColor : 'Background Color', + borderColor : 'Border Color', + data : 'Data', + header : 'Header', + yes : 'Yes', + no : 'No', + invalidWidth : 'Cell width must be a number.', + invalidHeight : 'Cell height must be a number.', + invalidRowSpan : 'Rows span must be a whole number.', + invalidColSpan : 'Columns span must be a whole number.', + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', + insertBefore : 'Insert Row Before', + insertAfter : 'Insert Row After', + deleteRow : 'Delete Rows' + }, + + column : + { + menu : 'Column', + insertBefore : 'Insert Column Before', + insertAfter : 'Insert Column After', + deleteColumn : 'Delete Columns' + } + }, + + // Button Dialog. + button : + { + title : 'Button Properties', + text : 'Text (Value)', + type : 'Type', + typeBtn : 'Button', + typeSbm : 'Submit', + typeRst : 'Reset' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Checkbox Properties', + radioTitle : 'Radio Button Properties', + value : 'Value', + selected : 'Selected' + }, + + // Form Dialog. + form : + { + title : 'Form Properties', + menu : 'Form Properties', + action : 'Action', + method : 'Method', + encoding : 'Encoding' + }, + + // Select Field Dialog. + select : + { + title : 'Selection Field Properties', + selectInfo : 'Select Info', + opAvail : 'Available Options', + value : 'Value', + size : 'Size', + lines : 'lines', + chkMulti : 'Allow multiple selections', + opText : 'Text', + opValue : 'Value', + btnAdd : 'Add', + btnModify : 'Modify', + btnUp : 'Up', + btnDown : 'Down', + btnSetValue : 'Set as selected value', + btnDelete : 'Delete' + }, + + // Textarea Dialog. + textarea : + { + title : 'Textarea Properties', + cols : 'Columns', + rows : 'Rows' + }, + + // Text Field Dialog. + textfield : + { + title : 'Text Field Properties', + name : 'Name', + value : 'Value', + charWidth : 'Character Width', + maxChars : 'Maximum Characters', + type : 'Type', + typeText : 'Text', + typePass : 'Password' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Hidden Field Properties', + name : 'Name', + value : 'Value' + }, + + // Image Dialog. + image : + { + title : 'Image Properties', + titleButton : 'Image Button Properties', + menu : 'Image Properties', + infoTab : 'Image Info', + btnUpload : 'Send it to the Server', + upload : 'Upload', + alt : 'Alternative Text', + lockRatio : 'Lock Ratio', + resetSize : 'Reset Size', + border : 'Border', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Please type the image URL', + linkTab : 'Link', + button2Img : 'Do you want to transform the selected image button on a simple image?', + img2Button : 'Do you want to transform the selected image on a image button?', + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash Properties', + propertiesTab : 'Properties', + title : 'Flash Properties', + chkPlay : 'Auto Play', + chkLoop : 'Loop', + chkMenu : 'Enable Flash Menu', + chkFull : 'Allow Fullscreen', + scale : 'Scale', + scaleAll : 'Show all', + scaleNoBorder : 'No Border', + scaleFit : 'Exact Fit', + access : 'Script Access', + accessAlways : 'Always', + accessSameDomain: 'Same domain', + accessNever : 'Never', + alignAbsBottom : 'Abs Bottom', + alignAbsMiddle : 'Abs Middle', + alignBaseline : 'Baseline', + alignTextTop : 'Text Top', + quality : 'Quality', + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', + flashvars : 'Variables for Flash', + bgcolor : 'Background colour', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'URL must not be empty.', + validateHSpace : 'HSpace must be a number.', + validateVSpace : 'VSpace must be a number.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Check Spelling', + title : 'Spell Check', + notAvailable : 'Sorry, but service is unavailable now.', + errorLoading : 'Error loading application service host: %s.', + notInDic : 'Not in dictionary', + changeTo : 'Change to', + btnIgnore : 'Ignore', + btnIgnoreAll : 'Ignore All', + btnReplace : 'Replace', + btnReplaceAll : 'Replace All', + btnUndo : 'Undo', + noSuggestions : '- No suggestions -', + progress : 'Spell check in progress...', + noMispell : 'Spell check complete: No misspellings found', + noChanges : 'Spell check complete: No words changed', + oneChange : 'Spell check complete: One word changed', + manyChanges : 'Spell check complete: %1 words changed', + ieSpellDownload : 'Spell checker not installed. Do you want to download it now?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Insert a Smiley', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' + }, + + numberedlist : 'Insert/Remove Numbered List', + bulletedlist : 'Insert/Remove Bulleted List', + indent : 'Increase Indent', + outdent : 'Decrease Indent', + + justify : + { + left : 'Align Left', + center : 'Centre', + right : 'Align Right', + block : 'Justify' + }, + + blockquote : 'Block Quote', + + clipboard : + { + title : 'Paste', + cutError : 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', + copyError : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', + pasteMsg : 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Paste from Word', + title : 'Paste from Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Paste as plain text', + title : 'Paste as Plain Text' + }, + + templates : + { + button : 'Templates', + title : 'Content Templates', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', + selectPromptMsg : 'Please select the template to open in the editor', + emptyListMsg : '(No templates defined)' + }, + + showBlocks : 'Show Blocks', + + stylesCombo : + { + label : 'Styles', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', + panelTitle2 : 'Inline Styles', + panelTitle3 : 'Object Styles' + }, + + format : + { + label : 'Format', + panelTitle : 'Paragraph Format', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', // MISSING + panelTitle : 'Font Name' + }, + + fontSize : + { + label : 'Size', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Font Size' + }, + + colorButton : + { + textColorTitle : 'Text Colour', + bgColorTitle : 'Background Colour', + panelTitle : 'Colors', // MISSING + auto : 'Automatic', + more : 'More Colours...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'Maximize', + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Document Properties', // MISSING + title : 'Document Properties', // MISSING + design : 'Design', // MISSING + meta : 'Meta Tags', // MISSING + chooseColor : 'Choose', // MISSING + other : 'Other...', // MISSING + docTitle : 'Page Title', // MISSING + charset : 'Character Set Encoding', // MISSING + charsetOther : 'Other Character Set Encoding', // MISSING + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Document Type Heading', // MISSING + docTypeOther : 'Other Document Type Heading', // MISSING + xhtmlDec : 'Include XHTML Declarations', // MISSING + bgColor : 'Background Color', // MISSING + bgImage : 'Background Image URL', // MISSING + bgFixed : 'Non-scrolling (Fixed) Background', // MISSING + txtColor : 'Text Color', // MISSING + margin : 'Page Margins', // MISSING + marginTop : 'Top', // MISSING + marginLeft : 'Left', // MISSING + marginRight : 'Right', // MISSING + marginBottom : 'Bottom', // MISSING + metaKeywords : 'Document Indexing Keywords (comma separated)', // MISSING + metaDescription : 'Document Description', // MISSING + metaAuthor : 'Author', // MISSING + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/en-ca.js b/_source/lang/en-ca.js new file mode 100644 index 0000000..bfece57 --- /dev/null +++ b/_source/lang/en-ca.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * English (Canadian) language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['en-ca'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Source', + newPage : 'New Page', + save : 'Save', + preview : 'Preview', + cut : 'Cut', + copy : 'Copy', + paste : 'Paste', + print : 'Print', + underline : 'Underline', + bold : 'Bold', + italic : 'Italic', + selectAll : 'Select All', + removeFormat : 'Remove Format', + strike : 'Strike Through', + subscript : 'Subscript', + superscript : 'Superscript', + horizontalrule : 'Insert Horizontal Line', + pagebreak : 'Insert Page Break for Printing', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Unlink', + undo : 'Undo', + redo : 'Redo', + + // Common messages and labels. + common : + { + browseServer : 'Browse Server', + url : 'URL', + protocol : 'Protocol', + upload : 'Upload', + uploadSubmit : 'Send it to the Server', + image : 'Image', + flash : 'Flash', + form : 'Form', + checkbox : 'Checkbox', + radio : 'Radio Button', + textField : 'Text Field', + textarea : 'Textarea', + hiddenField : 'Hidden Field', + button : 'Button', + select : 'Selection Field', + imageButton : 'Image Button', + notSet : '<not set>', + id : 'Id', + name : 'Name', + langDir : 'Language Direction', + langDirLtr : 'Left to Right (LTR)', + langDirRtl : 'Right to Left (RTL)', + langCode : 'Language Code', + longDescr : 'Long Description URL', + cssClass : 'Stylesheet Classes', + advisoryTitle : 'Advisory Title', + cssStyle : 'Style', + ok : 'OK', + cancel : 'Cancel', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', + advancedTab : 'Advanced', + validateNumberFailed : 'This value is not a number.', + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Width', // MISSING + height : 'Height', // MISSING + align : 'Align', + alignLeft : 'Left', // MISSING + alignRight : 'Right', // MISSING + alignCenter : 'Centre', + alignTop : 'Top', // MISSING + alignMiddle : 'Middle', // MISSING + alignBottom : 'Bottom', // MISSING + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Insert Special Character', + title : 'Select Special Character', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Link', + other : '<other>', + menu : 'Edit Link', + title : 'Link', + info : 'Link Info', + target : 'Target', + upload : 'Upload', + advanced : 'Advanced', + type : 'Link Type', + toUrl : 'URL', // MISSING + toAnchor : 'Link to anchor in the text', + toEmail : 'E-mail', + targetFrame : '<frame>', + targetPopup : '<popup window>', + targetFrameName : 'Target Frame Name', + targetPopupName : 'Popup Window Name', + popupFeatures : 'Popup Window Features', + popupResizable : 'Resizable', + popupStatusBar : 'Status Bar', + popupLocationBar: 'Location Bar', + popupToolbar : 'Toolbar', + popupMenuBar : 'Menu Bar', + popupFullScreen : 'Full Screen (IE)', + popupScrollBars : 'Scroll Bars', + popupDependent : 'Dependent (Netscape)', + popupLeft : 'Left Position', + popupTop : 'Top Position', + id : 'Id', + langDir : 'Language Direction', + langDirLTR : 'Left to Right (LTR)', + langDirRTL : 'Right to Left (RTL)', + acccessKey : 'Access Key', + name : 'Name', + langCode : 'Language Code', + tabIndex : 'Tab Index', + advisoryTitle : 'Advisory Title', + advisoryContentType : 'Advisory Content Type', + cssClasses : 'Stylesheet Classes', + charset : 'Linked Resource Charset', + styles : 'Style', + rel : 'Relationship', // MISSING + selectAnchor : 'Select an Anchor', + anchorName : 'By Anchor Name', + anchorId : 'By Element Id', + emailAddress : 'E-Mail Address', + emailSubject : 'Message Subject', + emailBody : 'Message Body', + noAnchors : '(No anchors available in the document)', + noUrl : 'Please type the link URL', + noEmail : 'Please type the e-mail address' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Anchor', + menu : 'Edit Anchor', + title : 'Anchor Properties', + name : 'Anchor Name', + errorName : 'Please type the anchor name', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', + find : 'Find', + replace : 'Replace', + findWhat : 'Find what:', + replaceWith : 'Replace with:', + notFoundMsg : 'The specified text was not found.', + matchCase : 'Match case', + matchWord : 'Match whole word', + matchCyclic : 'Match cyclic', + replaceAll : 'Replace All', + replaceSuccessMsg : '%1 occurrence(s) replaced.' + }, + + // Table Dialog + table : + { + toolbar : 'Table', + title : 'Table Properties', + menu : 'Table Properties', + deleteTable : 'Delete Table', + rows : 'Rows', + columns : 'Columns', + border : 'Border size', + widthPx : 'pixels', + widthPc : 'percent', + widthUnit : 'width unit', // MISSING + cellSpace : 'Cell spacing', + cellPad : 'Cell padding', + caption : 'Caption', + summary : 'Summary', + headers : 'Headers', + headersNone : 'None', + headersColumn : 'First column', + headersRow : 'First Row', + headersBoth : 'Both', + invalidRows : 'Number of rows must be a number greater than 0.', + invalidCols : 'Number of columns must be a number greater than 0.', + invalidBorder : 'Border size must be a number.', + invalidWidth : 'Table width must be a number.', + invalidHeight : 'Table height must be a number.', + invalidCellSpacing : 'Cell spacing must be a number.', + invalidCellPadding : 'Cell padding must be a number.', + + cell : + { + menu : 'Cell', + insertBefore : 'Insert Cell Before', + insertAfter : 'Insert Cell After', + deleteCell : 'Delete Cells', + merge : 'Merge Cells', + mergeRight : 'Merge Right', + mergeDown : 'Merge Down', + splitHorizontal : 'Split Cell Horizontally', + splitVertical : 'Split Cell Vertically', + title : 'Cell Properties', + cellType : 'Cell Type', + rowSpan : 'Rows Span', + colSpan : 'Columns Span', + wordWrap : 'Word Wrap', + hAlign : 'Horizontal Alignment', + vAlign : 'Vertical Alignment', + alignBaseline : 'Baseline', + bgColor : 'Background Color', + borderColor : 'Border Color', + data : 'Data', + header : 'Header', + yes : 'Yes', + no : 'No', + invalidWidth : 'Cell width must be a number.', + invalidHeight : 'Cell height must be a number.', + invalidRowSpan : 'Rows span must be a whole number.', + invalidColSpan : 'Columns span must be a whole number.', + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', + insertBefore : 'Insert Row Before', + insertAfter : 'Insert Row After', + deleteRow : 'Delete Rows' + }, + + column : + { + menu : 'Column', + insertBefore : 'Insert Column Before', + insertAfter : 'Insert Column After', + deleteColumn : 'Delete Columns' + } + }, + + // Button Dialog. + button : + { + title : 'Button Properties', + text : 'Text (Value)', + type : 'Type', + typeBtn : 'Button', + typeSbm : 'Submit', + typeRst : 'Reset' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Checkbox Properties', + radioTitle : 'Radio Button Properties', + value : 'Value', + selected : 'Selected' + }, + + // Form Dialog. + form : + { + title : 'Form Properties', + menu : 'Form Properties', + action : 'Action', + method : 'Method', + encoding : 'Encoding' + }, + + // Select Field Dialog. + select : + { + title : 'Selection Field Properties', + selectInfo : 'Select Info', + opAvail : 'Available Options', + value : 'Value', + size : 'Size', + lines : 'lines', + chkMulti : 'Allow multiple selections', + opText : 'Text', + opValue : 'Value', + btnAdd : 'Add', + btnModify : 'Modify', + btnUp : 'Up', + btnDown : 'Down', + btnSetValue : 'Set as selected value', + btnDelete : 'Delete' + }, + + // Textarea Dialog. + textarea : + { + title : 'Textarea Properties', + cols : 'Columns', + rows : 'Rows' + }, + + // Text Field Dialog. + textfield : + { + title : 'Text Field Properties', + name : 'Name', + value : 'Value', + charWidth : 'Character Width', + maxChars : 'Maximum Characters', + type : 'Type', + typeText : 'Text', + typePass : 'Password' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Hidden Field Properties', + name : 'Name', + value : 'Value' + }, + + // Image Dialog. + image : + { + title : 'Image Properties', + titleButton : 'Image Button Properties', + menu : 'Image Properties', + infoTab : 'Image Info', + btnUpload : 'Send it to the Server', + upload : 'Upload', + alt : 'Alternative Text', + lockRatio : 'Lock Ratio', + resetSize : 'Reset Size', + border : 'Border', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Please type the image URL', + linkTab : 'Link', + button2Img : 'Do you want to transform the selected image button on a simple image?', + img2Button : 'Do you want to transform the selected image on a image button?', + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash Properties', + propertiesTab : 'Properties', + title : 'Flash Properties', + chkPlay : 'Auto Play', + chkLoop : 'Loop', + chkMenu : 'Enable Flash Menu', + chkFull : 'Allow Fullscreen', + scale : 'Scale', + scaleAll : 'Show all', + scaleNoBorder : 'No Border', + scaleFit : 'Exact Fit', + access : 'Script Access', + accessAlways : 'Always', + accessSameDomain: 'Same domain', + accessNever : 'Never', + alignAbsBottom : 'Abs Bottom', + alignAbsMiddle : 'Abs Middle', + alignBaseline : 'Baseline', + alignTextTop : 'Text Top', + quality : 'Quality', + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', + flashvars : 'Variables for Flash', + bgcolor : 'Background colour', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'URL must not be empty.', + validateHSpace : 'HSpace must be a number.', + validateVSpace : 'VSpace must be a number.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Check Spelling', + title : 'Spell Check', + notAvailable : 'Sorry, but service is unavailable now.', + errorLoading : 'Error loading application service host: %s.', + notInDic : 'Not in dictionary', + changeTo : 'Change to', + btnIgnore : 'Ignore', + btnIgnoreAll : 'Ignore All', + btnReplace : 'Replace', + btnReplaceAll : 'Replace All', + btnUndo : 'Undo', + noSuggestions : '- No suggestions -', + progress : 'Spell check in progress...', + noMispell : 'Spell check complete: No misspellings found', + noChanges : 'Spell check complete: No words changed', + oneChange : 'Spell check complete: One word changed', + manyChanges : 'Spell check complete: %1 words changed', + ieSpellDownload : 'Spell checker not installed. Do you want to download it now?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Insert a Smiley', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' + }, + + numberedlist : 'Insert/Remove Numbered List', + bulletedlist : 'Insert/Remove Bulleted List', + indent : 'Increase Indent', + outdent : 'Decrease Indent', + + justify : + { + left : 'Align Left', + center : 'Centre', + right : 'Align Right', + block : 'Justify' + }, + + blockquote : 'Block Quote', + + clipboard : + { + title : 'Paste', + cutError : 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', + copyError : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', + pasteMsg : 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Paste from Word', + title : 'Paste from Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Paste as plain text', + title : 'Paste as Plain Text' + }, + + templates : + { + button : 'Templates', + title : 'Content Templates', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', + selectPromptMsg : 'Please select the template to open in the editor', + emptyListMsg : '(No templates defined)' + }, + + showBlocks : 'Show Blocks', + + stylesCombo : + { + label : 'Styles', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', + panelTitle2 : 'Inline Styles', + panelTitle3 : 'Object Styles' + }, + + format : + { + label : 'Format', + panelTitle : 'Paragraph Format', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', // MISSING + panelTitle : 'Font Name' + }, + + fontSize : + { + label : 'Size', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Font Size' + }, + + colorButton : + { + textColorTitle : 'Text Colour', + bgColorTitle : 'Background Colour', + panelTitle : 'Colors', // MISSING + auto : 'Automatic', + more : 'More Colours...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'Maximize', + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Document Properties', // MISSING + title : 'Document Properties', // MISSING + design : 'Design', // MISSING + meta : 'Meta Tags', // MISSING + chooseColor : 'Choose', // MISSING + other : 'Other...', // MISSING + docTitle : 'Page Title', // MISSING + charset : 'Character Set Encoding', // MISSING + charsetOther : 'Other Character Set Encoding', // MISSING + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Document Type Heading', // MISSING + docTypeOther : 'Other Document Type Heading', // MISSING + xhtmlDec : 'Include XHTML Declarations', // MISSING + bgColor : 'Background Color', // MISSING + bgImage : 'Background Image URL', // MISSING + bgFixed : 'Non-scrolling (Fixed) Background', // MISSING + txtColor : 'Text Color', // MISSING + margin : 'Page Margins', // MISSING + marginTop : 'Top', // MISSING + marginLeft : 'Left', // MISSING + marginRight : 'Right', // MISSING + marginBottom : 'Bottom', // MISSING + metaKeywords : 'Document Indexing Keywords (comma separated)', // MISSING + metaDescription : 'Document Description', // MISSING + metaAuthor : 'Author', // MISSING + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/en-gb.js b/_source/lang/en-gb.js new file mode 100644 index 0000000..9e79539 --- /dev/null +++ b/_source/lang/en-gb.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * English (United Kingdom) language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['en-gb'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', + + // Toolbar buttons without dialogs. + source : 'Source', + newPage : 'New Page', + save : 'Save', + preview : 'Preview', + cut : 'Cut', + copy : 'Copy', + paste : 'Paste', + print : 'Print', + underline : 'Underline', + bold : 'Bold', + italic : 'Italic', + selectAll : 'Select All', + removeFormat : 'Remove Format', + strike : 'Strike Through', + subscript : 'Subscript', + superscript : 'Superscript', + horizontalrule : 'Insert Horizontal Line', + pagebreak : 'Insert Page Break for Printing', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Unlink', + undo : 'Undo', + redo : 'Redo', + + // Common messages and labels. + common : + { + browseServer : 'Browse Server', + url : 'URL', + protocol : 'Protocol', + upload : 'Upload', + uploadSubmit : 'Send it to the Server', + image : 'Image', + flash : 'Flash', + form : 'Form', + checkbox : 'Checkbox', + radio : 'Radio Button', + textField : 'Text Field', + textarea : 'Textarea', + hiddenField : 'Hidden Field', + button : 'Button', + select : 'Selection Field', + imageButton : 'Image Button', + notSet : '<not set>', + id : 'Id', + name : 'Name', + langDir : 'Language Direction', + langDirLtr : 'Left to Right (LTR)', + langDirRtl : 'Right to Left (RTL)', + langCode : 'Language Code', + longDescr : 'Long Description URL', + cssClass : 'Stylesheet Classes', + advisoryTitle : 'Advisory Title', + cssStyle : 'Style', + ok : 'OK', + cancel : 'Cancel', + close : 'Close', + preview : 'Preview', + generalTab : 'General', + advancedTab : 'Advanced', + validateNumberFailed : 'This value is not a number.', + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', + options : 'Options', + target : 'Target', + targetNew : 'New Window (_blank)', + targetTop : 'Topmost Window (_top)', + targetSelf : 'Same Window (_self)', + targetParent : 'Parent Window (_parent)', + langDirLTR : 'Left to Right (LTR)', + langDirRTL : 'Right to Left (RTL)', + styles : 'Style', + cssClasses : 'Stylesheet Classes', + width : 'Width', + height : 'Height', + align : 'Align', + alignLeft : 'Left', + alignRight : 'Right', + alignCenter : 'Centre', + alignTop : 'Top', + alignMiddle : 'Middle', + alignBottom : 'Bottom', + invalidHeight : 'Height must be a number.', + invalidWidth : 'Width must be a number.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Insert Special Character', + title : 'Select Special Character', + options : 'Special Character Options' + }, + + // Link dialog. + link : + { + toolbar : 'Link', + other : '<other>', + menu : 'Edit Link', + title : 'Link', + info : 'Link Info', + target : 'Target', + upload : 'Upload', + advanced : 'Advanced', + type : 'Link Type', + toUrl : 'URL', + toAnchor : 'Link to anchor in the text', + toEmail : 'E-mail', + targetFrame : '<frame>', + targetPopup : '<popup window>', + targetFrameName : 'Target Frame Name', + targetPopupName : 'Popup Window Name', + popupFeatures : 'Popup Window Features', + popupResizable : 'Resizable', + popupStatusBar : 'Status Bar', + popupLocationBar: 'Location Bar', + popupToolbar : 'Toolbar', + popupMenuBar : 'Menu Bar', + popupFullScreen : 'Full Screen (IE)', + popupScrollBars : 'Scroll Bars', + popupDependent : 'Dependent (Netscape)', + popupLeft : 'Left Position', + popupTop : 'Top Position', + id : 'Id', + langDir : 'Language Direction', + langDirLTR : 'Left to Right (LTR)', + langDirRTL : 'Right to Left (RTL)', + acccessKey : 'Access Key', + name : 'Name', + langCode : 'Language Code', + tabIndex : 'Tab Index', + advisoryTitle : 'Advisory Title', + advisoryContentType : 'Advisory Content Type', + cssClasses : 'Stylesheet Classes', + charset : 'Linked Resource Charset', + styles : 'Style', + rel : 'Relationship', // MISSING + selectAnchor : 'Select an Anchor', + anchorName : 'By Anchor Name', + anchorId : 'By Element Id', + emailAddress : 'E-Mail Address', + emailSubject : 'Message Subject', + emailBody : 'Message Body', + noAnchors : '(No anchors available in the document)', + noUrl : 'Please type the link URL', + noEmail : 'Please type the e-mail address' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Anchor', + menu : 'Edit Anchor', + title : 'Anchor Properties', + name : 'Anchor Name', + errorName : 'Please type the anchor name', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', + bulletedTitle : 'Bulleted List Properties', + type : 'Type', + start : 'Start', + validateStartNumber :'List start number must be a whole number.', + circle : 'Circle', + disc : 'Disc', + square : 'Square', + none : 'None', + notset : '<not set>', + armenian : 'Armenian numbering', + georgian : 'Georgian numbering (an, ban, gan, etc.)', + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', + decimal : 'Decimal (1, 2, 3, etc.)', + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', + find : 'Find', + replace : 'Replace', + findWhat : 'Find what:', + replaceWith : 'Replace with:', + notFoundMsg : 'The specified text was not found.', + matchCase : 'Match case', + matchWord : 'Match whole word', + matchCyclic : 'Match cyclic', + replaceAll : 'Replace All', + replaceSuccessMsg : '%1 occurrence(s) replaced.' + }, + + // Table Dialog + table : + { + toolbar : 'Table', + title : 'Table Properties', + menu : 'Table Properties', + deleteTable : 'Delete Table', + rows : 'Rows', + columns : 'Columns', + border : 'Border size', + widthPx : 'pixels', + widthPc : 'percent', + widthUnit : 'width unit', + cellSpace : 'Cell spacing', + cellPad : 'Cell padding', + caption : 'Caption', + summary : 'Summary', + headers : 'Headers', + headersNone : 'None', + headersColumn : 'First column', + headersRow : 'First Row', + headersBoth : 'Both', + invalidRows : 'Number of rows must be a number greater than 0.', + invalidCols : 'Number of columns must be a number greater than 0.', + invalidBorder : 'Border size must be a number.', + invalidWidth : 'Table width must be a number.', + invalidHeight : 'Table height must be a number.', + invalidCellSpacing : 'Cell spacing must be a number.', + invalidCellPadding : 'Cell padding must be a number.', + + cell : + { + menu : 'Cell', + insertBefore : 'Insert Cell Before', + insertAfter : 'Insert Cell After', + deleteCell : 'Delete Cells', + merge : 'Merge Cells', + mergeRight : 'Merge Right', + mergeDown : 'Merge Down', + splitHorizontal : 'Split Cell Horizontally', + splitVertical : 'Split Cell Vertically', + title : 'Cell Properties', + cellType : 'Cell Type', + rowSpan : 'Rows Span', + colSpan : 'Columns Span', + wordWrap : 'Word Wrap', + hAlign : 'Horizontal Alignment', + vAlign : 'Vertical Alignment', + alignBaseline : 'Baseline', + bgColor : 'Background Color', + borderColor : 'Border Color', + data : 'Data', + header : 'Header', + yes : 'Yes', + no : 'No', + invalidWidth : 'Cell width must be a number.', + invalidHeight : 'Cell height must be a number.', + invalidRowSpan : 'Rows span must be a whole number.', + invalidColSpan : 'Columns span must be a whole number.', + chooseColor : 'Choose' + }, + + row : + { + menu : 'Row', + insertBefore : 'Insert Row Before', + insertAfter : 'Insert Row After', + deleteRow : 'Delete Rows' + }, + + column : + { + menu : 'Column', + insertBefore : 'Insert Column Before', + insertAfter : 'Insert Column After', + deleteColumn : 'Delete Columns' + } + }, + + // Button Dialog. + button : + { + title : 'Button Properties', + text : 'Text (Value)', + type : 'Type', + typeBtn : 'Button', + typeSbm : 'Submit', + typeRst : 'Reset' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Checkbox Properties', + radioTitle : 'Radio Button Properties', + value : 'Value', + selected : 'Selected' + }, + + // Form Dialog. + form : + { + title : 'Form Properties', + menu : 'Form Properties', + action : 'Action', + method : 'Method', + encoding : 'Encoding' + }, + + // Select Field Dialog. + select : + { + title : 'Selection Field Properties', + selectInfo : 'Select Info', + opAvail : 'Available Options', + value : 'Value', + size : 'Size', + lines : 'lines', + chkMulti : 'Allow multiple selections', + opText : 'Text', + opValue : 'Value', + btnAdd : 'Add', + btnModify : 'Modify', + btnUp : 'Up', + btnDown : 'Down', + btnSetValue : 'Set as selected value', + btnDelete : 'Delete' + }, + + // Textarea Dialog. + textarea : + { + title : 'Textarea Properties', + cols : 'Columns', + rows : 'Rows' + }, + + // Text Field Dialog. + textfield : + { + title : 'Text Field Properties', + name : 'Name', + value : 'Value', + charWidth : 'Character Width', + maxChars : 'Maximum Characters', + type : 'Type', + typeText : 'Text', + typePass : 'Password' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Hidden Field Properties', + name : 'Name', + value : 'Value' + }, + + // Image Dialog. + image : + { + title : 'Image Properties', + titleButton : 'Image Button Properties', + menu : 'Image Properties', + infoTab : 'Image Info', + btnUpload : 'Send it to the Server', + upload : 'Upload', + alt : 'Alternative Text', + lockRatio : 'Lock Ratio', + resetSize : 'Reset Size', + border : 'Border', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Please type the image URL', + linkTab : 'Link', + button2Img : 'Do you want to transform the selected image button on a simple image?', + img2Button : 'Do you want to transform the selected image on a image button?', + urlMissing : 'Image source URL is missing.', + validateBorder : 'Border must be a whole number.', + validateHSpace : 'HSpace must be a whole number.', + validateVSpace : 'VSpace must be a whole number.' + }, + + // Flash Dialog + flash : + { + properties : 'Flash Properties', + propertiesTab : 'Properties', + title : 'Flash Properties', + chkPlay : 'Auto Play', + chkLoop : 'Loop', + chkMenu : 'Enable Flash Menu', + chkFull : 'Allow Fullscreen', + scale : 'Scale', + scaleAll : 'Show all', + scaleNoBorder : 'No Border', + scaleFit : 'Exact Fit', + access : 'Script Access', + accessAlways : 'Always', + accessSameDomain: 'Same domain', + accessNever : 'Never', + alignAbsBottom : 'Abs Bottom', + alignAbsMiddle : 'Abs Middle', + alignBaseline : 'Baseline', + alignTextTop : 'Text Top', + quality : 'Quality', + qualityBest : 'Best', + qualityHigh : 'High', + qualityAutoHigh : 'Auto High', + qualityMedium : 'Medium', + qualityAutoLow : 'Auto Low', + qualityLow : 'Low', + windowModeWindow: 'Window', + windowModeOpaque: 'Opaque', + windowModeTransparent : 'Transparent', + windowMode : 'Window mode', + flashvars : 'Variables for Flash', + bgcolor : 'Background colour', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'URL must not be empty.', + validateHSpace : 'HSpace must be a number.', + validateVSpace : 'VSpace must be a number.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Check Spelling', + title : 'Spell Check', + notAvailable : 'Sorry, but service is unavailable now.', + errorLoading : 'Error loading application service host: %s.', + notInDic : 'Not in dictionary', + changeTo : 'Change to', + btnIgnore : 'Ignore', + btnIgnoreAll : 'Ignore All', + btnReplace : 'Replace', + btnReplaceAll : 'Replace All', + btnUndo : 'Undo', + noSuggestions : '- No suggestions -', + progress : 'Spell check in progress...', + noMispell : 'Spell check complete: No misspellings found', + noChanges : 'Spell check complete: No words changed', + oneChange : 'Spell check complete: One word changed', + manyChanges : 'Spell check complete: %1 words changed', + ieSpellDownload : 'Spell checker not installed. Do you want to download it now?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Insert a Smiley', + options : 'Smiley Options' + }, + + elementsPath : + { + eleLabel : 'Elements path', + eleTitle : '%1 element' + }, + + numberedlist : 'Insert/Remove Numbered List', + bulletedlist : 'Insert/Remove Bulleted List', + indent : 'Increase Indent', + outdent : 'Decrease Indent', + + justify : + { + left : 'Align Left', + center : 'Centre', + right : 'Align Right', + block : 'Justify' + }, + + blockquote : 'Block Quote', + + clipboard : + { + title : 'Paste', + cutError : 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', + copyError : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', + pasteMsg : 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', + pasteArea : 'Paste Area' + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', + toolbar : 'Paste from Word', + title : 'Paste from Word', + error : 'It was not possible to clean up the pasted data due to an internal error' + }, + + pasteText : + { + button : 'Paste as plain text', + title : 'Paste as Plain Text' + }, + + templates : + { + button : 'Templates', + title : 'Content Templates', + options : 'Template Options', + insertOption : 'Replace actual contents', + selectPromptMsg : 'Please select the template to open in the editor', + emptyListMsg : '(No templates defined)' + }, + + showBlocks : 'Show Blocks', + + stylesCombo : + { + label : 'Styles', + panelTitle : 'Formatting Styles', + panelTitle1 : 'Block Styles', + panelTitle2 : 'Inline Styles', + panelTitle3 : 'Object Styles' + }, + + format : + { + label : 'Format', + panelTitle : 'Paragraph Format', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', + toolbar : 'Create Div Container', + cssClassInputLabel : 'Stylesheet Classes', + styleSelectLabel : 'Style', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Language Code', + inlineStyleInputLabel : 'Inline Style', + advisoryTitleInputLabel : 'Advisory Title', + langDirLabel : 'Language Direction', + langDirLTRLabel : 'Left to Right (LTR)', + langDirRTLLabel : 'Right to Left (RTL)', + edit : 'Edit Div', + remove : 'Remove Div' + }, + + iframe : + { + title : 'IFrame Properties', + toolbar : 'IFrame', + noUrl : 'Please type the iframe URL', + scrolling : 'Enable scrollbars', + border : 'Show frame border' + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', + panelTitle : 'Font Name' + }, + + fontSize : + { + label : 'Size', + voiceLabel : 'Font Size', + panelTitle : 'Font Size' + }, + + colorButton : + { + textColorTitle : 'Text Colour', + bgColorTitle : 'Background Colour', + panelTitle : 'Colours', + auto : 'Automatic', + more : 'More Colours...' + }, + + colors : + { + '000' : 'Black', + '800000' : 'Maroon', + '8B4513' : 'Saddle Brown', + '2F4F4F' : 'Dark Slate Grey', + '008080' : 'Teal', + '000080' : 'Navy', + '4B0082' : 'Indigo', + '696969' : 'Dark Grey', + 'B22222' : 'Fire Brick', + 'A52A2A' : 'Brown', + 'DAA520' : 'Golden Rod', + '006400' : 'Dark Green', + '40E0D0' : 'Turquoise', + '0000CD' : 'Medium Blue', + '800080' : 'Purple', + '808080' : 'Grey', + 'F00' : 'Red', + 'FF8C00' : 'Dark Orange', + 'FFD700' : 'Gold', + '008000' : 'Green', + '0FF' : 'Cyan', + '00F' : 'Blue', + 'EE82EE' : 'Violet', + 'A9A9A9' : 'Dim Grey', + 'FFA07A' : 'Light Salmon', + 'FFA500' : 'Orange', + 'FFFF00' : 'Yellow', + '00FF00' : 'Lime', + 'AFEEEE' : 'Pale Turquoise', + 'ADD8E6' : 'Light Blue', + 'DDA0DD' : 'Plum', + 'D3D3D3' : 'Light Grey', + 'FFF0F5' : 'Lavender Blush', + 'FAEBD7' : 'Antique White', + 'FFFFE0' : 'Light Yellow', + 'F0FFF0' : 'Honeydew', + 'F0FFFF' : 'Azure', + 'F0F8FF' : 'Alice Blue', + 'E6E6FA' : 'Lavender', + 'FFF' : 'White' + }, + + scayt : + { + title : 'Spell Check As You Type', + opera_title : 'Not supported by Opera', + enable : 'Enable SCAYT', + disable : 'Disable SCAYT', + about : 'About SCAYT', + toggle : 'Toggle SCAYT', + options : 'Options', + langs : 'Languages', + moreSuggestions : 'More suggestions', + ignore : 'Ignore', + ignoreAll : 'Ignore All', + addWord : 'Add Word', + emptyDic : 'Dictionary name should not be empty.', + + optionsTab : 'Options', + allCaps : 'Ignore All-Caps Words', + ignoreDomainNames : 'Ignore Domain Names', + mixedCase : 'Ignore Words with Mixed Case', + mixedWithDigits : 'Ignore Words with Numbers', + + languagesTab : 'Languages', + + dictionariesTab : 'Dictionaries', + dic_field_name : 'Dictionary name', + dic_create : 'Create', + dic_restore : 'Restore', + dic_delete : 'Delete', + dic_rename : 'Rename', + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', + + aboutTab : 'About' + }, + + about : + { + title : 'About CKEditor', + dlgTitle : 'About CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'Maximise', + minimize : 'Minimise', + + fakeobjects : + { + anchor : 'Anchor', + flash : 'Flash Animation', + iframe : 'IFrame', + hiddenfield : 'Hidden Field', + unknown : 'Unknown Object' + }, + + resize : 'Drag to resize', + + colordialog : + { + title : 'Select colour', + options : 'Colour Options', + highlight : 'Highlight', + selected : 'Selected Colour', + clear : 'Clear' + }, + + toolbarCollapse : 'Collapse Toolbar', + toolbarExpand : 'Expand Toolbar', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', + rtl : 'Text direction from right to left' + }, + + docprops : + { + label : 'Document Properties', // MISSING + title : 'Document Properties', // MISSING + design : 'Design', // MISSING + meta : 'Meta Tags', // MISSING + chooseColor : 'Choose', // MISSING + other : 'Other...', // MISSING + docTitle : 'Page Title', // MISSING + charset : 'Character Set Encoding', // MISSING + charsetOther : 'Other Character Set Encoding', // MISSING + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Document Type Heading', // MISSING + docTypeOther : 'Other Document Type Heading', // MISSING + xhtmlDec : 'Include XHTML Declarations', // MISSING + bgColor : 'Background Color', // MISSING + bgImage : 'Background Image URL', // MISSING + bgFixed : 'Non-scrolling (Fixed) Background', // MISSING + txtColor : 'Text Color', // MISSING + margin : 'Page Margins', // MISSING + marginTop : 'Top', // MISSING + marginLeft : 'Left', // MISSING + marginRight : 'Right', // MISSING + marginBottom : 'Bottom', // MISSING + metaKeywords : 'Document Indexing Keywords (comma separated)', // MISSING + metaDescription : 'Document Description', // MISSING + metaAuthor : 'Author', // MISSING + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/en.js b/_source/lang/en.js new file mode 100644 index 0000000..5f9db15 --- /dev/null +++ b/_source/lang/en.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the English + * language. This is the base file for all translations. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['en'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', + editor : 'Rich Text Editor', + + // Toolbar buttons without dialogs. + source : 'Source', + newPage : 'New Page', + save : 'Save', + preview : 'Preview', + cut : 'Cut', + copy : 'Copy', + paste : 'Paste', + print : 'Print', + underline : 'Underline', + bold : 'Bold', + italic : 'Italic', + selectAll : 'Select All', + removeFormat : 'Remove Format', + strike : 'Strike Through', + subscript : 'Subscript', + superscript : 'Superscript', + horizontalrule : 'Insert Horizontal Line', + pagebreak : 'Insert Page Break for Printing', + pagebreakAlt : 'Page Break', + unlink : 'Unlink', + undo : 'Undo', + redo : 'Redo', + + // Common messages and labels. + common : + { + browseServer : 'Browse Server', + url : 'URL', + protocol : 'Protocol', + upload : 'Upload', + uploadSubmit : 'Send it to the Server', + image : 'Image', + flash : 'Flash', + form : 'Form', + checkbox : 'Checkbox', + radio : 'Radio Button', + textField : 'Text Field', + textarea : 'Textarea', + hiddenField : 'Hidden Field', + button : 'Button', + select : 'Selection Field', + imageButton : 'Image Button', + notSet : '<not set>', + id : 'Id', + name : 'Name', + langDir : 'Language Direction', + langDirLtr : 'Left to Right (LTR)', + langDirRtl : 'Right to Left (RTL)', + langCode : 'Language Code', + longDescr : 'Long Description URL', + cssClass : 'Stylesheet Classes', + advisoryTitle : 'Advisory Title', + cssStyle : 'Style', + ok : 'OK', + cancel : 'Cancel', + close : 'Close', + preview : 'Preview', + generalTab : 'General', + advancedTab : 'Advanced', + validateNumberFailed : 'This value is not a number.', + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', + options : 'Options', + target : 'Target', + targetNew : 'New Window (_blank)', + targetTop : 'Topmost Window (_top)', + targetSelf : 'Same Window (_self)', + targetParent : 'Parent Window (_parent)', + langDirLTR : 'Left to Right (LTR)', + langDirRTL : 'Right to Left (RTL)', + styles : 'Style', + cssClasses : 'Stylesheet Classes', + width : 'Width', + height : 'Height', + align : 'Alignment', + alignLeft : 'Left', + alignRight : 'Right', + alignCenter : 'Center', + alignTop : 'Top', + alignMiddle : 'Middle', + alignBottom : 'Bottom', + invalidHeight : 'Height must be a number.', + invalidWidth : 'Width must be a number.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Insert Special Character', + title : 'Select Special Character', + options : 'Special Character Options' + }, + + // Link dialog. + link : + { + toolbar : 'Link', + other : '<other>', + menu : 'Edit Link', + title : 'Link', + info : 'Link Info', + target : 'Target', + upload : 'Upload', + advanced : 'Advanced', + type : 'Link Type', + toUrl : 'URL', + toAnchor : 'Link to anchor in the text', + toEmail : 'E-mail', + targetFrame : '<frame>', + targetPopup : '<popup window>', + targetFrameName : 'Target Frame Name', + targetPopupName : 'Popup Window Name', + popupFeatures : 'Popup Window Features', + popupResizable : 'Resizable', + popupStatusBar : 'Status Bar', + popupLocationBar: 'Location Bar', + popupToolbar : 'Toolbar', + popupMenuBar : 'Menu Bar', + popupFullScreen : 'Full Screen (IE)', + popupScrollBars : 'Scroll Bars', + popupDependent : 'Dependent (Netscape)', + popupLeft : 'Left Position', + popupTop : 'Top Position', + id : 'Id', + langDir : 'Language Direction', + langDirLTR : 'Left to Right (LTR)', + langDirRTL : 'Right to Left (RTL)', + acccessKey : 'Access Key', + name : 'Name', + langCode : 'Language Code', + tabIndex : 'Tab Index', + advisoryTitle : 'Advisory Title', + advisoryContentType : 'Advisory Content Type', + cssClasses : 'Stylesheet Classes', + charset : 'Linked Resource Charset', + styles : 'Style', + rel : 'Relationship', + selectAnchor : 'Select an Anchor', + anchorName : 'By Anchor Name', + anchorId : 'By Element Id', + emailAddress : 'E-Mail Address', + emailSubject : 'Message Subject', + emailBody : 'Message Body', + noAnchors : '(No anchors available in the document)', + noUrl : 'Please type the link URL', + noEmail : 'Please type the e-mail address' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Anchor', + menu : 'Edit Anchor', + title : 'Anchor Properties', + name : 'Anchor Name', + errorName : 'Please type the anchor name', + remove : 'Remove Anchor' + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', + bulletedTitle : 'Bulleted List Properties', + type : 'Type', + start : 'Start', + validateStartNumber :'List start number must be a whole number.', + circle : 'Circle', + disc : 'Disc', + square : 'Square', + none : 'None', + notset : '<not set>', + armenian : 'Armenian numbering', + georgian : 'Georgian numbering (an, ban, gan, etc.)', + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', + decimal : 'Decimal (1, 2, 3, etc.)', + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', + find : 'Find', + replace : 'Replace', + findWhat : 'Find what:', + replaceWith : 'Replace with:', + notFoundMsg : 'The specified text was not found.', + matchCase : 'Match case', + matchWord : 'Match whole word', + matchCyclic : 'Match cyclic', + replaceAll : 'Replace All', + replaceSuccessMsg : '%1 occurrence(s) replaced.' + }, + + // Table Dialog + table : + { + toolbar : 'Table', + title : 'Table Properties', + menu : 'Table Properties', + deleteTable : 'Delete Table', + rows : 'Rows', + columns : 'Columns', + border : 'Border size', + widthPx : 'pixels', + widthPc : 'percent', + widthUnit : 'width unit', + cellSpace : 'Cell spacing', + cellPad : 'Cell padding', + caption : 'Caption', + summary : 'Summary', + headers : 'Headers', + headersNone : 'None', + headersColumn : 'First column', + headersRow : 'First Row', + headersBoth : 'Both', + invalidRows : 'Number of rows must be a number greater than 0.', + invalidCols : 'Number of columns must be a number greater than 0.', + invalidBorder : 'Border size must be a number.', + invalidWidth : 'Table width must be a number.', + invalidHeight : 'Table height must be a number.', + invalidCellSpacing : 'Cell spacing must be a positive number.', + invalidCellPadding : 'Cell padding must be a positive number.', + + cell : + { + menu : 'Cell', + insertBefore : 'Insert Cell Before', + insertAfter : 'Insert Cell After', + deleteCell : 'Delete Cells', + merge : 'Merge Cells', + mergeRight : 'Merge Right', + mergeDown : 'Merge Down', + splitHorizontal : 'Split Cell Horizontally', + splitVertical : 'Split Cell Vertically', + title : 'Cell Properties', + cellType : 'Cell Type', + rowSpan : 'Rows Span', + colSpan : 'Columns Span', + wordWrap : 'Word Wrap', + hAlign : 'Horizontal Alignment', + vAlign : 'Vertical Alignment', + alignBaseline : 'Baseline', + bgColor : 'Background Color', + borderColor : 'Border Color', + data : 'Data', + header : 'Header', + yes : 'Yes', + no : 'No', + invalidWidth : 'Cell width must be a number.', + invalidHeight : 'Cell height must be a number.', + invalidRowSpan : 'Rows span must be a whole number.', + invalidColSpan : 'Columns span must be a whole number.', + chooseColor : 'Choose' + }, + + row : + { + menu : 'Row', + insertBefore : 'Insert Row Before', + insertAfter : 'Insert Row After', + deleteRow : 'Delete Rows' + }, + + column : + { + menu : 'Column', + insertBefore : 'Insert Column Before', + insertAfter : 'Insert Column After', + deleteColumn : 'Delete Columns' + } + }, + + // Button Dialog. + button : + { + title : 'Button Properties', + text : 'Text (Value)', + type : 'Type', + typeBtn : 'Button', + typeSbm : 'Submit', + typeRst : 'Reset' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Checkbox Properties', + radioTitle : 'Radio Button Properties', + value : 'Value', + selected : 'Selected' + }, + + // Form Dialog. + form : + { + title : 'Form Properties', + menu : 'Form Properties', + action : 'Action', + method : 'Method', + encoding : 'Encoding' + }, + + // Select Field Dialog. + select : + { + title : 'Selection Field Properties', + selectInfo : 'Select Info', + opAvail : 'Available Options', + value : 'Value', + size : 'Size', + lines : 'lines', + chkMulti : 'Allow multiple selections', + opText : 'Text', + opValue : 'Value', + btnAdd : 'Add', + btnModify : 'Modify', + btnUp : 'Up', + btnDown : 'Down', + btnSetValue : 'Set as selected value', + btnDelete : 'Delete' + }, + + // Textarea Dialog. + textarea : + { + title : 'Textarea Properties', + cols : 'Columns', + rows : 'Rows' + }, + + // Text Field Dialog. + textfield : + { + title : 'Text Field Properties', + name : 'Name', + value : 'Value', + charWidth : 'Character Width', + maxChars : 'Maximum Characters', + type : 'Type', + typeText : 'Text', + typePass : 'Password' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Hidden Field Properties', + name : 'Name', + value : 'Value' + }, + + // Image Dialog. + image : + { + title : 'Image Properties', + titleButton : 'Image Button Properties', + menu : 'Image Properties', + infoTab : 'Image Info', + btnUpload : 'Send it to the Server', + upload : 'Upload', + alt : 'Alternative Text', + lockRatio : 'Lock Ratio', + resetSize : 'Reset Size', + border : 'Border', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Please type the image URL', + linkTab : 'Link', + button2Img : 'Do you want to transform the selected image button on a simple image?', + img2Button : 'Do you want to transform the selected image on a image button?', + urlMissing : 'Image source URL is missing.', + validateBorder : 'Border must be a whole number.', + validateHSpace : 'HSpace must be a whole number.', + validateVSpace : 'VSpace must be a whole number.' + }, + + // Flash Dialog + flash : + { + properties : 'Flash Properties', + propertiesTab : 'Properties', + title : 'Flash Properties', + chkPlay : 'Auto Play', + chkLoop : 'Loop', + chkMenu : 'Enable Flash Menu', + chkFull : 'Allow Fullscreen', + scale : 'Scale', + scaleAll : 'Show all', + scaleNoBorder : 'No Border', + scaleFit : 'Exact Fit', + access : 'Script Access', + accessAlways : 'Always', + accessSameDomain: 'Same domain', + accessNever : 'Never', + alignAbsBottom : 'Abs Bottom', + alignAbsMiddle : 'Abs Middle', + alignBaseline : 'Baseline', + alignTextTop : 'Text Top', + quality : 'Quality', + qualityBest : 'Best', + qualityHigh : 'High', + qualityAutoHigh : 'Auto High', + qualityMedium : 'Medium', + qualityAutoLow : 'Auto Low', + qualityLow : 'Low', + windowModeWindow: 'Window', + windowModeOpaque: 'Opaque', + windowModeTransparent : 'Transparent', + windowMode : 'Window mode', + flashvars : 'Variables for Flash', + bgcolor : 'Background color', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'URL must not be empty.', + validateHSpace : 'HSpace must be a number.', + validateVSpace : 'VSpace must be a number.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Check Spelling', + title : 'Spell Check', + notAvailable : 'Sorry, but service is unavailable now.', + errorLoading : 'Error loading application service host: %s.', + notInDic : 'Not in dictionary', + changeTo : 'Change to', + btnIgnore : 'Ignore', + btnIgnoreAll : 'Ignore All', + btnReplace : 'Replace', + btnReplaceAll : 'Replace All', + btnUndo : 'Undo', + noSuggestions : '- No suggestions -', + progress : 'Spell check in progress...', + noMispell : 'Spell check complete: No misspellings found', + noChanges : 'Spell check complete: No words changed', + oneChange : 'Spell check complete: One word changed', + manyChanges : 'Spell check complete: %1 words changed', + ieSpellDownload : 'Spell checker not installed. Do you want to download it now?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Insert a Smiley', + options : 'Smiley Options' + }, + + elementsPath : + { + eleLabel : 'Elements path', + eleTitle : '%1 element' + }, + + numberedlist : 'Insert/Remove Numbered List', + bulletedlist : 'Insert/Remove Bulleted List', + indent : 'Increase Indent', + outdent : 'Decrease Indent', + + justify : + { + left : 'Align Left', + center : 'Center', + right : 'Align Right', + block : 'Justify' + }, + + blockquote : 'Block Quote', + + clipboard : + { + title : 'Paste', + cutError : 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', + copyError : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', + pasteMsg : 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', + pasteArea : 'Paste Area' + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', + toolbar : 'Paste from Word', + title : 'Paste from Word', + error : 'It was not possible to clean up the pasted data due to an internal error' + }, + + pasteText : + { + button : 'Paste as plain text', + title : 'Paste as Plain Text' + }, + + templates : + { + button : 'Templates', + title : 'Content Templates', + options : 'Template Options', + insertOption : 'Replace actual contents', + selectPromptMsg : 'Please select the template to open in the editor', + emptyListMsg : '(No templates defined)' + }, + + showBlocks : 'Show Blocks', + + stylesCombo : + { + label : 'Styles', + panelTitle : 'Formatting Styles', + panelTitle1 : 'Block Styles', + panelTitle2 : 'Inline Styles', + panelTitle3 : 'Object Styles' + }, + + format : + { + label : 'Format', + panelTitle : 'Paragraph Format', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', + toolbar : 'Create Div Container', + cssClassInputLabel : 'Stylesheet Classes', + styleSelectLabel : 'Style', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Language Code', + inlineStyleInputLabel : 'Inline Style', + advisoryTitleInputLabel : 'Advisory Title', + langDirLabel : 'Language Direction', + langDirLTRLabel : 'Left to Right (LTR)', + langDirRTLLabel : 'Right to Left (RTL)', + edit : 'Edit Div', + remove : 'Remove Div' + }, + + iframe : + { + title : 'IFrame Properties', + toolbar : 'IFrame', + noUrl : 'Please type the iframe URL', + scrolling : 'Enable scrollbars', + border : 'Show frame border' + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', + panelTitle : 'Font Name' + }, + + fontSize : + { + label : 'Size', + voiceLabel : 'Font Size', + panelTitle : 'Font Size' + }, + + colorButton : + { + textColorTitle : 'Text Color', + bgColorTitle : 'Background Color', + panelTitle : 'Colors', + auto : 'Automatic', + more : 'More Colors...' + }, + + colors : + { + '000' : 'Black', + '800000' : 'Maroon', + '8B4513' : 'Saddle Brown', + '2F4F4F' : 'Dark Slate Gray', + '008080' : 'Teal', + '000080' : 'Navy', + '4B0082' : 'Indigo', + '696969' : 'Dark Gray', + 'B22222' : 'Fire Brick', + 'A52A2A' : 'Brown', + 'DAA520' : 'Golden Rod', + '006400' : 'Dark Green', + '40E0D0' : 'Turquoise', + '0000CD' : 'Medium Blue', + '800080' : 'Purple', + '808080' : 'Gray', + 'F00' : 'Red', + 'FF8C00' : 'Dark Orange', + 'FFD700' : 'Gold', + '008000' : 'Green', + '0FF' : 'Cyan', + '00F' : 'Blue', + 'EE82EE' : 'Violet', + 'A9A9A9' : 'Dim Gray', + 'FFA07A' : 'Light Salmon', + 'FFA500' : 'Orange', + 'FFFF00' : 'Yellow', + '00FF00' : 'Lime', + 'AFEEEE' : 'Pale Turquoise', + 'ADD8E6' : 'Light Blue', + 'DDA0DD' : 'Plum', + 'D3D3D3' : 'Light Grey', + 'FFF0F5' : 'Lavender Blush', + 'FAEBD7' : 'Antique White', + 'FFFFE0' : 'Light Yellow', + 'F0FFF0' : 'Honeydew', + 'F0FFFF' : 'Azure', + 'F0F8FF' : 'Alice Blue', + 'E6E6FA' : 'Lavender', + 'FFF' : 'White' + }, + + scayt : + { + title : 'Spell Check As You Type', + opera_title : 'Not supported by Opera', + enable : 'Enable SCAYT', + disable : 'Disable SCAYT', + about : 'About SCAYT', + toggle : 'Toggle SCAYT', + options : 'Options', + langs : 'Languages', + moreSuggestions : 'More suggestions', + ignore : 'Ignore', + ignoreAll : 'Ignore All', + addWord : 'Add Word', + emptyDic : 'Dictionary name should not be empty.', + + optionsTab : 'Options', + allCaps : 'Ignore All-Caps Words', + ignoreDomainNames : 'Ignore Domain Names', + mixedCase : 'Ignore Words with Mixed Case', + mixedWithDigits : 'Ignore Words with Numbers', + + languagesTab : 'Languages', + + dictionariesTab : 'Dictionaries', + dic_field_name : 'Dictionary name', + dic_create : 'Create', + dic_restore : 'Restore', + dic_delete : 'Delete', + dic_rename : 'Rename', + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', + + aboutTab : 'About' + }, + + about : + { + title : 'About CKEditor', + dlgTitle : 'About CKEditor', + help : 'Check $1 for help.', + userGuide : 'CKEditor User\'s Guide', + moreInfo : 'For licensing information please visit our web site:', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'Maximize', + minimize : 'Minimize', + + fakeobjects : + { + anchor : 'Anchor', + flash : 'Flash Animation', + iframe : 'IFrame', + hiddenfield : 'Hidden Field', + unknown : 'Unknown Object' + }, + + resize : 'Drag to resize', + + colordialog : + { + title : 'Select color', + options : 'Color Options', + highlight : 'Highlight', + selected : 'Selected Color', + clear : 'Clear' + }, + + toolbarCollapse : 'Collapse Toolbar', + toolbarExpand : 'Expand Toolbar', + + toolbarGroups : + { + document : 'Document', + clipboard : 'Clipboard/Undo', + editing : 'Editing', + forms : 'Forms', + basicstyles : 'Basic Styles', + paragraph : 'Paragraph', + links : 'Links', + insert : 'Insert', + styles : 'Styles', + colors : 'Colors', + tools : 'Tools' + }, + + bidi : + { + ltr : 'Text direction from left to right', + rtl : 'Text direction from right to left' + }, + + docprops : + { + label : 'Document Properties', + title : 'Document Properties', + design : 'Design', + meta : 'Meta Tags', + chooseColor : 'Choose', + other : 'Other...', + docTitle : 'Page Title', + charset : 'Character Set Encoding', + charsetOther : 'Other Character Set Encoding', + charsetASCII : 'ASCII', + charsetCE : 'Central European', + charsetCT : 'Chinese Traditional (Big5)', + charsetCR : 'Cyrillic', + charsetGR : 'Greek', + charsetJP : 'Japanese', + charsetKR : 'Korean', + charsetTR : 'Turkish', + charsetUN : 'Unicode (UTF-8)', + charsetWE : 'Western European', + docType : 'Document Type Heading', + docTypeOther : 'Other Document Type Heading', + xhtmlDec : 'Include XHTML Declarations', + bgColor : 'Background Color', + bgImage : 'Background Image URL', + bgFixed : 'Non-scrolling (Fixed) Background', + txtColor : 'Text Color', + margin : 'Page Margins', + marginTop : 'Top', + marginLeft : 'Left', + marginRight : 'Right', + marginBottom : 'Bottom', + metaKeywords : 'Document Indexing Keywords (comma separated)', + metaDescription : 'Document Description', + metaAuthor : 'Author', + metaCopyright : 'Copyright', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' + } +}; diff --git a/_source/lang/eo.js b/_source/lang/eo.js new file mode 100644 index 0000000..08013d8 --- /dev/null +++ b/_source/lang/eo.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Esperanto language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['eo'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Fonto', + newPage : 'Nova PaÄo', + save : 'Sekurigi', + preview : 'Vidigi Aspekton', + cut : 'Eltondi', + copy : 'Kopii', + paste : 'Interglui', + print : 'Presi', + underline : 'Substreko', + bold : 'Grasa', + italic : 'Kursiva', + selectAll : 'Elekti Äion', + removeFormat : 'Forigi Formaton', + strike : 'Trastreko', + subscript : 'Subskribo', + superscript : 'Superskribo', + horizontalrule : 'Enmeti Horizonta Linio', + pagebreak : 'Insert Page Break for Printing', // MISSING + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Forigi Ligilon', + undo : 'Malfari', + redo : 'Refari', + + // Common messages and labels. + common : + { + browseServer : 'Foliumi en la Servilo', + url : 'URL', + protocol : 'Protokolo', + upload : 'AlÅuti', + uploadSubmit : 'Sendu al Servilo', + image : 'Bildo', + flash : 'Flash', // MISSING + form : 'Formularo', + checkbox : 'Markobutono', + radio : 'Radiobutono', + textField : 'Teksta kampo', + textarea : 'Teksta Areo', + hiddenField : 'KaÅita Kampo', + button : 'Butono', + select : 'Elekta Kampo', + imageButton : 'Bildbutono', + notSet : '<DefaÅlta>', + id : 'Id', + name : 'Nomo', + langDir : 'Skribdirekto', + langDirLtr : 'De maldekstro dekstren (LTR)', + langDirRtl : 'De dekstro maldekstren (RTL)', + langCode : 'Lingva Kodo', + longDescr : 'URL de Longa Priskribo', + cssClass : 'Klasoj de Stilfolioj', + advisoryTitle : 'Indika Titolo', + cssStyle : 'Stilo', + ok : 'Akcepti', + cancel : 'Rezigni', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Speciala', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'LarÄo', + height : 'Alto', + align : 'Äisrandigo', + alignLeft : 'Maldekstre', + alignRight : 'Dekstre', + alignCenter : 'Centre', + alignTop : 'Supre', + alignMiddle : 'Centre', + alignBottom : 'Malsupre', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Enmeti Specialan Signon', + title : 'Enmeti Specialan Signon', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Enmeti/ÅanÄi Ligilon', + other : '<other>', // MISSING + menu : 'Modifier Ligilon', + title : 'Ligilo', + info : 'Informoj pri la Ligilo', + target : 'Celo', + upload : 'AlÅuti', + advanced : 'Speciala', + type : 'Tipo de Ligilo', + toUrl : 'URL', // MISSING + toAnchor : 'Ankri en tiu Äi paÄo', + toEmail : 'RetpoÅto', + targetFrame : '<kadro>', + targetPopup : '<Åprucfenestro>', + targetFrameName : 'Nomo de Kadro', + targetPopupName : 'Nomo de Åprucfenestro', + popupFeatures : 'Atributoj de la Åprucfenestro', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Statobreto', + popupLocationBar: 'Adresobreto', + popupToolbar : 'Ilobreto', + popupMenuBar : 'Menubreto', + popupFullScreen : 'Tutekrane (IE)', + popupScrollBars : 'Rulumlisteloj', + popupDependent : 'Dependa (Netscape)', + popupLeft : 'Pozicio de Maldekstro', + popupTop : 'Pozicio de Supro', + id : 'Id', // MISSING + langDir : 'Skribdirekto', + langDirLTR : 'De maldekstro dekstren (LTR)', + langDirRTL : 'De dekstro maldekstren (RTL)', + acccessKey : 'Fulmoklavo', + name : 'Nomo', + langCode : 'Skribdirekto', + tabIndex : 'Taba Ordo', + advisoryTitle : 'Indika Titolo', + advisoryContentType : 'Indika Enhavotipo', + cssClasses : 'Klasoj de Stilfolioj', + charset : 'Signaro de la Ligita Rimedo', + styles : 'Stilo', + rel : 'Relationship', // MISSING + selectAnchor : 'Elekti Ankron', + anchorName : 'Per Ankronomo', + anchorId : 'Per Elementidentigilo', + emailAddress : 'Retadreso', + emailSubject : 'Temlinio', + emailBody : 'MesaÄa korpo', + noAnchors : '<Ne disponeblas ankroj en la dokumento>', + noUrl : 'Bonvolu entajpi la URL-on', + noEmail : 'Bonvolu entajpi la retadreson' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Enmeti/ÅanÄi Ankron', + menu : 'Ankraj Atributoj', + title : 'Ankraj Atributoj', + name : 'Ankra Nomo', + errorName : 'Bv tajpi la ankran nomon', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'SerÄi', + replace : 'AnstataÅigi', + findWhat : 'SerÄi:', + replaceWith : 'AnstataÅigi per:', + notFoundMsg : 'La celteksto ne estas trovita.', + matchCase : 'Kongruigi Usklecon', + matchWord : 'Tuta Vorto', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'AnstataÅigi Äiun', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tabelo', + title : 'Atributoj de Tabelo', + menu : 'Atributoj de Tabelo', + deleteTable : 'Delete Table', // MISSING + rows : 'Linioj', + columns : 'Kolumnoj', + border : 'Bordero', + widthPx : 'Bitbilderoj', + widthPc : 'elcentoj', + widthUnit : 'width unit', // MISSING + cellSpace : 'Interspacigo de Äeloj', + cellPad : 'ÄirkaÅenhava Plenigado', + caption : 'Titolo', + summary : 'Summary', // MISSING + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cell', // MISSING + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'Forigi Äelojn', + merge : 'Kunfandi Äelojn', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', // MISSING + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'Forigi Liniojn' + }, + + column : + { + menu : 'Column', // MISSING + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'Forigi Kolumnojn' + } + }, + + // Button Dialog. + button : + { + title : 'Butonaj Atributoj', + text : 'Teksto (Valoro)', + type : 'Tipo', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Markobutonaj Atributoj', + radioTitle : 'Radiobutonaj Atributoj', + value : 'Valoro', + selected : 'Elektita' + }, + + // Form Dialog. + form : + { + title : 'Formularaj Atributoj', + menu : 'Formularaj Atributoj', + action : 'Ago', + method : 'Metodo', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Atributoj de Elekta Kampo', + selectInfo : 'Select Info', // MISSING + opAvail : 'Elektoj Disponeblaj', + value : 'Valoro', + size : 'Grando', + lines : 'Linioj', + chkMulti : 'Permesi Plurajn Elektojn', + opText : 'Teksto', + opValue : 'Valoro', + btnAdd : 'Aldoni', + btnModify : 'Modifi', + btnUp : 'Supren', + btnDown : 'Malsupren', + btnSetValue : 'Agordi kiel Elektitan Valoron', + btnDelete : 'Forigi' + }, + + // Textarea Dialog. + textarea : + { + title : 'Atributoj de Teksta Areo', + cols : 'Kolumnoj', + rows : 'Vicoj' + }, + + // Text Field Dialog. + textfield : + { + title : 'Atributoj de Teksta Kampo', + name : 'Nomo', + value : 'Valoro', + charWidth : 'SignolarÄo', + maxChars : 'Maksimuma Nombro da Signoj', + type : 'Tipo', + typeText : 'Teksto', + typePass : 'Pasvorto' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Atributoj de KaÅita Kampo', + name : 'Nomo', + value : 'Valoro' + }, + + // Image Dialog. + image : + { + title : 'Atributoj de Bildo', + titleButton : 'Bildbutonaj Atributoj', + menu : 'Atributoj de Bildo', + infoTab : 'Informoj pri Bildo', + btnUpload : 'Sendu al Servilo', + upload : 'AlÅuti', + alt : 'AnstataÅiga Teksto', + lockRatio : 'Konservi Proporcion', + resetSize : 'Origina Grando', + border : 'Bordero', + hSpace : 'HSpaco', + vSpace : 'VSpaco', + alertUrl : 'Bonvolu tajpi la URL de la bildo', + linkTab : 'Link', // MISSING + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash Properties', // MISSING + propertiesTab : 'Properties', // MISSING + title : 'Flash Properties', // MISSING + chkPlay : 'Auto Play', // MISSING + chkLoop : 'Loop', // MISSING + chkMenu : 'Enable Flash Menu', // MISSING + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Scale', // MISSING + scaleAll : 'Show all', // MISSING + scaleNoBorder : 'No Border', // MISSING + scaleFit : 'Exact Fit', // MISSING + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs Malsupre', + alignAbsMiddle : 'Abs Centre', + alignBaseline : 'Je Malsupro de Teksto', + alignTextTop : 'Je Supro de Teksto', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Fona Koloro', + hSpace : 'HSpaco', + vSpace : 'VSpaco', + validateSrc : 'Bonvolu entajpi la URL-on', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Literumada Kontrolilo', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Ne trovita en la vortaro', + changeTo : 'ÅanÄi al', + btnIgnore : 'Malatenti', + btnIgnoreAll : 'Malatenti Äiun', + btnReplace : 'AnstataÅigi', + btnReplaceAll : 'AnstataÅigi Äiun', + btnUndo : 'Malfari', + noSuggestions : '- Neniu propono -', + progress : 'Literumkontrolado daÅras...', + noMispell : 'Literumkontrolado finita: neniu fuÅo trovita', + noChanges : 'Literumkontrolado finita: neniu vorto ÅanÄita', + oneChange : 'Literumkontrolado finita: unu vorto ÅanÄita', + manyChanges : 'Literumkontrolado finita: %1 vortoj ÅanÄitaj', + ieSpellDownload : 'Literumada Kontrolilo ne instalita. Äu vi volas elÅuti Äin nun?' + }, + + smiley : + { + toolbar : 'Mienvinjeto', + title : 'Enmeti Mienvinjeton', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Numera Listo', + bulletedlist : 'Bula Listo', + indent : 'Pligrandigi KrommarÄenon', + outdent : 'Malpligrandigi KrommarÄenon', + + justify : + { + left : 'Maldekstrigi', + center : 'Centrigi', + right : 'Dekstrigi', + block : 'Äisrandigi AmbaÅflanke' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'Interglui', + cutError : 'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).', + copyError : 'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).', + pasteMsg : 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', // MISSING + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Interglui el Word', + title : 'Interglui el Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Interglui kiel Tekston', + title : 'Interglui kiel Tekston' + }, + + templates : + { + button : 'Templates', // MISSING + title : 'Content Templates', // MISSING + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'Please select the template to open in the editor', // MISSING + emptyListMsg : '(No templates defined)' // MISSING + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'Stilo', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Formato', + panelTitle : 'Formato', + + tag_p : 'Normala', + tag_pre : 'Formatita', + tag_address : 'Adreso', + tag_h1 : 'Titolo 1', + tag_h2 : 'Titolo 2', + tag_h3 : 'Titolo 3', + tag_h4 : 'Titolo 4', + tag_h5 : 'Titolo 5', + tag_h6 : 'Titolo 6', + tag_div : 'Paragrafo (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Tiparo', + voiceLabel : 'Font', // MISSING + panelTitle : 'Tiparo' + }, + + fontSize : + { + label : 'Grando', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Grando' + }, + + colorButton : + { + textColorTitle : 'Teksta Koloro', + bgColorTitle : 'Fona Koloro', + panelTitle : 'Colors', // MISSING + auto : 'AÅtomata', + more : 'Pli da Koloroj...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Dokumentaj Atributoj', + title : 'Dokumentaj Atributoj', + design : 'Design', // MISSING + meta : 'Metadatumoj', + chooseColor : 'Choose', // MISSING + other : '<other>', + docTitle : 'PaÄotitolo', + charset : 'Signara Kodo', + charsetOther : 'Alia Signara Kodo', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Dokumenta Tipo', + docTypeOther : 'Alia Dokumenta Tipo', + xhtmlDec : 'Inkluzivi XHTML Deklaroj', + bgColor : 'Fona Koloro', + bgImage : 'URL de Fona Bildo', + bgFixed : 'Neruluma Fono', + txtColor : 'Teksta Koloro', + margin : 'PaÄaj MarÄenoj', + marginTop : 'Supra', + marginLeft : 'Maldekstra', + marginRight : 'Dekstra', + marginBottom : 'Malsupra', + metaKeywords : 'Ålosilvortoj de la Dokumento (apartigita de komoj)', + metaDescription : 'Dokumenta Priskribo', + metaAuthor : 'Verkinto', + metaCopyright : 'Kopirajto', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/es.js b/_source/lang/es.js new file mode 100644 index 0000000..b51b0b0 --- /dev/null +++ b/_source/lang/es.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Spanish language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['es'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Editor de texto, %1, pulse ALT 0 para ayuda.', + + // ARIA descriptions. + toolbars : 'Barras de herramientas del editor', + editor : 'Editor de texto enriquecido', + + // Toolbar buttons without dialogs. + source : 'Fuente HTML', + newPage : 'Nueva Página', + save : 'Guardar', + preview : 'Vista Previa', + cut : 'Cortar', + copy : 'Copiar', + paste : 'Pegar', + print : 'Imprimir', + underline : 'Subrayado', + bold : 'Negrita', + italic : 'Cursiva', + selectAll : 'Seleccionar Todo', + removeFormat : 'Eliminar Formato', + strike : 'Tachado', + subscript : 'SubÃndice', + superscript : 'SuperÃndice', + horizontalrule : 'Insertar LÃnea Horizontal', + pagebreak : 'Insertar Salto de Página', + pagebreakAlt : 'Salto de página', + unlink : 'Eliminar VÃnculo', + undo : 'Deshacer', + redo : 'Rehacer', + + // Common messages and labels. + common : + { + browseServer : 'Ver Servidor', + url : 'URL', + protocol : 'Protocolo', + upload : 'Cargar', + uploadSubmit : 'Enviar al Servidor', + image : 'Imagen', + flash : 'Flash', + form : 'Formulario', + checkbox : 'Casilla de Verificación', + radio : 'Botones de Radio', + textField : 'Campo de Texto', + textarea : 'Area de Texto', + hiddenField : 'Campo Oculto', + button : 'Botón', + select : 'Campo de Selección', + imageButton : 'Botón Imagen', + notSet : '<No definido>', + id : 'Id', + name : 'Nombre', + langDir : 'Orientación', + langDirLtr : 'Izquierda a Derecha (LTR)', + langDirRtl : 'Derecha a Izquierda (RTL)', + langCode : 'Cód. de idioma', + longDescr : 'Descripción larga URL', + cssClass : 'Clases de hojas de estilo', + advisoryTitle : 'TÃtulo', + cssStyle : 'Estilo', + ok : 'Aceptar', + cancel : 'Cancelar', + close : 'Cerrar', + preview : 'Previsualización', + generalTab : 'General', + advancedTab : 'Avanzado', + validateNumberFailed : 'El valor no es un número.', + confirmNewPage : 'Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?', + confirmCancel : 'Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?', + options : 'Opciones', + target : 'Destino', + targetNew : 'Nueva ventana (_blank)', + targetTop : 'Ventana principal (_top)', + targetSelf : 'Misma ventana (_self)', + targetParent : 'Ventana padre (_parent)', + langDirLTR : 'Izquierda a derecha (LTR)', + langDirRTL : 'Derecha a izquierda (RTL)', + styles : 'Estilos', + cssClasses : 'Clase de la hoja de estilos', + width : 'Anchura', + height : 'Altura', + align : 'Alineación', + alignLeft : 'Izquierda', + alignRight : 'Derecha', + alignCenter : 'Centrado', + alignTop : 'Tope', + alignMiddle : 'Centro', + alignBottom : 'Pie', + invalidHeight : 'Altura debe ser un número.', + invalidWidth : 'Anchura debe ser un número.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, no disponible</span>' + }, + + contextmenu : + { + options : 'Opciones del menú contextual' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Insertar Caracter Especial', + title : 'Seleccione un caracter especial', + options : 'Opciones de caracteres especiales' + }, + + // Link dialog. + link : + { + toolbar : 'Insertar/Editar VÃnculo', + other : '<otro>', + menu : 'Editar VÃnculo', + title : 'VÃnculo', + info : 'Información de VÃnculo', + target : 'Destino', + upload : 'Cargar', + advanced : 'Avanzado', + type : 'Tipo de vÃnculo', + toUrl : 'URL', + toAnchor : 'Referencia en esta página', + toEmail : 'E-Mail', + targetFrame : '<marco>', + targetPopup : '<ventana emergente>', + targetFrameName : 'Nombre del Marco Destino', + targetPopupName : 'Nombre de Ventana Emergente', + popupFeatures : 'CaracterÃsticas de Ventana Emergente', + popupResizable : 'Redimensionable', + popupStatusBar : 'Barra de Estado', + popupLocationBar: 'Barra de ubicación', + popupToolbar : 'Barra de Herramientas', + popupMenuBar : 'Barra de Menú', + popupFullScreen : 'Pantalla Completa (IE)', + popupScrollBars : 'Barras de desplazamiento', + popupDependent : 'Dependiente (Netscape)', + popupLeft : 'Posición Izquierda', + popupTop : 'Posición Derecha', + id : 'Id', + langDir : 'Orientación', + langDirLTR : 'Izquierda a Derecha (LTR)', + langDirRTL : 'Derecha a Izquierda (RTL)', + acccessKey : 'Tecla de Acceso', + name : 'Nombre', + langCode : 'Código idioma', + tabIndex : 'Indice de tabulación', + advisoryTitle : 'TÃtulo', + advisoryContentType : 'Tipo de Contenido', + cssClasses : 'Clases de hojas de estilo', + charset : 'Fuente de caracteres vinculado', + styles : 'Estilo', + rel : 'Relación', + selectAnchor : 'Seleccionar una referencia', + anchorName : 'Por Nombre de Referencia', + anchorId : 'Por ID de elemento', + emailAddress : 'Dirección de E-Mail', + emailSubject : 'TÃtulo del Mensaje', + emailBody : 'Cuerpo del Mensaje', + noAnchors : '(No hay referencias disponibles en el documento)', + noUrl : 'Por favor escriba el vÃnculo URL', + noEmail : 'Por favor escriba la dirección de e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Referencia', + menu : 'Propiedades de Referencia', + title : 'Propiedades de Referencia', + name : 'Nombre de la Referencia', + errorName : 'Por favor, complete el nombre de la Referencia', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Propiedades de lista numerada', + bulletedTitle : 'Propiedades de viñetas', + type : 'Tipo', + start : 'Inicio', + validateStartNumber :'El Inicio debe ser un número entero.', + circle : 'CÃrculo', + disc : 'Disco', + square : 'Cuadrado', + none : 'Ninguno', + notset : '<sin establecer>', + armenian : 'Numeración armenia', + georgian : 'Numeración georgiana (an, ban, gan, etc.)', + lowerRoman : 'Números romanos en minúsculas (i, ii, iii, iv, v, etc.)', + upperRoman : 'Números romanos en mayúsculas (I, II, III, IV, V, etc.)', + lowerAlpha : 'Alfabeto en minúsculas (a, b, c, d, e, etc.)', + upperAlpha : 'Alfabeto en mayúsculas (A, B, C, D, E, etc.)', + lowerGreek : 'Letras griegas (alpha, beta, gamma, etc.)', + decimal : 'Decimal (1, 2, 3, etc.)', + decimalLeadingZero : 'Decimal con cero inicial (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Buscar y Reemplazar', + find : 'Buscar', + replace : 'Reemplazar', + findWhat : 'Texto a buscar:', + replaceWith : 'Reemplazar con:', + notFoundMsg : 'El texto especificado no ha sido encontrado.', + matchCase : 'Coincidir may/min', + matchWord : 'Coincidir toda la palabra', + matchCyclic : 'Buscar en todo el contenido', + replaceAll : 'Reemplazar Todo', + replaceSuccessMsg : 'La expresión buscada ha sido reemplazada %1 veces.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabla', + title : 'Propiedades de Tabla', + menu : 'Propiedades de Tabla', + deleteTable : 'Eliminar Tabla', + rows : 'Filas', + columns : 'Columnas', + border : 'Tamaño de Borde', + widthPx : 'pixeles', + widthPc : 'porcentaje', + widthUnit : 'unidad de la anchura', + cellSpace : 'Esp. e/celdas', + cellPad : 'Esp. interior', + caption : 'TÃtulo', + summary : 'SÃntesis', + headers : 'Encabezados', + headersNone : 'Ninguno', + headersColumn : 'Primera columna', + headersRow : 'Primera fila', + headersBoth : 'Ambas', + invalidRows : 'El número de filas debe ser un número mayor que 0.', + invalidCols : 'El número de columnas debe ser un número mayor que 0.', + invalidBorder : 'El tamaño del borde debe ser un número.', + invalidWidth : 'La anchura de tabla debe ser un número.', + invalidHeight : 'La altura de tabla debe ser un número.', + invalidCellSpacing : 'El espaciado entre celdas debe ser un número.', + invalidCellPadding : 'El espaciado interior debe ser un número.', + + cell : + { + menu : 'Celda', + insertBefore : 'Insertar celda a la izquierda', + insertAfter : 'Insertar celda a la derecha', + deleteCell : 'Eliminar Celdas', + merge : 'Combinar Celdas', + mergeRight : 'Combinar a la derecha', + mergeDown : 'Combinar hacia abajo', + splitHorizontal : 'Dividir la celda horizontalmente', + splitVertical : 'Dividir la celda verticalmente', + title : 'Propiedades de celda', + cellType : 'Tipo de Celda', + rowSpan : 'Expandir filas', + colSpan : 'Expandir columnas', + wordWrap : 'Ajustar al contenido', + hAlign : 'Alineación Horizontal', + vAlign : 'Alineación Vertical', + alignBaseline : 'Linea de base', + bgColor : 'Color de fondo', + borderColor : 'Color de borde', + data : 'Datos', + header : 'Encabezado', + yes : 'SÃ', + no : 'No', + invalidWidth : 'La anchura de celda debe ser un número.', + invalidHeight : 'La altura de celda debe ser un número.', + invalidRowSpan : 'La expansión de filas debe ser un número entero.', + invalidColSpan : 'La expansión de columnas debe ser un número entero.', + chooseColor : 'Elegir' + }, + + row : + { + menu : 'Fila', + insertBefore : 'Insertar fila en la parte superior', + insertAfter : 'Insertar fila en la parte inferior', + deleteRow : 'Eliminar Filas' + }, + + column : + { + menu : 'Columna', + insertBefore : 'Insertar columna a la izquierda', + insertAfter : 'Insertar columna a la derecha', + deleteColumn : 'Eliminar Columnas' + } + }, + + // Button Dialog. + button : + { + title : 'Propiedades de Botón', + text : 'Texto (Valor)', + type : 'Tipo', + typeBtn : 'Boton', + typeSbm : 'Enviar', + typeRst : 'Reestablecer' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Propiedades de Casilla', + radioTitle : 'Propiedades de Botón de Radio', + value : 'Valor', + selected : 'Seleccionado' + }, + + // Form Dialog. + form : + { + title : 'Propiedades de Formulario', + menu : 'Propiedades de Formulario', + action : 'Acción', + method : 'Método', + encoding : 'Codificación' + }, + + // Select Field Dialog. + select : + { + title : 'Propiedades de Campo de Selección', + selectInfo : 'Información', + opAvail : 'Opciones disponibles', + value : 'Valor', + size : 'Tamaño', + lines : 'Lineas', + chkMulti : 'Permitir múltiple selección', + opText : 'Texto', + opValue : 'Valor', + btnAdd : 'Agregar', + btnModify : 'Modificar', + btnUp : 'Subir', + btnDown : 'Bajar', + btnSetValue : 'Establecer como predeterminado', + btnDelete : 'Eliminar' + }, + + // Textarea Dialog. + textarea : + { + title : 'Propiedades de Area de Texto', + cols : 'Columnas', + rows : 'Filas' + }, + + // Text Field Dialog. + textfield : + { + title : 'Propiedades de Campo de Texto', + name : 'Nombre', + value : 'Valor', + charWidth : 'Caracteres de ancho', + maxChars : 'Máximo caracteres', + type : 'Tipo', + typeText : 'Texto', + typePass : 'Contraseña' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Propiedades de Campo Oculto', + name : 'Nombre', + value : 'Valor' + }, + + // Image Dialog. + image : + { + title : 'Propiedades de Imagen', + titleButton : 'Propiedades de Botón de Imagen', + menu : 'Propiedades de Imagen', + infoTab : 'Información de Imagen', + btnUpload : 'Enviar al Servidor', + upload : 'Cargar', + alt : 'Texto Alternativo', + lockRatio : 'Proporcional', + resetSize : 'Tamaño Original', + border : 'Borde', + hSpace : 'Esp.Horiz', + vSpace : 'Esp.Vert', + alertUrl : 'Por favor escriba la URL de la imagen', + linkTab : 'VÃnculo', + button2Img : '¿Desea convertir el botón de imagen en una simple imagen?', + img2Button : '¿Desea convertir la imagen en un botón de imagen?', + urlMissing : 'Debe indicar la URL de la imagen.', + validateBorder : 'El borde debe ser un número.', + validateHSpace : 'El espaciado horizontal debe ser un número.', + validateVSpace : 'El espaciado vertical debe ser un número.' + }, + + // Flash Dialog + flash : + { + properties : 'Propiedades de Flash', + propertiesTab : 'Propiedades', + title : 'Propiedades de Flash', + chkPlay : 'Autoejecución', + chkLoop : 'Repetir', + chkMenu : 'Activar Menú Flash', + chkFull : 'Permitir pantalla completa', + scale : 'Escala', + scaleAll : 'Mostrar todo', + scaleNoBorder : 'Sin Borde', + scaleFit : 'Ajustado', + access : 'Acceso de scripts', + accessAlways : 'Siempre', + accessSameDomain: 'Mismo dominio', + accessNever : 'Nunca', + alignAbsBottom : 'Abs inferior', + alignAbsMiddle : 'Abs centro', + alignBaseline : 'LÃnea de base', + alignTextTop : 'Tope del texto', + quality : 'Calidad', + qualityBest : 'La mejor', + qualityHigh : 'Alta', + qualityAutoHigh : 'Auto Alta', + qualityMedium : 'Media', + qualityAutoLow : 'Auto Baja', + qualityLow : 'Baja', + windowModeWindow: 'Ventana', + windowModeOpaque: 'Opaco', + windowModeTransparent : 'Transparente', + windowMode : 'WindowMode', + flashvars : 'Opciones', + bgcolor : 'Color de Fondo', + hSpace : 'Esp.Horiz', + vSpace : 'Esp.Vert', + validateSrc : 'Por favor escriba el vÃnculo URL', + validateHSpace : 'Esp.Horiz debe ser un número.', + validateVSpace : 'Esp.Vert debe ser un número.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'OrtografÃa', + title : 'Comprobar ortografÃa', + notAvailable : 'Lo sentimos pero el servicio no está disponible.', + errorLoading : 'Error cargando la aplicación del servidor: %s.', + notInDic : 'No se encuentra en el Diccionario', + changeTo : 'Cambiar a', + btnIgnore : 'Ignorar', + btnIgnoreAll : 'Ignorar Todo', + btnReplace : 'Reemplazar', + btnReplaceAll : 'Reemplazar Todo', + btnUndo : 'Deshacer', + noSuggestions : '- No hay sugerencias -', + progress : 'Control de OrtografÃa en progreso...', + noMispell : 'Control finalizado: no se encontraron errores', + noChanges : 'Control finalizado: no se ha cambiado ninguna palabra', + oneChange : 'Control finalizado: se ha cambiado una palabra', + manyChanges : 'Control finalizado: se ha cambiado %1 palabras', + ieSpellDownload : 'Módulo de Control de OrtografÃa no instalado.\r\n¿Desea descargarlo ahora?' + }, + + smiley : + { + toolbar : 'Emoticonos', + title : 'Insertar un Emoticon', + options : 'Opciones de emoticonos' + }, + + elementsPath : + { + eleLabel : 'Ruta de los elementos', + eleTitle : '%1 elemento' + }, + + numberedlist : 'Numeración', + bulletedlist : 'Viñetas', + indent : 'Aumentar SangrÃa', + outdent : 'Disminuir SangrÃa', + + justify : + { + left : 'Alinear a Izquierda', + center : 'Centrar', + right : 'Alinear a Derecha', + block : 'Justificado' + }, + + blockquote : 'Cita', + + clipboard : + { + title : 'Pegar', + cutError : 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).', + copyError : 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).', + pasteMsg : 'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.', + securityMsg : 'Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.', + pasteArea : 'Zona de pegado' + }, + + pastefromword : + { + confirmCleanup : 'El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?', + toolbar : 'Pegar desde Word', + title : 'Pegar desde Word', + error : 'No ha sido posible limpiar los datos debido a un error interno' + }, + + pasteText : + { + button : 'Pegar como Texto Plano', + title : 'Pegar como Texto Plano' + }, + + templates : + { + button : 'Plantillas', + title : 'Contenido de Plantillas', + options : 'Opciones de plantillas', + insertOption : 'Reemplazar el contenido actual', + selectPromptMsg : 'Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):', + emptyListMsg : '(No hay plantillas definidas)' + }, + + showBlocks : 'Mostrar bloques', + + stylesCombo : + { + label : 'Estilo', + panelTitle : 'Estilos para formatear', + panelTitle1 : 'Estilos de párrafo', + panelTitle2 : 'Estilos de carácter', + panelTitle3 : 'Estilos de objeto' + }, + + format : + { + label : 'Formato', + panelTitle : 'Formato', + + tag_p : 'Normal', + tag_pre : 'Con formato', + tag_address : 'Dirección', + tag_h1 : 'Encabezado 1', + tag_h2 : 'Encabezado 2', + tag_h3 : 'Encabezado 3', + tag_h4 : 'Encabezado 4', + tag_h5 : 'Encabezado 5', + tag_h6 : 'Encabezado 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Crear contenedor DIV', + toolbar : 'Crear contenedor DIV', + cssClassInputLabel : 'Clase de hoja de estilos', + styleSelectLabel : 'Estilo', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Codigo de idioma', + inlineStyleInputLabel : 'Estilo', + advisoryTitleInputLabel : 'TÃtulo', + langDirLabel : 'Orientación', + langDirLTRLabel : 'Izquierda a Derecha (LTR)', + langDirRTLLabel : 'Derecha a Izquierda (RTL)', + edit : 'Editar Div', + remove : 'Quitar Div' + }, + + iframe : + { + title : 'Propiedades de iframe', + toolbar : 'IFrame', + noUrl : 'Por favor, escriba la dirección del iframe', + scrolling : 'Activar barras de desplazamiento', + border : 'Mostrar borde del marco' + }, + + font : + { + label : 'Fuente', + voiceLabel : 'Fuente', + panelTitle : 'Fuente' + }, + + fontSize : + { + label : 'Tamaño', + voiceLabel : 'Tamaño de fuente', + panelTitle : 'Tamaño' + }, + + colorButton : + { + textColorTitle : 'Color de Texto', + bgColorTitle : 'Color de Fondo', + panelTitle : 'Colores', + auto : 'Automático', + more : 'Más Colores...' + }, + + colors : + { + '000' : 'Negro', + '800000' : 'Marrón oscuro', + '8B4513' : 'Marrón tierra', + '2F4F4F' : 'Pizarra Oscuro', + '008080' : 'Azul verdoso', + '000080' : 'Azul marino', + '4B0082' : 'Añil', + '696969' : 'Gris oscuro', + 'B22222' : 'Ladrillo', + 'A52A2A' : 'Marrón', + 'DAA520' : 'Oro oscuro', + '006400' : 'Verde oscuro', + '40E0D0' : 'Turquesa', + '0000CD' : 'Azul medio-oscuro', + '800080' : 'Púrpura', + '808080' : 'Gris', + 'F00' : 'Rojo', + 'FF8C00' : 'Naranja oscuro', + 'FFD700' : 'Oro', + '008000' : 'Verde', + '0FF' : 'Cian', + '00F' : 'Azul', + 'EE82EE' : 'Violeta', + 'A9A9A9' : 'Gris medio', + 'FFA07A' : 'Salmón claro', + 'FFA500' : 'Naranja', + 'FFFF00' : 'Amarillo', + '00FF00' : 'Lima', + 'AFEEEE' : 'Turquesa claro', + 'ADD8E6' : 'Azul claro', + 'DDA0DD' : 'Violeta claro', + 'D3D3D3' : 'Gris claro', + 'FFF0F5' : 'Lavanda rojizo', + 'FAEBD7' : 'Blanco antiguo', + 'FFFFE0' : 'Amarillo claro', + 'F0FFF0' : 'Miel', + 'F0FFFF' : 'Azul celeste', + 'F0F8FF' : 'Azul pálido', + 'E6E6FA' : 'Lavanda', + 'FFF' : 'Blanco' + }, + + scayt : + { + title : 'Comprobar OrtografÃa Mientras Escribe', + opera_title : 'No soportado en Opera', + enable : 'Activar Corrector', + disable : 'Desactivar Corrector', + about : 'Acerca de Corrector', + toggle : 'Cambiar Corrector', + options : 'Opciones', + langs : 'Idiomas', + moreSuggestions : 'Más sugerencias', + ignore : 'Ignorar', + ignoreAll : 'Ignorar Todas', + addWord : 'Añadir palabra', + emptyDic : 'El nombre del diccionario no puede estar en blanco.', + + optionsTab : 'Opciones', + allCaps : 'Omitir palabras en MAYÃSCULAS', + ignoreDomainNames : 'Omitir nombres de dominio', + mixedCase : 'Ignorar palabras con combinación de mayúsculas y minúsculas', + mixedWithDigits : 'Omitir palabras con números', + + languagesTab : 'Idiomas', + + dictionariesTab : 'Diccionarios', + dic_field_name : 'Nombre del diccionario', + dic_create : 'Crear', + dic_restore : 'Recuperar', + dic_delete : 'Borrar', + dic_rename : 'Renombrar', + dic_info : 'Inicialmente el Diccionario de usuario se guarda en una Cookie. Sin embargo, las cookies están limitadas en tamaño. Cuando el diccionario crece a un punto en el que no se puede guardar en una Cookie, el diccionario puede ser almacenado en nuestro servidor. Para almacenar su diccionario personalizado en nuestro servidor debe especificar un nombre para su diccionario. Si ya ha guardado un diccionaro, por favor, escriba su nombre y pulse el botón Recuperar', + + aboutTab : 'Acerca de' + }, + + about : + { + title : 'Acerca de CKEditor', + dlgTitle : 'Acerca de CKEditor', + help : 'Lea la $1 para resolver sus dudas.', + userGuide : 'GuÃa de usuario de CKEditor', + moreInfo : 'Para información de licencia, por favor visite nuestro sitio web:', + copy : 'Copyright © $1. Todos los derechos reservados.' + }, + + maximize : 'Maximizar', + minimize : 'Minimizar', + + fakeobjects : + { + anchor : 'Ancla', + flash : 'Animación flash', + iframe : 'IFrame', + hiddenfield : 'Campo oculto', + unknown : 'Objeto desconocido' + }, + + resize : 'Arrastre para redimensionar', + + colordialog : + { + title : 'Elegir color', + options : 'Opciones de colores', + highlight : 'Muestra', + selected : 'Elegido', + clear : 'Borrar' + }, + + toolbarCollapse : 'Contraer barra de herramientas', + toolbarExpand : 'Expandir barra de herramientas', + + toolbarGroups : + { + document : 'Documento', + clipboard : 'Portapapeles/Deshacer', + editing : 'Edición', + forms : 'Formularios', + basicstyles : 'Estilos básicos', + paragraph : 'Párrafo', + links : 'Enlaces', + insert : 'Insertar', + styles : 'Estilos', + colors : 'Colores', + tools : 'Herramientas' + }, + + bidi : + { + ltr : 'Dirección del texto de izquierda a derecha', + rtl : 'Dirección del texto de derecha a izquierda' + }, + + docprops : + { + label : 'Propiedades del documento', + title : 'Propiedades del documento', + design : 'Diseño', + meta : 'Meta Tags', + chooseColor : 'Elegir', + other : 'Otro...', + docTitle : 'TÃtulo de página', + charset : 'Codificación de caracteres', + charsetOther : 'Otra codificación de caracteres', + charsetASCII : 'ASCII', + charsetCE : 'Centro Europeo', + charsetCT : 'Chino Tradicional (Big5)', + charsetCR : 'Ruso', + charsetGR : 'Griego', + charsetJP : 'Japonés', + charsetKR : 'Koreano', + charsetTR : 'Turco', + charsetUN : 'Unicode (UTF-8)', + charsetWE : 'Europeo occidental', + docType : 'Tipo de documento', + docTypeOther : 'Otro tipo de documento', + xhtmlDec : 'Incluir declaración XHTML', + bgColor : 'Color de fondo', + bgImage : 'Imagen de fondo', + bgFixed : 'Fondo fijo (no se desplaza)', + txtColor : 'Color del texto', + margin : 'Márgenes', + marginTop : 'Superior', + marginLeft : 'Izquierdo', + marginRight : 'Derecho', + marginBottom : 'Inferior', + metaKeywords : 'Palabras claves del documento separadas por coma (meta keywords)', + metaDescription : 'Descripción del documento', + metaAuthor : 'Autor', + metaCopyright : 'Copyright', + previewHtml : '<p>Este es un <strong>texto de ejemplo</strong>. Usted está usando <a href="javascript:void(0)">CKEditor</a>.</p>' + } +}; diff --git a/_source/lang/et.js b/_source/lang/et.js new file mode 100644 index 0000000..99741ae --- /dev/null +++ b/_source/lang/et.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Estonian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['et'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Lähtekood', + newPage : 'Uus leht', + save : 'Salvesta', + preview : 'Eelvaade', + cut : 'Lõika', + copy : 'Kopeeri', + paste : 'Kleebi', + print : 'Prindi', + underline : 'Allajoonitud', + bold : 'Paks', + italic : 'Kursiiv', + selectAll : 'Vali kõik', + removeFormat : 'Eemalda vorming', + strike : 'Läbijoonitud', + subscript : 'Allindeks', + superscript : 'Ãlaindeks', + horizontalrule : 'Sisesta horisontaaljoon', + pagebreak : 'Sisesta lehevahetuskoht', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Eemalda link', + undo : 'Võta tagasi', + redo : 'Korda toimingut', + + // Common messages and labels. + common : + { + browseServer : 'Sirvi serverit', + url : 'URL', + protocol : 'Protokoll', + upload : 'Lae üles', + uploadSubmit : 'Saada serverissee', + image : 'Pilt', + flash : 'Flash', + form : 'Vorm', + checkbox : 'Märkeruut', + radio : 'Raadionupp', + textField : 'Tekstilahter', + textarea : 'Tekstiala', + hiddenField : 'Varjatud lahter', + button : 'Nupp', + select : 'Valiklahter', + imageButton : 'Piltnupp', + notSet : '<määramata>', + id : 'Id', + name : 'Nimi', + langDir : 'Keele suund', + langDirLtr : 'Vasakult paremale (LTR)', + langDirRtl : 'Paremalt vasakule (RTL)', + langCode : 'Keele kood', + longDescr : 'Pikk kirjeldus URL', + cssClass : 'Stiilistiku klassid', + advisoryTitle : 'Juhendav tiitel', + cssStyle : 'Laad', + ok : 'OK', + cancel : 'Loobu', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Täpsemalt', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Laius', + height : 'Kõrgus', + align : 'Joondus', + alignLeft : 'Vasak', + alignRight : 'Paremale', + alignCenter : 'Kesk', + alignTop : 'Ãles', + alignMiddle : 'Keskele', + alignBottom : 'Alla', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Sisesta erimärk', + title : 'Vali erimärk', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Sisesta link / Muuda linki', + other : '<muu>', + menu : 'Muuda linki', + title : 'Link', + info : 'Lingi info', + target : 'Sihtkoht', + upload : 'Lae üles', + advanced : 'Täpsemalt', + type : 'Lingi tüüp', + toUrl : 'URL', // MISSING + toAnchor : 'Ankur sellel lehel', + toEmail : 'E-post', + targetFrame : '<raam>', + targetPopup : '<hüpikaken>', + targetFrameName : 'Sihtmärk raami nimi', + targetPopupName : 'Hüpikakna nimi', + popupFeatures : 'Hüpikakna omadused', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Olekuriba', + popupLocationBar: 'Aadressiriba', + popupToolbar : 'Tööriistariba', + popupMenuBar : 'Menüüriba', + popupFullScreen : 'Täisekraan (IE)', + popupScrollBars : 'Kerimisribad', + popupDependent : 'Sõltuv (Netscape)', + popupLeft : 'Vasak asukoht', + popupTop : 'Ãlemine asukoht', + id : 'Id', // MISSING + langDir : 'Keele suund', + langDirLTR : 'Vasakult paremale (LTR)', + langDirRTL : 'Paremalt vasakule (RTL)', + acccessKey : 'Juurdepääsu võti', + name : 'Nimi', + langCode : 'Keele suund', + tabIndex : 'Tab indeks', + advisoryTitle : 'Juhendav tiitel', + advisoryContentType : 'Juhendava sisu tüüp', + cssClasses : 'Stiilistiku klassid', + charset : 'Lingitud ressurssi märgistik', + styles : 'Laad', + rel : 'Relationship', // MISSING + selectAnchor : 'Vali ankur', + anchorName : 'Ankru nime järgi', + anchorId : 'Elemendi id järgi', + emailAddress : 'E-posti aadress', + emailSubject : 'Sõnumi teema', + emailBody : 'Sõnumi tekst', + noAnchors : '(Selles dokumendis ei ole ankruid)', + noUrl : 'Palun kirjuta lingi URL', + noEmail : 'Palun kirjuta E-Posti aadress' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Sisesta ankur / Muuda ankrut', + menu : 'Ankru omadused', + title : 'Ankru omadused', + name : 'Ankru nimi', + errorName : 'Palun sisest ankru nimi', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Otsi ja asenda', + find : 'Otsi', + replace : 'Asenda', + findWhat : 'Leia mida:', + replaceWith : 'Asenda millega:', + notFoundMsg : 'Valitud teksti ei leitud.', + matchCase : 'Erista suur- ja väiketähti', + matchWord : 'Otsi terviklike sõnu', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Asenda kõik', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tabel', + title : 'Tabeli atribuudid', + menu : 'Tabeli atribuudid', + deleteTable : 'Kustuta tabel', + rows : 'Read', + columns : 'Veerud', + border : 'Joone suurus', + widthPx : 'pikslit', + widthPc : 'protsenti', + widthUnit : 'width unit', // MISSING + cellSpace : 'Lahtri vahe', + cellPad : 'Lahtri täidis', + caption : 'Tabeli tiitel', + summary : 'Kokkuvõte', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Lahter', + insertBefore : 'Sisesta lahter enne', + insertAfter : 'Sisesta lahter peale', + deleteCell : 'Eemalda lahtrid', + merge : 'Ãhenda lahtrid', + mergeRight : 'Ãhenda paremale', + mergeDown : 'Ãhenda alla', + splitHorizontal : 'Poolita lahter horisontaalselt', + splitVertical : 'Poolita lahter vertikaalselt', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Rida', + insertBefore : 'Sisesta rida enne', + insertAfter : 'Sisesta rida peale', + deleteRow : 'Eemalda read' + }, + + column : + { + menu : 'Veerg', + insertBefore : 'Sisesta veerg enne', + insertAfter : 'Sisesta veerg peale', + deleteColumn : 'Eemalda veerud' + } + }, + + // Button Dialog. + button : + { + title : 'Nupu omadused', + text : 'Tekst (väärtus)', + type : 'Tüüp', + typeBtn : 'Nupp', + typeSbm : 'Saada', + typeRst : 'Lähtesta' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Märkeruudu omadused', + radioTitle : 'Raadionupu omadused', + value : 'Väärtus', + selected : 'Valitud' + }, + + // Form Dialog. + form : + { + title : 'Vormi omadused', + menu : 'Vormi omadused', + action : 'Toiming', + method : 'Meetod', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Valiklahtri omadused', + selectInfo : 'Info', + opAvail : 'Võimalikud valikud', + value : 'Väärtus', + size : 'Suurus', + lines : 'ridu', + chkMulti : 'Võimalda mitu valikut', + opText : 'Tekst', + opValue : 'Väärtus', + btnAdd : 'Lisa', + btnModify : 'Muuda', + btnUp : 'Ãles', + btnDown : 'Alla', + btnSetValue : 'Sea valitud olekuna', + btnDelete : 'Kustuta' + }, + + // Textarea Dialog. + textarea : + { + title : 'Tekstiala omadused', + cols : 'Veerge', + rows : 'Ridu' + }, + + // Text Field Dialog. + textfield : + { + title : 'Tekstilahtri omadused', + name : 'Nimi', + value : 'Väärtus', + charWidth : 'Laius (tähemärkides)', + maxChars : 'Maksimaalselt tähemärke', + type : 'Tüüp', + typeText : 'Tekst', + typePass : 'Parool' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Varjatud lahtri omadused', + name : 'Nimi', + value : 'Väärtus' + }, + + // Image Dialog. + image : + { + title : 'Pildi atribuudid', + titleButton : 'Piltnupu omadused', + menu : 'Pildi atribuudid', + infoTab : 'Pildi info', + btnUpload : 'Saada serverissee', + upload : 'Lae üles', + alt : 'Alternatiivne tekst', + lockRatio : 'Lukusta kuvasuhe', + resetSize : 'Lähtesta suurus', + border : 'Joon', + hSpace : 'H. vaheruum', + vSpace : 'V. vaheruum', + alertUrl : 'Palun kirjuta pildi URL', + linkTab : 'Link', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash omadused', + propertiesTab : 'Properties', // MISSING + title : 'Flash omadused', + chkPlay : 'Automaatne start ', + chkLoop : 'Korduv', + chkMenu : 'Võimalda flash menüü', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Mastaap', + scaleAll : 'Näita kõike', + scaleNoBorder : 'Ãärist ei ole', + scaleFit : 'Täpne sobivus', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs alla', + alignAbsMiddle : 'Abs keskele', + alignBaseline : 'Baasjoonele', + alignTextTop : 'Tekstit üles', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Tausta värv', + hSpace : 'H. vaheruum', + vSpace : 'V. vaheruum', + validateSrc : 'Palun kirjuta lingi URL', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Kontrolli õigekirja', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Puudub sõnastikust', + changeTo : 'Muuda', + btnIgnore : 'Ignoreeri', + btnIgnoreAll : 'Ignoreeri kõiki', + btnReplace : 'Asenda', + btnReplaceAll : 'Asenda kõik', + btnUndo : 'Võta tagasi', + noSuggestions : '- Soovitused puuduvad -', + progress : 'Toimub õigekirja kontroll...', + noMispell : 'Ãigekirja kontroll sooritatud: õigekirjuvigu ei leitud', + noChanges : 'Ãigekirja kontroll sooritatud: ühtegi sõna ei muudetud', + oneChange : 'Ãigekirja kontroll sooritatud: üks sõna muudeti', + manyChanges : 'Ãigekirja kontroll sooritatud: %1 sõna muudetud', + ieSpellDownload : 'Ãigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?' + }, + + smiley : + { + toolbar : 'Emotikon', + title : 'Sisesta emotikon', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Nummerdatud loetelu', + bulletedlist : 'Punktiseeritud loetelu', + indent : 'Suurenda taanet', + outdent : 'Vähenda taanet', + + justify : + { + left : 'Vasakjoondus', + center : 'Keskjoondus', + right : 'Paremjoondus', + block : 'Rööpjoondus' + }, + + blockquote : 'Blokktsitaat', + + clipboard : + { + title : 'Kleebi', + cutError : 'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).', + copyError : 'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).', + pasteMsg : 'Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.', + securityMsg : 'Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Kleebi Wordist', + title : 'Kleebi Wordist', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Kleebi tavalise tekstina', + title : 'Kleebi tavalise tekstina' + }, + + templates : + { + button : 'Å abloon', + title : 'Sisu Å¡abloonid', + options : 'Template Options', // MISSING + insertOption : 'Asenda tegelik sisu', + selectPromptMsg : 'Palun vali Å¡abloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):', + emptyListMsg : '(Ãhtegi Å¡ablooni ei ole defineeritud)' + }, + + showBlocks : 'Näita blokke', + + stylesCombo : + { + label : 'Laad', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Vorming', + panelTitle : 'Vorming', + + tag_p : 'Tavaline', + tag_pre : 'Vormindatud', + tag_address : 'Aadress', + tag_h1 : 'Pealkiri 1', + tag_h2 : 'Pealkiri 2', + tag_h3 : 'Pealkiri 3', + tag_h4 : 'Pealkiri 4', + tag_h5 : 'Pealkiri 5', + tag_h6 : 'Pealkiri 6', + tag_div : 'Tavaline (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Kiri', + voiceLabel : 'Font', // MISSING + panelTitle : 'Kiri' + }, + + fontSize : + { + label : 'Suurus', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Suurus' + }, + + colorButton : + { + textColorTitle : 'Teksti värv', + bgColorTitle : 'Tausta värv', + panelTitle : 'Colors', // MISSING + auto : 'Automaatne', + more : 'Rohkem värve...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Dokumendi omadused', + title : 'Dokumendi omadused', + design : 'Design', // MISSING + meta : 'Meta andmed', + chooseColor : 'Choose', // MISSING + other : '<muu>', + docTitle : 'Lehekülje tiitel', + charset : 'Märgistiku kodeering', + charsetOther : 'Ãlejäänud märgistike kodeeringud', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Kesk-Euroopa', + charsetCT : 'Hiina traditsiooniline (Big5)', + charsetCR : 'Kirillisa', + charsetGR : 'Kreeka', + charsetJP : 'Jaapani', + charsetKR : 'Korea', + charsetTR : 'Türgi', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Lääne-Euroopa', + docType : 'Dokumendi tüüppäis', + docTypeOther : 'Teised dokumendi tüüppäised', + xhtmlDec : 'Arva kaasa XHTML deklaratsioonid', + bgColor : 'Taustavärv', + bgImage : 'Taustapildi URL', + bgFixed : 'Mittekeritav tagataust', + txtColor : 'Teksti värv', + margin : 'Lehekülje äärised', + marginTop : 'Ãlaserv', + marginLeft : 'Vasakserv', + marginRight : 'Paremserv', + marginBottom : 'Alaserv', + metaKeywords : 'Dokumendi võtmesõnad (eraldatud komadega)', + metaDescription : 'Dokumendi kirjeldus', + metaAuthor : 'Autor', + metaCopyright : 'Autoriõigus', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/eu.js b/_source/lang/eu.js new file mode 100644 index 0000000..3e40434 --- /dev/null +++ b/_source/lang/eu.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Basque language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['eu'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'HTML Iturburua', + newPage : 'Orrialde Berria', + save : 'Gorde', + preview : 'Aurrebista', + cut : 'Ebaki', + copy : 'Kopiatu', + paste : 'Itsatsi', + print : 'Inprimatu', + underline : 'Azpimarratu', + bold : 'Lodia', + italic : 'Etzana', + selectAll : 'Hautatu dena', + removeFormat : 'Kendu Formatua', + strike : 'Marratua', + subscript : 'Azpi-indize', + superscript : 'Goi-indize', + horizontalrule : 'Txertatu Marra Horizontala', + pagebreak : 'Txertatu Orrialde-jauzia', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Kendu Esteka', + undo : 'Desegin', + redo : 'Berregin', + + // Common messages and labels. + common : + { + browseServer : 'Zerbitzaria arakatu', + url : 'URL', + protocol : 'Protokoloa', + upload : 'Gora kargatu', + uploadSubmit : 'Zerbitzarira bidalia', + image : 'Irudia', + flash : 'Flasha', + form : 'Formularioa', + checkbox : 'Kontrol-laukia', + radio : 'Aukera-botoia', + textField : 'Testu Eremua', + textarea : 'Testu-area', + hiddenField : 'Ezkutuko Eremua', + button : 'Botoia', + select : 'Hautespen Eremua', + imageButton : 'Irudi Botoia', + notSet : '<Ezarri gabe>', + id : 'Id', + name : 'Izena', + langDir : 'Hizkuntzaren Norabidea', + langDirLtr : 'Ezkerretik Eskumara(LTR)', + langDirRtl : 'Eskumatik Ezkerrera (RTL)', + langCode : 'Hizkuntza Kodea', + longDescr : 'URL Deskribapen Luzea', + cssClass : 'Estilo-orriko Klaseak', + advisoryTitle : 'Izenburua', + cssStyle : 'Estiloa', + ok : 'Ados', + cancel : 'Utzi', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'Orokorra', + advancedTab : 'Aurreratua', + validateNumberFailed : 'Balio hau ez da zenbaki bat.', + confirmNewPage : 'Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?', + confirmCancel : 'Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Zabalera', + height : 'Altuera', + align : 'Lerrokatu', + alignLeft : 'Ezkerrera', + alignRight : 'Eskuman', + alignCenter : 'Erdian', + alignTop : 'Goian', + alignMiddle : 'Erdian', + alignBottom : 'Behean', + invalidHeight : 'Altuera zenbaki bat izan behar da.', + invalidWidth : 'Zabalera zenbaki bat izan behar da.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, erabilezina</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Txertatu Karaktere Berezia', + title : 'Karaktere Berezia Aukeratu', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Txertatu/Editatu Esteka', + other : '<other>', // MISSING + menu : 'Aldatu Esteka', + title : 'Esteka', + info : 'Estekaren Informazioa', + target : 'Target (Helburua)', + upload : 'Gora kargatu', + advanced : 'Aurreratua', + type : 'Esteka Mota', + toUrl : 'URL', // MISSING + toAnchor : 'Aingura orrialde honetan', + toEmail : 'ePosta', + targetFrame : '<marko>', + targetPopup : '<popup leihoa>', + targetFrameName : 'Marko Helburuaren Izena', + targetPopupName : 'Popup Leihoaren Izena', + popupFeatures : 'Popup Leihoaren Ezaugarriak', + popupResizable : 'Tamaina Aldakorra', + popupStatusBar : 'Egoera Barra', + popupLocationBar: 'Kokaleku Barra', + popupToolbar : 'Tresna Barra', + popupMenuBar : 'Menu Barra', + popupFullScreen : 'Pantaila Osoa (IE)', + popupScrollBars : 'Korritze Barrak', + popupDependent : 'Menpekoa (Netscape)', + popupLeft : 'Ezkerreko Posizioa', + popupTop : 'Goiko Posizioa', + id : 'Id', + langDir : 'Hizkuntzaren Norabidea', + langDirLTR : 'Ezkerretik Eskumara(LTR)', + langDirRTL : 'Eskumatik Ezkerrera (RTL)', + acccessKey : 'Sarbide-gakoa', + name : 'Izena', + langCode : 'Hizkuntzaren Norabidea', + tabIndex : 'Tabulazio Indizea', + advisoryTitle : 'Izenburua', + advisoryContentType : 'Eduki Mota (Content Type)', + cssClasses : 'Estilo-orriko Klaseak', + charset : 'Estekatutako Karaktere Multzoa', + styles : 'Estiloa', + rel : 'Relationship', // MISSING + selectAnchor : 'Aingura bat hautatu', + anchorName : 'Aingura izenagatik', + anchorId : 'Elementuaren ID-gatik', + emailAddress : 'ePosta Helbidea', + emailSubject : 'Mezuaren Gaia', + emailBody : 'Mezuaren Gorputza', + noAnchors : '(Ez daude aingurak eskuragarri dokumentuan)', + noUrl : 'Mesedez URL esteka idatzi', + noEmail : 'Mesedez ePosta helbidea idatzi' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Aingura', + menu : 'Ainguraren Ezaugarriak', + title : 'Ainguraren Ezaugarriak', + name : 'Ainguraren Izena', + errorName : 'Idatzi ainguraren izena', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Bilatu eta Ordeztu', + find : 'Bilatu', + replace : 'Ordezkatu', + findWhat : 'Zer bilatu:', + replaceWith : 'Zerekin ordeztu:', + notFoundMsg : 'Idatzitako testua ez da topatu.', + matchCase : 'Maiuskula/minuskula', + matchWord : 'Esaldi osoa bilatu', + matchCyclic : 'Bilaketa ziklikoa', + replaceAll : 'Ordeztu Guztiak', + replaceSuccessMsg : 'Zenbat aldiz ordeztua: %1' + }, + + // Table Dialog + table : + { + toolbar : 'Taula', + title : 'Taularen Ezaugarriak', + menu : 'Taularen Ezaugarriak', + deleteTable : 'Ezabatu Taula', + rows : 'Lerroak', + columns : 'Zutabeak', + border : 'Ertzaren Zabalera', + widthPx : 'pixel', + widthPc : 'ehuneko', + widthUnit : 'width unit', // MISSING + cellSpace : 'Gelaxka arteko tartea', + cellPad : 'Gelaxken betegarria', + caption : 'Epigrafea', + summary : 'Laburpena', + headers : 'Goiburuak', + headersNone : 'Bat ere ez', + headersColumn : 'Lehen zutabea', + headersRow : 'Lehen lerroa', + headersBoth : 'Biak', + invalidRows : 'Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.', + invalidCols : 'Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.', + invalidBorder : 'Ertzaren tamaina zenbaki bat izan behar da.', + invalidWidth : 'Taularen zabalera zenbaki bat izan behar da.', + invalidHeight : 'Taularen altuera zenbaki bat izan behar da.', + invalidCellSpacing : 'Gelaxka arteko tartea zenbaki bat izan behar da.', + invalidCellPadding : 'Gelaxken betegarria zenbaki bat izan behar da.', + + cell : + { + menu : 'Gelaxka', + insertBefore : 'Txertatu Gelaxka Aurretik', + insertAfter : 'Txertatu Gelaxka Ostean', + deleteCell : 'Kendu Gelaxkak', + merge : 'Batu Gelaxkak', + mergeRight : 'Elkartu Eskumara', + mergeDown : 'Elkartu Behera', + splitHorizontal : 'Banatu Gelaxkak Horizontalki', + splitVertical : 'Banatu Gelaxkak Bertikalki', + title : 'Gelaxken Ezaugarriak', + cellType : 'Gelaxka Mota', + rowSpan : 'Hedatutako Lerroak', + colSpan : 'Hedatutako Zutabeak', + wordWrap : 'Itzulbira', + hAlign : 'Lerrokatze Horizontala', + vAlign : 'Lerrokatze Bertikala', + alignBaseline : 'Oinarri-lerroan', + bgColor : 'Fondoaren Kolorea', + borderColor : 'Ertzaren Kolorea', + data : 'Data', + header : 'Goiburua', + yes : 'Bai', + no : 'Ez', + invalidWidth : 'Gelaxkaren zabalera zenbaki bat izan behar da.', + invalidHeight : 'Gelaxkaren altuera zenbaki bat izan behar da.', + invalidRowSpan : 'Lerroen hedapena zenbaki osoa izan behar da.', + invalidColSpan : 'Zutabeen hedapena zenbaki osoa izan behar da.', + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Lerroa', + insertBefore : 'Txertatu Lerroa Aurretik', + insertAfter : 'Txertatu Lerroa Ostean', + deleteRow : 'Ezabatu Lerroak' + }, + + column : + { + menu : 'Zutabea', + insertBefore : 'Txertatu Zutabea Aurretik', + insertAfter : 'Txertatu Zutabea Ostean', + deleteColumn : 'Ezabatu Zutabeak' + } + }, + + // Button Dialog. + button : + { + title : 'Botoiaren Ezaugarriak', + text : 'Testua (Balorea)', + type : 'Mota', + typeBtn : 'Botoia', + typeSbm : 'Bidali', + typeRst : 'Garbitu' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Kontrol-laukiko Ezaugarriak', + radioTitle : 'Aukera-botoiaren Ezaugarriak', + value : 'Balorea', + selected : 'Hautatuta' + }, + + // Form Dialog. + form : + { + title : 'Formularioaren Ezaugarriak', + menu : 'Formularioaren Ezaugarriak', + action : 'Ekintza', + method : 'Metodoa', + encoding : 'Kodeketa' + }, + + // Select Field Dialog. + select : + { + title : 'Hautespen Eremuaren Ezaugarriak', + selectInfo : 'Informazioa', + opAvail : 'Aukera Eskuragarriak', + value : 'Balorea', + size : 'Tamaina', + lines : 'lerro kopurura', + chkMulti : 'Hautaketa anitzak baimendu', + opText : 'Testua', + opValue : 'Balorea', + btnAdd : 'Gehitu', + btnModify : 'Aldatu', + btnUp : 'Gora', + btnDown : 'Behera', + btnSetValue : 'Aukeratutako balorea ezarri', + btnDelete : 'Ezabatu' + }, + + // Textarea Dialog. + textarea : + { + title : 'Testu-arearen Ezaugarriak', + cols : 'Zutabeak', + rows : 'Lerroak' + }, + + // Text Field Dialog. + textfield : + { + title : 'Testu Eremuaren Ezaugarriak', + name : 'Izena', + value : 'Balorea', + charWidth : 'Zabalera', + maxChars : 'Zenbat karaktere gehienez', + type : 'Mota', + typeText : 'Testua', + typePass : 'Pasahitza' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Ezkutuko Eremuaren Ezaugarriak', + name : 'Izena', + value : 'Balorea' + }, + + // Image Dialog. + image : + { + title : 'Irudi Ezaugarriak', + titleButton : 'Irudi Botoiaren Ezaugarriak', + menu : 'Irudi Ezaugarriak', + infoTab : 'Irudi informazioa', + btnUpload : 'Zerbitzarira bidalia', + upload : 'Gora Kargatu', + alt : 'Ordezko Testua', + lockRatio : 'Erlazioa Blokeatu', + resetSize : 'Tamaina Berrezarri', + border : 'Ertza', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Mesedez Irudiaren URLa idatzi', + linkTab : 'Esteka', + button2Img : 'Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?', + img2Button : 'Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?', + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flasharen Ezaugarriak', + propertiesTab : 'Ezaugarriak', + title : 'Flasharen Ezaugarriak', + chkPlay : 'Automatikoki Erreproduzitu', + chkLoop : 'Begizta', + chkMenu : 'Flasharen Menua Gaitu', + chkFull : 'Onartu Pantaila osoa', + scale : 'Eskalatu', + scaleAll : 'Dena erakutsi', + scaleNoBorder : 'Ertzik gabe', + scaleFit : 'Doitu', + access : 'Scriptak baimendu', + accessAlways : 'Beti', + accessSameDomain: 'Domeinu berdinekoak', + accessNever : 'Inoiz ere ez', + alignAbsBottom : 'Abs Behean', + alignAbsMiddle : 'Abs Erdian', + alignBaseline : 'Oinan', + alignTextTop : 'Testua Goian', + quality : 'Kalitatea', + qualityBest : 'Hoberena', + qualityHigh : 'Altua', + qualityAutoHigh : 'Auto Altua', + qualityMedium : 'Ertaina', + qualityAutoLow : 'Auto Baxua', + qualityLow : 'Baxua', + windowModeWindow: 'Leihoa', + windowModeOpaque: 'Opakoa', + windowModeTransparent : 'Gardena', + windowMode : 'Leihoaren modua', + flashvars : 'Flash Aldagaiak', + bgcolor : 'Atzeko kolorea', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'Mesedez URL esteka idatzi', + validateHSpace : 'HSpace zenbaki bat izan behar da.', + validateVSpace : 'VSpace zenbaki bat izan behar da.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Ortografia', + title : 'Ortografia zuzenketa', + notAvailable : 'Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.', + errorLoading : 'Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.', + notInDic : 'Ez dago hiztegian', + changeTo : 'Honekin ordezkatu', + btnIgnore : 'Ezikusi', + btnIgnoreAll : 'Denak Ezikusi', + btnReplace : 'Ordezkatu', + btnReplaceAll : 'Denak Ordezkatu', + btnUndo : 'Desegin', + noSuggestions : '- Iradokizunik ez -', + progress : 'Zuzenketa ortografikoa martxan...', + noMispell : 'Zuzenketa ortografikoa bukatuta: Akatsik ez', + noChanges : 'Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu', + oneChange : 'Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da', + manyChanges : 'Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira', + ieSpellDownload : 'Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?' + }, + + smiley : + { + toolbar : 'Aurpegierak', + title : 'Aurpegiera Sartu', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 elementua' + }, + + numberedlist : 'Zenbakidun Zerrenda', + bulletedlist : 'Buletdun Zerrenda', + indent : 'Handitu Koska', + outdent : 'Txikitu Koska', + + justify : + { + left : 'Lerrokatu Ezkerrean', + center : 'Lerrokatu Erdian', + right : 'Lerrokatu Eskuman', + block : 'Justifikatu' + }, + + blockquote : 'Aipamen blokea', + + clipboard : + { + title : 'Itsatsi', + cutError : 'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).', + copyError : 'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).', + pasteMsg : 'Mesedez teklatua erabilita (<STRONG>Ctrl/Cmd+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.', + securityMsg : 'Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?', + toolbar : 'Itsatsi Word-etik', + title : 'Itsatsi Word-etik', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Testu Arrunta bezala Itsatsi', + title : 'Testu Arrunta bezala Itsatsi' + }, + + templates : + { + button : 'Txantiloiak', + title : 'Eduki Txantiloiak', + options : 'Template Options', // MISSING + insertOption : 'Ordeztu oraingo edukiak', + selectPromptMsg : 'Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):', + emptyListMsg : '(Ez dago definitutako txantiloirik)' + }, + + showBlocks : 'Blokeak erakutsi', + + stylesCombo : + { + label : 'Estiloa', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Bloke Estiloak', + panelTitle2 : 'Inline Estiloak', + panelTitle3 : 'Objektu Estiloak' + }, + + format : + { + label : 'Formatua', + panelTitle : 'Formatua', + + tag_p : 'Arrunta', + tag_pre : 'Formateatua', + tag_address : 'Helbidea', + tag_h1 : 'Izenburua 1', + tag_h2 : 'Izenburua 2', + tag_h3 : 'Izenburua 3', + tag_h4 : 'Izenburua 4', + tag_h5 : 'Izenburua 5', + tag_h6 : 'Izenburua 6', + tag_div : 'Paragrafoa (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Letra-tipoa', + voiceLabel : 'Letra-tipoa', + panelTitle : 'Letra-tipoa' + }, + + fontSize : + { + label : 'Tamaina', + voiceLabel : 'Tamaina', + panelTitle : 'Tamaina' + }, + + colorButton : + { + textColorTitle : 'Testu Kolorea', + bgColorTitle : 'Atzeko kolorea', + panelTitle : 'Colors', // MISSING + auto : 'Automatikoa', + more : 'Kolore gehiago...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Ortografia Zuzenketa Idatzi Ahala (SCAYT)', + opera_title : 'Not supported by Opera', // MISSING + enable : 'Gaitu SCAYT', + disable : 'Desgaitu SCAYT', + about : 'SCAYTi buruz', + toggle : 'SCAYT aldatu', + options : 'Aukerak', + langs : 'Hizkuntzak', + moreSuggestions : 'Iradokizun gehiago', + ignore : 'Baztertu', + ignoreAll : 'Denak baztertu', + addWord : 'Hitza Gehitu', + emptyDic : 'Hiztegiaren izena ezin da hutsik egon.', + + optionsTab : 'Aukerak', + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Hizkuntzak', + + dictionariesTab : 'Hiztegiak', + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'Honi buruz' + }, + + about : + { + title : 'CKEditor(r)i buruz', + dlgTitle : 'CKEditor(r)i buruz', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Lizentziari buruzko informazioa gure webgunean:', + copy : 'Copyright © $1. Eskubide guztiak erreserbaturik.' + }, + + maximize : 'Maximizatu', + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Aingura', + flash : 'Flash Animazioa', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Objektu ezezaguna' + }, + + resize : 'Arrastatu tamaina aldatzeko', + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Dokumentuaren Ezarpenak', + title : 'Dokumentuaren Ezarpenak', + design : 'Design', // MISSING + meta : 'Meta Informazioa', + chooseColor : 'Choose', // MISSING + other : '<other>', + docTitle : 'Orriaren Izenburua', + charset : 'Karaktere Multzoaren Kodeketa', + charsetOther : 'Beste Karaktere Multzoko Kodeketa', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Erdialdeko Europakoa', + charsetCT : 'Txinatar Tradizionala (Big5)', + charsetCR : 'Zirilikoa', + charsetGR : 'Grekoa', + charsetJP : 'Japoniarra', + charsetKR : 'Korearra', + charsetTR : 'Turkiarra', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Mendebaldeko Europakoa', + docType : 'Document Type Goiburua', + docTypeOther : 'Beste Document Type Goiburua', + xhtmlDec : 'XHTML Ezarpenak', + bgColor : 'Atzeko Kolorea', + bgImage : 'Atzeko Irudiaren URL-a', + bgFixed : 'Korritze gabeko Atzealdea', + txtColor : 'Testu Kolorea', + margin : 'Orrialdearen marjinak', + marginTop : 'Goian', + marginLeft : 'Ezkerrean', + marginRight : 'Eskuman', + marginBottom : 'Behean', + metaKeywords : 'Dokumentuaren Gako-hitzak (komarekin bananduta)', + metaDescription : 'Dokumentuaren Deskribapena', + metaAuthor : 'Egilea', + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/fa.js b/_source/lang/fa.js new file mode 100644 index 0000000..44756ad --- /dev/null +++ b/_source/lang/fa.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Persian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['fa'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'rtl', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Ù Ùبع', + newPage : 'برگÙÙ´ تازÙ', + save : 'ذخÛرÙ', + preview : 'Ù¾ÛØ´Ù٠اÛØ´', + cut : 'برش', + copy : 'Ú©Ù¾Û', + paste : 'ÚسباÙدÙ', + print : 'Úاپ', + underline : 'خطزÛردار', + bold : 'درشت', + italic : 'خ٠ÛدÙ', + selectAll : 'گزÛÙØ´ ÙÙ Ù', + removeFormat : 'برداشت٠Ùر٠ت', + strike : 'Ù ÛاÙخط', + subscript : 'زÛرÙÙÛس', + superscript : 'باÙاÙÙÛس', + horizontalrule : 'Ú¯ÙجاÙد٠خط ÙاÙÙÛ', + pagebreak : 'Ú¯ÙجاÙØ¯Ù Ø´Ú©Ø³ØªÚ¯Û ÙپاÛا٠ÙبرگÙ', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'برداشت٠پÛÙÙد', + undo : 'ÙاÚÛدÙ', + redo : 'بازÚÛدÙ', + + // Common messages and labels. + common : + { + browseServer : 'ÙÙرستÙ٠اÛÛ Ø³Ø±Ùر', + url : 'URL', + protocol : 'پرÙتکÙ', + upload : 'اÙتÙا٠ب٠سرÙر', + uploadSubmit : 'ب٠سرÙر بÙرست', + image : 'تصÙÛر', + flash : 'Flash', + form : 'Ùر٠', + checkbox : 'خاÙÙÙ´ گزÛÙÙاÛ', + radio : 'دک٠ÙÙ´ رادÛÙÛÛ', + textField : 'ÙÛÙد ٠تÙÛ', + textarea : 'ÙاØÛÙÙ´ ٠تÙÛ', + hiddenField : 'ÙÛÙد Ù¾ÙÙاÙ', + button : 'دک٠Ù', + select : 'ÙÛÙد ÚÙدگزÛÙÙاÛ', + imageButton : 'دک٠ÙÙ´ تصÙÛرÛ', + notSet : '<تعÛÙÙشدÙ>', + id : 'Ø´ÙاسÙ', + name : 'Ùا٠', + langDir : 'جÙتÙÙ Ø§Û Ø²Ø¨Ø§Ù', + langDirLtr : 'ÚÙ¾ ب٠راست (LTR)', + langDirRtl : 'راست ب٠ÚÙ¾ (RTL)', + langCode : 'کد زباÙ', + longDescr : 'URL تÙصÛÙ Ø·ÙÙاÙÛ', + cssClass : 'Ú©ÙاسÙØ§Û Ø´ÛÙÙÙا٠Ù(Stylesheet)', + advisoryTitle : 'عÙÙا٠ک٠کÛ', + cssStyle : 'Ø´ÛÙÙ(style)', + ok : 'پذÛرش', + cancel : 'اÙصراÙ', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Ù¾ÛشرÙتÙ', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Ù¾ÙÙا', + height : 'درازا', + align : 'ÚÛÙØ´', + alignLeft : 'ÚÙ¾', + alignRight : 'راست', + alignCenter : 'Ùسط', + alignTop : 'باÙا', + alignMiddle : 'Ùسط', + alignBottom : 'پائÛÙ', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Ú¯ÙجاÙد٠ÙÙÛسÙÙ´ ÙÛÚÙ', + title : 'گزÛÙØ´ ÙÙÛسÙÙ´ÙÛÚÙ', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Ú¯ÙجاÙدÙ/ÙÛراÛØ´ ÙÙ¾ÛÙÙد', + other : '<ساÛر>', + menu : 'ÙÛراÛØ´ Ù¾ÛÙÙد', + title : 'Ù¾ÛÙÙد', + info : 'اطÙاعات Ù¾ÛÙÙد', + target : 'Ù Ùصد', + upload : 'اÙتÙا٠ب٠سرÙر', + advanced : 'Ù¾ÛشرÙتÙ', + type : 'ÙÙع Ù¾ÛÙÙد', + toUrl : 'URL', // MISSING + toAnchor : 'ÙÙگر در ÙÙ Û٠صÙØÙ', + toEmail : 'پست اÙکترÙÙÛÚ©Û', + targetFrame : '<ÙرÛÙ >', + targetPopup : '<Ù¾ÙجرÙÙ´ پاپاپ>', + targetFrameName : 'Ùا٠ÙرÛÙ Ù Ùصد', + targetPopupName : 'Ùا٠پÙجرÙÙ´ پاپاپ', + popupFeatures : 'ÙÛÚÚ¯ÛÙØ§Û Ù¾ÙجرÙÙ´ پاپاپ', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'ÙÙار ÙضعÛت', + popupLocationBar: 'ÙÙار Ù ÙÙعÛت', + popupToolbar : 'ÙÙارابزار', + popupMenuBar : 'ÙÙار Ù ÙÙ', + popupFullScreen : 'ت٠ا٠صÙØÙ (IE)', + popupScrollBars : 'Ù ÛÙÙÙØ§Û Ù¾Û٠اÛØ´', + popupDependent : 'Ùابست٠(Netscape)', + popupLeft : 'Ù ÙÙعÛت ÙÚÙ¾', + popupTop : 'Ù ÙÙعÛت ÙباÙا', + id : 'Id', // MISSING + langDir : 'جÙتÙÙ Ø§Û Ø²Ø¨Ø§Ù', + langDirLTR : 'ÚÙ¾ ب٠راست (LTR)', + langDirRTL : 'راست ب٠ÚÙ¾ (RTL)', + acccessKey : 'Ú©ÙÛد دستÛابÛ', + name : 'Ùا٠', + langCode : 'جÙتÙÙ Ø§Û Ø²Ø¨Ø§Ù', + tabIndex : 'Ù٠اÛÙÙ´ Ø¯Ø³ØªØ±Ø³Û Ø¨Ø§ Tab', + advisoryTitle : 'عÙÙا٠ک٠کÛ', + advisoryContentType : 'ÙÙع Ù ØتÙØ§Û Ú©Ù Ú©Û', + cssClasses : 'Ú©ÙاسÙØ§Û Ø´ÛÙÙÙا٠Ù(Stylesheet)', + charset : 'ÙÙÛسÙگا٠٠Ùبع ÙÙ¾ÛÙÙدشدÙ', + styles : 'Ø´ÛÙÙ(style)', + rel : 'Relationship', // MISSING + selectAnchor : 'ÛÚ© ÙÙگر برگزÛÙÛد', + anchorName : 'با Ùا٠ÙÙگر', + anchorId : 'با Ø´ÙاسÙÙ´ اÙ٠اÙ', + emailAddress : 'ÙشاÙÛ Ù¾Ø³Øª اÙکترÙÙÛÚ©Û', + emailSubject : 'Ù ÙضÙع Ù¾Ûا٠', + emailBody : '٠ت٠پÛا٠', + noAnchors : '(در اÛ٠سÙد ÙÙÚ¯Ø±Û Ø¯Ø±Ø¯Ø³ØªØ±Ø³ ÙÛست)', + noUrl : 'ÙØ·Ùا URL Ù¾ÛÙÙد را بÙÙÛسÛد', + noEmail : 'ÙØ·Ùا ÙشاÙÛ Ù¾Ø³Øª اÙکترÙÙÛÚ©Û Ø±Ø§ بÙÙÛسÛد' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Ú¯ÙجاÙدÙ/ÙÛراÛØ´ ÙÙÙگر', + menu : 'ÙÛÚÚ¯ÛÙØ§Û ÙÙگر', + title : 'ÙÛÚÚ¯ÛÙØ§Û ÙÙگر', + name : 'Ùا٠ÙÙگر', + errorName : 'ÙØ·Ùا Ùا٠ÙÙگر را بÙÙÛسÛد', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'جستج٠٠جاÛگزÛÙÛ', + find : 'جستجÙ', + replace : 'جاÛگزÛÙÛ', + findWhat : 'ÚÙÚÛز را Ù ÛÛابÛد:', + replaceWith : 'جاÛگزÛÙÛ Ø¨Ø§:', + notFoundMsg : '٠ت٠٠ÙردÙظر ÛاÙت Ùشد.', + matchCase : 'Ù٠ساÙÛ Ø¯Ø± Ø¨Ø²Ø±Ú¯Û Ù Ú©ÙÚÚ©Û ÙÙÛسÙÙا', + matchWord : 'Ù٠ساÙÛ Ø¨Ø§ ÙاÚÙÙ´ کا٠Ù', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'جاÛگزÛÙÛ ÙÙ ÙÙ´ ÛاÙتÙÙا', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'جدÙÙ', + title : 'ÙÛÚÚ¯ÛÙØ§Û Ø¬Ø¯ÙÙ', + menu : 'ÙÛÚÚ¯ÛÙØ§Û Ø¬Ø¯ÙÙ', + deleteTable : 'پاککرد٠جدÙÙ', + rows : 'سطرÙا', + columns : 'ستÙÙÙا', + border : 'اÙدازÙÙ´ ÙبÙ', + widthPx : 'Ù¾ÛکسÙ', + widthPc : 'درصد', + widthUnit : 'width unit', // MISSING + cellSpace : 'ÙاصÙÙÙ´ Ù Ûا٠سÙÙÙÙا', + cellPad : 'ÙاصÙÙÙ´ پرشد٠در سÙÙÙ', + caption : 'عÙÙاÙ', + summary : 'Ø®ÙاصÙ', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'سÙÙÙ', + insertBefore : 'اÙزÙد٠سÙÙÙ Ùب٠از', + insertAfter : 'اÙزÙد٠سÙÙ٠بعد از', + deleteCell : 'Øذ٠سÙÙÙÙا', + merge : 'ادغا٠سÙÙÙÙا', + mergeRight : 'ادغا٠ب٠راست', + mergeDown : 'ادغا٠ب٠پاÛÛÙ', + splitHorizontal : 'جدا کرد٠اÙÙÛ Ø³ÙÙÙ', + splitVertical : 'جدا کرد٠ع٠ÙØ¯Û Ø³ÙÙÙ', + title : 'ÙÛÚÚ¯ÛÙØ§Û Ø³ÙÙÙ', + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'سطر', + insertBefore : 'اÙزÙد٠سطر Ùب٠از', + insertAfter : 'اÙزÙد٠سطر بعد از', + deleteRow : 'Øذ٠سطرÙا' + }, + + column : + { + menu : 'ستÙÙ', + insertBefore : 'اÙزÙد٠ستÙÙ Ùب٠از', + insertAfter : 'اÙزÙد٠ستÙ٠بعد از', + deleteColumn : 'Øذ٠ستÙÙÙا' + } + }, + + // Button Dialog. + button : + { + title : 'ÙÛÚÚ¯ÛÙØ§Û Ø¯Ú©Ù Ù', + text : '٠ت٠(Ù Ùدار)', + type : 'ÙÙع', + typeBtn : 'دک٠Ù', + typeSbm : 'Submit', + typeRst : 'بازÙشاÙÛ (Reset)' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ÙÛÚÚ¯ÛÙØ§Û Ø®Ø§ÙÙÙ´ گزÛÙÙاÛ', + radioTitle : 'ÙÛÚÚ¯ÛÙØ§Û Ø¯Ú©Ù ÙÙ´ رادÛÙÛÛ', + value : 'Ù Ùدار', + selected : 'برگزÛدÙ' + }, + + // Form Dialog. + form : + { + title : 'ÙÛÚÚ¯ÛÙØ§Û Ùر٠', + menu : 'ÙÛÚÚ¯ÛÙØ§Û Ùر٠', + action : 'رÙÛداد', + method : '٠تد', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'ÙÛÚÚ¯ÛÙØ§Û ÙÛÙد ÚÙدگزÛÙÙاÛ', + selectInfo : 'اطÙاعات', + opAvail : 'گزÛÙÙÙØ§Û Ø¯Ø±Ø¯Ø³ØªØ±Ø³', + value : 'Ù Ùدار', + size : 'اÙدازÙ', + lines : 'خطÙØ·', + chkMulti : 'گزÛÙØ´ ÚÙدگاÙÙ ÙراÙ٠باشد', + opText : '٠تÙ', + opValue : 'Ù Ùدار', + btnAdd : 'اÙزÙدÙ', + btnModify : 'ÙÛراÛØ´', + btnUp : 'باÙا', + btnDown : 'پائÛÙ', + btnSetValue : 'تÙظÛ٠ب٠عÙÙا٠٠Ùدار ÙبرگزÛدÙ', + btnDelete : 'پاککردÙ' + }, + + // Textarea Dialog. + textarea : + { + title : 'ÙÛÚÚ¯ÛÙØ§Û ÙاØÛÙÙ´ ٠تÙÛ', + cols : 'ستÙÙÙا', + rows : 'سطرÙا' + }, + + // Text Field Dialog. + textfield : + { + title : 'ÙÛÚÚ¯ÛÙØ§Û ÙÛÙد ٠تÙÛ', + name : 'Ùا٠', + value : 'Ù Ùدار', + charWidth : 'Ù¾ÙÙØ§Û ÙÙÛسÙ', + maxChars : 'بÛØ´ÛÙÙÙ´ ÙÙÛسÙÙا', + type : 'ÙÙع', + typeText : '٠تÙ', + typePass : 'گذرÙاÚÙ' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ÙÛÚÚ¯ÛÙØ§Û ÙÛÙد Ù¾ÙÙاÙ', + name : 'Ùا٠', + value : 'Ù Ùدار' + }, + + // Image Dialog. + image : + { + title : 'ÙÛÚÚ¯ÛÙØ§Û ØªØµÙÛر', + titleButton : 'ÙÛÚÚ¯ÛÙØ§Û Ø¯Ú©Ù ÙÙ´ تصÙÛرÛ', + menu : 'ÙÛÚÚ¯ÛÙØ§Û ØªØµÙÛر', + infoTab : 'اطÙاعات تصÙÛر', + btnUpload : 'ب٠سرÙر بÙرست', + upload : 'اÙتÙا٠ب٠سرÙر', + alt : '٠ت٠جاÛگزÛÙ', + lockRatio : 'ÙÙÙکرد٠ÙÙسبت', + resetSize : 'بازÙشاÙÛ Ø§ÙدازÙ', + border : 'ÙبÙ', + hSpace : 'ÙاصÙÙÙ´ اÙÙÛ', + vSpace : 'ÙاصÙÙÙ´ ع٠ÙدÛ', + alertUrl : 'ÙØ·Ùا URL تصÙÛر را بÙÙÛسÛد', + linkTab : 'Ù¾ÛÙÙد', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'ÙÛÚÚ¯ÛÙØ§Û Flash', + propertiesTab : 'Properties', // MISSING + title : 'ÙÛÚÚ¯ÛÙØ§Û Flash', + chkPlay : 'آغاز ÙØ®Ùدکار', + chkLoop : 'Ø§Ø¬Ø±Ø§Û Ù¾ÛاپÛ', + chkMenu : 'دردسترسبÙد٠٠ÙÙÛ Flash', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Ù ÙÛاس', + scaleAll : 'Ù٠اÛØ´ ÙÙ Ù', + scaleNoBorder : 'بدÙ٠کراÙ', + scaleFit : 'جاÛÚ¯ÛØ±Û Ú©Ø§Ù Ù', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'پائÛÙ Ù Ø·ÙÙ', + alignAbsMiddle : 'Ùسط Ù Ø·ÙÙ', + alignBaseline : 'خطپاÛÙ', + alignTextTop : '٠ت٠باÙا', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'رÙÚ¯ پسز٠ÛÙÙ', + hSpace : 'ÙاصÙÙÙ´ اÙÙÛ', + vSpace : 'ÙاصÙÙÙ´ ع٠ÙدÛ', + validateSrc : 'ÙØ·Ùا URL Ù¾ÛÙÙد را بÙÙÛسÛد', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'در ÙاÚÙÙا٠٠ÛاÙت Ùشد', + changeTo : 'تغÛÛر بÙ', + btnIgnore : 'ÚØ´Ù Ù¾ÙØ´Û', + btnIgnoreAll : 'ÚØ´Ù Ù¾ÙØ´Û ÙÙ Ù', + btnReplace : 'جاÛگزÛÙÛ', + btnReplaceAll : 'جاÛگزÛÙÛ ÙÙ Ù', + btnUndo : 'ÙاÚÛÙØ´', + noSuggestions : '- Ù¾ÛØ´ÙÙØ§Ø¯Û ÙÛست -', + progress : 'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا در Øا٠اÙجا٠...', + noMispell : 'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا اÙجا٠شد. ÙÛÚ ØºÙطا٠ÙØ§Ø¦Û ÛاÙت Ùشد', + noChanges : 'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا اÙجا٠شد. ÙÛÚ ÙاÚÙØ§Û ØªØºÛÛر ÙÛاÙت', + oneChange : 'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا اÙجا٠شد. ÛÚ© ÙاÚ٠تغÛÛر ÛاÙت', + manyChanges : 'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا اÙجا٠شد. %1 ÙاÚ٠تغÛÛر ÛاÙت', + ieSpellDownload : 'بررسÛÚ©ÙÙدÙÙ´ ا٠Ùا Ùصب Ùشد٠است. Ø¢Ûا Ù ÛØ®ÙاÙÛد آ٠را Ù٠اکÙÙ٠درÛاÙت Ú©ÙÛدØ' + }, + + smiley : + { + toolbar : 'Ø®ÙداÙÚ©', + title : 'Ú¯ÙجاÙد٠خÙداÙÚ©', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ÙÙرست ش٠ارÙدار', + bulletedlist : 'ÙÙرست ÙÙØ·ÙاÛ', + indent : 'اÙزاÛØ´ تÙرÙتگÛ', + outdent : 'کاÙØ´ تÙرÙتگÛ', + + justify : + { + left : 'ÚÙ¾ÚÛÙ', + center : 'Ù ÛاÙÚÛÙ', + right : 'راستÚÛÙ', + block : 'بÙÙÚ©ÚÛÙ' + }, + + blockquote : 'بÙÙÚ© ÙÙÙ ÙÙÙ', + + clipboard : + { + title : 'ÚسباÙدÙ', + cutError : 'تÙظÛ٠ات ا٠ÙÛØªÛ Ù Ø±Ùرگر ش٠ا اجاز٠ÙÙ ÛدÙد Ú©Ù ÙÛراÛشگر ب٠طÙر Ø®Ùدکار ع٠ÙکردÙØ§Û Ø¨Ø±Ø´ را اÙجا٠دÙد. ÙØ·Ùا با دک٠ÙÙØ§Û ØµÙØÙÚ©ÙÛد اÛ٠کار را اÙجا٠دÙÛد (Ctrl/Cmd+X).', + copyError : 'تÙظÛ٠ات ا٠ÙÛØªÛ Ù Ø±Ùرگر ش٠ا اجاز٠ÙÙ ÛدÙد Ú©Ù ÙÛراÛشگر ب٠طÙر Ø®Ùدکار ع٠ÙکردÙØ§Û Ú©Ù¾Ûکرد٠را اÙجا٠دÙد. ÙØ·Ùا با دک٠ÙÙØ§Û ØµÙØÙÚ©ÙÛد اÛ٠کار را اÙجا٠دÙÛد (Ctrl/Cmd+C).', + pasteMsg : 'ÙØ·Ùا ٠ت٠را با Ú©ÙÛدÙØ§Û (<STRONG>Ctrl/Cmd+V</STRONG>) در اÛ٠جعبÙÙ´ ٠تÙÛ Ø¨ÚسباÙÛد Ù <STRONG>پذÛرش</STRONG> را بزÙÛد.', + securityMsg : 'ب٠خاطر تÙظÛ٠ات ا٠ÙÛØªÛ Ù Ø±Ùرگر Ø´Ù Ø§Ø ÙÛراÛشگر ÙÙ ÛتÙاÙد Ø¯Ø³ØªØ±Ø³Û Ù Ø³ØªÙÛ٠ب٠دادÙÙØ§Û clipboard داشت٠باشد. ش٠ا باÛد دÙبار٠آÙرا در اÛÙ Ù¾Ùجر٠بÚسباÙÛد.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'ÚسباÙد٠از Word', + title : 'ÚسباÙد٠از Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'ÚسباÙد٠ب٠عÙÙا٠٠ت٠ÙسادÙ', + title : 'ÚسباÙد٠ب٠عÙÙا٠٠ت٠ÙسادÙ' + }, + + templates : + { + button : 'اÙÚ¯ÙÙا', + title : 'اÙÚ¯ÙÙØ§Û Ù ØتÙÛات', + options : 'Template Options', // MISSING + insertOption : 'Ù ØتÙÛات Ú©ÙÙÙÛ Ø¬Ø§ÛگزÛÙ Ø´ÙÙد', + selectPromptMsg : 'ÙØ·Ùا اÙÚ¯ÙÛ Ù ÙردÙظر را Ø¨Ø±Ø§Û Ø¨Ø§Ø²Ú©Ø±Ø¯Ù Ø¯Ø± ÙÛراÛشگر برگزÛÙÛد<br>(Ù ØتÙÛات Ú©ÙÙÙÛ Ø§Ø² دست Ø®ÙاÙÙد رÙت):', + emptyListMsg : '(اÙÚ¯ÙØ¦Û ØªØ¹Ø±ÛÙ Ùشد٠است)' + }, + + showBlocks : 'Ù٠اÛØ´ بÙÙÚ©Ùا', + + stylesCombo : + { + label : 'سبک', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Ùر٠ت', + panelTitle : 'Ùر٠ت', + + tag_p : 'Ùر٠اÙ', + tag_pre : 'Ùر٠تشدÙ', + tag_address : 'آدرس', + tag_h1 : 'سرÙÙÛس 1', + tag_h2 : 'سرÙÙÛس 2', + tag_h3 : 'سرÙÙÛس 3', + tag_h4 : 'سرÙÙÛس 4', + tag_h5 : 'سرÙÙÛس 5', + tag_h6 : 'سرÙÙÛس 6', + tag_div : 'بÙد' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ÙÙÙ ', + voiceLabel : 'Font', // MISSING + panelTitle : 'ÙÙÙ ' + }, + + fontSize : + { + label : 'اÙدازÙ', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'اÙدازÙ' + }, + + colorButton : + { + textColorTitle : 'رÙÚ¯ ٠تÙ', + bgColorTitle : 'رÙÚ¯ پسز٠ÛÙÙ', + panelTitle : 'Colors', // MISSING + auto : 'Ø®Ùدکار', + more : 'رÙÚ¯ÙØ§Û Ø¨Ûشتر...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'ÙÛÚÚ¯ÛÙØ§Û Ø³Ùد', + title : 'ÙÛÚÚ¯ÛÙØ§Û Ø³Ùد', + design : 'Design', // MISSING + meta : 'ÙرادادÙ', + chooseColor : 'Choose', // MISSING + other : '<ساÛر>', + docTitle : 'عÙÙا٠صÙØÙ', + charset : 'Ø±Ù Ø²Ú¯Ø°Ø§Ø±Û ÙÙÛسÙگاÙ', + charsetOther : 'Ø±Ù Ø²Ú¯Ø°Ø§Ø±Û ÙÙÛسÙگا٠دÛگر', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'ارÙÙ¾Ø§Û Ù Ø±Ú©Ø²Û', + charsetCT : 'ÚÛÙÛ Ø±Ø³Ù Û (Big5)', + charsetCR : 'سÛرÛÙÛÚ©', + charsetGR : 'ÛÙÙاÙÛ', + charsetJP : 'ÚاپÙÛ', + charsetKR : 'کرÙاÛ', + charsetTR : 'ترکÛ', + charsetUN : 'ÛÙÙÛÚ©Ùد (UTF-8)', + charsetWE : 'ارÙÙ¾Ø§Û ØºØ±Ø¨Û', + docType : 'عÙÙا٠ÙÙع سÙد', + docTypeOther : 'عÙÙا٠ÙÙع سÙد دÛگر', + xhtmlDec : 'شا٠٠تعارÛÙ XHTML', + bgColor : 'رÙÚ¯ پسز٠ÛÙÙ', + bgImage : 'URL تصÙÛر پسز٠ÛÙÙ', + bgFixed : 'پسز٠ÛÙÙÙ´ Ù¾Û٠اÛØ´ÙاپذÛر', + txtColor : 'رÙÚ¯ ٠تÙ', + margin : 'ØاشÛÙÙØ§Û ØµÙØÙ', + marginTop : 'باÙا', + marginLeft : 'ÚÙ¾', + marginRight : 'راست', + marginBottom : 'پاÛÛÙ', + metaKeywords : 'Ú©ÙÛدÙاÚگا٠Ù٠اÛÙÚ¯Ø°Ø§Ø±Û Ø³Ùد (با کا٠ا جدا Ø´ÙÙد)', + metaDescription : 'تÙصÛ٠سÙد', + metaAuthor : 'ÙÙÛسÙدÙ', + metaCopyright : 'Ú©Ù¾ÛراÛت', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/fi.js b/_source/lang/fi.js new file mode 100644 index 0000000..ffbbfc0 --- /dev/null +++ b/_source/lang/fi.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Finnish language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['fi'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rikastekstieditori, %1, paina ALT 0 nähdäksesi ohjeen.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rikastekstieditori', + + // Toolbar buttons without dialogs. + source : 'Koodi', + newPage : 'Tyhjennä', + save : 'Tallenna', + preview : 'Esikatsele', + cut : 'Leikkaa', + copy : 'Kopioi', + paste : 'Liitä', + print : 'Tulosta', + underline : 'Alleviivattu', + bold : 'Lihavoitu', + italic : 'Kursivoitu', + selectAll : 'Valitse kaikki', + removeFormat : 'Poista muotoilu', + strike : 'Yliviivattu', + subscript : 'Alaindeksi', + superscript : 'Yläindeksi', + horizontalrule : 'Lisää murtoviiva', + pagebreak : 'Lisää sivunvaihto', + pagebreakAlt : 'Sivunvaihto', + unlink : 'Poista linkki', + undo : 'Kumoa', + redo : 'Toista', + + // Common messages and labels. + common : + { + browseServer : 'Selaa palvelinta', + url : 'Osoite', + protocol : 'Protokolla', + upload : 'Lisää tiedosto', + uploadSubmit : 'Lähetä palvelimelle', + image : 'Kuva', + flash : 'Flash', + form : 'Lomake', + checkbox : 'Valintaruutu', + radio : 'Radiopainike', + textField : 'Tekstikenttä', + textarea : 'Tekstilaatikko', + hiddenField : 'Piilokenttä', + button : 'Painike', + select : 'Valintakenttä', + imageButton : 'Kuvapainike', + notSet : '<ei asetettu>', + id : 'Tunniste', + name : 'Nimi', + langDir : 'Kielen suunta', + langDirLtr : 'Vasemmalta oikealle (LTR)', + langDirRtl : 'Oikealta vasemmalle (RTL)', + langCode : 'Kielikoodi', + longDescr : 'Pitkän kuvauksen URL', + cssClass : 'Tyyliluokat', + advisoryTitle : 'Avustava otsikko', + cssStyle : 'Tyyli', + ok : 'OK', + cancel : 'Peruuta', + close : 'Sulje', + preview : 'Esikatselu', + generalTab : 'Yleinen', + advancedTab : 'Lisäominaisuudet', + validateNumberFailed : 'Arvon pitää olla numero.', + confirmNewPage : 'Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?', + confirmCancel : 'Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?', + options : 'Asetukset', + target : 'Kohde', + targetNew : 'Uusi ikkuna (_blank)', + targetTop : 'Päällimmäinen ikkuna (_top)', + targetSelf : 'Sama ikkuna (_self)', + targetParent : 'Ylemmän tason ikkuna (_parent)', + langDirLTR : 'Vasemmalta oikealle (LTR)', + langDirRTL : 'Oikealta vasemmalle (RTL)', + styles : 'Tyyli', + cssClasses : 'Tyylitiedoston luokat', + width : 'Leveys', + height : 'Korkeus', + align : 'Kohdistus', + alignLeft : 'Vasemmalle', + alignRight : 'Oikealle', + alignCenter : 'Keskelle', + alignTop : 'Ylös', + alignMiddle : 'Keskelle', + alignBottom : 'Alas', + invalidHeight : 'Korkeuden täytyy olla numero.', + invalidWidth : 'Leveyden täytyy olla numero.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, ei saatavissa</span>' + }, + + contextmenu : + { + options : 'Pikavalikon ominaisuudet' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Lisää erikoismerkki', + title : 'Valitse erikoismerkki', + options : 'Erikoismerkin ominaisuudet' + }, + + // Link dialog. + link : + { + toolbar : 'Lisää linkki/muokkaa linkkiä', + other : '<muu>', + menu : 'Muokkaa linkkiä', + title : 'Linkki', + info : 'Linkin tiedot', + target : 'Kohde', + upload : 'Lisää tiedosto', + advanced : 'Lisäominaisuudet', + type : 'Linkkityyppi', + toUrl : 'Osoite', + toAnchor : 'Ankkuri tässä sivussa', + toEmail : 'Sähköposti', + targetFrame : '<kehys>', + targetPopup : '<popup ikkuna>', + targetFrameName : 'Kohdekehyksen nimi', + targetPopupName : 'Popup ikkunan nimi', + popupFeatures : 'Popup ikkunan ominaisuudet', + popupResizable : 'Venytettävä', + popupStatusBar : 'Tilarivi', + popupLocationBar: 'Osoiterivi', + popupToolbar : 'Vakiopainikkeet', + popupMenuBar : 'Valikkorivi', + popupFullScreen : 'Täysi ikkuna (IE)', + popupScrollBars : 'Vierityspalkit', + popupDependent : 'Riippuva (Netscape)', + popupLeft : 'Vasemmalta (px)', + popupTop : 'Ylhäältä (px)', + id : 'Tunniste', + langDir : 'Kielen suunta', + langDirLTR : 'Vasemmalta oikealle (LTR)', + langDirRTL : 'Oikealta vasemmalle (RTL)', + acccessKey : 'Pikanäppäin', + name : 'Nimi', + langCode : 'Kielen suunta', + tabIndex : 'Tabulaattori indeksi', + advisoryTitle : 'Avustava otsikko', + advisoryContentType : 'Avustava sisällön tyyppi', + cssClasses : 'Tyyliluokat', + charset : 'Linkitetty kirjaimisto', + styles : 'Tyyli', + rel : 'Suhde', + selectAnchor : 'Valitse ankkuri', + anchorName : 'Ankkurin nimen mukaan', + anchorId : 'Ankkurin ID:n mukaan', + emailAddress : 'Sähköpostiosoite', + emailSubject : 'Aihe', + emailBody : 'Viesti', + noAnchors : '(Ei ankkureita tässä dokumentissa)', + noUrl : 'Linkille on kirjoitettava URL', + noEmail : 'Kirjoita sähköpostiosoite' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Lisää ankkuri/muokkaa ankkuria', + menu : 'Ankkurin ominaisuudet', + title : 'Ankkurin ominaisuudet', + name : 'Nimi', + errorName : 'Ankkurille on kirjoitettava nimi', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numeroidun listan ominaisuudet', + bulletedTitle : 'Numeroimattoman listan ominaisuudet', + type : 'Tyyppi', + start : 'Alku', + validateStartNumber :'Listan ensimmäisen numeron tulee olla kokonaisluku.', + circle : 'Ympyrä', + disc : 'Levy', + square : 'Neliö', + none : 'Ei mikään', + notset : '<ei asetettu>', + armenian : 'Armeenialainen numerointi', + georgian : 'Georgialainen numerointi (an, ban, gan, etc.)', + lowerRoman : 'Pienet roomalaiset (i, ii, iii, iv, v, jne.)', + upperRoman : 'Isot roomalaiset (I, II, III, IV, V, jne.)', + lowerAlpha : 'Pienet aakkoset (a, b, c, d, e, jne.)', + upperAlpha : 'Isot aakkoset (A, B, C, D, E, jne.)', + lowerGreek : 'Pienet kreikkalaiset (alpha, beta, gamma, jne.)', + decimal : 'Desimaalit (1, 2, 3, jne.)', + decimalLeadingZero : 'Desimaalit, alussa nolla (01, 02, 03, jne.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Etsi ja korvaa', + find : 'Etsi', + replace : 'Korvaa', + findWhat : 'Etsi mitä:', + replaceWith : 'Korvaa tällä:', + notFoundMsg : 'Etsittyä tekstiä ei löytynyt.', + matchCase : 'Sama kirjainkoko', + matchWord : 'Koko sana', + matchCyclic : 'Kierrä ympäri', + replaceAll : 'Korvaa kaikki', + replaceSuccessMsg : '%1 esiintymä(ä) korvattu.' + }, + + // Table Dialog + table : + { + toolbar : 'Taulu', + title : 'Taulun ominaisuudet', + menu : 'Taulun ominaisuudet', + deleteTable : 'Poista taulu', + rows : 'Rivit', + columns : 'Sarakkeet', + border : 'Rajan paksuus', + widthPx : 'pikseliä', + widthPc : 'prosenttia', + widthUnit : 'leveysyksikkö', + cellSpace : 'Solujen väli', + cellPad : 'Solujen sisennys', + caption : 'Otsikko', + summary : 'Yhteenveto', + headers : 'Ylätunnisteet', + headersNone : 'Ei', + headersColumn : 'Ensimmäinen sarake', + headersRow : 'Ensimmäinen rivi', + headersBoth : 'Molemmat', + invalidRows : 'Rivien määrän täytyy olla suurempi kuin 0.', + invalidCols : 'Sarakkeiden määrän täytyy olla suurempi kuin 0.', + invalidBorder : 'Reunan koon täytyy olla numero.', + invalidWidth : 'Taulun leveyden täytyy olla numero.', + invalidHeight : 'Taulun korkeuden täytyy olla numero.', + invalidCellSpacing : 'Solujen välin täytyy olla numero.', + invalidCellPadding : 'Solujen sisennyksen täytyy olla numero.', + + cell : + { + menu : 'Solu', + insertBefore : 'Lisää solu eteen', + insertAfter : 'Lisää solu perään', + deleteCell : 'Poista solut', + merge : 'Yhdistä solut', + mergeRight : 'Yhdistä oikealla olevan kanssa', + mergeDown : 'Yhdistä alla olevan kanssa', + splitHorizontal : 'Jaa solu vaakasuunnassa', + splitVertical : 'Jaa solu pystysuunnassa', + title : 'Solun ominaisuudet', + cellType : 'Solun tyyppi', + rowSpan : 'Rivin jatkuvuus', + colSpan : 'Solun jatkuvuus', + wordWrap : 'Rivitys', + hAlign : 'Horisontaali kohdistus', + vAlign : 'Vertikaali kohdistus', + alignBaseline : 'Alas (teksti)', + bgColor : 'Taustan väri', + borderColor : 'Reunan väri', + data : 'Data', + header : 'Ylätunniste', + yes : 'Kyllä', + no : 'Ei', + invalidWidth : 'Solun leveyden täytyy olla numero.', + invalidHeight : 'Solun korkeuden täytyy olla numero.', + invalidRowSpan : 'Rivin jatkuvuuden täytyy olla kokonaisluku.', + invalidColSpan : 'Solun jatkuvuuden täytyy olla kokonaisluku.', + chooseColor : 'Valitse' + }, + + row : + { + menu : 'Rivi', + insertBefore : 'Lisää rivi yläpuolelle', + insertAfter : 'Lisää rivi alapuolelle', + deleteRow : 'Poista rivit' + }, + + column : + { + menu : 'Sarake', + insertBefore : 'Lisää sarake vasemmalle', + insertAfter : 'Lisää sarake oikealle', + deleteColumn : 'Poista sarakkeet' + } + }, + + // Button Dialog. + button : + { + title : 'Painikkeen ominaisuudet', + text : 'Teksti (arvo)', + type : 'Tyyppi', + typeBtn : 'Painike', + typeSbm : 'Lähetä', + typeRst : 'Tyhjennä' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Valintaruudun ominaisuudet', + radioTitle : 'Radiopainikkeen ominaisuudet', + value : 'Arvo', + selected : 'Valittu' + }, + + // Form Dialog. + form : + { + title : 'Lomakkeen ominaisuudet', + menu : 'Lomakkeen ominaisuudet', + action : 'Toiminto', + method : 'Tapa', + encoding : 'Enkoodaus' + }, + + // Select Field Dialog. + select : + { + title : 'Valintakentän ominaisuudet', + selectInfo : 'Info', + opAvail : 'Ominaisuudet', + value : 'Arvo', + size : 'Koko', + lines : 'Rivit', + chkMulti : 'Salli usea valinta', + opText : 'Teksti', + opValue : 'Arvo', + btnAdd : 'Lisää', + btnModify : 'Muuta', + btnUp : 'Ylös', + btnDown : 'Alas', + btnSetValue : 'Aseta valituksi', + btnDelete : 'Poista' + }, + + // Textarea Dialog. + textarea : + { + title : 'Tekstilaatikon ominaisuudet', + cols : 'Sarakkeita', + rows : 'Rivejä' + }, + + // Text Field Dialog. + textfield : + { + title : 'Tekstikentän ominaisuudet', + name : 'Nimi', + value : 'Arvo', + charWidth : 'Leveys', + maxChars : 'Maksimi merkkimäärä', + type : 'Tyyppi', + typeText : 'Teksti', + typePass : 'Salasana' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Piilokentän ominaisuudet', + name : 'Nimi', + value : 'Arvo' + }, + + // Image Dialog. + image : + { + title : 'Kuvan ominaisuudet', + titleButton : 'Kuvapainikkeen ominaisuudet', + menu : 'Kuvan ominaisuudet', + infoTab : 'Kuvan tiedot', + btnUpload : 'Lähetä palvelimelle', + upload : 'Lisää kuva', + alt : 'Vaihtoehtoinen teksti', + lockRatio : 'Lukitse suhteet', + resetSize : 'Alkuperäinen koko', + border : 'Kehys', + hSpace : 'Vaakatila', + vSpace : 'Pystytila', + alertUrl : 'Kirjoita kuvan osoite (URL)', + linkTab : 'Linkki', + button2Img : 'Haluatko muuntaa valitun kuvanäppäimen kuvaksi?', + img2Button : 'Haluatko muuntaa valitun kuvan kuvanäppäimeksi?', + urlMissing : 'Kuvan lähdeosoite puuttuu.', + validateBorder : 'Kehyksen täytyy olla kokonaisluku.', + validateHSpace : 'HSpace-määrityksen täytyy olla kokonaisluku.', + validateVSpace : 'VSpace-määrityksen täytyy olla kokonaisluku.' + }, + + // Flash Dialog + flash : + { + properties : 'Flash-ominaisuudet', + propertiesTab : 'Ominaisuudet', + title : 'Flash ominaisuudet', + chkPlay : 'Automaattinen käynnistys', + chkLoop : 'Toisto', + chkMenu : 'Näytä Flash-valikko', + chkFull : 'Salli kokoruututila', + scale : 'Levitä', + scaleAll : 'Näytä kaikki', + scaleNoBorder : 'Ei rajaa', + scaleFit : 'Tarkka koko', + access : 'Skriptien pääsy', + accessAlways : 'Aina', + accessSameDomain: 'Sama verkkotunnus', + accessNever : 'Ei koskaan', + alignAbsBottom : 'Aivan alas', + alignAbsMiddle : 'Aivan keskelle', + alignBaseline : 'Alas (teksti)', + alignTextTop : 'Ylös (teksti)', + quality : 'Laatu', + qualityBest : 'Paras', + qualityHigh : 'Korkea', + qualityAutoHigh : 'Automaattinen korkea', + qualityMedium : 'Keskitaso', + qualityAutoLow : 'Automaattinen matala', + qualityLow : 'Matala', + windowModeWindow: 'Ikkuna', + windowModeOpaque: 'Läpinäkyvyys', + windowModeTransparent : 'Läpinäkyvä', + windowMode : 'Ikkuna tila', + flashvars : 'Muuttujat Flash:lle', + bgcolor : 'Taustaväri', + hSpace : 'Vaakatila', + vSpace : 'Pystytila', + validateSrc : 'Linkille on kirjoitettava URL', + validateHSpace : 'Vaakatilan täytyy olla numero.', + validateVSpace : 'Pystytilan täytyy olla numero.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Tarkista oikeinkirjoitus', + title : 'Oikoluku', + notAvailable : 'Valitettavasti oikoluku ei ole käytössä tällä hetkellä.', + errorLoading : 'Virhe ladattaessa oikolukupalvelua isännältä: %s.', + notInDic : 'Ei sanakirjassa', + changeTo : 'Vaihda', + btnIgnore : 'Jätä huomioimatta', + btnIgnoreAll : 'Jätä kaikki huomioimatta', + btnReplace : 'Korvaa', + btnReplaceAll : 'Korvaa kaikki', + btnUndo : 'Kumoa', + noSuggestions : 'Ei ehdotuksia', + progress : 'Tarkistus käynnissä...', + noMispell : 'Tarkistus valmis: Ei virheitä', + noChanges : 'Tarkistus valmis: Yhtään sanaa ei muutettu', + oneChange : 'Tarkistus valmis: Yksi sana muutettiin', + manyChanges : 'Tarkistus valmis: %1 sanaa muutettiin', + ieSpellDownload : 'Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?' + }, + + smiley : + { + toolbar : 'Hymiö', + title : 'Lisää hymiö', + options : 'Hymiön ominaisuudet' + }, + + elementsPath : + { + eleLabel : 'Elementin polku', + eleTitle : '%1 elementti' + }, + + numberedlist : 'Numerointi', + bulletedlist : 'Luottelomerkit', + indent : 'Suurenna sisennystä', + outdent : 'Pienennä sisennystä', + + justify : + { + left : 'Tasaa vasemmat reunat', + center : 'Keskitä', + right : 'Tasaa oikeat reunat', + block : 'Tasaa molemmat reunat' + }, + + blockquote : 'Lainaus', + + clipboard : + { + title : 'Liitä', + cutError : 'Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).', + copyError : 'Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).', + pasteMsg : 'Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.', + securityMsg : 'Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.', + pasteArea : 'Leikealue' + }, + + pastefromword : + { + confirmCleanup : 'Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)', + toolbar : 'Liitä Word-dokumentista', + title : 'Liitä Word-dokumentista', + error : 'Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia' + }, + + pasteText : + { + button : 'Liitä tekstinä', + title : 'Liitä tekstinä' + }, + + templates : + { + button : 'Pohjat', + title : 'Sisältöpohjat', + options : 'Sisältöpohjan ominaisuudet', + insertOption : 'Korvaa editorin koko sisältö', + selectPromptMsg : 'Valitse pohja editoriin<br>(aiempi sisältö menetetään):', + emptyListMsg : '(Ei määriteltyjä pohjia)' + }, + + showBlocks : 'Näytä elementit', + + stylesCombo : + { + label : 'Tyyli', + panelTitle : 'Muotoilujen tyylit', + panelTitle1 : 'Lohkojen tyylit', + panelTitle2 : 'Rivinsisäiset tyylit', + panelTitle3 : 'Objektien tyylit' + }, + + format : + { + label : 'Muotoilu', + panelTitle : 'Muotoilu', + + tag_p : 'Normaali', + tag_pre : 'Muotoiltu', + tag_address : 'Osoite', + tag_h1 : 'Otsikko 1', + tag_h2 : 'Otsikko 2', + tag_h3 : 'Otsikko 3', + tag_h4 : 'Otsikko 4', + tag_h5 : 'Otsikko 5', + tag_h6 : 'Otsikko 6', + tag_div : 'Normaali (DIV)' + }, + + div : + { + title : 'Luo div-kehikko', + toolbar : 'Luo div-kehikko', + cssClassInputLabel : 'Tyylitiedoston luokat', + styleSelectLabel : 'Tyyli', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Kielen koodi', + inlineStyleInputLabel : 'Sisätyyli', + advisoryTitleInputLabel : 'Ohjeistava otsikko', + langDirLabel : 'Kielen suunta', + langDirLTRLabel : 'Vasemmalta oikealle (LTR)', + langDirRTLLabel : 'Oikealta vasemmalle (RTL)', + edit : 'Muokkaa Diviä', + remove : 'Poista Div' + }, + + iframe : + { + title : 'IFrame-kehyksen ominaisuudet', + toolbar : 'IFrame-kehys', + noUrl : 'Anna IFrame-kehykselle lähdeosoite (src)', + scrolling : 'Näytä vierityspalkit', + border : 'Näytä kehyksen reunat' + }, + + font : + { + label : 'Kirjaisinlaji', + voiceLabel : 'Kirjaisinlaji', + panelTitle : 'Kirjaisinlaji' + }, + + fontSize : + { + label : 'Koko', + voiceLabel : 'Kirjaisimen koko', + panelTitle : 'Koko' + }, + + colorButton : + { + textColorTitle : 'Tekstiväri', + bgColorTitle : 'Taustaväri', + panelTitle : 'Värit', + auto : 'Automaattinen', + more : 'Lisää värejä...' + }, + + colors : + { + '000' : 'Musta', + '800000' : 'Kastanjanruskea', + '8B4513' : 'Satulanruskea', + '2F4F4F' : 'Tumma liuskekivenharmaa', + '008080' : 'Sinivihreä', + '000080' : 'Laivastonsininen', + '4B0082' : 'Indigonsininen', + '696969' : 'Tummanharmaa', + 'B22222' : 'Tiili', + 'A52A2A' : 'Ruskea', + 'DAA520' : 'Kultapiisku', + '006400' : 'Tummanvihreä', + '40E0D0' : 'Turkoosi', + '0000CD' : 'Keskisininen', + '800080' : 'Purppura', + '808080' : 'Harmaa', + 'F00' : 'Punainen', + 'FF8C00' : 'Tumma oranssi', + 'FFD700' : 'Kulta', + '008000' : 'Vihreä', + '0FF' : 'Syaani', + '00F' : 'Sininen', + 'EE82EE' : 'Violetti', + 'A9A9A9' : 'Tummanharmaa', + 'FFA07A' : 'Vaaleanlohenpunainen', + 'FFA500' : 'Oranssi', + 'FFFF00' : 'Keltainen', + '00FF00' : 'Limetin vihreä', + 'AFEEEE' : 'Haalea turkoosi', + 'ADD8E6' : 'Vaaleansininen', + 'DDA0DD' : 'Luumu', + 'D3D3D3' : 'Vaaleanharmaa', + 'FFF0F5' : 'Laventelinpunainen', + 'FAEBD7' : 'Antiikinvalkoinen', + 'FFFFE0' : 'Vaaleankeltainen', + 'F0FFF0' : 'Hunajameloni', + 'F0FFFF' : 'Asurinsininen', + 'F0F8FF' : 'Alice Blue -sininen', + 'E6E6FA' : 'Lavanteli', + 'FFF' : 'Valkoinen' + }, + + scayt : + { + title : 'Oikolue kirjoitettaessa', + opera_title : 'Opera ei tue tätä ominaisuutta', + enable : 'Ota käyttöön oikoluku kirjoitettaessa', + disable : 'Poista käytöstä oikoluku kirjoitetaessa', + about : 'Tietoja oikoluvusta kirjoitetaessa', + toggle : 'Vaihda oikoluku kirjoittaessa tilaa', + options : 'Asetukset', + langs : 'Kielet', + moreSuggestions : 'Lisää ehdotuksia', + ignore : 'Ohita', + ignoreAll : 'Ohita kaikki', + addWord : 'Lisää sana', + emptyDic : 'Sanakirjan nimi on annettava.', + + optionsTab : 'Asetukset', + allCaps : 'Ohita sanat, jotka on kirjoitettu kokonaan isoilla kirjaimilla', + ignoreDomainNames : 'Ohita verkkotunnukset', + mixedCase : 'Ohita sanat, joissa on sekoitettu isoja ja pieniä kirjaimia', + mixedWithDigits : 'Ohita sanat, joissa on numeroita', + + languagesTab : 'Kielet', + + dictionariesTab : 'Sanakirjat', + dic_field_name : 'Sanakirjan nimi', + dic_create : 'Luo', + dic_restore : 'Palauta', + dic_delete : 'Poista', + dic_rename : 'Nimeä uudelleen', + dic_info : 'Oletuksena sanakirjat tallennetaan evästeeseen, mutta evästeiden koko on kuitenkin rajallinen. Sanakirjan kasvaessa niin suureksi, ettei se enää mahdu evästeeseen, sanakirja täytyy tallentaa palvelimellemme. Tallentaaksesi sanakirjasi palvelimellemme tulee sinun antaa sille nimi. Jos olet jo tallentanut sanakirjan, anna sen nimi ja klikkaa Palauta-painiketta', + + aboutTab : 'Tietoa' + }, + + about : + { + title : 'Tietoa CKEditorista', + dlgTitle : 'Tietoa CKEditorista', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Lisenssitiedot löytyvät kotisivuiltamme:', + copy : 'Copyright © $1. Kaikki oikeuden pidätetään.' + }, + + maximize : 'Suurenna', + minimize : 'Pienennä', + + fakeobjects : + { + anchor : 'Ankkuri', + flash : 'Flash animaatio', + iframe : 'IFrame-kehys', + hiddenfield : 'Piilokenttä', + unknown : 'Tuntematon objekti' + }, + + resize : 'Raahaa muuttaaksesi kokoa', + + colordialog : + { + title : 'Valitse väri', + options : 'Värin ominaisuudet', + highlight : 'Korostus', + selected : 'Valittu', + clear : 'Poista' + }, + + toolbarCollapse : 'Kutista työkalupalkki', + toolbarExpand : 'Laajenna työkalupalkki', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Tekstin suunta vasemmalta oikealle', + rtl : 'Tekstin suunta oikealta vasemmalle' + }, + + docprops : + { + label : 'Dokumentin ominaisuudet', + title : 'Dokumentin ominaisuudet', + design : 'Design', // MISSING + meta : 'Meta-tieto', + chooseColor : 'Valitse', + other : '<muu>', + docTitle : 'Sivun nimi', + charset : 'Merkistökoodaus', + charsetOther : 'Muu merkistökoodaus', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Keskieurooppalainen', + charsetCT : 'Kiina, perinteinen (Big5)', + charsetCR : 'Kyrillinen', + charsetGR : 'Kreikka', + charsetJP : 'Japani', + charsetKR : 'Korealainen', + charsetTR : 'Turkkilainen', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Länsieurooppalainen', + docType : 'Dokumentin tyyppi', + docTypeOther : 'Muu dokumentin tyyppi', + xhtmlDec : 'Lisää XHTML julistukset', + bgColor : 'Taustaväri', + bgImage : 'Taustakuva', + bgFixed : 'Paikallaanpysyvä tausta', + txtColor : 'Tekstiväri', + margin : 'Sivun marginaalit', + marginTop : 'Ylä', + marginLeft : 'Vasen', + marginRight : 'Oikea', + marginBottom : 'Ala', + metaKeywords : 'Hakusanat (pilkulla erotettuna)', + metaDescription : 'Kuvaus', + metaAuthor : 'Tekijä', + metaCopyright : 'Tekijänoikeudet', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/fo.js b/_source/lang/fo.js new file mode 100644 index 0000000..512cfef --- /dev/null +++ b/_source/lang/fo.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Faroese language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['fo'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, trýst ALT og 0 fyri vegleiðing.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', + + // Toolbar buttons without dialogs. + source : 'Kelda', + newPage : 'Nýggj sÃða', + save : 'Goym', + preview : 'Frumsýning', + cut : 'Kvett', + copy : 'Avrita', + paste : 'Innrita', + print : 'Prenta', + underline : 'Undirstrikað', + bold : 'Feit skrift', + italic : 'Skráskrift', + selectAll : 'Markera alt', + removeFormat : 'Strika sniðgeving', + strike : 'Yvirstrikað', + subscript : 'Lækkað skrift', + superscript : 'Hækkað skrift', + horizontalrule : 'Ger vatnrætta linju', + pagebreak : 'Ger sÃðuskift', + pagebreakAlt : 'SÃðuskift', + unlink : 'Strika tilknýti', + undo : 'Angra', + redo : 'Vend aftur', + + // Common messages and labels. + common : + { + browseServer : 'Ambætarakagi', + url : 'URL', + protocol : 'Protokoll', + upload : 'Send til ambætaran', + uploadSubmit : 'Send til ambætaran', + image : 'Myndir', + flash : 'Flash', + form : 'Formur', + checkbox : 'Flugubein', + radio : 'Radioknøttur', + textField : 'Tekstteigur', + textarea : 'Tekstumráði', + hiddenField : 'Fjaldur teigur', + button : 'Knøttur', + select : 'Valskrá', + imageButton : 'Myndaknøttur', + notSet : '<ikki sett>', + id : 'Id', + name : 'Navn', + langDir : 'Tekstkós', + langDirLtr : 'Frá vinstru til høgru (LTR)', + langDirRtl : 'Frá høgru til vinstru (RTL)', + langCode : 'Málkoda', + longDescr : 'VÃðkað URL frágreiðing', + cssClass : 'Typografi klassar', + advisoryTitle : 'Vegleiðandi heiti', + cssStyle : 'Typografi', + ok : 'Góðkent', + cancel : 'Avlýst', + close : 'Lat aftur', + preview : 'Frumsýn', + generalTab : 'Generelt', + advancedTab : 'Fjølbroytt', + validateNumberFailed : 'Hetta er ikki eitt tal.', + confirmNewPage : 'Allar ikki goymdar broytingar à hesum innihaldið hvørva. Skal nýggj sÃða lesast kortini?', + confirmCancel : 'Nakrir valmøguleikar eru broyttir. Ert tú vÃsur Ã, at dialogurin skal latast aftur?', + options : 'Options', + target : 'Target', + targetNew : 'Nýtt vindeyga (_blank)', + targetTop : 'Vindeyga ovast (_top)', + targetSelf : 'Sama vindeyga (_self)', + targetParent : 'Upphavligt vindeyga (_parent)', + langDirLTR : 'Frá vinstru til høgru (LTR)', + langDirRTL : 'Frá høgru til vinstru (RTL)', + styles : 'Style', + cssClasses : 'Stylesheet Classes', + width : 'Breidd', + height : 'Hædd', + align : 'Justering', + alignLeft : 'Vinstra', + alignRight : 'Høgra', + alignCenter : 'Miðsett', + alignTop : 'Ovast', + alignMiddle : 'Miðja', + alignBottom : 'Botnur', + invalidHeight : 'Hædd má vera eitt tal.', + invalidWidth : 'Breidd má vera eitt tal.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, ikki tøkt</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Set inn sertekn', + title : 'Vel sertekn', + options : 'Møguleikar við serteknum' + }, + + // Link dialog. + link : + { + toolbar : 'Ger/broyt tilknýti', + other : '<annað>', + menu : 'Broyt tilknýti', + title : 'Tilknýti', + info : 'Tilknýtis upplýsingar', + target : 'Target', + upload : 'Send til ambætaran', + advanced : 'Fjølbroytt', + type : 'Tilknýtisslag', + toUrl : 'URL', + toAnchor : 'Tilknýti til marknastein à tekstinum', + toEmail : 'Teldupostur', + targetFrame : '<ramma>', + targetPopup : '<popup vindeyga>', + targetFrameName : 'VÃs navn vindeygans', + targetPopupName : 'Popup vindeygans navn', + popupFeatures : 'Popup vindeygans vÃðkaðu eginleikar', + popupResizable : 'Stødd kann broytast', + popupStatusBar : 'Støðufrágreiðingarbjálki', + popupLocationBar: 'Adressulinja', + popupToolbar : 'Amboðsbjálki', + popupMenuBar : 'Skrábjálki', + popupFullScreen : 'Fullur skermur (IE)', + popupScrollBars : 'Rullibjálki', + popupDependent : 'Bundið (Netscape)', + popupLeft : 'Frástøða frá vinstru', + popupTop : 'Frástøða frá Ãerva', + id : 'Id', + langDir : 'Tekstkós', + langDirLTR : 'Frá vinstru til høgru (LTR)', + langDirRTL : 'Frá høgru til vinstru (RTL)', + acccessKey : 'Snarvegisknöttur', + name : 'Navn', + langCode : 'Tekstkós', + tabIndex : 'Tabulator indeks', + advisoryTitle : 'Vegleiðandi heiti', + advisoryContentType : 'Vegleiðandi innihaldsslag', + cssClasses : 'Typografi klassar', + charset : 'Atknýtt teknsett', + styles : 'Typografi', + rel : 'Relationship', // MISSING + selectAnchor : 'Vel ein marknastein', + anchorName : 'Eftir navni á marknasteini', + anchorId : 'Eftir element Id', + emailAddress : 'Teldupost-adressa', + emailSubject : 'Evni', + emailBody : 'Breyðtekstur', + noAnchors : '(Eingir marknasteinar eru à hesum dokumentið)', + noUrl : 'Vinarliga skriva tilknýti (URL)', + noEmail : 'Vinarliga skriva teldupost-adressu' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Ger/broyt marknastein', + menu : 'Eginleikar fyri marknastein', + title : 'Eginleikar fyri marknastein', + name : 'Heiti marknasteinsins', + errorName : 'Vinarliga rita marknasteinsins heiti', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Eginleikar fyri lista við tølum', + bulletedTitle : 'Eginleikar fyri lista við prikkum', + type : 'Slag', + start : 'Byrjan', + validateStartNumber :'Byrjunartalið fyri lista má vera eitt heiltal.', + circle : 'Sirkul', + disc : 'Disc', + square : 'Fýrkantur', + none : 'Einki', + notset : '<ikki sett>', + armenian : 'Armensk talskipan', + georgian : 'Georgisk talskipan (an, ban, gan, osv.)', + lowerRoman : 'LÃtil rómaratøl (i, ii, iii, iv, v, etc.)', + upperRoman : 'Stór rómaratøl (I, II, III, IV, V, etc.)', + lowerAlpha : 'LÃtlir bókstavir (a, b, c, d, e, etc.)', + upperAlpha : 'Stórir bókstavir (A, B, C, D, E, etc.)', + lowerGreek : 'Grikskt við lÃtlum (alpha, beta, gamma, etc.)', + decimal : 'Vanlig tøl (1, 2, 3, etc.)', + decimalLeadingZero : 'Tøl við null frammanfyri (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Finn og broyt', + find : 'Leita', + replace : 'Yvirskriva', + findWhat : 'Finn:', + replaceWith : 'Yvirskriva við:', + notFoundMsg : 'Leititeksturin varð ikki funnin', + matchCase : 'Munur á stórum og smáum bókstavum', + matchWord : 'Bert heil orð', + matchCyclic : 'Match cyclic', + replaceAll : 'Yvirskriva alt', + replaceSuccessMsg : '%1 úrslit broytt.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabell', + title : 'Eginleikar fyri tabell', + menu : 'Eginleikar fyri tabell', + deleteTable : 'Strika tabell', + rows : 'Røðir', + columns : 'Kolonnur', + border : 'Bordabreidd', + widthPx : 'pixels', + widthPc : 'prosent', + widthUnit : 'breiddar unit', + cellSpace : 'Fjarstøða millum meskar', + cellPad : 'Meskubreddi', + caption : 'Tabellfrágreiðing', + summary : 'Samandráttur', + headers : 'Yvirskriftir', + headersNone : 'Eingin', + headersColumn : 'Fyrsta kolonna', + headersRow : 'Fyrsta rað', + headersBoth : 'Báðir', + invalidRows : 'Talið av røðum má vera eitt tal størri enn 0.', + invalidCols : 'Talið av kolonnum má vera eitt tal størri enn 0.', + invalidBorder : 'Borda-stødd má vera eitt tal.', + invalidWidth : 'Tabell-breidd má vera eitt tal.', + invalidHeight : 'Tabell-hædd má vera eitt tal.', + invalidCellSpacing : 'Cell spacing má vera eitt tal.', + invalidCellPadding : 'Cell padding má vera eitt tal.', + + cell : + { + menu : 'Meski', + insertBefore : 'Set meska inn áðrenn', + insertAfter : 'Set meska inn aftaná', + deleteCell : 'Strika meskar', + merge : 'Flætta meskar', + mergeRight : 'Flætta meskar til høgru', + mergeDown : 'Flætta saman', + splitHorizontal : 'Kloyv meska vatnrætt', + splitVertical : 'Kloyv meska loddrætt', + title : 'Mesku eginleikar', + cellType : 'Mesku slag', + rowSpan : 'Ræð spenni', + colSpan : 'Kolonnu spenni', + wordWrap : 'Orðkloyving', + hAlign : 'Horisontal plasering', + vAlign : 'Loddrøtt plasering', + alignBaseline : 'Basislinja', + bgColor : 'Bakgrundslitur', + borderColor : 'Bordalitur', + data : 'Data', + header : 'Header', + yes : 'Ja', + no : 'Nei', + invalidWidth : 'Meskubreidd má vera eitt tal.', + invalidHeight : 'Meskuhædd má vera eitt tal.', + invalidRowSpan : 'Raðspennið má vera eitt heiltal.', + invalidColSpan : 'Kolonnuspennið má vera eitt heiltal.', + chooseColor : 'Vel' + }, + + row : + { + menu : 'Rað', + insertBefore : 'Set rað inn áðrenn', + insertAfter : 'Set rað inn aftaná', + deleteRow : 'Strika røðir' + }, + + column : + { + menu : 'Kolonna', + insertBefore : 'Set kolonnu inn áðrenn', + insertAfter : 'Set kolonnu inn aftaná', + deleteColumn : 'Strika kolonnur' + } + }, + + // Button Dialog. + button : + { + title : 'Eginleikar fyri knøtt', + text : 'Tekstur', + type : 'Slag', + typeBtn : 'Knøttur', + typeSbm : 'Send', + typeRst : 'Nullstilla' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Eginleikar fyri flugubein', + radioTitle : 'Eginleikar fyri radioknøtt', + value : 'Virði', + selected : 'Valt' + }, + + // Form Dialog. + form : + { + title : 'Eginleikar fyri Form', + menu : 'Eginleikar fyri Form', + action : 'Hending', + method : 'Háttur', + encoding : 'Encoding' + }, + + // Select Field Dialog. + select : + { + title : 'Eginleikar fyri valskrá', + selectInfo : 'Upplýsingar', + opAvail : 'Tøkir møguleikar', + value : 'Virði', + size : 'Stødd', + lines : 'Linjur', + chkMulti : 'Loyv fleiri valmøguleikum samstundis', + opText : 'Tekstur', + opValue : 'Virði', + btnAdd : 'Legg afturat', + btnModify : 'Broyt', + btnUp : 'Upp', + btnDown : 'Niður', + btnSetValue : 'Set sum valt virði', + btnDelete : 'Strika' + }, + + // Textarea Dialog. + textarea : + { + title : 'Eginleikar fyri tekstumráði', + cols : 'kolonnur', + rows : 'røðir' + }, + + // Text Field Dialog. + textfield : + { + title : 'Eginleikar fyri tekstteig', + name : 'Navn', + value : 'Virði', + charWidth : 'Breidd (sjónlig tekn)', + maxChars : 'Mest loyvdu tekn', + type : 'Slag', + typeText : 'Tekstur', + typePass : 'Loyniorð' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Eginleikar fyri fjaldan teig', + name : 'Navn', + value : 'Virði' + }, + + // Image Dialog. + image : + { + title : 'Myndaeginleikar', + titleButton : 'Eginleikar fyri myndaknøtt', + menu : 'Myndaeginleikar', + infoTab : 'Myndaupplýsingar', + btnUpload : 'Send til ambætaran', + upload : 'Send', + alt : 'Alternativur tekstur', + lockRatio : 'Læs lutfallið', + resetSize : 'Upprunastødd', + border : 'Bordi', + hSpace : 'Høgri breddi', + vSpace : 'Vinstri breddi', + alertUrl : 'Rita slóðina til myndina', + linkTab : 'Tilknýti', + button2Img : 'Skal valdi myndaknøttur gerast til vanliga mynd?', + img2Button : 'Skal valda mynd gerast til myndaknøtt?', + urlMissing : 'URL til mynd manglar.', + validateBorder : 'Bordi má vera eitt heiltal.', + validateHSpace : 'HSpace má vera eitt heiltal.', + validateVSpace : 'VSpace má vera eitt heiltal.' + }, + + // Flash Dialog + flash : + { + properties : 'Flash eginleikar', + propertiesTab : 'Eginleikar', + title : 'Flash eginleikar', + chkPlay : 'Avspælingin byrjar sjálv', + chkLoop : 'Endurspæl', + chkMenu : 'Ger Flash skrá virkna', + chkFull : 'Loyv fullan skerm', + scale : 'Skalering', + scaleAll : 'VÃs alt', + scaleNoBorder : 'Eingin bordi', + scaleFit : 'Neyv skalering', + access : 'Script atgongd', + accessAlways : 'AltÃð', + accessSameDomain: 'Sama navnaøki', + accessNever : 'OngantÃð', + alignAbsBottom : 'Abs botnur', + alignAbsMiddle : 'Abs miðja', + alignBaseline : 'Basislinja', + alignTextTop : 'Tekst toppur', + quality : 'Góðska', + qualityBest : 'Besta', + qualityHigh : 'Høg', + qualityAutoHigh : 'Auto høg', + qualityMedium : 'Meðal', + qualityAutoLow : 'Auto Lág', + qualityLow : 'Lág', + windowModeWindow: 'Rútur', + windowModeOpaque: 'Ikki transparent', + windowModeTransparent : 'Transparent', + windowMode : 'Slag av rúti', + flashvars : 'Variablar fyri Flash', + bgcolor : 'Bakgrundslitur', + hSpace : 'Høgri breddi', + vSpace : 'Vinstri breddi', + validateSrc : 'Vinarliga skriva tilknýti (URL)', + validateHSpace : 'HSpace má vera eitt tal.', + validateVSpace : 'VSpace má vera eitt tal.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Kanna stavseting', + title : 'Kanna stavseting', + notAvailable : 'TÃverri, ikki tøkt à løtuni.', + errorLoading : 'Feilur við innlesing av application service host: %s.', + notInDic : 'Finst ikki à orðabókini', + changeTo : 'Broyt til', + btnIgnore : 'Forfjóna', + btnIgnoreAll : 'Forfjóna alt', + btnReplace : 'Yvirskriva', + btnReplaceAll : 'Yvirskriva alt', + btnUndo : 'Angra', + noSuggestions : '- Einki uppskot -', + progress : 'Rættstavarin arbeiðir...', + noMispell : 'Rættstavarain liðugur: Eingin feilur funnin', + noChanges : 'Rættstavarain liðugur: Einki orð varð broytt', + oneChange : 'Rættstavarain liðugur: Eitt orð er broytt', + manyChanges : 'Rættstavarain liðugur: %1 orð broytt', + ieSpellDownload : 'Rættstavarin er ikki tøkur à tekstviðgeranum. Vilt tú heinta hann nú?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Vel Smiley', + options : 'Møguleikar fyri Smiley' + }, + + elementsPath : + { + eleLabel : 'Slóð til elementir', + eleTitle : '%1 element' + }, + + numberedlist : 'Talmerktur listi', + bulletedlist : 'Punktmerktur listi', + indent : 'Ãkja reglubrotarinntriv', + outdent : 'Minka reglubrotarinntriv', + + justify : + { + left : 'Vinstrasett', + center : 'Miðsett', + right : 'Høgrasett', + block : 'Javnir tekstkantar' + }, + + blockquote : 'Blockquote', + + clipboard : + { + title : 'Innrita', + cutError : 'Trygdaruppseting alnótskagans forðar tekstviðgeranum à at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).', + copyError : 'Trygdaruppseting alnótskagans forðar tekstviðgeranum à at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).', + pasteMsg : 'Vinarliga koyr tekstin à hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.', + securityMsg : 'Trygdaruppseting alnótskagans forðar tekstviðgeranum à beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur à hesum rútinum.', + pasteArea : 'Avritingarumráði' + }, + + pastefromword : + { + confirmCleanup : 'Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?', + toolbar : 'Innrita frá Word', + title : 'Innrita frá Word', + error : 'Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil' + }, + + pasteText : + { + button : 'Innrita som reinan tekst', + title : 'Innrita som reinan tekst' + }, + + templates : + { + button : 'Skabelónir', + title : 'Innihaldsskabelónir', + options : 'Møguleikar fyri Template', + insertOption : 'Yvirskriva núverandi innihald', + selectPromptMsg : 'Vinarliga vel ta skabelón, ið skal opnast à tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):', + emptyListMsg : '(Ongar skabelónir tøkar)' + }, + + showBlocks : 'VÃs blokkar', + + stylesCombo : + { + label : 'Typografi', + panelTitle : 'Formatterings stÃlir', + panelTitle1 : 'Blokk stÃlir', + panelTitle2 : 'Inline stÃlir', + panelTitle3 : 'Object stÃlir' + }, + + format : + { + label : 'Skriftsnið', + panelTitle : 'Skriftsnið', + + tag_p : 'Vanligt', + tag_pre : 'Sniðgivið', + tag_address : 'Adressa', + tag_h1 : 'Yvirskrift 1', + tag_h2 : 'Yvirskrift 2', + tag_h3 : 'Yvirskrift 3', + tag_h4 : 'Yvirskrift 4', + tag_h5 : 'Yvirskrift 5', + tag_h6 : 'Yvirskrift 6', + tag_div : 'Vanligt (DIV)' + }, + + div : + { + title : 'Ger Div Container', + toolbar : 'Ger Div Container', + cssClassInputLabel : 'Stylesheet Classes', + styleSelectLabel : 'Style', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Language Code', + inlineStyleInputLabel : 'Inline Style', + advisoryTitleInputLabel : 'Advisory Title', + langDirLabel : 'Language Direction', + langDirLTRLabel : 'Vinstru til høgru (LTR)', + langDirRTLLabel : 'Høgru til vinstru (RTL)', + edit : 'Redigera Div', + remove : 'Strika Div' + }, + + iframe : + { + title : 'Møguleikar fyri IFrame', + toolbar : 'IFrame', + noUrl : 'Vinarliga skriva URL til iframe', + scrolling : 'Loyv scrollbars', + border : 'VÃs frame kant' + }, + + font : + { + label : 'Skrift', + voiceLabel : 'Skrift', + panelTitle : 'Skrift' + }, + + fontSize : + { + label : 'Skriftstødd', + voiceLabel : 'Skriftstødd', + panelTitle : 'Skriftstødd' + }, + + colorButton : + { + textColorTitle : 'Tekstlitur', + bgColorTitle : 'Bakgrundslitur', + panelTitle : 'Litir', + auto : 'Automatiskt', + more : 'Fleiri litir...' + }, + + colors : + { + '000' : 'Svart', + '800000' : 'Maroon', + '8B4513' : 'Saðilsbrúnt', + '2F4F4F' : 'Dark Slate Gray', + '008080' : 'Teal', + '000080' : 'Navy', + '4B0082' : 'Indigo', + '696969' : 'Myrkagrátt', + 'B22222' : 'Fire Brick', + 'A52A2A' : 'Brúnt', + 'DAA520' : 'Gullstavur', + '006400' : 'Myrkagrønt', + '40E0D0' : 'Turquoise', + '0000CD' : 'Meðal blátt', + '800080' : 'Purple', + '808080' : 'Grátt', + 'F00' : 'Reytt', + 'FF8C00' : 'Myrkt appelsingult', + 'FFD700' : 'Gull', + '008000' : 'Grønt', + '0FF' : 'Cyan', + '00F' : 'Blátt', + 'EE82EE' : 'Violet', + 'A9A9A9' : 'Døkt grátt', + 'FFA07A' : 'Ljósur laksur', + 'FFA500' : 'Appelsingult', + 'FFFF00' : 'Gult', + '00FF00' : 'Lime', + 'AFEEEE' : 'Pale Turquoise', + 'ADD8E6' : 'Ljósablátt', + 'DDA0DD' : 'Plum', + 'D3D3D3' : 'Ljósagrátt', + 'FFF0F5' : 'Lavender Blush', + 'FAEBD7' : 'Klassiskt hvÃtt', + 'FFFFE0' : 'Ljósagult', + 'F0FFF0' : 'Hunangsdøggur', + 'F0FFFF' : 'Azure', + 'F0F8FF' : 'Alice Blátt', + 'E6E6FA' : 'Lavender', + 'FFF' : 'HvÃtt' + }, + + scayt : + { + title : 'Kanna stavseting, meðan tú skrivar', + opera_title : 'Ikki stuðlað à Opera', + enable : 'Loyv SCAYT', + disable : 'Nokta SCAYT', + about : 'Um SCAYT', + toggle : 'Toggle SCAYT', + options : 'Uppseting', + langs : 'Tungumál', + moreSuggestions : 'Fleiri tilráðingar', + ignore : 'Ignorera', + ignoreAll : 'Ignorera alt', + addWord : 'Legg orð afturat', + emptyDic : 'Heiti á orðabók eigur ikki at vera tómt.', + + optionsTab : 'Uppseting', + allCaps : 'Loyp orð við bert stórum stavum um', + ignoreDomainNames : 'loyp økisnøvn um', + mixedCase : 'Loyp orð við blandaðum smáum og stórum stavum um', + mixedWithDigits : 'Loyp orð við tølum um', + + languagesTab : 'Tungumál', + + dictionariesTab : 'Orðabøkur', + dic_field_name : 'Orðabókanavn', + dic_create : 'Upprætta nýggja', + dic_restore : 'Endurskapa', + dic_delete : 'Strika', + dic_rename : 'Broyt', + dic_info : 'Upprunaliga er brúkara-orðabókin goymd à eini cookie à tÃnum egna kaga. Men hesar eru avmarkaðar à stødd. Tá brúkara-orðabókin veksur seg ov stóra til eina cookie, so er møguligt at goyma hana á ambætara okkara. Fyri at goyma persónligu orðabókina á ambætaranum eigur tú at velja eitt navn til tÃna skuffu. Hevur tú longu goymt eina orðabók, so vinarliga skriva navnið og klikk á knøttin Endurskapa.', + + aboutTab : 'Um' + }, + + about : + { + title : 'Um CKEditor', + dlgTitle : 'Um CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Licens upplýsingar finnast á heimasÃðu okkara:', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'Maksimera', + minimize : 'Minimera', + + fakeobjects : + { + anchor : 'Anchor', + flash : 'Flash Animation', + iframe : 'IFrame', + hiddenfield : 'Fjaldur teigur', + unknown : 'Ãkent Object' + }, + + resize : 'Drag fyri at broyta stødd', + + colordialog : + { + title : 'Vel lit', + options : 'Litmøguleikar', + highlight : 'Framheva', + selected : 'Valdur litur', + clear : 'Strika' + }, + + toolbarCollapse : 'Lat Toolbar aftur', + toolbarExpand : 'VÃs Toolbar', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Tekstkós frá vinstru til høgru', + rtl : 'Tekstkós frá høgru til vinstru' + }, + + docprops : + { + label : 'Eginleikar fyri dokument', + title : 'Eginleikar fyri dokument', + design : 'Design', // MISSING + meta : 'META-upplýsingar', + chooseColor : 'Vel', + other : '<annað>', + docTitle : 'SÃðuheiti', + charset : 'Teknsett koda', + charsetOther : 'Onnur teknsett koda', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Miðeuropa', + charsetCT : 'Kinesiskt traditionelt (Big5)', + charsetCR : 'Cyrilliskt', + charsetGR : 'Grikst', + charsetJP : 'Japanskt', + charsetKR : 'Koreanskt', + charsetTR : 'Turkiskt', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Vestureuropa', + docType : 'Dokumentslag yvirskrift', + docTypeOther : 'Annað dokumentslag yvirskrift', + xhtmlDec : 'Viðfest XHTML deklaratiónir', + bgColor : 'Bakgrundslitur', + bgImage : 'Leið til bakgrundsmynd (URL)', + bgFixed : 'Læst bakgrund (rullar ikki)', + txtColor : 'Tekstlitur', + margin : 'SÃðubreddar', + marginTop : 'Ovast', + marginLeft : 'Vinstra', + marginRight : 'Høgra', + marginBottom : 'Niðast', + metaKeywords : 'Dokument index lyklaorð (sundurbýtt við komma)', + metaDescription : 'Dokumentlýsing', + metaAuthor : 'Høvundur', + metaCopyright : 'Upphavsrættindi', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/fr-ca.js b/_source/lang/fr-ca.js new file mode 100644 index 0000000..3fadb85 --- /dev/null +++ b/_source/lang/fr-ca.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Canadian French language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['fr-ca'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Source', + newPage : 'Nouvelle page', + save : 'Sauvegarder', + preview : 'Previsualiser', + cut : 'Couper', + copy : 'Copier', + paste : 'Coller', + print : 'Imprimer', + underline : 'Souligné', + bold : 'Gras', + italic : 'Italique', + selectAll : 'Tout sélectionner', + removeFormat : 'Supprimer le formatage', + strike : 'Barrer', + subscript : 'Indice', + superscript : 'Exposant', + horizontalrule : 'Insérer un séparateur', + pagebreak : 'Insérer un saut de page', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Supprimer le lien', + undo : 'Annuler', + redo : 'Refaire', + + // Common messages and labels. + common : + { + browseServer : 'Parcourir le serveur', + url : 'URL', + protocol : 'Protocole', + upload : 'Télécharger', + uploadSubmit : 'Envoyer sur le serveur', + image : 'Image', + flash : 'Animation Flash', + form : 'Formulaire', + checkbox : 'Case à cocher', + radio : 'Bouton radio', + textField : 'Champ texte', + textarea : 'Zone de texte', + hiddenField : 'Champ caché', + button : 'Bouton', + select : 'Champ de sélection', + imageButton : 'Bouton image', + notSet : '<Par défaut>', + id : 'Id', + name : 'Nom', + langDir : 'Sens d\'écriture', + langDirLtr : 'De gauche à droite (LTR)', + langDirRtl : 'De droite à gauche (RTL)', + langCode : 'Code langue', + longDescr : 'URL de description longue', + cssClass : 'Classes de feuilles de style', + advisoryTitle : 'Titre', + cssStyle : 'Style', + ok : 'OK', + cancel : 'Annuler', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'Général', + advancedTab : 'Avancée', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Largeur', + height : 'Hauteur', + align : 'Alignement', + alignLeft : 'Gauche', + alignRight : 'Droite', + alignCenter : 'Centré', + alignTop : 'Haut', + alignMiddle : 'Milieu', + alignBottom : 'Bas', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Insérer un caractère spécial', + title : 'Insérer un caractère spécial', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Insérer/modifier le lien', + other : '<other>', // MISSING + menu : 'Modifier le lien', + title : 'Propriétés du lien', + info : 'Informations sur le lien', + target : 'Destination', + upload : 'Télécharger', + advanced : 'Avancée', + type : 'Type de lien', + toUrl : 'URL', // MISSING + toAnchor : 'Ancre dans cette page', + toEmail : 'E-Mail', + targetFrame : '<Cadre>', + targetPopup : '<fenêtre popup>', + targetFrameName : 'Nom du cadre de destination', + targetPopupName : 'Nom de la fenêtre popup', + popupFeatures : 'Caractéristiques de la fenêtre popup', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Barre d\'état', + popupLocationBar: 'Barre d\'adresses', + popupToolbar : 'Barre d\'outils', + popupMenuBar : 'Barre de menu', + popupFullScreen : 'Plein écran (IE)', + popupScrollBars : 'Barres de défilement', + popupDependent : 'Dépendante (Netscape)', + popupLeft : 'Position à partir de la gauche', + popupTop : 'Position à partir du haut', + id : 'Id', // MISSING + langDir : 'Sens d\'écriture', + langDirLTR : 'De gauche à droite (LTR)', + langDirRTL : 'De droite à gauche (RTL)', + acccessKey : 'Ãquivalent clavier', + name : 'Nom', + langCode : 'Sens d\'écriture', + tabIndex : 'Ordre de tabulation', + advisoryTitle : 'Titre', + advisoryContentType : 'Type de contenu', + cssClasses : 'Classes de feuilles de style', + charset : 'Encodage de caractère', + styles : 'Style', + rel : 'Relationship', // MISSING + selectAnchor : 'Sélectionner une ancre', + anchorName : 'Par nom', + anchorId : 'Par id', + emailAddress : 'Adresse E-Mail', + emailSubject : 'Sujet du message', + emailBody : 'Corps du message', + noAnchors : '(Pas d\'ancre disponible dans le document)', + noUrl : 'Veuillez saisir l\'URL', + noEmail : 'Veuillez saisir l\'adresse e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Insérer/modifier l\'ancre', + menu : 'Propriétés de l\'ancre', + title : 'Propriétés de l\'ancre', + name : 'Nom de l\'ancre', + errorName : 'Veuillez saisir le nom de l\'ancre', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Chercher et Remplacer', + find : 'Chercher', + replace : 'Remplacer', + findWhat : 'Rechercher:', + replaceWith : 'Remplacer par:', + notFoundMsg : 'Le texte indiqué est introuvable.', + matchCase : 'Respecter la casse', + matchWord : 'Mot entier', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Tout remplacer', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tableau', + title : 'Propriétés du tableau', + menu : 'Propriétés du tableau', + deleteTable : 'Supprimer le tableau', + rows : 'Lignes', + columns : 'Colonnes', + border : 'Taille de la bordure', + widthPx : 'pixels', + widthPc : 'pourcentage', + widthUnit : 'width unit', // MISSING + cellSpace : 'Espacement', + cellPad : 'Contour', + caption : 'Titre', + summary : 'Résumé', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cellule', + insertBefore : 'Insérer une cellule avant', + insertAfter : 'Insérer une cellule après', + deleteCell : 'Supprimer des cellules', + merge : 'Fusionner les cellules', + mergeRight : 'Fusionner à droite', + mergeDown : 'Fusionner en bas', + splitHorizontal : 'Scinder la cellule horizontalement', + splitVertical : 'Scinder la cellule verticalement', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Ligne', + insertBefore : 'Insérer une ligne avant', + insertAfter : 'Insérer une ligne après', + deleteRow : 'Supprimer des lignes' + }, + + column : + { + menu : 'Colonne', + insertBefore : 'Insérer une colonne avant', + insertAfter : 'Insérer une colonne après', + deleteColumn : 'Supprimer des colonnes' + } + }, + + // Button Dialog. + button : + { + title : 'Propriétés du bouton', + text : 'Texte (Valeur)', + type : 'Type', + typeBtn : 'Bouton', + typeSbm : 'Soumettre', + typeRst : 'Réinitialiser' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Propriétés de la case à cocher', + radioTitle : 'Propriétés du bouton radio', + value : 'Valeur', + selected : 'Sélectionné' + }, + + // Form Dialog. + form : + { + title : 'Propriétés du formulaire', + menu : 'Propriétés du formulaire', + action : 'Action', + method : 'Méthode', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Propriétés de la liste/du menu', + selectInfo : 'Info', + opAvail : 'Options disponibles', + value : 'Valeur', + size : 'Taille', + lines : 'lignes', + chkMulti : 'Sélection multiple', + opText : 'Texte', + opValue : 'Valeur', + btnAdd : 'Ajouter', + btnModify : 'Modifier', + btnUp : 'Monter', + btnDown : 'Descendre', + btnSetValue : 'Valeur sélectionnée', + btnDelete : 'Supprimer' + }, + + // Textarea Dialog. + textarea : + { + title : 'Propriétés de la zone de texte', + cols : 'Colonnes', + rows : 'Lignes' + }, + + // Text Field Dialog. + textfield : + { + title : 'Propriétés du champ texte', + name : 'Nom', + value : 'Valeur', + charWidth : 'Largeur en caractères', + maxChars : 'Nombre maximum de caractères', + type : 'Type', + typeText : 'Texte', + typePass : 'Mot de passe' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Propriétés du champ caché', + name : 'Nom', + value : 'Valeur' + }, + + // Image Dialog. + image : + { + title : 'Propriétés de l\'image', + titleButton : 'Propriétés du bouton image', + menu : 'Propriétés de l\'image', + infoTab : 'Informations sur l\'image', + btnUpload : 'Envoyer sur le serveur', + upload : 'Télécharger', + alt : 'Texte de remplacement', + lockRatio : 'Garder les proportions', + resetSize : 'Taille originale', + border : 'Bordure', + hSpace : 'Espacement horizontal', + vSpace : 'Espacement vertical', + alertUrl : 'Veuillez saisir l\'URL de l\'image', + linkTab : 'Lien', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Propriétés de l\'animation Flash', + propertiesTab : 'Properties', // MISSING + title : 'Propriétés de l\'animation Flash', + chkPlay : 'Lecture automatique', + chkLoop : 'Boucle', + chkMenu : 'Activer le menu Flash', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Affichage', + scaleAll : 'Par défaut (tout montrer)', + scaleNoBorder : 'Sans bordure', + scaleFit : 'Ajuster aux dimensions', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs Bas', + alignAbsMiddle : 'Abs Milieu', + alignBaseline : 'Bas du texte', + alignTextTop : 'Haut du texte', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Couleur de fond', + hSpace : 'Espacement horizontal', + vSpace : 'Espacement vertical', + validateSrc : 'Veuillez saisir l\'URL', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Orthographe', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Pas dans le dictionnaire', + changeTo : 'Changer en', + btnIgnore : 'Ignorer', + btnIgnoreAll : 'Ignorer tout', + btnReplace : 'Remplacer', + btnReplaceAll : 'Remplacer tout', + btnUndo : 'Annuler', + noSuggestions : '- Pas de suggestion -', + progress : 'Vérification d\'orthographe en cours...', + noMispell : 'Vérification d\'orthographe terminée: pas d\'erreur trouvée', + noChanges : 'Vérification d\'orthographe terminée: Pas de modifications', + oneChange : 'Vérification d\'orthographe terminée: Un mot modifié', + manyChanges : 'Vérification d\'orthographe terminée: %1 mots modifiés', + ieSpellDownload : 'Le Correcteur d\'orthographe n\'est pas installé. Souhaitez-vous le télécharger maintenant?' + }, + + smiley : + { + toolbar : 'Emoticon', + title : 'Insérer un Emoticon', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Liste numérotée', + bulletedlist : 'Liste à puces', + indent : 'Augmenter le retrait', + outdent : 'Diminuer le retrait', + + justify : + { + left : 'Aligner à gauche', + center : 'Centrer', + right : 'Aligner à Droite', + block : 'Texte justifié' + }, + + blockquote : 'Citation', + + clipboard : + { + title : 'Coller', + cutError : 'Les paramètres de sécurité de votre navigateur empêchent l\'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).', + copyError : 'Les paramètres de sécurité de votre navigateur empêchent l\'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).', + pasteMsg : 'Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.', + securityMsg : 'A cause des paramètres de sécurité de votre navigateur, l\'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Coller en tant que Word (formaté)', + title : 'Coller en tant que Word (formaté)', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Coller comme texte', + title : 'Coller comme texte' + }, + + templates : + { + button : 'Modèles', + title : 'Modèles de contenu', + options : 'Template Options', // MISSING + insertOption : 'Remplacer tout le contenu actuel', + selectPromptMsg : 'Sélectionner le modèle à ouvrir dans l\'éditeur<br>(le contenu actuel sera remplacé):', + emptyListMsg : '(Aucun modèle disponible)' + }, + + showBlocks : 'Afficher les blocs', + + stylesCombo : + { + label : 'Style', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Format', + panelTitle : 'Format', + + tag_p : 'Normal', + tag_pre : 'Formaté', + tag_address : 'Adresse', + tag_h1 : 'En-tête 1', + tag_h2 : 'En-tête 2', + tag_h3 : 'En-tête 3', + tag_h4 : 'En-tête 4', + tag_h5 : 'En-tête 5', + tag_h6 : 'En-tête 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Police', + voiceLabel : 'Font', // MISSING + panelTitle : 'Police' + }, + + fontSize : + { + label : 'Taille', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Taille' + }, + + colorButton : + { + textColorTitle : 'Couleur de caractère', + bgColorTitle : 'Couleur de fond', + panelTitle : 'Colors', // MISSING + auto : 'Automatique', + more : 'Plus de couleurs...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Propriétés du document', + title : 'Propriétés du document', + design : 'Design', // MISSING + meta : 'Méta-Données', + chooseColor : 'Choose', // MISSING + other : '<other>', + docTitle : 'Titre de la page', + charset : 'Encodage de caractère', + charsetOther : 'Autre encodage de caractère', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Europe Centrale', + charsetCT : 'Chinois Traditionnel (Big5)', + charsetCR : 'Cyrillique', + charsetGR : 'Grecque', + charsetJP : 'Japonais', + charsetKR : 'Coréen', + charsetTR : 'Turcque', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Occidental', + docType : 'Type de document', + docTypeOther : 'Autre type de document', + xhtmlDec : 'Inclure les déclarations XHTML', + bgColor : 'Couleur de fond', + bgImage : 'Image de fond', + bgFixed : 'Image fixe sans défilement', + txtColor : 'Couleur de caractère', + margin : 'Marges', + marginTop : 'Haut', + marginLeft : 'Gauche', + marginRight : 'Droite', + marginBottom : 'Bas', + metaKeywords : 'Mots-clés (séparés par des virgules)', + metaDescription : 'Description', + metaAuthor : 'Auteur', + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/fr.js b/_source/lang/fr.js new file mode 100644 index 0000000..5cfec3a --- /dev/null +++ b/_source/lang/fr.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * French language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['fr'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Ãditeur de Texte Enrichi, %1, appuyez sur ALT-0 pour l\'aide.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Ãditeur de Texte Enrichi', + + // Toolbar buttons without dialogs. + source : 'Source', + newPage : 'Nouvelle page', + save : 'Enregistrer', + preview : 'Aperçu', + cut : 'Couper', + copy : 'Copier', + paste : 'Coller', + print : 'Imprimer', + underline : 'Souligné', + bold : 'Gras', + italic : 'Italique', + selectAll : 'Tout sélectionner', + removeFormat : 'Supprimer la mise en forme', + strike : 'Barré', + subscript : 'Indice', + superscript : 'Exposant', + horizontalrule : 'Ligne horizontale', + pagebreak : 'Saut de page', + pagebreakAlt : 'Saut de page', + unlink : 'Supprimer le lien', + undo : 'Annuler', + redo : 'Rétablir', + + // Common messages and labels. + common : + { + browseServer : 'Explorer le serveur', + url : 'URL', + protocol : 'Protocole', + upload : 'Envoyer', + uploadSubmit : 'Envoyer sur le serveur', + image : 'Image', + flash : 'Flash', + form : 'Formulaire', + checkbox : 'Case à cocher', + radio : 'Bouton Radio', + textField : 'Champ texte', + textarea : 'Zone de texte', + hiddenField : 'Champ caché', + button : 'Bouton', + select : 'Liste déroulante', + imageButton : 'Bouton image', + notSet : '<non défini>', + id : 'Id', + name : 'Nom', + langDir : 'Sens d\'écriture', + langDirLtr : 'Gauche à droite (LTR)', + langDirRtl : 'Droite à gauche (RTL)', + langCode : 'Code de langue', + longDescr : 'URL de description longue (longdesc => malvoyant)', + cssClass : 'Classe CSS', + advisoryTitle : 'Description (title)', + cssStyle : 'Style', + ok : 'OK', + cancel : 'Annuler', + close : 'Fermer', + preview : 'Aperçu', + generalTab : 'Général', + advancedTab : 'Avancé', + validateNumberFailed : 'Cette valeur n\'est pas un nombre.', + confirmNewPage : 'Les changements non sauvegardés seront perdus. Ãtes-vous sûr de vouloir charger une nouvelle page?', + confirmCancel : 'Certaines options ont été modifiées. Ãtes-vous sûr de vouloir fermer?', + options : 'Options', + target : 'Cible (Target)', + targetNew : 'Nouvelle fenêtre (_blank)', + targetTop : 'Fenêtre supérieure (_top)', + targetSelf : 'Même fenêtre (_self)', + targetParent : 'Fenêtre parent (_parent)', + langDirLTR : 'Gauche à Droite (LTR)', + langDirRTL : 'Droite à Gauche (RTL)', + styles : 'Style', + cssClasses : 'Classes de style', + width : 'Largeur', + height : 'Hauteur', + align : 'Alignement', + alignLeft : 'Gauche', + alignRight : 'Droite', + alignCenter : 'Centré', + alignTop : 'Haut', + alignMiddle : 'Milieu', + alignBottom : 'Bas', + invalidHeight : 'La hauteur doit être un nombre.', + invalidWidth : 'La largeur doit être un nombre.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, Indisponible</span>' + }, + + contextmenu : + { + options : 'Options du menu contextuel' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Insérer un caractère spécial', + title : 'Sélectionnez un caractère', + options : 'Options des caractères spéciaux' + }, + + // Link dialog. + link : + { + toolbar : 'Lien', + other : '<autre>', + menu : 'Editer le lien', + title : 'Lien', + info : 'Infos sur le lien', + target : 'Cible', + upload : 'Envoyer', + advanced : 'Avancé', + type : 'Type de lien', + toUrl : 'URL', + toAnchor : 'Transformer le lien en ancre dans le texte', + toEmail : 'E-mail', + targetFrame : '<cadre>', + targetPopup : '<fenêtre popup>', + targetFrameName : 'Nom du Cadre destination', + targetPopupName : 'Nom de la fenêtre popup', + popupFeatures : 'Options de la fenêtre popup', + popupResizable : 'Redimensionnable', + popupStatusBar : 'Barre de status', + popupLocationBar: 'Barre d\'adresse', + popupToolbar : 'Barre d\'outils', + popupMenuBar : 'Barre de menu', + popupFullScreen : 'Plein écran (IE)', + popupScrollBars : 'Barres de défilement', + popupDependent : 'Dépendante (Netscape)', + popupLeft : 'Position gauche', + popupTop : 'Position haute', + id : 'Id', + langDir : 'Sens d\'écriture', + langDirLTR : 'Gauche à droite', + langDirRTL : 'Droite à gauche', + acccessKey : 'Touche d\'accessibilité', + name : 'Nom', + langCode : 'Code de langue', + tabIndex : 'Index de tabulation', + advisoryTitle : 'Description (title)', + advisoryContentType : 'Type de contenu (ex: text/html)', + cssClasses : 'Classe CSS', + charset : 'Charset de la cible', + styles : 'Style', + rel : 'Relation', + selectAnchor : 'Sélectionner l\'ancre', + anchorName : 'Par nom d\'ancre', + anchorId : 'Par ID d\'élément', + emailAddress : 'Adresse E-Mail', + emailSubject : 'Sujet du message', + emailBody : 'Corps du message', + noAnchors : '(Aucune ancre disponible dans ce document)', + noUrl : 'Veuillez entrer l\'adresse du lien', + noEmail : 'Veuillez entrer l\'adresse e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Ancre', + menu : 'Editer l\'ancre', + title : 'Propriétés de l\'ancre', + name : 'Nom de l\'ancre', + errorName : 'Veuillez entrer le nom de l\'ancre.', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Propriétés de la liste numérotée', + bulletedTitle : 'Propriétés de la liste à puces', + type : 'Type', + start : 'Début', + validateStartNumber :'Le premier élément de la liste doit être un nombre entier.', + circle : 'Cercle', + disc : 'Disque', + square : 'Carré', + none : 'Aucun', + notset : '<Non défini>', + armenian : 'Numération arménienne', + georgian : 'Numération géorgienne (an, ban, gan, etc.)', + lowerRoman : 'Nombres romains minuscules (i, ii, iii, iv, v, etc.)', + upperRoman : 'Nombres romains majuscules (I, II, III, IV, V, etc.)', + lowerAlpha : 'Alphabétique minuscules (a, b, c, d, e, etc.)', + upperAlpha : 'Alphabétique majuscules (A, B, C, D, E, etc.)', + lowerGreek : 'Grec minuscule (alpha, beta, gamma, etc.)', + decimal : 'Décimal (1, 2, 3, etc.)', + decimalLeadingZero : 'Décimal précédé par un 0 (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Trouver et remplacer', + find : 'Trouver', + replace : 'Remplacer', + findWhat : 'Expression à trouver: ', + replaceWith : 'Remplacer par: ', + notFoundMsg : 'Le texte spécifié ne peut être trouvé.', + matchCase : 'Respecter la casse', + matchWord : 'Mot entier uniquement', + matchCyclic : 'Boucler', + replaceAll : 'Remplacer tout', + replaceSuccessMsg : '%1 occurrence(s) replacée(s).' + }, + + // Table Dialog + table : + { + toolbar : 'Tableau', + title : 'Propriétés du tableau', + menu : 'Propriétés du tableau', + deleteTable : 'Supprimer le tableau', + rows : 'Lignes', + columns : 'Colonnes', + border : 'Taille de la bordure', + widthPx : 'pixels', + widthPc : '% pourcents', + widthUnit : 'unité de largeur', + cellSpace : 'Espacement des cellules', + cellPad : 'Marge interne des cellules', + caption : 'Titre du tableau', + summary : 'Résumé (description)', + headers : 'En-Têtes', + headersNone : 'Aucunes', + headersColumn : 'Première colonne', + headersRow : 'Première ligne', + headersBoth : 'Les deux', + invalidRows : 'Le nombre de lignes doit être supérieur à 0.', + invalidCols : 'Le nombre de colonnes doit être supérieur à 0.', + invalidBorder : 'La taille de la bordure doit être un nombre.', + invalidWidth : 'La largeur du tableau doit être un nombre.', + invalidHeight : 'La hauteur du tableau doit être un nombre.', + invalidCellSpacing : 'L\'espacement des cellules doit être un nombre positif.', + invalidCellPadding : 'La marge intérieure des cellules doit être un nombre positif.', + + cell : + { + menu : 'Cellule', + insertBefore : 'Insérer une cellule avant', + insertAfter : 'Insérer une cellule après', + deleteCell : 'Supprimer les cellules', + merge : 'Fusionner les cellules', + mergeRight : 'Fusionner à droite', + mergeDown : 'Fusionner en bas', + splitHorizontal : 'Fractionner horizontalement', + splitVertical : 'Fractionner verticalement', + title : 'Propriétés de la cellule', + cellType : 'Type de cellule', + rowSpan : 'Fusion de lignes', + colSpan : 'Fusion de colonnes', + wordWrap : 'Césure', + hAlign : 'Alignement Horizontal', + vAlign : 'Alignement Vertical', + alignBaseline : 'Bas du texte', + bgColor : 'Couleur d\'arrière-plan', + borderColor : 'Couleur de Bordure', + data : 'Données', + header : 'Entête', + yes : 'Oui', + no : 'Non', + invalidWidth : 'La Largeur de Cellule doit être un nombre.', + invalidHeight : 'La Hauteur de Cellule doit être un nombre.', + invalidRowSpan : 'La fusion de lignes doit être un nombre entier.', + invalidColSpan : 'La fusion de colonnes doit être un nombre entier.', + chooseColor : 'Choisissez' + }, + + row : + { + menu : 'Ligne', + insertBefore : 'Insérer une ligne avant', + insertAfter : 'Insérer une ligne après', + deleteRow : 'Supprimer les lignes' + }, + + column : + { + menu : 'Colonnes', + insertBefore : 'Insérer une colonne avant', + insertAfter : 'Insérer une colonne après', + deleteColumn : 'Supprimer les colonnes' + } + }, + + // Button Dialog. + button : + { + title : 'Propriétés du bouton', + text : 'Texte (Value)', + type : 'Type', + typeBtn : 'Bouton', + typeSbm : 'Validation (submit)', + typeRst : 'Remise à zéro' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Propriétés de la case à cocher', + radioTitle : 'Propriétés du bouton Radio', + value : 'Valeur', + selected : 'Sélectionné' + }, + + // Form Dialog. + form : + { + title : 'Propriétés du formulaire', + menu : 'Propriétés du formulaire', + action : 'Action', + method : 'Méthode', + encoding : 'Encodage' + }, + + // Select Field Dialog. + select : + { + title : 'Propriétés du menu déroulant', + selectInfo : 'Informations sur le menu déroulant', + opAvail : 'Options disponibles', + value : 'Valeur', + size : 'Taille', + lines : 'Lignes', + chkMulti : 'Permettre les sélections multiples', + opText : 'Texte', + opValue : 'Valeur', + btnAdd : 'Ajouter', + btnModify : 'Modifier', + btnUp : 'Haut', + btnDown : 'Bas', + btnSetValue : 'Définir comme valeur sélectionnée', + btnDelete : 'Supprimer' + }, + + // Textarea Dialog. + textarea : + { + title : 'Propriétés de la zone de texte', + cols : 'Colonnes', + rows : 'Lignes' + }, + + // Text Field Dialog. + textfield : + { + title : 'Propriétés du champ texte', + name : 'Nom', + value : 'Valeur', + charWidth : 'Taille des caractères', + maxChars : 'Nombre maximum de caractères', + type : 'Type', + typeText : 'Texte', + typePass : 'Mot de passe' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Propriétés du champ caché', + name : 'Nom', + value : 'Valeur' + }, + + // Image Dialog. + image : + { + title : 'Propriétés de l\'image', + titleButton : 'Propriétés du bouton image', + menu : 'Propriétés de l\'image', + infoTab : 'Informations sur l\'image', + btnUpload : 'Envoyer sur le serveur', + upload : 'Envoyer', + alt : 'Texte de remplacement', + lockRatio : 'Conserver les proportions', + resetSize : 'Taille d\'origine', + border : 'Bordure', + hSpace : 'Espacement horizontal', + vSpace : 'Espacement vertical', + alertUrl : 'Veuillez entrer l\'adresse de l\'image', + linkTab : 'Lien', + button2Img : 'Voulez-vous transformer le bouton image sélectionné en simple image?', + img2Button : 'Voulez-vous transformer l\'image en bouton image?', + urlMissing : 'L\'adresse source de l\'image est manquante.', + validateBorder : 'Bordure doit être un entier.', + validateHSpace : 'HSpace doit être un entier.', + validateVSpace : 'VSpace doit être un entier.' + }, + + // Flash Dialog + flash : + { + properties : 'Propriétés du Flash', + propertiesTab : 'Propriétés', + title : 'Propriétés du Flash', + chkPlay : 'Jouer automatiquement', + chkLoop : 'Boucle', + chkMenu : 'Activer le menu Flash', + chkFull : 'Permettre le plein écran', + scale : 'Echelle', + scaleAll : 'Afficher tout', + scaleNoBorder : 'Pas de bordure', + scaleFit : 'Taille d\'origine', + access : 'Accès aux scripts', + accessAlways : 'Toujours', + accessSameDomain: 'Même domaine', + accessNever : 'Jamais', + alignAbsBottom : 'Bas absolu', + alignAbsMiddle : 'Milieu absolu', + alignBaseline : 'Bas du texte', + alignTextTop : 'Haut du texte', + quality : 'Qualité', + qualityBest : 'Meilleure', + qualityHigh : 'Haute', + qualityAutoHigh : 'Haute Auto', + qualityMedium : 'Moyenne', + qualityAutoLow : 'Basse Auto', + qualityLow : 'Basse', + windowModeWindow: 'Fenêtre', + windowModeOpaque: 'Opaque', + windowModeTransparent : 'Transparent', + windowMode : 'Mode fenêtre', + flashvars : 'Variables du Flash', + bgcolor : 'Couleur d\'arrière-plan', + hSpace : 'Espacement horizontal', + vSpace : 'Espacement vertical', + validateSrc : 'L\'adresse ne doit pas être vide.', + validateHSpace : 'L\'espacement horizontal doit être un nombre.', + validateVSpace : 'L\'espacement vertical doit être un nombre.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Vérifier l\'orthographe', + title : 'Vérifier l\'orthographe', + notAvailable : 'Désolé, le service est indisponible actuellement.', + errorLoading : 'Erreur du chargement du service depuis l\'hôte : %s.', + notInDic : 'N\'existe pas dans le dictionnaire.', + changeTo : 'Modifier pour', + btnIgnore : 'Ignorer', + btnIgnoreAll : 'Ignorer tout', + btnReplace : 'Remplacer', + btnReplaceAll : 'Remplacer tout', + btnUndo : 'Annuler', + noSuggestions : '- Aucune suggestion -', + progress : 'Vérification de l\'orthographe en cours...', + noMispell : 'Vérification de l\'orthographe terminée : aucune erreur trouvée.', + noChanges : 'Vérification de l\'orthographe terminée : Aucun mot corrigé.', + oneChange : 'Vérification de l\'orthographe terminée : Un seul mot corrigé.', + manyChanges : 'Vérification de l\'orthographe terminée : %1 mots corrigés.', + ieSpellDownload : 'La vérification d\'orthographe n\'est pas installée. Voulez-vous la télécharger maintenant?' + }, + + smiley : + { + toolbar : 'Ãmoticones', + title : 'Insérer un émoticone', + options : 'Options des émoticones' + }, + + elementsPath : + { + eleLabel : 'Elements path', + eleTitle : '%1 éléments' + }, + + numberedlist : 'Insérer/Supprimer la liste numérotée', + bulletedlist : 'Insérer/Supprimer la liste à puces', + indent : 'Augmenter le retrait (tabulation)', + outdent : 'Diminuer le retrait (tabulation)', + + justify : + { + left : 'Aligner à gauche', + center : 'Centrer', + right : 'Aligner à droite', + block : 'Justifier' + }, + + blockquote : 'Citation', + + clipboard : + { + title : 'Coller', + cutError : 'Les paramètres de sécurité de votre navigateur ne permettent pas à l\'éditeur d\'exécuter automatiquement l\'opération "couper". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).', + copyError : 'Les paramètres de sécurité de votre navigateur ne permettent pas à l\'éditeur d\'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).', + pasteMsg : 'Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.', + securityMsg : 'A cause des paramètres de sécurité de votre navigateur, l\'éditeur n\'est pas en mesure d\'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.', + pasteArea : 'Coller la zone' + }, + + pastefromword : + { + confirmCleanup : 'Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?', + toolbar : 'Coller depuis Word', + title : 'Coller depuis Word', + error : 'Il n\'a pas été possible de nettoyer les données collées à la suite d\'une erreur interne.' + }, + + pasteText : + { + button : 'Coller comme texte sans mise en forme', + title : 'Coller comme texte sans mise en forme' + }, + + templates : + { + button : 'Modèles', + title : 'Contenu des modèles', + options : 'Options des modèles', + insertOption : 'Remplacer le contenu actuel', + selectPromptMsg : 'Veuillez sélectionner le modèle pour l\'ouvrir dans l\'éditeur', + emptyListMsg : '(Aucun modèle disponible)' + }, + + showBlocks : 'Afficher les blocs', + + stylesCombo : + { + label : 'Styles', + panelTitle : 'Styles de mise en page', + panelTitle1 : 'Styles de blocs', + panelTitle2 : 'Styles en ligne', + panelTitle3 : 'Styles d\'objet' + }, + + format : + { + label : 'Format', + panelTitle : 'Format de paragraphe', + + tag_p : 'Normal', + tag_pre : 'Formaté', + tag_address : 'Adresse', + tag_h1 : 'Titre 1', + tag_h2 : 'Titre 2', + tag_h3 : 'Titre 3', + tag_h4 : 'Titre 4', + tag_h5 : 'Titre 5', + tag_h6 : 'Titre 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Créer un container DIV', + toolbar : 'Créer un container DIV', + cssClassInputLabel : 'Classe CSS', + styleSelectLabel : 'Style', + IdInputLabel : 'Id', + languageCodeInputLabel : 'Code de langue', + inlineStyleInputLabel : 'Style en ligne', + advisoryTitleInputLabel : 'Advisory Title', + langDirLabel : 'Sens d\'écriture', + langDirLTRLabel : 'Gauche à droite (LTR)', + langDirRTLLabel : 'Droite à gauche (RTL)', + edit : 'Ãditer la DIV', + remove : 'Enlever la DIV' + }, + + iframe : + { + title : 'Propriétés de la IFrame', + toolbar : 'IFrame', + noUrl : 'Veuillez entrer l\'adresse du lien de la IFrame', + scrolling : 'Permettre à la barre de défilement', + border : 'Afficher une bordure de la IFrame' + }, + + font : + { + label : 'Police', + voiceLabel : 'Police', + panelTitle : 'Style de police' + }, + + fontSize : + { + label : 'Taille', + voiceLabel : 'Taille de police', + panelTitle : 'Taille de police' + }, + + colorButton : + { + textColorTitle : 'Couleur de texte', + bgColorTitle : 'Couleur d\'arrière plan', + panelTitle : 'Couleurs', + auto : 'Automatique', + more : 'Plus de couleurs...' + }, + + colors : + { + '000' : 'Noir', + '800000' : 'Marron', + '8B4513' : 'Brun moyen', + '2F4F4F' : 'Vert sombre', + '008080' : 'Canard', + '000080' : 'Bleu marine', + '4B0082' : 'Indigo', + '696969' : 'Gris foncé', + 'B22222' : 'Rouge brique', + 'A52A2A' : 'Brun', + 'DAA520' : 'Or terni', + '006400' : 'Vert foncé', + '40E0D0' : 'Turquoise', + '0000CD' : 'Bleu royal', + '800080' : 'Pourpre', + '808080' : 'Gris', + 'F00' : 'Rouge', + 'FF8C00' : 'Orange foncé', + 'FFD700' : 'Or', + '008000' : 'Vert', + '0FF' : 'Cyan', + '00F' : 'Bleu', + 'EE82EE' : 'Violet', + 'A9A9A9' : 'Gris moyen', + 'FFA07A' : 'Saumon', + 'FFA500' : 'Orange', + 'FFFF00' : 'Jaune', + '00FF00' : 'Lime', + 'AFEEEE' : 'Turquoise clair', + 'ADD8E6' : 'Bleu clair', + 'DDA0DD' : 'Prune', + 'D3D3D3' : 'Gris clair', + 'FFF0F5' : 'Fard Lavande', + 'FAEBD7' : 'Blanc antique', + 'FFFFE0' : 'Jaune clair', + 'F0FFF0' : 'Honeydew', + 'F0FFFF' : 'Azur', + 'F0F8FF' : 'Bleu Alice', + 'E6E6FA' : 'Lavande', + 'FFF' : 'Blanc' + }, + + scayt : + { + title : 'Vérification de l\'Orthographe en Cours de Frappe (SCAYT)', + opera_title : 'Non supporté par Opera', + enable : 'Activer SCAYT', + disable : 'Désactiver SCAYT', + about : 'A propos de SCAYT', + toggle : 'Activer/Désactiver SCAYT', + options : 'Options', + langs : 'Langues', + moreSuggestions : 'Plus de suggestions', + ignore : 'Ignorer', + ignoreAll : 'Ignorer Tout', + addWord : 'Ajouter le mot', + emptyDic : 'Le nom du dictionnaire ne devrait pas être vide.', + + optionsTab : 'Options', + allCaps : 'Ignorer les mots entierement en majuscules', + ignoreDomainNames : 'Ignorer les noms de domaines', + mixedCase : 'Ignorer les mots à casse multiple', + mixedWithDigits : 'Ignorer les mots contenant des chiffres', + + languagesTab : 'Langues', + + dictionariesTab : 'Dictionnaires', + dic_field_name : 'Nom du dictionnaire', + dic_create : 'Créer', + dic_restore : 'Restaurer', + dic_delete : 'Effacer', + dic_rename : 'Renommer', + dic_info : 'Initiallement, le dictionnaire de l\'utilisateur est stocké dans un cookie. Cependant, les cookies sont limités en taille. Quand le dictionnaire atteint une taille qu\'il n\'est plus possible de stocker dans un cookie, il peut alors être stocké sur nos serveurs. Afin de stocker votre dictionnaire personnel sur nos serveurs, vous devez spécifier un nom pour ce dictionnaire. Si vous avez déjà un dictionnaire stocké, merci de taper son nom puis cliquer sur Restaurer pour le récupérer.', + + aboutTab : 'à propos de' + }, + + about : + { + title : 'A propos de CKEditor', + dlgTitle : 'A propos de CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Pour les informations de licence, veuillez visiter notre site web:', + copy : 'Copyright © $1. Tous droits réservés.' + }, + + maximize : 'Agrandir', + minimize : 'Minimiser', + + fakeobjects : + { + anchor : 'Ancre', + flash : 'Animation Flash', + iframe : 'IFrame', + hiddenfield : 'Champ caché', + unknown : 'Objet inconnu' + }, + + resize : 'Déplacer pour modifier la taille', + + colordialog : + { + title : 'Choisir une couleur', + options : 'Option des couleurs', + highlight : 'Détails', + selected : 'Couleur choisie', + clear : 'Effacer' + }, + + toolbarCollapse : 'Enrouler la barre d\'outils', + toolbarExpand : 'Dérouler la barre d\'outils', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Direction du texte de la gauche vers la droite', + rtl : 'Direction du texte de la droite vers la gauche' + }, + + docprops : + { + label : 'Propriétés du document', + title : 'Propriétés du document', + design : 'Design', // MISSING + meta : 'Métadonnées', + chooseColor : 'Choisissez', + other : '<autre>', + docTitle : 'Titre de la page', + charset : 'Encodage de caractère', + charsetOther : 'Autre encodage de caractère', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Europe Centrale', + charsetCT : 'Chinois Traditionnel (Big5)', + charsetCR : 'Cyrillique', + charsetGR : 'Grec', + charsetJP : 'Japonais', + charsetKR : 'Coréen', + charsetTR : 'Turc', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Occidental', + docType : 'Type de document', + docTypeOther : 'Autre type de document', + xhtmlDec : 'Inclure les déclarations XHTML', + bgColor : 'Couleur de fond', + bgImage : 'Image de fond', + bgFixed : 'Image fixe sans défilement', + txtColor : 'Couleur de texte', + margin : 'Marges', + marginTop : 'Haut', + marginLeft : 'Gauche', + marginRight : 'Droite', + marginBottom : 'Bas', + metaKeywords : 'Mots-clés (séparés par des virgules)', + metaDescription : 'Description', + metaAuthor : 'Auteur', + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/gl.js b/_source/lang/gl.js new file mode 100644 index 0000000..6ef3072 --- /dev/null +++ b/_source/lang/gl.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Galician language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['gl'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Código Fonte', + newPage : 'Nova Páxina', + save : 'Gardar', + preview : 'Vista Previa', + cut : 'Cortar', + copy : 'Copiar', + paste : 'Pegar', + print : 'Imprimir', + underline : 'Sub-raiado', + bold : 'Negrita', + italic : 'Cursiva', + selectAll : 'Seleccionar todo', + removeFormat : 'Eliminar Formato', + strike : 'Tachado', + subscript : 'SubÃndice', + superscript : 'SuperÃndice', + horizontalrule : 'Inserir Liña Horizontal', + pagebreak : 'Inserir Salto de Páxina', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Eliminar Ligazón', + undo : 'Desfacer', + redo : 'Refacer', + + // Common messages and labels. + common : + { + browseServer : 'Navegar no Servidor', + url : 'URL', + protocol : 'Protocolo', + upload : 'Carregar', + uploadSubmit : 'Enviar ó Servidor', + image : 'Imaxe', + flash : 'Flash', + form : 'Formulario', + checkbox : 'Cadro de Verificación', + radio : 'Botón de Radio', + textField : 'Campo de Texto', + textarea : 'Ãrea de Texto', + hiddenField : 'Campo Oculto', + button : 'Botón', + select : 'Campo de Selección', + imageButton : 'Botón de Imaxe', + notSet : '<non definido>', + id : 'Id', + name : 'Nome', + langDir : 'Orientación do Idioma', + langDirLtr : 'Esquerda a Dereita (LTR)', + langDirRtl : 'Dereita a Esquerda (RTL)', + langCode : 'Código do Idioma', + longDescr : 'Descrición Completa da URL', + cssClass : 'Clases da Folla de Estilos', + advisoryTitle : 'TÃtulo', + cssStyle : 'Estilo', + ok : 'OK', + cancel : 'Cancelar', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Advanzado', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Largura', + height : 'Altura', + align : 'Aliñamento', + alignLeft : 'Esquerda', + alignRight : 'Dereita', + alignCenter : 'Centro', + alignTop : 'Tope', + alignMiddle : 'Centro', + alignBottom : 'Pé', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Inserir Carácter Especial', + title : 'Seleccione Caracter Especial', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Inserir/Editar Ligazón', + other : '<outro>', + menu : 'Editar Ligazón', + title : 'Ligazón', + info : 'Información da Ligazón', + target : 'Destino', + upload : 'Carregar', + advanced : 'Advanzado', + type : 'Tipo de Ligazón', + toUrl : 'URL', // MISSING + toAnchor : 'Referencia nesta páxina', + toEmail : 'E-Mail', + targetFrame : '<frame>', + targetPopup : '<Xanela Emerxente>', + targetFrameName : 'Nome do Marco Destino', + targetPopupName : 'Nome da Xanela Emerxente', + popupFeatures : 'CaracterÃsticas da Xanela Emerxente', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Barra de Estado', + popupLocationBar: 'Barra de Localización', + popupToolbar : 'Barra de Ferramentas', + popupMenuBar : 'Barra de Menú', + popupFullScreen : 'A Toda Pantalla (IE)', + popupScrollBars : 'Barras de Desplazamento', + popupDependent : 'Dependente (Netscape)', + popupLeft : 'Posición Esquerda', + popupTop : 'Posición dende Arriba', + id : 'Id', // MISSING + langDir : 'Orientación do Idioma', + langDirLTR : 'Esquerda a Dereita (LTR)', + langDirRTL : 'Dereita a Esquerda (RTL)', + acccessKey : 'Chave de Acceso', + name : 'Nome', + langCode : 'Orientación do Idioma', + tabIndex : 'Ãndice de Tabulación', + advisoryTitle : 'TÃtulo', + advisoryContentType : 'Tipo de Contido', + cssClasses : 'Clases da Folla de Estilos', + charset : 'Fonte de Caracteres Vinculado', + styles : 'Estilo', + rel : 'Relationship', // MISSING + selectAnchor : 'Seleccionar unha Referencia', + anchorName : 'Por Nome de Referencia', + anchorId : 'Por Element Id', + emailAddress : 'Enderezo de E-Mail', + emailSubject : 'Asunto do Mensaxe', + emailBody : 'Corpo do Mensaxe', + noAnchors : '(Non hai referencias disponibles no documento)', + noUrl : 'Por favor, escriba a ligazón URL', + noEmail : 'Por favor, escriba o enderezo de e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Inserir/Editar Referencia', + menu : 'Propriedades da Referencia', + title : 'Propriedades da Referencia', + name : 'Nome da Referencia', + errorName : 'Por favor, escriba o nome da referencia', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'Procurar', + replace : 'Substituir', + findWhat : 'Texto a procurar:', + replaceWith : 'Substituir con:', + notFoundMsg : 'Non te atopou o texto indicado.', + matchCase : 'Coincidir Mai./min.', + matchWord : 'Coincidir con toda a palabra', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Substitiur Todo', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tabla', + title : 'Propiedades da Táboa', + menu : 'Propiedades da Táboa', + deleteTable : 'Borrar Táboa', + rows : 'Filas', + columns : 'Columnas', + border : 'Tamaño do Borde', + widthPx : 'pixels', + widthPc : 'percent', + widthUnit : 'width unit', // MISSING + cellSpace : 'Marxe entre Celas', + cellPad : 'Marxe interior', + caption : 'TÃtulo', + summary : 'Sumario', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cela', + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'Borrar Cela', + merge : 'Unir Celas', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Fila', + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'Borrar Filas' + }, + + column : + { + menu : 'Columna', + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'Borrar Columnas' + } + }, + + // Button Dialog. + button : + { + title : 'Propriedades do Botón', + text : 'Texto (Valor)', + type : 'Tipo', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Propriedades do Cadro de Verificación', + radioTitle : 'Propriedades do Botón de Radio', + value : 'Valor', + selected : 'Seleccionado' + }, + + // Form Dialog. + form : + { + title : 'Propriedades do Formulario', + menu : 'Propriedades do Formulario', + action : 'Acción', + method : 'Método', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Propriedades do Campo de Selección', + selectInfo : 'Info', + opAvail : 'Opcións Disponibles', + value : 'Valor', + size : 'Tamaño', + lines : 'liñas', + chkMulti : 'Permitir múltiples seleccións', + opText : 'Texto', + opValue : 'Valor', + btnAdd : 'Engadir', + btnModify : 'Modificar', + btnUp : 'Subir', + btnDown : 'Baixar', + btnSetValue : 'Definir como valor por defecto', + btnDelete : 'Borrar' + }, + + // Textarea Dialog. + textarea : + { + title : 'Propriedades da Ãrea de Texto', + cols : 'Columnas', + rows : 'Filas' + }, + + // Text Field Dialog. + textfield : + { + title : 'Propriedades do Campo de Texto', + name : 'Nome', + value : 'Valor', + charWidth : 'Tamaño do Caracter', + maxChars : 'Máximo de Caracteres', + type : 'Tipo', + typeText : 'Texto', + typePass : 'Chave' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Propriedades do Campo Oculto', + name : 'Nome', + value : 'Valor' + }, + + // Image Dialog. + image : + { + title : 'Propriedades da Imaxe', + titleButton : 'Propriedades do Botón de Imaxe', + menu : 'Propriedades da Imaxe', + infoTab : 'Información da Imaxe', + btnUpload : 'Enviar ó Servidor', + upload : 'Carregar', + alt : 'Texto Alternativo', + lockRatio : 'Proporcional', + resetSize : 'Tamaño Orixinal', + border : 'LÃmite', + hSpace : 'Esp. Horiz.', + vSpace : 'Esp. Vert.', + alertUrl : 'Por favor, escriba a URL da imaxe', + linkTab : 'Ligazón', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Propriedades Flash', + propertiesTab : 'Properties', // MISSING + title : 'Propriedades Flash', + chkPlay : 'Auto Execución', + chkLoop : 'Bucle', + chkMenu : 'Activar Menú Flash', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Escalar', + scaleAll : 'Amosar Todo', + scaleNoBorder : 'Sen Borde', + scaleFit : 'Encaixar axustando', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs Inferior', + alignAbsMiddle : 'Abs Centro', + alignBaseline : 'Liña Base', + alignTextTop : 'Tope do Texto', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Cor do Fondo', + hSpace : 'Esp. Horiz.', + vSpace : 'Esp. Vert.', + validateSrc : 'Por favor, escriba a ligazón URL', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Corrección Ortográfica', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Non está no diccionario', + changeTo : 'Cambiar a', + btnIgnore : 'Ignorar', + btnIgnoreAll : 'Ignorar Todas', + btnReplace : 'Substituir', + btnReplaceAll : 'Substituir Todas', + btnUndo : 'Desfacer', + noSuggestions : '- Sen candidatos -', + progress : 'Corrección ortográfica en progreso...', + noMispell : 'Corrección ortográfica rematada: Non se atoparon erros', + noChanges : 'Corrección ortográfica rematada: Non se substituiu nengunha verba', + oneChange : 'Corrección ortográfica rematada: Unha verba substituida', + manyChanges : 'Corrección ortográfica rematada: %1 verbas substituidas', + ieSpellDownload : 'O corrector ortográfico non está instalado. ¿Quere descargalo agora?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Inserte un Smiley', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Lista Numerada', + bulletedlist : 'Marcas', + indent : 'Aumentar SangrÃa', + outdent : 'Disminuir SangrÃa', + + justify : + { + left : 'Aliñar á Esquerda', + center : 'Centrado', + right : 'Aliñar á Dereita', + block : 'Xustificado' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'Pegar', + cutError : 'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl/Cmd+X).', + copyError : 'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl/Cmd+C).', + pasteMsg : 'Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e pulse <STRONG>OK</STRONG>.', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Pegar dende Word', + title : 'Pegar dende Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Pegar como texto plano', + title : 'Pegar como texto plano' + }, + + templates : + { + button : 'Plantillas', + title : 'Plantillas de Contido', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):', + emptyListMsg : '(Non hai plantillas definidas)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'Estilo', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Formato', + panelTitle : 'Formato', + + tag_p : 'Normal', + tag_pre : 'Formateado', + tag_address : 'Enderezo', + tag_h1 : 'Enacabezado 1', + tag_h2 : 'Encabezado 2', + tag_h3 : 'Encabezado 3', + tag_h4 : 'Encabezado 4', + tag_h5 : 'Encabezado 5', + tag_h6 : 'Encabezado 6', + tag_div : 'Paragraph (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Tipo', + voiceLabel : 'Font', // MISSING + panelTitle : 'Tipo' + }, + + fontSize : + { + label : 'Tamaño', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Tamaño' + }, + + colorButton : + { + textColorTitle : 'Cor do Texto', + bgColorTitle : 'Cor do Fondo', + panelTitle : 'Colors', // MISSING + auto : 'Automático', + more : 'Máis Cores...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Propriedades do Documento', + title : 'Propriedades do Documento', + design : 'Design', // MISSING + meta : 'Meta Tags', // MISSING + chooseColor : 'Choose', // MISSING + other : '<outro>', + docTitle : 'TÃtulo da Páxina', + charset : 'Codificación do Xogo de Caracteres', + charsetOther : 'Outra Codificación do Xogo de Caracteres', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Encabezado do Tipo de Documento', + docTypeOther : 'Outro Encabezado do Tipo de Documento', + xhtmlDec : 'Incluir Declaracións XHTML', + bgColor : 'Cor de Fondo', + bgImage : 'URL da Imaxe de Fondo', + bgFixed : 'Fondo Fixo', + txtColor : 'Cor do Texto', + margin : 'Marxes da Páxina', + marginTop : 'Arriba', + marginLeft : 'Esquerda', + marginRight : 'Dereita', + marginBottom : 'Abaixo', + metaKeywords : 'Palabras Chave de Indexación do Documento (separadas por comas)', + metaDescription : 'Descripción do Documento', + metaAuthor : 'Autor', + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/gu.js b/_source/lang/gu.js new file mode 100644 index 0000000..a318fe6 --- /dev/null +++ b/_source/lang/gu.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Gujarati language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['gu'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'મà«àª³ àªà« પà«àª°àª¾àª¥àª®àª¿àª દસà«àª¤àª¾àªµà«àª', + newPage : 'નવૠપાનà«àª', + save : 'સà«àªµ', + preview : 'પà«àª°à«àªµàª¦àª°à«àª¶àª¨', + cut : 'àªàª¾àªªàªµà«àª', + copy : 'નàªàª²', + paste : 'પà«àª¸à«àª', + print : 'પà«àª°àª¿àª¨à«àª', + underline : 'ઠનà«àª¡àª°à«àª²àª¾àªàª¨, નà«àªà« લà«àªà«', + bold : 'બà«àª²à«àª¡/સà«àªªàª·à«àª', + italic : 'àªàªà«àª²àª¿àª, તà«àª°àª¾àªàª¸àª¾', + selectAll : 'બàªà«àª પસàªàª¦ àªàª°àªµà«àª', + removeFormat : 'ફà«àª°à«àª®àª àªàª¾àª¢àªµà«àª', + strike : 'àªà«àªà« નાàªàªµà«àª', + subscript : 'àªàª àªàª¿àª¹à«àª¨àª¨à« નà«àªà« àªàª°à«àª²à«àª બà«àªà«àª àªàª¿àª¹à«àª¨', + superscript : 'àªàª àªàª¿àª¹à«àª¨ àªàªªàª° àªàª°à«àª²à«àª બà«àªà«àª àªàª¿àª¹à«àª¨.', + horizontalrule : 'સમસà«àª¤àª°à«àª¯ રà«àªàª¾ àªàª¨à«àª¸àª°à«àª/દાàªàª² àªàª°àªµà«', + pagebreak : 'àªàª¨à«àª¸àª°à«àª પà«àªàª¬à«àª°à«àª/પાનાનૠઠલઠàªàª°àªµà«àª/દાàªàª² àªàª°àªµà«àª', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'લિàªàª àªàª¾àª¢àªµà«', + undo : 'રદ àªàª°àªµà«àª; પહà«àª²àª¾àª હતૠàªàªµà« સà«àª¥àª¿àª¤àª¿ પાàªà« લાવવà«', + redo : 'રિડà«; પàªà« હતૠàªàªµà« સà«àª¥àª¿àª¤àª¿ પાàªà« લાવવà«', + + // Common messages and labels. + common : + { + browseServer : 'સરà«àªµàª° બà«àª°àª¾àªàª àªàª°à«', + url : 'URL', + protocol : 'પà«àª°à«àªà«àªà«àª²', + upload : 'ઠપલà«àª¡', + uploadSubmit : 'ઠસરà«àªµàª°àª¨à« મà«àªàª²àªµà«àª', + image : 'àªàª¿àª¤à«àª°', + flash : 'ફà«àª²à« શ', + form : 'ફà«àª°à«àª®/પતà«àª°àª', + checkbox : 'àªà«àª બà«àªà«àª¸', + radio : 'રà«àª¡àª¿àª બàªàª¨', + textField : 'àªà«àªà«àª¸à«àª ફà«àª²à«àª¡, શબà«àª¦ àªà«àª·à«àª¤à«àª°', + textarea : 'àªà«àªà«àª¸à«àª àªàª°àª¿àª, શબà«àª¦ વિસà«àª¤àª¾àª°', + hiddenField : 'àªà«àªªà«àª¤ àªà«àª·à«àª¤à«àª°', + button : 'બàªàª¨', + select : 'પસàªàª¦àªà« àªà«àª·à«àª¤à«àª°', + imageButton : 'àªàª¿àª¤à«àª° બàªàª¨', + notSet : '<સà«àª નથà«>', + id : 'Id', + name : 'નામ', + langDir : 'àªàª¾àª·àª¾ લà«àªàªµàª¾àª¨à« પદà«àª§àª¤àª¿', + langDirLtr : 'ડાબૠથૠàªàª®àª£à« (LTR)', + langDirRtl : 'àªàª®àª£à« થૠડાબૠ(RTL)', + langCode : 'àªàª¾àª·àª¾ àªà«àª¡', + longDescr : 'વધારૠમાહિતૠમાàªà« URL', + cssClass : 'સà«àªàª¾àªàª²-શà«àª àªà«àª²àª¾àª¸', + advisoryTitle : 'મà«àªà«àª¯ મથાળà«àª', + cssStyle : 'સà«àªàª¾àªàª²', + ok : 'ઠà«àª àªà«', + cancel : 'રદ àªàª°àªµà«àª', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'ઠડà«àªµàª¾àª¨à«àª¸àª¡', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'પહà«àª³àª¾àª', + height : 'àªàªàªàª¾àª', + align : 'લાàªàª¨àª¦à«àª°à«àª®àª¾àª àªà«àª વવà«àª', + alignLeft : 'ડાબૠબાàªà« àªà«àª વવà«àª', + alignRight : 'àªàª®àª£à«', + alignCenter : 'મધà«àª¯ સà«àª¨à«àªàª°', + alignTop : 'àªàªªàª°', + alignMiddle : 'વàªà«àªà«', + alignBottom : 'નà«àªà«', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'વિશિષà«àª ઠàªà«àª·àª° àªàª¨à«àª¸àª°à«àª/દાàªàª² àªàª°àªµà«àª', + title : 'સà«àªªà«àª¶àª¿àª લ વિશિષà«àª ઠàªà«àª·àª° પસàªàª¦ àªàª°à«', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'લિàªàª àªàª¨à«àª¸àª°à«àª/દાàªàª² àªàª°àªµà«', + other : '<other>', // MISSING + menu : ' લિàªàª àªàª¡àª¿àª/માઠફà«àª°àª«àª¾àª° àªàª°àªµà«', + title : 'લિàªàª', + info : 'લિàªàª àªàª¨à«àª«à« àªà« બ', + target : 'àªàª¾àª°à«àªà«àª/લàªà«àª·à«àª¯', + upload : 'ઠપલà«àª¡', + advanced : 'ઠડà«àªµàª¾àª¨à«àª¸àª¡', + type : 'લિàªàª પà«àª°àªàª¾àª°', + toUrl : 'URL', // MISSING + toAnchor : 'ઠપà«àªàª¨à« àªàªàªàª°', + toEmail : 'àª-મà«àª²', + targetFrame : '<ફà«àª°à«àª®>', + targetPopup : '<પà«àªª-ઠપ વિનà«àª¡à«>', + targetFrameName : 'àªàª¾àª°à«àªà«àª ફà«àª°à«àª® નà«àª નામ', + targetPopupName : 'પà«àªª-ઠપ વિનà«àª¡à« નà«àª નામ', + popupFeatures : 'પà«àªª-ઠપ વિનà«àª¡à« ફà«àªàª°àª¸à« ', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'સà«àªà« àªàª¸ બાર', + popupLocationBar: 'લà«àªà«àª¶àª¨ બાર', + popupToolbar : 'àªà«àª² બાર', + popupMenuBar : 'મà«àª¨à«àª¯à« બાર', + popupFullScreen : 'ફà«àª² સà«àªà«àª°à«àª¨ (IE)', + popupScrollBars : 'સà«àªà«àª°à«àª² બાર', + popupDependent : 'ડિપà«àª¨à«àª¡àª¨à«àª (Netscape)', + popupLeft : 'ડાબૠબાàªà«', + popupTop : 'àªàª®àª£à« બાàªà«', + id : 'Id', // MISSING + langDir : 'àªàª¾àª·àª¾ લà«àªàªµàª¾àª¨à« પદà«àª§àª¤àª¿', + langDirLTR : 'ડાબૠથૠàªàª®àª£à« (LTR)', + langDirRTL : 'àªàª®àª£à« થૠડાબૠ(RTL)', + acccessKey : 'àªàªà«àª¸à«àª¸ àªà«', + name : 'નામ', + langCode : 'àªàª¾àª·àª¾ લà«àªàªµàª¾àª¨à« પદà«àª§àª¤àª¿', + tabIndex : 'àªà« બ àªàª¨à«àª¡à«àªà«àª¸', + advisoryTitle : 'મà«àªà«àª¯ મથાળà«àª', + advisoryContentType : 'મà«àªà«àª¯ àªàª¨à«àªà«àª¨à«àª પà«àª°àªàª¾àª°', + cssClasses : 'સà«àªàª¾àªàª²-શà«àª àªà«àª²àª¾àª¸', + charset : 'લિàªàª રિસà«àª°à«àª¸ àªà« રિàªà«àªàª° સà«àª', + styles : 'સà«àªàª¾àªàª²', + rel : 'Relationship', // MISSING + selectAnchor : 'àªàªàªàª° પસàªàª¦ àªàª°à«', + anchorName : 'àªàªàªàª° નામથૠપસàªàª¦ àªàª°à«', + anchorId : 'àªàªàªàª° àªàª²àª¿àª®àª¨à«àª Id થૠપસàªàª¦ àªàª°à«', + emailAddress : 'àª-મà«àª² સરનામà«àª', + emailSubject : 'àª-મà«àª² વિષય', + emailBody : 'સàªàª¦à«àª¶', + noAnchors : '(ડà«àªà«àª¯à«àª®àª¨à«àªàª®àª¾àª àªàªàªàª°àª¨à« સàªàªà«àª¯àª¾)', + noUrl : 'લિàªàª URL àªàª¾àªàªª àªàª°à«', + noEmail : 'àª-મà«àª² સરનામà«àª àªàª¾àªàªª àªàª°à«' + }, + + // Anchor dialog + anchor : + { + toolbar : 'àªàªàªàª° àªàª¨à«àª¸àª°à«àª/દાàªàª² àªàª°àªµà«', + menu : 'àªàªàªàª°àª¨àª¾ àªà«àª£', + title : 'àªàªàªàª°àª¨àª¾ àªà«àª£', + name : 'àªàªàªàª°àª¨à«àª નામ', + errorName : 'àªàªàªàª°àª¨à«àª નામ àªàª¾àªàªª àªàª°à«', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'શà«àª§àªµà«àª ઠનૠબદલવà«àª', + find : 'શà«àª§àªµà«àª', + replace : 'રિપà«àª²à«àª¸/બદલવà«àª', + findWhat : 'ઠશà«àª§à«', + replaceWith : 'àªàª¨àª¾àª¥à« બદલà«', + notFoundMsg : 'તમૠશà«àª§à«àª²à« àªà«àªà«àª¸à«àª નથૠમળà«', + matchCase : 'àªà«àª¸ સરàªàª¾ રાàªà«', + matchWord : 'બàªàª¾ શબà«àª¦ સરàªàª¾ રાàªà«', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'બàªàª¾ બદલૠ', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'àªà«àª¬àª², àªà«àª à«', + title : 'àªà«àª¬àª², àªà«àª ાનà«àª મથાળà«àª', + menu : 'àªà«àª¬àª², àªà«àª ાનà«àª મથાળà«àª', + deleteTable : 'àªà«àª ૠડિલà«àª/àªàª¾àª¢à« નાàªàªµà«àª', + rows : 'પàªàªà«àª¤àª¿àª¨àª¾ àªàª¾àª¨àª¾', + columns : 'àªà«àª²àª®/àªàªà« àªàªàª¾àª°', + border : 'àªà«àª ાનૠબાàªà«(બà«àª°à«àª¡àª°) સાàªàª', + widthPx : 'પિàªàª¸àª²', + widthPc : 'પà«àª°àª¤àª¿àª¶àª¤', + widthUnit : 'width unit', // MISSING + cellSpace : 'સà«àª² ઠàªàª¤àª°', + cellPad : 'સà«àª² પૠડિàªàª', + caption : 'મથાળà«àª/àªà« પà«àª¶àª¨ ', + summary : 'àªà«àªàªà« àªàª¹à«àªµàª¾àª²', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'àªà«àª·àª¨àª¾ àªàª¾àª¨àª¾', + insertBefore : 'પહà«àª²àª¾àª àªà«àª· àªàª®à«àª°àªµà«', + insertAfter : 'પàªà« àªà«àª· àªàª®à«àª°àªµà«', + deleteCell : 'àªà«àª· ડિલà«àª/àªàª¾àª¢à« નાàªàªµà«', + merge : 'àªà«àª· àªà«àªàª¾ àªàª°àªµàª¾', + mergeRight : 'àªàª®àª£à« બાàªà« àªà«àªàª¾ àªàª°àªµàª¾', + mergeDown : 'નà«àªà« àªà«àªàª¾ àªàª°àªµàª¾', + splitHorizontal : 'àªà«àª·àª¨à« સમસà«àª¤àª°à«àª¯ વિàªàª¾àªàª¨ àªàª°àªµà«àª', + splitVertical : 'àªà«àª·àª¨à« સà«àª§à«àª નૠàªàªà«àª વિàªàª¾àªàª¨ àªàª°àªµà«àª', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'પàªàªà«àª¤àª¿àª¨àª¾ àªàª¾àª¨àª¾', + insertBefore : 'પહà«àª²àª¾àª પàªàªà«àª¤àª¿ àªàª®à«àª°àªµà«', + insertAfter : 'પàªà« પàªàªà«àª¤àª¿ àªàª®à«àª°àªµà«', + deleteRow : 'પàªàªà«àª¤àª¿àª ડિલà«àª/àªàª¾àª¢à« નાàªàªµà«' + }, + + column : + { + menu : 'àªà«àª²àª®/àªàªà« àªàªàª¾àª°', + insertBefore : 'પહà«àª²àª¾àª àªà«àª²àª®/àªàªà« àªàªàª¾àª° àªàª®à«àª°àªµà«', + insertAfter : 'પàªà« àªà«àª²àª®/àªàªà« àªàªàª¾àª° àªàª®à«àª°àªµà«', + deleteColumn : 'àªà«àª²àª®/àªàªà« àªàªàª¾àª° ડિલà«àª/àªàª¾àª¢à« નાàªàªµà«' + } + }, + + // Button Dialog. + button : + { + title : 'બàªàª¨àª¨àª¾ àªà«àª£', + text : 'àªà«àªà«àª¸à«àª (વૠલà«àª¯à«)', + type : 'પà«àª°àªàª¾àª°', + typeBtn : 'બàªàª¨', + typeSbm : 'સબà«àª®àª¿àª', + typeRst : 'રિસà«àª' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'àªà«àª બà«àªà«àª¸ àªà«àª£', + radioTitle : 'રà«àª¡àª¿àª બàªàª¨àª¨àª¾ àªà«àª£', + value : 'વૠલà«àª¯à«', + selected : 'સિલà«àªà«àªà«àª¡' + }, + + // Form Dialog. + form : + { + title : 'ફà«àª°à«àª®/પતà«àª°àªàª¨àª¾ àªà«àª£', + menu : 'ફà«àª°à«àª®/પતà«àª°àªàª¨àª¾ àªà«àª£', + action : 'àªà«àª°àª¿àª¯àª¾', + method : 'પદà«àª§àª¤àª¿', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'પસàªàª¦àªà« àªà«àª·à«àª¤à«àª°àª¨àª¾ àªà«àª£', + selectInfo : 'સà«àªàª¨àª¾', + opAvail : 'àªàªªàª²àª¬à«àª§ વિàªàª²à«àªª', + value : 'વૠલà«àª¯à«', + size : 'સાàªàª', + lines : 'લà«àªà«àª', + chkMulti : 'àªàªàª¥à« વધારૠપસàªàª¦ àªàª°à« શàªà«', + opText : 'àªà«àªà«àª¸à«àª', + opValue : 'વૠલà«àª¯à«', + btnAdd : 'àªàª®à«àª°àªµà«àª', + btnModify : 'બદલવà«àª', + btnUp : 'àªàªªàª°', + btnDown : 'નà«àªà«', + btnSetValue : 'પસàªàª¦ àªàª°àª²à« વૠલà«àª¯à« સà«àª àªàª°à«', + btnDelete : 'રદ àªàª°àªµà«àª' + }, + + // Textarea Dialog. + textarea : + { + title : 'àªà«àªà«àª¸à«àª àªàª રિàª, શબà«àª¦ વિસà«àª¤àª¾àª°àª¨àª¾ àªà«àª£', + cols : 'àªà«àª²àª®/àªàªà« àªàªàª¾àª°', + rows : 'પàªàªà«àª¤àª¿àª' + }, + + // Text Field Dialog. + textfield : + { + title : 'àªà«àªà«àª¸à«àª ફà«àª²à«àª¡, શબà«àª¦ àªà«àª·à«àª¤à«àª°àª¨àª¾ àªà«àª£', + name : 'નામ', + value : 'વૠલà«àª¯à«', + charWidth : 'àªà«àª°à«àªà«àªàª°àª¨à« પહà«àª³àª¾àª', + maxChars : 'ઠધિàªàª¤àª® àªà«àª°à«àªà«àªàª°', + type : 'àªàª¾àªàªª', + typeText : 'àªà«àªà«àª¸à«àª', + typePass : 'પાસવરà«àª¡' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'àªà«àªªà«àª¤ àªà«àª·à«àª¤à«àª°àª¨àª¾ àªà«àª£', + name : 'નામ', + value : 'વૠલà«àª¯à«' + }, + + // Image Dialog. + image : + { + title : 'àªàª¿àª¤à«àª°àª¨àª¾ àªà«àª£', + titleButton : 'àªàª¿àª¤à«àª° બàªàª¨àª¨àª¾ àªà«àª£', + menu : 'àªàª¿àª¤à«àª°àª¨àª¾ àªà«àª£', + infoTab : 'àªàª¿àª¤à«àª° નૠàªàª¾àª£àªàª¾àª°à«', + btnUpload : 'ઠસરà«àªµàª°àª¨à« મà«àªàª²àªµà«àª', + upload : 'ઠપલà«àª¡', + alt : 'àªàª²à«àªàª°à«àª¨àª àªà«àªà«àª¸à«àª', + lockRatio : 'લà«àª àªà«àª£à«àª¤à«àª¤àª°', + resetSize : 'રà«àª¸à«àª સાàªàª', + border : 'બà«àª°à«àª¡àª°', + hSpace : 'સમસà«àª¤àª°à«àª¯ àªàªà«àª¯àª¾', + vSpace : 'લàªàª¬àª°à«àªª àªàªà«àª¯àª¾', + alertUrl : 'àªàª¿àª¤à«àª°àª¨à« URL àªàª¾àªàªª àªàª°à«', + linkTab : 'લિàªàª', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'ફà«àª²à« શના àªà«àª£', + propertiesTab : 'Properties', // MISSING + title : 'ફà«àª²à« શ àªà«àª£', + chkPlay : 'àªàªà«/સà«àªµàª¯àª પà«àª²à«', + chkLoop : 'લà«àªª', + chkMenu : 'ફà«àª²à« શ મà«àª¨à«àª¯à« નૠપà«àª°àª¯à«àª àªàª°à«', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'સà«àªà«àª²', + scaleAll : 'સà«àªà«àª² àªàª²/બધૠબતાવà«', + scaleNoBorder : 'સà«àªà«àª² બà«àª°à«àª¡àª° વàªàª°', + scaleFit : 'સà«àªà«àª² àªàªàª¦àª® ફà«àª', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs નà«àªà«', + alignAbsMiddle : 'Abs àªàªªàª°', + alignBaseline : 'àªàª§àª¾àª° લà«àªà«', + alignTextTop : 'àªà«àªà«àª¸à«àª àªàªªàª°', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'બૠàªàªà«àª°àª¾àªàª¨à«àª¡ રàªàª,', + hSpace : 'સમસà«àª¤àª°à«àª¯ àªàªà«àª¯àª¾', + vSpace : 'લàªàª¬àª°à«àªª àªàªà«àª¯àª¾', + validateSrc : 'લિàªàª URL àªàª¾àªàªª àªàª°à«', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'àªà«àª¡àª£à« (સà«àªªà«àª²àª¿àªàª) તપાસવà«', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'શબà«àª¦àªà«àª¶àª®àª¾àª નથà«', + changeTo : 'àªàª¨àª¾àª¥à« બદલવà«àª', + btnIgnore : 'àªàªà«àª¨à«àª°/ઠવàªàª£àª¨àª¾ àªàª°àªµà«', + btnIgnoreAll : 'બધાનૠàªàªà«àª¨à«àª°/ઠવàªàª£àª¨àª¾ àªàª°àªµà«', + btnReplace : 'બદલવà«àª', + btnReplaceAll : 'બધા બદલૠàªàª°à«', + btnUndo : 'ઠનà«àª¡à«', + noSuggestions : '- àªàª સàªà«àª¶àª¨ નથૠ-', + progress : 'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª àªàª¾àª²à« àªà«...', + noMispell : 'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª પà«àª°à«àª£: àªà«àªà« àªà«àª¡àª£à« મળૠનથà«', + noChanges : 'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª પà«àª°à«àª£: àªàªàªªàª£ શબà«àª¦ બદલયૠનથà«', + oneChange : 'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª પà«àª°à«àª£: àªàª શબà«àª¦ બદલયૠàªà«', + manyChanges : 'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª પà«àª°à«àª£: %1 શબà«àª¦ બદલયા àªà«', + ieSpellDownload : 'સà«àªªà«àª²-àªà«àªàª° àªàª¨à«àª¸à«àªà«àª² નથà«. શà«àª તમૠડાàªàª¨àª²à«àª¡ àªàª°àªµàª¾ માàªàªà« àªà«?' + }, + + smiley : + { + toolbar : 'સà«àª®àª¾àªàª²à«', + title : 'સà«àª®àª¾àªàª²à« પસàªàª¦ àªàª°à«', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'સàªàªà«àª¯àª¾àªàªàª¨ સà«àªàª¿', + bulletedlist : 'બà«àª²à«àª સà«àªàª¿', + indent : 'àªàª¨à«àª¡à«àª¨à«àª, લà«àªà«àª¨àª¾ àªàª°àªàªàª®àª¾àª àªàªà«àª¯àª¾ વધારવà«', + outdent : 'àªàª¨à«àª¡à«àª¨à«àª લà«àªà«àª¨àª¾ àªàª°àªàªàª®àª¾àª àªàªà«àª¯àª¾ àªàªàª¾àª¡àªµà«', + + justify : + { + left : 'ડાબૠબાàªà«àª/બાàªà« તરફ', + center : 'સàªàªà«àªàª¦à«àª°àª£/સà«àªàªàª°àª¿àªàª', + right : 'àªàª®àª£à« બાàªà«àª/બાàªà« તરફ', + block : 'બà«àª²à«àª, ઠàªàª¤àª°àª¾àª¯ àªàª¸à«àªàª¿àª«àª¾àª' + }, + + blockquote : 'બà«àª²à«àª-àªà«àª, ઠવતરણàªàª¿àª¹à«àª¨à«', + + clipboard : + { + title : 'પà«àª¸à«àª', + cutError : 'તમારા બà«àª°àª¾àªàªàª° નૠસà«àª°àªà«àª·àª¿àª¤ સà«àªàª¿àªàªàª¸ àªàª àªàª°àªµàª¾àª¨à« પરવાનàªà« નથૠàªàªªàª¤à«. (Ctrl/Cmd+X) નૠàªàªªàª¯à«àª àªàª°à«.', + copyError : 'તમારા બà«àª°àª¾àªàªàª° નૠસà«àª°àªà«àª·àª¿àª¤ સà«àªàª¿àªàªàª¸ àªà«àªªà« àªàª°àªµàª¾àª¨à« પરવાનàªà« નથૠàªàªªàª¤à«. (Ctrl/Cmd+C) à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤à¥¤', + pasteMsg : 'Ctrl/Cmd+V નૠપà«àª°àª¯à«àª àªàª°à« પà«àª¸à«àª àªàª°à«', + securityMsg : 'તમારા બà«àª°àª¾àªàªàª° નૠસà«àª°àªà«àª·àª¿àª¤ સà«àªàª¿àªàªàª¸àª¨àª¾ àªàª¾àª°àª£à«,àªàª¡àª¿àªàª° તમારા àªàª¿àª²à«àªªàª¬à«àª°à«àª¡ ડà«àªàª¾ નૠàªà«àªªà« નથૠàªàª°à« શàªàª¤à«. તમારૠઠવિનà«àª¡à«àª®àª¾àª ફરà«àª¥à« પà«àª¸à«àª àªàª°àªµà«àª પડશà«.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'પà«àª¸à«àª (વડૠàªà«àªà«àª¸à«àª)', + title : 'પà«àª¸à«àª (વડૠàªà«àªà«àª¸à«àª)', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'પà«àª¸à«àª (àªà«àªà«àª¸à«àª)', + title : 'પà«àª¸à«àª (àªà«àªà«àª¸à«àª)' + }, + + templates : + { + button : 'àªà«àª®à«àªªà«àª²à«àª', + title : 'àªàª¨à«àªà«àª¨à«àª àªà«àª®à«àªªà«àª²à«àª', + options : 'Template Options', // MISSING + insertOption : 'મà«àª³ શબà«àª¦àª¨à« બદલà«', + selectPromptMsg : 'àªàª¡àª¿àªàª°àª®àª¾àª àªàªªàª¨ àªàª°àªµàª¾ àªà«àª®à«àªªà«àª²à«àª પસàªàª¦ àªàª°à« (વરà«àª¤àª®àª¾àª¨ àªàª¨à«àªà«àª¨à«àª સà«àªµ નહà«àª થાય):', + emptyListMsg : '(àªà«àª àªà«àª®à«àªªà«àª²à«àª ડિફાàªàª¨ નથà«)' + }, + + showBlocks : 'બà«àª²à«àª બતાવવà«àª', + + stylesCombo : + { + label : 'શà«àª²à«/રà«àª¤', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'ફà«àª¨à«àª ફà«àª°à«àª®àª, રàªàª¨àª¾àª¨à« શà«àª²à«', + panelTitle : 'ફà«àª¨à«àª ફà«àª°à«àª®àª, રàªàª¨àª¾àª¨à« શà«àª²à«', + + tag_p : 'સામાનà«àª¯', + tag_pre : 'ફà«àª°à«àª®àªà«àª¡', + tag_address : 'સરનામà«àª', + tag_h1 : 'શà«àª°à«àª·àª 1', + tag_h2 : 'શà«àª°à«àª·àª 2', + tag_h3 : 'શà«àª°à«àª·àª 3', + tag_h4 : 'શà«àª°à«àª·àª 4', + tag_h5 : 'શà«àª°à«àª·àª 5', + tag_h6 : 'શà«àª°à«àª·àª 6', + tag_div : 'શà«àª°à«àª·àª (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ફà«àª¨à«àª', + voiceLabel : 'Font', // MISSING + panelTitle : 'ફà«àª¨à«àª' + }, + + fontSize : + { + label : 'ફà«àª¨à«àª સાàªàª/àªàª¦', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'ફà«àª¨à«àª સાàªàª/àªàª¦' + }, + + colorButton : + { + textColorTitle : 'શબà«àª¦àª¨à« રàªàª', + bgColorTitle : 'બૠàªàªà«àª°àª¾àªàª¨à«àª¡ રàªàª,', + panelTitle : 'Colors', // MISSING + auto : 'સà«àªµàªàª¾àª²àª¿àª¤', + more : 'àªàª° રàªàª...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'ડà«àªà«àª¯à«àª®àª¨à«àª àªà«àª£/પà«àª°à«àªªàª°à«àªàª¿àª', + title : 'ડà«àªà«àª¯à«àª®àª¨à«àª àªà«àª£/પà«àª°à«àªªàª°à«àªàª¿àª', + design : 'Design', // MISSING + meta : 'મà«àªàª¾àª¡à« àªàª¾', + chooseColor : 'Choose', // MISSING + other : '<other>', + docTitle : 'પà«àª મથાળà«àª/àªàª¾àªàªàª²', + charset : 'àªà«àª°à«àªà«àªàª° સà«àª àªàª¨à«àªà«àª¡àª¿àªàª', + charsetOther : 'ઠનà«àª¯ àªà«àª°à«àªà«àªàª° સà«àª àªàª¨à«àªà«àª¡àª¿àªàª', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'મધà«àª¯ યà«àª°à«àªªàª¿àª ન (Central European)', + charsetCT : 'àªàª¾àªàª¨à«àª (Chinese Traditional Big5)', + charsetCR : 'સિરà«àª²àª¿àª (Cyrillic)', + charsetGR : 'àªà«àª°à«àª (Greek)', + charsetJP : 'àªàª¾àªªàª¾àª¨àª¿àª (Japanese)', + charsetKR : 'àªà«àª°à«àª¯àª¨ (Korean)', + charsetTR : 'àªàª°à«àªàª¿ (Turkish)', + charsetUN : 'યà«àª¨àª¿àªà«àª¡ (UTF-8)', + charsetWE : 'પશà«àªàª¿àª® યà«àª°à«àªªàª¿àª ન (Western European)', + docType : 'ડà«àªà«àª¯à«àª®àª¨à«àª પà«àª°àªàª¾àª° શà«àª°à«àª·àª', + docTypeOther : 'ઠનà«àª¯ ડà«àªà«àª¯à«àª®àª¨à«àª પà«àª°àªàª¾àª° શà«àª°à«àª·àª', + xhtmlDec : 'XHTML સà«àªàª¨àª¾ સમાવિષà«àª àªàª°àªµà«', + bgColor : 'બૠàªàªà«àª°àª¾àªàª¨à«àª¡ રàªàª', + bgImage : 'બૠàªàªà«àª°àª¾àªàª¨à«àª¡ àªàª¿àª¤à«àª° URL', + bgFixed : 'સà«àªà«àª°à«àª² ન થાય તà«àªµà«àª બૠàªàªà«àª°àª¾àªàª¨à«àª¡', + txtColor : 'શબà«àª¦àª¨à« રàªàª', + margin : 'પà«àª મારà«àªàª¿àª¨', + marginTop : 'àªàªªàª°', + marginLeft : 'ડાબà«', + marginRight : 'àªàª®àª£à«', + marginBottom : 'નà«àªà«', + metaKeywords : 'ડà«àªà«àª¯à«àª®àª¨à«àª àªàª¨à«àª¡à«àªà«àª¸ સàªàªà«àª¤àª¶àª¬à«àª¦ (ઠલà«àªªàªµàª¿àª°àª¾àª® (,) થૠઠલઠàªàª°à«)', + metaDescription : 'ડà«àªà«àª¯à«àª®àª¨à«àª વરà«àª£àª¨', + metaAuthor : 'લà«àªàª', + metaCopyright : 'àªà«àªªàª¿àª°àª¾àªàª', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/he.js b/_source/lang/he.js new file mode 100644 index 0000000..c8cd1f1 --- /dev/null +++ b/_source/lang/he.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Hebrew language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['he'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'rtl', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : '×¢××¨× ××§×¡× ×¢×©×ר, %1, ×××¥ ××× (ALT) + 0 ××¢×ר×.', + + // ARIA descriptions. + toolbars : 'סר××× ×××× ×©× ××¢×ר×', + editor : '×¢××¨× ××§×¡× ×¢×©×ר', + + // Toolbar buttons without dialogs. + source : '×ק×ר', + newPage : '××£ ××ש', + save : 'ש××ר×', + preview : 'תצ××× ×ק××××', + cut : '×××ר×', + copy : '×עתק×', + paste : '×××ק×', + print : '××פס×', + underline : '×§× ×ª×ת××', + bold : '××××ש', + italic : '× ×××', + selectAll : '×××רת ×××', + removeFormat : '×סרת ××¢×צ××', + strike : '×ת×× ×××ק', + subscript : '×ת×× ×ª×ת××', + superscript : '×ת×× ×¢××××', + horizontalrule : '××ספת ×§× ××פק×', + pagebreak : '××ספת ש××רת ××£', + pagebreakAlt : 'ש××רת ××£', + unlink : '×סרת ×ק×ש×ר', + undo : '××××× ×¦×¢× ××ר××', + redo : '×××¨× ×¢× ×¦×¢× ××ר××', + + // Common messages and labels. + common : + { + browseServer : 'ס××ר ×שרת', + url : '×ת××ת (URL)', + protocol : 'פר×××ק××', + upload : '××¢×××', + uploadSubmit : 'ש×××× ×שרת', + image : 'ת××× ×', + flash : 'פ××ש', + form : '××פס', + checkbox : 'ת××ת ס××××', + radio : '×××¦× ×פשר×××ת', + textField : 'ש×× ×קס×', + textarea : '××××ר ×קס×', + hiddenField : 'ש×× ××××', + button : '×פת×ר', + select : 'ש×× ×××ר×', + imageButton : '×פת×ר ת××× ×', + notSet : '<×× × ×§××¢>', + id : '××××× (ID)', + name : 'ש×', + langDir : '××××× ×©×¤×', + langDirLtr : 'ש××× ××××× (LTR)', + langDirRtl : '×××× ×ש××× (RTL)', + langCode : 'ק×× ×©×¤×', + longDescr : 'ק×ש×ר ×ת×××ר ×פ×ר×', + cssClass : '×××קת ×¢×צ×× (CSS Class)', + advisoryTitle : '××תרת ××צעת', + cssStyle : 'ס×× ××', + ok : '××ש×ר', + cancel : '×××××', + close : 'ס××ר×', + preview : 'תצ××× ×ק××××', + generalTab : '××××', + advancedTab : '×פשר×××ת ×תק×××ת', + validateNumberFailed : '××¢×¨× ×××× ××××ת ×ספר×.', + confirmNewPage : '×× ×ש×× ×××× ×©×× × ×©××¨× ×××××. ××× ×××¢××ת ××£ ××ש?', + confirmCancel : '××ק ×××פשר×××ת ש×× ×, ××× ×ס××ר ×ת ×××××××?', + options : '×פשר×××ת', + target : '××ר×', + targetNew : '×××× ××ש (_blank)', + targetTop : '××××× ××¢×××× ×××תר (_top)', + targetSelf : '×××ª× ×××× (_self)', + targetParent : '×××× ××× (_parent)', + langDirLTR : 'ש××× ××××× (LTR)', + langDirRTL : '×××× ×ש××× (RTL)', + styles : 'ס×× ××', + cssClasses : '×××ק×ת ××××× ×ת ס×× ××', + width : 'ר×××', + height : '××××', + align : '××ש×ר', + alignLeft : '×ש×××', + alignRight : '×××××', + alignCenter : '×ר××', + alignTop : '×××¢××', + alignMiddle : '×××צע', + alignBottom : '×ת×ת×ת', + invalidHeight : '××××× ×××× ××××ת ×ספר.', + invalidWidth : '×ר××× ×××× ××××ת ×ספר.', + invalidCssLength : '××¢×¨× ×©×¦××× ×ש×× "%1" ×××× ××××ת ×ספר ××××× ×¢× ×× ××× ××××ת ×××× ××ק×ת ×©× CSS (px, %, in, cm, mm, em, ex, pt, ×× pc).', + invalidHtmlLength : '××¢×¨× ×©×¦××× ×ש×× "%1" ×××× ××××ת ×ספר ××××× ×¢× ×× ××× ××××ת ×××× ××ק×ת ×©× HTML (px ×× %).', + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, ×× ××××</span>' + }, + + contextmenu : + { + options : '×פשר×××ת תפר×× ××קשר' + }, + + // Special char dialog. + specialChar : + { + toolbar : '××ספת ×ª× ×××××', + title : '×××רת ×ª× ×××××', + options : '×פשר×××ת ת×××× ×××××××' + }, + + // Link dialog. + link : + { + toolbar : '××ספת/ער××ת ק×ש×ר', + other : '<××ר>', + menu : '××פ××× × ×§×ש×ר', + title : 'ק×ש×ר', + info : '××××¢ ×¢× ×ק×ש×ר', + target : '××ר×', + upload : '××¢×××', + advanced : '×פשר×××ת ×תק×××ת', + type : 'ס×× ×§×ש×ר', + toUrl : '×ת××ת (URL)', + toAnchor : '×¢××× ××¢××× ××', + toEmail : '×××"×', + targetFrame : '<×ס×רת>', + targetPopup : '<×××× ×§×פץ>', + targetFrameName : '×©× ×ס×רת ×××¢×', + targetPopupName : '×©× ××××× ×ק×פץ', + popupFeatures : 'ת××× ×ת ××××× ×ק×פץ', + popupResizable : 'ש×× ×× ××××', + popupStatusBar : 'סר×× ×××××', + popupLocationBar: 'סר×× ×ת××ת', + popupToolbar : 'סר×× ×××××', + popupMenuBar : 'סר×× ×ª×¤×¨××', + popupFullScreen : '××¡× ××× (IE)', + popupScrollBars : '× ××ª× ××××××', + popupDependent : 'ת××× (Netscape)', + popupLeft : '××ק×× ×¦× ×©×××', + popupTop : '××ק×× ×¦× ×¢××××', + id : '××××× (ID)', + langDir : '××××× ×©×¤×', + langDirLTR : 'ש××× ××××× (LTR)', + langDirRTL : '×××× ×ש××× (RTL)', + acccessKey : '×קש ××ש×', + name : 'ש×', + langCode : 'ק×× ×©×¤×', + tabIndex : '×ספר ×××', + advisoryTitle : '××תרת ××צעת', + advisoryContentType : 'Content Type ××צע', + cssClasses : '×××××× ×ת ×¢×צ×× ×§××צ×ת', + charset : 'ק×××× ××ש×× ××ק×שר', + styles : 'ס×× ××', + rel : 'קשר ××××××', + selectAnchor : '×××רת ×¢×××', + anchorName : 'עפ"× ×©× ××¢×××', + anchorId : 'עפ"× ××××× (ID) ××××× ×', + emailAddress : '×ת××ת ××××"×', + emailSubject : '× ××©× ×××××¢×', + emailBody : '×××£ ×××××¢×', + noAnchors : '(××× ×¢××× ×× ×××× ×× ×××£)', + noUrl : '×ש ××ק××× ×ת ×ת××ת ×ק×ש×ר (URL)', + noEmail : '×ש ××ק××× ×ת ×ת××ת ××××"×' + }, + + // Anchor dialog + anchor : + { + toolbar : '××ספת/ער××ת × ×§××ת ×¢××××', + menu : '××פ××× × × ×§××ת ×¢××××', + title : '××פ××× × × ×§××ת ×¢××××', + name : '×©× ×× ×§××ת ×¢××××', + errorName : '×ש ××ק××× ×©× ×× ×§××ת ×¢××××', + remove : '×××קת × ×§××ת ×¢××××' + }, + + // List style dialog + list: + { + numberedTitle : 'ת××× ×ת רש××× ×××ספרת', + bulletedTitle : 'ת××× ×ת רש××ת ת××××××', + type : 'ס××', + start : 'ת×××ת ×ספ×ר', + validateStartNumber :'ש×× ×ª×××ת ××ספ×ר ×××× ××××× ×ספר ש××.', + circle : '×¢×××× ×¨×ק', + disc : '×¢×××× ×××', + square : 'ר××××¢', + none : '×××', + notset : '<×× × ×§××¢>', + armenian : 'ספר×ת ×ר×× ××ת', + georgian : 'ספר×ת ××××ר×××ת (an, ban, gan ×××\')', + lowerRoman : 'ספ××¨× ×¨×××ת ×××ת××ת ק×× ×ת (i, ii, iii, iv, v ×××\')', + upperRoman : 'ספ××¨× ×¨××××ת ×××ת××ת ×××××ת (I, II, III, IV, V ×××\')', + lowerAlpha : '××ת××ת ×× ××××ת ק×× ×ת (a, b, c, d, e ×××\')', + upperAlpha : '××ת××ת ×× ××××ת ×××××ת (A, B, C, D, E ×××\')', + lowerGreek : '××ת××ת ×××× ××ת ק×× ×ת (alpha, beta, gamma ×××\')', + decimal : 'ספר×ת (1, 2, 3 ×××\')', + decimalLeadingZero : 'ספר×ת ×¢× 0 ××ת××× (01, 02, 03 ×××\')' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : '××פ×ש ××××פ×', + find : '××פ×ש', + replace : '×××פ×', + findWhat : '××פ×ש ××ר××ת:', + replaceWith : '××××¤× ×××ר××ת:', + notFoundMsg : '×××§×¡× ××××קש ×× × ×צ×.', + matchCase : '×××× × ××× ××ת××ת רש××ת ×ק×× ×ת (Case)', + matchWord : '×ת××× ××××× ×××××', + matchCyclic : '×ת××× ××××ר×ת', + replaceAll : '××××¤× ××× ××¢×××', + replaceSuccessMsg : '%1 ×קס××× ××××פ×.' + }, + + // Table Dialog + table : + { + toolbar : '××××', + title : '××פ××× × ××××', + menu : '××פ××× × ××××', + deleteTable : '××ק ××××', + rows : 'ש×ר×ת', + columns : '×¢××××ת', + border : '×××× ×ס×רת', + widthPx : 'פ×קס×××', + widthPc : '××××', + widthUnit : '××××ת ר×××', + cellSpace : '×ר××× ×ª×', + cellPad : 'ר×פ×× ×ª×', + caption : '××ת××', + summary : 'תקצ×ר', + headers : '××תר×ת', + headersNone : '×××', + headersColumn : '×¢×××× ×¨×ש×× ×', + headersRow : 'ש××¨× ×¨×ש×× ×', + headersBoth : '×©× ×××', + invalidRows : 'ש×× ×ספר ×ש×ר×ת ×××× ××××ת ×ספר ×××× × 0.', + invalidCols : 'ש×× ×ספר ××¢××××ת ×××× ××××ת ×ספר ×××× × 0.', + invalidBorder : 'ש×× ×××× ××ס×רת ×××× ××××ת ×ספר.', + invalidWidth : 'ש×× ×¨××× ××××× ×××× ××××ת ×ספר.', + invalidHeight : 'ש×× ×××× ××××× ×××× ××××ת ×ספר.', + invalidCellSpacing : 'ש×× ×¨×××× ×ת××× ×××× ××××ת ×ספר ×××××.', + invalidCellPadding : 'ש×× ×¨×פ×× ×ת××× ×××× ××××ת ×ספר ×××××.', + + cell : + { + menu : '××פ××× × ×ª×', + insertBefore : '××ספת ×ª× ××¤× ×', + insertAfter : '××ספת ×ª× ××ר×', + deleteCell : '×××קת ת×××', + merge : '××××× ×ª×××', + mergeRight : '××× ×××× ×', + mergeDown : '××× ××××', + splitHorizontal : 'פ×צ×× ×ª× ××פק×ת', + splitVertical : 'פ×צ×× ×ª× ×× ××ת', + title : 'ת××× ×ת ×ת×', + cellType : 'ס×× ×ת×', + rowSpan : '×ת××ת ×ש×ר×ת', + colSpan : '×ת××ת ×ת×××', + wordWrap : '×× ×עת ×××שת ש×ר×ת', + hAlign : '××ש×ר ××פק×', + vAlign : '××ש×ר ×× ××', + alignBaseline : 'ש×רת ×ס×ס', + bgColor : 'צ××¢ רקע', + borderColor : 'צ××¢ ×ס×רת', + data : '××××¢', + header : '××תרת', + yes : '××', + no : '××', + invalidWidth : 'ש×× ×¨××× ××ª× ×××× ××××ת ×ספר.', + invalidHeight : 'ש×× ×××× ××ª× ×××× ××××ת ×ספר.', + invalidRowSpan : 'ש×× ×ת××ת ×ש×ר×ת ×××× ××××ת ×ספר ש××.', + invalidColSpan : 'ש×× ×ת××ת ××¢××××ת ×××× ××××ת ×ספר ש××.', + chooseColor : '××ר' + }, + + row : + { + menu : 'ש×ר×', + insertBefore : '××ספת ש××¨× ××¤× ×', + insertAfter : '××ספת ש××¨× ××ר×', + deleteRow : '×××קת ש×ר×ת' + }, + + column : + { + menu : '×¢××××', + insertBefore : '××ספת ×¢×××× ××¤× ×', + insertAfter : '××ספת ×¢×××× ××ר×', + deleteColumn : '×××קת ×¢××××ת' + } + }, + + // Button Dialog. + button : + { + title : '××פ××× × ×פת×ר', + text : '××§×¡× (ער×)', + type : 'ס××', + typeBtn : '×פת×ר', + typeSbm : 'ש××××', + typeRst : '××פ×ס' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : '××פ××× × ×ª××ת ס××××', + radioTitle : '××פ××× × ×××¦× ×פשר×××ת', + value : 'ער×', + selected : '×ס×××' + }, + + // Form Dialog. + form : + { + title : '××פ×× × ××פס', + menu : '××פ×× × ××פס', + action : 'ש×× ××', + method : 'ס×× ×©××××', + encoding : 'ק××××' + }, + + // Select Field Dialog. + select : + { + title : '××פ××× × ×©×× ×××ר×', + selectInfo : '××××¢', + opAvail : '×פשר×××ת ×××× ×ת', + value : 'ער×', + size : '××××', + lines : 'ש×ר×ת', + chkMulti : '××פש×ר ×××ר×ת ×ר×××ת', + opText : '×קס×', + opValue : 'ער×', + btnAdd : '××ספ×', + btnModify : 'ש×× ××', + btnUp : '×××¢××', + btnDown : '××××', + btnSetValue : 'ק×××¢× ××ר×רת ××××', + btnDelete : '×××ק×' + }, + + // Textarea Dialog. + textarea : + { + title : '××פ××× × ××××ר ×קס×', + cols : '×¢××××ת', + rows : 'ש×ר×ת' + }, + + // Text Field Dialog. + textfield : + { + title : '××פ××× × ×©×× ×קס×', + name : 'ש×', + value : 'ער×', + charWidth : 'ר××× ××¤× ×ª××××', + maxChars : '×קס×××× ×ª××××', + type : 'ס××', + typeText : '×קס×', + typePass : 'ס×ס××' + }, + + // Hidden Field Dialog. + hidden : + { + title : '××פ×× × ×©×× ××××', + name : 'ש×', + value : 'ער×' + }, + + // Image Dialog. + image : + { + title : '××פ××× × ×ת××× ×', + titleButton : '××פ×× × ×פת×ר ת××× ×', + menu : 'ת××× ×ת ×ת××× ×', + infoTab : '××××¢ ×¢× ×ת××× ×', + btnUpload : 'ש×××× ×שרת', + upload : '××¢×××', + alt : '××§×¡× ×××פ×', + lockRatio : '× ×¢××ת ×××ס', + resetSize : '××פ×ס ×××××', + border : '×ס×רת', + hSpace : '×ר××× ××פק×', + vSpace : '×ר××× ×× ××', + alertUrl : '×ש ××ק××× ×ת ×ת××ת ×ת××× ×', + linkTab : 'ק×ש×ר', + button2Img : '××× ××פ×× ×ת ת××× ×ª ××פת×ר ×ת××× × ×¤×©×××?', + img2Button : '××× ××פ×× ×ת ×ת××× × ××פת×ר ת××× ×?', + urlMissing : '×ת××ת ×ת××× × ×סר×.', + validateBorder : 'ש×× ××ס×רת ×××× ××××ת ×ספר ש××.', + validateHSpace : 'ש×× ××ר××× ××××¤×§× ×××× ××××ת ×ספר ש××.', + validateVSpace : 'ש×× ××ר××× ××× ×× ×××× ××××ת ×ספר ש××.' + }, + + // Flash Dialog + flash : + { + properties : '××פ××× × ×¤××ש', + propertiesTab : '××פ××× ××', + title : '××פ×× × ×¤××ש', + chkPlay : '× ×××× ×××××××', + chkLoop : '×××××', + chkMenu : '×פשר תפר×× ×¤××ש', + chkFull : '×פשר ×××× ×××', + scale : '××××', + scaleAll : '××¦× ×××', + scaleNoBorder : '××× ×××××ת', + scaleFit : '×ת××× ××ש××ת', + access : '××שת סקר×פ×', + accessAlways : 'ת×××', + accessSameDomain: '×××××× ×××', + accessNever : '××£ פע×', + alignAbsBottom : '×ת×ת×ת ×××ס×××××ת', + alignAbsMiddle : '×ר××× ××ס×××××', + alignBaseline : '××§× ×ת×ת×ת', + alignTextTop : '×ר×ש ××קס×', + quality : '××××ת', + qualityBest : '××¢×××', + qualityHigh : '×××××', + qualityAutoHigh : '××××× ×××××××ת', + qualityMedium : '×××צעת', + qualityAutoLow : '× ×××× ×××××××ת', + qualityLow : '× ××××', + windowModeWindow: '××××', + windowModeOpaque: '××××', + windowModeTransparent : 'שק××£', + windowMode : '××¦× ××××', + flashvars : '××©×ª× ×× ×פ××ש', + bgcolor : 'צ××¢ רקע', + hSpace : '×ר××× ××פק×', + vSpace : '×ר××× ×× ××', + validateSrc : '×ש ××ק××× ×ת ×ת××ת סר××× ×פ××ש (URL)', + validateHSpace : '××ר××× ××××¤×§× ×××× ××××ת ×ספר.', + validateVSpace : '××ר××× ××× ×× ×××× ××××ת ×ספר.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : '×××קת ×××ת', + title : '×××קת ×××ת', + notAvailable : '×× × ××¦× ×©×ר×ת ××××.', + errorLoading : 'ש×××× ×××¢××ת ×ש×ר×ת: %s.', + notInDic : '×× × ××¦× ××××××', + changeTo : 'ש×× ×× ×', + btnIgnore : '×תע×××ת', + btnIgnoreAll : '×תע×××ת ××××', + btnReplace : '×××פ×', + btnReplaceAll : '×××פת ×××', + btnUndo : '×××ר×', + noSuggestions : '- ××× ×צע×ת -', + progress : '×××ק ××××ת ×ת×××× ×××ק×....', + noMispell : '×××ק×ת ×××ת ×סת××××: ×× × ×צ×× ×©××××ת ×ת××', + noChanges : '×××ק×ת ×××ת ×סת××××: ×× ×©×× ×ª× ××£ ××××', + oneChange : '×××ק×ת ×××ת ×סת××××: ש×× ×ª× ×××× ××ת', + manyChanges : '×××ק×ת ×××ת ×סת××××: %1 ××××× ×©×× ×', + ieSpellDownload : '×××ק ××××ת ×× ××תק×, ××× ×××ר×××?' + }, + + smiley : + { + toolbar : 'ס×××××', + title : '××ספת ס×××××', + options : '×פשר×××ת ס××××××' + }, + + elementsPath : + { + eleLabel : '×¢×¥ ××××× ×××', + eleTitle : '%1 ×××× ×' + }, + + numberedlist : 'רש××× ×××ספרת', + bulletedlist : 'רש××ת × ×§×××ת', + indent : '××××ת ××××', + outdent : '×ק×× ×ª ××××', + + justify : + { + left : '××ש×ר ×ש×××', + center : '×ר×××', + right : '××ש×ר ×××××', + block : '××ש×ר ×ש×××××' + }, + + blockquote : '×××ק צ××××', + + clipboard : + { + title : '×××ק×', + cutError : '×××ר×ת ×××××× ××פ××¤× ×©×× ×× ××פשר×ת ××¢××¨× ××צע פע×××ת ××××¨× ××××××××ת. ×ש ××שת×ש ××ק××ת ××©× ×× (Ctrl/Cmd+X).', + copyError : '×××ר×ת ×××××× ××פ××¤× ×©×× ×× ××פשר×ת ××¢××¨× ××צע פע×××ת ××¢×ª×§× ××××××××ת. ×ש ××שת×ש ××ק××ת ××©× ×× (Ctrl/Cmd+C).', + pasteMsg : '× × ×××××ק ×ת×× ×ק××¤×¡× ×××צע×ת (<b>Ctrl/Cmd+V</b>) ××××××¥ ×¢× <b>××ש×ר</b>.', + securityMsg : '×¢×§× ×××ר×ת ××××× ××פ×פ×, ×× × ××ª× ××שת ×× ××× ××××ר×× (Clipboard) ×צ××¨× ×ש×ר×. × × ×××××ק ש×× ××××× ××.', + pasteArea : '××××ר ×××ק×' + }, + + pastefromword : + { + confirmCleanup : '× ×¨×× ×××§×¡× ×©××××× ×ª× ×××××ק ×ק××¨× ×ק×××¥ ××ר×. ××× ×רצ×× × ×× ×§×ת ×××ª× ××¨× ××××ק×?', + toolbar : '××××§× ×-Word', + title : '××××§× ×-Word', + error : '×× × ××ª× ××× ×× ×§×ת ×ת ×××××¢ ××©× ×ª×§×× ×¤× ×××ת.' + }, + + pasteText : + { + button : '××××§× ×××§×¡× ×¤×©××', + title : '××××§× ×××§×¡× ×¤×©××' + }, + + templates : + { + button : 'ת×× ××ת', + title : 'ת×××ת ת×××', + options : '×פשר×××ת ×ת×× ××ת', + insertOption : '×××פת ת××× ××ש×', + selectPromptMsg : '×ש ××××ר ת×× ×ת ×פת××× ××¢×ר×.<br />×ת××× ××ק××¨× ×××ק:', + emptyListMsg : '(×× ×××××¨× ×ª×× ××ת)' + }, + + showBlocks : '×צ×ת ×××ק××', + + stylesCombo : + { + label : 'ס×× ××', + panelTitle : 'ס×× ×× ×ת פ×ר××', + panelTitle1 : 'ס×× ×× ×ת ×××ק', + panelTitle2 : 'ס×× ×× ×ת רצף', + panelTitle3 : 'ס×× ×× ×ת ×××××ק×' + }, + + format : + { + label : '×¢×צ××', + panelTitle : '×¢×צ××', + + tag_p : '× ×ר×××', + tag_pre : 'ק××', + tag_address : '×ת××ת', + tag_h1 : '××תרת', + tag_h2 : '××תרת 2', + tag_h3 : '××תרת 3', + tag_h4 : '××תרת 4', + tag_h5 : '××תרת 5', + tag_h6 : '××תרת 6', + tag_div : '× ×ר××× (DIV)' + }, + + div : + { + title : '×צ×רת ×××× (Div)', + toolbar : '×צ×רת ×××× (Div)', + cssClassInputLabel : '×××קת ×¢×צ××', + styleSelectLabel : 'ס×× ××', + IdInputLabel : '×××× (ID)', + languageCodeInputLabel : 'ק×× ×©×¤×', + inlineStyleInputLabel : 'ס×× ×× ×¤× ×××', + advisoryTitleInputLabel : '××תרת ××צעת', + langDirLabel : '××××× ×©×¤×', + langDirLTRLabel : 'ש××× ××××× (LTR)', + langDirRTLLabel : '×××× ×ש××× (RTL)', + edit : 'ער××ת ×××× (Div)', + remove : '×סרת ×××× (Div)' + }, + + iframe : + { + title : '××פ××× × ×××× ×¤× ××× (iframe)', + toolbar : '×××× ×¤× ××× (iframe)', + noUrl : '×ש ×××× ×ס ×ת××ת ×××××.', + scrolling : '×פשר ×¤×¡× ×××××', + border : '×ר×× ×ס×רת ×××××' + }, + + font : + { + label : '××פ×', + voiceLabel : '××פ×', + panelTitle : '××פ×' + }, + + fontSize : + { + label : '××××', + voiceLabel : '××××', + panelTitle : '××××' + }, + + colorButton : + { + textColorTitle : 'צ××¢ ×קס×', + bgColorTitle : 'צ××¢ רקע', + panelTitle : 'צ××¢××', + auto : '×××××××', + more : 'צ××¢×× × ×ספ××...' + }, + + colors : + { + '000' : 'ש××ר', + '800000' : 'ס××× ×××', + '8B4513' : '××× ×××ר', + '2F4F4F' : '×פ×ר צפ××', + '008080' : '××××-×ר×ק', + '000080' : '××××-ס×××', + '4B0082' : '××× ××××', + '696969' : '×פ×ר ××¢×××¢×', + 'B22222' : '××××-×××', + 'A52A2A' : '×××', + 'DAA520' : '×ת×× ×××', + '006400' : '×ר×ק ×××', + '40E0D0' : '××רק××', + '0000CD' : '×××× ××× ×× ×', + '800080' : 'ס×××', + '808080' : '×פ×ר', + 'F00' : '××××', + 'FF8C00' : '×ת×× ×××', + 'FFD700' : '×××', + '008000' : '×ר×ק', + '0FF' : 'צ×××', + '00F' : '××××', + 'EE82EE' : 'ס××××', + 'A9A9A9' : '×פ×ר ×××', + 'FFA07A' : '×ת××-××ר××', + 'FFA500' : '×ת××', + 'FFFF00' : 'צ×××', + '00FF00' : '××××', + 'AFEEEE' : '××רק×× ×××ר', + 'ADD8E6' : '×××× ×××ר', + 'DDA0DD' : 'ש×××£', + 'D3D3D3' : '×פ×ר ×××ר', + 'FFF0F5' : '××× ×ר ×ס××ק', + 'FAEBD7' : '××× ×¢×ª×ק', + 'FFFFE0' : 'צ××× ×××ר', + 'F0FFF0' : '×× ××ש', + 'F0FFFF' : 'ת××ת', + 'F0F8FF' : '×××× ××פת ×××', + 'E6E6FA' : '××× ×ר', + 'FFF' : '×××' + }, + + scayt : + { + title : '×××קת ×××ת ×××× ×ת××× (SCAYT)', + opera_title : '×× ×××× ××פ××¤× ××פר×', + enable : '×פשר SCAYT', + disable : '××× SCAYT', + about : '××××ת SCAYT', + toggle : 'ש×× ×× SCAYT', + options : '×פשר×××ת', + langs : 'שפ×ת', + moreSuggestions : '×צע×ת × ×ספ×ת', + ignore : '×תע×××ת', + ignoreAll : '×תע×××ת ××××', + addWord : '××ספת ××××', + emptyDic : '×ש ××××ר ×××××.', + + optionsTab : '×פשר×××ת', + allCaps : '×תע×× ×××××× ×©×× ××ת××ת××× ×××××ת', + ignoreDomainNames : '×תע×× ×ש××ת ×ת××', + mixedCase : '×תע×× ×××××× ×¢× ××ת××ת ×××××ת ×ק×× ×ת ××××', + mixedWithDigits : '×תע×× ×××××× ×¢× ×ספר××', + + languagesTab : 'שפ×ת', + + dictionariesTab : '×××××', + dic_field_name : '×©× ××××××', + dic_create : '×צ×ר×', + dic_restore : 'ש×××ר', + dic_delete : '×××ק×', + dic_rename : 'ש×× ×× ×©×', + dic_info : '××ת××× ××××× ××שת×ש ×××××¡× ××¢××××, ×× ×¢××××ת ××××××ת ××ק××. ××שר ×××××× ××××¢ ××××× ×× ××× ××× × ×××× ××ת×××¡× ××¢××××, ×××××× ×¦×¨×× ××ת×××¡× ××©×¨×ª× ×. ××©× ×× ×¢××× ×תת ×©× ××××××. ×× ××ר ×ש ×× ××××× ××××ס×, ×ש ×××× ×ס ×ת ש×× ××××××¥ ×¢× ×פת×ר ×ש×××ר.', + + aboutTab : '××××ת' + }, + + about : + { + title : '××××ת CKEditor', + dlgTitle : '××××ת CKEditor', + help : '×××× ×¡× ×$1 ××¢×ר×.', + userGuide : '××ר×× ××שת×ש ×©× CKEditor', + moreInfo : '×××××¢ × ×סף ××§×¨× ×××ª×¨× ×:', + copy : 'Copyright © $1. ×× ××××××ת ש××ר×ת.' + }, + + maximize : '××××× ××קס××××', + minimize : '×ק×× × ×××× ××××', + + fakeobjects : + { + anchor : '×¢×××', + flash : 'סר××× ×¤××ש', + iframe : '×××× ×¤× ××× (iframe)', + hiddenfield : 'ש×× ××××', + unknown : '××××××§× ×× ××××¢' + }, + + resize : '×ש ××ר×ר ×××× ××©× ×ת ×ת ×××××', + + colordialog : + { + title : '×××רת צ××¢', + options : '×פשר×××ת צ××¢', + highlight : 'ס××××', + selected : '×××ר×', + clear : '× ×ק××' + }, + + toolbarCollapse : '×××¢×ר סר×× ××××', + toolbarExpand : '×ר××ת סר×× ××××', + + toolbarGroups : + { + document : '×ס××', + clipboard : '××× ××××ר×× (Clipboard)/×¦×¢× ××ר××', + editing : 'ער×××', + forms : '×פס××', + basicstyles : '×¢×צ×× ×ס×ס×', + paragraph : 'פסק×', + links : 'ק×ש×ר××', + insert : '××× ×¡×', + styles : '×¢×צ××', + colors : 'צ××¢××', + tools : '××××' + }, + + bidi : + { + ltr : '××××× ××§×¡× ×ש××× ××××× (LTR)', + rtl : '××××× ××§×¡× ××××× ×ש××× (RTL)' + }, + + docprops : + { + label : '××פ××× × ×ס××', + title : '××פ××× × ×ס××', + design : '×¢×צ××', + meta : 'ת×× Meta', + chooseColor : '×××ר×', + other : '××ר...', + docTitle : '××תרת ×¢×××', + charset : 'ק×××× ×ª××××', + charsetOther : 'ק×××× ×ª×××× ××ר', + charsetASCII : 'ASCII', + charsetCE : '×ר×× ××ר×פ××', + charsetCT : 'ס×× × ×ס××¨×ª× (Big5)', + charsetCR : 'ק×ר×××', + charsetGR : '×××× ×', + charsetJP : '××¤× ×', + charsetKR : 'ק×ר××× ×', + charsetTR : '××רק×', + charsetUN : '××× ×ק×× (UTF-8)', + charsetWE : '××¢×¨× ××ר×פ××', + docType : '××תר ס×× ×ס××', + docTypeOther : '××תר ס×× ×ס×× ××ר', + xhtmlDec : '×××× ××ר××ת XHTML', + bgColor : 'צ××¢ רקע', + bgImage : '×ת××ת ×©× ×ª××× ×ª רקע', + bgFixed : 'רקע ×× × ××× (צ×××)', + txtColor : 'צ××¢ ×קס×', + margin : '×ר×××× ×¢×××', + marginTop : '×¢××××', + marginLeft : 'ש××××', + marginRight : '××× ×', + marginBottom : 'ת×ת××', + metaKeywords : '××××ת ××¤×ª× ×©× ××ס×× (××פר××ת ×פס×ק)', + metaDescription : 'ת×××ר ××ס××', + metaAuthor : '×××ר/ת', + metaCopyright : '×××××ת ××צר××', + previewHtml : '<p>××× <strong>××§×¡× ×××××</strong>. ×ת/× ×שת×ש/ת ×<a href="javascript:void(0)">CKEditor</a>.</p>' + } +}; diff --git a/_source/lang/hi.js b/_source/lang/hi.js new file mode 100644 index 0000000..0f56a8c --- /dev/null +++ b/_source/lang/hi.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Hindi language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['hi'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'सà¥à¤°à¥à¤¸', + newPage : 'नया पà¥à¤', + save : 'सà¥à¤µ', + preview : 'पà¥à¤°à¥à¤µà¥à¤¯à¥', + cut : 'à¤à¤', + copy : 'à¤à¥à¤ªà¥', + paste : 'पà¥à¤¸à¥à¤', + print : 'पà¥à¤°à¤¿à¤¨à¥à¤', + underline : 'रà¥à¤à¤¾à¤à¤à¤£', + bold : 'बà¥à¤²à¥à¤¡', + italic : 'à¤à¤à¥à¤²à¤¿à¤', + selectAll : 'सब सॠलॠà¤à¥à¤ à¤à¤°à¥à¤', + removeFormat : 'à¥à¥à¤°à¥à¤®à¥à¤ हà¤à¤¾à¤¯à¥à¤', + strike : 'सà¥à¤à¥à¤°à¤¾à¤à¤ थà¥à¤°à¥', + subscript : 'ठधà¥à¤²à¥à¤', + superscript : 'ठà¤à¤¿à¤²à¥à¤', + horizontalrule : 'हà¥à¤°à¤¿à¥à¥à¤¨à¥à¤à¤² रà¥à¤à¤¾ à¤à¤¨à¥à¤¸à¤°à¥à¤ à¤à¤°à¥à¤', + pagebreak : 'पà¥à¤ बà¥à¤°à¥à¤ à¤à¤¨à¥à¤¸à¤°à¥à¤à¥ à¤à¤°à¥à¤', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'लिà¤à¤ हà¤à¤¾à¤¯à¥à¤', + undo : 'ठनà¥à¤¡à¥', + redo : 'रà¥à¤¡à¥', + + // Common messages and labels. + common : + { + browseServer : 'सरà¥à¤µà¤° बà¥à¤°à¤¾à¤à¥ à¤à¤°à¥à¤', + url : 'URL', + protocol : 'पà¥à¤°à¥à¤à¥à¤à¥à¤²', + upload : 'ठपलà¥à¤¡', + uploadSubmit : 'à¤à¤¸à¥ सरà¥à¤µà¤° à¤à¥ à¤à¥à¤à¥à¤', + image : 'तसà¥à¤µà¥à¤°', + flash : 'à¥à¥à¤²à¥à¤¶', + form : 'à¥à¥à¤°à¥à¤®', + checkbox : 'à¤à¥ ठबà¥à¤à¥à¤¸', + radio : 'रà¥à¤¡à¤¿à¤ बà¤à¤¨', + textField : 'à¤à¥à¤à¥à¤¸à¥à¤ à¥à¥à¤²à¥à¤¡', + textarea : 'à¤à¥à¤à¥à¤¸à¥à¤ à¤à¤°à¤¿à¤¯à¤¾', + hiddenField : 'à¤à¥à¤ªà¥à¤¤ à¥à¥à¤²à¥à¤¡', + button : 'बà¤à¤¨', + select : 'à¤à¥à¤¨à¤¾à¤µ à¥à¥à¤²à¥à¤¡', + imageButton : 'तसà¥à¤µà¥à¤° बà¤à¤¨', + notSet : '<सॠठनहà¥à¤>', + id : 'Id', + name : 'नाम', + langDir : 'à¤à¤¾à¤·à¤¾ लिà¤à¤¨à¥ à¤à¥ दिशा', + langDirLtr : 'बायà¥à¤ सॠदायà¥à¤ (LTR)', + langDirRtl : 'दायà¥à¤ सॠबायà¥à¤ (RTL)', + langCode : 'à¤à¤¾à¤·à¤¾ à¤à¥à¤¡', + longDescr : 'ठधिठविवरण à¤à¥ लिठURL', + cssClass : 'सà¥à¤à¤¾à¤à¤²-शà¥à¤ à¤à¥à¤²à¤¾à¤¸', + advisoryTitle : 'परामरà¥à¤¶ शà¥à¤°à¥à¤¶à¤', + cssStyle : 'सà¥à¤à¤¾à¤à¤²', + ok : 'ठà¥à¤ हà¥', + cancel : 'रदà¥à¤¦ à¤à¤°à¥à¤', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'सामानà¥à¤¯', + advancedTab : 'à¤à¤¡à¥à¤µà¤¾à¤¨à¥à¤¸à¥à¤¡', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'à¤à¥à¥à¤¾à¤', + height : 'à¤à¤à¤à¤¾à¤', + align : 'à¤à¤²à¤¾à¤à¤¨', + alignLeft : 'दायà¥à¤', + alignRight : 'दायà¥à¤', + alignCenter : 'बà¥à¤ मà¥à¤', + alignTop : 'à¤à¤ªà¤°', + alignMiddle : 'मधà¥à¤¯', + alignBottom : 'नà¥à¤à¥', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'विशà¥à¤· à¤à¤°à¥ à¤à¥à¤à¤° à¤à¤¨à¥à¤¸à¤°à¥à¤ à¤à¤°à¥à¤', + title : 'विशà¥à¤· à¤à¤°à¥ à¤à¥à¤à¤° à¤à¥à¤¨à¥à¤', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'लिà¤à¤ à¤à¤¨à¥à¤¸à¤°à¥à¤/सà¤à¤ªà¤¾à¤¦à¤¨', + other : '<ठनà¥à¤¯>', + menu : 'लिà¤à¤ सà¤à¤ªà¤¾à¤¦à¤¨', + title : 'लिà¤à¤', + info : 'लिà¤à¤ ', + target : 'à¤à¤¾à¤°à¥à¤à¥à¤', + upload : 'ठपलà¥à¤¡', + advanced : 'à¤à¤¡à¥à¤µà¤¾à¤¨à¥à¤¸à¥à¤¡', + type : 'लिà¤à¤ पà¥à¤°à¤à¤¾à¤°', + toUrl : 'URL', // MISSING + toAnchor : 'à¤à¤¸ पà¥à¤ à¤à¤¾ à¤à¤à¤à¤°', + toEmail : 'à¤-मà¥à¤²', + targetFrame : '<à¥à¥à¤°à¥à¤®>', + targetPopup : '<पà¥à¤ª-ठप विनà¥à¤¡à¥>', + targetFrameName : 'à¤à¤¾à¤°à¥à¤à¥à¤ à¥à¥à¤°à¥à¤® à¤à¤¾ नाम', + targetPopupName : 'पà¥à¤ª-ठप विनà¥à¤¡à¥ à¤à¤¾ नाम', + popupFeatures : 'पà¥à¤ª-ठप विनà¥à¤¡à¥ à¥à¥à¤à¤°à¥à¤¸', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'सà¥à¤à¥à¤à¤¸ बार', + popupLocationBar: 'लà¥à¤à¥à¤¶à¤¨ बार', + popupToolbar : 'à¤à¥à¤² बार', + popupMenuBar : 'मॠनà¥à¤¯à¥ बार', + popupFullScreen : 'à¥à¥à¤² सà¥à¤à¥à¤°à¥à¤¨ (IE)', + popupScrollBars : 'सà¥à¤à¥à¤°à¥à¤² बार', + popupDependent : 'डिपà¥à¤¨à¥à¤¡à¥ नà¥à¤ (Netscape)', + popupLeft : 'बायà¥à¤ तरफ', + popupTop : 'दायà¥à¤ तरफ', + id : 'Id', // MISSING + langDir : 'à¤à¤¾à¤·à¤¾ लिà¤à¤¨à¥ à¤à¥ दिशा', + langDirLTR : 'बायà¥à¤ सॠदायà¥à¤ (LTR)', + langDirRTL : 'दायà¥à¤ सॠबायà¥à¤ (RTL)', + acccessKey : 'à¤à¤à¥à¤¸à¥ स à¤à¥', + name : 'नाम', + langCode : 'à¤à¤¾à¤·à¤¾ लिà¤à¤¨à¥ à¤à¥ दिशा', + tabIndex : 'à¤à¥à¤¬ à¤à¤¨à¥à¤¡à¥ à¤à¥à¤¸', + advisoryTitle : 'परामरà¥à¤¶ शà¥à¤°à¥à¤¶à¤', + advisoryContentType : 'परामरà¥à¤¶ à¤à¤¨à¥à¤à¥ नà¥à¤ पà¥à¤°à¤à¤¾à¤°', + cssClasses : 'सà¥à¤à¤¾à¤à¤²-शà¥à¤ à¤à¥à¤²à¤¾à¤¸', + charset : 'लिà¤à¤ रिसà¥à¤°à¥à¤¸ à¤à¤°à¥ à¤à¥à¤à¤° सॠà¤', + styles : 'सà¥à¤à¤¾à¤à¤²', + rel : 'Relationship', // MISSING + selectAnchor : 'à¤à¤à¤à¤° à¤à¥à¤¨à¥à¤', + anchorName : 'à¤à¤à¤à¤° नाम सà¥', + anchorId : 'à¤à¤²à¥à¤®à¥ नà¥à¤ Id सà¥', + emailAddress : 'à¤-मà¥à¤² पता', + emailSubject : 'सà¤à¤¦à¥à¤¶ विषय', + emailBody : 'सà¤à¤¦à¥à¤¶', + noAnchors : '(डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ मà¥à¤ à¤à¤à¤à¤°à¥à¤¸ à¤à¥ सà¤à¤à¥à¤¯à¤¾)', + noUrl : 'लिà¤à¤ URL à¤à¤¾à¤à¤ª à¤à¤°à¥à¤', + noEmail : 'à¤-मà¥à¤² पता à¤à¤¾à¤à¤ª à¤à¤°à¥à¤' + }, + + // Anchor dialog + anchor : + { + toolbar : 'à¤à¤à¤à¤° à¤à¤¨à¥à¤¸à¤°à¥à¤/सà¤à¤ªà¤¾à¤¦à¤¨', + menu : 'à¤à¤à¤à¤° पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + title : 'à¤à¤à¤à¤° पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + name : 'à¤à¤à¤à¤° à¤à¤¾ नाम', + errorName : 'à¤à¤à¤à¤° à¤à¤¾ नाम à¤à¤¾à¤à¤ª à¤à¤°à¥à¤', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'à¤à¥à¤à¥à¤ à¤à¤° बदलà¥à¤', + find : 'à¤à¥à¤à¥à¤', + replace : 'रà¥à¤ªà¥à¤²à¥à¤¸', + findWhat : 'यह à¤à¥à¤à¥à¤:', + replaceWith : 'à¤à¤¸à¤¸à¥ रिपà¥à¤²à¥à¤¸ à¤à¤°à¥à¤:', + notFoundMsg : 'à¤à¤ªà¤à¥ दà¥à¤µà¤¾à¤°à¤¾ दिया à¤à¤¯à¤¾ à¤à¥à¤à¥à¤¸à¥à¤ नहà¥à¤ मिला', + matchCase : 'à¤à¥à¤¸ मिलायà¥à¤', + matchWord : 'पà¥à¤°à¤¾ शबà¥à¤¦ मिलायà¥à¤', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'सà¤à¥ रिपà¥à¤²à¥à¤¸ à¤à¤°à¥à¤', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'à¤à¥à¤¬à¤²', + title : 'à¤à¥à¤¬à¤² पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + menu : 'à¤à¥à¤¬à¤² पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + deleteTable : 'à¤à¥à¤¬à¤² डिलà¥à¤ à¤à¤°à¥à¤', + rows : 'पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤', + columns : 'à¤à¤¾à¤²à¤®', + border : 'बà¥à¤°à¥à¤¡à¤° साà¤à¥', + widthPx : 'पिà¤à¥à¤¸à¥à¤²', + widthPc : 'पà¥à¤°à¤¤à¤¿à¤¶à¤¤', + widthUnit : 'width unit', // MISSING + cellSpace : 'सà¥à¤² ठà¤à¤¤à¤°', + cellPad : 'सà¥à¤² पà¥à¤¡à¤¿à¤à¤', + caption : 'शà¥à¤°à¥à¤·à¤', + summary : 'साराà¤à¤¶', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'à¤à¤¾à¤¨à¤¾', + insertBefore : 'पहलॠसà¥à¤² डालà¥à¤', + insertAfter : 'बाद मà¥à¤ सà¥à¤² डालà¥à¤', + deleteCell : 'सà¥à¤² डिलà¥à¤ à¤à¤°à¥à¤', + merge : 'सà¥à¤² मिलायà¥à¤', + mergeRight : 'बाà¤à¤¯à¤¾ विलय', + mergeDown : 'नà¥à¤à¥ विलय à¤à¤°à¥à¤', + splitHorizontal : 'सà¥à¤² à¤à¥ à¤à¥à¤·à¥à¤¤à¤¿à¤ सà¥à¤¥à¤¿à¤¤à¤¿ मà¥à¤ विà¤à¤¾à¤à¤¿à¤¤ à¤à¤°à¥à¤', + splitVertical : 'सà¥à¤² à¤à¥ लमà¥à¤¬à¤¾à¤à¤¾à¤° मà¥à¤ विà¤à¤¾à¤à¤¿à¤¤ à¤à¤°à¥à¤', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'पà¤à¤à¥à¤¤à¤¿', + insertBefore : 'पहलॠपà¤à¤à¥à¤¤à¤¿ डालà¥à¤', + insertAfter : 'बाद मà¥à¤ पà¤à¤à¥à¤¤à¤¿ डालà¥à¤', + deleteRow : 'पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤ डिलà¥à¤ à¤à¤°à¥à¤' + }, + + column : + { + menu : 'à¤à¤¾à¤²à¤®', + insertBefore : 'पहलॠà¤à¤¾à¤²à¤® डालà¥à¤', + insertAfter : 'बाद मà¥à¤ à¤à¤¾à¤²à¤® डालà¥à¤', + deleteColumn : 'à¤à¤¾à¤²à¤® डिलà¥à¤ à¤à¤°à¥à¤' + } + }, + + // Button Dialog. + button : + { + title : 'बà¤à¤¨ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + text : 'à¤à¥à¤à¥à¤¸à¥à¤ (वà¥à¤²à¥à¤¯à¥)', + type : 'पà¥à¤°à¤à¤¾à¤°', + typeBtn : 'बà¤à¤¨', + typeSbm : 'सबà¥à¤®à¤¿à¤', + typeRst : 'रिसà¥à¤' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'à¤à¥ ठबà¥à¤à¥à¤¸ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + radioTitle : 'रà¥à¤¡à¤¿à¤ बà¤à¤¨ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + value : 'वà¥à¤²à¥à¤¯à¥', + selected : 'सॠलॠà¤à¥à¤à¥ ड' + }, + + // Form Dialog. + form : + { + title : 'à¥à¥à¤°à¥à¤® पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + menu : 'à¥à¥à¤°à¥à¤® पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + action : 'à¤à¥à¤°à¤¿à¤¯à¤¾', + method : 'तरà¥à¤à¤¾', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'à¤à¥à¤¨à¤¾à¤µ à¥à¥à¤²à¥à¤¡ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + selectInfo : 'सà¥à¤à¤¨à¤¾', + opAvail : 'à¤à¤ªà¤²à¤¬à¥à¤§ विà¤à¤²à¥à¤ª', + value : 'वà¥à¤²à¥à¤¯à¥', + size : 'साà¤à¥', + lines : 'पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤', + chkMulti : 'à¤à¤ सॠà¤à¥à¤¯à¤¾à¤¦à¤¾ विà¤à¤²à¥à¤ª à¤à¥à¤¨à¤¨à¥ दà¥à¤', + opText : 'à¤à¥à¤à¥à¤¸à¥à¤', + opValue : 'वà¥à¤²à¥à¤¯à¥', + btnAdd : 'à¤à¥à¥à¥à¤', + btnModify : 'बदलà¥à¤', + btnUp : 'à¤à¤ªà¤°', + btnDown : 'नà¥à¤à¥', + btnSetValue : 'à¤à¥à¤¨à¥ à¤à¤ वà¥à¤²à¥à¤¯à¥ सॠठà¤à¤°à¥à¤', + btnDelete : 'डिलà¥à¤' + }, + + // Textarea Dialog. + textarea : + { + title : 'à¤à¥à¤à¥à¤¸à¥à¤¤ à¤à¤°à¤¿à¤¯à¤¾ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + cols : 'à¤à¤¾à¤²à¤®', + rows : 'पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤' + }, + + // Text Field Dialog. + textfield : + { + title : 'à¤à¥à¤à¥à¤¸à¥à¤ à¥à¥à¤²à¥à¤¡ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + name : 'नाम', + value : 'वà¥à¤²à¥à¤¯à¥', + charWidth : 'à¤à¤°à¥ à¤à¥à¤à¤° à¤à¥ à¤à¥à¥à¤¾à¤', + maxChars : 'ठधिà¤à¤¤à¤® à¤à¤°à¥ à¤à¥à¤à¤°', + type : 'à¤à¤¾à¤à¤ª', + typeText : 'à¤à¥à¤à¥à¤¸à¥à¤', + typePass : 'पासà¥à¤µà¤°à¥à¤¡' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'à¤à¥à¤ªà¥à¤¤ à¥à¥à¤²à¥à¤¡ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + name : 'नाम', + value : 'वà¥à¤²à¥à¤¯à¥' + }, + + // Image Dialog. + image : + { + title : 'तसà¥à¤µà¥à¤° पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + titleButton : 'तसà¥à¤µà¥à¤° बà¤à¤¨ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + menu : 'तसà¥à¤µà¥à¤° पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + infoTab : 'तसà¥à¤µà¥à¤° à¤à¥ à¤à¤¾à¤¨à¤à¤¾à¤°à¥', + btnUpload : 'à¤à¤¸à¥ सरà¥à¤µà¤° à¤à¥ à¤à¥à¤à¥à¤', + upload : 'ठपलà¥à¤¡', + alt : 'वà¥à¤à¤²à¥à¤ªà¤¿à¤ à¤à¥à¤à¥à¤¸à¥à¤', + lockRatio : 'लà¥à¤ ठनà¥à¤ªà¤¾à¤¤', + resetSize : 'रà¥à¤¸à¥ ठसाà¤à¥', + border : 'बà¥à¤°à¥à¤¡à¤°', + hSpace : 'हà¥à¤°à¤¿à¥à¥à¤¨à¥à¤à¤² सà¥à¤ªà¥à¤¸', + vSpace : 'वरà¥à¤à¤¿à¤à¤² सà¥à¤ªà¥à¤¸', + alertUrl : 'तसà¥à¤µà¥à¤° à¤à¤¾ URL à¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ', + linkTab : 'लिà¤à¤', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'à¥à¥à¤²à¥à¤¶ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + propertiesTab : 'Properties', // MISSING + title : 'à¥à¥à¤²à¥à¤¶ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + chkPlay : 'à¤à¤à¥ पà¥à¤²à¥', + chkLoop : 'लà¥à¤ª', + chkMenu : 'à¥à¥à¤²à¥à¤¶ मॠनà¥à¤¯à¥ à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'सà¥à¤à¥à¤²', + scaleAll : 'सà¤à¥ दिà¤à¤¾à¤¯à¥à¤', + scaleNoBorder : 'à¤à¥à¤ बà¥à¤°à¥à¤¡à¤° नहà¥à¤', + scaleFit : 'बिलà¥à¤à¥à¤² à¥à¤¿à¤', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs नà¥à¤à¥', + alignAbsMiddle : 'Abs à¤à¤ªà¤°', + alignBaseline : 'मà¥à¤² रà¥à¤à¤¾', + alignTextTop : 'à¤à¥à¤à¥à¤¸à¥à¤ à¤à¤ªà¤°', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡ रà¤à¤', + hSpace : 'हà¥à¤°à¤¿à¥à¥à¤¨à¥à¤à¤² सà¥à¤ªà¥à¤¸', + vSpace : 'वरà¥à¤à¤¿à¤à¤² सà¥à¤ªà¥à¤¸', + validateSrc : 'लिà¤à¤ URL à¤à¤¾à¤à¤ª à¤à¤°à¥à¤', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'वरà¥à¤¤à¤¨à¥ (सà¥à¤ªà¥à¤²à¤¿à¤à¤) à¤à¤¾à¤à¤', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'शबà¥à¤¦à¤à¥à¤¶ मà¥à¤ नहà¥à¤', + changeTo : 'à¤à¤¸à¤®à¥à¤ बदलà¥à¤', + btnIgnore : 'à¤à¤à¥à¤¨à¥à¤°', + btnIgnoreAll : 'सà¤à¥ à¤à¤à¥à¤¨à¥à¤° à¤à¤°à¥à¤', + btnReplace : 'रिपà¥à¤²à¥à¤¸', + btnReplaceAll : 'सà¤à¥ रिपà¥à¤²à¥à¤¸ à¤à¤°à¥à¤', + btnUndo : 'ठनà¥à¤¡à¥', + noSuggestions : '- à¤à¥à¤ सà¥à¤à¤¾à¤µ नहà¥à¤ -', + progress : 'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ (सà¥à¤ªà¥ ल-à¤à¥ à¤) à¤à¤¾à¤°à¥ हà¥...', + noMispell : 'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ : à¤à¥à¤ à¤à¤²à¤¤ वरà¥à¤¤à¤¨à¥ (सà¥à¤ªà¥ लिà¤à¤) नहà¥à¤ पाठà¤à¤', + noChanges : 'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ :à¤à¥à¤ शबà¥à¤¦ नहà¥à¤ बदला à¤à¤¯à¤¾', + oneChange : 'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ : à¤à¤ शबà¥à¤¦ बदला à¤à¤¯à¤¾', + manyChanges : 'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ : %1 शबà¥à¤¦ बदलॠà¤à¤¯à¥', + ieSpellDownload : 'सà¥à¤ªà¥ ल-à¤à¥ à¤à¤° à¤à¤¨à¥à¤¸à¥à¤à¤¾à¤² नहà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हà¥à¥¤ à¤à¥à¤¯à¤¾ à¤à¤ª à¤à¤¸à¥ डाà¤à¤¨à¤²à¥à¤¡ à¤à¤°à¤¨à¤¾ à¤à¤¾à¤¹à¥à¤à¤à¥?' + }, + + smiley : + { + toolbar : 'सà¥à¤®à¤¾à¤à¤²à¥', + title : 'सà¥à¤®à¤¾à¤à¤²à¥ à¤à¤¨à¥à¤¸à¤°à¥à¤ à¤à¤°à¥à¤', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ठà¤à¤à¥à¤¯ सà¥à¤à¥', + bulletedlist : 'बà¥à¤²à¥ ठसà¥à¤à¥', + indent : 'à¤à¤¨à¥à¤¡à¥ नà¥à¤ बà¥à¤¾à¤¯à¥à¤', + outdent : 'à¤à¤¨à¥à¤¡à¥ नà¥à¤ à¤à¤® à¤à¤°à¥à¤', + + justify : + { + left : 'बायà¥à¤ तरफ', + center : 'बà¥à¤ मà¥à¤', + right : 'दायà¥à¤ तरफ', + block : 'बà¥à¤²à¥à¤ à¤à¤¸à¥à¤à¥à¥à¤¾à¤' + }, + + blockquote : 'बà¥à¤²à¥à¤-à¤à¥à¤', + + clipboard : + { + title : 'पà¥à¤¸à¥à¤', + cutError : 'à¤à¤ªà¤à¥ बà¥à¤°à¤¾à¤à¥à¤° à¤à¥ सà¥à¤°à¤à¥à¤·à¤¾ सॠà¤à¤¿à¤¨à¥à¤à¥à¤¸ नॠà¤à¤ à¤à¤°à¤¨à¥ à¤à¥ ठनà¥à¤®à¤¤à¤¿ नहà¥à¤ पà¥à¤°à¤¦à¤¾à¤¨ à¤à¥ हà¥à¥¤ (Ctrl/Cmd+X) à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤à¥¤', + copyError : 'à¤à¤ªà¤à¥ बà¥à¤°à¤¾à¤à¤à¥à¤° à¤à¥ सà¥à¤°à¤à¥à¤·à¤¾ सॠà¤à¤¿à¤¨à¥à¤à¥à¤¸ नॠà¤à¥à¤ªà¥ à¤à¤°à¤¨à¥ à¤à¥ ठनà¥à¤®à¤¤à¤¿ नहà¥à¤ पà¥à¤°à¤¦à¤¾à¤¨ à¤à¥ हà¥à¥¤ (Ctrl/Cmd+C) à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤à¥¤', + pasteMsg : 'Ctrl/Cmd+V à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¤à¥ पà¥à¤¸à¥à¤ à¤à¤°à¥à¤ à¤à¤° ठà¥à¤ हॠà¤à¤°à¥à¤.', + securityMsg : 'à¤à¤ªà¤à¥ बà¥à¤°à¤¾à¤à¥à¤° à¤à¥ सà¥à¤°à¤à¥à¤·à¤¾ à¤à¤ªà¤à¥ बà¥à¤°à¤¾à¤à¥à¤° à¤à¥ सà¥à¤°Kश सà¥à¤à¤¿à¤à¤ à¤à¥ à¤à¤¾à¤°à¤£, à¤à¤¡à¤¿à¤à¤° à¤à¤ªà¤à¥ à¤à¥à¤²à¤¿à¤ªà¤¬à¥à¤°à¥à¤¡ डà¥à¤à¤¾ à¤à¥ नहà¥à¤ पा सà¤à¤¤à¤¾ हà¥. à¤à¤ªà¤à¥ à¤à¤¸à¥ à¤à¤¸ विनà¥à¤¡à¥ मà¥à¤ दà¥à¤¬à¤¾à¤°à¤¾ पà¥à¤¸à¥à¤ à¤à¤°à¤¨à¤¾ हà¥à¤à¤¾.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'पà¥à¤¸à¥à¤ (वरà¥à¤¡ सà¥)', + title : 'पà¥à¤¸à¥à¤ (वरà¥à¤¡ सà¥)', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'पà¥à¤¸à¥à¤ (सादा à¤à¥ à¤à¥à¤¸à¥à¤)', + title : 'पà¥à¤¸à¥à¤ (सादा à¤à¥ à¤à¥à¤¸à¥à¤)' + }, + + templates : + { + button : 'à¤à¥ मà¥à¤ªà¥à¤²à¥à¤', + title : 'à¤à¤¨à¥à¤à¥à¤¨à¥à¤ à¤à¥ मà¥à¤ªà¥à¤²à¥à¤', + options : 'Template Options', // MISSING + insertOption : 'मà¥à¤² शबà¥à¤¦à¥à¤ à¤à¥ बदलà¥à¤', + selectPromptMsg : 'à¤à¤¡à¤¿à¤à¤° मà¥à¤ à¤à¤ªà¤¨ à¤à¤°à¤¨à¥ हà¥à¤¤à¥ à¤à¥ मà¥à¤ªà¥à¤²à¥à¤ à¤à¥à¤¨à¥à¤(वरà¥à¤¤à¤®à¤¾à¤¨ à¤à¤¨à¥à¤à¥ नà¥à¤ सà¥à¤µ नहà¥à¤ हà¥à¤à¤à¥):', + emptyListMsg : '(à¤à¥à¤ à¤à¥ मà¥à¤ªà¥à¤²à¥à¤ डिà¥à¤¾à¤à¤¨ नहà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हà¥)' + }, + + showBlocks : 'बà¥à¤²à¥à¤ दिà¤à¤¾à¤¯à¥à¤', + + stylesCombo : + { + label : 'सà¥à¤à¤¾à¤à¤²', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'à¥à¥à¤°à¥à¤®à¥à¤', + panelTitle : 'à¥à¥à¤°à¥à¤®à¥à¤', + + tag_p : 'साधारण', + tag_pre : 'à¥à¥à¤°à¥à¤®à¥à¤à¥ ड', + tag_address : 'पता', + tag_h1 : 'शà¥à¤°à¥à¤·à¤ 1', + tag_h2 : 'शà¥à¤°à¥à¤·à¤ 2', + tag_h3 : 'शà¥à¤°à¥à¤·à¤ 3', + tag_h4 : 'शà¥à¤°à¥à¤·à¤ 4', + tag_h5 : 'शà¥à¤°à¥à¤·à¤ 5', + tag_h6 : 'शà¥à¤°à¥à¤·à¤ 6', + tag_div : 'शà¥à¤°à¥à¤·à¤ (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'à¥à¥à¤¨à¥à¤', + voiceLabel : 'Font', // MISSING + panelTitle : 'à¥à¥à¤¨à¥à¤' + }, + + fontSize : + { + label : 'साà¤à¥', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'साà¤à¥' + }, + + colorButton : + { + textColorTitle : 'à¤à¥à¤à¥à¤¸à¥à¤ रà¤à¤', + bgColorTitle : 'बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡ रà¤à¤', + panelTitle : 'Colors', // MISSING + auto : 'सà¥à¤µà¤à¤¾à¤²à¤¿à¤¤', + more : 'à¤à¤° रà¤à¤...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + title : 'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥', + design : 'Design', // MISSING + meta : 'मॠà¤à¤¾à¤¡à¥à¤à¤¾', + chooseColor : 'Choose', // MISSING + other : '<ठनà¥à¤¯>', + docTitle : 'पà¥à¤ शà¥à¤°à¥à¤·à¤', + charset : 'à¤à¤°à¥à¤à¥à¤à¤° सॠठà¤à¤¨à¥à¤à¥à¤¡à¤¿à¤à¤', + charsetOther : 'ठनà¥à¤¯ à¤à¤°à¥à¤à¥à¤à¤° सॠठà¤à¤¨à¥à¤à¥à¤¡à¤¿à¤à¤', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'मधà¥à¤¯ यà¥à¤°à¥à¤ªà¥à¤¯ (Central European)', + charsetCT : 'à¤à¥à¤¨à¥ (Chinese Traditional Big5)', + charsetCR : 'सिरà¥à¤²à¤¿à¤ (Cyrillic)', + charsetGR : 'यवन (Greek)', + charsetJP : 'à¤à¤¾à¤ªà¤¾à¤¨à¥ (Japanese)', + charsetKR : 'à¤à¥à¤°à¥à¤¯à¤¨ (Korean)', + charsetTR : 'तà¥à¤°à¥à¤à¥ (Turkish)', + charsetUN : 'यà¥à¤¨à¥à¤à¥à¤¡ (UTF-8)', + charsetWE : 'पशà¥à¤à¤¿à¤® यà¥à¤°à¥à¤ªà¥à¤¯ (Western European)', + docType : 'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ पà¥à¤°à¤à¤¾à¤° शà¥à¤°à¥à¤·à¤', + docTypeOther : 'ठनà¥à¤¯ डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ पà¥à¤°à¤à¤¾à¤° शà¥à¤°à¥à¤·à¤', + xhtmlDec : 'XHTML सà¥à¤à¤¨à¤¾ समà¥à¤®à¤¿à¤²à¤¿à¤¤ à¤à¤°à¥à¤', + bgColor : 'बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡ रà¤à¤', + bgImage : 'बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡ तसà¥à¤µà¥à¤° URL', + bgFixed : 'सà¥à¤à¥à¤°à¥à¤² न à¤à¤°à¤¨à¥ वाला बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡', + txtColor : 'à¤à¥à¤à¥à¤¸à¥à¤ रà¤à¤', + margin : 'पà¥à¤ मारà¥à¤à¤¿à¤¨', + marginTop : 'à¤à¤ªà¤°', + marginLeft : 'बायà¥à¤', + marginRight : 'दायà¥à¤', + marginBottom : 'नà¥à¤à¥', + metaKeywords : 'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ à¤à¤¨à¥à¤¡à¥à¤à¥à¤¸ सà¤à¤à¥à¤¤à¤¶à¤¬à¥à¤¦ (ठलà¥à¤ªà¤µà¤¿à¤°à¤¾à¤® सॠठलठà¤à¤°à¥à¤)', + metaDescription : 'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ à¤à¤°à¥ à¤à¥à¤à¤°à¤¨', + metaAuthor : 'लà¥à¤à¤', + metaCopyright : 'à¤à¥à¤ªà¥à¤°à¤¾à¤à¤', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/hr.js b/_source/lang/hr.js new file mode 100644 index 0000000..68b9c41 --- /dev/null +++ b/_source/lang/hr.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Croatian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['hr'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Kôd', + newPage : 'Nova stranica', + save : 'Snimi', + preview : 'Pregledaj', + cut : 'Izreži', + copy : 'Kopiraj', + paste : 'Zalijepi', + print : 'IspiÅ¡i', + underline : 'Potcrtano', + bold : 'Podebljaj', + italic : 'Ukosi', + selectAll : 'Odaberi sve', + removeFormat : 'Ukloni formatiranje', + strike : 'Precrtano', + subscript : 'Subscript', + superscript : 'Superscript', + horizontalrule : 'Ubaci vodoravnu liniju', + pagebreak : 'Ubaci prijelom stranice', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Ukloni link', + undo : 'PoniÅ¡ti', + redo : 'Ponovi', + + // Common messages and labels. + common : + { + browseServer : 'Pretraži server', + url : 'URL', + protocol : 'Protokol', + upload : 'PoÅ¡alji', + uploadSubmit : 'PoÅ¡alji na server', + image : 'Slika', + flash : 'Flash', + form : 'Form', + checkbox : 'Checkbox', + radio : 'Radio Button', + textField : 'Text Field', + textarea : 'Textarea', + hiddenField : 'Hidden Field', + button : 'Button', + select : 'Selection Field', + imageButton : 'Image Button', + notSet : '<nije postavljeno>', + id : 'Id', + name : 'Naziv', + langDir : 'Smjer jezika', + langDirLtr : 'S lijeva na desno (LTR)', + langDirRtl : 'S desna na lijevo (RTL)', + langCode : 'Kôd jezika', + longDescr : 'DugaÄki opis URL', + cssClass : 'Stylesheet klase', + advisoryTitle : 'Advisory naslov', + cssStyle : 'Stil', + ok : 'OK', + cancel : 'PoniÅ¡ti', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'OpÄenito', + advancedTab : 'Napredno', + validateNumberFailed : 'Ova vrijednost nije broj.', + confirmNewPage : 'Sve napravljene promjene Äe biti izgubljene ukoliko ih niste snimili. Sigurno želite uÄitati novu stranicu?', + confirmCancel : 'Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Å irina', + height : 'Visina', + align : 'Poravnaj', + alignLeft : 'Lijevo', + alignRight : 'Desno', + alignCenter : 'SrediÅ¡nje', + alignTop : 'Vrh', + alignMiddle : 'Sredina', + alignBottom : 'Dolje', + invalidHeight : 'Visina mora biti broj.', + invalidWidth : 'Å irina mora biti broj.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, nedostupno</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Ubaci posebne znakove', + title : 'Odaberite posebni karakter', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Ubaci/promijeni link', + other : '<drugi>', + menu : 'Promijeni link', + title : 'Link', + info : 'Link Info', + target : 'Meta', + upload : 'PoÅ¡alji', + advanced : 'Napredno', + type : 'Link vrsta', + toUrl : 'URL', // MISSING + toAnchor : 'Sidro na ovoj stranici', + toEmail : 'E-Mail', + targetFrame : '<okvir>', + targetPopup : '<popup prozor>', + targetFrameName : 'Ime ciljnog okvira', + targetPopupName : 'Naziv popup prozora', + popupFeatures : 'MoguÄnosti popup prozora', + popupResizable : 'Promjenjiva veliÄina', + popupStatusBar : 'Statusna traka', + popupLocationBar: 'Traka za lokaciju', + popupToolbar : 'Traka s alatima', + popupMenuBar : 'Izborna traka', + popupFullScreen : 'Cijeli ekran (IE)', + popupScrollBars : 'Scroll traka', + popupDependent : 'Ovisno (Netscape)', + popupLeft : 'Lijeva pozicija', + popupTop : 'Gornja pozicija', + id : 'Id', + langDir : 'Smjer jezika', + langDirLTR : 'S lijeva na desno (LTR)', + langDirRTL : 'S desna na lijevo (RTL)', + acccessKey : 'Pristupna tipka', + name : 'Naziv', + langCode : 'Smjer jezika', + tabIndex : 'Tab Indeks', + advisoryTitle : 'Advisory naslov', + advisoryContentType : 'Advisory vrsta sadržaja', + cssClasses : 'Stylesheet klase', + charset : 'Kodna stranica povezanih resursa', + styles : 'Stil', + rel : 'Relationship', // MISSING + selectAnchor : 'Odaberi sidro', + anchorName : 'Po nazivu sidra', + anchorId : 'Po Id elementa', + emailAddress : 'E-Mail adresa', + emailSubject : 'Naslov', + emailBody : 'Sadržaj poruke', + noAnchors : '(Nema dostupnih sidra)', + noUrl : 'Molimo upiÅ¡ite URL link', + noEmail : 'Molimo upiÅ¡ite e-mail adresu' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Ubaci/promijeni sidro', + menu : 'Svojstva sidra', + title : 'Svojstva sidra', + name : 'Ime sidra', + errorName : 'Molimo unesite ime sidra', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'PronaÄi i zamijeni', + find : 'PronaÄi', + replace : 'Zamijeni', + findWhat : 'PronaÄi:', + replaceWith : 'Zamijeni s:', + notFoundMsg : 'Traženi tekst nije pronaÄen.', + matchCase : 'Usporedi mala/velika slova', + matchWord : 'Usporedi cijele rijeÄi', + matchCyclic : 'Usporedi kružno', + replaceAll : 'Zamijeni sve', + replaceSuccessMsg : 'Zamijenjeno %1 pojmova.' + }, + + // Table Dialog + table : + { + toolbar : 'Tablica', + title : 'Svojstva tablice', + menu : 'Svojstva tablice', + deleteTable : 'IzbriÅ¡i tablicu', + rows : 'Redova', + columns : 'Kolona', + border : 'VeliÄina okvira', + widthPx : 'piksela', + widthPc : 'postotaka', + widthUnit : 'width unit', // MISSING + cellSpace : 'Prostornost Äelija', + cellPad : 'Razmak Äelija', + caption : 'Naslov', + summary : 'Sažetak', + headers : 'Zaglavlje', + headersNone : 'NiÅ¡ta', + headersColumn : 'Prva kolona', + headersRow : 'Prvi red', + headersBoth : 'Oba', + invalidRows : 'Broj redova mora biti broj veÄi od 0.', + invalidCols : 'Broj kolona mora biti broj veÄi od 0.', + invalidBorder : 'Debljina ruba mora biti broj.', + invalidWidth : 'Å irina tablice mora biti broj.', + invalidHeight : 'Visina tablice mora biti broj.', + invalidCellSpacing : 'Prostornost Äelija mora biti broj.', + invalidCellPadding : 'Razmak Äelija mora biti broj.', + + cell : + { + menu : 'Äelija', + insertBefore : 'Ubaci Äeliju prije', + insertAfter : 'Ubaci Äeliju poslije', + deleteCell : 'IzbriÅ¡i Äelije', + merge : 'Spoji Äelije', + mergeRight : 'Spoji desno', + mergeDown : 'Spoji dolje', + splitHorizontal : 'Podijeli Äeliju vodoravno', + splitVertical : 'Podijeli Äeliju okomito', + title : 'Svojstva Äelije', + cellType : 'Vrsta Äelije', + rowSpan : 'Rows Span', + colSpan : 'Columns Span', + wordWrap : 'Prelazak u novi red', + hAlign : 'Vodoravno poravnanje', + vAlign : 'Okomito poravnanje', + alignBaseline : 'Osnovna linija', + bgColor : 'Boja pozadine', + borderColor : 'Boja ruba', + data : 'Podatak', + header : 'Zaglavlje', + yes : 'Da', + no : 'ne', + invalidWidth : 'Å irina Äelije mora biti broj.', + invalidHeight : 'Visina Äelije mora biti broj.', + invalidRowSpan : 'Rows span mora biti cijeli broj.', + invalidColSpan : 'Columns span mora biti cijeli broj.', + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Red', + insertBefore : 'Ubaci red prije', + insertAfter : 'Ubaci red poslije', + deleteRow : 'IzbriÅ¡i redove' + }, + + column : + { + menu : 'Kolona', + insertBefore : 'Ubaci kolonu prije', + insertAfter : 'Ubaci kolonu poslije', + deleteColumn : 'IzbriÅ¡i kolone' + } + }, + + // Button Dialog. + button : + { + title : 'Image Button svojstva', + text : 'Tekst (vrijednost)', + type : 'Vrsta', + typeBtn : 'Gumb', + typeSbm : 'PoÅ¡alji', + typeRst : 'PoniÅ¡ti' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Checkbox svojstva', + radioTitle : 'Radio Button svojstva', + value : 'Vrijednost', + selected : 'Odabrano' + }, + + // Form Dialog. + form : + { + title : 'Form svojstva', + menu : 'Form svojstva', + action : 'Akcija', + method : 'Metoda', + encoding : 'Encoding' + }, + + // Select Field Dialog. + select : + { + title : 'Selection svojstva', + selectInfo : 'Info', + opAvail : 'Dostupne opcije', + value : 'Vrijednost', + size : 'VeliÄina', + lines : 'linija', + chkMulti : 'Dozvoli viÅ¡estruki odabir', + opText : 'Tekst', + opValue : 'Vrijednost', + btnAdd : 'Dodaj', + btnModify : 'Promijeni', + btnUp : 'Gore', + btnDown : 'Dolje', + btnSetValue : 'Postavi kao odabranu vrijednost', + btnDelete : 'ObriÅ¡i' + }, + + // Textarea Dialog. + textarea : + { + title : 'Textarea svojstva', + cols : 'Kolona', + rows : 'Redova' + }, + + // Text Field Dialog. + textfield : + { + title : 'Text Field svojstva', + name : 'Ime', + value : 'Vrijednost', + charWidth : 'Å irina', + maxChars : 'NajviÅ¡e karaktera', + type : 'Vrsta', + typeText : 'Tekst', + typePass : 'Å ifra' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Hidden Field svojstva', + name : 'Ime', + value : 'Vrijednost' + }, + + // Image Dialog. + image : + { + title : 'Svojstva slika', + titleButton : 'Image Button svojstva', + menu : 'Svojstva slika', + infoTab : 'Info slike', + btnUpload : 'PoÅ¡alji na server', + upload : 'PoÅ¡alji', + alt : 'Alternativni tekst', + lockRatio : 'ZakljuÄaj odnos', + resetSize : 'ObriÅ¡i veliÄinu', + border : 'Okvir', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Unesite URL slike', + linkTab : 'Link', + button2Img : 'Želite li promijeniti odabrani gumb u jednostavnu sliku?', + img2Button : 'Želite li promijeniti odabranu sliku u gumb?', + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash svojstva', + propertiesTab : 'Svojstva', + title : 'Flash svojstva', + chkPlay : 'Auto Play', + chkLoop : 'Ponavljaj', + chkMenu : 'OmoguÄi Flash izbornik', + chkFull : 'OmoguÄi Fullscreen', + scale : 'Omjer', + scaleAll : 'Prikaži sve', + scaleNoBorder : 'Bez okvira', + scaleFit : 'ToÄna veliÄina', + access : 'Script Access', + accessAlways : 'Uvijek', + accessSameDomain: 'Ista domena', + accessNever : 'Nikad', + alignAbsBottom : 'Abs dolje', + alignAbsMiddle : 'Abs sredina', + alignBaseline : 'Bazno', + alignTextTop : 'Vrh teksta', + quality : 'Kvaliteta', + qualityBest : 'Best', + qualityHigh : 'High', + qualityAutoHigh : 'Auto High', + qualityMedium : 'Medium', + qualityAutoLow : 'Auto Low', + qualityLow : 'Low', + windowModeWindow: 'Window', + windowModeOpaque: 'Opaque', + windowModeTransparent : 'Transparent', + windowMode : 'Vrsta prozora', + flashvars : 'Varijable za Flash', + bgcolor : 'Boja pozadine', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'Molimo upiÅ¡ite URL link', + validateHSpace : 'HSpace mora biti broj.', + validateVSpace : 'VSpace mora biti broj.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Provjeri pravopis', + title : 'Provjera pravopisa', + notAvailable : 'Žao nam je, ali usluga trenutno nije dostupna.', + errorLoading : 'GreÅ¡ka uÄitavanja aplikacije: %s.', + notInDic : 'Nije u rjeÄniku', + changeTo : 'Promijeni u', + btnIgnore : 'Zanemari', + btnIgnoreAll : 'Zanemari sve', + btnReplace : 'Zamijeni', + btnReplaceAll : 'Zamijeni sve', + btnUndo : 'Vrati', + noSuggestions : '-Nema preporuke-', + progress : 'Provjera u tijeku...', + noMispell : 'Provjera zavrÅ¡ena: Nema greÅ¡aka', + noChanges : 'Provjera zavrÅ¡ena: Nije napravljena promjena', + oneChange : 'Provjera zavrÅ¡ena: Jedna rijeÄ promjenjena', + manyChanges : 'Provjera zavrÅ¡ena: Promijenjeno %1 rijeÄi', + ieSpellDownload : 'Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?' + }, + + smiley : + { + toolbar : 'SmjeÅ¡ko', + title : 'Ubaci smjeÅ¡ka', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' + }, + + numberedlist : 'BrojÄana lista', + bulletedlist : 'ObiÄna lista', + indent : 'Pomakni udesno', + outdent : 'Pomakni ulijevo', + + justify : + { + left : 'Lijevo poravnanje', + center : 'SrediÅ¡nje poravnanje', + right : 'Desno poravnanje', + block : 'Blok poravnanje' + }, + + blockquote : 'Blockquote', + + clipboard : + { + title : 'Zalijepi', + cutError : 'Sigurnosne postavke VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).', + copyError : 'Sigurnosne postavke VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).', + pasteMsg : 'Molimo zaljepite unutar doljnjeg okvira koristeÄi tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.', + securityMsg : 'Zbog sigurnosnih postavki VaÅ¡eg pretraživaÄa, editor nema direktan pristup VaÅ¡em meÄuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'Tekst koji želite zalijepiti Äini se da je kopiran iz Worda. Želite li prije oÄistiti tekst?', + toolbar : 'Zalijepi iz Worda', + title : 'Zalijepi iz Worda', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Zalijepi kao Äisti tekst', + title : 'Zalijepi kao Äisti tekst' + }, + + templates : + { + button : 'PredloÅ¡ci', + title : 'PredloÅ¡ci sadržaja', + options : 'Template Options', // MISSING + insertOption : 'Zamijeni trenutne sadržaje', + selectPromptMsg : 'Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj Äe biti izgubljen):', + emptyListMsg : '(Nema definiranih predložaka)' + }, + + showBlocks : 'Prikaži blokove', + + stylesCombo : + { + label : 'Stil', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block stilovi', + panelTitle2 : 'Inline stilovi', + panelTitle3 : 'Object stilovi' + }, + + format : + { + label : 'Format', + panelTitle : 'Format', + + tag_p : 'Normal', + tag_pre : 'Formatirano', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', + panelTitle : 'Font' + }, + + fontSize : + { + label : 'VeliÄina', + voiceLabel : 'VeliÄina slova', + panelTitle : 'VeliÄina' + }, + + colorButton : + { + textColorTitle : 'Boja teksta', + bgColorTitle : 'Boja pozadine', + panelTitle : 'Colors', // MISSING + auto : 'Automatski', + more : 'ViÅ¡e boja...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Provjeri pravopis tijekom tipkanja (SCAYT)', + opera_title : 'Not supported by Opera', // MISSING + enable : 'OmoguÄi SCAYT', + disable : 'OnemoguÄi SCAYT', + about : 'O SCAYT', + toggle : 'OmoguÄu/OnemoguÄi SCAYT', + options : 'Opcije', + langs : 'Jezici', + moreSuggestions : 'ViÅ¡e prijedloga', + ignore : 'Zanemari', + ignoreAll : 'Zanemari sve', + addWord : 'Dodaj rijeÄ', + emptyDic : 'Naziv rjeÄnika ne smije biti prazno.', + + optionsTab : 'Opcije', + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Jezici', + + dictionariesTab : 'RjeÄnici', + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'O SCAYT' + }, + + about : + { + title : 'O CKEditoru', + dlgTitle : 'O CKEditoru', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Za informacije o licencama posjetite naÅ¡u web stranicu:', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'PoveÄaj', + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Sidro', + flash : 'Flash animacija', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Nepoznati objekt' + }, + + resize : 'Povuci za promjenu veliÄine', + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Svojstva dokumenta', + title : 'Svojstva dokumenta', + design : 'Design', // MISSING + meta : 'Meta Data', + chooseColor : 'Choose', // MISSING + other : '<drugi>', + docTitle : 'Naslov stranice', + charset : 'Enkodiranje znakova', + charsetOther : 'Ostalo enkodiranje znakova', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'SrediÅ¡nja Europa', + charsetCT : 'Tradicionalna kineska (Big5)', + charsetCR : 'Äirilica', + charsetGR : 'GrÄka', + charsetJP : 'Japanska', + charsetKR : 'Koreanska', + charsetTR : 'Turska', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Zapadna Europa', + docType : 'Zaglavlje vrste dokumenta', + docTypeOther : 'Ostalo zaglavlje vrste dokumenta', + xhtmlDec : 'Ubaci XHTML deklaracije', + bgColor : 'Boja pozadine', + bgImage : 'URL slike pozadine', + bgFixed : 'Pozadine se ne pomiÄe', + txtColor : 'Boja teksta', + margin : 'Margine stranice', + marginTop : 'Vrh', + marginLeft : 'Lijevo', + marginRight : 'Desno', + marginBottom : 'Dolje', + metaKeywords : 'KljuÄne rijeÄi dokumenta (odvojene zarezom)', + metaDescription : 'Opis dokumenta', + metaAuthor : 'Autor', + metaCopyright : 'Autorska prava', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/hu.js b/_source/lang/hu.js new file mode 100644 index 0000000..a7edbc7 --- /dev/null +++ b/_source/lang/hu.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Hungarian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['hu'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'HTML szerkesztÅ', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'HTML szerkesztÅ', + + // Toolbar buttons without dialogs. + source : 'Forráskód', + newPage : 'Ãj oldal', + save : 'Mentés', + preview : 'ElÅnézet', + cut : 'Kivágás', + copy : 'Másolás', + paste : 'Beillesztés', + print : 'Nyomtatás', + underline : 'Aláhúzott', + bold : 'Félkövér', + italic : 'DÅlt', + selectAll : 'Mindent kijelöl', + removeFormat : 'Formázás eltávolÃtása', + strike : 'Ãthúzott', + subscript : 'Alsó index', + superscript : 'FelsÅ index', + horizontalrule : 'Elválasztóvonal beillesztése', + pagebreak : 'Oldaltörés beillesztése', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Hivatkozás törlése', + undo : 'Visszavonás', + redo : 'Ismétlés', + + // Common messages and labels. + common : + { + browseServer : 'Böngészés a szerveren', + url : 'Hivatkozás', + protocol : 'Protokoll', + upload : 'Feltöltés', + uploadSubmit : 'Küldés a szerverre', + image : 'Kép', + flash : 'Flash', + form : 'Å°rlap', + checkbox : 'JelölÅnégyzet', + radio : 'Választógomb', + textField : 'SzövegmezÅ', + textarea : 'Szövegterület', + hiddenField : 'RejtettmezÅ', + button : 'Gomb', + select : 'LegördülÅ lista', + imageButton : 'Képgomb', + notSet : '<nincs beállÃtva>', + id : 'AzonosÃtó', + name : 'Név', + langDir : 'Ãrás iránya', + langDirLtr : 'Balról jobbra', + langDirRtl : 'Jobbról balra', + langCode : 'Nyelv kódja', + longDescr : 'Részletes leÃrás webcÃme', + cssClass : 'StÃluskészlet', + advisoryTitle : 'Súgócimke', + cssStyle : 'StÃlus', + ok : 'Rendben', + cancel : 'Mégsem', + close : 'Bezárás', + preview : 'ElÅnézet', + generalTab : 'Ãltalános', + advancedTab : 'További opciók', + validateNumberFailed : 'A mezÅbe csak számokat Ãrhat.', + confirmNewPage : 'Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?', + confirmCancel : 'Az űrlap tartalma megváltozott, ám a változásokat nem rögzÃtette. Biztosan be szeretné zárni az űrlapot?', + options : 'BeállÃtások', + target : 'Cél', + targetNew : 'Ãj ablak (_blank)', + targetTop : 'LegfelsÅ ablak (_top)', + targetSelf : 'Aktuális ablakban (_self)', + targetParent : 'SzülÅ ablak (_parent)', + langDirLTR : 'Balról jobbra (LTR)', + langDirRTL : 'Jobbról balra (RTL)', + styles : 'StÃlus', + cssClasses : 'StÃluslap osztály', + width : 'Szélesség', + height : 'Magasság', + align : 'IgazÃtás', + alignLeft : 'Bal', + alignRight : 'Jobbra', + alignCenter : 'Középre', + alignTop : 'Tetejére', + alignMiddle : 'Középre', + alignBottom : 'Aljára', + invalidHeight : 'A magasság mezÅbe csak számokat Ãrhat.', + invalidWidth : 'A szélesség mezÅbe csak számokat Ãrhat.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Helyi menü opciók' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Speciális karakter beillesztése', + title : 'Speciális karakter választása', + options : 'Speciális karakter opciók' + }, + + // Link dialog. + link : + { + toolbar : 'Hivatkozás beillesztése/módosÃtása', + other : '<más>', + menu : 'Hivatkozás módosÃtása', + title : 'Hivatkozás tulajdonságai', + info : 'Alaptulajdonságok', + target : 'Tartalom megjelenÃtése', + upload : 'Feltöltés', + advanced : 'További opciók', + type : 'Hivatkozás tÃpusa', + toUrl : 'URL', + toAnchor : 'Horgony az oldalon', + toEmail : 'E-Mail', + targetFrame : '<keretben>', + targetPopup : '<felugró ablakban>', + targetFrameName : 'Keret neve', + targetPopupName : 'Felugró ablak neve', + popupFeatures : 'Felugró ablak jellemzÅi', + popupResizable : 'Ãtméretezés', + popupStatusBar : 'Ãllapotsor', + popupLocationBar: 'CÃmsor', + popupToolbar : 'Eszköztár', + popupMenuBar : 'Menü sor', + popupFullScreen : 'Teljes képernyÅ (csak IE)', + popupScrollBars : 'GördÃtÅsáv', + popupDependent : 'SzülÅhöz kapcsolt (csak Netscape)', + popupLeft : 'Bal pozÃció', + popupTop : 'FelsÅ pozÃció', + id : 'Id', + langDir : 'Ãrás iránya', + langDirLTR : 'Balról jobbra', + langDirRTL : 'Jobbról balra', + acccessKey : 'Billentyűkombináció', + name : 'Név', + langCode : 'Ãrás iránya', + tabIndex : 'Tabulátor index', + advisoryTitle : 'Súgócimke', + advisoryContentType : 'Súgó tartalomtÃpusa', + cssClasses : 'StÃluskészlet', + charset : 'Hivatkozott tartalom kódlapja', + styles : 'StÃlus', + rel : 'Relationship', // MISSING + selectAnchor : 'Horgony választása', + anchorName : 'Horgony név szerint', + anchorId : 'AzonosÃtó szerint', + emailAddress : 'E-Mail cÃm', + emailSubject : 'Ãzenet tárgya', + emailBody : 'Ãzenet', + noAnchors : '(Nincs horgony a dokumentumban)', + noUrl : 'Adja meg a hivatkozás webcÃmét', + noEmail : 'Adja meg az E-Mail cÃmet' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Horgony beillesztése/szerkesztése', + menu : 'Horgony tulajdonságai', + title : 'Horgony tulajdonságai', + name : 'Horgony neve', + errorName : 'Kérem adja meg a horgony nevét', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Sorszámozott lista tulajdonságai', + bulletedTitle : 'Pontozott lista tulajdonságai', + type : 'TÃpus', + start : 'KezdÅszám', + validateStartNumber :'A kezdÅszám nem lehet tört érték.', + circle : 'Kör', + disc : 'Korong', + square : 'Négyzet', + none : 'Nincs', + notset : '<Nincs beállÃtva>', + armenian : 'Ãrmény számozás', + georgian : 'Grúz számozás (an, ban, gan, stb.)', + lowerRoman : 'Római kisbetűs (i, ii, iii, iv, v, stb.)', + upperRoman : 'Római nagybetűs (I, II, III, IV, V, stb.)', + lowerAlpha : 'Kisbetűs (a, b, c, d, e, stb.)', + upperAlpha : 'Nagybetűs (A, B, C, D, E, stb.)', + lowerGreek : 'Görög (alpha, beta, gamma, stb.)', + decimal : 'Arab számozás (1, 2, 3, stb.)', + decimalLeadingZero : 'Számozás bevezetÅ nullákkal (01, 02, 03, stb.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Keresés és csere', + find : 'Keresés', + replace : 'Csere', + findWhat : 'Keresett szöveg:', + replaceWith : 'Csere erre:', + notFoundMsg : 'A keresett szöveg nem található.', + matchCase : 'kis- és nagybetű megkülönböztetése', + matchWord : 'csak ha ez a teljes szó', + matchCyclic : 'Ciklikus keresés', + replaceAll : 'Az összes cseréje', + replaceSuccessMsg : '%1 egyezÅség cserélve.' + }, + + // Table Dialog + table : + { + toolbar : 'Táblázat', + title : 'Táblázat tulajdonságai', + menu : 'Táblázat tulajdonságai', + deleteTable : 'Táblázat törlése', + rows : 'Sorok', + columns : 'Oszlopok', + border : 'Szegélyméret', + widthPx : 'képpont', + widthPc : 'százalék', + widthUnit : 'Szélesség egység', + cellSpace : 'Cella térköz', + cellPad : 'Cella belsÅ margó', + caption : 'Felirat', + summary : 'LeÃrás', + headers : 'Fejlécek', + headersNone : 'Nincsenek', + headersColumn : 'ElsÅ oszlop', + headersRow : 'ElsÅ sor', + headersBoth : 'MindkettÅ', + invalidRows : 'A sorok számának nagyobbnak kell lenni mint 0.', + invalidCols : 'Az oszlopok számának nagyobbnak kell lenni mint 0.', + invalidBorder : 'A szegélyméret mezÅbe csak számokat Ãrhat.', + invalidWidth : 'A szélesség mezÅbe csak számokat Ãrhat.', + invalidHeight : 'A magasság mezÅbe csak számokat Ãrhat.', + invalidCellSpacing : 'A cella térköz mezÅbe csak számokat Ãrhat.', + invalidCellPadding : 'A cella belsÅ margó mezÅbe csak számokat Ãrhat.', + + cell : + { + menu : 'Cella', + insertBefore : 'Beszúrás balra', + insertAfter : 'Beszúrás jobbra', + deleteCell : 'Cellák törlése', + merge : 'Cellák egyesÃtése', + mergeRight : 'Cellák egyesÃtése jobbra', + mergeDown : 'Cellák egyesÃtése lefelé', + splitHorizontal : 'Cellák szétválasztása vÃzszintesen', + splitVertical : 'Cellák szétválasztása függÅlegesen', + title : 'Cella tulajdonságai', + cellType : 'Cella tÃpusa', + rowSpan : 'FüggÅleges egyesÃtés', + colSpan : 'VÃzszintes egyesÃtés', + wordWrap : 'Hosszú sorok törése', + hAlign : 'VÃzszintes igazÃtás', + vAlign : 'FüggÅleges igazÃtás', + alignBaseline : 'Alapvonalra', + bgColor : 'Háttér szÃne', + borderColor : 'Keret szÃne', + data : 'Adat', + header : 'Fejléc', + yes : 'Igen', + no : 'Nem', + invalidWidth : 'A szélesség mezÅbe csak számokat Ãrhat.', + invalidHeight : 'A magasság mezÅbe csak számokat Ãrhat.', + invalidRowSpan : 'A függÅleges egyesÃtés mezÅbe csak számokat Ãrhat.', + invalidColSpan : 'A vÃzszintes egyesÃtés mezÅbe csak számokat Ãrhat.', + chooseColor : 'Válasszon' + }, + + row : + { + menu : 'Sor', + insertBefore : 'Beszúrás fölé', + insertAfter : 'Beszúrás alá', + deleteRow : 'Sorok törlése' + }, + + column : + { + menu : 'Oszlop', + insertBefore : 'Beszúrás balra', + insertAfter : 'Beszúrás jobbra', + deleteColumn : 'Oszlopok törlése' + } + }, + + // Button Dialog. + button : + { + title : 'Gomb tulajdonságai', + text : 'Szöveg (Ãrték)', + type : 'TÃpus', + typeBtn : 'Gomb', + typeSbm : 'Küldés', + typeRst : 'Alaphelyzet' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'JelölÅnégyzet tulajdonságai', + radioTitle : 'Választógomb tulajdonságai', + value : 'Ãrték', + selected : 'Kiválasztott' + }, + + // Form Dialog. + form : + { + title : 'Å°rlap tulajdonságai', + menu : 'Å°rlap tulajdonságai', + action : 'Adatfeldolgozást végzÅ hivatkozás', + method : 'Adatküldés módja', + encoding : 'Kódolás' + }, + + // Select Field Dialog. + select : + { + title : 'LegördülÅ lista tulajdonságai', + selectInfo : 'Alaptulajdonságok', + opAvail : 'ElérhetÅ opciók', + value : 'Ãrték', + size : 'Méret', + lines : 'sor', + chkMulti : 'több sor is kiválasztható', + opText : 'Szöveg', + opValue : 'Ãrték', + btnAdd : 'Hozzáad', + btnModify : 'MódosÃt', + btnUp : 'Fel', + btnDown : 'Le', + btnSetValue : 'Legyen az alapértelmezett érték', + btnDelete : 'Töröl' + }, + + // Textarea Dialog. + textarea : + { + title : 'Szövegterület tulajdonságai', + cols : 'Karakterek száma egy sorban', + rows : 'Sorok száma' + }, + + // Text Field Dialog. + textfield : + { + title : 'SzövegmezÅ tulajdonságai', + name : 'Név', + value : 'Ãrték', + charWidth : 'MegjelenÃtett karakterek száma', + maxChars : 'Maximális karakterszám', + type : 'TÃpus', + typeText : 'Szöveg', + typePass : 'Jelszó' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Rejtett mezÅ tulajdonságai', + name : 'Név', + value : 'Ãrték' + }, + + // Image Dialog. + image : + { + title : 'Kép tulajdonságai', + titleButton : 'Képgomb tulajdonságai', + menu : 'Kép tulajdonságai', + infoTab : 'Alaptulajdonságok', + btnUpload : 'Küldés a szerverre', + upload : 'Feltöltés', + alt : 'Buborék szöveg', + lockRatio : 'Arány megtartása', + resetSize : 'Eredeti méret', + border : 'Keret', + hSpace : 'VÃzsz. táv', + vSpace : 'Függ. táv', + alertUrl : 'Töltse ki a kép webcÃmét', + linkTab : 'Hivatkozás', + button2Img : 'A kiválasztott képgombból sima képet szeretne csinálni?', + img2Button : 'A kiválasztott képbÅl képgombot szeretne csinálni?', + urlMissing : 'Hiányzik a kép URL-je', + validateBorder : 'A keret méretének egész számot kell beÃrni!', + validateHSpace : 'VÃzszintes távolságnak egész számot kell beÃrni!', + validateVSpace : 'FüggÅleges távolságnak egész számot kell beÃrni!' + }, + + // Flash Dialog + flash : + { + properties : 'Flash tulajdonságai', + propertiesTab : 'Tulajdonságok', + title : 'Flash tulajdonságai', + chkPlay : 'Automata lejátszás', + chkLoop : 'Folyamatosan', + chkMenu : 'Flash menü engedélyezése', + chkFull : 'Teljes képernyÅ engedélyezése', + scale : 'Méretezés', + scaleAll : 'Mindent mutat', + scaleNoBorder : 'Keret nélkül', + scaleFit : 'Teljes kitöltés', + access : 'Szkript hozzáférés', + accessAlways : 'Mindig', + accessSameDomain: 'Azonos domainrÅl', + accessNever : 'Soha', + alignAbsBottom : 'Legaljára', + alignAbsMiddle : 'Közepére', + alignBaseline : 'Alapvonalhoz', + alignTextTop : 'Szöveg tetejére', + quality : 'MinÅség', + qualityBest : 'Legjobb', + qualityHigh : 'Jó', + qualityAutoHigh : 'Automata jó', + qualityMedium : 'Közepes', + qualityAutoLow : 'Automata gyenge', + qualityLow : 'Gyenge', + windowModeWindow: 'Window', + windowModeOpaque: 'Opaque', + windowModeTransparent : 'Transparent', + windowMode : 'Ablak mód', + flashvars : 'Flash változók', + bgcolor : 'HáttérszÃn', + hSpace : 'VÃzsz. táv', + vSpace : 'Függ. táv', + validateSrc : 'Adja meg a hivatkozás webcÃmét', + validateHSpace : 'A vÃzszintes távolsűág mezÅbe csak számokat Ãrhat.', + validateVSpace : 'A függÅleges távolsűág mezÅbe csak számokat Ãrhat.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'HelyesÃrás-ellenÅrzés', + title : 'HelyesÃrás ellenörzÅ', + notAvailable : 'Sajnálom, de a szolgáltatás jelenleg nem elérhetÅ.', + errorLoading : 'Hiba a szolgáltatás host betöltése közben: %s.', + notInDic : 'Nincs a szótárban', + changeTo : 'MódosÃtás', + btnIgnore : 'Kihagyja', + btnIgnoreAll : 'Mindet kihagyja', + btnReplace : 'Csere', + btnReplaceAll : 'Ãsszes cseréje', + btnUndo : 'Visszavonás', + noSuggestions : 'Nincs javaslat', + progress : 'HelyesÃrás-ellenÅrzés folyamatban...', + noMispell : 'HelyesÃrás-ellenÅrzés kész: Nem találtam hibát', + noChanges : 'HelyesÃrás-ellenÅrzés kész: Nincs változtatott szó', + oneChange : 'HelyesÃrás-ellenÅrzés kész: Egy szó cserélve', + manyChanges : 'HelyesÃrás-ellenÅrzés kész: %1 szó cserélve', + ieSpellDownload : 'A helyesÃrás-ellenÅrzÅ nincs telepÃtve. Szeretné letölteni most?' + }, + + smiley : + { + toolbar : 'Hangulatjelek', + title : 'Hangulatjel beszúrása', + options : 'Hangulatjel opciók' + }, + + elementsPath : + { + eleLabel : 'Elem utak', + eleTitle : '%1 elem' + }, + + numberedlist : 'Számozás', + bulletedlist : 'Felsorolás', + indent : 'Behúzás növelése', + outdent : 'Behúzás csökkentése', + + justify : + { + left : 'Balra', + center : 'Középre', + right : 'Jobbra', + block : 'Sorkizárt' + }, + + blockquote : 'Idézet blokk', + + clipboard : + { + title : 'Beillesztés', + cutError : 'A böngészÅ biztonsági beállÃtásai nem engedélyezik a szerkesztÅnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).', + copyError : 'A böngészÅ biztonsági beállÃtásai nem engedélyezik a szerkesztÅnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).', + pasteMsg : 'Másolja be az alábbi mezÅbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.', + securityMsg : 'A böngészÅ biztonsági beállÃtásai miatt a szerkesztÅ nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.', + pasteArea : 'Beszúrás mezÅ' + }, + + pastefromword : + { + confirmCleanup : 'Ãgy tűnik a beillesztett szöveget Word-bÅl másolt át. Meg szeretné tisztÃtani a szöveget? (ajánlott)', + toolbar : 'Beillesztés Word-bÅl', + title : 'Beillesztés Word-bÅl', + error : 'Egy belsÅ hiba miatt nem sikerült megtisztÃtani a szöveget' + }, + + pasteText : + { + button : 'Beillesztés formázatlan szövegként', + title : 'Beillesztés formázatlan szövegként' + }, + + templates : + { + button : 'Sablonok', + title : 'ElérhetÅ sablonok', + options : 'Sablon opciók', + insertOption : 'Kicseréli a jelenlegi tartalmat', + selectPromptMsg : 'Válassza ki melyik sablon nyÃljon meg a szerkesztÅben<br>(a jelenlegi tartalom elveszik):', + emptyListMsg : '(Nincs sablon megadva)' + }, + + showBlocks : 'Blokkok megjelenÃtése', + + stylesCombo : + { + label : 'StÃlus', + panelTitle : 'Formázási stÃlusok', + panelTitle1 : 'Blokk stÃlusok', + panelTitle2 : 'Inline stÃlusok', + panelTitle3 : 'Objektum stÃlusok' + }, + + format : + { + label : 'Formátum', + panelTitle : 'Formátum', + + tag_p : 'Normál', + tag_pre : 'Formázott', + tag_address : 'CÃmsor', + tag_h1 : 'Fejléc 1', + tag_h2 : 'Fejléc 2', + tag_h3 : 'Fejléc 3', + tag_h4 : 'Fejléc 4', + tag_h5 : 'Fejléc 5', + tag_h6 : 'Fejléc 6', + tag_div : 'Bekezdés (DIV)' + }, + + div : + { + title : 'DIV tároló létrehozása', + toolbar : 'DIV tároló létrehozása', + cssClassInputLabel : 'StÃluslap osztály', + styleSelectLabel : 'StÃlus', + IdInputLabel : 'AzonosÃtó', + languageCodeInputLabel : ' Nyelv kódja', + inlineStyleInputLabel : 'Inline stÃlus', + advisoryTitleInputLabel : 'Tipp szöveg', + langDirLabel : 'Nyelvi irány', + langDirLTRLabel : 'Balról jobbra (LTR)', + langDirRTLLabel : 'Jobbról balra (RTL)', + edit : 'DIV szerkesztése', + remove : 'DIV eltávolÃtása' + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'BetűtÃpus', + voiceLabel : 'BetűtÃpus', + panelTitle : 'BetűtÃpus' + }, + + fontSize : + { + label : 'Méret', + voiceLabel : 'Betűméret', + panelTitle : 'Méret' + }, + + colorButton : + { + textColorTitle : 'BetűszÃn', + bgColorTitle : 'HáttérszÃn', + panelTitle : 'SzÃnek', + auto : 'Automatikus', + more : 'További szÃnek...' + }, + + colors : + { + '000' : 'Fekete', + '800000' : 'Bordó', + '8B4513' : 'Barna', + '2F4F4F' : 'Sötét türkiz', + '008080' : 'Türkiz', + '000080' : 'Király kék', + '4B0082' : 'Indigó kék', + '696969' : 'Szürke', + 'B22222' : 'Tégla vörös', + 'A52A2A' : 'Vörös', + 'DAA520' : 'Arany sárga', + '006400' : 'Sötét zöld', + '40E0D0' : 'Türkiz', + '0000CD' : 'Kék', + '800080' : 'Lila', + '808080' : 'Szürke', + 'F00' : 'Piros', + 'FF8C00' : 'Sötét narancs', + 'FFD700' : 'Arany', + '008000' : 'Zöld', + '0FF' : 'Türkiz', + '00F' : 'Kék', + 'EE82EE' : 'RózsaszÃn', + 'A9A9A9' : 'Sötét szürke', + 'FFA07A' : 'Lazac', + 'FFA500' : 'Narancs', + 'FFFF00' : 'Citromsárga', + '00FF00' : 'Neon zöld', + 'AFEEEE' : 'Világos türkiz', + 'ADD8E6' : 'Világos kék', + 'DDA0DD' : 'Világos lila', + 'D3D3D3' : 'Világos szürke', + 'FFF0F5' : 'Lavender Blush', + 'FAEBD7' : 'Törtfehér', + 'FFFFE0' : 'Világos sárga', + 'F0FFF0' : 'Menta', + 'F0FFFF' : 'Azúr kék', + 'F0F8FF' : 'Halvány kék', + 'E6E6FA' : 'Lavender', + 'FFF' : 'Fehér' + }, + + scayt : + { + title : 'HelyesÃrás ellenÅrzés gépelés közben', + opera_title : 'Az Opera nem támogatja', + enable : 'SCAYT engedélyezése', + disable : 'SCAYT letiltása', + about : 'SCAYT névjegy', + toggle : 'SCAYT kapcsolása', + options : 'BeállÃtások', + langs : 'Nyelvek', + moreSuggestions : 'További javaslatok', + ignore : 'Kihagy', + ignoreAll : 'Ãsszes kihagyása', + addWord : 'Szó hozzáadása', + emptyDic : 'A szótár nevét meg kell adni.', + + optionsTab : 'BeállÃtások', + allCaps : 'Nagybetűs szavak kihagyása', + ignoreDomainNames : 'Domain nevek kihagyása', + mixedCase : 'Kis és nagybetűt is tartalmazó szavak kihagyása', + mixedWithDigits : 'Számokat tartalmazó szavak kihagyása', + + languagesTab : 'Nyelvek', + + dictionariesTab : 'Szótár', + dic_field_name : 'Szótár neve', + dic_create : 'Létrehozás', + dic_restore : 'VisszaállÃtás', + dic_delete : 'Törlés', + dic_rename : 'Ãtnevezés', + dic_info : 'Kezdetben a felhasználói szótár böngészÅ sütiben tárolódik. Azonban a sütik maximális mérete korlátozott. Amikora a szótár akkora lesz, hogy már sütiben nem lehet tárolni, akkor a szótárat tárolhatja a szerveren is. Ehhez egy nevet kell megadni a szótárhoz. Amennyiben már van szerveren tárolt szótára, adja meg a nevét és kattintson a visszaállÃtás gombra.', + + aboutTab : 'Névjegy' + }, + + about : + { + title : 'CKEditor névjegy', + dlgTitle : 'CKEditor névjegy', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Licenszelési információkért kérjük látogassa meg weboldalunkat:', + copy : 'Copyright © $1. Minden jog fenntartva.' + }, + + maximize : 'Teljes méret', + minimize : 'Kis méret', + + fakeobjects : + { + anchor : 'Horgony', + flash : 'Flash animáció', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Ismeretlen objektum' + }, + + resize : 'Húzza az átméretezéshez', + + colordialog : + { + title : 'Válasszon szÃnt', + options : 'SzÃn opciók', + highlight : 'NagyÃtás', + selected : 'Kiválasztott', + clear : 'ÃrÃtés' + }, + + toolbarCollapse : 'Eszköztár összecsukása', + toolbarExpand : 'Eszköztár szétnyitása', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Szöveg iránya balról jobbra', + rtl : 'Szöveg iránya jobbról balra' + }, + + docprops : + { + label : 'Dokumentum tulajdonságai', + title : 'Dokumentum tulajdonságai', + design : 'Design', // MISSING + meta : 'Meta adatok', + chooseColor : 'Válasszon', + other : '<más>', + docTitle : 'OldalcÃm', + charset : 'Karakterkódolás', + charsetOther : 'Más karakterkódolás', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Közép-Európai', + charsetCT : 'KÃnai Tradicionális (Big5)', + charsetCR : 'Cyrill', + charsetGR : 'Görög', + charsetJP : 'Japán', + charsetKR : 'Koreai', + charsetTR : 'Török', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Nyugat-Európai', + docType : 'Dokumentum tÃpus fejléc', + docTypeOther : 'Más dokumentum tÃpus fejléc', + xhtmlDec : 'XHTML deklarációk beillesztése', + bgColor : 'HáttérszÃn', + bgImage : 'Háttérkép cÃm', + bgFixed : 'Nem gördÃthetÅ háttér', + txtColor : 'BetűszÃn', + margin : 'Oldal margók', + marginTop : 'FelsÅ', + marginLeft : 'Bal', + marginRight : 'Jobb', + marginBottom : 'Alsó', + metaKeywords : 'Dokumentum keresÅszavak (vesszÅvel elválasztva)', + metaDescription : 'Dokumentum leÃrás', + metaAuthor : 'SzerzÅ', + metaCopyright : 'SzerzÅi jog', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/is.js b/_source/lang/is.js new file mode 100644 index 0000000..6263664 --- /dev/null +++ b/_source/lang/is.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Icelandic language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['is'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Kóði', + newPage : 'Ný sÃða', + save : 'Vista', + preview : 'Forskoða', + cut : 'Klippa', + copy : 'Afrita', + paste : 'LÃma', + print : 'Prenta', + underline : 'Undirstrikað', + bold : 'Feitletrað', + italic : 'Skáletrað', + selectAll : 'Velja allt', + removeFormat : 'Fjarlægja snið', + strike : 'Yfirstrikað', + subscript : 'Niðurskrifað', + superscript : 'Uppskrifað', + horizontalrule : 'Lóðrétt lÃna', + pagebreak : 'Setja inn sÃðuskil', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Fjarlægja stiklu', + undo : 'Afturkalla', + redo : 'Hætta við afturköllun', + + // Common messages and labels. + common : + { + browseServer : 'Fletta à skjalasafni', + url : 'Vefslóð', + protocol : 'Samskiptastaðall', + upload : 'Senda upp', + uploadSubmit : 'Hlaða upp', + image : 'Setja inn mynd', + flash : 'Flash', + form : 'Setja inn innsláttarform', + checkbox : 'Setja inn hökunarreit', + radio : 'Setja inn valhnapp', + textField : 'Setja inn textareit', + textarea : 'Setja inn textasvæði', + hiddenField : 'Setja inn falið svæði', + button : 'Setja inn hnapp', + select : 'Setja inn lista', + imageButton : 'Setja inn myndahnapp', + notSet : '<ekkert valið>', + id : 'Auðkenni', + name : 'Nafn', + langDir : 'Lesstefna', + langDirLtr : 'Frá vinstri til hægri (LTR)', + langDirRtl : 'Frá hægri til vinstri (RTL)', + langCode : 'Tungumálakóði', + longDescr : 'Nánari lýsing', + cssClass : 'StÃlsniðsflokkur', + advisoryTitle : 'Titill', + cssStyle : 'StÃll', + ok : 'à lagi', + cancel : 'Hætta við', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'Almennt', + advancedTab : 'Tæknilegt', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Breidd', + height : 'Hæð', + align : 'Jöfnun', + alignLeft : 'Vinstri', + alignRight : 'Hægri', + alignCenter : 'Miðjað', + alignTop : 'Efst', + alignMiddle : 'Miðjuð', + alignBottom : 'Neðst', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Setja inn merki', + title : 'Velja tákn', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Stofna/breyta stiklu', + other : '<annar>', + menu : 'Breyta stiklu', + title : 'Stikla', + info : 'Almennt', + target : 'Mark', + upload : 'Senda upp', + advanced : 'Tæknilegt', + type : 'Stikluflokkur', + toUrl : 'URL', // MISSING + toAnchor : 'Bókamerki á þessari sÃðu', + toEmail : 'Netfang', + targetFrame : '<rammi>', + targetPopup : '<sprettigluggi>', + targetFrameName : 'Nafn markglugga', + targetPopupName : 'Nafn sprettiglugga', + popupFeatures : 'Eigindi sprettiglugga', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Stöðustika', + popupLocationBar: 'FanglÃna', + popupToolbar : 'Verkfærastika', + popupMenuBar : 'VallÃna', + popupFullScreen : 'Heilskjár (IE)', + popupScrollBars : 'Skrunstikur', + popupDependent : 'Háð venslum (Netscape)', + popupLeft : 'Fjarlægð frá vinstri', + popupTop : 'Fjarlægð frá efri brún', + id : 'Id', // MISSING + langDir : 'Lesstefna', + langDirLTR : 'Frá vinstri til hægri (LTR)', + langDirRTL : 'Frá hægri til vinstri (RTL)', + acccessKey : 'Skammvalshnappur', + name : 'Nafn', + langCode : 'Lesstefna', + tabIndex : 'Raðnúmer innsláttarreits', + advisoryTitle : 'Titill', + advisoryContentType : 'Tegund innihalds', + cssClasses : 'StÃlsniðsflokkur', + charset : 'Táknróf', + styles : 'StÃll', + rel : 'Relationship', // MISSING + selectAnchor : 'Veldu akkeri', + anchorName : 'Eftir akkerisnafni', + anchorId : 'Eftir auðkenni einingar', + emailAddress : 'Netfang', + emailSubject : 'Efni', + emailBody : 'Meginmál', + noAnchors : '<Engin bókamerki á skrá>', + noUrl : 'Sláðu inn veffang stiklunnar!', + noEmail : 'Sláðu inn netfang!' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Stofna/breyta kaflamerki', + menu : 'Eigindi kaflamerkis', + title : 'Eigindi kaflamerkis', + name : 'Nafn bókamerkis', + errorName : 'Sláðu inn nafn bókamerkis!', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Finna og skipta', + find : 'Leita', + replace : 'Skipta út', + findWhat : 'Leita að:', + replaceWith : 'Skipta út fyrir:', + notFoundMsg : 'Leitartexti fannst ekki!', + matchCase : 'Gera greinarmun á¡ há¡- og lágstöfum', + matchWord : 'Aðeins heil orð', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Skipta út allsstaðar', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tafla', + title : 'Eigindi töflu', + menu : 'Eigindi töflu', + deleteTable : 'Fella töflu', + rows : 'Raðir', + columns : 'Dálkar', + border : 'Breidd ramma', + widthPx : 'myndeindir', + widthPc : 'prósent', + widthUnit : 'width unit', // MISSING + cellSpace : 'Bil milli reita', + cellPad : 'ReitaspássÃa', + caption : 'Titill', + summary : 'Ãfram', + headers : 'Fyrirsagnir', + headersNone : 'Engar', + headersColumn : 'Fyrsti dálkur', + headersRow : 'Fyrsta röð', + headersBoth : 'Hvort tveggja', + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Reitur', + insertBefore : 'Skjóta inn reiti fyrir aftan', + insertAfter : 'Skjóta inn reiti fyrir framan', + deleteCell : 'Fella reit', + merge : 'Sameina reiti', + mergeRight : 'Sameina til hægri', + mergeDown : 'Sameina niður á við', + splitHorizontal : 'Kljúfa reit lárétt', + splitVertical : 'Kljúfa reit lóðrétt', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Röð', + insertBefore : 'Skjóta inn röð fyrir ofan', + insertAfter : 'Skjóta inn röð fyrir neðan', + deleteRow : 'Eyða röð' + }, + + column : + { + menu : 'Dálkur', + insertBefore : 'Skjóta inn dálki vinstra megin', + insertAfter : 'Skjóta inn dálki hægra megin', + deleteColumn : 'Fella dálk' + } + }, + + // Button Dialog. + button : + { + title : 'Eigindi hnapps', + text : 'Texti', + type : 'Gerð', + typeBtn : 'Hnappur', + typeSbm : 'Staðfesta', + typeRst : 'Hreinsa' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Eigindi markreits', + radioTitle : 'Eigindi valhnapps', + value : 'Gildi', + selected : 'Valið' + }, + + // Form Dialog. + form : + { + title : 'Eigindi innsláttarforms', + menu : 'Eigindi innsláttarforms', + action : 'Aðgerð', + method : 'Aðferð', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Eigindi lista', + selectInfo : 'Upplýsingar', + opAvail : 'Kostir', + value : 'Gildi', + size : 'Stærð', + lines : 'lÃnur', + chkMulti : 'Leyfa fleiri kosti', + opText : 'Texti', + opValue : 'Gildi', + btnAdd : 'Bæta við', + btnModify : 'Breyta', + btnUp : 'Upp', + btnDown : 'Niður', + btnSetValue : 'Merkja sem valið', + btnDelete : 'Eyða' + }, + + // Textarea Dialog. + textarea : + { + title : 'Eigindi textasvæðis', + cols : 'Dálkar', + rows : 'LÃnur' + }, + + // Text Field Dialog. + textfield : + { + title : 'Eigindi textareits', + name : 'Nafn', + value : 'Gildi', + charWidth : 'Breidd (leturtákn)', + maxChars : 'Hámarksfjöldi leturtákna', + type : 'Gerð', + typeText : 'Texti', + typePass : 'Lykilorð' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Eigindi falins svæðis', + name : 'Nafn', + value : 'Gildi' + }, + + // Image Dialog. + image : + { + title : 'Eigindi myndar', + titleButton : 'Eigindi myndahnapps', + menu : 'Eigindi myndar', + infoTab : 'Almennt', + btnUpload : 'Hlaða upp', + upload : 'Hlaða upp', + alt : 'Baklægur texti', + lockRatio : 'Festa stærðarhlutfall', + resetSize : 'Reikna stærð', + border : 'Rammi', + hSpace : 'Vinstri bil', + vSpace : 'Hægri bil', + alertUrl : 'Sláðu inn slóðina að myndinni', + linkTab : 'Stikla', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Eigindi Flash', + propertiesTab : 'Properties', // MISSING + title : 'Eigindi Flash', + chkPlay : 'Sjálfvirk spilun', + chkLoop : 'Endurtekning', + chkMenu : 'Sýna Flash-valmynd', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Skali', + scaleAll : 'Sýna allt', + scaleNoBorder : 'Ãn ramma', + scaleFit : 'Fella skala að stærð', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs neðst', + alignAbsMiddle : 'Abs miðjuð', + alignBaseline : 'GrunnlÃna', + alignTextTop : 'Efri brún texta', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Bakgrunnslitur', + hSpace : 'Vinstri bil', + vSpace : 'Hægri bil', + validateSrc : 'Sláðu inn veffang stiklunnar!', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Villuleit', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Ekki à orðabókinni', + changeTo : 'Tillaga', + btnIgnore : 'Hunsa', + btnIgnoreAll : 'Hunsa allt', + btnReplace : 'Skipta', + btnReplaceAll : 'Skipta öllu', + btnUndo : 'Til baka', + noSuggestions : '- engar tillögur -', + progress : 'Villuleit à gangi...', + noMispell : 'Villuleit lokið: Engin villa fannst', + noChanges : 'Villuleit lokið: Engu orði breytt', + oneChange : 'Villuleit lokið: Einu orði breytt', + manyChanges : 'Villuleit lokið: %1 orðum breytt', + ieSpellDownload : 'Villuleit ekki sett upp.<br>Viltu setja hana upp?' + }, + + smiley : + { + toolbar : 'Svipur', + title : 'Velja svip', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Númeraður listi', + bulletedlist : 'Punktalisti', + indent : 'Minnka inndrátt', + outdent : 'Auka inndrátt', + + justify : + { + left : 'Vinstrijöfnun', + center : 'Miðja texta', + right : 'Hægrijöfnun', + block : 'Jafna báðum megin' + }, + + blockquote : 'Inndráttur', + + clipboard : + { + title : 'LÃma', + cutError : 'Ãryggisstillingar vafrans þÃns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið à klippa (Ctrl/Cmd+X).', + copyError : 'Ãryggisstillingar vafrans þÃns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið à afrita (Ctrl/Cmd+C).', + pasteMsg : 'LÃmdu à svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.', + securityMsg : 'Vegna öryggisstillinga à vafranum þÃnum fær ritillinn ekki beinan aðgang að klippuborðinu. Ãú verður að lÃma innihaldið aftur inn à þennan glugga.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'LÃma úr Word', + title : 'LÃma úr Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'LÃma sem ósniðinn texta', + title : 'LÃma sem ósniðinn texta' + }, + + templates : + { + button : 'Sniðmát', + title : 'Innihaldssniðmát', + options : 'Template Options', // MISSING + insertOption : 'Skipta út raunverulegu innihaldi', + selectPromptMsg : 'Veldu sniðmát til að opna à ritlinum.<br>(Núverandi innihald vÃkur fyrir þvÃ!):', + emptyListMsg : '(Ekkert sniðmát er skilgreint!)' + }, + + showBlocks : 'Sýna blokkir', + + stylesCombo : + { + label : 'StÃlflokkur', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'StÃlsnið', + panelTitle : 'StÃlsnið', + + tag_p : 'Venjulegt letur', + tag_pre : 'Forsniðið', + tag_address : 'Vistfang', + tag_h1 : 'Fyrirsögn 1', + tag_h2 : 'Fyrirsögn 2', + tag_h3 : 'Fyrirsögn 3', + tag_h4 : 'Fyrirsögn 4', + tag_h5 : 'Fyrirsögn 5', + tag_h6 : 'Fyrirsögn 6', + tag_div : 'Venjulegt (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Leturgerð ', + voiceLabel : 'Font', // MISSING + panelTitle : 'Leturgerð ' + }, + + fontSize : + { + label : 'Leturstærð ', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Leturstærð ' + }, + + colorButton : + { + textColorTitle : 'Litur texta', + bgColorTitle : 'Bakgrunnslitur', + panelTitle : 'Colors', // MISSING + auto : 'Sjálfval', + more : 'Fleiri liti...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Eigindi skjals', + title : 'Eigindi skjals', + design : 'Design', // MISSING + meta : 'Lýsigögn', + chooseColor : 'Choose', // MISSING + other : '<annar>', + docTitle : 'Titill sÃðu', + charset : 'Letursett', + charsetOther : 'Annað letursett', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Mið-evrópskt', + charsetCT : 'KÃnverskt, hefðbundið (Big5)', + charsetCR : 'Kýrilskt', + charsetGR : 'GrÃskt', + charsetJP : 'Japanskt', + charsetKR : 'Kóreskt', + charsetTR : 'Tyrkneskt', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Vestur-evrópst', + docType : 'Flokkur skjalategunda', + docTypeOther : 'Annar flokkur skjalategunda', + xhtmlDec : 'Fella inn XHTML lýsingu', + bgColor : 'Bakgrunnslitur', + bgImage : 'Slóð bakgrunnsmyndar', + bgFixed : 'Læstur bakgrunnur', + txtColor : 'Litur texta', + margin : 'HliðarspássÃa', + marginTop : 'Efst', + marginLeft : 'Vinstri', + marginRight : 'Hægri', + marginBottom : 'Neðst', + metaKeywords : 'Lykilorð efnisorðaskrár (aðgreind með kommum)', + metaDescription : 'Lýsing skjals', + metaAuthor : 'Höfundur', + metaCopyright : 'Höfundarréttur', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/it.js b/_source/lang/it.js new file mode 100644 index 0000000..ad0e17d --- /dev/null +++ b/_source/lang/it.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Italian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['it'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Codice Sorgente', + newPage : 'Nuova pagina vuota', + save : 'Salva', + preview : 'Anteprima', + cut : 'Taglia', + copy : 'Copia', + paste : 'Incolla', + print : 'Stampa', + underline : 'Sottolineato', + bold : 'Grassetto', + italic : 'Corsivo', + selectAll : 'Seleziona tutto', + removeFormat : 'Elimina formattazione', + strike : 'Barrato', + subscript : 'Pedice', + superscript : 'Apice', + horizontalrule : 'Inserisci riga orizzontale', + pagebreak : 'Inserisci interruzione di pagina', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Elimina collegamento', + undo : 'Annulla', + redo : 'Ripristina', + + // Common messages and labels. + common : + { + browseServer : 'Cerca sul server', + url : 'URL', + protocol : 'Protocollo', + upload : 'Carica', + uploadSubmit : 'Invia al server', + image : 'Immagine', + flash : 'Oggetto Flash', + form : 'Modulo', + checkbox : 'Checkbox', + radio : 'Radio Button', + textField : 'Campo di testo', + textarea : 'Area di testo', + hiddenField : 'Campo nascosto', + button : 'Bottone', + select : 'Menu di selezione', + imageButton : 'Bottone immagine', + notSet : '<non impostato>', + id : 'Id', + name : 'Nome', + langDir : 'Direzione scrittura', + langDirLtr : 'Da Sinistra a Destra (LTR)', + langDirRtl : 'Da Destra a Sinistra (RTL)', + langCode : 'Codice Lingua', + longDescr : 'URL descrizione estesa', + cssClass : 'Nome classe CSS', + advisoryTitle : 'Titolo', + cssStyle : 'Stile', + ok : 'OK', + cancel : 'Annulla', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'Generale', + advancedTab : 'Avanzate', + validateNumberFailed : 'Il valore inserito non è un numero.', + confirmNewPage : 'Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?', + confirmCancel : 'Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Larghezza', + height : 'Altezza', + align : 'Allineamento', + alignLeft : 'Sinistra', + alignRight : 'Destra', + alignCenter : 'Centrato', + alignTop : 'In Alto', + alignMiddle : 'Centrato', + alignBottom : 'In Basso', + invalidHeight : 'L\'altezza dev\'essere un numero', + invalidWidth : 'La Larghezza dev\'essere un numero', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, non disponibile</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Inserisci carattere speciale', + title : 'Seleziona carattere speciale', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Inserisci/Modifica collegamento', + other : '<altro>', + menu : 'Modifica collegamento', + title : 'Collegamento', + info : 'Informazioni collegamento', + target : 'Destinazione', + upload : 'Carica', + advanced : 'Avanzate', + type : 'Tipo di Collegamento', + toUrl : 'URL', // MISSING + toAnchor : 'Ancora nella pagina', + toEmail : 'E-Mail', + targetFrame : '<riquadro>', + targetPopup : '<finestra popup>', + targetFrameName : 'Nome del riquadro di destinazione', + targetPopupName : 'Nome finestra popup', + popupFeatures : 'Caratteristiche finestra popup', + popupResizable : 'Ridimensionabile', + popupStatusBar : 'Barra di stato', + popupLocationBar: 'Barra degli indirizzi', + popupToolbar : 'Barra degli strumenti', + popupMenuBar : 'Barra del menu', + popupFullScreen : 'A tutto schermo (IE)', + popupScrollBars : 'Barre di scorrimento', + popupDependent : 'Dipendente (Netscape)', + popupLeft : 'Posizione da sinistra', + popupTop : 'Posizione dall\'alto', + id : 'Id', + langDir : 'Direzione scrittura', + langDirLTR : 'Da Sinistra a Destra (LTR)', + langDirRTL : 'Da Destra a Sinistra (RTL)', + acccessKey : 'Scorciatoia<br />da tastiera', + name : 'Nome', + langCode : 'Direzione scrittura', + tabIndex : 'Ordine di tabulazione', + advisoryTitle : 'Titolo', + advisoryContentType : 'Tipo della risorsa collegata', + cssClasses : 'Nome classe CSS', + charset : 'Set di caretteri della risorsa collegata', + styles : 'Stile', + rel : 'Relationship', // MISSING + selectAnchor : 'Scegli Ancora', + anchorName : 'Per Nome', + anchorId : 'Per id elemento', + emailAddress : 'Indirizzo E-Mail', + emailSubject : 'Oggetto del messaggio', + emailBody : 'Corpo del messaggio', + noAnchors : '(Nessuna ancora disponibile nel documento)', + noUrl : 'Devi inserire l\'URL del collegamento', + noEmail : 'Devi inserire un\'indirizzo e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Inserisci/Modifica Ancora', + menu : 'Proprietà ancora', + title : 'Proprietà ancora', + name : 'Nome ancora', + errorName : 'Inserici il nome dell\'ancora', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Cerca e Sostituisci', + find : 'Trova', + replace : 'Sostituisci', + findWhat : 'Trova:', + replaceWith : 'Sostituisci con:', + notFoundMsg : 'L\'elemento cercato non è stato trovato.', + matchCase : 'Maiuscole/minuscole', + matchWord : 'Solo parole intere', + matchCyclic : 'Ricerca ciclica', + replaceAll : 'Sostituisci tutto', + replaceSuccessMsg : '%1 occorrenza(e) sostituite.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabella', + title : 'Proprietà tabella', + menu : 'Proprietà tabella', + deleteTable : 'Cancella Tabella', + rows : 'Righe', + columns : 'Colonne', + border : 'Dimensione bordo', + widthPx : 'pixel', + widthPc : 'percento', + widthUnit : 'width unit', // MISSING + cellSpace : 'Spaziatura celle', + cellPad : 'Padding celle', + caption : 'Intestazione', + summary : 'Indice', + headers : 'Intestazione', + headersNone : 'Nessuna', + headersColumn : 'Prima Colonna', + headersRow : 'Prima Riga', + headersBoth : 'Entrambe', + invalidRows : 'Il numero di righe dev\'essere un numero maggiore di 0.', + invalidCols : 'Il numero di colonne dev\'essere un numero maggiore di 0.', + invalidBorder : 'La dimensione del bordo dev\'essere un numero.', + invalidWidth : 'La larghezza della tabella dev\'essere un numero.', + invalidHeight : 'L\'altezza della tabella dev\'essere un numero.', + invalidCellSpacing : 'La spaziatura tra le celle dev\'essere un numero.', + invalidCellPadding : 'Il pagging delle celle dev\'essere un numero', + + cell : + { + menu : 'Cella', + insertBefore : 'Inserisci Cella Prima', + insertAfter : 'Inserisci Cella Dopo', + deleteCell : 'Elimina celle', + merge : 'Unisce celle', + mergeRight : 'Unisci a Destra', + mergeDown : 'Unisci in Basso', + splitHorizontal : 'Dividi Cella Orizzontalmente', + splitVertical : 'Dividi Cella Verticalmente', + title : 'Proprietà della cella', + cellType : 'Tipo di cella', + rowSpan : 'Su più righe', + colSpan : 'Su più colonne', + wordWrap : 'Ritorno a capo', + hAlign : 'Allineamento orizzontale', + vAlign : 'Allineamento verticale', + alignBaseline : 'Linea Base', + bgColor : 'Colore di Sfondo', + borderColor : 'Colore del Bordo', + data : 'Dati', + header : 'Intestazione', + yes : 'Si', + no : 'No', + invalidWidth : 'La larghezza della cella dev\'essere un numero.', + invalidHeight : 'L\'altezza della cella dev\'essere un numero.', + invalidRowSpan : 'Il numero di righe dev\'essere un numero intero.', + invalidColSpan : 'Il numero di colonne dev\'essere un numero intero.', + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Riga', + insertBefore : 'Inserisci Riga Prima', + insertAfter : 'Inserisci Riga Dopo', + deleteRow : 'Elimina righe' + }, + + column : + { + menu : 'Colonna', + insertBefore : 'Inserisci Colonna Prima', + insertAfter : 'Inserisci Colonna Dopo', + deleteColumn : 'Elimina colonne' + } + }, + + // Button Dialog. + button : + { + title : 'Proprietà bottone', + text : 'Testo (Value)', + type : 'Tipo', + typeBtn : 'Bottone', + typeSbm : 'Invio', + typeRst : 'Annulla' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Proprietà checkbox', + radioTitle : 'Proprietà radio button', + value : 'Valore', + selected : 'Selezionato' + }, + + // Form Dialog. + form : + { + title : 'Proprietà modulo', + menu : 'Proprietà modulo', + action : 'Azione', + method : 'Metodo', + encoding : 'Codifica' + }, + + // Select Field Dialog. + select : + { + title : 'Proprietà menu di selezione', + selectInfo : 'Info', + opAvail : 'Opzioni disponibili', + value : 'Valore', + size : 'Dimensione', + lines : 'righe', + chkMulti : 'Permetti selezione multipla', + opText : 'Testo', + opValue : 'Valore', + btnAdd : 'Aggiungi', + btnModify : 'Modifica', + btnUp : 'Su', + btnDown : 'Gi', + btnSetValue : 'Imposta come predefinito', + btnDelete : 'Rimuovi' + }, + + // Textarea Dialog. + textarea : + { + title : 'Proprietà area di testo', + cols : 'Colonne', + rows : 'Righe' + }, + + // Text Field Dialog. + textfield : + { + title : 'Proprietà campo di testo', + name : 'Nome', + value : 'Valore', + charWidth : 'Larghezza', + maxChars : 'Numero massimo di caratteri', + type : 'Tipo', + typeText : 'Testo', + typePass : 'Password' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Proprietà campo nascosto', + name : 'Nome', + value : 'Valore' + }, + + // Image Dialog. + image : + { + title : 'Proprietà immagine', + titleButton : 'Proprietà bottone immagine', + menu : 'Proprietà immagine', + infoTab : 'Informazioni immagine', + btnUpload : 'Invia al server', + upload : 'Carica', + alt : 'Testo alternativo', + lockRatio : 'Blocca rapporto', + resetSize : 'Reimposta dimensione', + border : 'Bordo', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Devi inserire l\'URL per l\'immagine', + linkTab : 'Collegamento', + button2Img : 'Vuoi trasformare il bottone immagine selezionato in un\'immagine semplice?', + img2Button : 'Vuoi trasferomare l\'immagine selezionata in un bottone immagine?', + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Proprietà Oggetto Flash', + propertiesTab : 'Proprietà ', + title : 'Proprietà Oggetto Flash', + chkPlay : 'Avvio Automatico', + chkLoop : 'Riavvio automatico', + chkMenu : 'Abilita Menu di Flash', + chkFull : 'Permetti la modalità tutto schermo', + scale : 'Ridimensiona', + scaleAll : 'Mostra Tutto', + scaleNoBorder : 'Senza Bordo', + scaleFit : 'Dimensione Esatta', + access : 'Accesso Script', + accessAlways : 'Sempre', + accessSameDomain: 'Solo stesso dominio', + accessNever : 'Mai', + alignAbsBottom : 'In basso assoluto', + alignAbsMiddle : 'Centrato assoluto', + alignBaseline : 'Linea base', + alignTextTop : 'In alto al testo', + quality : 'Qualità ', + qualityBest : 'Massima', + qualityHigh : 'Alta', + qualityAutoHigh : 'Alta Automatica', + qualityMedium : 'Intermedia', + qualityAutoLow : 'Bassa Automatica', + qualityLow : 'Bassa', + windowModeWindow: 'Finestra', + windowModeOpaque: 'Opaca', + windowModeTransparent : 'Trasparente', + windowMode : 'Modalità finestra', + flashvars : 'Variabili per Flash', + bgcolor : 'Colore sfondo', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'Devi inserire l\'URL del collegamento', + validateHSpace : 'L\'HSpace dev\'essere un numero.', + validateVSpace : 'Il VSpace dev\'essere un numero.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Correttore ortografico', + title : 'Controllo ortografico', + notAvailable : 'Il servizio non è momentaneamente disponibile.', + errorLoading : 'Errore nel caricamento dell\'host col servizio applicativo: %s.', + notInDic : 'Non nel dizionario', + changeTo : 'Cambia in', + btnIgnore : 'Ignora', + btnIgnoreAll : 'Ignora tutto', + btnReplace : 'Cambia', + btnReplaceAll : 'Cambia tutto', + btnUndo : 'Annulla', + noSuggestions : '- Nessun suggerimento -', + progress : 'Controllo ortografico in corso', + noMispell : 'Controllo ortografico completato: nessun errore trovato', + noChanges : 'Controllo ortografico completato: nessuna parola cambiata', + oneChange : 'Controllo ortografico completato: 1 parola cambiata', + manyChanges : 'Controllo ortografico completato: %1 parole cambiate', + ieSpellDownload : 'Contollo ortografico non installato. Lo vuoi scaricare ora?' + }, + + smiley : + { + toolbar : 'Emoticon', + title : 'Inserisci emoticon', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 elemento' + }, + + numberedlist : 'Elenco numerato', + bulletedlist : 'Elenco puntato', + indent : 'Aumenta rientro', + outdent : 'Riduci rientro', + + justify : + { + left : 'Allinea a sinistra', + center : 'Centra', + right : 'Allinea a destra', + block : 'Giustifica' + }, + + blockquote : 'Citazione', + + clipboard : + { + title : 'Incolla', + cutError : 'Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).', + copyError : 'Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).', + pasteMsg : 'Incolla il testo all\'interno dell\'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.', + securityMsg : 'A causa delle impostazioni di sicurezza del browser,l\'editor non è in grado di accedere direttamente agli appunti. E\' pertanto necessario incollarli di nuovo in questa finestra.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?', + toolbar : 'Incolla da Word', + title : 'Incolla da Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Incolla come testo semplice', + title : 'Incolla come testo semplice' + }, + + templates : + { + button : 'Modelli', + title : 'Contenuto dei modelli', + options : 'Template Options', // MISSING + insertOption : 'Cancella il contenuto corrente', + selectPromptMsg : 'Seleziona il modello da aprire nell\'editor<br />(il contenuto attuale verrà eliminato):', + emptyListMsg : '(Nessun modello definito)' + }, + + showBlocks : 'Visualizza Blocchi', + + stylesCombo : + { + label : 'Stile', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Stili per blocchi', + panelTitle2 : 'Stili in linea', + panelTitle3 : 'Stili per oggetti' + }, + + format : + { + label : 'Formato', + panelTitle : 'Formato', + + tag_p : 'Normale', + tag_pre : 'Formattato', + tag_address : 'Indirizzo', + tag_h1 : 'Titolo 1', + tag_h2 : 'Titolo 2', + tag_h3 : 'Titolo 3', + tag_h4 : 'Titolo 4', + tag_h5 : 'Titolo 5', + tag_h6 : 'Titolo 6', + tag_div : 'Paragrafo (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', + panelTitle : 'Font' + }, + + fontSize : + { + label : 'Dimensione', + voiceLabel : 'Dimensione Font', + panelTitle : 'Dimensione' + }, + + colorButton : + { + textColorTitle : 'Colore testo', + bgColorTitle : 'Colore sfondo', + panelTitle : 'Colors', // MISSING + auto : 'Automatico', + more : 'Altri colori...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Controllo Ortografico Mentre Scrivi', + opera_title : 'Not supported by Opera', // MISSING + enable : 'Abilita COMS', + disable : 'Disabilita COMS', + about : 'About COMS', + toggle : 'Inverti abilitazione SCOMS', + options : 'Opzioni', + langs : 'Lingue', + moreSuggestions : 'Altri suggerimenti', + ignore : 'Ignora', + ignoreAll : 'Ignora tutti', + addWord : 'Aggiungi Parola', + emptyDic : 'Il nome del dizionario non può essere vuoto.', + + optionsTab : 'Opzioni', + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Lingue', + + dictionariesTab : 'Dizionari', + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' + }, + + about : + { + title : 'About CKEditor', + dlgTitle : 'About CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Per le informazioni sulla licenza si prega di visitare il nostro sito:', + copy : 'Copyright © $1. Tutti i diritti riservati.' + }, + + maximize : 'Massimizza', + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Ancora', + flash : 'Animazione Flash', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Oggetto sconosciuto' + }, + + resize : 'Trascina per ridimensionare', + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Proprietà del Documento', + title : 'Proprietà del Documento', + design : 'Design', // MISSING + meta : 'Meta Data', + chooseColor : 'Choose', // MISSING + other : '<altro>', + docTitle : 'Titolo pagina', + charset : 'Set di caretteri', + charsetOther : 'Altro set di caretteri', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Europa Centrale', + charsetCT : 'Cinese Tradizionale (Big5)', + charsetCR : 'Cirillico', + charsetGR : 'Greco', + charsetJP : 'Giapponese', + charsetKR : 'Coreano', + charsetTR : 'Turco', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Europa Occidentale', + docType : 'Intestazione DocType', + docTypeOther : 'Altra intestazione DocType', + xhtmlDec : 'Includi dichiarazione XHTML', + bgColor : 'Colore di sfondo', + bgImage : 'Immagine di sfondo', + bgFixed : 'Sfondo fissato', + txtColor : 'Colore testo', + margin : 'Margini', + marginTop : 'In Alto', + marginLeft : 'A Sinistra', + marginRight : 'A Destra', + marginBottom : 'In Basso', + metaKeywords : 'Chiavi di indicizzazione documento (separate da virgola)', + metaDescription : 'Descrizione documento', + metaAuthor : 'Autore', + metaCopyright : 'Copyright', // MISSING + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/ja.js b/_source/lang/ja.js new file mode 100644 index 0000000..673a60a --- /dev/null +++ b/_source/lang/ja.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Japanese language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['ja'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'ãªããããã¹ãã¨ãã£ã¿, %1, ãã«ã㯠ALT 0 ãæ¼ãã¦ãã ãã', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'ãªããããã¹ãã¨ãã£ã¿', + + // Toolbar buttons without dialogs. + source : 'ã½ã¼ã¹', + newPage : 'æ°ãããã¼ã¸', + save : 'ä¿å', + preview : 'ãã¬ãã¥ã¼', + cut : 'åãåã', + copy : 'ã³ãã¼', + paste : 'è²¼ãä»ã', + print : 'å°å·', + underline : 'ä¸ç·', + bold : '太å', + italic : 'æä½', + selectAll : 'ãã¹ã¦é¸æ', + removeFormat : 'ãã©ã¼ãããåé¤', + strike : 'æã¡æ¶ãç·', + subscript : 'æ·»ãå', + superscript : 'ä¸ä»ãæå', + horizontalrule : '横罫ç·', + pagebreak : 'æ¹ãã¼ã¸æ¿å ¥', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'ãªã³ã¯åé¤', + undo : 'å ã«æ»ã', + redo : 'ããç´ã', + + // Common messages and labels. + common : + { + browseServer : 'ãµã¼ãã¼ãã©ã¦ã¶ã¼', + url : 'URL', + protocol : 'ãããã³ã«', + upload : 'ã¢ãããã¼ã', + uploadSubmit : 'ãµã¼ãã¼ã«éä¿¡', + image : 'ã¤ã¡ã¼ã¸', + flash : 'Flash', + form : 'ãã©ã¼ã ', + checkbox : 'ãã§ãã¯ããã¯ã¹', + radio : 'ã©ã¸ãªãã¿ã³', + textField : 'ï¼è¡ããã¹ã', + textarea : 'ããã¹ãã¨ãªã¢', + hiddenField : 'ä¸å¯è¦ãã£ã¼ã«ã', + button : 'ãã¿ã³', + select : 'é¸æãã£ã¼ã«ã', + imageButton : 'ç»åãã¿ã³', + notSet : '<ãªã>', + id : 'Id', + name : 'Nameå±æ§', + langDir : 'æå表è¨ã®æ¹å', + langDirLtr : 'å·¦ããå³ (LTR)', + langDirRtl : 'å³ããå·¦ (RTL)', + langCode : 'è¨èªã³ã¼ã', + longDescr : 'longdescå±æ§(é·æ説æ)', + cssClass : 'ã¹ã¿ã¤ã«ã·ã¼ãã¯ã©ã¹', + advisoryTitle : 'Titleå±æ§', + cssStyle : 'ã¹ã¿ã¤ã«ã·ã¼ã', + ok : 'OK', + cancel : 'ãã£ã³ã»ã«', + close : 'éãã', + preview : 'ãã¬ãã¥ã¼', + generalTab : 'å ¨è¬', + advancedTab : 'é«åº¦ãªè¨å®', + validateNumberFailed : 'å¤ãæ°ã§ã¯ããã¾ãã', + confirmNewPage : 'å¤æ´å 容ãä¿åããã æ°ãããã¼ã¸ãéãã¦ãããããã§ããããï¼', + confirmCancel : 'ãªãã·ã§ã³è¨å®ãå¤æ´ãã¾ããããã¤ã¢ãã°ãéãã¦ãããããã§ããããï¼', + options : 'ãªãã·ã§ã³', + target : 'ã¿ã¼ã²ãã', + targetNew : 'æ°ããã¦ã£ã³ã㦠(_空ç½)', + targetTop : 'æä¸é¨ã¦ã£ã³ã㦠(_ããã)', + targetSelf : 'åãã¦ã£ã³ã㦠(_åä¸)', + targetParent : '親ã¦ã£ã³ã㦠(_親)', + langDirLTR : 'å·¦ããå³ (LTR)', + langDirRTL : 'å³ããå·¦ (RTL)', + styles : 'ã¹ã¿ã¤ã«', + cssClasses : 'ã¹ã¿ã¤ã«ã·ã¼ãã¯ã©ã¹', + width : 'å¹ ', + height : 'é«ã', + align : 'è¡æã', + alignLeft : 'å·¦', + alignRight : 'å³', + alignCenter : 'ä¸å¤®', + alignTop : 'ä¸', + alignMiddle : 'ä¸å¤®', + alignBottom : 'ä¸', + invalidHeight : 'é«ãã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidWidth : 'å¹ ã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, å©ç¨ä¸å¯è½</span>' + }, + + contextmenu : + { + options : 'ã³ã³ããã¹ãã¡ãã¥ã¼ãªãã·ã§ã³' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'ç¹æ®æåæ¿å ¥', + title : 'ç¹æ®æåé¸æ', + options : 'ç¹æ®æåãªãã·ã§ã³' + }, + + // Link dialog. + link : + { + toolbar : 'ãªã³ã¯æ¿å ¥/ç·¨é', + other : '<ãã®ä»ã®>', + menu : 'ãªã³ã¯ç·¨é', + title : 'ãã¤ãã¼ãªã³ã¯', + info : 'ãã¤ãã¼ãªã³ã¯ æ å ±', + target : 'ã¿ã¼ã²ãã', + upload : 'ã¢ãããã¼ã', + advanced : 'é«åº¦ãªè¨å®', + type : 'ãªã³ã¯ã¿ã¤ã', + toUrl : 'URL', // MISSING + toAnchor : 'ãã®ãã¼ã¸ã®ã¢ã³ã«ã¼', + toEmail : 'E-Mail', + targetFrame : '<ãã¬ã¼ã >', + targetPopup : '<ãããã¢ããã¦ã£ã³ãã¦>', + targetFrameName : 'ç®çã®ãã¬ã¼ã å', + targetPopupName : 'ãããã¢ããã¦ã£ã³ãã¦å', + popupFeatures : 'ãããã¢ããã¦ã£ã³ãã¦ç¹å¾´', + popupResizable : 'ãµã¤ãºå¯å¤', + popupStatusBar : 'ã¹ãã¼ã¿ã¹ãã¼', + popupLocationBar: 'ãã±ã¼ã·ã§ã³ãã¼', + popupToolbar : 'ãã¼ã«ãã¼', + popupMenuBar : 'ã¡ãã¥ã¼ãã¼', + popupFullScreen : 'å ¨ç»é¢ã¢ã¼ã(IE)', + popupScrollBars : 'ã¹ã¯ãã¼ã«ãã¼', + popupDependent : 'éããã¦ã£ã³ãã¦ã«é£åãã¦éãã (Netscape)', + popupLeft : '左端ããã®åº§æ¨ã§æå®', + popupTop : 'ä¸ç«¯ããã®åº§æ¨ã§æå®', + id : 'Id', + langDir : 'æå表è¨ã®æ¹å', + langDirLTR : 'å·¦ããå³ (LTR)', + langDirRTL : 'å³ããå·¦ (RTL)', + acccessKey : 'ã¢ã¯ã»ã¹ãã¼', + name : 'Nameå±æ§', + langCode : 'è¨èªã³ã¼ã', + tabIndex : 'ã¿ãã¤ã³ããã¯ã¹', + advisoryTitle : 'Titleå±æ§', + advisoryContentType : 'Content Typeå±æ§', + cssClasses : 'ã¹ã¿ã¤ã«ã·ã¼ãã¯ã©ã¹', + charset : 'ãªã³ã¯charsetå±æ§', + styles : 'ã¹ã¿ã¤ã«ã·ã¼ã', + rel : 'Relationship', // MISSING + selectAnchor : 'ã¢ã³ã«ã¼ãé¸æ', + anchorName : 'ã¢ã³ã«ã¼å', + anchorId : 'ã¨ã¬ã¡ã³ãID', + emailAddress : 'E-Mail ã¢ãã¬ã¹', + emailSubject : '件å', + emailBody : 'æ¬æ', + noAnchors : '(ããã¥ã¡ã³ãã«ããã¦å©ç¨å¯è½ãªã¢ã³ã«ã¼ã¯ããã¾ããã)', + noUrl : 'ãªã³ã¯URLãå ¥åãã¦ãã ããã', + noEmail : 'ã¡ã¼ã«ã¢ãã¬ã¹ãå ¥åãã¦ãã ããã' + }, + + // Anchor dialog + anchor : + { + toolbar : 'ã¢ã³ã«ã¼æ¿å ¥/ç·¨é', + menu : 'ã¢ã³ã«ã¼ ããããã£', + title : 'ã¢ã³ã«ã¼ ããããã£', + name : 'ã¢ã³ã«ã¼å', + errorName : 'ã¢ã³ã«ã¼åãå¿ ãå ¥åãã¦ãã ããã', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : '段è½çªå· ããããã£', + bulletedTitle : 'ç®æ¡æ¸ã ããããã£', + type : 'ã¿ã¤ã', + start : 'éå§', + validateStartNumber :'ãªã¹ãéå§çªå·ã¯æ°å¤ã§å ¥åãã¦ãã ããã', + circle : 'ç½ä¸¸', + disc : 'é»ä¸¸', + square : 'åè§', + none : 'ãªã', + notset : '<ãªã>', + armenian : 'ã¢ã«ã¡ãã¢æ°å', + georgian : 'ã°ã«ã¸ã¢æ°å (an, ban, gan, etc.)', + lowerRoman : 'å°æåãã¼ãæ°å (i, ii, iii, iv, v, etc.)', + upperRoman : '大æåãã¼ãæ°å (I, II, III, IV, V, etc.)', + lowerAlpha : 'å°æåã¢ã«ãã¡ããã (a, b, c, d, e, etc.)', + upperAlpha : '大æåã¢ã«ãã¡ããã (A, B, C, D, E, etc.)', + lowerGreek : 'å°æåã®ãªã·ã£æå (alpha, beta, gamma, etc.)', + decimal : 'æ°å (1, 2, 3, etc.)', + decimalLeadingZero : 'ä¸ä½æ¡ã«0ãã¤ããæ°å (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'æ¤ç´¢ãã¦ç½®æ', + find : 'æ¤ç´¢', + replace : 'ç½®ãæã', + findWhat : 'æ¤ç´¢ããæåå:', + replaceWith : 'ç½®æãããæåå:', + notFoundMsg : 'æå®ãããæååã¯è¦ã¤ããã¾ããã§ããã', + matchCase : '大æåã¨å°æåãåºå¥ãã', + matchWord : 'åèªåä½ã§æ¢ã', + matchCyclic : 'ä¸å¨ãã', + replaceAll : 'ãã¹ã¦ç½®æã', + replaceSuccessMsg : '%1 åç½®æãã¾ããã' + }, + + // Table Dialog + table : + { + toolbar : 'ãã¼ãã«', + title : 'ãã¼ãã« ããããã£', + menu : 'ãã¼ãã« ããããã£', + deleteTable : 'ãã¼ãã«åé¤', + rows : 'è¡', + columns : 'å', + border : 'ãã¼ãã¼ãµã¤ãº', + widthPx : 'ãã¯ã»ã«', + widthPc : 'ãã¼ã»ã³ã', + widthUnit : 'ã¦ããã', + cellSpace : 'ã»ã«å ä½ç½', + cellPad : 'ã»ã«å éé', + caption : 'ãã£ãã·ã§ã³', + summary : 'ãã¼ãã«ã®æ¦è¦', + headers : 'ãã¼ãã«ããã(th)', + headersNone : 'ãªã', + headersColumn : 'åãã®åã®ã¿', + headersRow : 'åãã®è¡ã®ã¿', + headersBoth : '両æ¹', + invalidRows : 'è¡ã¯0ãã大ããªæ°å¤ã§å ¥åãã¦ãã ããã', + invalidCols : 'åã¯0ãã大ããªæ°å¤ã§å ¥åãã¦ãã ããã', + invalidBorder : 'ãã¼ãã¼ãµã¤ãºã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidWidth : 'å¹ ã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidHeight : 'é«ãã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidCellSpacing : 'ã»ã«å ä½ç½ã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidCellPadding : 'ã»ã«å ééã¯æ°å¤ã§å ¥åãã¦ãã ããã', + + cell : + { + menu : 'ã»ã«', + insertBefore : 'ã»ã«ã®åã«æ¿å ¥', + insertAfter : 'ã»ã«ã®å¾ã«æ¿å ¥', + deleteCell : 'ã»ã«åé¤', + merge : 'ã»ã«çµå', + mergeRight : 'å³ã«çµå', + mergeDown : 'ä¸ã«çµå', + splitHorizontal : 'ã»ã«ãæ°´å¹³æ¹ååå²', + splitVertical : 'ã»ã«ãåç´æ¹åã«åå²', + title : 'ã»ã«ããããã£', + cellType : 'ã»ã«ã¿ã¤ã', + rowSpan : 'ç¸¦å¹ (è¡æ°)', + colSpan : 'æ¨ªå¹ (åæ°)', + wordWrap : 'æãè¿ã', + hAlign : 'ã»ã«æ¨ªã®æ´å', + vAlign : 'ã»ã«ç¸¦ã®æ´å', + alignBaseline : 'ãã¼ã¹ã©ã¤ã³', + bgColor : 'èæ¯è²', + borderColor : 'ãã¼ãã¼ã«ã©ã¼', + data : 'ãã¼ãã«ãã¼ã¿(td)', + header : 'ãã¼ãã«ããã(th)', + yes : 'Yes', + no : 'No', + invalidWidth : 'ã»ã«å¹ ã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidHeight : 'ã»ã«é«ãã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidRowSpan : 'ç¸¦å¹ (è¡æ°)ã¯æ°å¤ã§å ¥åãã¦ãã ããã', + invalidColSpan : 'æ¨ªå¹ (åæ°)ã¯æ°å¤ã§å ¥åãã¦ãã ããã', + chooseColor : 'è²ã®é¸æ' + }, + + row : + { + menu : 'è¡', + insertBefore : 'è¡ã®åã«æ¿å ¥', + insertAfter : 'è¡ã®å¾ã«æ¿å ¥', + deleteRow : 'è¡åé¤' + }, + + column : + { + menu : 'ã«ã©ã ', + insertBefore : 'ã«ã©ã ã®åã«æ¿å ¥', + insertAfter : 'ã«ã©ã ã®å¾ã«æ¿å ¥', + deleteColumn : 'ååé¤' + } + }, + + // Button Dialog. + button : + { + title : 'ãã¿ã³ ããããã£', + text : 'ããã¹ã (å¤)', + type : 'ã¿ã¤ã', + typeBtn : 'ãã¿ã³', + typeSbm : 'éä¿¡', + typeRst : 'ãªã»ãã' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ãã§ãã¯ããã¯ã¹ ããããã£', + radioTitle : 'ã©ã¸ãªãã¿ã³ ããããã£', + value : 'å¤', + selected : 'é¸ææ¸ã¿' + }, + + // Form Dialog. + form : + { + title : 'ãã©ã¼ã ããããã£', + menu : 'ãã©ã¼ã ããããã£', + action : 'ã¢ã¯ã·ã§ã³', + method : 'ã¡ã½ãã', + encoding : 'ã¨ã³ã³ã¼ãã£ã³ã°' + }, + + // Select Field Dialog. + select : + { + title : 'é¸æãã£ã¼ã«ã ããããã£', + selectInfo : 'æ å ±', + opAvail : 'å©ç¨å¯è½ãªãªãã·ã§ã³', + value : 'é¸æé ç®å¤', + size : 'ãµã¤ãº', + lines : 'è¡', + chkMulti : 'è¤æ°é ç®é¸æã許å¯', + opText : 'é¸æé ç®å', + opValue : 'å¤', + btnAdd : '追å ', + btnModify : 'ç·¨é', + btnUp : 'ä¸ã¸', + btnDown : 'ä¸ã¸', + btnSetValue : 'é¸æããå¤ãè¨å®', + btnDelete : 'åé¤' + }, + + // Textarea Dialog. + textarea : + { + title : 'ããã¹ãã¨ãªã¢ ããããã£', + cols : 'å', + rows : 'è¡' + }, + + // Text Field Dialog. + textfield : + { + title : 'ï¼è¡ããã¹ã ããããã£', + name : 'åå', + value : 'å¤', + charWidth : 'ãµã¤ãº', + maxChars : 'æ大é·', + type : 'ã¿ã¤ã', + typeText : 'ããã¹ã', + typePass : 'ãã¹ã¯ã¼ãå ¥å' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ä¸å¯è¦ãã£ã¼ã«ã ããããã£', + name : 'åå', + value : 'å¤' + }, + + // Image Dialog. + image : + { + title : 'ã¤ã¡ã¼ã¸ ããããã£', + titleButton : 'ç»åãã¿ã³ ããããã£', + menu : 'ã¤ã¡ã¼ã¸ ããããã£', + infoTab : 'ã¤ã¡ã¼ã¸ æ å ±', + btnUpload : 'ãµã¼ãã¼ã«éä¿¡', + upload : 'ã¢ãããã¼ã', + alt : '代æ¿ããã¹ã', + lockRatio : 'ããã¯æ¯ç', + resetSize : 'ãµã¤ãºãªã»ãã', + border : 'ãã¼ãã¼', + hSpace : '横éé', + vSpace : '縦éé', + alertUrl : 'ã¤ã¡ã¼ã¸ã®URLãå ¥åãã¦ãã ããã', + linkTab : 'ãªã³ã¯', + button2Img : 'é¸æãããã¿ã³ãç»åã«ç½®ãæãã¾ããï¼', + img2Button : 'é¸æããç»åããã¿ã³ã«ç½®ãæãã¾ããï¼', + urlMissing : 'ã¤ã¡ã¼ã¸ã®URLãå ¥åãã¦ãã ããã', + validateBorder : 'ãã¼ãã¼ã¯æ°å¤ã§å ¥åãã¦ãã ããã', + validateHSpace : '横ééã¯æ°å¤ã§å ¥åãã¦ãã ããã', + validateVSpace : '縦ééã¯æ°å¤ã§å ¥åãã¦ãã ããã' + }, + + // Flash Dialog + flash : + { + properties : 'Flash ããããã£', + propertiesTab : 'ããããã£', + title : 'Flash ããããã£', + chkPlay : 'åç', + chkLoop : 'ã«ã¼ãåç', + chkMenu : 'Flashã¡ãã¥ã¼å¯è½', + chkFull : 'ãã«ã¹ã¯ãªã¼ã³è¨±å¯', + scale : 'æ¡å¤§ç¸®å°è¨å®', + scaleAll : 'ãã¹ã¦è¡¨ç¤º', + scaleNoBorder : 'å¤ãè¦ããªãæ§ã«æ¡å¤§', + scaleFit : 'ä¸ä¸å·¦å³ã«ãã£ãã', + access : 'ã¹ããªã¯ãã¢ã¯ã»ã¹(AllowScriptAccess)', + accessAlways : 'ãã¹ã¦ã®å ´åã«éä¿¡å¯è½(Always)', + accessSameDomain: 'åä¸ãã¡ã¤ã³ã®ã¿ã«éä¿¡å¯è½(Same domain)', + accessNever : 'ãã¹ã¦ã®å ´åã«éä¿¡ä¸å¯è½(Never)', + alignAbsBottom : 'ä¸é¨(絶対ç)', + alignAbsMiddle : 'ä¸å¤®(絶対ç)', + alignBaseline : 'ãã¼ã¹ã©ã¤ã³', + alignTextTop : 'ããã¹ãä¸é¨', + quality : 'ç»è³ª', + qualityBest : 'å質åªå ', + qualityHigh : 'é«', + qualityAutoHigh : 'èªå/é«', + qualityMedium : 'ä¸', + qualityAutoLow : 'èªå/ä½', + qualityLow : 'ä½', + windowModeWindow: 'æ¨æº', + windowModeOpaque: 'èæ¯ãä¸éæè¨å®', + windowModeTransparent : 'èæ¯ãééè¨å®', + windowMode : 'ã¦ã£ã³ãã¦ã¢ã¼ã', + flashvars : 'ãã©ãã·ã¥ã«æ¸¡ãå¤æ°(FlashVars)', + bgcolor : 'èæ¯è²', + hSpace : '横éé', + vSpace : '縦éé', + validateSrc : 'ãªã³ã¯URLãå ¥åãã¦ãã ããã', + validateHSpace : '横ééã¯æ°å¤ã§å ¥åãã¦ãã ããã', + validateVSpace : '縦ééã¯æ°å¤ã§å ¥åãã¦ãã ããã' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'ã¹ãã«ãã§ãã¯', + title : 'ã¹ãã«ãã§ãã¯', + notAvailable : 'ç³ã訳ããã¾ãããç¾å¨ãµã¼ãã¹ãå©ç¨ãããã¨ãã§ãã¾ãã', + errorLoading : 'ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¹ãã¹ãèªè¾¼ã¿ã¨ã©ã¼: %s.', + notInDic : 'è¾æ¸ã«ããã¾ãã', + changeTo : 'å¤æ´', + btnIgnore : 'ç¡è¦', + btnIgnoreAll : 'ãã¹ã¦ç¡è¦', + btnReplace : 'ç½®æ', + btnReplaceAll : 'ãã¹ã¦ç½®æ', + btnUndo : 'ããç´ã', + noSuggestions : '- 該å½ãªã -', + progress : 'ã¹ãã«ãã§ãã¯å¦çä¸...', + noMispell : 'ã¹ãã«ãã§ãã¯å®äº: ã¹ãã«ã®èª¤ãã¯ããã¾ããã§ãã', + noChanges : 'ã¹ãã«ãã§ãã¯å®äº: èªå¥ã¯å¤æ´ããã¾ããã§ãã', + oneChange : 'ã¹ãã«ãã§ãã¯å®äº: ï¼èªå¥å¤æ´ããã¾ãã', + manyChanges : 'ã¹ãã«ãã§ãã¯å®äº: %1 èªå¥å¤æ´ããã¾ãã', + ieSpellDownload : 'ã¹ãã«ãã§ãã«ã¼ãã¤ã³ã¹ãã¼ã«ããã¦ãã¾ãããä»ãããã¦ã³ãã¼ããã¾ãã?' + }, + + smiley : + { + toolbar : 'çµµæå', + title : 'é¡æåæ¿å ¥', + options : 'çµµæåãªãã·ã§ã³' + }, + + elementsPath : + { + eleLabel : 'ã¨ã¬ã¡ã³ããã¹', + eleTitle : '%1 ã¨ã¬ã¡ã³ã' + }, + + numberedlist : '段è½çªå·', + bulletedlist : 'ç®æ¡æ¸ã', + indent : 'ã¤ã³ãã³ã', + outdent : 'ã¤ã³ãã³ã解é¤', + + justify : + { + left : 'å·¦æã', + center : 'ä¸å¤®æã', + right : 'å³æã', + block : '両端æã' + }, + + blockquote : 'ãããã¯å¼ç¨', + + clipboard : + { + title : 'è²¼ãä»ã', + cutError : 'ãã©ã¦ã¶ã¼ã®ã»ãã¥ãªãã£è¨å®ã«ããã¨ãã£ã¿ã®åãåãæä½ãèªåã§å®è¡ãããã¨ãã§ãã¾ãããå®è¡ããã«ã¯æåã§ãã¼ãã¼ãã®(Ctrl/Cmd+X)ã使ç¨ãã¦ãã ããã', + copyError : 'ãã©ã¦ã¶ã¼ã®ã»ãã¥ãªãã£è¨å®ã«ããã¨ãã£ã¿ã®ã³ãã¼æä½ãèªåã§å®è¡ãããã¨ãã§ãã¾ãããå®è¡ããã«ã¯æåã§ãã¼ãã¼ãã®(Ctrl/Cmd+C)ã使ç¨ãã¦ãã ããã', + pasteMsg : 'ãã¼ãã¼ã(<STRONG>Ctrl/Cmd+V</STRONG>)ã使ç¨ãã¦ã次ã®å ¥åã¨ãªã¢å ã§è²¼ã£ã¦ã<STRONG>OK</STRONG>ãæ¼ãã¦ãã ããã', + securityMsg : 'ãã©ã¦ã¶ã®ã»ãã¥ãªãã£è¨å®ã«ãããã¨ãã£ã¿ã¯ã¯ãªãããã¼ãã»ãã¼ã¿ã«ç´æ¥ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ããããã®ã¦ã£ã³ãã¦ã¯è²¼ãä»ãæä½ãè¡ã度ã«è¡¨ç¤ºããã¾ãã', + pasteArea : 'è²¼ãä»ãå ´æ' + }, + + pastefromword : + { + confirmCleanup : 'è²¼ãä»ããè¡ãããã¹ãã¯ãã¯ã¼ãæç« ããã³ãã¼ããããã¨ãã¦ãã¾ããè²¼ãä»ããåã«ã¯ãªã¼ãã³ã°ãè¡ãã¾ããï¼', + toolbar : 'ã¯ã¼ãæç« ããè²¼ãä»ã', + title : 'ã¯ã¼ãæç« ããè²¼ãä»ã', + error : 'å é¨ã¨ã©ã¼ã«ããè²¼ãä»ãããã¼ã¿ãã¯ãªã¢ã§ãã¾ããã§ãã' + }, + + pasteText : + { + button : 'ãã¬ã¼ã³ããã¹ãè²¼ãä»ã', + title : 'ãã¬ã¼ã³ããã¹ãè²¼ãä»ã' + }, + + templates : + { + button : 'ãã³ãã¬ã¼ã(éå½¢)', + title : 'ãã³ãã¬ã¼ãå 容', + options : 'ãã³ãã¬ã¼ããªãã·ã§ã³', + insertOption : 'ç¾å¨ã®ã¨ãã£ã¿ã®å 容ã¨ç½®æãããã¾ã', + selectPromptMsg : 'ã¨ãã£ã¿ã¼ã§ä½¿ç¨ãããã³ãã¬ã¼ããé¸æãã¦ãã ããã<br>(ç¾å¨ã®ã¨ãã£ã¿ã®å 容ã¯å¤±ããã¾ã):', + emptyListMsg : '(ãã³ãã¬ã¼ããå®ç¾©ããã¦ãã¾ãã)' + }, + + showBlocks : 'ãããã¯è¡¨ç¤º', + + stylesCombo : + { + label : 'ã¹ã¿ã¤ã«', + panelTitle : 'ã¹ã¿ã¤ã«', + panelTitle1 : 'ãããã¯ã¹ã¿ã¤ã«', + panelTitle2 : 'ã¤ã³ã©ã¤ã³ã¹ã¿ã¤ã«', + panelTitle3 : 'ãªãã¸ã§ã¯ãã¹ã¿ã¤ã«' + }, + + format : + { + label : 'ãã©ã¼ããã', + panelTitle : 'ãã©ã¼ããã', + + tag_p : 'æ¨æº', + tag_pre : 'æ¸å¼ä»ã', + tag_address : 'ã¢ãã¬ã¹', + tag_h1 : 'è¦åºã 1', + tag_h2 : 'è¦åºã 2', + tag_h3 : 'è¦åºã 3', + tag_h4 : 'è¦åºã 4', + tag_h5 : 'è¦åºã 5', + tag_h6 : 'è¦åºã 6', + tag_div : 'æ¨æº (DIV)' + }, + + div : + { + title : 'Divã³ã³ãã', + toolbar : 'Divã³ã³ãã', + cssClassInputLabel : 'ã¹ã¿ã¤ã«ã·ã¼ãã¯ã©ã¹', + styleSelectLabel : 'ã¹ã¿ã¤ã«', + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' è¨èªã³ã¼ã', + inlineStyleInputLabel : 'ã¤ã³ã©ã¤ã³ã¹ã¿ã¤ã«', + advisoryTitleInputLabel : 'Titleå±æ§', + langDirLabel : 'æå表è¨ã®æ¹å', + langDirLTRLabel : 'å·¦ããå³ (LTR)', + langDirRTLLabel : 'å³ããå·¦ (RTL)', + edit : 'Divã³ã³ãã ç·¨é', + remove : 'Divã³ã³ãã åé¤' + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ãã©ã³ã', + voiceLabel : 'ãã©ã³ã', + panelTitle : 'ãã©ã³ã' + }, + + fontSize : + { + label : 'ãµã¤ãº', + voiceLabel : 'ãã©ã³ããµã¤ãº', + panelTitle : 'ãµã¤ãº' + }, + + colorButton : + { + textColorTitle : 'ããã¹ãè²', + bgColorTitle : 'èæ¯è²', + panelTitle : 'è²', + auto : 'èªå', + more : 'ãã®ä»ã®è²...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'ã¹ãã«ãã§ãã¯è¨å®(SCAYT)', + opera_title : 'Operaã§ã¯ãµãã¼ãããã¾ãã', + enable : 'SCAYTæå¹', + disable : 'SCAYTç¡å¹', + about : 'SCAYTï¾ï¾ï½°ï½¼ï¾ï½®ï¾', + toggle : 'SCAYTåæ¿', + options : 'ãªãã·ã§ã³', + langs : 'è¨èª', + moreSuggestions : 'ä»ã®åè£', + ignore : 'ç¡è¦', + ignoreAll : 'ãã¹ã¦ç¡è¦', + addWord : 'èªå¥è¿½å ', + emptyDic : 'è¾æ¸åã¯å¿ ãå ¥åãã¦ãã ãã', + + optionsTab : 'ãªãã·ã§ã³', + allCaps : 'å ¨ã¦å¤§æåã®åèªãç¡è¦', + ignoreDomainNames : 'ãã¡ã¤ã³åãç¡è¦', + mixedCase : '大æåå°æåæ··å¨ã®åèªãç¡è¦', + mixedWithDigits : 'æ°åä»ãåèªãç¡è¦', + + languagesTab : 'è¨èª', + + dictionariesTab : 'è¾æ¸', + dic_field_name : 'è¾æ¸å', + dic_create : 'ç»é²', + dic_restore : 'å ã«æ»ã', + dic_delete : 'åé¤', + dic_rename : 'ååå¤æ´', + dic_info : 'å§ãã¦ã¼ã¶ã¼ãã£ã¬ã¯ããªã¯ãCookieã«ä¿åããã¾ããä½ã Cookie ã¯ãµã¤ãºã«å¶éãããã¾ããã¦ã¼ã¶ã¼ãã£ã¬ã¯ããªãCookieã«ä¿åã§ããªããµã¤ãºã«å°éããã¨ãã£ã¬ã¯ããªã¯ãµã¼ãã¼ä¸ã«ä¿åããã¾ããå人ã®ãã£ã¬ã¯ããªããµã¼ãã¼ä¸ã«ä¿åããã«ã¯ããã£ã¬ã¯ããªåãæ示ããå¿ è¦ãããã¾ããããæ¢ã«ä¿åããããã£ã¬ã¯ããªãããå ´åããã®ååãå ¥åããå ã«æ»ããã¿ã³ãæ¼ãã¦ãã ããã', + + aboutTab : 'ãã¼ã¸ã§ã³æ å ±' + }, + + about : + { + title : 'CKEditorãã¼ã¸ã§ã³æ å ±', + dlgTitle : 'CKEditorãã¼ã¸ã§ã³æ å ±', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'ã©ã¤ã»ã³ã¹æ å ±ã®è©³ç´°ã¯ã¦ã§ããµã¤ãã«ã¦ç¢ºèªãã¦ãã ãã:', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'æ大å', + minimize : 'æå°å', + + fakeobjects : + { + anchor : 'ã¢ã³ã«ã¼', + flash : 'Flash Animation', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' + }, + + resize : 'ãã©ãã°ãã¦ãªãµã¤ãº', + + colordialog : + { + title : 'è²é¸æ', + options : 'ã«ã©ã¼ãªãã·ã§ã³', + highlight : 'ãã¤ã©ã¤ã', + selected : 'é¸æãããè²', + clear : 'ã¯ãªã¢' + }, + + toolbarCollapse : 'ãã¼ã«ãã¼ãéãã', + toolbarExpand : 'ãã¼ã«ãã¼ãéã', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'ããã¹ãã®åã : å·¦ããå³ã¸', + rtl : 'ããã¹ãã®åã : å³ããå·¦ã¸' + }, + + docprops : + { + label : 'ææ¸ ããããã£', + title : 'ææ¸ ããããã£', + design : 'Design', // MISSING + meta : 'ã¡ã¿ãã¼ã¿', + chooseColor : 'è²ã®é¸æ', + other : '<ãã®ä»ã®>', + docTitle : 'ãã¼ã¸ã¿ã¤ãã«', + charset : 'æåã»ãã符å·å', + charsetOther : 'ä»ã®æåã»ãã符å·å', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', + docType : 'ææ¸ã¿ã¤ããããã¼', + docTypeOther : 'ãã®ä»ææ¸ã¿ã¤ããããã¼', + xhtmlDec : 'XHTML宣è¨ãã¤ã³ã¯ã«ã¼ã', + bgColor : 'èæ¯è²', + bgImage : 'èæ¯ç»å URL', + bgFixed : 'ã¹ã¯ãã¼ã«ããªãèæ¯', + txtColor : 'ããã¹ãè²', + margin : 'ãã¼ã¸ã»ãã¼ã¸ã³', + marginTop : 'ä¸é¨', + marginLeft : 'å·¦', + marginRight : 'å³', + marginBottom : 'ä¸é¨', + metaKeywords : 'ææ¸ã®ãã¼ã¯ã¼ã(ã«ã³ãåºåã)', + metaDescription : 'ææ¸ã®æ¦è¦', + metaAuthor : 'ææ¸ã®ä½è ', + metaCopyright : 'ææ¸ã®èä½æ¨©', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/ka.js b/_source/lang/ka.js new file mode 100644 index 0000000..f8e6020 --- /dev/null +++ b/_source/lang/ka.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the Georgian + * language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['ka'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'á¢áá¥á¡á¢áá¡ á áááá¥á¢áá á, %1, áááááá áá ALT 0-á¡ ááá®ááá áááá¡ ááá¡áá¦áááá.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'á¢áá¥á¡á¢áá¡ á áááá¥á¢áá á', + + // Toolbar buttons without dialogs. + source : 'áááááá', + newPage : 'áá®ááá áááá áá', + save : 'á©áá¬áá á', + preview : 'ááááá®áááá', + cut : 'ááááá á', + copy : 'áá¡áá', + paste : 'á©áá¡áá', + print : 'áááááá', + underline : 'ááá®ááá£áá', + bold : 'áá¡á®áááá', + italic : 'ááá®á ááá', + selectAll : 'á§ááááá¤á áá¡ ááááá¨ááá', + removeFormat : 'á¤áá ááá¢áá áááá¡ ááá®á¡áá', + strike : 'ááááá®ááá£áá', + subscript : 'ááááá¥á¡á', + superscript : 'á®áá áá¡á®á', + horizontalrule : 'á°áá ááááá¢ááá£á á á®áááá¡ á©áá¡áá', + pagebreak : 'áááá ááá¡ á¬á§ááá¢á ááááááá¡áááá¡', + pagebreakAlt : 'áááá ááá¡ á¬á§ááá¢á', + unlink : 'ááá£ááá¡ ááá®á¡áá', + undo : 'ááá£á¥áááá', + redo : 'áááááá ááá', + + // Common messages and labels. + common : + { + browseServer : 'á¡áá ááá áá ááááááááá ááá', + url : 'URL', + protocol : 'áá áá¢ááááá', + upload : 'áá¢ááá ááá', + uploadSubmit : 'á¡áá ááá áá áááááááá', + image : 'á¡á£á ááá', + flash : 'Flash', + form : 'á¤áá áá', + checkbox : 'ááááá¨áááá¡ á¦ááááá', + radio : 'áááá á©áááá¡ á¦ááááá', + textField : 'á¢áá¥á¡á¢á£á á áááá', + textarea : 'á¢áá¥á¡á¢á£á á áá á', + hiddenField : 'áááá£áá áááá', + button : 'á¦ááááá', + select : 'áá á©áááá¡ áááá', + imageButton : 'á¡á£á áááááá á¦ááááá', + notSet : '<áá áá¤áá á>', + id : 'Id', + name : 'á¡áá®ááá', + langDir : 'áááá¡ ááááá áá£áááá', + langDirLtr : 'ááá áªá®ááááá ááá á¯áááá (LTR)', + langDirRtl : 'ááá á¯áááááá ááá áªá®ááá (RTL)', + langCode : 'áááá¡ áááá', + longDescr : 'áááá áá¦á¬áá áá¡ URL', + cssClass : 'CSS áááá¡á', + advisoryTitle : 'á¡áááá£á á', + cssStyle : 'CSS á¡á¢ááá', + ok : 'áááá®', + cancel : 'ááá£á¥áááá', + close : 'ááá®á£á áá', + preview : 'ááááá®áááá', + generalTab : 'ááá¤áá áááªáá', + advancedTab : 'ááá¤áá ááááá£áá', + validateNumberFailed : 'áá¡ áááá¨ááááááá áá áá á ááªá®áá.', + confirmNewPage : 'áá áááá£áááá¢á¨á á§áááá á©áá£á¬áá ááá áªááááááá áááááá áááá. ááá á¬áá£áááá£áá á®áá á á áá áá®ááá áááá ááá¡ á©áá¢ááá ááá áááááá?', + confirmCancel : 'áááááá áá ááá áááá¢á á á¨ááªáááááá, ááá á¬áá£áááá£ááá á®áá á á áá á¤ááá¯á áá¡ ááá®á£á áá áá¡á£á á?', + options : 'ááá áááá¢á ááá', + target : 'ááá®á¡ááá¡ áááááá', + targetNew : 'áá®ááá á¤ááá¯áá á (_blank)', + targetTop : 'áááá á¤ááá¯áá á (_top)', + targetSelf : 'ááááá á¤ááá¯áá á (_self)', + targetParent : 'áá¨ááááá á¤ááá¯áá á (_parent)', + langDirLTR : 'ááá áªá®ááááá ááá á¯áááá (LTR)', + langDirRTL : 'ááá á¯áááááá ááá áªá®ááá (RTL)', + styles : 'á¡á¢ááá', + cssClasses : 'CSS áááá¡á', + width : 'á¡ááááá', + height : 'á¡áááá¦áá', + align : 'á¡á¬áá ááá', + alignLeft : 'ááá áªá®ááá', + alignRight : 'ááá á¯áááá', + alignCenter : 'á¨á£á', + alignTop : 'áááááá', + alignMiddle : 'á¨á£á', + alignBottom : 'á¥áááááá', + invalidHeight : 'á¡áááá¦áá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + invalidWidth : 'á¡ááááá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, ááá£á¬áááááááá</span>' + }, + + contextmenu : + { + options : 'áááá¢áá¥á¡á¢á£á á ááááá£á¡ ááá áááá¢á ááá' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'á¡áááªáááá£á á á¡ááááááá¡ á©áá¡áá', + title : 'á¡áááªáááá£á á á¡ááááááá¡ áá á©ááá', + options : 'á¡áááªáááá£á á á¡ááááááá¡ ááá áááá¢á ááá' + }, + + // Link dialog. + link : + { + toolbar : 'ááá£áá', + other : '<á¡á®áá>', + menu : 'ááá£ááá¡ á áááá¥á¢áá ááá', + title : 'ááá£áá', + info : 'ááá£ááá¡ ááá¤áá áááªáá', + target : 'ááá®á¡ááá¡ áááááá', + upload : 'áá¥áá©áá', + advanced : 'ááá¬áá áááááá', + type : 'ááá£ááá¡ á¢ááá', + toUrl : 'URL', + toAnchor : 'ááá£áá á¢áá¥á¡á¢á¨á á¦á£áááá', + toEmail : 'ááá¤áá¡á¢á', + targetFrame : '<frame>', + targetPopup : '<popup á¤ááá¯áá á>', + targetFrameName : 'Frame-áá¡ á¡áá®ááá', + targetPopupName : 'Popup á¤ááá¯á áá¡ á¡áá®ááá', + popupFeatures : 'Popup á¤ááá¯á áá¡ ááá áááá¢á ááá', + popupResizable : 'áªáááááááá ááááá', + popupStatusBar : 'á¡á¢áá¢á£á¡áá¡ áááá', + popupLocationBar: 'áááááááªááá¡ áááá', + popupToolbar : 'á®ááá¡áá¬á§ááá áááá', + popupMenuBar : 'ááááá£á¡ áááá', + popupFullScreen : 'ááááá ááá ááá (IE)', + popupScrollBars : 'ááááá®ááááá¡ áááááá', + popupDependent : 'áááááááááá£áá (Netscape)', + popupLeft : 'ááá áªá®ááá áááááªáá', + popupTop : 'áááá áááááªáá', + id : 'Id', + langDir : 'áááá¡ ááááá áá£áááá', + langDirLTR : 'ááá áªá®ááááá ááá á¯áááá (LTR)', + langDirRTL : 'ááá á¯áááááá ááá áªá®ááá (RTL)', + acccessKey : 'á¬áááááá¡ á¦ááááá', + name : 'á¡áá®ááá', + langCode : 'áááá¡ áááá', + tabIndex : 'Tab-áá¡ ááááá¥á¡á', + advisoryTitle : 'á¡áááá£á á', + advisoryContentType : 'á¨áááááá¡áá¡ á¢ááá', + cssClasses : 'CSS áááá¡á', + charset : 'ááááá ááá', + styles : 'CSS á¡á¢ááá', + rel : 'áááá¨áá á', + selectAnchor : 'ááá á©ááá á¦á£áá', + anchorName : 'á¦á£ááá¡ á¡áá®áááá', + anchorId : 'ááááááá¢áá¡ Id-á', + emailAddress : 'ááá¤áá¡á¢áá¡ ááá¡áááá áááá', + emailSubject : 'á¬áá áááá¡ á¡áááá£á á', + emailBody : 'á¬áá áááá¡ á¢áá¥á¡á¢á', + noAnchors : '(áá áááá£áááá¢á¨á á¦á£áá áá áá)', + noUrl : 'ááá áá¤áá ááá£ááá¡ URL', + noEmail : 'ááá áá¤áá ááá¤áá¡á¢áá¡ ááá¡áááá áá' + }, + + // Anchor dialog + anchor : + { + toolbar : 'á¦á£áá', + menu : 'á¦á£ááá¡ á áááá¥á¢áá ááá', + title : 'á¦á£ááá¡ ááá áááá¢á ááá', + name : 'á¦á£áá£á¡ á¡áá®ááá', + errorName : 'ááá áá¤áá á¦á£ááá¡ á¡áá®ááá', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'áááááááá ááá á¡ááá¡ ááá áááá¢á ááá', + bulletedTitle : 'á¦áááááááá á¡ááá¡ ááá áááá¢á ááá', + type : 'á¢ááá', + start : 'á¡áá¬á§áá¡á', + validateStartNumber :'á¡ááá¡ á¡áá¬á§áá¡á ááááá á ááªá®áá á£ááá áá§áá¡.', + circle : 'á¬á áá¬áá á', + disc : 'á¬á á', + square : 'ááááá áá¢á', + none : 'áá áá¤áá á', + notset : '<áá áá¤áá á>', + armenian : 'á¡ááá®á£á á áááááááá áá', + georgian : 'á¥áá áá£áá áááááááá áá (áá, ááá, ááá, ..)', + lowerRoman : 'á áááá£áá áááááááá ááªá ááá¢áá á áªáá¤á áááá (i, ii, iii, iv, v, ..)', + upperRoman : 'á áááá£áá áááááááá áá áááá áªáá¤á áááá (I, II, III, IV, V, etc.)', + lowerAlpha : 'ááá¢áá á áááááá£á á áá¡ááááá (a, b, c, d, e, ..)', + upperAlpha : 'áááá áááááá£á á áá¡ááááá (A, B, C, D, E, ..)', + lowerGreek : 'ááá¢áá á ááá á«áá£áá áá¡ááááá (ááá¤á, ááá¢á, áááá, ..)', + decimal : 'á ááªá®ááááá (1, 2, 3, ..)', + decimalLeadingZero : 'áá£ááá ááá¬á§ááá£áá á ááªá®ááááá (01, 02, 03, ..)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'á«áááá áá á¨ááªááá', + find : 'á«áááá', + replace : 'á¨ááªááá', + findWhat : 'á¡áá«áááááá á¢áá¥á¡á¢á:', + replaceWith : 'á¨ááªáááá¡ á¢áá¥á¡á¢á:', + notFoundMsg : 'áááááááá£áá á¢áá¥á¡á¢á áá áááá«áááá.', + matchCase : 'áááá áá ááá¢áá á áá¡ááááá¡ ááááá®áááá', + matchWord : 'ááááá á¡áá¢á§ááá¡ ááááá®áááá', + matchCyclic : 'áááá£áááá¢áá¡ ááááá¨á ááá¡áááá¡ ááá á ááááááá ááá¬á§ááá', + replaceAll : 'á§ááááá¡ á¨ááªááá', + replaceSuccessMsg : '%1 ááá«áááááá á¨áááªáááá.' + }, + + // Table Dialog + table : + { + toolbar : 'áªá®á ááá', + title : 'áªá®á áááá¡ ááá áááá¢á ááá', + menu : 'áªá®á áááá¡ ááá áááá¢á ááá', + deleteTable : 'áªá®á áááá¡ á¬áá¨áá', + rows : 'á¡á¢á áá¥ááá', + columns : 'á¡ááá¢á', + border : 'á©áá á©áá¡ áááá', + widthPx : 'á¬áá á¢ááá', + widthPc : 'áá ááªááá¢á', + widthUnit : 'á¡ááááá áá ááá£áá', + cellSpace : 'á£á¯á áá¡ á¡ááá áªá (spacing)', + cellPad : 'á£á¯á áá¡ áááá (padding)', + caption : 'á¡áááá£á á', + summary : 'á¨áá¯ááááá', + headers : 'á¡áááá£á ááá', + headersNone : 'áá áá¤áá á', + headersColumn : 'ááá áááá á¡ááá¢á', + headersRow : 'ááá áááá á¡á¢á áá¥ááá', + headersBoth : 'áá ááá', + invalidRows : 'á¡á¢á áá¥áááááá¡ á áááááááá áááááááá á ááªá®áá á£ááá áá§áá¡.', + invalidCols : 'á¡ááá¢áááá¡ á áááááááá áááááááá á ááªá®áá á£ááá áá§áá¡.', + invalidBorder : 'á©áá á©áá¡ áááá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + invalidWidth : 'áªá®á áááá¡ á¡ááááá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + invalidHeight : 'áªá®á áááá¡ á¡áááá¦áá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + invalidCellSpacing : 'á£á¯á áá¡ á¡ááá áªá (spacing) á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + invalidCellPadding : 'á£á¯á áá¡ áááá (padding) á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + + cell : + { + menu : 'á£á¯á á', + insertBefore : 'á£á¯á áá¡ á©áá¡áá ááááááá', + insertAfter : 'á£á¯á áá¡ á©áá¡áá ááá á', + deleteCell : 'á£á¯á áááá¡ á¬áá¨áá', + merge : 'á£á¯á áááá¡ á¨ááá áááá', + mergeRight : 'á¨ááá áááá ááá á¯ááááá¡ááá', + mergeDown : 'á¨ááá áááá á¥ááááááá¡ááá', + splitHorizontal : 'ááá§áá¤á á°áá ááááá¢ááá£á áá', + splitVertical : 'ááá§áá¤á ááá á¢ááááá£á áá', + title : 'á£á¯á áá¡ ááá áááá¢á ááá', + cellType : 'á£á¯á áá¡ á¢ááá', + rowSpan : 'á¡á¢á áá¥áááááá¡ ááááááá', + colSpan : 'á¡ááá¢áááá¡ ááááááá', + wordWrap : 'á¡á¢á áá¥áááá¡ ááááá¢ááá (Word Wrap)', + hAlign : 'á°áá ááááá¢ááá£á á á¡á¬áá ááá', + vAlign : 'ááá á¢ááááá£á á á¡á¬áá ááá', + alignBaseline : 'á«áá ááááá á®áááá¡ ááá¡á¬áá áá', + bgColor : 'á¤áááá¡ á¤áá á', + borderColor : 'á©áá á©áá¡ á¤áá á', + data : 'áááááªááááá', + header : 'á¡áááá£á á', + yes : 'áááá®', + no : 'áá á', + invalidWidth : 'á£á¯á áá¡ á¡ááááá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + invalidHeight : 'á£á¯á áá¡ á¡áááá¦áá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.', + invalidRowSpan : 'á¡á¢á áá¥áááááá¡ á áááááááá ááááá á ááªá®áá á£ááá áá§áá¡.', + invalidColSpan : 'á¡ááá¢áááá¡ á áááááááá ááááá á ááªá®áá á£ááá áá§áá¡.', + chooseColor : 'áá á©ááá' + }, + + row : + { + menu : 'á¡á¢á áá¥ááá', + insertBefore : 'á¡á¢á áá¥áááá¡ á©áááá¢ááá á¬áá', + insertAfter : 'á¡á¢á áá¥áááá¡ á©áááá¢ááá ááá á', + deleteRow : 'á¡á¢á áá¥áááááá¡ á¬áá¨áá' + }, + + column : + { + menu : 'á¡ááá¢á', + insertBefore : 'á¡ááá¢áá¡ á©áááá¢ááá á¬áá', + insertAfter : 'á¡ááá¢áá¡ á©áááá¢ááá ááá á', + deleteColumn : 'á¡ááá¢áááá¡ á¬áá¨áá' + } + }, + + // Button Dialog. + button : + { + title : 'á¦áááááá¡ ááá áááá¢á ááá', + text : 'á¢áá¥á¡á¢á', + type : 'á¢ááá', + typeBtn : 'á¦ááááá', + typeSbm : 'áááááááá', + typeRst : 'ááá¡á£á¤áááááá' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ááááá¨áááá¡ á¦áááááá¡ (Checkbox) ááá áááá¢á ááá', + radioTitle : 'áá¡áá á©ááá á¦áááááá¡ (Radio) ááá áááá¢á ááá', + value : 'á¢áá¥á¡á¢á', + selected : 'áá á©áá£áá' + }, + + // Form Dialog. + form : + { + title : 'á¤áá ááá¡ ááá áááá¢á ááá', + menu : 'á¤áá ááá¡ ááá áááá¢á ááá', + action : 'á¥áááááá', + method : 'áááááá', + encoding : 'ááááá ááá' + }, + + // Select Field Dialog. + select : + { + title : 'áá á©áááá¡ ááááá¡ ááá áááá¢á ááá', + selectInfo : 'ááá¤áá áááªáá', + opAvail : 'á¨áá¡áá«áááááá ááá áááá¢ááá', + value : 'áááá¨ááááááá', + size : 'áááá', + lines : 'á®ááááá', + chkMulti : 'áá áááááááá áá á©áááááá¡ á¡áá¨á£ááááá', + opText : 'á¢áá¥á¡á¢á', + opValue : 'áááá¨ááááááá', + btnAdd : 'ááááá¢ááá', + btnModify : 'á¨ááªááá', + btnUp : 'ááááá', + btnDown : 'á¥ááááá', + btnSetValue : 'áááá á©áá£á áááá¨ááááááááá ááá§ááááá', + btnDelete : 'á¬áá¨áá' + }, + + // Textarea Dialog. + textarea : + { + title : 'á¢áá¥á¡á¢á£á á áá áá¡ ááá áááá¢á ááá', + cols : 'á¡ááá¢ááá', + rows : 'á¡á¢á áá¥ááááá' + }, + + // Text Field Dialog. + textfield : + { + title : 'á¢áá¥á¡á¢á£á á ááááá¡ ááá áááá¢á ááá', + name : 'á¡áá®ááá', + value : 'áááá¨ááááááá', + charWidth : 'á¡ááááááá¡ áááá', + maxChars : 'áá¡ááááá¡ ááá¥á¡ááááá£á á ááááááá', + type : 'á¢ááá', + typeText : 'á¢áá¥á¡á¢á', + typePass : 'ááá ááá' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'áááá£áá ááááá¡ ááá áááá¢á ááá', + name : 'á¡áá®ááá', + value : 'áááá¨ááááááá' + }, + + // Image Dialog. + image : + { + title : 'á¡á£á áááá¡ ááá áááá¢á ááá', + titleButton : 'á¡á£á áááááá á¦áááááá¡ ááá áááá¢á ááá', + menu : 'á¡á£á áááá¡ ááá áááá¢á ááá', + infoTab : 'á¡á£á áááá¡ ááá¤áá ááªáá', + btnUpload : 'á¡áá ááá áá¡áááá¡ áááááááá', + upload : 'áá¢ááá ááá', + alt : 'á¡ááááªááá á¢áá¥á¡á¢á', + lockRatio : 'áá áááá áªááá¡ á¨áááá á©á£áááá', + resetSize : 'ááááá¡ áááá á£áááá', + border : 'á©áá á©á', + hSpace : 'á°áá ááááá¢ááá£á á á¡ááá áªá', + vSpace : 'ááá á¢ááááá£á á á¡ááá áªá', + alertUrl : 'ááá áá¤áá á¡á£á áááá¡ URL', + linkTab : 'ááá£áá', + button2Img : 'áá¡á£á á áá á©áá£áá á¡á£á áááááá á¦áááááá¡ ááááá¥áªááá á©ááá£áááá áá á¦áááááá?', + img2Button : 'áá¡á£á á áá á©áá£áá á©ááá£áááá ááá á¦áááááá¡ ááááá¥áªááá á¡á£á ááááá á¦áááááá?', + urlMissing : 'á¡á£á áááá¡ URL áá áá á¨ááá¡ááá£áá.', + validateBorder : 'á©áá á©á ááááá á ááªá®áá á£ááá áá§áá¡.', + validateHSpace : 'á°áá ááááá¢ááá£á á á¡ááá áªá ááááá á ááªá®áá á£ááá áá§áá¡.', + validateVSpace : 'ááá á¢ááááá£á á á¡ááá áªá ááááá á ááªá®áá á£ááá áá§áá¡.' + }, + + // Flash Dialog + flash : + { + properties : 'Flash-áá¡ ááá áááá¢á ááá', + propertiesTab : 'ááá áááá¢á ááá', + title : 'Flash-áá¡ ááá áááá¢á ááá', + chkPlay : 'ááá¢á ááá¨áááá', + chkLoop : 'á©ááªááááá', + chkMenu : 'Flash-áá¡ ááááá£á¡ ááá¨áááá', + chkFull : 'ááááá ááá áááá¡ ááá¨áááá', + scale : 'ááá¡á¨á¢áááá ááá', + scaleAll : 'á§ááááá¤á áá¡ á©áááááá', + scaleNoBorder : 'á©áá á©áá¡ ááá áá¨á', + scaleFit : 'áá£á¡á¢á á©áá¡áá', + access : 'á¡áá ááá¢áá¡ á¬ááááá', + accessAlways : 'á§áááááááá¡', + accessSameDomain: 'ááááá áááááá', + accessNever : 'áá áá¡áá áá¡', + alignAbsBottom : 'á©áá á©áá¡ á¥áááááá ááá¬áááá¡ á¡á¬áá ááá á¢áá¥á¡á¢áá¡áááá¡', + alignAbsMiddle : 'á©áá á©áá¡ á¨á£á ááá¬áááá¡ á¡á¬áá ááá á¢áá¥á¡á¢áá¡áááá¡', + alignBaseline : 'á¡áááááá¡á á®áááá¡ á¡á¬áá ááá', + alignTextTop : 'á¢áá¥á¡á¢á ááááááá', + quality : 'á®áá áá¡á®á', + qualityBest : 'á¡áá£ááááá¡á', + qualityHigh : 'ááá¦ááá', + qualityAutoHigh : 'ááá¦ááá (ááá¢áááá¢á£á á)', + qualityMedium : 'á¡áá¨á£ááá', + qualityAutoLow : 'á«ááááá áááááá', + qualityLow : 'áááááá', + windowModeWindow: 'á¤ááá¯áá á', + windowModeOpaque: 'ááá£ááááá áááá', + windowModeTransparent : 'ááááááá áááá', + windowMode : 'á¤ááá¯á áá¡ á ááááá', + flashvars : 'áªááááááá Flash-áá¡áááá¡', + bgcolor : 'á¤áááá¡ á¤áá á', + hSpace : 'á°áá áá. á¡ááá áªá', + vSpace : 'ááá á¢. á¡ááá áªá', + validateSrc : 'URL áá á£ááá áá§áá¡ áªáá áááá.', + validateHSpace : 'á°áá ááááá¢ááá£á á á¡ááá áªá áá á£ááá áá§áá¡ áªáá áááá.', + validateVSpace : 'ááá á¢ááááá£á á á¡ááá áªá áá á£ááá áá§áá¡ áªáá áááá.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'ááá ááá¬áá á', + title : 'ááá ááá¬áá á', + notAvailable : 'á£áááªá áááá, áá¡ á¡áá ááá¡á ááááááá ááá£á¬áááááááá.', + errorLoading : 'á¡áá ááá¡áá¡ ááááá«áá®áááá¡ á¨ááªáááá: %s.', + notInDic : 'áá áá ááá¥á¡ááááá¨á', + changeTo : 'á¨ááªááááá', + btnIgnore : 'á£áá£áááááá§áá¤á', + btnIgnoreAll : 'á§ááááá¡ á£áá£áááááá§áá¤á', + btnReplace : 'á¨ááªááá', + btnReplaceAll : 'á§ááááá¡ á¨ááªááá', + btnUndo : 'ááá£á¥áááá', + noSuggestions : '- áá áá á¨ááááááááááá -', + progress : 'áááááááá áááá¡ ááá ááá¬áá áá¡ á¨áááá¬áááá...', + noMispell : 'ááá ááá¬áá áá¡ á¨áááá¬áááá: á¨ááªáááá áá áááá«áááá', + noChanges : 'ááá ááá¬áá áá¡ á¨áááá¬áááá: áá áá¤áá á á¨ááªááááá', + oneChange : 'ááá ááá¬áá áá¡ á¨áááá¬áááá: áá áá á¡áá¢á§áá á¨áááªáááá', + manyChanges : 'ááá ááá¬áá áá¡ á¨áááá¬áááá: %1 á¡áá¢á§áá á¨áááªáááá', + ieSpellDownload : 'ááá ááá¬áá áá¡ á¨áááá¬áááá áá áá ááááá¡á¢áááá ááá£áá. á©ááááá¥áá©áá ááá¢áá ááá¢áááá?' + }, + + smiley : + { + toolbar : 'á¡ááªááááááá', + title : 'á¡ááªáááááá¡ á©áá¡áá', + options : 'á¡ááªáááááá¡ ááá áááá¢á ááá' + }, + + elementsPath : + { + eleLabel : 'áááááá¢áá¡ ááá', + eleTitle : '%1 ááááááá¢á' + }, + + numberedlist : 'áááááááá ááá á¡áá', + bulletedlist : 'á¦áááááá á¡áá', + indent : 'ááá¢áá á¨áá¬ááá', + outdent : 'áááááááá á¨áá¬ááá', + + justify : + { + left : 'ááá áªá®ááá á¡á¬áá ááá', + center : 'á¨á£áá¨á á¡á¬áá ááá', + right : 'ááá á¯áááá á¡á¬áá ááá', + block : 'ááááá¡á¬áá ááá' + }, + + blockquote : 'áªáá¢áá¢á', + + clipboard : + { + title : 'á©áá¡áá', + cutError : 'áá¥áááá áá áá£ááá áá¡ á£á¡áá¤á áá®ááááá¡ ááá áááá¢á ááá áá áá«áááá ááááá áá¡ áááá ááªááá¡ ááá¢áááá¢á£á áá áááá®áá áªááááááá¡ á¡áá¨á£áááááá¡. áááááá§áááá ááááááá¢á£á á áááá¡áááá¡ (Ctrl/Cmd+X).', + copyError : 'áá¥áááá áá áá£ááá áá¡ á£á¡áá¤á áá®ááááá¡ ááá áááá¢á ááá áá áá«áááá áá¡ááá¡ áááá ááªááá¡ ááá¢áááá¢á£á áá áááá®áá áªááááááá¡ á¡áá¨á£áááááá¡. áááááá§áááá ááááááá¢á£á á áááá¡áááá¡ (Ctrl/Cmd+C).', + pasteMsg : 'á©áá¡ááá áá áá áá¡ á¨ááááá ááááááá¢á£á áá¡ ááááá§áááááá (<strong>Ctrl/Cmd+V</strong>) áá áááááá áá OK-á¡', + securityMsg : 'áá¥áááá áá áá£ááá áá¡ á£á¡áá¤á áá®ááááá¡ ááá áááá¢á ááá áá áá«áááá clipboard-áá¡ áááááªáááááá¡ á¬áááááá¡ á£á¤ááááá¡. ááááá á£ááá á©áá¡ááá á¢áá¥á¡á¢á áá á¤ááá¯áá áá¨á.', + pasteArea : 'á©áá¡ááá¡ áá á' + }, + + pastefromword : + { + confirmCleanup : 'á©áá¡áá¡áááá á¢áá¥á¡á¢á ááá ááááá áááááá¢ááááá¡ áááá¡ - áááááá ááá¡á á¬áááá¡á¬áá ááá¬ááááá?', + toolbar : 'ááá ááááá á©áá¡áá', + title : 'ááá ááááá á©áá¡áá', + error : 'á¨ááá á¨ááªááááá¡ áááá ááá ááá®áá á®áá á¢áá¥á¡á¢áá¡ ááá¬ááááá' + }, + + pasteText : + { + button : 'áá®áááá á¢áá¥á¡á¢áá¡ á©áá¡áá', + title : 'áá®áááá á¢áá¥á¡á¢áá¡ á©áá¡áá' + }, + + templates : + { + button : 'ááá áááá', + title : 'ááá áááá', + options : 'ááá ááááá¡ ááá áááá¢á ááá', + insertOption : 'áááááááá á á¨áááááá¡áá¡ á¨ááªááá', + selectPromptMsg : 'ááá á©ááá ááá áá á áááá¥á¢áá áá¡áááá¡', + emptyListMsg : '(ááá áá áá áá áááá¡ááá¦áá á£áá)' + }, + + showBlocks : 'áá ááááá¡ á©áááááá', + + stylesCombo : + { + label : 'á¡á¢ááááá', + panelTitle : 'á¤áá ááá¢áá áááá¡ á¡á¢ááááá', + panelTitle1 : 'áá áá¡ á¡á¢ááááá', + panelTitle2 : 'áááááá áá£áá á¡á¢ááááá', + panelTitle3 : 'ááááá¥á¢áá¡ á¡á¢ááááá' + }, + + format : + { + label : 'á¤ááá ááá¢áá ááá', + panelTitle : 'á¤áá ááá¢áá ááá', + + tag_p : 'á©ááá£áááá ááá', + tag_pre : 'á¤áá ááá¢áá ááá£áá', + tag_address : 'ááá¡áááá áá', + tag_h1 : 'á¡áááá£á á 1', + tag_h2 : 'á¡áááá£á á 2', + tag_h3 : 'á¡áááá£á á 3', + tag_h4 : 'á¡áááá£á á 4', + tag_h5 : 'á¡áááá£á á 5', + tag_h6 : 'á¡áááá£á á 6', + tag_div : 'á©ááá£áááá ááá (DIV)' + }, + + div : + { + title : 'Div áááá¢ááááá áá¡ á¨áá¥ááá', + toolbar : 'Div áááá¢ááááá áá¡ á¨áá¥ááá', + cssClassInputLabel : 'CSS áááá¡ááá', + styleSelectLabel : 'á¡á¢ááá', + IdInputLabel : 'Id', + languageCodeInputLabel : 'áááá¡ áááá', + inlineStyleInputLabel : 'áááááá áá£áá á¡á¢ááá', + advisoryTitleInputLabel : 'á¡áááá£á á', + langDirLabel : 'áááá¡ ááááá áá£áááá', + langDirLTRLabel : 'ááá áªá®ááááá ááá á¯ááá᪠(LTR)', + langDirRTLLabel : 'ááá á¯áááááá ááá áªá®ááá (RTL)', + edit : 'Div-áá¡ á áááá¥á¢áá ááá', + remove : 'Div-áá¡ á¬áá¨áá' + }, + + iframe : + { + title : 'IFrame-áá¡ ááá áááá¢á ááá', + toolbar : 'IFrame', + noUrl : 'ááá áá¤áá iframe-áá¡ URL', + scrolling : 'ááááá®ááááá¡ ááááááá¡ ááá¨áááá', + border : 'á©áá á©áá¡ ááááá©ááá' + }, + + font : + { + label : 'á¤ááá¢á', + voiceLabel : 'á¤ááá¢á', + panelTitle : 'á¤ááá¢áá¡ á¡áá®ááá' + }, + + fontSize : + { + label : 'áááá', + voiceLabel : 'á¢áá¥á¡á¢áá¡ áááá', + panelTitle : 'á¢áá¥á¡á¢áá¡ áááá' + }, + + colorButton : + { + textColorTitle : 'á¢áá¥á¡á¢áá¡ á¤áá á', + bgColorTitle : 'á¤áááá¡ á¤áá á', + panelTitle : 'á¤áá ááá', + auto : 'ááá¢áááá¢á£á á', + more : 'ááá¢á á¤áá á...' + }, + + colors : + { + '000' : 'á¨ááá', + '800000' : 'áá£á¥á á¨ááááá¡á¤áá á', + '8B4513' : 'á§áááá¡á¤áá á', + '2F4F4F' : 'áááá£á á¯á áááªá áá¡á¤áá á', + '008080' : 'á©ááá¥á ááá áá£á á¯á', + '000080' : 'áá£á¥á áá£á á¯á', + '4B0082' : 'ááá¡ááááá¡á¤áá á', + '696969' : 'áá£á¥á áááªá áá¡á¤áá á', + 'B22222' : 'ááá£á áá¡á¤áá á', + 'A52A2A' : 'áá£á¥á á§áááá¡á¤áá á', + 'DAA520' : 'ááá§áááááá', + '006400' : 'áá£á¥á áá¬áááá', + '40E0D0' : 'áªáá¡á¤áá á', + '0000CD' : 'áááááá áá áá£á á¯á', + '800080' : 'ááá¡á¤áá á', + '808080' : 'áááªá áá¡á¤áá á', + 'F00' : 'á¬ááááá', + 'FF8C00' : 'áá£á¥á á¡á¢áá¤áááá¡á¤áá á', + 'FFD700' : 'áá¥á áá¡á¤áá á', + '008000' : 'áá¬áááá', + '0FF' : 'á¦áá áªáá¡á¤áá á', + '00F' : 'áá£á á¯á', + 'EE82EE' : 'ááá¡á¤áá á', + 'A9A9A9' : 'áááªá áááªá áá¡á¤áá á', + 'FFA07A' : 'á©ááá¥á ááá ááá ááá¡á¤áá á', + 'FFA500' : 'á¡á¢áá¤áááá¡á¤áá á', + 'FFFF00' : 'á§áááááá', + '00FF00' : 'áá£á á¯á', + 'AFEEEE' : 'áªáá¡á¤áá á', + 'ADD8E6' : 'á¦áá áá£á á¯á', + 'DDA0DD' : 'á¦áá ááá¡á¤áá á', + 'D3D3D3' : 'á¦áá áááªá áá¡á¤áá á', + 'FFF0F5' : 'á¦áá ááá ááá¡á¤áá á', + 'FAEBD7' : 'á¦áá á§áááá¡á¤áá á', + 'FFFFE0' : 'áááááá á§áááááá', + 'F0FFF0' : 'á¦áá áá¬áááá', + 'F0FFFF' : 'á¦áá áªáá¡á¤áá á 2', + 'F0F8FF' : 'á¦áá áªáá¡á¤áá á 3', + 'E6E6FA' : 'á¦áá ááá¡á¤áá á 2', + 'FFF' : 'áááá á' + }, + + scayt : + { + title : 'ááá ááá¬áá áá¡ á¨áááá¬áááá áá áá¤áá¡áá¡', + opera_title : 'áá áá áá®áá ááááá ááá Opera-á¡ áááá ', + enable : 'SCAYT-áá¡ á©áá ááá', + disable : 'SCAYT-áá¡ ááááá ááá', + about : 'SCAYT-áá¡ á¨áá¡áá®áá', + toggle : 'SCAYT-áá¡ ááááá ááá', + options : 'ááá áááá¢á ááá', + langs : 'ááááá', + moreSuggestions : 'ááá¢á á¨ááááááááááá', + ignore : 'á£áá£áááááá§áá¤á', + ignoreAll : 'á§ááááá¡ á£áá£áááááá§áá¤á', + addWord : 'á¡áá¢á§ááá¡ ááááá¢ááá', + emptyDic : 'ááá¥á¡áááááá¡ á¡áá¢á§áá áá á£ááá áá§áá¡ áªáá áááá.', + + optionsTab : 'ááá áááá¢á ááá', + allCaps : 'áááá áá¡ááááá ááá¬áá ááá á¡áá¢á§ááááá¡ á£áá£áááááá§áá¤á', + ignoreDomainNames : 'áááááá£á á á¡áá®áááááá¡ á£áá£áááááá§áá¤á', + mixedCase : 'á¨áá áá£áá áá¡áááááá á¡áá¢á§ááááá¡ á£áá£áááááá§áá¤á', + mixedWithDigits : 'áªáá¤á áááááá á¡áá¢á§ááááá¡ á£áá£áááááá§áá¤á', + + languagesTab : 'ááááá', + + dictionariesTab : 'ááá¥á¡ááááááá', + dic_field_name : 'ááá¥á¡áááááá¡ á¡áá®ááá', + dic_create : 'á¨áá¥ááá', + dic_restore : 'áááá á£áááá', + dic_delete : 'á¬áá¨áá', + dic_rename : 'ááááá á¥áááá', + dic_info : 'áááááááá ááááá áááá®ááá ááááá¡ ááá¥á¡ááááá áááá®ááá Cookie-á¨á. áá£ááªá Cookie á¨ááá¦á£áá£ááá ááááá¨á. á ááªá ááá¥á¡áááááá¡ áááá ááááá áááá á¡áááááá áá¡ á¨ááá«áááá á¨áááááá®áá á©áááá¡ á¡áá ááá áá. á©áááá¡ á¡áá ááá áá ááá¥á¡ááááá¡ á¨áá¡áááá®áá á£ááá ááá£ááááá ááá¡á á¡áá®ááá. áᣠá£áá ááá¥áá ááá¥á¡ááááá, ááá áá¤áá ááá¡á á¡áá®ááá áá áááááá áá "áááá á£ááááá¡" á¦ááááá¡.', + + aboutTab : 'ááá¤áá áááªáá' + }, + + about : + { + title : 'CKEditor-áá¡ á¨áá¡áá®áá', + dlgTitle : 'CKEditor-áá¡ á¨áá¡áá®áá', + help : 'ááá®ááá áááá¡áááá¡ áá®áááá $1.', + userGuide : 'CKEditor-áá¡ áááá®ááá ááááá¡ á¡áá®áááá«á¦áááááá', + moreInfo : 'áááªáááááá¡ ááá¤áá áááªááá¡áááá¡ áá¬áááá á©áááá¡ á¡ááá¢á¡:', + copy : 'Copyright © $1. á§áááá á£á¤áááá áááªá£ááá.' + }, + + maximize : 'áááááááá', + minimize : 'ááááá¢áá ááááá', + + fakeobjects : + { + anchor : 'á¦á£áá', + flash : 'Flash ááááááªáá', + iframe : 'IFrame', + hiddenfield : 'áááá£áá áááá', + unknown : 'á£áªáááá ááááá¥á¢á' + }, + + resize : 'ááá¬áá ááááá¡ á¨áá¡ááªáááááá', + + colordialog : + { + title : 'á¤áá áá¡ á¨ááªááá', + options : 'á¤áá áá¡ ááá áááá¢á ááá', + highlight : 'á©áááááá', + selected : 'áá á©áá£áá á¤áá á', + clear : 'ááá¡á£á¤áááááá' + }, + + toolbarCollapse : 'á®ááá¡áá¬á§ááá ááááá¡ á¨áá¬ááá', + toolbarExpand : 'á®ááá¡áá¬á§ááá ááááá¡ ááááá¬ááá', + + toolbarGroups : + { + document : 'áááá£áááá¢á', + clipboard : 'Clipboard/ááá£á¥áááá', + editing : 'á áááá¥á¢áá ááá', + forms : 'á¤áá áááá', + basicstyles : 'á«áá ááááá á¡á¢ááááá', + paragraph : 'áááááªá', + links : 'ááá£áááá', + insert : 'á©áá¡áá', + styles : 'á¡á¢ááááá', + colors : 'á¤áá ááá', + tools : 'á®ááá¡áá¬á§áááá' + }, + + bidi : + { + ltr : 'á¢áá¥á¡á¢áá¡ ááááá áá£áááá ááá áªá®ááááá ááá á¯áááá', + rtl : 'á¢áá¥á¡á¢áá¡ ááááá áá£áááá ááá á¯áááááá ááá áªá®ááá' + }, + + docprops : + { + label : 'áááá£áááá¢áá¡ ááá áááá¢á ááá', + title : 'áááá£áááá¢áá¡ ááá áááá¢á ááá', + design : 'ááááááá', + meta : 'ááá¢áTag-ááá', + chooseColor : 'áá á©ááá', + other : 'á¡á®áá...', + docTitle : 'áááá ááá¡ á¡áááá£á á', + charset : 'ááááá ááá', + charsetOther : 'á¡á®áá ááááá ááááá', + charsetASCII : 'áááá ááá£áá (ASCII)', + charsetCE : 'áªááá¢á ááá£á ááá ááá£áá', + charsetCT : 'á¢á ááááªáá£áá á©ááá£á á (Big5)', + charsetCR : 'ááá ááá£á á', + charsetGR : 'ááá á«áá£áá', + charsetJP : 'áááááá£á á', + charsetKR : 'ááá áá£áá', + charsetTR : 'áá£á á¥á£áá', + charsetUN : 'á£áááááá (UTF-8)', + charsetWE : 'ááá¡ááááá ááá ááá£áá', + docType : 'áááá£áááá¢áá¡ á¢ááá', + docTypeOther : 'á¡á®áá á¢áááá¡ áááá£áááá¢á', + xhtmlDec : 'XHTML áááááá ááªááááá¡ á©áá ááá', + bgColor : 'á¤áááá¡ á¤áá á', + bgImage : 'á¤ááá£á á á¡á£á áááá¡ URL', + bgFixed : 'á£ááá«á áá (á¤áá¥á¡áá ááá£áá) á¤ááá', + txtColor : 'á¢áá¥á¡á¢áá¡ á¤áá á', + margin : 'áááá ááá¡ ááááááá', + marginTop : 'áááá', + marginLeft : 'ááá áªá®ááá', + marginRight : 'ááá á¯áááá', + marginBottom : 'á¥áááá', + metaKeywords : 'áááá£áááá¢áá¡ á¡áááááá«á á¡áá¢á§áááá (áá«áááá ááááá§áá¤ááá)', + metaDescription : 'áááá£áááá¢áá¡ áá¦á¬áá á', + metaAuthor : 'ááá¢áá á', + metaCopyright : 'Copyright', + previewHtml : '<p>áá¡ áá áá¡ <strong>á¡ááªáááá á¢áá¥á¡á¢á</strong>. áá¥ááá <a href="javascript:void(0)">CKEditor</a>-áá á¡áá ááááááá.</p>' + } +}; diff --git a/_source/lang/km.js b/_source/lang/km.js new file mode 100644 index 0000000..15b6a9a --- /dev/null +++ b/_source/lang/km.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Khmer language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['km'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'áá¼á', + newPage : 'ááááááááá¸', + save : 'ááááá¶áá»á', + preview : 'áá¾ááá¶ááááá', + cut : 'áá¶áááá', + copy : 'á ááááá', + paste : 'á ááááá¶áá', + print : 'ááááá»ááá', + underline : 'áá·áááááá¶áááá¸áááááá¢áááá', + bold : 'á¢áááááá·ááá', + italic : 'á¢ááááááááá', + selectAll : 'áááá¾ááá¾ááá¶ááá¢áá', + removeFormat : 'áááá áá áá¶ááá áá¶', + strike : 'áá·áááááá¶áááá¶ááááááá¶áá¢áááá', + subscript : 'á¢áááááá¼á ááááá', + superscript : 'á¢áááááá¼á áá¾', + horizontalrule : 'ááááááááááá¶ááááááá', + pagebreak : 'áááááá áá¶ááááá¶á áááááá', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'ááááááá¶áá', + undo : 'áá¶áá¡á¾ááá·á', + redo : 'áááá¾á¡á¾ááá·á', + + // Common messages and labels. + common : + { + browseServer : 'áá¾á', + url : 'URL', + protocol : 'áááá¼áá¼áá¼á', + upload : 'áá¶ááá', + uploadSubmit : 'ááááá¼ááá áá¶ááááá¶ááá¸áááááááááá¶', + image : 'áá¼ááá¶á', + flash : 'Flash', + form : 'ááááá', + checkbox : 'áááá¢áááááá¾ááá¾á', + radio : 'ááá¼áá»ááááááááá¼á', + textField : 'áá½ááááááá¢ááááá', + textarea : 'ááááááááááá¢ááááá', + hiddenField : 'áá½ááá¶áá', + button : 'ááá¼áá»á', + select : 'áá½ááááá¾ááá¾á', + imageButton : 'ááá¼áá»ááá¼ááá¶á', + notSet : '<áá·áááá>', + id : 'Id', + name : 'ááááá', + langDir : 'áá·ááá áá¶áá¶', + langDirLtr : 'áá¸ááááááá áááá¶á(LTR)', + langDirRtl : 'áá¸áááá¶ááá ááááá(RTL)', + langCode : 'ááááá¼ááá¶áá¶', + longDescr : 'á¢áá·áááá¶á URL ááá', + cssClass : 'Stylesheet Classes', + advisoryTitle : 'á ááááá¾á áááá¹áááá¶', + cssStyle : 'ááá¼á', + ok : 'ááááááá', + cancel : 'áá·áááááááá', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'áááá·áááááá', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'ááá¹á', + height : 'ááááá', + align : 'ááááááá¸áá¶áá', + alignLeft : 'áá¶ááááá', + alignRight : 'áá¶ááááá¶á', + alignCenter : 'ááááá¶á', + alignTop : 'áá¶ááá¾', + alignMiddle : 'ááááá¶á', + alignBottom : 'áá¶áááááá', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'ááááááá¢áááááá·ááá', + title : 'áá¼á¢áááááá·ááá', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'áááááá/áááááá áááá¶áá', + other : '<other>', // MISSING + menu : 'áááááááááá¶áá', + title : 'áááá¶áá', + info : 'ááááá¶áá¢ááá¸áááá¶áá', + target : 'ááááá ', + upload : 'áá¶ááá', + advanced : 'áááá·áááááá', + type : 'áááááááááá¶áá', + toUrl : 'URL', // MISSING + toAnchor : 'áá»áááá¶áá áááá»ááááááááá', + toEmail : 'á¢áá¸ááá', + targetFrame : '<á áááááá>', + targetPopup : '<áá¸ááá¼á ááá>', + targetFrameName : 'áááááá ááááááááááá¶ááááá ', + targetPopupName : 'ááááááá¸ááá¼áááá', + popupFeatures : 'áááááááááááá¸ááá¼áááá', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'ááᶠááááá¶á', + popupLocationBar: 'ááᶠáá¸áá¶áá', + popupToolbar : 'ááᶠá©ááááá', + popupMenuBar : 'ááᶠááºáá»á', + popupFullScreen : 'á¢ááááá»áááá(IE)', + popupScrollBars : 'ááᶠáá¶á', + popupDependent : 'á¢á¶ááááááá¾ (Netscape)', + popupLeft : 'áá¸áá¶áááá¶áááááá', + popupTop : 'áá¸áá¶áááá¶ááá¾', + id : 'Id', // MISSING + langDir : 'áá·ááá áá¶áá¶', + langDirLTR : 'áá¸ááááááá áááá¶á(LTR)', + langDirRTL : 'áá¸áááá¶ááá ááááá(RTL)', + acccessKey : 'áḠáááá¶ááá á¼á', + name : 'ááááá', + langCode : 'áá·ááá áá¶áá¶', + tabIndex : 'ááá Tab', + advisoryTitle : 'á ááááá¾á áááá¹áááá¶', + advisoryContentType : 'ááááááá¢ááááá áááá¹áááá¶', + cssClasses : 'Stylesheet Classes', + charset : 'ááááá¼áá¢áááááááááááá¶áá', + styles : 'ááá¼á', + rel : 'Relationship', // MISSING + selectAnchor : 'áááá¾ááá¾ááá»áááá¶', + anchorName : 'áá¶áááááááááááá»áááá¶', + anchorId : 'áá¶á Id', + emailAddress : 'á¢áá¸ááá', + emailSubject : 'á ááááá¾áá¢ááááá', + emailBody : 'á¢ááááá', + noAnchors : '(No anchors available in the document)', // MISSING + noUrl : 'áá¼áááááá á¢á¶ááááááá¶á URL', + noEmail : 'áá¼áááááá á¢á¶ááááááá¶á á¢áá¸ááá' + }, + + // Anchor dialog + anchor : + { + toolbar : 'áááááá/áááááá áá»áááá¶', + menu : 'áá¶áááááááá»áááá¶', + title : 'áá¶áááááááá»áááá¶', + name : 'ááááááá»ááááááá¶', + errorName : 'áá¼áááááá ááááááá»ááááááá¶', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'ááááááá', + replace : 'áááá½á', + findWhat : 'áááááááá¢ááá¸:', + replaceWith : 'áááá½ááá¶áá½á:', + notFoundMsg : 'áá¶áááááá áááá·ááá¾ááá á', + matchCase : 'áááááááá¼ááá', + matchWord : 'áááá¼ááá¶ááááá¶ááá¢áá', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'áááá½ááá¶ááá¢áá', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'áá¶áá¶á', + title : 'áá¶áááááá áá¶áá¶á', + menu : 'áá¶áááááá áá¶áá¶á', + deleteTable : 'ááááá¶áá¶á', + rows : 'áá½áááááá', + columns : 'áá½ááá', + border : 'ááá áááá»á', + widthPx : 'áá¸áááá', + widthPc : 'áá¶ááá', + widthUnit : 'width unit', // MISSING + cellSpace : 'áááá¶áááá', + cellPad : 'áááááá', + caption : 'á ááááá¾á', + summary : 'ááá áááá¸áááááá', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cell', // MISSING + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'áááááá', + merge : 'ááááá¼áááá', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', // MISSING + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'ááááá½áááááá' + }, + + column : + { + menu : 'Column', // MISSING + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'ááááá½ááá' + } + }, + + // Button Dialog. + button : + { + title : 'áá¶áááááá ááá¼áá»á', + text : 'á¢ááááá(áááá)', + type : 'áááááá', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'áá¶áááááááááá¢áááááá¾ááá¾á', + radioTitle : 'áá¶ááááááááá¼áá»ááááááá', + value : 'áááá', + selected : 'áá¶ááááá¾ááá¾á' + }, + + // Form Dialog. + form : + { + title : 'áá¶ááááááááááá', + menu : 'áá¶ááááááááááá', + action : 'ááááááá¶á', + method : 'áá·áá¸', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'áá¶áááááááá½ááááá¾ááá¾á', + selectInfo : 'ááááá¶á', + opAvail : 'áá¶áááááááááá¾ááá¾á áááá¢á¶á ááááááá¶á', + value : 'áááá', + size : 'ááá á', + lines : 'ááááá¶áá', + chkMulti : 'á¢áá»áááá¶áá¢áááááá¾ááá¾áá ááá¾á', + opText : 'áá¶ááá', + opValue : 'áááá', + btnAdd : 'áááááá', + btnModify : 'áááá¶áááááá¼á', + btnUp : 'áá¾', + btnDown : 'ááááá', + btnSetValue : 'Set as selected value', // MISSING + btnDelete : 'ááá' + }, + + // Textarea Dialog. + textarea : + { + title : 'áá¶áááááááááááááááááá¢ááááá', + cols : 'áá¼ááá', + rows : 'áá¼áááááá' + }, + + // Text Field Dialog. + textfield : + { + title : 'áá¶áááááááá½áá¢ááááá', + name : 'ááááá', + value : 'áááá', + charWidth : 'ááá¹á á¢áááá', + maxChars : 'á¢ááááá¢áá·ááá·áá¶', + type : 'áááááá', + typeText : 'áá¶ááá', + typePass : 'áá¶ááááááá¶áá' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'áá¶áááááááá½ááá¶áá', + name : 'ááááá', + value : 'áááá' + }, + + // Image Dialog. + image : + { + title : 'áá¶áááááááá¼ááá¶á', + titleButton : 'áá¶ááááááááá¼áá»ááá¼ááá¶á', + menu : 'áá¶áááááááá¼ááá¶á', + infoTab : 'ááááá¶áá¢ááá¸áá¼ááá¶á', + btnUpload : 'ááááá¼ááá áá¶ááááá¶ááá¸áááááááááá¶', + upload : 'áá¶ááá', + alt : 'á¢ááááááááá½á', + lockRatio : 'á¢áááá¶á¡á»á', + resetSize : 'áááááááá áá¡á¾ááá·á', + border : 'ááá»á', + hSpace : 'áááá¶áááá¹á', + vSpace : 'áááá¶ááááááá', + alertUrl : 'áá¼áááááááá¶ááááááá¶ááááááá¼ááá¶á', + linkTab : 'áááá¶áá', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'áá¶áááááá Flash', + propertiesTab : 'Properties', // MISSING + title : 'áá¶áááááá Flash', + chkPlay : 'áááááááááááááááááá', + chkLoop : 'á ááá½ááá', + chkMenu : 'áááá á¶á ááºáá»ááááá Flash', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'ááá á', + scaleAll : 'áááá á¶ááá¶ááá¢áá', + scaleNoBorder : 'áá·ááááá á¶áááá»á', + scaleFit : 'áááá¼ááááá', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs Bottom', // MISSING + alignAbsMiddle : 'Abs Middle', // MISSING + alignBaseline : 'ááááá¶áááá¶áá¼ááááá¶á', + alignTextTop : 'áá¾á¢ááááá', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'ááááááááá¶áááááá', + hSpace : 'áááá¶áááá¹á', + vSpace : 'áááá¶ááááááá', + validateSrc : 'áá¼áááááá á¢á¶ááááááá¶á URL', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'áá·áá·áááá¢ááááá¶áá·áá»ááá', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'áááá¶ááááá»ááá áá¶áá»áááá', + changeTo : 'áááá¶áááááá¼ááá ', + btnIgnore : 'áá·ááááá¶áááááá¼á', + btnIgnoreAll : 'áá·ááááá¶áááááá¼á áá¶ááá¢áá', + btnReplace : 'áááá½á', + btnReplaceAll : 'áááá½ááá¶ááá¢áá', + btnUndo : 'áá¶áá¡á¾ááá·á', + noSuggestions : '- áááá¶ááááá¾á -', + progress : 'áááá»ááá·áá·áááá¢ááááá¶áá·áá»ááá...', + noMispell : 'áá¶ááá·áá·áááá¢ááááá¶áá·áá»ááááá¶áá áá: áááá¶áááá á»á', + noChanges : 'áá¶ááá·áá·áááá¢ááááá¶áá·áá»ááááá¶áá áá: áá»ááá¶ááááá¶áááááá¼á', + oneChange : 'áá¶ááá·áá·áááá¢ááááá¶áá·áá»ááááá¶áá áá: áá¶ááááá½ááááá¼á áá¶ááááá¶áááááá¼á', + manyChanges : 'áá¶ááá·áá·áááá¢ááááá¶áá·áá»ááááá¶áá áá: %1 áá¶ááááá¶ááááá¶áááááá¼á', + ieSpellDownload : 'áá»ááá¶ááááááá·áá¸áá·áá·áááá¢ááááá¶áá·áá»ááá á áá¾á áááá¶ááááá¸áá¶?' + }, + + smiley : + { + toolbar : 'áá¼ááá¶á', + title : 'ááááá¼ááá¼ááá¶á', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ááááá¸áá¶á¢áááá', + bulletedlist : 'ááááá¸áá¶áááááááá¼á', + indent : 'áááááááá¶áá á¼áááááá¶áá', + outdent : 'ááááááá¶áá á¼áááááá¶áá', + + justify : + { + left : 'áááá¹áááááá', + center : 'áááá¹áááááá¶á', + right : 'áááá¹ááááá¶á', + block : 'áááá¹ááááá¶á' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'á ááááá¶áá', + cutError : 'áá¶áááááááá»áááááá¶ááááááááááá·áá¸áá»ááááááááááá¢ááá ááá\u200báá·áá¢á¶á áááá¾áááááá·áá¸áá¶áááááá¢ááááá áá¶ááá¢áááááááááááááááááááááááá¶áá¡á¾á á áá¼ááááá¾áááá¶ááááááá áá¸áá¼á ááá (Ctrl/Cmd+X) á', + copyError : 'áá¶áááááááá»áááááá¶ááááááááááá·áá¸áá»ááááááááááá¢ááá ááá\u200báá·áá¢á¶á áááá¾áááááá·áá¸áá¶áááááá¢ááááá á áááá¢áááááááááááááááááááááááá¶áá¡á¾á á áá¼ááááá¾áááá¶ááááááá áá¸áá¼á ááá (Ctrl/Cmd+C)á', + pasteMsg : 'áá¼áá áááá¢ááááááá áá¶áááááá»ááááá¢áááá¼á áá¶ááááááááááááá¾áááá¶áá áḠ\u200b(<STRONG>Ctrl/Cmd+V</STRONG>) á á¾áá á»á <STRONG>OK</STRONG> á', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'á ááááá¶áááḠWord', + title : 'á ááááá¶áááḠWord', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'á ááááá¶ááá¢ááááááááááá¶', + title : 'á ááááá¶ááá¢ááááááááááá¶' + }, + + templates : + { + button : 'á¯ááá¶ááááá¼', + title : 'á¯ááá¶ááááá¼ ááááá¢áááááá', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'áá¼ááááá¾ááá¾áá¯ááá¶ááááá¼ áá¾áááá¸áá¾ááá áááá»ááááááá·áá¸áá¶áááááá¢ááááá<br>(á¢ááááááá¹ááá¶ááááá):', + emptyListMsg : '(áá»ááá¶áá¯ááá¶ááááá¼áááá¼ááá¶áááááá)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'ááá¼á', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'áá áá¶', + panelTitle : 'áá áá¶', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'á ááá»á', + voiceLabel : 'Font', // MISSING + panelTitle : 'á ááá»á' + }, + + fontSize : + { + label : 'ááá á', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'ááá á' + }, + + colorButton : + { + textColorTitle : 'áááá¢áááá', + bgColorTitle : 'ááááááááá¶áááááá', + panelTitle : 'Colors', // MISSING + auto : 'áááááááááááá', + more : 'ááááááááááá..' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'áá¶áááááá á¯ááá¶á', + title : 'áá¶áááááá á¯ááá¶á', + design : 'Design', // MISSING + meta : 'áá·áááááááá', + chooseColor : 'Choose', // MISSING + other : '<other>', + docTitle : 'á ááááá¾áááááá', + charset : 'áááááááááá¼ááá¶áá¶', + charsetOther : 'áááááááááá¼ááá¶áá¶áááááááá', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'áááááááááá¶áááááá', + docTypeOther : 'áááááááááá¶áááááááááááááá', + xhtmlDec : 'ááááá¼á XHTML', + bgColor : 'ááááá¶áááááá', + bgImage : 'URL áááááá¼ááá¶ááá¶áááááá', + bgFixed : 'áááááááááááá·ááááá¼á', + txtColor : 'áááá¢áááá', + margin : 'ááá»áááááá', + marginTop : 'áá¾', + marginLeft : 'ááááá', + marginRight : 'áááá¶á', + marginBottom : 'ááááá', + metaKeywords : 'áá¶ááááá áááá»áá¯ááá¶á (áááá¶á ááá¸áááá¶áááááááá)', + metaDescription : 'ááá áááá¸á¢áááá¶áá·áááá¶áá¢ááá¸á¯ááá¶á', + metaAuthor : 'á¢ááááá·áááá', + metaCopyright : 'ááááá¶áá·áááá·á', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/ko.js b/_source/lang/ko.js new file mode 100644 index 0000000..a91d897 --- /dev/null +++ b/_source/lang/ko.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Korean language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['ko'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'ìì¤', + newPage : 'ì 문ì', + save : 'ì ì¥í기', + preview : '미리보기', + cut : 'ìë¼ë´ê¸°', + copy : 'ë³µì¬í기', + paste : 'ë¶ì¬ë£ê¸°', + print : 'ì¸ìí기', + underline : 'ë°ì¤', + bold : 'ì§íê²', + italic : 'ì´í ë¦', + selectAll : 'ì ì²´ì í', + removeFormat : 'í¬ë§· ì§ì°ê¸°', + strike : 'ì·¨ìì ', + subscript : 'ìë 첨ì', + superscript : 'ì 첨ì', + horizontalrule : 'ìíì ì½ì ', + pagebreak : 'Insert Page Break for Printing', // MISSING + pagebreakAlt : 'Page Break', // MISSING + unlink : 'ë§í¬ ìì ', + undo : 'ì·¨ì', + redo : 'ì¬ì¤í', + + // Common messages and labels. + common : + { + browseServer : 'ìë² ë³´ê¸°', + url : 'URL', + protocol : 'íë¡í ì½', + upload : 'ì ë¡ë', + uploadSubmit : 'ìë²ë¡ ì ì¡', + image : 'ì´ë¯¸ì§', + flash : 'íëì¬', + form : 'í¼', + checkbox : 'ì²´í¬ë°ì¤', + radio : 'ë¼ëì¤ë²í¼', + textField : 'ì ë ¥íë', + textarea : 'ì ë ¥ìì', + hiddenField : 'ì¨ê¹íë', + button : 'ë²í¼', + select : 'í¼ì¹¨ëª©ë¡', + imageButton : 'ì´ë¯¸ì§ë²í¼', + notSet : '<ì¤ì ëì§ ìì>', + id : 'ID', + name : 'Name', + langDir : 'ì°ê¸° ë°©í¥', + langDirLtr : 'ì¼ìª½ìì ì¤ë¥¸ìª½ (LTR)', + langDirRtl : 'ì¤ë¥¸ìª½ìì ì¼ìª½ (RTL)', + langCode : 'ì¸ì´ ì½ë', + longDescr : 'URL ì¤ëª ', + cssClass : 'Stylesheet Classes', + advisoryTitle : 'Advisory Title', + cssStyle : 'Style', + ok : 'ì', + cancel : 'ìëì¤', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'ìì¸í', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'ëë¹', + height : 'ëì´', + align : 'ì ë ¬', + alignLeft : 'ì¼ìª½', + alignRight : 'ì¤ë¥¸ìª½', + alignCenter : 'ê°ì´ë°', + alignTop : 'ì', + alignMiddle : 'ì¤ê°', + alignBottom : 'ìë', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'í¹ì문ì ì½ì ', + title : 'í¹ì문ì ì í', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'ë§í¬ ì½ì /ë³ê²½', + other : '<기í>', + menu : 'ë§í¬ ìì ', + title : 'ë§í¬', + info : 'ë§í¬ ì ë³´', + target : 'íê²', + upload : 'ì ë¡ë', + advanced : 'ìì¸í', + type : 'ë§í¬ ì¢ ë¥', + toUrl : 'URL', // MISSING + toAnchor : 'ì± ê°í¼', + toEmail : 'ì´ë©ì¼', + targetFrame : '<íë ì>', + targetPopup : '<íì ì°½>', + targetFrameName : 'íê² íë ì ì´ë¦', + targetPopupName : 'íì ì°½ ì´ë¦', + popupFeatures : 'íì ì°½ ì¤ì ', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'ìíë°', + popupLocationBar: '주ìíìì¤', + popupToolbar : 'í´ë°', + popupMenuBar : 'ë©ë´ë°', + popupFullScreen : 'ì ì²´íë©´ (IE)', + popupScrollBars : 'ì¤í¬ë¡¤ë°', + popupDependent : 'Dependent (Netscape)', + popupLeft : 'ì¼ìª½ ìì¹', + popupTop : 'ì쪽 ìì¹', + id : 'Id', // MISSING + langDir : 'ì°ê¸° ë°©í¥', + langDirLTR : 'ì¼ìª½ìì ì¤ë¥¸ìª½ (LTR)', + langDirRTL : 'ì¤ë¥¸ìª½ìì ì¼ìª½ (RTL)', + acccessKey : 'ìì¸ì¤ í¤', + name : 'Name', + langCode : 'ì°ê¸° ë°©í¥', + tabIndex : 'í ìì', + advisoryTitle : 'Advisory Title', + advisoryContentType : 'Advisory Content Type', + cssClasses : 'Stylesheet Classes', + charset : 'Linked Resource Charset', + styles : 'Style', + rel : 'Relationship', // MISSING + selectAnchor : 'ì± ê°í¼ ì í', + anchorName : 'ì± ê°í¼ ì´ë¦', + anchorId : 'ì± ê°í¼ ID', + emailAddress : 'ì´ë©ì¼ 주ì', + emailSubject : 'ì 목', + emailBody : 'ë´ì©', + noAnchors : '(문ìì ì± ê°í¼ê° ììµëë¤.)', + noUrl : 'ë§í¬ URLì ì ë ¥íììì.', + noEmail : 'ì´ë©ì¼ì£¼ì를 ì ë ¥íììì.' + }, + + // Anchor dialog + anchor : + { + toolbar : 'ì± ê°í¼ ì½ì /ë³ê²½', + menu : 'ì± ê°í¼ ìì±', + title : 'ì± ê°í¼ ìì±', + name : 'ì± ê°í¼ ì´ë¦', + errorName : 'ì± ê°í¼ ì´ë¦ì ì ë ¥íììì.', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : '찾기 & ë°ê¾¸ê¸°', + find : '찾기', + replace : 'ë°ê¾¸ê¸°', + findWhat : 'ì°¾ì 문ìì´:', + replaceWith : 'ë°ê¿ 문ìì´:', + notFoundMsg : '문ìì´ì ì°¾ì ì ììµëë¤.', + matchCase : 'ëì문ì 구ë¶', + matchWord : 'ì¨ì í ë¨ì´', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : '모ë ë°ê¾¸ê¸°', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'í', + title : 'í ì¤ì ', + menu : 'í ì¤ì ', + deleteTable : 'í ìì ', + rows : 'ê°ë¡ì¤', + columns : 'ì¸ë¡ì¤', + border : 'í ë리 í¬ê¸°', + widthPx : 'í½ì ', + widthPc : 'í¼ì¼í¸', + widthUnit : 'width unit', // MISSING + cellSpace : 'ì ê°ê²©', + cellPad : 'ì ì¬ë°±', + caption : '캡ì ', + summary : 'Summary', // MISSING + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'ì /칸(Cell)', + insertBefore : 'ìì ì /칸 ì½ì ', + insertAfter : 'ë¤ì ì /칸 ì½ì ', + deleteCell : 'ì ìì ', + merge : 'ì í©ì¹ê¸°', + mergeRight : 'ì¤ë¥¸ìª½ ëì¹ê¸°', + mergeDown : 'ì¼ìª½ ëì¹ê¸°', + splitHorizontal : 'ìí ëë기', + splitVertical : 'ìì§ ëë기', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'í(Row)', + insertBefore : 'ìì í ì½ì ', + insertAfter : 'ë¤ì í ì½ì ', + deleteRow : 'ê°ë¡ì¤ ìì ' + }, + + column : + { + menu : 'ì´(Column)', + insertBefore : 'ìì ì´ ì½ì ', + insertAfter : 'ë¤ì ì´ ì½ì ', + deleteColumn : 'ì¸ë¡ì¤ ìì ' + } + }, + + // Button Dialog. + button : + { + title : 'ë²í¼ ìì±', + text : 'ë²í¼ê¸ì(ê°)', + type : 'ë²í¼ì¢ ë¥', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ì²´í¬ë°ì¤ ìì±', + radioTitle : 'ë¼ëì¤ë²í¼ ìì±', + value : 'ê°', + selected : 'ì íë¨' + }, + + // Form Dialog. + form : + { + title : 'í¼ ìì±', + menu : 'í¼ ìì±', + action : 'ì¤íê²½ë¡(Action)', + method : 'ë°©ë²(Method)', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'í¼ì¹¨ëª©ë¡ ìì±', + selectInfo : 'ì ë³´', + opAvail : 'ì íìµì ', + value : 'ê°', + size : 'ì¸ë¡í¬ê¸°', + lines : 'ì¤', + chkMulti : 'ì¬ë¬í목 ì í íì©', + opText : 'ì´ë¦', + opValue : 'ê°', + btnAdd : 'ì¶ê°', + btnModify : 'ë³ê²½', + btnUp : 'ìë¡', + btnDown : 'ìëë¡', + btnSetValue : 'ì íëê²ì¼ë¡ ì¤ì ', + btnDelete : 'ìì ' + }, + + // Textarea Dialog. + textarea : + { + title : 'ì ë ¥ìì ìì±', + cols : '칸ì', + rows : 'ì¤ì' + }, + + // Text Field Dialog. + textfield : + { + title : 'ì ë ¥íë ìì±', + name : 'ì´ë¦', + value : 'ê°', + charWidth : 'ê¸ì ëë¹', + maxChars : 'ìµë ê¸ìì', + type : 'ì¢ ë¥', + typeText : '문ìì´', + typePass : 'ë¹ë°ë²í¸' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ì¨ê¹íë ìì±', + name : 'ì´ë¦', + value : 'ê°' + }, + + // Image Dialog. + image : + { + title : 'ì´ë¯¸ì§ ì¤ì ', + titleButton : 'ì´ë¯¸ì§ë²í¼ ìì±', + menu : 'ì´ë¯¸ì§ ì¤ì ', + infoTab : 'ì´ë¯¸ì§ ì ë³´', + btnUpload : 'ìë²ë¡ ì ì¡', + upload : 'ì ë¡ë', + alt : 'ì´ë¯¸ì§ ì¤ëª ', + lockRatio : 'ë¹ì¨ ì ì§', + resetSize : 'ìë í¬ê¸°ë¡', + border : 'í ë리', + hSpace : 'ìíì¬ë°±', + vSpace : 'ìì§ì¬ë°±', + alertUrl : 'ì´ë¯¸ì§ URLì ì ë ¥íììì', + linkTab : 'ë§í¬', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'íëì¬ ìì±', + propertiesTab : 'Properties', // MISSING + title : 'íëì¬ ë±ë¡ì ë³´', + chkPlay : 'ìëì¬ì', + chkLoop : 'ë°ë³µ', + chkMenu : 'íëì¬ë©ë´ ê°ë¥', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'ìì', + scaleAll : '모ë보기', + scaleNoBorder : 'ê²½ê³ì ìì', + scaleFit : 'ìììëì¡°ì ', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'ì¤ìë(Abs Bottom)', + alignAbsMiddle : 'ì¤ì¤ê°(Abs Middle)', + alignBaseline : '기ì¤ì ', + alignTextTop : 'ê¸ììë¨', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'ë°°ê²½ ìì', + hSpace : 'ìíì¬ë°±', + vSpace : 'ìì§ì¬ë°±', + validateSrc : 'ë§í¬ URLì ì ë ¥íììì.', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'ì² ìê²ì¬', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'ì¬ì ì ìë ë¨ì´', + changeTo : 'ë³ê²½í ë¨ì´', + btnIgnore : 'ê±´ëë', + btnIgnoreAll : '모ë ê±´ëë', + btnReplace : 'ë³ê²½', + btnReplaceAll : '모ë ë³ê²½', + btnUndo : 'ì·¨ì', + noSuggestions : '- ì¶ì²ë¨ì´ ìì -', + progress : 'ì² ìê²ì¬ë¥¼ ì§íì¤ì ëë¤...', + noMispell : 'ì² ìê²ì¬ ìë£: ì못ë ì² ìê° ììµëë¤.', + noChanges : 'ì² ìê²ì¬ ìë£: ë³ê²½ë ë¨ì´ê° ììµëë¤.', + oneChange : 'ì² ìê²ì¬ ìë£: ë¨ì´ê° ë³ê²½ëììµëë¤.', + manyChanges : 'ì² ìê²ì¬ ìë£: %1 ë¨ì´ê° ë³ê²½ëììµëë¤.', + ieSpellDownload : 'ì² ì ê²ì¬ê¸°ê° ì² ì¹ëì§ ìììµëë¤. ì§ê¸ ë¤ì´ë¡ëíìê² ìµëê¹?' + }, + + smiley : + { + toolbar : 'ìì´ì½', + title : 'ìì´ì½ ì½ì ', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ìììë 목ë¡', + bulletedlist : 'ìììë 목ë¡', + indent : 'ë¤ì¬ì°ê¸°', + outdent : 'ë´ì´ì°ê¸°', + + justify : + { + left : 'ì¼ìª½ ì ë ¬', + center : 'ê°ì´ë° ì ë ¬', + right : 'ì¤ë¥¸ìª½ ì ë ¬', + block : 'ì쪽 ë§ì¶¤' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'ë¶ì¬ë£ê¸°', + cutError : 'ë¸ë¼ì°ì ì ë³´ìì¤ì ë문ì ìë¼ë´ê¸° 기ë¥ì ì¤íí ì ììµëë¤. í¤ë³´ë ëª ë ¹ì ì¬ì©íììì. (Ctrl/Cmd+X).', + copyError : 'ë¸ë¼ì°ì ì ë³´ìì¤ì ë문ì ë³µì¬í기 기ë¥ì ì¤íí ì ììµëë¤. í¤ë³´ë ëª ë ¹ì ì¬ì©íììì. (Ctrl/Cmd+C).', + pasteMsg : 'í¤ë³´ëì (<STRONG>Ctrl/Cmd+V</STRONG>) 를 ì´ì©í´ì ìììì ë¶ì¬ë£ê³ <STRONG>OK</STRONG> 를 ë르ì¸ì.', + securityMsg : 'ë¸ë¬ì°ì ë³´ì ì¤ì ì¼ë¡ ì¸í´, í´ë¦½ë³´ëì ìë£ë¥¼ ì§ì ì ê·¼í ì ììµëë¤. ì´ ì°½ì ë¤ì ë¶ì¬ë£ê¸° íììì¤.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'MS Word íììì ë¶ì¬ë£ê¸°', + title : 'MS Word íììì ë¶ì¬ë£ê¸°', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'í ì¤í¸ë¡ ë¶ì¬ë£ê¸°', + title : 'í ì¤í¸ë¡ ë¶ì¬ë£ê¸°' + }, + + templates : + { + button : 'í í릿', + title : 'ë´ì© í í릿', + options : 'Template Options', // MISSING + insertOption : 'íì¬ ë´ì© ë°ê¾¸ê¸°', + selectPromptMsg : 'ìëí°ìì ì¬ì©í í í릿ì ì ííììì.<br>(ì§ê¸ê¹ì§ ìì±ë ë´ì©ì ì¬ë¼ì§ëë¤.):', + emptyListMsg : '(í íë¦¿ì´ ììµëë¤.)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'ì¤íì¼', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'í¬ë§·', + panelTitle : 'í¬ë§·', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' // MISSING + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'í°í¸', + voiceLabel : 'Font', // MISSING + panelTitle : 'í°í¸' + }, + + fontSize : + { + label : 'ê¸ì í¬ê¸°', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'ê¸ì í¬ê¸°' + }, + + colorButton : + { + textColorTitle : 'ê¸ì ìì', + bgColorTitle : 'ë°°ê²½ ìì', + panelTitle : 'Colors', // MISSING + auto : '기본ìì', + more : 'ììì í...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : '문ì ìì±', + title : '문ì ìì±', + design : 'Design', // MISSING + meta : 'ë©íë°ì´í°', + chooseColor : 'Choose', // MISSING + other : '<기í>', + docTitle : 'íì´ì§ëª ', + charset : 'ìºë¦í°ì ì¸ì½ë©', + charsetOther : 'ë¤ë¥¸ ìºë¦í°ì ì¸ì½ë©', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : '문ì í¤ë', + docTypeOther : 'ë¤ë¥¸ 문ìí¤ë', + xhtmlDec : 'XHTML 문ìì ì í¬í¨', + bgColor : 'ë°°ê²½ìì', + bgImage : 'ë°°ê²½ì´ë¯¸ì§ URL', + bgFixed : 'ì¤í¬ë¡¤ëì§ìë ë°°ê²½', + txtColor : 'ê¸ì ìì', + margin : 'íì´ì§ ì¬ë°±', + marginTop : 'ì', + marginLeft : 'ì¼ìª½', + marginRight : 'ì¤ë¥¸ìª½', + marginBottom : 'ìë', + metaKeywords : '문ì í¤ìë (콤ë§ë¡ 구ë¶)', + metaDescription : '문ì ì¤ëª ', + metaAuthor : 'ìì±ì', + metaCopyright : 'ì ìê¶', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/lt.js b/_source/lang/lt.js new file mode 100644 index 0000000..060c567 --- /dev/null +++ b/_source/lang/lt.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Lithuanian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['lt'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Å altinis', + newPage : 'Naujas puslapis', + save : 'IÅ¡saugoti', + preview : 'PeržiÅ«ra', + cut : 'IÅ¡kirpti', + copy : 'Kopijuoti', + paste : 'Ä®dÄti', + print : 'Spausdinti', + underline : 'Pabrauktas', + bold : 'Pusjuodis', + italic : 'Kursyvas', + selectAll : 'PažymÄti viskÄ ', + removeFormat : 'Panaikinti formatÄ ', + strike : 'Perbrauktas', + subscript : 'Apatinis indeksas', + superscript : 'VirÅ¡utinis indeksas', + horizontalrule : 'Ä®terpti horizontaliÄ linijÄ ', + pagebreak : 'Ä®terpti puslapių skirtukÄ ', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Panaikinti nuorodÄ ', + undo : 'AtÅ¡aukti', + redo : 'Atstatyti', + + // Common messages and labels. + common : + { + browseServer : 'NarÅ¡yti po serverį', + url : 'URL', + protocol : 'Protokolas', + upload : 'Siųsti', + uploadSubmit : 'Siųsti į serverį', + image : 'Vaizdas', + flash : 'Flash', + form : 'Forma', + checkbox : 'Žymimasis langelis', + radio : 'Žymimoji akutÄ', + textField : 'Teksto laukas', + textarea : 'Teksto sritis', + hiddenField : 'Nerodomas laukas', + button : 'Mygtukas', + select : 'Atrankos laukas', + imageButton : 'Vaizdinis mygtukas', + notSet : '<nÄra nustatyta>', + id : 'Id', + name : 'Vardas', + langDir : 'Teksto kryptis', + langDirLtr : 'IÅ¡ kairÄs į deÅ¡inÄ (LTR)', + langDirRtl : 'IÅ¡ deÅ¡inÄs į kairÄ (RTL)', + langCode : 'Kalbos kodas', + longDescr : 'Ilgas apraÅ¡ymas URL', + cssClass : 'Stilių lentelÄs klasÄs', + advisoryTitle : 'KonsultacinÄ antraÅ¡tÄ', + cssStyle : 'Stilius', + ok : 'OK', + cancel : 'Nutraukti', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'Bendros savybÄs', + advancedTab : 'Papildomas', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Plotis', + height : 'AukÅ¡tis', + align : 'Lygiuoti', + alignLeft : 'KairÄ', + alignRight : 'DeÅ¡inÄ', + alignCenter : 'CentrÄ ', + alignTop : 'VirÅ¡Å«nÄ', + alignMiddle : 'Vidurį', + alignBottom : 'ApaÄiÄ ', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Ä®terpti specialų simbolį', + title : 'Pasirinkite specialų simbolį', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Ä®terpti/taisyti nuorodÄ ', + other : '<kitas>', + menu : 'Taisyti nuorodÄ ', + title : 'Nuoroda', + info : 'Nuorodos informacija', + target : 'Paskirties vieta', + upload : 'Siųsti', + advanced : 'Papildomas', + type : 'Nuorodos tipas', + toUrl : 'URL', // MISSING + toAnchor : 'ŽymÄ Å¡iame puslapyje', + toEmail : 'El.paÅ¡tas', + targetFrame : '<kadras>', + targetPopup : '<iÅ¡skleidžiamas langas>', + targetFrameName : 'Paskirties kadro vardas', + targetPopupName : 'Paskirties lango vardas', + popupFeatures : 'IÅ¡skleidžiamo lango savybÄs', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'BÅ«senos juosta', + popupLocationBar: 'Adreso juosta', + popupToolbar : 'Mygtukų juosta', + popupMenuBar : 'Meniu juosta', + popupFullScreen : 'Visas ekranas (IE)', + popupScrollBars : 'Slinkties juostos', + popupDependent : 'Priklausomas (Netscape)', + popupLeft : 'KairÄ pozicija', + popupTop : 'VirÅ¡utinÄ pozicija', + id : 'Id', // MISSING + langDir : 'Teksto kryptis', + langDirLTR : 'IÅ¡ kairÄs į deÅ¡inÄ (LTR)', + langDirRTL : 'IÅ¡ deÅ¡inÄs į kairÄ (RTL)', + acccessKey : 'Prieigos raktas', + name : 'Vardas', + langCode : 'Teksto kryptis', + tabIndex : 'Tabuliavimo indeksas', + advisoryTitle : 'KonsultacinÄ antraÅ¡tÄ', + advisoryContentType : 'Konsultacinio turinio tipas', + cssClasses : 'Stilių lentelÄs klasÄs', + charset : 'Susietų iÅ¡teklių simbolių lentelÄ', + styles : 'Stilius', + rel : 'Relationship', // MISSING + selectAnchor : 'Pasirinkite žymÄ', + anchorName : 'Pagal žymÄs vardÄ ', + anchorId : 'Pagal žymÄs Id', + emailAddress : 'El.paÅ¡to adresas', + emailSubject : 'ŽinutÄs tema', + emailBody : 'ŽinutÄs turinys', + noAnchors : '(Å iame dokumente žymių nÄra)', + noUrl : 'PraÅ¡ome įvesti nuorodos URL', + noEmail : 'PraÅ¡ome įvesti el.paÅ¡to adresÄ ' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Ä®terpti/modifikuoti žymÄ', + menu : 'ŽymÄs savybÄs', + title : 'ŽymÄs savybÄs', + name : 'ŽymÄs vardas', + errorName : 'PraÅ¡ome įvesti žymÄs vardÄ ', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Surasti ir pakeisti', + find : 'Rasti', + replace : 'Pakeisti', + findWhat : 'Surasti tekstÄ :', + replaceWith : 'Pakeisti tekstu:', + notFoundMsg : 'Nurodytas tekstas nerastas.', + matchCase : 'Skirti didžiÄ sias ir maÅ¾Ä sias raides', + matchWord : 'Atitikti pilnÄ Å¾odį', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Pakeisti viskÄ ', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'LentelÄ', + title : 'LentelÄs savybÄs', + menu : 'LentelÄs savybÄs', + deleteTable : 'Å alinti lentelÄ', + rows : 'EilutÄs', + columns : 'Stulpeliai', + border : 'RÄmelio dydis', + widthPx : 'taÅ¡kais', + widthPc : 'procentais', + widthUnit : 'width unit', // MISSING + cellSpace : 'Tarpas tarp langelių', + cellPad : 'Trapas nuo langelio rÄmo iki teksto', + caption : 'AntraÅ¡tÄ', + summary : 'Santrauka', + headers : 'AntraÅ¡tÄs', + headersNone : 'NÄra', + headersColumn : 'Pirmas stulpelis', + headersRow : 'Pirma eilutÄ', + headersBoth : 'Abu', + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Langelis', + insertBefore : 'Ä®terpti langelį prieÅ¡', + insertAfter : 'Ä®terpti langelį po', + deleteCell : 'Å alinti langelius', + merge : 'Sujungti langelius', + mergeRight : 'Sujungti su deÅ¡ine', + mergeDown : 'Sujungti su apaÄia', + splitHorizontal : 'Skaidyti langelį horizontaliai', + splitVertical : 'Skaidyti langelį vertikaliai', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'EilutÄ', + insertBefore : 'Ä®terpti eilutÄ prieÅ¡', + insertAfter : 'Ä®terpti eilutÄ po', + deleteRow : 'Å alinti eilutes' + }, + + column : + { + menu : 'Stulpelis', + insertBefore : 'Ä®terpti stulpelį prieÅ¡', + insertAfter : 'Ä®terpti stulpelį po', + deleteColumn : 'Å alinti stulpelius' + } + }, + + // Button Dialog. + button : + { + title : 'Mygtuko savybÄs', + text : 'Tekstas (ReikÅ¡mÄ)', + type : 'Tipas', + typeBtn : 'Mygtukas', + typeSbm : 'Siųsti', + typeRst : 'IÅ¡valyti' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Žymimojo langelio savybÄs', + radioTitle : 'Žymimosios akutÄs savybÄs', + value : 'ReikÅ¡mÄ', + selected : 'PažymÄtas' + }, + + // Form Dialog. + form : + { + title : 'Formos savybÄs', + menu : 'Formos savybÄs', + action : 'Veiksmas', + method : 'Metodas', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Atrankos lauko savybÄs', + selectInfo : 'Informacija', + opAvail : 'Galimos parinktys', + value : 'ReikÅ¡mÄ', + size : 'Dydis', + lines : 'eiluÄių', + chkMulti : 'Leisti daugeriopÄ atrankÄ ', + opText : 'Tekstas', + opValue : 'ReikÅ¡mÄ', + btnAdd : 'Ä®traukti', + btnModify : 'Modifikuoti', + btnUp : 'AukÅ¡tyn', + btnDown : 'Žemyn', + btnSetValue : 'Laikyti pažymÄta reikÅ¡me', + btnDelete : 'Trinti' + }, + + // Textarea Dialog. + textarea : + { + title : 'Teksto srities savybÄs', + cols : 'Ilgis', + rows : 'Plotis' + }, + + // Text Field Dialog. + textfield : + { + title : 'Teksto lauko savybÄs', + name : 'Vardas', + value : 'ReikÅ¡mÄ', + charWidth : 'Ilgis simboliais', + maxChars : 'Maksimalus simbolių skaiÄius', + type : 'Tipas', + typeText : 'Tekstas', + typePass : 'Slaptažodis' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Nerodomo lauko savybÄs', + name : 'Vardas', + value : 'ReikÅ¡mÄ' + }, + + // Image Dialog. + image : + { + title : 'Vaizdo savybÄs', + titleButton : 'Vaizdinio mygtuko savybÄs', + menu : 'Vaizdo savybÄs', + infoTab : 'Vaizdo informacija', + btnUpload : 'Siųsti į serverį', + upload : 'Nusiųsti', + alt : 'Alternatyvus Tekstas', + lockRatio : 'IÅ¡laikyti proporcijÄ ', + resetSize : 'Atstatyti dydį', + border : 'RÄmelis', + hSpace : 'Hor.ErdvÄ', + vSpace : 'Vert.ErdvÄ', + alertUrl : 'PraÅ¡ome įvesti vaizdo URL', + linkTab : 'Nuoroda', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash savybÄs', + propertiesTab : 'Properties', // MISSING + title : 'Flash savybÄs', + chkPlay : 'Automatinis paleidimas', + chkLoop : 'Ciklas', + chkMenu : 'Leisti Flash meniu', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Mastelis', + scaleAll : 'Rodyti visÄ ', + scaleNoBorder : 'Be rÄmelio', + scaleFit : 'Tikslus atitikimas', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'AbsoliuÄiÄ apaÄiÄ ', + alignAbsMiddle : 'Absoliutų vidurį', + alignBaseline : 'ApatinÄ linijÄ ', + alignTextTop : 'Teksto virÅ¡Å«nÄ', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Fono spalva', + hSpace : 'Hor.ErdvÄ', + vSpace : 'Vert.ErdvÄ', + validateSrc : 'PraÅ¡ome įvesti nuorodos URL', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'RaÅ¡ybos tikrinimas', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Žodyne nerastas', + changeTo : 'Pakeisti į', + btnIgnore : 'Ignoruoti', + btnIgnoreAll : 'Ignoruoti visus', + btnReplace : 'Pakeisti', + btnReplaceAll : 'Pakeisti visus', + btnUndo : 'AtÅ¡aukti', + noSuggestions : '- NÄra pasiÅ«lymų -', + progress : 'Vyksta raÅ¡ybos tikrinimas...', + noMispell : 'RaÅ¡ybos tikrinimas baigtas: Nerasta raÅ¡ybos klaidų', + noChanges : 'RaÅ¡ybos tikrinimas baigtas: NÄra pakeistų žodžių', + oneChange : 'RaÅ¡ybos tikrinimas baigtas: Vienas žodis pakeistas', + manyChanges : 'RaÅ¡ybos tikrinimas baigtas: Pakeista %1 žodžių', + ieSpellDownload : 'RaÅ¡ybos tikrinimas neinstaliuotas. Ar JÅ«s norite jį dabar atsisiųsti?' + }, + + smiley : + { + toolbar : 'Veideliai', + title : 'Ä®terpti veidelį', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Numeruotas sÄ raÅ¡as', + bulletedlist : 'Suženklintas sÄ raÅ¡as', + indent : 'Padidinti įtraukÄ ', + outdent : 'Sumažinti įtraukÄ ', + + justify : + { + left : 'Lygiuoti kairÄ', + center : 'Centruoti', + right : 'Lygiuoti deÅ¡inÄ', + block : 'Lygiuoti abi puses' + }, + + blockquote : 'Citata', + + clipboard : + { + title : 'Ä®dÄti', + cutError : 'JÅ«sų narÅ¡yklÄs saugumo nustatymai neleidžia redaktoriui automatiÅ¡kai įvykdyti iÅ¡kirpimo operacijų. Tam praÅ¡ome naudoti klaviatÅ«rÄ (Ctrl/Cmd+X).', + copyError : 'JÅ«sų narÅ¡yklÄs saugumo nustatymai neleidžia redaktoriui automatiÅ¡kai įvykdyti kopijavimo operacijų. Tam praÅ¡ome naudoti klaviatÅ«rÄ (Ctrl/Cmd+C).', + pasteMsg : 'Žemiau esanÄiame įvedimo lauke įdÄkite tekstÄ , naudodami klaviatÅ«rÄ (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtukÄ <STRONG>OK</STRONG>.', + securityMsg : 'DÄl jÅ«sų narÅ¡yklÄs saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartÄ Ä¯ šį langÄ .', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Ä®dÄti iÅ¡ Word', + title : 'Ä®dÄti iÅ¡ Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Ä®dÄti kaip grynÄ tekstÄ ', + title : 'Ä®dÄti kaip grynÄ tekstÄ ' + }, + + templates : + { + button : 'Å ablonai', + title : 'Turinio Å¡ablonai', + options : 'Template Options', // MISSING + insertOption : 'Pakeisti dabartinį turinį pasirinktu Å¡ablonu', + selectPromptMsg : 'Pasirinkite norimÄ Å¡ablonÄ <br>(<b>DÄmesio!</b> esamas turinys bus prarastas):', + emptyListMsg : '(Å ablonų sÄ raÅ¡as tuÅ¡Äias)' + }, + + showBlocks : 'Rodyti blokus', + + stylesCombo : + { + label : 'Stilius', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Å rifto formatas', + panelTitle : 'Å rifto formatas', + + tag_p : 'Normalus', + tag_pre : 'Formuotas', + tag_address : 'Kreipinio', + tag_h1 : 'AntraÅ¡tinis 1', + tag_h2 : 'AntraÅ¡tinis 2', + tag_h3 : 'AntraÅ¡tinis 3', + tag_h4 : 'AntraÅ¡tinis 4', + tag_h5 : 'AntraÅ¡tinis 5', + tag_h6 : 'AntraÅ¡tinis 6', + tag_div : 'Normal (DIV)' // MISSING + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Å riftas', + voiceLabel : 'Font', // MISSING + panelTitle : 'Å riftas' + }, + + fontSize : + { + label : 'Å rifto dydis', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Å rifto dydis' + }, + + colorButton : + { + textColorTitle : 'Teksto spalva', + bgColorTitle : 'Fono spalva', + panelTitle : 'Colors', // MISSING + auto : 'Automatinis', + more : 'Daugiau spalvų...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Dokumento savybÄs', + title : 'Dokumento savybÄs', + design : 'Design', // MISSING + meta : 'Meta duomenys', + chooseColor : 'Choose', // MISSING + other : '<kitas>', + docTitle : 'Puslapio antraÅ¡tÄ', + charset : 'Simbolių kodavimo lentelÄ', + charsetOther : 'Kita simbolių kodavimo lentelÄ', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'CentrinÄs Europos', + charsetCT : 'TradicinÄs kinų (Big5)', + charsetCR : 'Kirilica', + charsetGR : 'Graikų', + charsetJP : 'Japonų', + charsetKR : 'KorÄjieÄių', + charsetTR : 'Turkų', + charsetUN : 'Unikodas (UTF-8)', + charsetWE : 'Vakarų Europos', + docType : 'Dokumento tipo antraÅ¡tÄ', + docTypeOther : 'Kita dokumento tipo antraÅ¡tÄ', + xhtmlDec : 'Ä®traukti XHTML deklaracijas', + bgColor : 'Fono spalva', + bgImage : 'Fono paveikslÄlio nuoroda (URL)', + bgFixed : 'Neslenkantis fonas', + txtColor : 'Teksto spalva', + margin : 'Puslapio kraÅ¡tinÄs', + marginTop : 'VirÅ¡uje', + marginLeft : 'KairÄje', + marginRight : 'DeÅ¡inÄje', + marginBottom : 'ApaÄioje', + metaKeywords : 'Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)', + metaDescription : 'Dokumento apibÅ«dinimas', + metaAuthor : 'Autorius', + metaCopyright : 'AutorinÄs teisÄs', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/lv.js b/_source/lang/lv.js new file mode 100644 index 0000000..9d99bb6 --- /dev/null +++ b/_source/lang/lv.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Latvian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['lv'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'HTML kods', + newPage : 'Jauna lapa', + save : 'SaglabÄt', + preview : 'PÄrskatÄ«t', + cut : 'Izgriezt', + copy : 'KopÄt', + paste : 'Ievietot', + print : 'DrukÄt', + underline : 'ApakÅ¡svÄ«tra', + bold : 'Treknu Å¡riftu', + italic : 'SlÄ«prakstÄ', + selectAll : 'IezÄ«mÄt visu', + removeFormat : 'NoÅemt stilus', + strike : 'PÄrsvÄ«trots', + subscript : 'ZemrakstÄ', + superscript : 'AugÅ¡rakstÄ', + horizontalrule : 'Ievietot horizontÄlu AtdalÄ«tÄjsvÄ«tru', + pagebreak : 'Ievietot lapas pÄrtraukumu', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'NoÅemt hipersaiti', + undo : 'Atcelt', + redo : 'AtkÄrtot', + + // Common messages and labels. + common : + { + browseServer : 'SkatÄ«t servera saturu', + url : 'URL', + protocol : 'Protokols', + upload : 'AugÅ¡upielÄdÄt', + uploadSubmit : 'NosÅ«tÄ«t serverim', + image : 'AttÄls', + flash : 'Flash', + form : 'Forma', + checkbox : 'AtzÄ«mÄÅ¡anas kastÄ«te', + radio : 'IzvÄles poga', + textField : 'Teksta rinda', + textarea : 'Teksta laukums', + hiddenField : 'PaslÄpta teksta rinda', + button : 'Poga', + select : 'IezÄ«mÄÅ¡anas lauks', + imageButton : 'AttÄlpoga', + notSet : '<nav iestatÄ«ts>', + id : 'Id', + name : 'Nosaukums', + langDir : 'Valodas lasÄ«Å¡anas virziens', + langDirLtr : 'No kreisÄs uz labo (LTR)', + langDirRtl : 'No labÄs uz kreiso (RTL)', + langCode : 'Valodas kods', + longDescr : 'Gara apraksta Hipersaite', + cssClass : 'Stilu saraksta klases', + advisoryTitle : 'KonsultatÄ«vs virsraksts', + cssStyle : 'Stils', + ok : 'DarÄ«ts!', + cancel : 'Atcelt', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'IzvÄrstais', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Platums', + height : 'Augstums', + align : 'NolÄ«dzinÄt', + alignLeft : 'Pa kreisi', + alignRight : 'Pa labi', + alignCenter : 'CentrÄti', + alignTop : 'AugÅ¡Ä', + alignMiddle : 'VertikÄli centrÄts', + alignBottom : 'ApakÅ¡Ä', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Ievietot speciÄlo simbolu', + title : 'Ievietot Ä«paÅ¡u simbolu', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Ievietot/Labot hipersaiti', + other : '<cits>', + menu : 'Labot hipersaiti', + title : 'Hipersaite', + info : 'Hipersaites informÄcija', + target : 'MÄrÄ·is', + upload : 'AugÅ¡upielÄdÄt', + advanced : 'IzvÄrstais', + type : 'Hipersaites tips', + toUrl : 'URL', // MISSING + toAnchor : 'IezÄ«me Å¡ajÄ lapÄ', + toEmail : 'E-pasts', + targetFrame : '<ietvars>', + targetPopup : '<uznirstoÅ¡Ä logÄ>', + targetFrameName : 'MÄrÄ·a ietvara nosaukums', + targetPopupName : 'UznirstoÅ¡Ä loga nosaukums', + popupFeatures : 'UznirstoÅ¡Ä loga nosaukums Ä«paÅ¡Ä«bas', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Statusa josla', + popupLocationBar: 'AtraÅ¡anÄs vietas josla', + popupToolbar : 'RÄ«ku josla', + popupMenuBar : 'IzvÄlnes josla', + popupFullScreen : 'PilnÄ ekrÄnÄ (IE)', + popupScrollBars : 'Ritjoslas', + popupDependent : 'AtkarÄ«gs (Netscape)', + popupLeft : 'KreisÄ koordinÄte', + popupTop : 'AugÅ¡ÄjÄ koordinÄte', + id : 'Id', // MISSING + langDir : 'Valodas lasÄ«Å¡anas virziens', + langDirLTR : 'No kreisÄs uz labo (LTR)', + langDirRTL : 'No labÄs uz kreiso (RTL)', + acccessKey : 'Pieejas kods', + name : 'Nosaukums', + langCode : 'Valodas lasÄ«Å¡anas virziens', + tabIndex : 'CiļÅu indekss', + advisoryTitle : 'KonsultatÄ«vs virsraksts', + advisoryContentType : 'KonsultatÄ«vs satura tips', + cssClasses : 'Stilu saraksta klases', + charset : 'PievienotÄ resursa kodu tabula', + styles : 'Stils', + rel : 'Relationship', // MISSING + selectAnchor : 'IzvÄlÄties iezÄ«mi', + anchorName : 'PÄc iezÄ«mes nosaukuma', + anchorId : 'PÄc elementa ID', + emailAddress : 'E-pasta adrese', + emailSubject : 'ZiÅas tÄma', + emailBody : 'ZiÅas saturs', + noAnchors : '(Å ajÄ dokumentÄ nav iezÄ«mju)', + noUrl : 'LÅ«dzu norÄdi hipersaiti', + noEmail : 'LÅ«dzu norÄdi e-pasta adresi' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Ievietot/Labot iezÄ«mi', + menu : 'IezÄ«mes Ä«paÅ¡Ä«bas', + title : 'IezÄ«mes Ä«paÅ¡Ä«bas', + name : 'IezÄ«mes nosaukums', + errorName : 'LÅ«dzu norÄdiet iezÄ«mes nosaukumu', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'MeklÄt', + replace : 'NomainÄ«t', + findWhat : 'MeklÄt:', + replaceWith : 'NomainÄ«t uz:', + notFoundMsg : 'NorÄdÄ«tÄ frÄze netika atrasta.', + matchCase : 'ReÄ£istrjÅ«tÄ«gs', + matchWord : 'JÄsakrÄ«t pilnÄ«bÄ', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Aizvietot visu', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tabula', + title : 'Tabulas Ä«paÅ¡Ä«bas', + menu : 'Tabulas Ä«paÅ¡Ä«bas', + deleteTable : 'DzÄst tabulu', + rows : 'Rindas', + columns : 'Kolonnas', + border : 'RÄmja izmÄrs', + widthPx : 'pikseļos', + widthPc : 'procentuÄli', + widthUnit : 'width unit', // MISSING + cellSpace : 'RÅ«tiÅu atstatums', + cellPad : 'RÅ«tiÅu nobÄ«de', + caption : 'LeÄ£enda', + summary : 'AnotÄcija', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Å Å«na', + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'DzÄst rÅ«tiÅas', + merge : 'Apvienot rÅ«tiÅas', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Rinda', + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'DzÄst rindas' + }, + + column : + { + menu : 'Kolonna', + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'DzÄst kolonnas' + } + }, + + // Button Dialog. + button : + { + title : 'Pogas Ä«paÅ¡Ä«bas', + text : 'Teksts (vÄrtÄ«ba)', + type : 'Tips', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'AtzÄ«mÄÅ¡anas kastÄ«tes Ä«paÅ¡Ä«bas', + radioTitle : 'IzvÄles poga Ä«paÅ¡Ä«bas', + value : 'VÄrtÄ«ba', + selected : 'IezÄ«mÄts' + }, + + // Form Dialog. + form : + { + title : 'Formas Ä«paÅ¡Ä«bas', + menu : 'Formas Ä«paÅ¡Ä«bas', + action : 'DarbÄ«ba', + method : 'Metode', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'IezÄ«mÄÅ¡anas lauka Ä«paÅ¡Ä«bas', + selectInfo : 'InformÄcija', + opAvail : 'PieejamÄs iespÄjas', + value : 'VÄrtÄ«ba', + size : 'IzmÄrs', + lines : 'rindas', + chkMulti : 'Atļaut vairÄkus iezÄ«mÄjumus', + opText : 'Teksts', + opValue : 'VÄrtÄ«ba', + btnAdd : 'Pievienot', + btnModify : 'Veikt izmaiÅas', + btnUp : 'AugÅ¡up', + btnDown : 'Lejup', + btnSetValue : 'Noteikt kÄ iezÄ«mÄto vÄrtÄ«bu', + btnDelete : 'DzÄst' + }, + + // Textarea Dialog. + textarea : + { + title : 'Teksta laukuma Ä«paÅ¡Ä«bas', + cols : 'Kolonnas', + rows : 'Rindas' + }, + + // Text Field Dialog. + textfield : + { + title : 'Teksta rindas Ä«paÅ¡Ä«bas', + name : 'Nosaukums', + value : 'VÄrtÄ«ba', + charWidth : 'Simbolu platums', + maxChars : 'Simbolu maksimÄlais daudzums', + type : 'Tips', + typeText : 'Teksts', + typePass : 'Parole' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'PaslÄptÄs teksta rindas Ä«paÅ¡Ä«bas', + name : 'Nosaukums', + value : 'VÄrtÄ«ba' + }, + + // Image Dialog. + image : + { + title : 'AttÄla Ä«paÅ¡Ä«bas', + titleButton : 'AttÄlpogas Ä«paÅ¡Ä«bas', + menu : 'AttÄla Ä«paÅ¡Ä«bas', + infoTab : 'InformÄcija par attÄlu', + btnUpload : 'NosÅ«tÄ«t serverim', + upload : 'AugÅ¡upielÄdÄt', + alt : 'AlternatÄ«vais teksts', + lockRatio : 'NemainÄ«ga Augstuma/Platuma attiecÄ«ba', + resetSize : 'Atjaunot sÄkotnÄjo izmÄru', + border : 'RÄmis', + hSpace : 'HorizontÄlÄ telpa', + vSpace : 'VertikÄlÄ telpa', + alertUrl : 'LÅ«dzu norÄdÄ«t attÄla hipersaiti', + linkTab : 'Hipersaite', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash Ä«paÅ¡Ä«bas', + propertiesTab : 'Properties', // MISSING + title : 'Flash Ä«paÅ¡Ä«bas', + chkPlay : 'AutomÄtiska atskaÅoÅ¡ana', + chkLoop : 'NepÄrtraukti', + chkMenu : 'Atļaut Flash izvÄlni', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'MainÄ«t izmÄru', + scaleAll : 'RÄdÄ«t visu', + scaleNoBorder : 'Bez rÄmja', + scaleFit : 'PrecÄ«zs izmÄrs', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'AbsolÅ«ti apakÅ¡Ä', + alignAbsMiddle : 'AbsolÅ«ti vertikÄli centrÄts', + alignBaseline : 'PamatrindÄ', + alignTextTop : 'Teksta augÅ¡Ä', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Fona krÄsa', + hSpace : 'HorizontÄlÄ telpa', + vSpace : 'VertikÄlÄ telpa', + validateSrc : 'LÅ«dzu norÄdi hipersaiti', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'PareizrakstÄ«bas pÄrbaude', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Netika atrasts vÄrdnÄ«cÄ', + changeTo : 'NomainÄ«t uz', + btnIgnore : 'IgnorÄt', + btnIgnoreAll : 'IgnorÄt visu', + btnReplace : 'Aizvietot', + btnReplaceAll : 'Aizvietot visu', + btnUndo : 'Atcelt', + noSuggestions : '- Nav ieteikumu -', + progress : 'Notiek pareizrakstÄ«bas pÄrbaude...', + noMispell : 'PareizrakstÄ«bas pÄrbaude pabeigta: kļūdas netika atrastas', + noChanges : 'PareizrakstÄ«bas pÄrbaude pabeigta: nekas netika labots', + oneChange : 'PareizrakstÄ«bas pÄrbaude pabeigta: 1 vÄrds izmainÄ«ts', + manyChanges : 'PareizrakstÄ«bas pÄrbaude pabeigta: %1 vÄrdi tika mainÄ«ti', + ieSpellDownload : 'PareizrakstÄ«bas pÄrbaudÄ«tÄjs nav pievienots. Vai vÄlaties to lejupielÄdÄt tagad?' + }, + + smiley : + { + toolbar : 'SmaidiÅi', + title : 'Ievietot smaidiÅu', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'NumurÄts saraksts', + bulletedlist : 'Izcelts saraksts', + indent : 'PalielinÄt atkÄpi', + outdent : 'SamazinÄt atkÄpi', + + justify : + { + left : 'IzlÄ«dzinÄt pa kreisi', + center : 'IzlÄ«dzinÄt pret centru', + right : 'IzlÄ«dzinÄt pa labi', + block : 'IzlÄ«dzinÄt malas' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'Ievietot', + cutError : 'JÅ«su pÄrlÅ«kprogrammas droÅ¡Ä«bas iestatÄ«jumi nepieļauj editoram automÄtiski veikt izgrieÅ¡anas darbÄ«bu. LÅ«dzu, izmantojiet (Ctrl/Cmd+X, lai veiktu Å¡o darbÄ«bu.', + copyError : 'JÅ«su pÄrlÅ«kprogrammas droÅ¡Ä«bas iestatÄ«jumi nepieļauj editoram automÄtiski veikt kopÄÅ¡anas darbÄ«bu. LÅ«dzu, izmantojiet (Ctrl/Cmd+C), lai veiktu Å¡o darbÄ«bu.', + pasteMsg : 'LÅ«dzu, ievietojiet tekstu Å¡ajÄ laukumÄ, izmantojot klaviatÅ«ru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>DarÄ«ts!</STRONG>.', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Ievietot no Worda', + title : 'Ievietot no Worda', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Ievietot kÄ vienkÄrÅ¡u tekstu', + title : 'Ievietot kÄ vienkÄrÅ¡u tekstu' + }, + + templates : + { + button : 'Sagataves', + title : 'Satura sagataves', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'LÅ«dzu, norÄdiet sagatavi, ko atvÄrt editorÄ<br>(patreizÄjie dati tiks zaudÄti):', + emptyListMsg : '(Nav norÄdÄ«tas sagataves)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'Stils', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'FormÄts', + panelTitle : 'FormÄts', + + tag_p : 'NormÄls teksts', + tag_pre : 'FormatÄts teksts', + tag_address : 'Adrese', + tag_h1 : 'Virsraksts 1', + tag_h2 : 'Virsraksts 2', + tag_h3 : 'Virsraksts 3', + tag_h4 : 'Virsraksts 4', + tag_h5 : 'Virsraksts 5', + tag_h6 : 'Virsraksts 6', + tag_div : 'Rindkopa (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Å rifts', + voiceLabel : 'Font', // MISSING + panelTitle : 'Å rifts' + }, + + fontSize : + { + label : 'IzmÄrs', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'IzmÄrs' + }, + + colorButton : + { + textColorTitle : 'Teksta krÄsa', + bgColorTitle : 'Fona krÄsa', + panelTitle : 'Colors', // MISSING + auto : 'AutomÄtiska', + more : 'PlaÅ¡Äka palete...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Dokumenta Ä«paÅ¡Ä«bas', + title : 'Dokumenta Ä«paÅ¡Ä«bas', + design : 'Design', // MISSING + meta : 'META dati', + chooseColor : 'Choose', // MISSING + other : '<cits>', + docTitle : 'Dokumenta virsraksts <Title>', + charset : 'Simbolu kodÄjums', + charsetOther : 'Cits simbolu kodÄjums', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Dokumenta tips', + docTypeOther : 'Cits dokumenta tips', + xhtmlDec : 'Ietvert XHTML deklarÄcijas', + bgColor : 'Fona krÄsa', + bgImage : 'Fona attÄla hipersaite', + bgFixed : 'Fona attÄls ir fiksÄts', + txtColor : 'Teksta krÄsa', + margin : 'Lapas robežas', + marginTop : 'AugÅ¡Ä', + marginLeft : 'Pa kreisi', + marginRight : 'Pa labi', + marginBottom : 'ApakÅ¡Ä', + metaKeywords : 'Dokumentu aprakstoÅ¡i atslÄgvÄrdi (atdalÄ«ti ar komatu)', + metaDescription : 'Dokumenta apraksts', + metaAuthor : 'Autors', + metaCopyright : 'AutortiesÄ«bas', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/mn.js b/_source/lang/mn.js new file mode 100644 index 0000000..a3097e0 --- /dev/null +++ b/_source/lang/mn.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Mongolian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['mn'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Ðод', + newPage : 'Ð¨Ð¸Ð½Ñ Ñ ÑÑдаÑ', + save : 'Ð¥Ð°Ð´Ð³Ð°Ð»Ð°Ñ ', + preview : 'УÑидÑлан Ñ Ð°ÑÐ°Ñ ', + cut : 'ХайÑÐ»Ð°Ñ ', + copy : 'Ð¥ÑÑÐ»Ð°Ñ ', + paste : 'ÐÑÑÐ»Ð³Ð°Ñ ', + print : 'Ð¥ÑвлÑÑ ', + underline : 'ÐоогÑÑÑ Ð½Ñ Ð·ÑÑааÑÑай Ð±Ð¾Ð»Ð³Ð¾Ñ ', + bold : 'Тод бүдүүн', + italic : 'ÐалÑÑ', + selectAll : 'Ðүгдийг Ð½Ñ ÑÐ¾Ð½Ð³Ð¾Ñ ', + removeFormat : 'ФоÑÐ¼Ð°Ñ Ð°Ð²Ñ Ñ Ð°ÑÑ ', + strike : 'ÐÑндÑÑÑ Ð½Ñ Ð·ÑÑааÑÑай Ð±Ð¾Ð»Ð³Ð¾Ñ ', + subscript : 'СÑÑÑÑ Ð±Ð¾Ð»Ð³Ð¾Ñ ', + superscript : 'ÐÑÑÑг Ð±Ð¾Ð»Ð³Ð¾Ñ ', + horizontalrule : 'Хөндлөн зÑÑÐ°Ð°Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + pagebreak : 'Ð¥ÑÑÐ´Ð°Ñ ÑÑÑгааÑÐ»Ð°Ð³Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Ðинк Ð°Ð²Ñ Ñ Ð°ÑÑ ', + undo : 'Ð¥Ò¯Ñингүй Ð±Ð¾Ð»Ð³Ð¾Ñ ', + redo : 'Ó¨Ð¼Ð½Ó©Ñ Ò¯Ð¹Ð»Ð´Ð»ÑÑ ÑÑÑгÑÑÑ ', + + // Common messages and labels. + common : + { + browseServer : 'СеÑÐ²ÐµÑ Ñ Ð°ÑÑÑÐ»Ð°Ñ ', + url : 'URL', + protocol : 'ÐÑоÑокол', + upload : 'Ð¥ÑÑÐ»Ð°Ñ ', + uploadSubmit : 'Үүнийг ÑеÑвÑÑÑÒ¯Ò¯ илгÑÑ', + image : 'ÐÑÑаг', + flash : 'ФлаÑ', + form : 'ФоÑм', + checkbox : 'ЧекбокÑ', + radio : 'Радио ÑовÑ', + textField : 'Ð¢ÐµÑ Ñ ÑалбаÑ', + textarea : 'Ð¢ÐµÑ Ñ Ð¾ÑÑин', + hiddenField : 'ÐÑÑÑ ÑалбаÑ', + button : 'ТовÑ', + select : 'Ð¡Ð¾Ð½Ð³Ð¾Ð³Ñ ÑалбаÑ', + imageButton : 'ÐÑÑагÑай ÑовÑ', + notSet : '<ÐÐ½Ð¾Ð¾Ñ Ð³Ò¯Ð¹>', + id : 'Id', + name : 'ÐÑÑ', + langDir : 'Ð¥Ñлний ÑиглÑл', + langDirLtr : 'ÐүүнÑÑÑ Ð±Ð°ÑÑÑн (LTR)', + langDirRtl : 'ÐаÑÑÑÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ (RTL)', + langCode : 'Ð¥Ñлний код', + longDescr : 'URL-Ñн ÑайлбаÑ', + cssClass : 'Stylesheet клаÑÑÑÑд', + advisoryTitle : 'ÐÓ©Ð²Ð»Ó©Ð»Ð´Ó©Ñ Ð³Ð°ÑÑиг', + cssStyle : 'ÐагваÑ', + ok : 'OK', + cancel : 'ÐÐ¾Ð»Ð¸Ñ ', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'ÐÑмÑлÑ', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Ó¨Ñгөн', + height : 'ӨндөÑ', + align : 'ÐгнÑÑ', + alignLeft : 'Ðүүн', + alignRight : 'ÐаÑÑÑн', + alignCenter : 'Төвд', + alignTop : 'ÐÑÑд Ñалд', + alignMiddle : 'ÐÑнд Ñалд', + alignBottom : 'Ðоод Ñалд', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'ÐнÑгой ÑÑмдÑÐ³Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + title : 'ÐнÑгой ÑÑмдÑÐ³Ñ ÑÐ¾Ð½Ð³Ð¾Ñ ', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Ðинк ÐÑÑÑÐ»Ð°Ñ /ÐаÑваÑÐ»Ð°Ñ ', + other : '<other>', // MISSING + menu : 'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð·Ð°ÑваÑÐ»Ð°Ñ ', + title : 'Ðинк', + info : 'Ðинкийн мÑдÑÑлÑл', + target : 'ÐайÑлал', + upload : 'Ð¥ÑÑÐ»Ð°Ñ ', + advanced : 'ÐÑмÑлÑ', + type : 'Ðинкийн ÑÓ©Ñөл', + toUrl : 'URL', // MISSING + toAnchor : 'ÐÐ½Ñ Ñ ÑÑдаÑÐ°Ð½Ð´Ð°Ñ Ñ Ð¾Ð»Ð±Ð¾Ð¾Ñ', + toEmail : 'E-Mail', + targetFrame : '<ÐгÑÑÐ»Ð°Ñ Ñ Ò¯ÑÑÑ>', + targetPopup : '<popup ÑÐ¾Ð½Ñ >', + targetFrameName : 'ÐÑÐ¸Ñ ÑÑемÑн нÑÑ', + targetPopupName : 'Popup ÑÐ¾Ð½Ñ Ð½Ñ Ð½ÑÑ', + popupFeatures : 'Popup ÑÐ¾Ð½Ñ Ð½Ñ Ð¾Ð½Ñлог', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'СÑаÑÑÑ Ñ ÑÑÑг', + popupLocationBar: 'Location Ñ ÑÑÑг', + popupToolbar : 'ÐÐ°Ð³Ð°Ð¶Ð½Ñ Ñ ÑÑÑг', + popupMenuBar : 'MeÐ½Ñ Ñ ÑÑÑг', + popupFullScreen : 'Ð¦Ð¾Ð½Ñ Ð´Ò¯Ò¯ÑгÑÑ (IE)', + popupScrollBars : 'СкÑол Ñ ÑÑÑгүүд', + popupDependent : 'ХамааÑай (Netscape)', + popupLeft : 'Ðүүн байÑлал', + popupTop : 'ÐÑÑд байÑлал', + id : 'Id', // MISSING + langDir : 'Ð¥Ñлний ÑиглÑл', + langDirLTR : 'ÐүүнÑÑÑ Ð±Ð°ÑÑÑн (LTR)', + langDirRTL : 'ÐаÑÑÑÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ (RTL)', + acccessKey : 'Ð¥Ð¾Ð»Ð±Ð¾Ñ ÑÒ¯Ð»Ñ Ò¯Ò¯Ñ', + name : 'ÐÑÑ', + langCode : 'Ð¥Ñлний ÑиглÑл', + tabIndex : 'Tab индекÑ', + advisoryTitle : 'ÐÓ©Ð²Ð»Ó©Ð»Ð´Ó©Ñ Ð³Ð°ÑÑиг', + advisoryContentType : 'ÐÓ©Ð²Ð»Ó©Ð»Ð´Ó©Ñ ÑÓ©Ñлийн агÑÑлга', + cssClasses : 'Stylesheet клаÑÑÑÑд', + charset : 'ТÑмдÑÐ³Ñ Ð¾Ð½Ð¾Ð¾Ñ Ð½Ó©Ó©Ñөд Ñ Ð¾Ð»Ð±Ð¾Ð³Ð´Ñон', + styles : 'ÐагваÑ', + rel : 'Relationship', // MISSING + selectAnchor : 'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÑÐ¾Ð½Ð³Ð¾Ñ ', + anchorName : 'ХолбооÑÑн нÑÑÑÑÑ', + anchorId : 'ÐлемÑÐ½Ñ Id-гааÑ', + emailAddress : 'E-Mail ХаÑг', + emailSubject : 'Message гаÑÑиг', + emailBody : 'Message-ийн агÑÑлга', + noAnchors : '(ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñиг Ñ Ð¾Ð»Ð±Ð¾Ð¾Ñгүй байна)', + noUrl : 'Ðинк URL-ÑÑ ÑÓ©ÑÓ©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯', + noEmail : 'Ð-mail Ñ Ð°Ñгаа ÑÓ©ÑÓ©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÐÑÑÑÐ»Ð°Ñ /ÐаÑваÑÐ»Ð°Ñ ', + menu : 'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ñинж ÑанаÑ', + title : 'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ñинж ÑанаÑ', + name : 'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð½ÑÑ', + errorName : 'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÑÓ©Ñөл оÑÑÑлна ÑÑ', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Хай мөн ÐаÑж биÑ', + find : 'Ð¥Ð°Ð¹Ñ ', + replace : 'Ð¡Ð¾Ð»Ð¸Ñ ', + findWhat : 'Ð¥Ð°Ð¹Ñ Ò¯Ð³/Ò¯ÑÑг:', + replaceWith : 'Ð¡Ð¾Ð»Ð¸Ñ Ò¯Ð³:', + notFoundMsg : 'ХайÑан ÑекÑÑ Ð¾Ð»Ñонгүй.', + matchCase : 'ТÑнÑÑÑ Ñөлөв', + matchWord : 'ТÑнÑÑÑ Ð±Ò¯ÑÑн үг', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Ðүгдийг Ð½Ñ Ð¡Ð¾Ð»Ð¸Ñ ', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Ð¥Ò¯ÑнÑгÑ', + title : 'Ð¥Ò¯ÑнÑгÑ', + menu : 'Ð¥Ò¯ÑнÑгÑ', + deleteTable : 'Ð¥Ò¯ÑнÑÐ³Ñ ÑÑÑÐ³Ð°Ñ ', + rows : 'ÐÓ©Ñ', + columns : 'Ðагана', + border : 'Ð¥Ò¯ÑÑÑний Ñ ÑмжÑÑ', + widthPx : 'ÑÑг', + widthPc : 'Ñ ÑвÑ', + widthUnit : 'width unit', // MISSING + cellSpace : 'ÐÒ¯Ñ Ñ Ð¾Ð¾ÑондÑн зай (spacing)', + cellPad : 'ÐÒ¯Ñ Ð´Ð¾ÑоÑÐ»Ð¾Ñ (padding)', + caption : 'ТайлбаÑ', + summary : 'ТайлбаÑ', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'ÐÒ¯Ñ /зай', + insertBefore : 'ÐÒ¯Ñ /зай өмнө Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + insertAfter : 'ÐÒ¯Ñ /зай даÑаа Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + deleteCell : 'ÐÒ¯Ñ ÑÑÑÐ³Ð°Ñ ', + merge : 'ÐÒ¯Ñ Ð½ÑгÑÑÑ ', + mergeRight : 'ÐаÑÑÑн ÑÐ¸Ð¹Ñ Ð½ÑгÑгÑÑ ', + mergeDown : 'ÐÐ¾Ð¾Ñ Ð½ÑгÑгÑÑ ', + splitHorizontal : 'ÐÒ¯Ñ /зайг боÑÐ¾Ð¾Ð³Ð¾Ð¾Ñ Ð½Ñ ÑÑÑгааÑÐ»Ð°Ñ ', + splitVertical : 'ÐÒ¯Ñ /зайг Ñ Ó©Ð½Ð´Ð»Ó©Ð½Ð³Ó©Ó©Ñ Ð½Ñ ÑÑÑгааÑÐ»Ð°Ñ ', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'ÐÓ©Ñ', + insertBefore : 'ÐÓ©Ñ Ó©Ð¼Ð½Ó© Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + insertAfter : 'ÐÓ©Ñ Ð´Ð°Ñаа Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + deleteRow : 'ÐÓ©Ñ ÑÑÑÐ³Ð°Ñ ' + }, + + column : + { + menu : 'Ðагана', + insertBefore : 'Ðагана өмнө Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + insertAfter : 'Ðагана даÑаа Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + deleteColumn : 'Ðагана ÑÑÑÐ³Ð°Ñ ' + } + }, + + // Button Dialog. + button : + { + title : 'ТовÑÐ½Ñ Ñинж ÑанаÑ', + text : 'ТÑкÑÑ (УÑга)', + type : 'ТөÑөл', + typeBtn : 'ТовÑ', + typeSbm : 'Submit', + typeRst : 'ÐÐ¾Ð»Ð¸Ñ ' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ЧекбокÑÐ½Ñ Ñинж ÑанаÑ', + radioTitle : 'Радио ÑовÑÐ½Ñ Ñинж ÑанаÑ', + value : 'УÑга', + selected : 'СонгогдÑон' + }, + + // Form Dialog. + form : + { + title : 'ФоÑм Ñинж ÑанаÑ', + menu : 'ФоÑм Ñинж ÑанаÑ', + action : 'ҮйлдÑл', + method : 'ÐÑга', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Ð¡Ð¾Ð³Ð¾Ð³Ñ ÑалбаÑÑн Ñинж ÑанаÑ', + selectInfo : 'ÐÑдÑÑлÑл', + opAvail : 'ÐдвÑÑ ÑÑй ÑонголÑ', + value : 'УÑга', + size : 'Ð¥ÑмжÑÑ', + lines : 'ÐÓ©Ñ', + chkMulti : 'Ðлон ÑÐ¾Ð½Ð³Ð¾Ð»Ñ Ð·Ó©Ð²ÑÓ©Ó©ÑÓ©Ñ ', + opText : 'ТÑкÑÑ', + opValue : 'УÑга', + btnAdd : 'ÐÑмÑÑ ', + btnModify : 'Ó¨Ó©ÑÑÐ»Ó©Ñ ', + btnUp : 'ÐÑÑÑ', + btnDown : 'ÐооÑ', + btnSetValue : 'СонгогдÑан ÑÑга Ð¾Ð½Ð¾Ð¾Ñ ', + btnDelete : 'УÑÑÐ³Ð°Ñ ' + }, + + // Textarea Dialog. + textarea : + { + title : 'ТекÑÑ Ð¾ÑÑÐ½Ñ Ñинж ÑанаÑ', + cols : 'Ðагана', + rows : 'ÐÓ©Ñ' + }, + + // Text Field Dialog. + textfield : + { + title : 'ТекÑÑ ÑалбаÑÑн Ñинж ÑанаÑ', + name : 'ÐÑÑ', + value : 'УÑга', + charWidth : 'ТÑмдÑгÑÑн Ó©Ñгөн', + maxChars : 'Хамгийн Ð¸Ñ ÑÑмдÑгÑ', + type : 'ТөÑөл', + typeText : 'ТекÑÑ', + typePass : 'ÐÑÑÑ Ò¯Ð³' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ÐÑÑÑ ÑалбаÑÑн Ñинж ÑанаÑ', + name : 'ÐÑÑ', + value : 'УÑга' + }, + + // Image Dialog. + image : + { + title : 'ÐÑÑаг', + titleButton : 'ÐÑÑган ÑовÑÐ½Ñ Ñинж ÑанаÑ', + menu : 'ÐÑÑаг', + infoTab : 'ÐÑÑÐ°Ð³Ð½Ñ Ð¼ÑдÑÑлÑл', + btnUpload : 'Үүнийг ÑеÑвÑÑÑÒ¯Ò¯ илгÑÑ', + upload : 'Ð¥ÑÑÐ»Ð°Ñ ', + alt : 'Ð¢Ð°Ð¹Ð»Ð±Ð°Ñ ÑекÑÑ', + lockRatio : 'Радио ÑÒ¯Ð³Ð¶Ð¸Ñ ', + resetSize : 'Ñ ÑмжÑÑ Ð´Ð°Ñ Ð¸Ð½ Ð¾Ð½Ð¾Ð¾Ñ ', + border : 'Ð¥Ò¯ÑÑÑ', + hSpace : 'Хөндлөн зай', + vSpace : 'ÐоÑоо зай', + alertUrl : 'ÐÑÑÐ°Ð³Ð½Ñ URL-Ñн ÑÓ©Ñлийн Ñонгоно ÑÑ', + linkTab : 'Ðинк', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Ð¤Ð»Ð°Ñ Ñинж ÑанаÑ', + propertiesTab : 'Properties', // MISSING + title : 'Ð¤Ð»Ð°Ñ Ñинж ÑанаÑ', + chkPlay : 'ÐвÑомаÑÐ°Ð°Ñ ÑÐ¾Ð³Ð»Ð¾Ñ ', + chkLoop : 'ÐавÑÐ°Ñ ', + chkMenu : 'Ð¤Ð»Ð°Ñ ÑÑÑ Ð¸Ð´Ð²ÑÑ Ð¶Ò¯Ò¯Ð»ÑÑ ', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Ó¨ÑгөгÑÐ³Ó©Ñ ', + scaleAll : 'Ðүгдийг Ñ Ð°ÑÑÑÐ»Ð°Ñ ', + scaleNoBorder : 'Ð¥Ò¯ÑÑÑгүй', + scaleFit : 'Яг ÑааÑÑÑÐ»Ð°Ñ ', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs доод Ñалд', + alignAbsMiddle : 'Abs ÐÑнд Ñалд', + alignBaseline : 'Baseline', + alignTextTop : 'ТекÑÑ Ð´ÑÑÑ', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Ð¤Ð¾Ð½Ð½Ñ Ó©Ð½Ð³Ó©', + hSpace : 'Хөндлөн зай', + vSpace : 'ÐоÑоо зай', + validateSrc : 'Ðинк URL-ÑÑ ÑÓ©ÑÓ©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Үгийн дүÑÑÑ ÑÐ°Ð»Ð³Ð°Ñ ', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Ð¢Ð¾Ð»Ñ Ð±Ð¸Ñиггүй', + changeTo : 'Ó¨Ó©ÑÑÐ»Ó©Ñ ', + btnIgnore : 'ÐөвÑÓ©Ó©ÑÓ©Ñ ', + btnIgnoreAll : 'Ðүгдийг зөвÑÓ©Ó©ÑÓ©Ñ ', + btnReplace : 'ÐаÑж биÑÐ¸Ñ ', + btnReplaceAll : 'Ðүгдийг ÐаÑж биÑÐ¸Ñ ', + btnUndo : 'ÐÑÑÐ°Ð°Ñ ', + noSuggestions : '- ТайлбаÑгүй -', + progress : 'ÐÒ¯ÑÑм Ñалгаж байгаа үйл ÑвÑ...', + noMispell : 'ÐÒ¯ÑÑм Ñалгаад дÑÑÑÑан: Ðлдаа олдÑонгүй', + noChanges : 'ÐÒ¯ÑÑм Ñалгаад дÑÑÑÑан: үг Ó©Ó©ÑÑлөгдөөгүй', + oneChange : 'ÐÒ¯ÑÑм Ñалгаад дÑÑÑÑан: 1 үг Ó©Ó©ÑÑлөгдÑөн', + manyChanges : 'ÐÒ¯ÑÑм Ñалгаад дÑÑÑÑан: %1 үг Ó©Ó©ÑÑлөгдÑөн', + ieSpellDownload : 'ÐÒ¯ÑÑм ÑÐ°Ð»Ð³Ð°Ð³Ñ ÑÑÑгаагүй байна. ТаÑаж Ð°Ð²Ð°Ñ Ñг Ñ Ò¯ÑÑ Ð±Ð°Ð¹Ð½Ð° ÑÑ?' + }, + + smiley : + { + toolbar : 'ТодоÑÑ Ð¾Ð¹Ð»Ð¾Ð»Ñ', + title : 'ТодоÑÑ Ð¾Ð¹Ð»Ð¾Ð»Ñ Ð¾ÑÑÑÐ»Ð°Ñ ', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ÐÑгааÑлагдÑан жагÑаалÑ', + bulletedlist : 'ЦÑгÑÑй жагÑаалÑ', + indent : 'Ðогол Ð¼Ó©Ñ Ñ Ð°ÑÐ°Ñ ', + outdent : 'Ðогол Ð¼Ó©Ñ Ð½ÑмÑÑ ', + + justify : + { + left : 'Ðүүн Ñалд байÑлÑÑÐ»Ð°Ñ ', + center : 'Төвд байÑлÑÑÐ»Ð°Ñ ', + right : 'ÐаÑÑÑн Ñалд байÑлÑÑÐ»Ð°Ñ ', + block : 'Ðлок Ñ ÑлбÑÑÑÑÑ Ð±Ð°Ð¹ÑлÑÑÐ»Ð°Ñ ' + }, + + blockquote : 'ХайÑÑÐ°Ð³Ð»Ð°Ñ ', + + clipboard : + { + title : 'ÐÑÑÐ»Ð³Ð°Ñ ', + cutError : 'Ð¢Ð°Ð½Ñ browser-Ñн Ñ Ð°Ð¼Ð³Ð°Ð°Ð»Ð°Ð»ÑÑн ÑÐ¾Ñ Ð¸Ñгоо editor-д авÑомаÑÐ°Ð°Ñ Ñ Ð°Ð¹ÑÐ»Ð°Ñ Ò¯Ð¹Ð»Ð´Ñлийг зөвÑÓ©Ó©ÑÓ©Ñ Ð³Ò¯Ð¹ байна. (Ctrl/Cmd+X) ÑовÑÐ½Ñ Ñ Ð¾ÑлолÑг аÑиглана ÑÑ.', + copyError : 'Ð¢Ð°Ð½Ñ browser-Ñн Ñ Ð°Ð¼Ð³Ð°Ð°Ð»Ð°Ð»ÑÑн ÑÐ¾Ñ Ð¸Ñгоо editor-д авÑомаÑÐ°Ð°Ñ Ñ ÑÑÐ»Ð°Ñ Ò¯Ð¹Ð»Ð´Ñлийг зөвÑÓ©Ó©ÑÓ©Ñ Ð³Ò¯Ð¹ байна. (Ctrl/Cmd+C) ÑовÑÐ½Ñ Ñ Ð¾ÑлолÑг аÑиглана ÑÑ.', + pasteMsg : '(<strong>Ctrl/Cmd+V</strong>) ÑовÑийг аÑиглан paste Ñ Ð¸Ð¹Ð½Ñ Ò¯Ò¯. Ðөн <strong>OK</strong> даÑ.', + securityMsg : 'Ð¢Ð°Ð½Ñ Ò¯Ð·Ò¯Ò¯Ð»ÑгÑ/browser/-н Ñ Ð°Ð¼Ð³Ð°Ð°Ð»Ð°Ð»ÑÑн ÑÐ¾Ñ Ð¸ÑÐ³Ð¾Ð¾Ð½Ð¾Ð¾Ñ Ð±Ð¾Ð»Ð¾Ð¾Ð´ editor clipboard өгөгдөлÑÒ¯Ò¯ ÑÑÑд Ñ Ð°Ð½Ð´Ð°Ñ Ð±Ð¾Ð»Ð¾Ð¼Ð¶Ð³Ò¯Ð¹. ÐÐ½Ñ ÑÐ¾Ð½Ñ Ð¾Ð´ Ð´Ð°Ñ Ð¸Ð½ paste Ñ Ð¸Ð¹Ñ Ð¸Ð¹Ð³ оÑолд.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Word-Ð¾Ð¾Ñ Ð±ÑÑÐ»Ð³Ð°Ñ ', + title : 'Word-Ð¾Ð¾Ñ Ð±ÑÑÐ»Ð³Ð°Ñ ', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Plain Text-ÑÑÑ Ð±ÑÑÐ»Ð³Ð°Ñ ', + title : 'Plain Text-ÑÑÑ Ð±ÑÑÐ»Ð³Ð°Ñ ' + }, + + templates : + { + button : 'ÐагваÑÑÑд', + title : 'ÐагваÑÑн агÑÑлга', + options : 'Template Options', // MISSING + insertOption : 'Ðдоогийн агÑÑллагÑг даÑж биÑÐ¸Ñ ', + selectPromptMsg : 'ÐагваÑÑг нÑÑж editor-ÑÒ¯Ò¯ Ñонгож оÑÑÑлна ÑÑ<br />(Ðдоогийн агÑÑллагÑг ÑÑÑаж магадгүй):', + emptyListMsg : '(ÐÐ°Ð³Ð²Ð°Ñ ÑодоÑÑ Ð¾Ð¹Ð»Ð¾Ð³Ð´Ð¾Ð¾Ð³Ò¯Ð¹ байна)' + }, + + showBlocks : 'Block-ÑÑдÑг үзүүлÑÑ ', + + stylesCombo : + { + label : 'ÐагваÑ', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'ФоÑмаÑ', + panelTitle : 'ФоÑмаÑ', + + tag_p : 'Ð¥Ñвийн', + tag_pre : 'Formatted', + tag_address : 'ХаÑг', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Paragraph (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ФонÑ', + voiceLabel : 'Font', // MISSING + panelTitle : 'ФонÑ' + }, + + fontSize : + { + label : 'Ð¥ÑмжÑÑ', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Ð¥ÑмжÑÑ' + }, + + colorButton : + { + textColorTitle : 'ФонÑÐ½Ñ Ó©Ð½Ð³Ó©', + bgColorTitle : 'Ð¤Ð¾Ð½Ð½Ñ Ó©Ð½Ð³Ó©', + panelTitle : 'Colors', // MISSING + auto : 'ÐвÑомаÑааÑ', + more : 'ÐÑмÑÐ»Ñ Ó©Ð½Ð³Ó©Ð½Ò¯Ò¯Ð´...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñиг Ñинж ÑанаÑ', + title : 'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñиг Ñинж ÑанаÑ', + design : 'Design', // MISSING + meta : 'Meta өгөгдөл', + chooseColor : 'Choose', // MISSING + other : '<other>', + docTitle : 'Ð¥ÑÑдаÑÐ½Ñ Ð³Ð°ÑÑиг', + charset : 'Encoding ÑÑмдÑгÑ', + charsetOther : 'Encoding-д Ó©Ó©Ñ ÑÑмдÑÐ³Ñ Ð¾Ð½Ð¾Ð¾Ñ ', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Төв евÑоп', + charsetCT : 'Ð¥ÑÑадÑн ÑÐ»Ð°Ð¼Ð¶Ð»Ð°Ð»Ñ (Big5)', + charsetCR : 'ÐÑил', + charsetGR : 'ÐÑед', + charsetJP : 'Япон', + charsetKR : 'СолонгоÑ', + charsetTR : 'TÑÑк', + charsetUN : 'Юникод (UTF-8)', + charsetWE : 'ÐаÑÑÑн евÑоп', + docType : 'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñгийн ÑÓ©Ñөл Heading', + docTypeOther : 'ÐÑÑад баÑÐ¸Ð¼Ñ Ð±Ð¸Ñгийн ÑÓ©Ñөл Heading', + xhtmlDec : 'XHTML агÑÑлж заÑÐ»Ð°Ñ ', + bgColor : 'Фоно өнгө', + bgImage : 'Фоно зÑÑÐ°Ð³Ð½Ñ URL', + bgFixed : 'ÐүйдÑггүй Ñоно', + txtColor : 'ФонÑÐ½Ñ Ó©Ð½Ð³Ó©', + margin : 'Ð¥ÑÑдаÑÐ½Ñ Ð·Ð°Ñ Ñн зай', + marginTop : 'ÐÑÑд Ñал', + marginLeft : 'Ðүүн Ñал', + marginRight : 'ÐаÑÑÑн Ñал', + marginBottom : 'Ðоод Ñал', + metaKeywords : 'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñгийн Ð¸Ð½Ð´ÐµÐºÑ ÑÒ¯Ð»Ñ Ò¯Ò¯Ñ Ò¯Ð³ (ÑаÑÐ»Ð°Ð»Ð°Ð°Ñ ÑÑÑгааÑлагдана)', + metaDescription : 'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñгийн ÑайлбаÑ', + metaAuthor : 'ÐÐ¾Ñ Ð¸Ð¾Ð³Ñ', + metaCopyright : 'ÐÐ¾Ñ Ð¸Ð¾Ð³Ñийн ÑÑÑ ', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/ms.js b/_source/lang/ms.js new file mode 100644 index 0000000..713da5a --- /dev/null +++ b/_source/lang/ms.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Malay language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['ms'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Sumber', + newPage : 'Helaian Baru', + save : 'Simpan', + preview : 'Prebiu', + cut : 'Potong', + copy : 'Salin', + paste : 'Tampal', + print : 'Cetak', + underline : 'Underline', + bold : 'Bold', + italic : 'Italic', + selectAll : 'Pilih Semua', + removeFormat : 'Buang Format', + strike : 'Strike Through', + subscript : 'Subscript', + superscript : 'Superscript', + horizontalrule : 'Masukkan Garisan Membujur', + pagebreak : 'Insert Page Break for Printing', // MISSING + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Buang Sambungan', + undo : 'Batalkan', + redo : 'Ulangkan', + + // Common messages and labels. + common : + { + browseServer : 'Browse Server', + url : 'URL', + protocol : 'Protokol', + upload : 'Muat Naik', + uploadSubmit : 'Hantar ke Server', + image : 'Gambar', + flash : 'Flash', // MISSING + form : 'Borang', + checkbox : 'Checkbox', + radio : 'Butang Radio', + textField : 'Text Field', + textarea : 'Textarea', + hiddenField : 'Field Tersembunyi', + button : 'Butang', + select : 'Field Pilihan', + imageButton : 'Butang Bergambar', + notSet : '<tidak di set>', + id : 'Id', + name : 'Nama', + langDir : 'Arah Tulisan', + langDirLtr : 'Kiri ke Kanan (LTR)', + langDirRtl : 'Kanan ke Kiri (RTL)', + langCode : 'Kod Bahasa', + longDescr : 'Butiran Panjang URL', + cssClass : 'Kelas-kelas Stylesheet', + advisoryTitle : 'Tajuk Makluman', + cssStyle : 'Stail', + ok : 'OK', + cancel : 'Batal', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Advanced', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Lebar', + height : 'Tinggi', + align : 'Jajaran', + alignLeft : 'Kiri', + alignRight : 'Kanan', + alignCenter : 'Tengah', + alignTop : 'Atas', + alignMiddle : 'Pertengahan', + alignBottom : 'Bawah', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Masukkan Huruf Istimewa', + title : 'Sila pilih huruf istimewa', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Masukkan/Sunting Sambungan', + other : '<lain>', + menu : 'Sunting Sambungan', + title : 'Sambungan', + info : 'Butiran Sambungan', + target : 'Sasaran', + upload : 'Muat Naik', + advanced : 'Advanced', + type : 'Jenis Sambungan', + toUrl : 'URL', // MISSING + toAnchor : 'Pautan dalam muka surat ini', + toEmail : 'E-Mail', + targetFrame : '<bingkai>', + targetPopup : '<tetingkap popup>', + targetFrameName : 'Nama Bingkai Sasaran', + targetPopupName : 'Nama Tetingkap Popup', + popupFeatures : 'Ciri Tetingkap Popup', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Bar Status', + popupLocationBar: 'Bar Lokasi', + popupToolbar : 'Toolbar', + popupMenuBar : 'Bar Menu', + popupFullScreen : 'Skrin Penuh (IE)', + popupScrollBars : 'Bar-bar skrol', + popupDependent : 'Bergantungan (Netscape)', + popupLeft : 'Posisi Kiri', + popupTop : 'Posisi Atas', + id : 'Id', // MISSING + langDir : 'Arah Tulisan', + langDirLTR : 'Kiri ke Kanan (LTR)', + langDirRTL : 'Kanan ke Kiri (RTL)', + acccessKey : 'Kunci Akses', + name : 'Nama', + langCode : 'Arah Tulisan', + tabIndex : 'Indeks Tab ', + advisoryTitle : 'Tajuk Makluman', + advisoryContentType : 'Jenis Kandungan Makluman', + cssClasses : 'Kelas-kelas Stylesheet', + charset : 'Linked Resource Charset', + styles : 'Stail', + rel : 'Relationship', // MISSING + selectAnchor : 'Sila pilih pautan', + anchorName : 'dengan menggunakan nama pautan', + anchorId : 'dengan menggunakan ID elemen', + emailAddress : 'Alamat E-Mail', + emailSubject : 'Subjek Mesej', + emailBody : 'Isi Kandungan Mesej', + noAnchors : '(Tiada pautan terdapat dalam dokumen ini)', + noUrl : 'Sila taip sambungan URL', + noEmail : 'Sila taip alamat e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Masukkan/Sunting Pautan', + menu : 'Ciri-ciri Pautan', + title : 'Ciri-ciri Pautan', + name : 'Nama Pautan', + errorName : 'Sila taip nama pautan', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'Cari', + replace : 'Ganti', + findWhat : 'Perkataan yang dicari:', + replaceWith : 'Diganti dengan:', + notFoundMsg : 'Text yang dicari tidak dijumpai.', + matchCase : 'Padanan case huruf', + matchWord : 'Padana Keseluruhan perkataan', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Ganti semua', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Jadual', + title : 'Ciri-ciri Jadual', + menu : 'Ciri-ciri Jadual', + deleteTable : 'Delete Table', // MISSING + rows : 'Barisan', + columns : 'Jaluran', + border : 'Saiz Border', + widthPx : 'piksel-piksel', + widthPc : 'peratus', + widthUnit : 'width unit', // MISSING + cellSpace : 'Ruangan Antara Sel', + cellPad : 'Tambahan Ruang Sel', + caption : 'Keterangan', + summary : 'Summary', // MISSING + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cell', // MISSING + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'Buangkan Sel-sel', + merge : 'Cantumkan Sel-sel', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', // MISSING + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'Buangkan Baris' + }, + + column : + { + menu : 'Column', // MISSING + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'Buangkan Lajur' + } + }, + + // Button Dialog. + button : + { + title : 'Ciri-ciri Butang', + text : 'Teks (Nilai)', + type : 'Jenis', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Ciri-ciri Checkbox', + radioTitle : 'Ciri-ciri Butang Radio', + value : 'Nilai', + selected : 'Dipilih' + }, + + // Form Dialog. + form : + { + title : 'Ciri-ciri Borang', + menu : 'Ciri-ciri Borang', + action : 'Tindakan borang', + method : 'Cara borang dihantar', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Ciri-ciri Selection Field', + selectInfo : 'Select Info', // MISSING + opAvail : 'Pilihan sediada', + value : 'Nilai', + size : 'Saiz', + lines : 'garisan', + chkMulti : 'Benarkan pilihan pelbagai', + opText : 'Teks', + opValue : 'Nilai', + btnAdd : 'Tambah Pilihan', + btnModify : 'Ubah Pilihan', + btnUp : 'Naik ke atas', + btnDown : 'Turun ke bawah', + btnSetValue : 'Set sebagai nilai terpilih', + btnDelete : 'Padam' + }, + + // Textarea Dialog. + textarea : + { + title : 'Ciri-ciri Textarea', + cols : 'Lajur', + rows : 'Baris' + }, + + // Text Field Dialog. + textfield : + { + title : 'Ciri-ciri Text Field', + name : 'Nama', + value : 'Nilai', + charWidth : 'Lebar isian', + maxChars : 'Isian Maksimum', + type : 'Jenis', + typeText : 'Teks', + typePass : 'Kata Laluan' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Ciri-ciri Field Tersembunyi', + name : 'Nama', + value : 'Nilai' + }, + + // Image Dialog. + image : + { + title : 'Ciri-ciri Imej', + titleButton : 'Ciri-ciri Butang Bergambar', + menu : 'Ciri-ciri Imej', + infoTab : 'Info Imej', + btnUpload : 'Hantar ke Server', + upload : 'Muat Naik', + alt : 'Text Alternatif', + lockRatio : 'Tetapkan Nisbah', + resetSize : 'Saiz Set Semula', + border : 'Border', + hSpace : 'Ruang Melintang', + vSpace : 'Ruang Menegak', + alertUrl : 'Sila taip URL untuk fail gambar', + linkTab : 'Sambungan', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash Properties', // MISSING + propertiesTab : 'Properties', // MISSING + title : 'Flash Properties', // MISSING + chkPlay : 'Auto Play', // MISSING + chkLoop : 'Loop', // MISSING + chkMenu : 'Enable Flash Menu', // MISSING + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Scale', // MISSING + scaleAll : 'Show all', // MISSING + scaleNoBorder : 'No Border', // MISSING + scaleFit : 'Exact Fit', // MISSING + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Bawah Mutlak', + alignAbsMiddle : 'Pertengahan Mutlak', + alignBaseline : 'Garis Dasar', + alignTextTop : 'Atas Text', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Warna Latarbelakang', + hSpace : 'Ruang Melintang', + vSpace : 'Ruang Menegak', + validateSrc : 'Sila taip sambungan URL', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Semak Ejaan', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Tidak terdapat didalam kamus', + changeTo : 'Tukarkan kepada', + btnIgnore : 'Biar', + btnIgnoreAll : 'Biarkan semua', + btnReplace : 'Ganti', + btnReplaceAll : 'Gantikan Semua', + btnUndo : 'Batalkan', + noSuggestions : '- Tiada cadangan -', + progress : 'Pemeriksaan ejaan sedang diproses...', + noMispell : 'Pemeriksaan ejaan siap: Tiada salah ejaan', + noChanges : 'Pemeriksaan ejaan siap: Tiada perkataan diubah', + oneChange : 'Pemeriksaan ejaan siap: Satu perkataan telah diubah', + manyChanges : 'Pemeriksaan ejaan siap: %1 perkataan diubah', + ieSpellDownload : 'Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Masukkan Smiley', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Senarai bernombor', + bulletedlist : 'Senarai tidak bernombor', + indent : 'Tambahkan Inden', + outdent : 'Kurangkan Inden', + + justify : + { + left : 'Jajaran Kiri', + center : 'Jajaran Tengah', + right : 'Jajaran Kanan', + block : 'Jajaran Blok' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'Tampal', + cutError : 'Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).', + copyError : 'Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).', + pasteMsg : 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', // MISSING + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Tampal dari Word', + title : 'Tampal dari Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Tampal sebagai text biasa', + title : 'Tampal sebagai text biasa' + }, + + templates : + { + button : 'Templat', + title : 'Templat Kandungan', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):', + emptyListMsg : '(Tiada Templat Disimpan)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'Stail', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Format', + panelTitle : 'Format', + + tag_p : 'Normal', + tag_pre : 'Telah Diformat', + tag_address : 'Alamat', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Perenggan (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', // MISSING + panelTitle : 'Font' + }, + + fontSize : + { + label : 'Saiz', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Saiz' + }, + + colorButton : + { + textColorTitle : 'Warna Text', + bgColorTitle : 'Warna Latarbelakang', + panelTitle : 'Colors', // MISSING + auto : 'Otomatik', + more : 'Warna lain-lain...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Ciri-ciri dokumen', + title : 'Ciri-ciri dokumen', + design : 'Design', // MISSING + meta : 'Data Meta', + chooseColor : 'Choose', // MISSING + other : '<lain>', + docTitle : 'Tajuk Muka Surat', + charset : 'Enkod Set Huruf', + charsetOther : 'Enkod Set Huruf yang Lain', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Jenis Kepala Dokumen', + docTypeOther : 'Jenis Kepala Dokumen yang Lain', + xhtmlDec : 'Masukkan pemula kod XHTML', + bgColor : 'Warna Latarbelakang', + bgImage : 'URL Gambar Latarbelakang', + bgFixed : 'Imej Latarbelakang tanpa Skrol', + txtColor : 'Warna Text', + margin : 'Margin Muka Surat', + marginTop : 'Atas', + marginLeft : 'Kiri', + marginRight : 'Kanan', + marginBottom : 'Bawah', + metaKeywords : 'Kata Kunci Indeks Dokumen (dipisahkan oleh koma)', + metaDescription : 'Keterangan Dokumen', + metaAuthor : 'Penulis', + metaCopyright : 'Hakcipta', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/nb.js b/_source/lang/nb.js new file mode 100644 index 0000000..f56735b --- /dev/null +++ b/_source/lang/nb.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Norwegian BokmÃ¥l language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['nb'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rikteksteditor, %1, trykk ALT 0 for hjelp.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rikteksteditor', + + // Toolbar buttons without dialogs. + source : 'Kilde', + newPage : 'Ny side', + save : 'Lagre', + preview : 'ForhÃ¥ndsvis', + cut : 'Klipp ut', + copy : 'Kopier', + paste : 'Lim inn', + print : 'Skriv ut', + underline : 'Understreking', + bold : 'Fet', + italic : 'Kursiv', + selectAll : 'Merk alt', + removeFormat : 'Fjern formatering', + strike : 'Gjennomstreking', + subscript : 'Senket skrift', + superscript : 'Hevet skrift', + horizontalrule : 'Sett inn horisontal linje', + pagebreak : 'Sett inn sideskift for utskrift', + pagebreakAlt : 'Sideskift', + unlink : 'Fjern lenke', + undo : 'Angre', + redo : 'Gjør om', + + // Common messages and labels. + common : + { + browseServer : 'Bla igjennom server', + url : 'URL', + protocol : 'Protokoll', + upload : 'Last opp', + uploadSubmit : 'Send det til serveren', + image : 'Bilde', + flash : 'Flash', + form : 'Skjema', + checkbox : 'Avmerkingsboks', + radio : 'Alternativknapp', + textField : 'Tekstboks', + textarea : 'TekstomrÃ¥de', + hiddenField : 'Skjult felt', + button : 'Knapp', + select : 'Rullegardinliste', + imageButton : 'Bildeknapp', + notSet : '<ikke satt>', + id : 'Id', + name : 'Navn', + langDir : 'SprÃ¥kretning', + langDirLtr : 'Venstre til høyre (VTH)', + langDirRtl : 'Høyre til venstre (HTV)', + langCode : 'SprÃ¥kkode', + longDescr : 'Utvidet beskrivelse', + cssClass : 'Stilarkklasser', + advisoryTitle : 'Tittel', + cssStyle : 'Stil', + ok : 'OK', + cancel : 'Avbryt', + close : 'Lukk', + preview : 'ForhÃ¥ndsvis', + generalTab : 'Generelt', + advancedTab : 'Avansert', + validateNumberFailed : 'Denne verdien er ikke et tall.', + confirmNewPage : 'Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker pÃ¥ at du vil laste en ny side?', + confirmCancel : 'Noen av valgene har blitt endret. Er du sikker pÃ¥ at du vil lukke dialogen?', + options : 'Valg', + target : 'MÃ¥l', + targetNew : 'Nytt vindu (_blank)', + targetTop : 'Hele vindu (_top)', + targetSelf : 'Samme vindu (_self)', + targetParent : 'Foreldrevindu (_parent)', + langDirLTR : 'Venstre til høyre (VTH)', + langDirRTL : 'Høyre til venstre (HTV)', + styles : 'Stil', + cssClasses : 'Stilarkklasser', + width : 'Bredde', + height : 'Høyde', + align : 'Juster', + alignLeft : 'Venstre', + alignRight : 'Høyre', + alignCenter : 'Midtjuster', + alignTop : 'Topp', + alignMiddle : 'Midten', + alignBottom : 'Bunn', + invalidHeight : 'Høyde mÃ¥ være et tall.', + invalidWidth : 'Bredde mÃ¥ være et tall.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, utilgjenglig</span>' + }, + + contextmenu : + { + options : 'Alternativer for høyreklikkmeny' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Sett inn spesialtegn', + title : 'Velg spesialtegn', + options : 'Alternativer for spesialtegn' + }, + + // Link dialog. + link : + { + toolbar : 'Sett inn/Rediger lenke', + other : '<annen>', + menu : 'Rediger lenke', + title : 'Lenke', + info : 'Lenkeinfo', + target : 'MÃ¥l', + upload : 'Last opp', + advanced : 'Avansert', + type : 'Lenketype', + toUrl : 'URL', + toAnchor : 'Lenke til anker i teksten', + toEmail : 'E-post', + targetFrame : '<ramme>', + targetPopup : '<popup-vindu>', + targetFrameName : 'MÃ¥lramme', + targetPopupName : 'Navn pÃ¥ popup-vindu', + popupFeatures : 'Egenskaper for popup-vindu', + popupResizable : 'Skalerbar', + popupStatusBar : 'Statuslinje', + popupLocationBar: 'Adresselinje', + popupToolbar : 'Verktøylinje', + popupMenuBar : 'Menylinje', + popupFullScreen : 'Fullskjerm (IE)', + popupScrollBars : 'Scrollbar', + popupDependent : 'Avhenging (Netscape)', + popupLeft : 'Venstre posisjon', + popupTop : 'Topp-posisjon', + id : 'Id', + langDir : 'SprÃ¥kretning', + langDirLTR : 'Venstre til høyre (VTH)', + langDirRTL : 'Høyre til venstre (HTV)', + acccessKey : 'Aksessknapp', + name : 'Navn', + langCode : 'SprÃ¥kkode', + tabIndex : 'Tabindeks', + advisoryTitle : 'Tittel', + advisoryContentType : 'Type', + cssClasses : 'Stilarkklasser', + charset : 'Lenket tegnsett', + styles : 'Stil', + rel : 'Relationship', // MISSING + selectAnchor : 'Velg et anker', + anchorName : 'Anker etter navn', + anchorId : 'Element etter ID', + emailAddress : 'E-postadresse', + emailSubject : 'Meldingsemne', + emailBody : 'Melding', + noAnchors : '(Ingen anker i dokumentet)', + noUrl : 'Vennligst skriv inn lenkens URL', + noEmail : 'Vennligst skriv inn e-postadressen' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Sett inn/Rediger anker', + menu : 'Egenskaper for anker', + title : 'Egenskaper for anker', + name : 'Ankernavn', + errorName : 'Vennligst skriv inn ankernavnet', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Egenskaper for nummerert liste', + bulletedTitle : 'Egenskaper for punktmerket liste', + type : 'Type', + start : 'Start', + validateStartNumber :'Starten pÃ¥ listen mÃ¥ være et heltall.', + circle : 'Sirkel', + disc : 'Disk', + square : 'Firkant', + none : 'Ingen', + notset : '<ikke satt>', + armenian : 'Armensk nummerering', + georgian : 'Georgisk nummerering (an, ban, gan, osv.)', + lowerRoman : 'Romertall, smÃ¥ (i, ii, iii, iv, v, osv.)', + upperRoman : 'Romertall, store (I, II, III, IV, V, osv.)', + lowerAlpha : 'Alfabetisk, smÃ¥ (a, b, c, d, e, osv.)', + upperAlpha : 'Alfabetisk, store (A, B, C, D, E, osv.)', + lowerGreek : 'Gresk, smÃ¥ (alpha, beta, gamma, osv.)', + decimal : 'Tall (1, 2, 3, osv.)', + decimalLeadingZero : 'Tall, med førstesiffer null (01, 02, 03, osv.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Søk og erstatt', + find : 'Søk', + replace : 'Erstatt', + findWhat : 'Søk etter:', + replaceWith : 'Erstatt med:', + notFoundMsg : 'Fant ikke søketeksten.', + matchCase : 'Skill mellom store og smÃ¥ bokstaver', + matchWord : 'Bare hele ord', + matchCyclic : 'Søk i hele dokumentet', + replaceAll : 'Erstatt alle', + replaceSuccessMsg : '%1 tilfelle(r) erstattet.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabell', + title : 'Egenskaper for tabell', + menu : 'Egenskaper for tabell', + deleteTable : 'Slett tabell', + rows : 'Rader', + columns : 'Kolonner', + border : 'Rammestørrelse', + widthPx : 'piksler', + widthPc : 'prosent', + widthUnit : 'Bredde-enhet', + cellSpace : 'Cellemarg', + cellPad : 'Cellepolstring', + caption : 'Tittel', + summary : 'Sammendrag', + headers : 'Overskrifter', + headersNone : 'Ingen', + headersColumn : 'Første kolonne', + headersRow : 'Første rad', + headersBoth : 'Begge', + invalidRows : 'Antall rader mÃ¥ være et tall større enn 0.', + invalidCols : 'Antall kolonner mÃ¥ være et tall større enn 0.', + invalidBorder : 'Rammestørrelse mÃ¥ være et tall.', + invalidWidth : 'Tabellbredde mÃ¥ være et tall.', + invalidHeight : 'Tabellhøyde mÃ¥ være et tall.', + invalidCellSpacing : 'Cellemarg mÃ¥ være et tall.', + invalidCellPadding : 'Cellepolstring mÃ¥ være et tall.', + + cell : + { + menu : 'Celle', + insertBefore : 'Sett inn celle før', + insertAfter : 'Sett inn celle etter', + deleteCell : 'Slett celler', + merge : 'SlÃ¥ sammen celler', + mergeRight : 'SlÃ¥ sammen høyre', + mergeDown : 'SlÃ¥ sammen ned', + splitHorizontal : 'Del celle horisontalt', + splitVertical : 'Del celle vertikalt', + title : 'Celleegenskaper', + cellType : 'Celletype', + rowSpan : 'Radspenn', + colSpan : 'Kolonnespenn', + wordWrap : 'Tekstbrytning', + hAlign : 'Horisontal justering', + vAlign : 'Vertikal justering', + alignBaseline : 'Grunnlinje', + bgColor : 'Bakgrunnsfarge', + borderColor : 'Rammefarge', + data : 'Data', + header : 'Overskrift', + yes : 'Ja', + no : 'Nei', + invalidWidth : 'Cellebredde mÃ¥ være et tall.', + invalidHeight : 'Cellehøyde mÃ¥ være et tall.', + invalidRowSpan : 'Radspenn mÃ¥ være et heltall.', + invalidColSpan : 'Kolonnespenn mÃ¥ være et heltall.', + chooseColor : 'Velg' + }, + + row : + { + menu : 'Rader', + insertBefore : 'Sett inn rad før', + insertAfter : 'Sett inn rad etter', + deleteRow : 'Slett rader' + }, + + column : + { + menu : 'Kolonne', + insertBefore : 'Sett inn kolonne før', + insertAfter : 'Sett inn kolonne etter', + deleteColumn : 'Slett kolonner' + } + }, + + // Button Dialog. + button : + { + title : 'Egenskaper for knapp', + text : 'Tekst (verdi)', + type : 'Type', + typeBtn : 'Knapp', + typeSbm : 'Send', + typeRst : 'Nullstill' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Egenskaper for avmerkingsboks', + radioTitle : 'Egenskaper for alternativknapp', + value : 'Verdi', + selected : 'Valgt' + }, + + // Form Dialog. + form : + { + title : 'Egenskaper for skjema', + menu : 'Egenskaper for skjema', + action : 'Handling', + method : 'Metode', + encoding : 'Encoding' + }, + + // Select Field Dialog. + select : + { + title : 'Egenskaper for rullegardinliste', + selectInfo : 'Info', + opAvail : 'Tilgjenglige alternativer', + value : 'Verdi', + size : 'Størrelse', + lines : 'Linjer', + chkMulti : 'Tillat flervalg', + opText : 'Tekst', + opValue : 'Verdi', + btnAdd : 'Legg til', + btnModify : 'Endre', + btnUp : 'Opp', + btnDown : 'Ned', + btnSetValue : 'Sett som valgt', + btnDelete : 'Slett' + }, + + // Textarea Dialog. + textarea : + { + title : 'Egenskaper for tekstomrÃ¥de', + cols : 'Kolonner', + rows : 'Rader' + }, + + // Text Field Dialog. + textfield : + { + title : 'Egenskaper for tekstfelt', + name : 'Navn', + value : 'Verdi', + charWidth : 'Tegnbredde', + maxChars : 'Maks antall tegn', + type : 'Type', + typeText : 'Tekst', + typePass : 'Passord' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Egenskaper for skjult felt', + name : 'Navn', + value : 'Verdi' + }, + + // Image Dialog. + image : + { + title : 'Bildeegenskaper', + titleButton : 'Egenskaper for bildeknapp', + menu : 'Bildeegenskaper', + infoTab : 'Bildeinformasjon', + btnUpload : 'Send det til serveren', + upload : 'Last opp', + alt : 'Alternativ tekst', + lockRatio : 'LÃ¥s forhold', + resetSize : 'Tilbakestill størrelse', + border : 'Ramme', + hSpace : 'HMarg', + vSpace : 'VMarg', + alertUrl : 'Vennligst skriv bilde-urlen', + linkTab : 'Lenke', + button2Img : 'Vil du endre den valgte bildeknappen til et vanlig bilde?', + img2Button : 'Vil du endre det valgte bildet til en bildeknapp?', + urlMissing : 'Bildets adresse mangler.', + validateBorder : 'Ramme mÃ¥ være et heltall.', + validateHSpace : 'HMarg mÃ¥ være et heltall.', + validateVSpace : 'VMarg mÃ¥ være et heltall.' + }, + + // Flash Dialog + flash : + { + properties : 'Egenskaper for Flash-objekt', + propertiesTab : 'Egenskaper', + title : 'Flash-egenskaper', + chkPlay : 'Autospill', + chkLoop : 'Loop', + chkMenu : 'SlÃ¥ pÃ¥ Flash-meny', + chkFull : 'Tillat fullskjerm', + scale : 'Skaler', + scaleAll : 'Vis alt', + scaleNoBorder : 'Ingen ramme', + scaleFit : 'Skaler til Ã¥ passe', + access : 'Scripttilgang', + accessAlways : 'Alltid', + accessSameDomain: 'Samme domene', + accessNever : 'Aldri', + alignAbsBottom : 'Abs bunn', + alignAbsMiddle : 'Abs midten', + alignBaseline : 'Bunnlinje', + alignTextTop : 'Tekst topp', + quality : 'Kvalitet', + qualityBest : 'Best', + qualityHigh : 'Høy', + qualityAutoHigh : 'Auto høy', + qualityMedium : 'Medium', + qualityAutoLow : 'Auto lav', + qualityLow : 'Lav', + windowModeWindow: 'Vindu', + windowModeOpaque: 'Opaque', + windowModeTransparent : 'Gjennomsiktig', + windowMode : 'Vindumodus', + flashvars : 'Variabler for flash', + bgcolor : 'Bakgrunnsfarge', + hSpace : 'HMarg', + vSpace : 'VMarg', + validateSrc : 'Vennligst skriv inn lenkens url.', + validateHSpace : 'HMarg mÃ¥ være et tall.', + validateVSpace : 'VMarg mÃ¥ være et tall.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Stavekontroll', + title : 'Stavekontroll', + notAvailable : 'Beklager, tjenesten er utilgjenglig nÃ¥.', + errorLoading : 'Feil under lasting av applikasjonstjenestetjener: %s.', + notInDic : 'Ikke i ordboken', + changeTo : 'Endre til', + btnIgnore : 'Ignorer', + btnIgnoreAll : 'Ignorer alle', + btnReplace : 'Erstatt', + btnReplaceAll : 'Erstatt alle', + btnUndo : 'Angre', + noSuggestions : '- Ingen forslag -', + progress : 'Stavekontroll pÃ¥gÃ¥r...', + noMispell : 'Stavekontroll fullført: ingen feilstavinger funnet', + noChanges : 'Stavekontroll fullført: ingen ord endret', + oneChange : 'Stavekontroll fullført: Ett ord endret', + manyChanges : 'Stavekontroll fullført: %1 ord endret', + ieSpellDownload : 'Stavekontroll er ikke installert. Vil du laste den ned nÃ¥?' + }, + + smiley : + { + toolbar : 'Smil', + title : 'Sett inn smil', + options : 'Alternativer for smil' + }, + + elementsPath : + { + eleLabel : 'Element-sti', + eleTitle : '%1 element' + }, + + numberedlist : 'Legg til/Fjern nummerert liste', + bulletedlist : 'Legg til/Fjern punktmerket liste', + indent : 'Ãk innrykk', + outdent : 'Reduser innrykk', + + justify : + { + left : 'Venstrejuster', + center : 'Midtstill', + right : 'Høyrejuster', + block : 'Blokkjuster' + }, + + blockquote : 'Sitatblokk', + + clipboard : + { + title : 'Lim inn', + cutError : 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl/Cmd+X).', + copyError : 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl/Cmd+C).', + pasteMsg : 'Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.', + securityMsg : 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du mÃ¥ derfor lime det inn pÃ¥ nytt i dette vinduet.', + pasteArea : 'InnlimingsomrÃ¥de' + }, + + pastefromword : + { + confirmCleanup : 'Teksten du limer inn ser ut til Ã¥ være kopiert fra Word. Vil du renske den før du limer den inn?', + toolbar : 'Lim inn fra Word', + title : 'Lim inn fra Word', + error : 'Det var ikke mulig Ã¥ renske den innlimte teksten pÃ¥ grunn av en intern feil' + }, + + pasteText : + { + button : 'Lim inn som ren tekst', + title : 'Lim inn som ren tekst' + }, + + templates : + { + button : 'Maler', + title : 'Innholdsmaler', + options : 'Alternativer for mal', + insertOption : 'Erstatt gjeldende innhold', + selectPromptMsg : 'Velg malen du vil Ã¥pne i redigeringsverktøyet:', + emptyListMsg : '(Ingen maler definert)' + }, + + showBlocks : 'Vis blokker', + + stylesCombo : + { + label : 'Stil', + panelTitle : 'Stilformater', + panelTitle1 : 'Blokkstiler', + panelTitle2 : 'Inlinestiler', + panelTitle3 : 'Objektstiler' + }, + + format : + { + label : 'Format', + panelTitle : 'Avsnittsformat', + + tag_p : 'Normal', + tag_pre : 'Formatert', + tag_address : 'Adresse', + tag_h1 : 'Overskrift 1', + tag_h2 : 'Overskrift 2', + tag_h3 : 'Overskrift 3', + tag_h4 : 'Overskrift 4', + tag_h5 : 'Overskrift 5', + tag_h6 : 'Overskrift 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Sett inn Div Container', + toolbar : 'Sett inn Div Container', + cssClassInputLabel : 'Stilark-klasser', + styleSelectLabel : 'Stil', + IdInputLabel : 'Id', + languageCodeInputLabel : ' SprÃ¥kkode', + inlineStyleInputLabel : 'Inlinestiler', + advisoryTitleInputLabel : 'Tittel', + langDirLabel : 'SprÃ¥kretning', + langDirLTRLabel : 'Venstre til høyre (VTH)', + langDirRTLLabel : 'Høyre til venstre (HTV)', + edit : 'Rediger Div', + remove : 'Fjern Div' + }, + + iframe : + { + title : 'Egenskaper for IFrame', + toolbar : 'IFrame', + noUrl : 'Vennligst skriv inn URL for iframe', + scrolling : 'Aktiver scrollefelt', + border : 'Viss ramme rundt iframe' + }, + + font : + { + label : 'Skrift', + voiceLabel : 'Font', + panelTitle : 'Skrift' + }, + + fontSize : + { + label : 'Størrelse', + voiceLabel : 'Font Størrelse', + panelTitle : 'Størrelse' + }, + + colorButton : + { + textColorTitle : 'Tekstfarge', + bgColorTitle : 'Bakgrunnsfarge', + panelTitle : 'Farger', + auto : 'Automatisk', + more : 'Flere farger...' + }, + + colors : + { + '000' : 'Svart', + '800000' : 'Rødbrun', + '8B4513' : 'Salbrun', + '2F4F4F' : 'Grønnsvart', + '008080' : 'BlÃ¥grønn', + '000080' : 'MarineblÃ¥tt', + '4B0082' : 'Indigo', + '696969' : 'Mørk grÃ¥', + 'B22222' : 'Mørkerød', + 'A52A2A' : 'Brun', + 'DAA520' : 'Lys brun', + '006400' : 'Mørk grønn', + '40E0D0' : 'Turkis', + '0000CD' : 'Medium blÃ¥', + '800080' : 'Purpur', + '808080' : 'GrÃ¥', + 'F00' : 'Rød', + 'FF8C00' : 'Mørk oransje', + 'FFD700' : 'Gull', + '008000' : 'Grønn', + '0FF' : 'Cyan', + '00F' : 'BlÃ¥', + 'EE82EE' : 'Fiolett', + 'A9A9A9' : 'Svak grÃ¥', + 'FFA07A' : 'Rosa-oransje', + 'FFA500' : 'Oransje', + 'FFFF00' : 'Gul', + '00FF00' : 'Lime', + 'AFEEEE' : 'Svak turkis', + 'ADD8E6' : 'Lys BlÃ¥', + 'DDA0DD' : 'Plomme', + 'D3D3D3' : 'Lys grÃ¥', + 'FFF0F5' : 'Svak lavendelrosa', + 'FAEBD7' : 'Antikk-hvit', + 'FFFFE0' : 'Lys gul', + 'F0FFF0' : 'Honningmelon', + 'F0FFFF' : 'Svakt asurblÃ¥tt', + 'F0F8FF' : 'Svak cyan', + 'E6E6FA' : 'Lavendel', + 'FFF' : 'Hvit' + }, + + scayt : + { + title : 'Stavekontroll mens du skriver', + opera_title : 'Ikke støttet av Opera', + enable : 'SlÃ¥ pÃ¥ SCAYT', + disable : 'SlÃ¥ av SCAYT', + about : 'Om SCAYT', + toggle : 'Veksle SCAYT', + options : 'Valg', + langs : 'SprÃ¥k', + moreSuggestions : 'Flere forslag', + ignore : 'Ignorer', + ignoreAll : 'Ignorer Alle', + addWord : 'Legg til ord', + emptyDic : 'Ordboknavn bør ikke være tom.', + + optionsTab : 'Valg', + allCaps : 'Ikke kontroller ord med kun store bokstaver', + ignoreDomainNames : 'Ikke kontroller domenenavn', + mixedCase : 'Ikke kontroller ord med blandet smÃ¥ og store bokstaver', + mixedWithDigits : 'Ikke kontroller ord som inneholder tall', + + languagesTab : 'SprÃ¥k', + + dictionariesTab : 'Ordbøker', + dic_field_name : 'Ordboknavn', + dic_create : 'Opprett', + dic_restore : 'Gjenopprett', + dic_delete : 'Slett', + dic_rename : 'Gi nytt navn', + dic_info : 'Brukerordboken lagres først i en informasjonskapsel pÃ¥ din maskin, men det er en begrensning pÃ¥ hvor mye som kan lagres her. NÃ¥r ordboken blir for stor til Ã¥ lagres i en informasjonskapsel, vil vi i stedet lagre ordboken pÃ¥ vÃ¥r server. For Ã¥ lagre din personlige ordbok pÃ¥ vÃ¥r server, burde du velge et navn for ordboken din. Hvis du allerede har lagret en ordbok, vennligst skriv inn ordbokens navn og klikk pÃ¥ Gjenopprett-knappen.', + + aboutTab : 'Om' + }, + + about : + { + title : 'Om CKEditor', + dlgTitle : 'Om CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For lisensieringsinformasjon, vennligst besøk vÃ¥rt nettsted:', + copy : 'Copyright © $1. Alle rettigheter reservert.' + }, + + maximize : 'Maksimer', + minimize : 'Minimer', + + fakeobjects : + { + anchor : 'Anker', + flash : 'Flash-animasjon', + iframe : 'IFrame', + hiddenfield : 'Skjult felt', + unknown : 'Ukjent objekt' + }, + + resize : 'Dra for Ã¥ skalere', + + colordialog : + { + title : 'Velg farge', + options : 'Alternativer for farge', + highlight : 'Merk', + selected : 'Valgt', + clear : 'Tøm' + }, + + toolbarCollapse : 'Skjul verktøylinje', + toolbarExpand : 'Vis verktøylinje', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Tekstretning fra venstre til høyre', + rtl : 'Tekstretning fra høyre til venstre' + }, + + docprops : + { + label : 'Dokumentegenskaper', + title : 'Dokumentegenskaper', + design : 'Design', // MISSING + meta : 'Meta-data', + chooseColor : 'Velg', + other : '<annen>', + docTitle : 'Sidetittel', + charset : 'Tegnsett', + charsetOther : 'Annet tegnsett', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Sentraleuropeisk', + charsetCT : 'Tradisonell kinesisk(Big5)', + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Gresk', + charsetJP : 'Japansk', + charsetKR : 'Koreansk', + charsetTR : 'Tyrkisk', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Vesteuropeisk', + docType : 'Dokumenttype header', + docTypeOther : 'Annet dokumenttype header', + xhtmlDec : 'Inkluder XHTML-deklarasjon', + bgColor : 'Bakgrunnsfarge', + bgImage : 'URL for bakgrunnsbilde', + bgFixed : 'LÃ¥s bakgrunnsbilde', + txtColor : 'Tekstfarge', + margin : 'Sidemargin', + marginTop : 'Topp', + marginLeft : 'Venstre', + marginRight : 'Høyre', + marginBottom : 'Bunn', + metaKeywords : 'Dokument nøkkelord (kommaseparert)', + metaDescription : 'Dokumentbeskrivelse', + metaAuthor : 'Forfatter', + metaCopyright : 'Kopirett', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/nl.js b/_source/lang/nl.js new file mode 100644 index 0000000..7323202 --- /dev/null +++ b/_source/lang/nl.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Dutch language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['nl'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Tekstverwerker, %1, druk op ALT 0 voor hulp.', + + // ARIA descriptions. + toolbars : 'Werkbalken', + editor : 'Tekstverwerker', + + // Toolbar buttons without dialogs. + source : 'Code', + newPage : 'Nieuwe pagina', + save : 'Opslaan', + preview : 'Voorbeeld', + cut : 'Knippen', + copy : 'Kopiëren', + paste : 'Plakken', + print : 'Printen', + underline : 'Onderstreept', + bold : 'Vet', + italic : 'Schuingedrukt', + selectAll : 'Alles selecteren', + removeFormat : 'Opmaak verwijderen', + strike : 'Doorhalen', + subscript : 'Subscript', + superscript : 'Superscript', + horizontalrule : 'Horizontale lijn invoegen', + pagebreak : 'Pagina-einde invoegen', + pagebreakAlt : 'Pagina-einde', + unlink : 'Link verwijderen', + undo : 'Ongedaan maken', + redo : 'Opnieuw uitvoeren', + + // Common messages and labels. + common : + { + browseServer : 'Bladeren op server', + url : 'URL', + protocol : 'Protocol', + upload : 'Upload', + uploadSubmit : 'Naar server verzenden', + image : 'Afbeelding', + flash : 'Flash', + form : 'Formulier', + checkbox : 'Aanvinkvakje', + radio : 'Selectievakje', + textField : 'Tekstveld', + textarea : 'Tekstvak', + hiddenField : 'Verborgen veld', + button : 'Knop', + select : 'Selectieveld', + imageButton : 'Afbeeldingsknop', + notSet : '<niet ingevuld>', + id : 'Kenmerk', + name : 'Naam', + langDir : 'Schrijfrichting', + langDirLtr : 'Links naar rechts (LTR)', + langDirRtl : 'Rechts naar links (RTL)', + langCode : 'Taalcode', + longDescr : 'Lange URL-omschrijving', + cssClass : 'Stylesheet-klassen', + advisoryTitle : 'Aanbevolen titel', + cssStyle : 'Stijl', + ok : 'OK', + cancel : 'Annuleren', + close : 'Sluiten', + preview : 'Voorbeeld', + generalTab : 'Algemeen', + advancedTab : 'Geavanceerd', + validateNumberFailed : 'Deze waarde is geen geldig getal.', + confirmNewPage : 'Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?', + confirmCancel : 'Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?', + options : 'Opties', + target : 'Doel', + targetNew : 'Nieuw venster (_blank)', + targetTop : 'Hele venster (_top)', + targetSelf : 'Zelfde venster (_self)', + targetParent : 'Origineel venster (_parent)', + langDirLTR : 'Links naar rechts (LTR)', + langDirRTL : 'Rechts naar links (RTL)', + styles : 'Stijlen', + cssClasses : 'Stylesheet klassen', + width : 'Breedte', + height : 'Hoogte', + align : 'Uitlijning', + alignLeft : 'Links', + alignRight : 'Rechts', + alignCenter : 'Centreren', + alignTop : 'Boven', + alignMiddle : 'Midden', + alignBottom : 'Beneden', + invalidHeight : 'De hoogte moet een getal zijn.', + invalidWidth : 'De breedte moet een getal zijn.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, niet beschikbaar</span>' + }, + + contextmenu : + { + options : 'Context menu opties' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Speciaal teken invoegen', + title : 'Selecteer speciaal teken', + options : 'Speciale tekens opties' + }, + + // Link dialog. + link : + { + toolbar : 'Link invoegen/wijzigen', + other : '<ander>', + menu : 'Link wijzigen', + title : 'Link', + info : 'Linkomschrijving', + target : 'Doel', + upload : 'Upload', + advanced : 'Geavanceerd', + type : 'Linktype', + toUrl : 'URL', + toAnchor : 'Interne link in pagina', + toEmail : 'E-mail', + targetFrame : '<frame>', + targetPopup : '<popup window>', + targetFrameName : 'Naam doelframe', + targetPopupName : 'Naam popupvenster', + popupFeatures : 'Instellingen popupvenster', + popupResizable : 'Herschaalbaar', + popupStatusBar : 'Statusbalk', + popupLocationBar: 'Locatiemenu', + popupToolbar : 'Menubalk', + popupMenuBar : 'Menubalk', + popupFullScreen : 'Volledig scherm (IE)', + popupScrollBars : 'Schuifbalken', + popupDependent : 'Afhankelijk (Netscape)', + popupLeft : 'Positie links', + popupTop : 'Positie boven', + id : 'Id', + langDir : 'Schrijfrichting', + langDirLTR : 'Links naar rechts (LTR)', + langDirRTL : 'Rechts naar links (RTL)', + acccessKey : 'Toegangstoets', + name : 'Naam', + langCode : 'Schrijfrichting', + tabIndex : 'Tabvolgorde', + advisoryTitle : 'Aanbevolen titel', + advisoryContentType : 'Aanbevolen content-type', + cssClasses : 'Stylesheet-klassen', + charset : 'Karakterset van gelinkte bron', + styles : 'Stijl', + rel : 'Relatie', + selectAnchor : 'Kies een interne link', + anchorName : 'Op naam interne link', + anchorId : 'Op kenmerk interne link', + emailAddress : 'E-mailadres', + emailSubject : 'Onderwerp bericht', + emailBody : 'Inhoud bericht', + noAnchors : '(Geen interne links in document gevonden)', + noUrl : 'Geef de link van de URL', + noEmail : 'Geef een e-mailadres' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Interne link', + menu : 'Eigenschappen interne link', + title : 'Eigenschappen interne link', + name : 'Naam interne link', + errorName : 'Geef de naam van de interne link op', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Eigenschappen genummerde lijst', + bulletedTitle : 'Eigenschappen lijst met opsommingstekens', + type : 'Type', + start : 'Start', + validateStartNumber :'Starnummer van de lijst moet een heel nummer zijn.', + circle : 'Cirkel', + disc : 'Schijf', + square : 'Vierkant', + none : 'Geen', + notset : '<niet gezet>', + armenian : 'Armeense numering', + georgian : 'Greorgische numering (an, ban, gan, etc.)', + lowerRoman : 'Romeins kleine letters (i, ii, iii, iv, v, etc.)', + upperRoman : 'Romeins hoofdletters (I, II, III, IV, V, etc.)', + lowerAlpha : 'Kleine letters (a, b, c, d, e, etc.)', + upperAlpha : 'Hoofdletters (A, B, C, D, E, etc.)', + lowerGreek : 'Grieks kleine letters (alpha, beta, gamma, etc.)', + decimal : 'Cijfers (1, 2, 3, etc.)', + decimalLeadingZero : 'Cijfers beginnen met nul (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Zoeken en vervangen', + find : 'Zoeken', + replace : 'Vervangen', + findWhat : 'Zoeken naar:', + replaceWith : 'Vervangen met:', + notFoundMsg : 'De opgegeven tekst is niet gevonden.', + matchCase : 'Hoofdlettergevoelig', + matchWord : 'Hele woord moet voorkomen', + matchCyclic : 'Doorlopend zoeken', + replaceAll : 'Alles vervangen', + replaceSuccessMsg : '%1 resulaten vervangen.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabel', + title : 'Eigenschappen tabel', + menu : 'Eigenschappen tabel', + deleteTable : 'Tabel verwijderen', + rows : 'Rijen', + columns : 'Kolommen', + border : 'Breedte rand', + widthPx : 'pixels', + widthPc : 'procent', + widthUnit : 'eenheid breedte', + cellSpace : 'Afstand tussen cellen', + cellPad : 'Ruimte in de cel', + caption : 'Naam', + summary : 'Samenvatting', + headers : 'Koppen', + headersNone : 'Geen', + headersColumn : 'Eerste kolom', + headersRow : 'Eerste rij', + headersBoth : 'Beide', + invalidRows : 'Het aantal rijen moet een getal zijn groter dan 0.', + invalidCols : 'Het aantal kolommen moet een getal zijn groter dan 0.', + invalidBorder : 'De rand breedte moet een getal zijn.', + invalidWidth : 'De tabel breedte moet een getal zijn.', + invalidHeight : 'De tabel hoogte moet een getal zijn.', + invalidCellSpacing : 'Afstand tussen cellen moet een getal zijn.', + invalidCellPadding : 'Ruimte in de cel moet een getal zijn.', + + cell : + { + menu : 'Cel', + insertBefore : 'Voeg cel in voor', + insertAfter : 'Voeg cel in achter', + deleteCell : 'Cellen verwijderen', + merge : 'Cellen samenvoegen', + mergeRight : 'Voeg samen naar rechts', + mergeDown : 'Voeg samen naar beneden', + splitHorizontal : 'Splits cellen horizontaal', + splitVertical : 'Splits cellen verticaal', + title : 'Cel eigenschappen', + cellType : 'Cel type', + rowSpan : 'Rijen samenvoegen', + colSpan : 'Kolommen samenvoegen', + wordWrap : 'Automatische terugloop', + hAlign : 'Horizontale uitlijning', + vAlign : 'Verticale uitlijning', + alignBaseline : 'Basislijn', + bgColor : 'Achtergrondkleur', + borderColor : 'Kleur rand', + data : 'Inhoud', + header : 'Kop', + yes : 'Ja', + no : 'Nee', + invalidWidth : 'De celbreedte moet een getal zijn.', + invalidHeight : 'De celhoogte moet een getal zijn.', + invalidRowSpan : 'Rijen samenvoegen moet een heel getal zijn.', + invalidColSpan : 'Kolommen samenvoegen moet een heel getal zijn.', + chooseColor : 'Kies' + }, + + row : + { + menu : 'Rij', + insertBefore : 'Voeg rij in voor', + insertAfter : 'Voeg rij in achter', + deleteRow : 'Rijen verwijderen' + }, + + column : + { + menu : 'Kolom', + insertBefore : 'Voeg kolom in voor', + insertAfter : 'Voeg kolom in achter', + deleteColumn : 'Kolommen verwijderen' + } + }, + + // Button Dialog. + button : + { + title : 'Eigenschappen knop', + text : 'Tekst (waarde)', + type : 'Soort', + typeBtn : 'Knop', + typeSbm : 'Versturen', + typeRst : 'Leegmaken' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Eigenschappen aanvinkvakje', + radioTitle : 'Eigenschappen selectievakje', + value : 'Waarde', + selected : 'Geselecteerd' + }, + + // Form Dialog. + form : + { + title : 'Eigenschappen formulier', + menu : 'Eigenschappen formulier', + action : 'Actie', + method : 'Methode', + encoding : 'Codering' + }, + + // Select Field Dialog. + select : + { + title : 'Eigenschappen selectieveld', + selectInfo : 'Informatie', + opAvail : 'Beschikbare opties', + value : 'Waarde', + size : 'Grootte', + lines : 'Regels', + chkMulti : 'Gecombineerde selecties toestaan', + opText : 'Tekst', + opValue : 'Waarde', + btnAdd : 'Toevoegen', + btnModify : 'Wijzigen', + btnUp : 'Omhoog', + btnDown : 'Omlaag', + btnSetValue : 'Als geselecteerde waarde instellen', + btnDelete : 'Verwijderen' + }, + + // Textarea Dialog. + textarea : + { + title : 'Eigenschappen tekstvak', + cols : 'Kolommen', + rows : 'Rijen' + }, + + // Text Field Dialog. + textfield : + { + title : 'Eigenschappen tekstveld', + name : 'Naam', + value : 'Waarde', + charWidth : 'Breedte (tekens)', + maxChars : 'Maximum aantal tekens', + type : 'Soort', + typeText : 'Tekst', + typePass : 'Wachtwoord' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Eigenschappen verborgen veld', + name : 'Naam', + value : 'Waarde' + }, + + // Image Dialog. + image : + { + title : 'Eigenschappen afbeelding', + titleButton : 'Eigenschappen afbeeldingsknop', + menu : 'Eigenschappen afbeelding', + infoTab : 'Informatie afbeelding', + btnUpload : 'Naar server verzenden', + upload : 'Upload', + alt : 'Alternatieve tekst', + lockRatio : 'Afmetingen vergrendelen', + resetSize : 'Afmetingen resetten', + border : 'Rand', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Geef de URL van de afbeelding', + linkTab : 'Link', + button2Img : 'Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?', + img2Button : 'Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?', + urlMissing : 'De URL naar de afbeelding ontbreekt.', + validateBorder : 'Rand moet een heel nummer zijn.', + validateHSpace : 'HSpace moet een heel nummer zijn.', + validateVSpace : 'VSpace moet een heel nummer zijn.' + }, + + // Flash Dialog + flash : + { + properties : 'Eigenschappen Flash', + propertiesTab : 'Eigenschappen', + title : 'Eigenschappen Flash', + chkPlay : 'Automatisch afspelen', + chkLoop : 'Herhalen', + chkMenu : 'Flashmenu\'s inschakelen', + chkFull : 'Schermvullend toestaan', + scale : 'Schaal', + scaleAll : 'Alles tonen', + scaleNoBorder : 'Geen rand', + scaleFit : 'Precies passend', + access : 'Script toegang', + accessAlways : 'Altijd', + accessSameDomain: 'Zelfde domeinnaam', + accessNever : 'Nooit', + alignAbsBottom : 'Absoluut-onder', + alignAbsMiddle : 'Absoluut-midden', + alignBaseline : 'Basislijn', + alignTextTop : 'Boven tekst', + quality : 'Kwaliteit', + qualityBest : 'Beste', + qualityHigh : 'Hoog', + qualityAutoHigh : 'Automatisch hoog', + qualityMedium : 'Gemiddeld', + qualityAutoLow : 'Automatisch laag', + qualityLow : 'Laag', + windowModeWindow: 'Venster', + windowModeOpaque: 'Ondoorzichtig', + windowModeTransparent : 'Doorzichtig', + windowMode : 'Venster modus', + flashvars : 'Variabelen voor Flash', + bgcolor : 'Achtergrondkleur', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'Geef de link van de URL', + validateHSpace : 'De HSpace moet een getal zijn.', + validateVSpace : 'De VSpace moet een getal zijn.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Spellingscontrole', + title : 'Spellingscontrole', + notAvailable : 'Excuses, deze dienst is momenteel niet beschikbaar.', + errorLoading : 'Er is een fout opgetreden bij het laden van de diesnt: %s.', + notInDic : 'Niet in het woordenboek', + changeTo : 'Wijzig in', + btnIgnore : 'Negeren', + btnIgnoreAll : 'Alles negeren', + btnReplace : 'Vervangen', + btnReplaceAll : 'Alles vervangen', + btnUndo : 'Ongedaan maken', + noSuggestions : '-Geen suggesties-', + progress : 'Bezig met spellingscontrole...', + noMispell : 'Klaar met spellingscontrole: geen fouten gevonden', + noChanges : 'Klaar met spellingscontrole: geen woorden aangepast', + oneChange : 'Klaar met spellingscontrole: één woord aangepast', + manyChanges : 'Klaar met spellingscontrole: %1 woorden aangepast', + ieSpellDownload : 'De spellingscontrole niet geïnstalleerd. Wilt u deze nu downloaden?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Smiley invoegen', + options : 'Smiley opties' + }, + + elementsPath : + { + eleLabel : 'Elementenpad', + eleTitle : '%1 element' + }, + + numberedlist : 'Genummerde lijst', + bulletedlist : 'Opsomming', + indent : 'Inspringen vergroten', + outdent : 'Inspringen verkleinen', + + justify : + { + left : 'Links uitlijnen', + center : 'Centreren', + right : 'Rechts uitlijnen', + block : 'Uitvullen' + }, + + blockquote : 'Citaatblok', + + clipboard : + { + title : 'Plakken', + cutError : 'De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.', + copyError : 'De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.', + pasteMsg : 'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op <strong>OK</strong>.', + securityMsg : 'Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.', + pasteArea : 'Plakgebied' + }, + + pastefromword : + { + confirmCleanup : 'De tekst die u plakte lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?', + toolbar : 'Plakken als Word-gegevens', + title : 'Plakken als Word-gegevens', + error : 'Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout' + }, + + pasteText : + { + button : 'Plakken als platte tekst', + title : 'Plakken als platte tekst' + }, + + templates : + { + button : 'Sjablonen', + title : 'Inhoud sjabonen', + options : 'Template opties', + insertOption : 'Vervang de huidige inhoud', + selectPromptMsg : 'Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):', + emptyListMsg : '(Geen sjablonen gedefinieerd)' + }, + + showBlocks : 'Toon blokken', + + stylesCombo : + { + label : 'Stijl', + panelTitle : 'Opmaakstijlen', + panelTitle1 : 'Blok stijlen', + panelTitle2 : 'In-line stijlen', + panelTitle3 : 'Object stijlen' + }, + + format : + { + label : 'Opmaak', + panelTitle : 'Opmaak', + + tag_p : 'Normaal', + tag_pre : 'Met opmaak', + tag_address : 'Adres', + tag_h1 : 'Kop 1', + tag_h2 : 'Kop 2', + tag_h3 : 'Kop 3', + tag_h4 : 'Kop 4', + tag_h5 : 'Kop 5', + tag_h6 : 'Kop 6', + tag_div : 'Normaal (DIV)' + }, + + div : + { + title : 'Div aanmaken', + toolbar : 'Div aanmaken', + cssClassInputLabel : 'Stylesheet klassen', + styleSelectLabel : 'Stijl', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Taalcode', + inlineStyleInputLabel : 'Inline stijl', + advisoryTitleInputLabel : 'informatieve titel', + langDirLabel : 'Schrijfrichting', + langDirLTRLabel : 'Links naar rechts (LTR)', + langDirRTLLabel : 'Rechts naar links (RTL)', + edit : 'Div wijzigen', + remove : 'Div verwijderen' + }, + + iframe : + { + title : 'IFrame eigenschappen', + toolbar : 'IFrame', + noUrl : 'Geef de IFrame URL in', + scrolling : 'Scrollbalken inschakelen', + border : 'Framerand tonen' + }, + + font : + { + label : 'Lettertype', + voiceLabel : 'Lettertype', + panelTitle : 'Lettertype' + }, + + fontSize : + { + label : 'Lettergrootte', + voiceLabel : 'Lettergrootte', + panelTitle : 'Lettergrootte' + }, + + colorButton : + { + textColorTitle : 'Tekstkleur', + bgColorTitle : 'Achtergrondkleur', + panelTitle : 'Kleuren', + auto : 'Automatisch', + more : 'Meer kleuren...' + }, + + colors : + { + '000' : 'Zwart', + '800000' : 'Kastanjebruin', + '8B4513' : 'Chocoladebruin', + '2F4F4F' : 'Donkerleigrijs', + '008080' : 'Blauwgroen', + '000080' : 'Marine', + '4B0082' : 'Indigo', + '696969' : 'Donkergrijs', + 'B22222' : 'Baksteen', + 'A52A2A' : 'Bruin', + 'DAA520' : 'Donkergeel', + '006400' : 'Donkergroen', + '40E0D0' : 'Turquoise', + '0000CD' : 'Middenblauw', + '800080' : 'Paars', + '808080' : 'Grijs', + 'F00' : 'Rood', + 'FF8C00' : 'Donkeroranje', + 'FFD700' : 'Goud', + '008000' : 'Groen', + '0FF' : 'Cyaan', + '00F' : 'Blauw', + 'EE82EE' : 'Violet', + 'A9A9A9' : 'Donkergrijs', + 'FFA07A' : 'Lichtzalm', + 'FFA500' : 'Oranje', + 'FFFF00' : 'Geel', + '00FF00' : 'Felgroen', + 'AFEEEE' : 'Lichtturquoise', + 'ADD8E6' : 'Lichtblauw', + 'DDA0DD' : 'Pruim', + 'D3D3D3' : 'Lichtgrijs', + 'FFF0F5' : 'Linnen', + 'FAEBD7' : 'Ivoor', + 'FFFFE0' : 'Lichtgeel', + 'F0FFF0' : 'Honingdauw', + 'F0FFFF' : 'Azuur', + 'F0F8FF' : 'Licht hemelsblauw', + 'E6E6FA' : 'Lavendel', + 'FFF' : 'Wit' + }, + + scayt : + { + title : 'Controleer de spelling tijdens het typen', + opera_title : 'Niet ondersteund door Opera', + enable : 'SCAYT inschakelen', + disable : 'SCAYT uitschakelen', + about : 'Over SCAYT', + toggle : 'SCAYT in/uitschakelen', + options : 'Opties', + langs : 'Talen', + moreSuggestions : 'Meer suggesties', + ignore : 'Negeren', + ignoreAll : 'Alles negeren', + addWord : 'Woord toevoegen', + emptyDic : 'De naam van het woordenboek mag niet leeg zijn.', + + optionsTab : 'Opties', + allCaps : 'Negeer woorden helemaal in hoofdletters', + ignoreDomainNames : 'Negeer domeinnamen', + mixedCase : 'Negeer woorden met hoofd- en kleine letters', + mixedWithDigits : 'Negeer woorden met cijfers', + + languagesTab : 'Talen', + + dictionariesTab : 'Woordenboeken', + dic_field_name : 'Naam woordenboek', + dic_create : 'Aanmaken', + dic_restore : 'Terugzetten', + dic_delete : 'Verwijderen', + dic_rename : 'Hernoemen', + dic_info : 'Initieel wordt het gebruikerswoordenboek opgeslagen in een cookie. Cookies zijn echter beperkt in grootte. Zodra het gebruikerswoordenboek het punt bereikt waarop het niet meer in een cookie opgeslagen kan worden, dan wordt het woordenboek op de server opgeslagen. Om je persoonlijke woordenboek op je eigen server op te slaan, moet je een mapnaam opgeven. Indien je al een woordenboek hebt opgeslagen, typ dan de naam en klik op de Terugzetten knop.', + + aboutTab : 'Over' + }, + + about : + { + title : 'Over CKEditor', + dlgTitle : 'Over CKEditor', + help : 'Bekijk $1 voor hulp.', + userGuide : 'CKEditor gebruiksaanwijzing', + moreInfo : 'Voor licentie informatie, bezoek onze website:', + copy : 'Copyright © $1. Alle rechten voorbehouden.' + }, + + maximize : 'Maximaliseren', + minimize : 'Minimaliseren', + + fakeobjects : + { + anchor : 'Anker', + flash : 'Flash animatie', + iframe : 'IFrame', + hiddenfield : 'Verborgen veld', + unknown : 'Onbekend object' + }, + + resize : 'Sleep om te herschalen', + + colordialog : + { + title : 'Selecteer kleur', + options : 'Kleuropties', + highlight : 'Actief', + selected : 'Geselecteerd', + clear : 'Wissen' + }, + + toolbarCollapse : 'Werkbalk inklappen', + toolbarExpand : 'Werkbalk uitklappen', + + toolbarGroups : + { + document : 'Document', + clipboard : 'Klembord/Ongedaan maken', + editing : 'Bewerken', + forms : 'Formulieren', + basicstyles : 'Basisstijlen', + paragraph : 'Paragraaf', + links : 'Links', + insert : 'Invoegen', + styles : 'Stijlen', + colors : 'Kleuren', + tools : 'Toepassingen' + }, + + bidi : + { + ltr : 'Schrijfrichting van links naar rechts', + rtl : 'Schrijfrichting van rechts naar links' + }, + + docprops : + { + label : 'Documenteigenschappen', + title : 'Documenteigenschappen', + design : 'Ontwerp', + meta : 'Meta tags', + chooseColor : 'Kiezen', + other : 'Anders...', + docTitle : 'Paginatitel', + charset : 'Tekencodering', + charsetOther : 'Andere tekencodering', + charsetASCII : 'ASCII', + charsetCE : 'Centraal Europees', + charsetCT : 'Tranditioneel Chinees (Big5)', + charsetCR : 'Cyrillisch', + charsetGR : 'Grieks', + charsetJP : 'Japans', + charsetKR : 'Koreaans', + charsetTR : 'Turks', + charsetUN : 'Unicode (UTF-8)', + charsetWE : 'West Europees', + docType : 'Documenttype-definitie', + docTypeOther : 'Andere documenttype-definitie', + xhtmlDec : 'XHTML declaratie invoegen', + bgColor : 'Achtergrondkleur', + bgImage : 'Achtergrondafbeelding URL', + bgFixed : 'Niet-scrollend (gefixeerde) achtergrond', + txtColor : 'Tekstkleur', + margin : 'Pagina marges', + marginTop : 'Boven', + marginLeft : 'Links', + marginRight : 'Rechts', + marginBottom : 'Onder', + metaKeywords : 'Trefwoorden voor indexering (komma-gescheiden)', + metaDescription : 'Documentbeschrijving', + metaAuthor : 'Auteur', + metaCopyright : 'Auteursrechten', + previewHtml : '<p>Dit is <strong>voorbeeld tekst</strong>. Je gebruikt <a href="javascript:void(0)">CKEditor</a>.</p>' + } +}; diff --git a/_source/lang/no.js b/_source/lang/no.js new file mode 100644 index 0000000..db521e8 --- /dev/null +++ b/_source/lang/no.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Norwegian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['no'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rikteksteditor, %1, trykk ALT 0 for hjelp.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rikteksteditor', + + // Toolbar buttons without dialogs. + source : 'Kilde', + newPage : 'Ny side', + save : 'Lagre', + preview : 'ForhÃ¥ndsvis', + cut : 'Klipp ut', + copy : 'Kopier', + paste : 'Lim inn', + print : 'Skriv ut', + underline : 'Understreking', + bold : 'Fet', + italic : 'Kursiv', + selectAll : 'Merk alt', + removeFormat : 'Fjern formatering', + strike : 'Gjennomstreking', + subscript : 'Senket skrift', + superscript : 'Hevet skrift', + horizontalrule : 'Sett inn horisontal linje', + pagebreak : 'Sett inn sideskift for utskrift', + pagebreakAlt : 'Sideskift', + unlink : 'Fjern lenke', + undo : 'Angre', + redo : 'Gjør om', + + // Common messages and labels. + common : + { + browseServer : 'Bla igjennom server', + url : 'URL', + protocol : 'Protokoll', + upload : 'Last opp', + uploadSubmit : 'Send det til serveren', + image : 'Bilde', + flash : 'Flash', + form : 'Skjema', + checkbox : 'Avmerkingsboks', + radio : 'Alternativknapp', + textField : 'Tekstboks', + textarea : 'TekstomrÃ¥de', + hiddenField : 'Skjult felt', + button : 'Knapp', + select : 'Rullegardinliste', + imageButton : 'Bildeknapp', + notSet : '<ikke satt>', + id : 'Id', + name : 'Navn', + langDir : 'SprÃ¥kretning', + langDirLtr : 'Venstre til høyre (VTH)', + langDirRtl : 'Høyre til venstre (HTV)', + langCode : 'SprÃ¥kkode', + longDescr : 'Utvidet beskrivelse', + cssClass : 'Stilarkklasser', + advisoryTitle : 'Tittel', + cssStyle : 'Stil', + ok : 'OK', + cancel : 'Avbryt', + close : 'Lukk', + preview : 'ForhÃ¥ndsvis', + generalTab : 'Generelt', + advancedTab : 'Avansert', + validateNumberFailed : 'Denne verdien er ikke et tall.', + confirmNewPage : 'Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker pÃ¥ at du vil laste en ny side?', + confirmCancel : 'Noen av valgene har blitt endret. Er du sikker pÃ¥ at du vil lukke dialogen?', + options : 'Valg', + target : 'MÃ¥l', + targetNew : 'Nytt vindu (_blank)', + targetTop : 'Hele vindu (_top)', + targetSelf : 'Samme vindu (_self)', + targetParent : 'Foreldrevindu (_parent)', + langDirLTR : 'Venstre til høyre (VTH)', + langDirRTL : 'Høyre til venstre (HTV)', + styles : 'Stil', + cssClasses : 'Stilarkklasser', + width : 'Bredde', + height : 'Høyde', + align : 'Juster', + alignLeft : 'Venstre', + alignRight : 'Høyre', + alignCenter : 'Midtjuster', + alignTop : 'Topp', + alignMiddle : 'Midten', + alignBottom : 'Bunn', + invalidHeight : 'Høyde mÃ¥ være et tall.', + invalidWidth : 'Bredde mÃ¥ være et tall.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, utilgjenglig</span>' + }, + + contextmenu : + { + options : 'Alternativer for høyreklikkmeny' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Sett inn spesialtegn', + title : 'Velg spesialtegn', + options : 'Alternativer for spesialtegn' + }, + + // Link dialog. + link : + { + toolbar : 'Sett inn/Rediger lenke', + other : '<annen>', + menu : 'Rediger lenke', + title : 'Lenke', + info : 'Lenkeinfo', + target : 'MÃ¥l', + upload : 'Last opp', + advanced : 'Avansert', + type : 'Lenketype', + toUrl : 'URL', + toAnchor : 'Lenke til anker i teksten', + toEmail : 'E-post', + targetFrame : '<ramme>', + targetPopup : '<popup-vindu>', + targetFrameName : 'MÃ¥lramme', + targetPopupName : 'Navn pÃ¥ popup-vindu', + popupFeatures : 'Egenskaper for popup-vindu', + popupResizable : 'Skalerbar', + popupStatusBar : 'Statuslinje', + popupLocationBar: 'Adresselinje', + popupToolbar : 'Verktøylinje', + popupMenuBar : 'Menylinje', + popupFullScreen : 'Fullskjerm (IE)', + popupScrollBars : 'Scrollbar', + popupDependent : 'Avhenging (Netscape)', + popupLeft : 'Venstre posisjon', + popupTop : 'Topp-posisjon', + id : 'Id', + langDir : 'SprÃ¥kretning', + langDirLTR : 'Venstre til høyre (VTH)', + langDirRTL : 'Høyre til venstre (HTV)', + acccessKey : 'Aksessknapp', + name : 'Navn', + langCode : 'SprÃ¥kkode', + tabIndex : 'Tabindeks', + advisoryTitle : 'Tittel', + advisoryContentType : 'Type', + cssClasses : 'Stilarkklasser', + charset : 'Lenket tegnsett', + styles : 'Stil', + rel : 'Relationship', // MISSING + selectAnchor : 'Velg et anker', + anchorName : 'Anker etter navn', + anchorId : 'Element etter ID', + emailAddress : 'E-postadresse', + emailSubject : 'Meldingsemne', + emailBody : 'Melding', + noAnchors : '(Ingen anker i dokumentet)', + noUrl : 'Vennligst skriv inn lenkens URL', + noEmail : 'Vennligst skriv inn e-postadressen' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Sett inn/Rediger anker', + menu : 'Egenskaper for anker', + title : 'Egenskaper for anker', + name : 'Ankernavn', + errorName : 'Vennligst skriv inn ankernavnet', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Egenskaper for nummerert liste', + bulletedTitle : 'Egenskaper for punktmerket liste', + type : 'Type', + start : 'Start', + validateStartNumber :'Starten pÃ¥ listen mÃ¥ være et heltall.', + circle : 'Sirkel', + disc : 'Disk', + square : 'Firkant', + none : 'Ingen', + notset : '<ikke satt>', + armenian : 'Armensk nummerering', + georgian : 'Georgisk nummerering (an, ban, gan, osv.)', + lowerRoman : 'Romertall, smÃ¥ (i, ii, iii, iv, v, osv.)', + upperRoman : 'Romertall, store (I, II, III, IV, V, osv.)', + lowerAlpha : 'Alfabetisk, smÃ¥ (a, b, c, d, e, osv.)', + upperAlpha : 'Alfabetisk, store (A, B, C, D, E, osv.)', + lowerGreek : 'Gresk, smÃ¥ (alpha, beta, gamma, osv.)', + decimal : 'Tall (1, 2, 3, osv.)', + decimalLeadingZero : 'Tall, med førstesiffer null (01, 02, 03, osv.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Søk og erstatt', + find : 'Søk', + replace : 'Erstatt', + findWhat : 'Søk etter:', + replaceWith : 'Erstatt med:', + notFoundMsg : 'Fant ikke søketeksten.', + matchCase : 'Skill mellom store og smÃ¥ bokstaver', + matchWord : 'Bare hele ord', + matchCyclic : 'Søk i hele dokumentet', + replaceAll : 'Erstatt alle', + replaceSuccessMsg : '%1 tilfelle(r) erstattet.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabell', + title : 'Egenskaper for tabell', + menu : 'Egenskaper for tabell', + deleteTable : 'Slett tabell', + rows : 'Rader', + columns : 'Kolonner', + border : 'Rammestørrelse', + widthPx : 'piksler', + widthPc : 'prosent', + widthUnit : 'Bredde-enhet', + cellSpace : 'Cellemarg', + cellPad : 'Cellepolstring', + caption : 'Tittel', + summary : 'Sammendrag', + headers : 'Overskrifter', + headersNone : 'Ingen', + headersColumn : 'Første kolonne', + headersRow : 'Første rad', + headersBoth : 'Begge', + invalidRows : 'Antall rader mÃ¥ være et tall større enn 0.', + invalidCols : 'Antall kolonner mÃ¥ være et tall større enn 0.', + invalidBorder : 'Rammestørrelse mÃ¥ være et tall.', + invalidWidth : 'Tabellbredde mÃ¥ være et tall.', + invalidHeight : 'Tabellhøyde mÃ¥ være et tall.', + invalidCellSpacing : 'Cellemarg mÃ¥ være et tall.', + invalidCellPadding : 'Cellepolstring mÃ¥ være et tall.', + + cell : + { + menu : 'Celle', + insertBefore : 'Sett inn celle før', + insertAfter : 'Sett inn celle etter', + deleteCell : 'Slett celler', + merge : 'SlÃ¥ sammen celler', + mergeRight : 'SlÃ¥ sammen høyre', + mergeDown : 'SlÃ¥ sammen ned', + splitHorizontal : 'Del celle horisontalt', + splitVertical : 'Del celle vertikalt', + title : 'Celleegenskaper', + cellType : 'Celletype', + rowSpan : 'Radspenn', + colSpan : 'Kolonnespenn', + wordWrap : 'Tekstbrytning', + hAlign : 'Horisontal justering', + vAlign : 'Vertikal justering', + alignBaseline : 'Grunnlinje', + bgColor : 'Bakgrunnsfarge', + borderColor : 'Rammefarge', + data : 'Data', + header : 'Overskrift', + yes : 'Ja', + no : 'Nei', + invalidWidth : 'Cellebredde mÃ¥ være et tall.', + invalidHeight : 'Cellehøyde mÃ¥ være et tall.', + invalidRowSpan : 'Radspenn mÃ¥ være et heltall.', + invalidColSpan : 'Kolonnespenn mÃ¥ være et heltall.', + chooseColor : 'Velg' + }, + + row : + { + menu : 'Rader', + insertBefore : 'Sett inn rad før', + insertAfter : 'Sett inn rad etter', + deleteRow : 'Slett rader' + }, + + column : + { + menu : 'Kolonne', + insertBefore : 'Sett inn kolonne før', + insertAfter : 'Sett inn kolonne etter', + deleteColumn : 'Slett kolonner' + } + }, + + // Button Dialog. + button : + { + title : 'Egenskaper for knapp', + text : 'Tekst (verdi)', + type : 'Type', + typeBtn : 'Knapp', + typeSbm : 'Send', + typeRst : 'Nullstill' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Egenskaper for avmerkingsboks', + radioTitle : 'Egenskaper for alternativknapp', + value : 'Verdi', + selected : 'Valgt' + }, + + // Form Dialog. + form : + { + title : 'Egenskaper for skjema', + menu : 'Egenskaper for skjema', + action : 'Handling', + method : 'Metode', + encoding : 'Encoding' + }, + + // Select Field Dialog. + select : + { + title : 'Egenskaper for rullegardinliste', + selectInfo : 'Info', + opAvail : 'Tilgjenglige alternativer', + value : 'Verdi', + size : 'Størrelse', + lines : 'Linjer', + chkMulti : 'Tillat flervalg', + opText : 'Tekst', + opValue : 'Verdi', + btnAdd : 'Legg til', + btnModify : 'Endre', + btnUp : 'Opp', + btnDown : 'Ned', + btnSetValue : 'Sett som valgt', + btnDelete : 'Slett' + }, + + // Textarea Dialog. + textarea : + { + title : 'Egenskaper for tekstomrÃ¥de', + cols : 'Kolonner', + rows : 'Rader' + }, + + // Text Field Dialog. + textfield : + { + title : 'Egenskaper for tekstfelt', + name : 'Navn', + value : 'Verdi', + charWidth : 'Tegnbredde', + maxChars : 'Maks antall tegn', + type : 'Type', + typeText : 'Tekst', + typePass : 'Passord' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Egenskaper for skjult felt', + name : 'Navn', + value : 'Verdi' + }, + + // Image Dialog. + image : + { + title : 'Bildeegenskaper', + titleButton : 'Egenskaper for bildeknapp', + menu : 'Bildeegenskaper', + infoTab : 'Bildeinformasjon', + btnUpload : 'Send det til serveren', + upload : 'Last opp', + alt : 'Alternativ tekst', + lockRatio : 'LÃ¥s forhold', + resetSize : 'Tilbakestill størrelse', + border : 'Ramme', + hSpace : 'HMarg', + vSpace : 'VMarg', + alertUrl : 'Vennligst skriv bilde-urlen', + linkTab : 'Lenke', + button2Img : 'Vil du endre den valgte bildeknappen til et vanlig bilde?', + img2Button : 'Vil du endre det valgte bildet til en bildeknapp?', + urlMissing : 'Bildets adresse mangler.', + validateBorder : 'Ramme mÃ¥ være et heltall.', + validateHSpace : 'HMarg mÃ¥ være et heltall.', + validateVSpace : 'VMarg mÃ¥ være et heltall.' + }, + + // Flash Dialog + flash : + { + properties : 'Egenskaper for Flash-objekt', + propertiesTab : 'Egenskaper', + title : 'Flash-egenskaper', + chkPlay : 'Autospill', + chkLoop : 'Loop', + chkMenu : 'SlÃ¥ pÃ¥ Flash-meny', + chkFull : 'Tillat fullskjerm', + scale : 'Skaler', + scaleAll : 'Vis alt', + scaleNoBorder : 'Ingen ramme', + scaleFit : 'Skaler til Ã¥ passe', + access : 'Scripttilgang', + accessAlways : 'Alltid', + accessSameDomain: 'Samme domene', + accessNever : 'Aldri', + alignAbsBottom : 'Abs bunn', + alignAbsMiddle : 'Abs midten', + alignBaseline : 'Bunnlinje', + alignTextTop : 'Tekst topp', + quality : 'Kvalitet', + qualityBest : 'Best', + qualityHigh : 'Høy', + qualityAutoHigh : 'Auto høy', + qualityMedium : 'Medium', + qualityAutoLow : 'Auto lav', + qualityLow : 'Lav', + windowModeWindow: 'Vindu', + windowModeOpaque: 'Opaque', + windowModeTransparent : 'Gjennomsiktig', + windowMode : 'Vindumodus', + flashvars : 'Variabler for flash', + bgcolor : 'Bakgrunnsfarge', + hSpace : 'HMarg', + vSpace : 'VMarg', + validateSrc : 'Vennligst skriv inn lenkens url.', + validateHSpace : 'HMarg mÃ¥ være et tall.', + validateVSpace : 'VMarg mÃ¥ være et tall.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Stavekontroll', + title : 'Stavekontroll', + notAvailable : 'Beklager, tjenesten er utilgjenglig nÃ¥.', + errorLoading : 'Feil under lasting av applikasjonstjenestetjener: %s.', + notInDic : 'Ikke i ordboken', + changeTo : 'Endre til', + btnIgnore : 'Ignorer', + btnIgnoreAll : 'Ignorer alle', + btnReplace : 'Erstatt', + btnReplaceAll : 'Erstatt alle', + btnUndo : 'Angre', + noSuggestions : '- Ingen forslag -', + progress : 'Stavekontroll pÃ¥gÃ¥r...', + noMispell : 'Stavekontroll fullført: ingen feilstavinger funnet', + noChanges : 'Stavekontroll fullført: ingen ord endret', + oneChange : 'Stavekontroll fullført: Ett ord endret', + manyChanges : 'Stavekontroll fullført: %1 ord endret', + ieSpellDownload : 'Stavekontroll er ikke installert. Vil du laste den ned nÃ¥?' + }, + + smiley : + { + toolbar : 'Smil', + title : 'Sett inn smil', + options : 'Alternativer for smil' + }, + + elementsPath : + { + eleLabel : 'Element-sti', + eleTitle : '%1 element' + }, + + numberedlist : 'Legg til/Fjern nummerert liste', + bulletedlist : 'Legg til/Fjern punktmerket liste', + indent : 'Ãk innrykk', + outdent : 'Reduser innrykk', + + justify : + { + left : 'Venstrejuster', + center : 'Midtstill', + right : 'Høyrejuster', + block : 'Blokkjuster' + }, + + blockquote : 'Sitatblokk', + + clipboard : + { + title : 'Lim inn', + cutError : 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl/Cmd+X).', + copyError : 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl/Cmd+C).', + pasteMsg : 'Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.', + securityMsg : 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du mÃ¥ derfor lime det inn pÃ¥ nytt i dette vinduet.', + pasteArea : 'InnlimingsomrÃ¥de' + }, + + pastefromword : + { + confirmCleanup : 'Teksten du limer inn ser ut til Ã¥ være kopiert fra Word. Vil du renske den før du limer den inn?', + toolbar : 'Lim inn fra Word', + title : 'Lim inn fra Word', + error : 'Det var ikke mulig Ã¥ renske den innlimte teksten pÃ¥ grunn av en intern feil' + }, + + pasteText : + { + button : 'Lim inn som ren tekst', + title : 'Lim inn som ren tekst' + }, + + templates : + { + button : 'Maler', + title : 'Innholdsmaler', + options : 'Alternativer for mal', + insertOption : 'Erstatt gjeldende innhold', + selectPromptMsg : 'Velg malen du vil Ã¥pne i redigeringsverktøyet:', + emptyListMsg : '(Ingen maler definert)' + }, + + showBlocks : 'Vis blokker', + + stylesCombo : + { + label : 'Stil', + panelTitle : 'Stilformater', + panelTitle1 : 'Blokkstiler', + panelTitle2 : 'Inlinestiler', + panelTitle3 : 'Objektstiler' + }, + + format : + { + label : 'Format', + panelTitle : 'Avsnittsformat', + + tag_p : 'Normal', + tag_pre : 'Formatert', + tag_address : 'Adresse', + tag_h1 : 'Overskrift 1', + tag_h2 : 'Overskrift 2', + tag_h3 : 'Overskrift 3', + tag_h4 : 'Overskrift 4', + tag_h5 : 'Overskrift 5', + tag_h6 : 'Overskrift 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Sett inn Div Container', + toolbar : 'Sett inn Div Container', + cssClassInputLabel : 'Stilark-klasser', + styleSelectLabel : 'Stil', + IdInputLabel : 'Id', + languageCodeInputLabel : ' SprÃ¥kkode', + inlineStyleInputLabel : 'Inlinestiler', + advisoryTitleInputLabel : 'Tittel', + langDirLabel : 'SprÃ¥kretning', + langDirLTRLabel : 'Venstre til høyre (VTH)', + langDirRTLLabel : 'Høyre til venstre (HTV)', + edit : 'Rediger Div', + remove : 'Fjern Div' + }, + + iframe : + { + title : 'Egenskaper for IFrame', + toolbar : 'IFrame', + noUrl : 'Vennligst skriv inn URL for iframe', + scrolling : 'Aktiver scrollefelt', + border : 'Viss ramme rundt iframe' + }, + + font : + { + label : 'Skrift', + voiceLabel : 'Font', + panelTitle : 'Skrift' + }, + + fontSize : + { + label : 'Størrelse', + voiceLabel : 'Font Størrelse', + panelTitle : 'Størrelse' + }, + + colorButton : + { + textColorTitle : 'Tekstfarge', + bgColorTitle : 'Bakgrunnsfarge', + panelTitle : 'Farger', + auto : 'Automatisk', + more : 'Flere farger...' + }, + + colors : + { + '000' : 'Svart', + '800000' : 'Rødbrun', + '8B4513' : 'Salbrun', + '2F4F4F' : 'Grønnsvart', + '008080' : 'BlÃ¥grønn', + '000080' : 'MarineblÃ¥tt', + '4B0082' : 'Indigo', + '696969' : 'Mørk grÃ¥', + 'B22222' : 'Mørkerød', + 'A52A2A' : 'Brun', + 'DAA520' : 'Lys brun', + '006400' : 'Mørk grønn', + '40E0D0' : 'Turkis', + '0000CD' : 'Medium blÃ¥', + '800080' : 'Purpur', + '808080' : 'GrÃ¥', + 'F00' : 'Rød', + 'FF8C00' : 'Mørk oransje', + 'FFD700' : 'Gull', + '008000' : 'Grønn', + '0FF' : 'Cyan', + '00F' : 'BlÃ¥', + 'EE82EE' : 'Fiolett', + 'A9A9A9' : 'Svak grÃ¥', + 'FFA07A' : 'Rosa-oransje', + 'FFA500' : 'Oransje', + 'FFFF00' : 'Gul', + '00FF00' : 'Lime', + 'AFEEEE' : 'Svak turkis', + 'ADD8E6' : 'Lys BlÃ¥', + 'DDA0DD' : 'Plomme', + 'D3D3D3' : 'Lys grÃ¥', + 'FFF0F5' : 'Svak lavendelrosa', + 'FAEBD7' : 'Antikk-hvit', + 'FFFFE0' : 'Lys gul', + 'F0FFF0' : 'Honningmelon', + 'F0FFFF' : 'Svakt asurblÃ¥tt', + 'F0F8FF' : 'Svak cyan', + 'E6E6FA' : 'Lavendel', + 'FFF' : 'Hvit' + }, + + scayt : + { + title : 'Stavekontroll mens du skriver', + opera_title : 'Ikke støttet av Opera', + enable : 'SlÃ¥ pÃ¥ SCAYT', + disable : 'SlÃ¥ av SCAYT', + about : 'Om SCAYT', + toggle : 'Veksle SCAYT', + options : 'Valg', + langs : 'SprÃ¥k', + moreSuggestions : 'Flere forslag', + ignore : 'Ignorer', + ignoreAll : 'Ignorer Alle', + addWord : 'Legg til ord', + emptyDic : 'Ordboknavn bør ikke være tom.', + + optionsTab : 'Valg', + allCaps : 'Ikke kontroller ord med kun store bokstaver', + ignoreDomainNames : 'Ikke kontroller domenenavn', + mixedCase : 'Ikke kontroller ord med blandet smÃ¥ og store bokstaver', + mixedWithDigits : 'Ikke kontroller ord som inneholder tall', + + languagesTab : 'SprÃ¥k', + + dictionariesTab : 'Ordbøker', + dic_field_name : 'Ordboknavn', + dic_create : 'Opprett', + dic_restore : 'Gjenopprett', + dic_delete : 'Slett', + dic_rename : 'Gi nytt navn', + dic_info : 'Brukerordboken lagres først i en informasjonskapsel pÃ¥ din maskin, men det er en begrensning pÃ¥ hvor mye som kan lagres her. NÃ¥r ordboken blir for stor til Ã¥ lagres i en informasjonskapsel, vil vi i stedet lagre ordboken pÃ¥ vÃ¥r server. For Ã¥ lagre din personlige ordbok pÃ¥ vÃ¥r server, burde du velge et navn for ordboken din. Hvis du allerede har lagret en ordbok, vennligst skriv inn ordbokens navn og klikk pÃ¥ Gjenopprett-knappen.', + + aboutTab : 'Om' + }, + + about : + { + title : 'Om CKEditor', + dlgTitle : 'Om CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For lisensieringsinformasjon, vennligst besøk vÃ¥rt nettsted:', + copy : 'Copyright © $1. Alle rettigheter reservert.' + }, + + maximize : 'Maksimer', + minimize : 'Minimer', + + fakeobjects : + { + anchor : 'Anker', + flash : 'Flash-animasjon', + iframe : 'IFrame', + hiddenfield : 'Skjult felt', + unknown : 'Ukjent objekt' + }, + + resize : 'Dra for Ã¥ skalere', + + colordialog : + { + title : 'Velg farge', + options : 'Alternativer for farge', + highlight : 'Merk', + selected : 'Valgt', + clear : 'Tøm' + }, + + toolbarCollapse : 'Skjul verktøylinje', + toolbarExpand : 'Vis verktøylinje', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Tekstretning fra venstre til høyre', + rtl : 'Tekstretning fra høyre til venstre' + }, + + docprops : + { + label : 'Dokumentegenskaper', + title : 'Dokumentegenskaper', + design : 'Design', // MISSING + meta : 'Meta-data', + chooseColor : 'Velg', + other : '<annen>', + docTitle : 'Sidetittel', + charset : 'Tegnsett', + charsetOther : 'Annet tegnsett', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Sentraleuropeisk', + charsetCT : 'Tradisonell kinesisk(Big5)', + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Gresk', + charsetJP : 'Japansk', + charsetKR : 'Koreansk', + charsetTR : 'Tyrkisk', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Vesteuropeisk', + docType : 'Dokumenttype header', + docTypeOther : 'Annet dokumenttype header', + xhtmlDec : 'Inkluder XHTML-deklarasjon', + bgColor : 'Bakgrunnsfarge', + bgImage : 'URL for bakgrunnsbilde', + bgFixed : 'LÃ¥s bakgrunnsbilde', + txtColor : 'Tekstfarge', + margin : 'Sidemargin', + marginTop : 'Topp', + marginLeft : 'Venstre', + marginRight : 'Høyre', + marginBottom : 'Bunn', + metaKeywords : 'Dokument nøkkelord (kommaseparert)', + metaDescription : 'Dokumentbeskrivelse', + metaAuthor : 'Forfatter', + metaCopyright : 'Kopirett', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/pl.js b/_source/lang/pl.js new file mode 100644 index 0000000..eaa7ad7 --- /dev/null +++ b/_source/lang/pl.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Polish language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['pl'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Edytor tekstu sformatowanego, %1, w celu uzyskania pomocy naciÅnij ALT 0.', + + // ARIA descriptions. + toolbars : 'Paski narzÄdzi edytora', + editor : 'Edytor tekstu sformatowanego', + + // Toolbar buttons without dialogs. + source : 'ŹródÅo dokumentu', + newPage : 'Nowa strona', + save : 'Zapisz', + preview : 'PodglÄ d', + cut : 'Wytnij', + copy : 'Kopiuj', + paste : 'Wklej', + print : 'Drukuj', + underline : 'PodkreÅlenie', + bold : 'Pogrubienie', + italic : 'Kursywa', + selectAll : 'Zaznacz wszystko', + removeFormat : 'UsuÅ formatowanie', + strike : 'PrzekreÅlenie', + subscript : 'Indeks dolny', + superscript : 'Indeks górny', + horizontalrule : 'Wstaw poziomÄ liniÄ', + pagebreak : 'Wstaw pdodziaÅ strony', + pagebreakAlt : 'Wstaw podziaÅ strony', + unlink : 'UsuÅ odnoÅnik', + undo : 'Cofnij', + redo : 'Ponów', + + // Common messages and labels. + common : + { + browseServer : 'PrzeglÄ daj', + url : 'Adres URL', + protocol : 'ProtokóÅ', + upload : 'WyÅlij', + uploadSubmit : 'WyÅlij', + image : 'Obrazek', + flash : 'Flash', + form : 'Formularz', + checkbox : 'Pole wyboru (checkbox)', + radio : 'Przycisk opcji (radio)', + textField : 'Pole tekstowe', + textarea : 'Obszar tekstowy', + hiddenField : 'Pole ukryte', + button : 'Przycisk', + select : 'Lista wyboru', + imageButton : 'Przycisk graficzny', + notSet : '<nie ustawiono>', + id : 'Id', + name : 'Nazwa', + langDir : 'Kierunek tekstu', + langDirLtr : 'Od lewej do prawej (LTR)', + langDirRtl : 'Od prawej do lewej (RTL)', + langCode : 'Kod jÄzyka', + longDescr : 'Adres URL dÅugiego opisu', + cssClass : 'Nazwa klasy CSS', + advisoryTitle : 'Opis obiektu docelowego', + cssStyle : 'Styl', + ok : 'OK', + cancel : 'Anuluj', + close : 'Zamknij', + preview : 'PodglÄ d', + generalTab : 'Ogólne', + advancedTab : 'Zaawansowane', + validateNumberFailed : 'Ta wartoÅÄ nie jest liczbÄ .', + confirmNewPage : 'Wszystkie niezapisane zmiany zostanÄ utracone. Czy na pewno wczytaÄ nowÄ stronÄ?', + confirmCancel : 'Pewne opcje zostaÅy zmienione. Czy na pewno zamknÄ Ä okno dialogowe?', + options : 'Opcje', + target : 'Obiekt docelowy', + targetNew : 'Nowe okno (_blank)', + targetTop : 'Okno najwyżej w hierarchii (_top)', + targetSelf : 'To samo okno (_self)', + targetParent : 'Okno nadrzÄdne (_parent)', + langDirLTR : 'Od lewej do prawej (LTR)', + langDirRTL : 'Od prawej do lewej (RTL)', + styles : 'Style', + cssClasses : 'Klasy arkusza stylów', + width : 'SzerokoÅÄ', + height : 'WysokoÅÄ', + align : 'Wyrównaj', + alignLeft : 'Do lewej', + alignRight : 'Do prawej', + alignCenter : 'Do Årodka', + alignTop : 'Do góry', + alignMiddle : 'Do Årodka', + alignBottom : 'Do doÅu', + invalidHeight : 'WysokoÅÄ musi byÄ liczbÄ .', + invalidWidth : 'SzerokoÅÄ musi byÄ liczbÄ .', + invalidCssLength : 'WartoÅÄ podana dla pola "%1" musi byÄ liczbÄ dodatniÄ bez jednostki lub z poprawnÄ jednostkÄ dÅugoÅci zgodnÄ z CSS (px, %, in, cm, mm, em, ex, pt lub pc).', + invalidHtmlLength : 'WartoÅÄ podana dla pola "%1" musi byÄ liczbÄ dodatniÄ bez jednostki lub z poprawnÄ jednostkÄ dÅugoÅci zgodnÄ z HTML (px lub %).', + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, niedostÄpne</span>' + }, + + contextmenu : + { + options : 'Opcje menu kontekstowego' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Wstaw znak specjalny', + title : 'Wybierz znak specjalny', + options : 'Opcje znaków specjalnych' + }, + + // Link dialog. + link : + { + toolbar : 'Wstaw/edytuj odnoÅnik', + other : '<inny>', + menu : 'Edytuj odnoÅnik', + title : 'OdnoÅnik', + info : 'Informacje ', + target : 'Obiekt docelowy', + upload : 'WyÅlij', + advanced : 'Zaawansowane', + type : 'Typ odnoÅnika', + toUrl : 'Adres URL', + toAnchor : 'OdnoÅnik wewnÄ trz strony (kotwica)', + toEmail : 'Adres e-mail', + targetFrame : '<ramka>', + targetPopup : '<wyskakujÄ ce okno>', + targetFrameName : 'Nazwa ramki docelowej', + targetPopupName : 'Nazwa wyskakujÄ cego okna', + popupFeatures : 'WÅaÅciwoÅci wyskakujÄ cego okna', + popupResizable : 'Skalowalny', + popupStatusBar : 'Pasek statusu', + popupLocationBar: 'Pasek adresu', + popupToolbar : 'Pasek narzÄdzi', + popupMenuBar : 'Pasek menu', + popupFullScreen : 'PeÅny ekran (IE)', + popupScrollBars : 'Paski przewijania', + popupDependent : 'Okno zależne (Netscape)', + popupLeft : 'Pozycja w poziomie', + popupTop : 'Pozycja w pionie', + id : 'Id', + langDir : 'Kierunek tekstu', + langDirLTR : 'Od lewej do prawej (LTR)', + langDirRTL : 'Od prawej do lewej (RTL)', + acccessKey : 'Klawisz dostÄpu', + name : 'Nazwa', + langCode : 'Kod jÄzyka', + tabIndex : 'Indeks kolejnoÅci', + advisoryTitle : 'Opis obiektu docelowego', + advisoryContentType : 'Typ MIME obiektu docelowego', + cssClasses : 'Nazwa klasy CSS', + charset : 'Kodowanie znaków obiektu docelowego', + styles : 'Styl', + rel : 'Relacja', + selectAnchor : 'Wybierz kotwicÄ', + anchorName : 'Wg nazwy', + anchorId : 'Wg identyfikatora', + emailAddress : 'Adres e-mail', + emailSubject : 'Temat', + emailBody : 'TreÅÄ', + noAnchors : '(W dokumencie nie zdefiniowano żadnych kotwic)', + noUrl : 'Podaj adres URL', + noEmail : 'Podaj adres e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Wstaw/edytuj kotwicÄ', + menu : 'WÅaÅciwoÅci kotwicy', + title : 'WÅaÅciwoÅci kotwicy', + name : 'Nazwa kotwicy', + errorName : 'Wpisz nazwÄ kotwicy', + remove : 'UsuÅ kotwicÄ' + }, + + // List style dialog + list: + { + numberedTitle : 'WÅaÅciwoÅci list numerowanych', + bulletedTitle : 'WÅaÅciwoÅci list wypunktowanych', + type : 'Typ punktora', + start : 'PoczÄ tek', + validateStartNumber :'ListÄ musi rozpoczynaÄ liczba caÅkowita.', + circle : 'KoÅo', + disc : 'OkrÄ g', + square : 'Kwadrat', + none : 'Brak', + notset : '<nie ustawiono>', + armenian : 'Numerowanie armeÅskie', + georgian : 'Numerowanie gruziÅskie (an, ban, gan itd.)', + lowerRoman : 'MaÅe cyfry rzymskie (i, ii, iii, iv, v itd.)', + upperRoman : 'Duże cyfry rzymskie (I, II, III, IV, V itd.)', + lowerAlpha : 'MaÅe litery (a, b, c, d, e itd.)', + upperAlpha : 'Duże litery (A, B, C, D, E itd.)', + lowerGreek : 'MaÅe litery greckie (alpha, beta, gamma itd.)', + decimal : 'Liczby (1, 2, 3 itd.)', + decimalLeadingZero : 'Liczby z poczÄ tkowym zerem (01, 02, 03 itd.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Znajdź i zamieÅ', + find : 'Znajdź', + replace : 'ZamieÅ', + findWhat : 'Znajdź:', + replaceWith : 'ZastÄ p przez:', + notFoundMsg : 'Nie znaleziono szukanego hasÅa.', + matchCase : 'UwzglÄdnij wielkoÅÄ liter', + matchWord : 'CaÅe sÅowa', + matchCyclic : 'Cykliczne dopasowanie', + replaceAll : 'ZamieÅ wszystko', + replaceSuccessMsg : '%1 wystÄ pieÅ zastÄ pionych.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabela', + title : 'WÅaÅciwoÅci tabeli', + menu : 'WÅaÅciwoÅci tabeli', + deleteTable : 'UsuÅ tabelÄ', + rows : 'Liczba wierszy', + columns : 'Liczba kolumn', + border : 'GruboÅÄ obramowania', + widthPx : 'piksele', + widthPc : '%', + widthUnit : 'jednostka szerokoÅci', + cellSpace : 'OdstÄp pomiÄdzy komórkami', + cellPad : 'DopeÅnienie komórek', + caption : 'TytuÅ', + summary : 'Podsumowanie', + headers : 'NagÅówki', + headersNone : 'Brak', + headersColumn : 'Pierwsza kolumna', + headersRow : 'Pierwszy wiersz', + headersBoth : 'Oba', + invalidRows : 'Liczba wierszy musi byÄ wiÄksza niż 0.', + invalidCols : 'Liczba kolumn musi byÄ wiÄksza niż 0.', + invalidBorder : 'WartoÅÄ obramowania musi byÄ liczbÄ .', + invalidWidth : 'SzerokoÅÄ tabeli musi byÄ liczbÄ .', + invalidHeight : 'WysokoÅÄ tabeli musi byÄ liczbÄ .', + invalidCellSpacing : 'OdstÄp pomiÄdzy komórkami musi byÄ liczbÄ dodatniÄ .', + invalidCellPadding : 'DopeÅnienie komórek musi byÄ liczbÄ dodatniÄ .', + + cell : + { + menu : 'Komórka', + insertBefore : 'Wstaw komórkÄ z lewej', + insertAfter : 'Wstaw komórkÄ z prawej', + deleteCell : 'UsuÅ komórki', + merge : 'PoÅÄ cz komórki', + mergeRight : 'PoÅÄ cz z komórkÄ z prawej', + mergeDown : 'PoÅÄ cz z komórkÄ poniżej', + splitHorizontal : 'Podziel komórkÄ poziomo', + splitVertical : 'Podziel komórkÄ pionowo', + title : 'WÅaÅciwoÅci komórki', + cellType : 'Typ komórki', + rowSpan : 'Scalenie wierszy', + colSpan : 'Scalenie komórek', + wordWrap : 'Zawijanie sÅów', + hAlign : 'Wyrównanie poziome', + vAlign : 'Wyrównanie pionowe', + alignBaseline : 'Linia bazowa', + bgColor : 'Kolor tÅa', + borderColor : 'Kolor obramowania', + data : 'Dane', + header : 'NagÅowek', + yes : 'Tak', + no : 'Nie', + invalidWidth : 'SzerokoÅÄ komórki musi byÄ liczbÄ .', + invalidHeight : 'WysokoÅÄ komórki musi byÄ liczbÄ .', + invalidRowSpan : 'Scalenie wierszy musi byÄ liczbÄ caÅkowitÄ .', + invalidColSpan : 'Scalenie komórek musi byÄ liczbÄ caÅkowitÄ .', + chooseColor : 'Wybierz' + }, + + row : + { + menu : 'Wiersz', + insertBefore : 'Wstaw wiersz powyżej', + insertAfter : 'Wstaw wiersz poniżej', + deleteRow : 'UsuÅ wiersze' + }, + + column : + { + menu : 'Kolumna', + insertBefore : 'Wstaw kolumnÄ z lewej', + insertAfter : 'Wstaw kolumnÄ z prawej', + deleteColumn : 'UsuÅ kolumny' + } + }, + + // Button Dialog. + button : + { + title : 'WÅaÅciwoÅci przycisku', + text : 'Tekst (WartoÅÄ)', + type : 'Typ', + typeBtn : 'Przycisk', + typeSbm : 'WyÅlij', + typeRst : 'WyczyÅÄ' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'WÅaÅciwoÅci pola wyboru (checkbox)', + radioTitle : 'WÅaÅciwoÅci przycisku opcji (radio)', + value : 'WartoÅÄ', + selected : 'Zaznaczone' + }, + + // Form Dialog. + form : + { + title : 'WÅaÅciwoÅci formularza', + menu : 'WÅaÅciwoÅci formularza', + action : 'Akcja', + method : 'Metoda', + encoding : 'Kodowanie' + }, + + // Select Field Dialog. + select : + { + title : 'WÅaÅciwoÅci listy wyboru', + selectInfo : 'Informacje', + opAvail : 'DostÄpne opcje', + value : 'WartoÅÄ', + size : 'Rozmiar', + lines : 'wierszy', + chkMulti : 'Wielokrotny wybór', + opText : 'Tekst', + opValue : 'WartoÅÄ', + btnAdd : 'Dodaj', + btnModify : 'ZmieÅ', + btnUp : 'Do góry', + btnDown : 'Do doÅu', + btnSetValue : 'Ustaw jako zaznaczonÄ ', + btnDelete : 'UsuÅ' + }, + + // Textarea Dialog. + textarea : + { + title : 'WÅaÅciwoÅci obszaru tekstowego', + cols : 'Liczba kolumn', + rows : 'Liczba wierszy' + }, + + // Text Field Dialog. + textfield : + { + title : 'WÅaÅciwoÅci pola tekstowego', + name : 'Nazwa', + value : 'WartoÅÄ', + charWidth : 'SzerokoÅÄ w znakach', + maxChars : 'SzerokoÅÄ maksymalna', + type : 'Typ', + typeText : 'Tekst', + typePass : 'HasÅo' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'WÅaÅciwoÅci pola ukrytego', + name : 'Nazwa', + value : 'WartoÅÄ' + }, + + // Image Dialog. + image : + { + title : 'WÅaÅciwoÅci obrazka', + titleButton : 'WÅaÅciwoÅci przycisku graficznego', + menu : 'WÅaÅciwoÅci obrazka', + infoTab : 'Informacje o obrazku', + btnUpload : 'WyÅlij', + upload : 'WyÅlij', + alt : 'Tekst zastÄpczy', + lockRatio : 'Zablokuj proporcje', + resetSize : 'PrzywrÃ³Ä rozmiar', + border : 'Obramowanie', + hSpace : 'OdstÄp poziomy', + vSpace : 'OdstÄp pionowy', + alertUrl : 'Podaj adres obrazka.', + linkTab : 'HiperÅÄ cze', + button2Img : 'Czy chcesz przekonwertowaÄ zaznaczony przycisk graficzny do zwykÅego obrazka?', + img2Button : 'Czy chcesz przekonwertowaÄ zaznaczony obrazek do przycisku graficznego?', + urlMissing : 'Podaj adres URL obrazka.', + validateBorder : 'WartoÅÄ obramowania musi byÄ liczbÄ caÅkowitÄ .', + validateHSpace : 'WartoÅÄ odstÄpu poziomego musi byÄ liczbÄ caÅkowitÄ .', + validateVSpace : 'WartoÅÄ odstÄpu pionowego musi byÄ liczbÄ caÅkowitÄ .' + }, + + // Flash Dialog + flash : + { + properties : 'WÅaÅciwoÅci obiektu Flash', + propertiesTab : 'WÅaÅciwoÅci', + title : 'WÅaÅciwoÅci obiektu Flash', + chkPlay : 'Autoodtwarzanie', + chkLoop : 'PÄtla', + chkMenu : 'WÅÄ cz menu', + chkFull : 'Zezwól na peÅny ekran', + scale : 'Skaluj', + scaleAll : 'Pokaż wszystko', + scaleNoBorder : 'Bez obramowania', + scaleFit : 'DokÅadne dopasowanie', + access : 'DostÄp skryptów', + accessAlways : 'Zawsze', + accessSameDomain: 'Ta sama domena', + accessNever : 'Nigdy', + alignAbsBottom : 'Do doÅu', + alignAbsMiddle : 'Do Årodka w pionie', + alignBaseline : 'Do linii bazowej', + alignTextTop : 'Do góry tekstu', + quality : 'JakoÅÄ', + qualityBest : 'Najlepsza', + qualityHigh : 'Wysoka', + qualityAutoHigh : 'Auto wysoka', + qualityMedium : 'Årednia', + qualityAutoLow : 'Auto niska', + qualityLow : 'Niska', + windowModeWindow: 'Okno', + windowModeOpaque: 'Nieprzezroczyste', + windowModeTransparent : 'Przezroczyste', + windowMode : 'Tryb okna', + flashvars : 'Zmienne obiektu Flash', + bgcolor : 'Kolor tÅa', + hSpace : 'OdstÄp poziomy', + vSpace : 'OdstÄp pionowy', + validateSrc : 'Podaj adres URL', + validateHSpace : 'OdstÄp poziomy musi byÄ liczbÄ .', + validateVSpace : 'OdstÄp pionowy musi byÄ liczbÄ .' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Sprawdź pisowniÄ', + title : 'Sprawdź pisowniÄ', + notAvailable : 'Przepraszamy, ale usÅuga jest obecnie niedostÄpna.', + errorLoading : 'BÅÄ d wczytywania hosta aplikacji usÅugi: %s.', + notInDic : 'SÅowa nie ma w sÅowniku', + changeTo : 'ZmieÅ na', + btnIgnore : 'Ignoruj', + btnIgnoreAll : 'Ignoruj wszystkie', + btnReplace : 'ZmieÅ', + btnReplaceAll : 'ZmieÅ wszystkie', + btnUndo : 'Cofnij', + noSuggestions : '- Brak sugestii -', + progress : 'Trwa sprawdzanie...', + noMispell : 'Sprawdzanie zakoÅczone: nie znaleziono bÅÄdów', + noChanges : 'Sprawdzanie zakoÅczone: nie zmieniono żadnego sÅowa', + oneChange : 'Sprawdzanie zakoÅczone: zmieniono jedno sÅowo', + manyChanges : 'Sprawdzanie zakoÅczone: zmieniono %l sÅów', + ieSpellDownload : 'SÅownik nie jest zainstalowany. Czy chcesz go pobraÄ?' + }, + + smiley : + { + toolbar : 'Emotikony', + title : 'Wstaw emotikona', + options : 'Opcje emotikonów' + }, + + elementsPath : + { + eleLabel : 'Åcieżka elementów', + eleTitle : 'element %1' + }, + + numberedlist : 'Lista numerowana', + bulletedlist : 'Lista wypunktowana', + indent : 'ZwiÄksz wciÄcie', + outdent : 'Zmniejsz wciÄcie', + + justify : + { + left : 'Wyrównaj do lewej', + center : 'WyÅrodkuj', + right : 'Wyrównaj do prawej', + block : 'Wyjustuj' + }, + + blockquote : 'Cytat', + + clipboard : + { + title : 'Wklej', + cutError : 'Ustawienia bezpieczeÅstwa Twojej przeglÄ darki nie pozwalajÄ na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.', + copyError : 'Ustawienia bezpieczeÅstwa Twojej przeglÄ darki nie pozwalajÄ na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.', + pasteMsg : 'Wklej tekst w poniższym polu, używajÄ c skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.', + securityMsg : 'Zabezpieczenia przeglÄ darki uniemożliwiajÄ wklejenie danych bezpoÅrednio do edytora. ProszÄ ponownie wkleiÄ dane w tym oknie.', + pasteArea : 'Obszar wklejania' + }, + + pastefromword : + { + confirmCleanup : 'Tekst, który chcesz wkleiÄ, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyÅciÄ przed wklejeniem?', + toolbar : 'Wklej z programu MS Word', + title : 'Wklej z programu MS Word', + error : 'Wyczyszczenie wklejonych danych nie byÅo możliwe z powodu wystÄ pienia bÅÄdu.' + }, + + pasteText : + { + button : 'Wklej jako czysty tekst', + title : 'Wklej jako czysty tekst' + }, + + templates : + { + button : 'Szablony', + title : 'Szablony zawartoÅci', + options : 'Opcje szablonów', + insertOption : 'ZastÄ p obecnÄ zawartoÅÄ', + selectPromptMsg : 'Wybierz szablon do otwarcia w edytorze<br>(obecna zawartoÅÄ okna edytora zostanie utracona):', + emptyListMsg : '(Brak zdefiniowanych szablonów)' + }, + + showBlocks : 'Pokaż bloki', + + stylesCombo : + { + label : 'Styl', + panelTitle : 'Style formatujÄ ce', + panelTitle1 : 'Style blokowe', + panelTitle2 : 'Style liniowe', + panelTitle3 : 'Style obiektowe' + }, + + format : + { + label : 'Format', + panelTitle : 'Format', + + tag_p : 'Normalny', + tag_pre : 'Tekst sformatowany', + tag_address : 'Adres', + tag_h1 : 'NagÅówek 1', + tag_h2 : 'NagÅówek 2', + tag_h3 : 'NagÅówek 3', + tag_h4 : 'NagÅówek 4', + tag_h5 : 'NagÅówek 5', + tag_h6 : 'NagÅówek 6', + tag_div : 'Normalny (DIV)' + }, + + div : + { + title : 'Utwórz pojemnik Div', + toolbar : 'Utwórz pojemnik Div', + cssClassInputLabel : 'Klasy arkusza stylów', + styleSelectLabel : 'Styl', + IdInputLabel : 'Id', + languageCodeInputLabel : 'Kod jÄzyka', + inlineStyleInputLabel : 'Style liniowe', + advisoryTitleInputLabel : 'Opis obiektu docelowego', + langDirLabel : 'Kierunek tekstu', + langDirLTRLabel : 'Od lewej do prawej (LTR)', + langDirRTLLabel : 'Od prawej do lewej (RTL)', + edit : 'Edytuj pojemnik Div', + remove : 'UsuÅ pojemnik Div' + }, + + iframe : + { + title : 'WÅaÅciwoÅci elementu IFrame', + toolbar : 'IFrame', + noUrl : 'Podaj adres URL elementu IFrame', + scrolling : 'WÅÄ cz paski przewijania', + border : 'Pokaż obramowanie obiektu IFrame' + }, + + font : + { + label : 'Czcionka', + voiceLabel : 'Czcionka', + panelTitle : 'Czcionka' + }, + + fontSize : + { + label : 'Rozmiar', + voiceLabel : 'Rozmiar czcionki', + panelTitle : 'Rozmiar' + }, + + colorButton : + { + textColorTitle : 'Kolor tekstu', + bgColorTitle : 'Kolor tÅa', + panelTitle : 'Kolory', + auto : 'Automatycznie', + more : 'WiÄcej kolorów...' + }, + + colors : + { + '000' : 'Czarny', + '800000' : 'Kasztanowy', + '8B4513' : 'Czekoladowy', + '2F4F4F' : 'Ciemnografitowy', + '008080' : 'Morski', + '000080' : 'Granatowy', + '4B0082' : 'Indygo', + '696969' : 'Ciemnoszary', + 'B22222' : 'CzerwieŠżelazowa', + 'A52A2A' : 'BrÄ zowy', + 'DAA520' : 'CiemnozÅoty', + '006400' : 'Ciemnozielony', + '40E0D0' : 'Turkusowy', + '0000CD' : 'Ciemnoniebieski', + '800080' : 'Purpurowy', + '808080' : 'Szary', + 'F00' : 'Czerwony', + 'FF8C00' : 'CiemnopomaraÅczowy', + 'FFD700' : 'ZÅoty', + '008000' : 'Zielony', + '0FF' : 'Cyjan', + '00F' : 'Niebieski', + 'EE82EE' : 'Fioletowy', + 'A9A9A9' : 'Przygaszony szary', + 'FFA07A' : 'Åososiowy', + 'FFA500' : 'PomaraÅczowy', + 'FFFF00' : 'ŻóÅty', + '00FF00' : 'Limonkowy', + 'AFEEEE' : 'Bladoturkusowy', + 'ADD8E6' : 'Jasnoniebieski', + 'DDA0DD' : 'Åliwkowy', + 'D3D3D3' : 'Jasnoszary', + 'FFF0F5' : 'Jasnolawendowy', + 'FAEBD7' : 'KremowobiaÅy', + 'FFFFE0' : 'JasnożóÅty', + 'F0FFF0' : 'Bladozielony', + 'F0FFFF' : 'Jasnolazurowy', + 'F0F8FF' : 'JasnobÅÄkitny', + 'E6E6FA' : 'Lawendowy', + 'FFF' : 'BiaÅy' + }, + + scayt : + { + title : 'Sprawdź pisowniÄ podczas pisania (SCAYT)', + opera_title : 'Funkcja nie jest obsÅugiwana przez przeglÄ darkÄ Opera', + enable : 'WÅÄ cz SCAYT', + disable : 'WyÅÄ cz SCAYT', + about : 'Informacje o SCAYT', + toggle : 'PrzeÅÄ cz SCAYT', + options : 'Opcje', + langs : 'JÄzyki', + moreSuggestions : 'WiÄcej sugestii', + ignore : 'Ignoruj', + ignoreAll : 'Ignoruj wszystkie', + addWord : 'Dodaj sÅowo', + emptyDic : 'Nazwa sÅownika nie może byÄ pusta.', + + optionsTab : 'Opcje', + allCaps : 'Ignoruj wyrazy pisane dużymi literami', + ignoreDomainNames : 'Ignoruj nazwy domen', + mixedCase : 'Ignoruj wyrazy pisane dużymi i maÅymi literami', + mixedWithDigits : 'Ignoruj wyrazy zawierajÄ ce cyfry', + + languagesTab : 'JÄzyki', + + dictionariesTab : 'SÅowniki', + dic_field_name : 'Nazwa sÅownika', + dic_create : 'Utwórz', + dic_restore : 'PrzywróÄ', + dic_delete : 'UsuÅ', + dic_rename : 'ZmieÅ nazwÄ', + dic_info : 'PoczÄ tkowo sÅownik użytkownika przechowywany jest w cookie. Pliki cookie majÄ jednak ograniczonÄ pojemnoÅÄ. JeÅli sÅownik użytkownika przekroczy wielkoÅÄ dopuszczalnÄ dla pliku cookie, możliwe jest przechowanie go na naszym serwerze. W celu zapisania sÅownika na serwerze niezbÄdne jest nadanie mu nazwy. JeÅli sÅownik zostaÅ już zapisany na serwerze, wystarczy podaÄ jego nazwÄ i nacisnÄ Ä przycisk PrzywróÄ.', + + aboutTab : 'Informacje o SCAYT' + }, + + about : + { + title : 'Informacje o programie CKEditor', + dlgTitle : 'Informacje o programie CKEditor', + help : 'Pomoc znajdziesz w $1.', + userGuide : 'podrÄczniku użytkownika programu CKEditor', + moreInfo : 'Informacje na temat licencji można znaleÅºÄ na naszej stronie:', + copy : 'Copyright © $1. Wszelkie prawa zastrzeżone.' + }, + + maximize : 'Maksymalizuj', + minimize : 'Minimalizuj', + + fakeobjects : + { + anchor : 'Kotwica', + flash : 'Animacja Flash', + iframe : 'IFrame', + hiddenfield : 'Pole ukryte', + unknown : 'Nieznany obiekt' + }, + + resize : 'PrzeciÄ gnij, aby zmieniÄ rozmiar', + + colordialog : + { + title : 'Wybierz kolor', + options : 'Opcje koloru', + highlight : 'Zaznacz', + selected : 'Wybrany', + clear : 'WyczyÅÄ' + }, + + toolbarCollapse : 'ZwiÅ pasek narzÄdzi', + toolbarExpand : 'RozwiÅ pasek narzÄdzi', + + toolbarGroups : + { + document : 'Dokument', + clipboard : 'Schowek/Wstecz', + editing : 'Edycja', + forms : 'Formularze', + basicstyles : 'Style podstawowe', + paragraph : 'Akapit', + links : 'HiperÅÄ cza', + insert : 'Wstawianie', + styles : 'Style', + colors : 'Kolory', + tools : 'NarzÄdzia' + }, + + bidi : + { + ltr : 'Kierunek tekstu od lewej strony do prawej', + rtl : 'Kierunek tekstu od prawej strony do lewej' + }, + + docprops : + { + label : 'WÅaÅciwoÅci dokumentu', + title : 'WÅaÅciwoÅci dokumentu', + design : 'Projekt strony', + meta : 'Znaczniki meta', + chooseColor : 'Wybierz', + other : 'Inne', + docTitle : 'TytuÅ strony', + charset : 'Kodowanie znaków', + charsetOther : 'Inne kodowanie znaków', + charsetASCII : 'ASCII', + charsetCE : 'Årodkowoeuropejskie', + charsetCT : 'ChiÅskie tradycyjne (Big5)', + charsetCR : 'Cyrylica', + charsetGR : 'Greckie', + charsetJP : 'JapoÅskie', + charsetKR : 'KoreaÅskie', + charsetTR : 'Tureckie', + charsetUN : 'Unicode (UTF-8)', + charsetWE : 'Zachodnioeuropejskie', + docType : 'Definicja typu dokumentu', + docTypeOther : 'Inna definicja typu dokumentu', + xhtmlDec : 'UwzglÄdnij deklaracje XHTML', + bgColor : 'Kolor tÅa', + bgImage : 'Adres URL obrazka tÅa', + bgFixed : 'TÅo nieruchome (nieprzewijajÄ ce siÄ)', + txtColor : 'Kolor tekstu', + margin : 'Marginesy strony', + marginTop : 'Górny', + marginLeft : 'Lewy', + marginRight : 'Prawy', + marginBottom : 'Dolny', + metaKeywords : 'SÅowa kluczowe dokumentu (oddzielone przecinkami)', + metaDescription : 'Opis dokumentu', + metaAuthor : 'Autor', + metaCopyright : 'Prawa autorskie', + previewHtml : '<p>To jest <strong>przykÅadowy tekst</strong>. Korzystasz z programu <a href="javascript:void(0)">CKEditor</a>.</p>' + } +}; diff --git a/_source/lang/pt-br.js b/_source/lang/pt-br.js new file mode 100644 index 0000000..9143da5 --- /dev/null +++ b/_source/lang/pt-br.js @@ -0,0 +1,811 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** +* @fileOverview +*/ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['pt-br'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Editor de Texto, %1, pressione ALT 0 para obter ajuda.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Editor de Texto', + + // Toolbar buttons without dialogs. + source : 'Código-Fonte', + newPage : 'Novo', + save : 'Salvar', + preview : 'Visualizar', + cut : 'Recortar', + copy : 'Copiar', + paste : 'Colar', + print : 'Imprimir', + underline : 'Sublinhado', + bold : 'Negrito', + italic : 'Itálico', + selectAll : 'Selecionar Tudo', + removeFormat : 'Remover Formatação', + strike : 'Tachado', + subscript : 'Subscrito', + superscript : 'Sobrescrito', + horizontalrule : 'Inserir Linha Horizontal', + pagebreak : 'Inserir Quebra de Página', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Remover Link', + undo : 'Desfazer', + redo : 'Refazer', + + // Common messages and labels. + common : + { + browseServer : 'Localizar no Servidor', + url : 'URL', + protocol : 'Protocolo', + upload : 'Enviar ao Servidor', + uploadSubmit : 'Enviar para o Servidor', + image : 'Imagem', + flash : 'Flash', + form : 'Formulário', + checkbox : 'Caixa de Seleção', + radio : 'Botão de Opção', + textField : 'Caixa de Texto', + textarea : 'Ãrea de Texto', + hiddenField : 'Campo Oculto', + button : 'Botão', + select : 'Caixa de Listagem', + imageButton : 'Botão de Imagem', + notSet : '<não ajustado>', + id : 'Id', + name : 'Nome', + langDir : 'Direção do idioma', + langDirLtr : 'Esquerda para Direita (LTR)', + langDirRtl : 'Direita para Esquerda (RTL)', + langCode : 'Idioma', + longDescr : 'Descrição da URL', + cssClass : 'Classe de CSS', + advisoryTitle : 'TÃtulo', + cssStyle : 'Estilos', + ok : 'OK', + cancel : 'Cancelar', + close : 'Fechar', + preview : 'Visualizar', + generalTab : 'Geral', + advancedTab : 'Avançado', + validateNumberFailed : 'Este valor não é um número.', + confirmNewPage : 'Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?', + confirmCancel : 'Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?', + options : 'Opções', + target : 'Destino', + targetNew : 'Nova Janela (_blank)', + targetTop : 'Janela de Cima (_top)', + targetSelf : 'Mesma Janela (_self)', + targetParent : 'Janela Pai (_parent)', + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Largura', + height : 'Altura', + align : 'Alinhamento', + alignLeft : 'Esquerda', + alignRight : 'Direita', + alignCenter : 'Centralizado', + alignTop : 'Superior', + alignMiddle : 'Centralizado', + alignBottom : 'Inferior', + invalidHeight : 'A altura tem que ser um número', + invalidWidth : 'A largura tem que ser um número.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, indisponÃvel</span>' + }, + + contextmenu : + { + options : 'Opções Menu de Contexto' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Inserir Caractere Especial', + title : 'Selecione um Caractere Especial', + options : 'Opções de Caractere Especial' + }, + + // Link dialog. + link : + { + toolbar : 'Inserir/Editar Link', + other : '<outro>', + menu : 'Editar Link', + title : 'Editar Link', + info : 'Informações', + target : 'Destino', + upload : 'Enviar ao Servidor', + advanced : 'Avançado', + type : 'Tipo de hiperlink', + toUrl : 'URL', + toAnchor : 'Ãncora nesta página', + toEmail : 'E-Mail', + targetFrame : '<frame>', + targetPopup : '<janela popup>', + targetFrameName : 'Nome do Frame de Destino', + targetPopupName : 'Nome da Janela Pop-up', + popupFeatures : 'Propriedades da Janela Pop-up', + popupResizable : 'Redimensionável', + popupStatusBar : 'Barra de Status', + popupLocationBar: 'Barra de Endereços', + popupToolbar : 'Barra de Ferramentas', + popupMenuBar : 'Barra de Menus', + popupFullScreen : 'Modo Tela Cheia (IE)', + popupScrollBars : 'Barras de Rolagem', + popupDependent : 'Dependente (Netscape)', + popupLeft : 'Esquerda', + popupTop : 'Topo', + id : 'Id', + langDir : 'Direção do idioma', + langDirLTR : 'Esquerda para Direita (LTR)', + langDirRTL : 'Direita para Esquerda (RTL)', + acccessKey : 'Chave de Acesso', + name : 'Nome', + langCode : 'Direção do idioma', + tabIndex : 'Ãndice de Tabulação', + advisoryTitle : 'TÃtulo', + advisoryContentType : 'Tipo de Conteúdo', + cssClasses : 'Classe de CSS', + charset : 'Charset do Link', + styles : 'Estilos', + rel : 'Relationship', // MISSING + selectAnchor : 'Selecione uma âncora', + anchorName : 'Nome da âncora', + anchorId : 'Id da âncora', + emailAddress : 'Endereço E-Mail', + emailSubject : 'Assunto da Mensagem', + emailBody : 'Corpo da Mensagem', + noAnchors : '(Não há âncoras no documento)', + noUrl : 'Por favor, digite o endereço do Link', + noEmail : 'Por favor, digite o endereço de e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Inserir/Editar Ãncora', + menu : 'Formatar Ãncora', + title : 'Formatar Ãncora', + name : 'Nome da Ãncora', + errorName : 'Por favor, digite o nome da âncora', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Propriedades da Lista Numerada', + bulletedTitle : 'Propriedades da Lista sem Numeros', + type : 'Tipo', + start : 'InÃcio', + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'CÃrculo', + disc : 'Disco', + square : 'Quadrado', + none : 'Nenhum', + notset : '<não definido>', + armenian : 'Numeração Armêna', + georgian : 'Numeração da Geórgia (an, ban, gan, etc.)', + lowerRoman : 'Numeração Romana minúscula (i, ii, iii, iv, v, etc.)', + upperRoman : 'Numeração Romana maiúscula (I, II, III, IV, V, etc.)', + lowerAlpha : 'Numeração Alfabética minúscula (a, b, c, d, e, etc.)', + upperAlpha : 'Numeração Alfabética Maiúscula (A, B, C, D, E, etc.)', + lowerGreek : 'Numeração Grega minúscula (alpha, beta, gamma, etc.)', + decimal : 'Numeração Decimal (1, 2, 3, etc.)', + decimalLeadingZero : 'Numeração Decimal com zeros (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Localizar e Substituir', + find : 'Localizar', + replace : 'Substituir', + findWhat : 'Procurar por:', + replaceWith : 'Substituir por:', + notFoundMsg : 'O texto especificado não foi encontrado.', + matchCase : 'Coincidir Maiúsculas/Minúsculas', + matchWord : 'Coincidir a palavra inteira', + matchCyclic : 'Coincidir cÃclico', + replaceAll : 'Substituir Tudo', + replaceSuccessMsg : '%1 ocorrência(s) substituÃda(s).' + }, + + // Table Dialog + table : + { + toolbar : 'Tabela', + title : 'Formatar Tabela', + menu : 'Formatar Tabela', + deleteTable : 'Apagar Tabela', + rows : 'Linhas', + columns : 'Colunas', + border : 'Borda', + widthPx : 'pixels', + widthPc : '%', + widthUnit : 'unidade largura', + cellSpace : 'Espaçamento', + cellPad : 'Margem interna', + caption : 'Legenda', + summary : 'Resumo', + headers : 'Cabeçalho', + headersNone : 'Nenhum', + headersColumn : 'Primeira coluna', + headersRow : 'Primeira linha', + headersBoth : 'Ambos', + invalidRows : 'O número de linhas tem que ser um número maior que 0.', + invalidCols : 'O número de colunas tem que ser um número maior que 0.', + invalidBorder : 'O tamanho da borda tem que ser um número.', + invalidWidth : 'A largura da tabela tem que ser um número.', + invalidHeight : 'A altura da tabela tem que ser um número.', + invalidCellSpacing : 'O espaçamento das células tem que ser um número.', + invalidCellPadding : 'A margem interna das células tem que ser um número.', + + cell : + { + menu : 'Célula', + insertBefore : 'Inserir célula a esquerda', + insertAfter : 'Inserir célula a direita', + deleteCell : 'Remover Células', + merge : 'Mesclar Células', + mergeRight : 'Mesclar com célula a direita', + mergeDown : 'Mesclar com célula abaixo', + splitHorizontal : 'Dividir célula horizontalmente', + splitVertical : 'Dividir célula verticalmente', + title : 'Propriedades da célula', + cellType : 'Tipo de célula', + rowSpan : 'Linhas cobertas', + colSpan : 'Colunas cobertas', + wordWrap : 'Quebra de palavra', + hAlign : 'Alinhamento horizontal', + vAlign : 'Alinhamento vertical', + alignBaseline : 'Patamar de alinhamento', + bgColor : 'Cor de fundo', + borderColor : 'Cor das bordas', + data : 'Dados', + header : 'Cabeçalho', + yes : 'Sim', + no : 'Não', + invalidWidth : 'A largura da célula tem que ser um número.', + invalidHeight : 'A altura da célula tem que ser um número.', + invalidRowSpan : 'Linhas cobertas tem que ser um número inteiro.', + invalidColSpan : 'Colunas cobertas tem que ser um número inteiro.', + chooseColor : 'Escolher' + }, + + row : + { + menu : 'Linha', + insertBefore : 'Inserir linha acima', + insertAfter : 'Inserir linha abaixo', + deleteRow : 'Remover Linhas' + }, + + column : + { + menu : 'Coluna', + insertBefore : 'Inserir coluna a esquerda', + insertAfter : 'Inserir coluna a direita', + deleteColumn : 'Remover Colunas' + } + }, + + // Button Dialog. + button : + { + title : 'Formatar Botão', + text : 'Texto (Valor)', + type : 'Tipo', + typeBtn : 'Botão', + typeSbm : 'Enviar', + typeRst : 'Limpar' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Formatar Caixa de Seleção', + radioTitle : 'Formatar Botão de Opção', + value : 'Valor', + selected : 'Selecionado' + }, + + // Form Dialog. + form : + { + title : 'Formatar Formulário', + menu : 'Formatar Formulário', + action : 'Ação', + method : 'Método', + encoding : 'Codificação' + }, + + // Select Field Dialog. + select : + { + title : 'Formatar Caixa de Listagem', + selectInfo : 'Informações', + opAvail : 'Opções disponÃveis', + value : 'Valor', + size : 'Tamanho', + lines : 'linhas', + chkMulti : 'Permitir múltiplas seleções', + opText : 'Texto', + opValue : 'Valor', + btnAdd : 'Adicionar', + btnModify : 'Modificar', + btnUp : 'Para cima', + btnDown : 'Para baixo', + btnSetValue : 'Definir como selecionado', + btnDelete : 'Remover' + }, + + // Textarea Dialog. + textarea : + { + title : 'Formatar Ãrea de Texto', + cols : 'Colunas', + rows : 'Linhas' + }, + + // Text Field Dialog. + textfield : + { + title : 'Formatar Caixa de Texto', + name : 'Nome', + value : 'Valor', + charWidth : 'Comprimento (em caracteres)', + maxChars : 'Número Máximo de Caracteres', + type : 'Tipo', + typeText : 'Texto', + typePass : 'Senha' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Formatar Campo Oculto', + name : 'Nome', + value : 'Valor' + }, + + // Image Dialog. + image : + { + title : 'Formatar Imagem', + titleButton : 'Formatar Botão de Imagem', + menu : 'Formatar Imagem', + infoTab : 'Informações da Imagem', + btnUpload : 'Enviar para o Servidor', + upload : 'Enviar', + alt : 'Texto Alternativo', + lockRatio : 'Travar Proporções', + resetSize : 'Redefinir para o Tamanho Original', + border : 'Borda', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Por favor, digite a URL da imagem.', + linkTab : 'Link', + button2Img : 'Deseja transformar o botão de imagem em uma imagem comum?', + img2Button : 'Deseja transformar a imagem em um botão de imagem?', + urlMissing : 'URL da imagem está faltando.', + validateBorder : 'A borda deve ser um número inteiro.', + validateHSpace : 'O HSpace deve ser um número inteiro.', + validateVSpace : 'O VSpace deve ser um número inteiro.' + }, + + // Flash Dialog + flash : + { + properties : 'Propriedades do Flash', + propertiesTab : 'Propriedades', + title : 'Propriedades do Flash', + chkPlay : 'Tocar Automaticamente', + chkLoop : 'Tocar Infinitamente', + chkMenu : 'Habilita Menu Flash', + chkFull : 'Permitir tela cheia', + scale : 'Escala', + scaleAll : 'Mostrar tudo', + scaleNoBorder : 'Sem Borda', + scaleFit : 'Escala Exata', + access : 'Acesso ao script', + accessAlways : 'Sempre', + accessSameDomain: 'Acessar Mesmo DomÃnio', + accessNever : 'Nunca', + alignAbsBottom : 'Inferior Absoluto', + alignAbsMiddle : 'Centralizado Absoluto', + alignBaseline : 'Baseline', + alignTextTop : 'Superior Absoluto', + quality : 'Qualidade', + qualityBest : 'Qualidade Melhor', + qualityHigh : 'Qualidade Alta', + qualityAutoHigh : 'Qualidade Alta Automática', + qualityMedium : 'Qualidade Média', + qualityAutoLow : 'Qualidade Baixa Automática', + qualityLow : 'Qualidade Baixa', + windowModeWindow: 'Janela', + windowModeOpaque: 'Opaca', + windowModeTransparent : 'Transparente', + windowMode : 'Modo da janela', + flashvars : 'Variáveis do Flash', + bgcolor : 'Cor do Plano de Fundo', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'Por favor, digite o endereço do link', + validateHSpace : 'O HSpace tem que ser um número', + validateVSpace : 'O VSpace tem que ser um número.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Verificar Ortografia', + title : 'Corretor Ortográfico', + notAvailable : 'Desculpe, o serviço não está disponÃvel no momento.', + errorLoading : 'Erro carregando servidor de aplicação: %s.', + notInDic : 'Não encontrada', + changeTo : 'Alterar para', + btnIgnore : 'Ignorar uma vez', + btnIgnoreAll : 'Ignorar Todas', + btnReplace : 'Alterar', + btnReplaceAll : 'Alterar Todas', + btnUndo : 'Desfazer', + noSuggestions : '-sem sugestões de ortografia-', + progress : 'Verificação ortográfica em andamento...', + noMispell : 'Verificação encerrada: Não foram encontrados erros de ortografia', + noChanges : 'Verificação ortográfica encerrada: Não houve alterações', + oneChange : 'Verificação ortográfica encerrada: Uma palavra foi alterada', + manyChanges : 'Verificação ortográfica encerrada: %1 palavras foram alteradas', + ieSpellDownload : 'A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?' + }, + + smiley : + { + toolbar : 'Emoticon', + title : 'Inserir Emoticon', + options : 'Opções de Emoticons' + }, + + elementsPath : + { + eleLabel : 'Caminho dos Elementos', + eleTitle : 'Elemento %1' + }, + + numberedlist : 'Lista numerada', + bulletedlist : 'Lista sem números', + indent : 'Aumentar Recuo', + outdent : 'Diminuir Recuo', + + justify : + { + left : 'Alinhar Esquerda', + center : 'Centralizar', + right : 'Alinhar Direita', + block : 'Justificado' + }, + + blockquote : 'Citação', + + clipboard : + { + title : 'Colar', + cutError : 'As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).', + copyError : 'As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).', + pasteMsg : 'Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.', + securityMsg : 'As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.', + pasteArea : 'Ãrea para Colar' + }, + + pastefromword : + { + confirmCleanup : 'O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?', + toolbar : 'Colar do Word', + title : 'Colar do Word', + error : 'Não foi possÃvel limpar os dados colados devido a um erro interno' + }, + + pasteText : + { + button : 'Colar como Texto sem Formatação', + title : 'Colar como Texto sem Formatação' + }, + + templates : + { + button : 'Modelos de layout', + title : 'Modelo de layout de conteúdo', + options : 'Opções de Template', + insertOption : 'Substituir o conteúdo atual', + selectPromptMsg : 'Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):', + emptyListMsg : '(Não foram definidos modelos de layout)' + }, + + showBlocks : 'Mostrar blocos de código', + + stylesCombo : + { + label : 'Estilo', + panelTitle : 'Estilos de Formatação', + panelTitle1 : 'Estilos de bloco', + panelTitle2 : 'Estilos de texto corrido', + panelTitle3 : 'Estilos de objeto' + }, + + format : + { + label : 'Formatação', + panelTitle : 'Formatação', + + tag_p : 'Normal', + tag_pre : 'Formatado', + tag_address : 'Endereço', + tag_h1 : 'TÃtulo 1', + tag_h2 : 'TÃtulo 2', + tag_h3 : 'TÃtulo 3', + tag_h4 : 'TÃtulo 4', + tag_h5 : 'TÃtulo 5', + tag_h6 : 'TÃtulo 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Criar Container de DIV', + toolbar : 'Criar Container de DIV', + cssClassInputLabel : 'Classes de CSS', + styleSelectLabel : 'Estilo', + IdInputLabel : 'Id', + languageCodeInputLabel : 'Código de Idioma', + inlineStyleInputLabel : 'Estilo Inline', + advisoryTitleInputLabel : 'TÃtulo Consulta', + langDirLabel : 'Direção da Escrita', + langDirLTRLabel : 'Esquerda para Direita (LTR)', + langDirRTLLabel : 'Direita para Esquerda (RTL)', + edit : 'Editar Div', + remove : 'Remover Div' + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Fonte', + voiceLabel : 'Fonte', + panelTitle : 'Fonte' + }, + + fontSize : + { + label : 'Tamanho', + voiceLabel : 'Tamanho da fonte', + panelTitle : 'Tamanho' + }, + + colorButton : + { + textColorTitle : 'Cor do Texto', + bgColorTitle : 'Cor do Plano de Fundo', + panelTitle : 'Cores', + auto : 'Automático', + more : 'Mais Cores...' + }, + + colors : + { + '000' : 'Preto', + '800000' : 'Foquete', + '8B4513' : 'Marrom 1', + '2F4F4F' : 'Cinza 1', + '008080' : 'Cerceta', + '000080' : 'Azul Marinho', + '4B0082' : 'Ãndigo', + '696969' : 'Cinza 2', + 'B22222' : 'Tijolo de Fogo', + 'A52A2A' : 'Marrom 2', + 'DAA520' : 'Vara Dourada', + '006400' : 'Verde Escuro', + '40E0D0' : 'Turquesa', + '0000CD' : 'Azul Médio', + '800080' : 'Roxo', + '808080' : 'Cinza 3', + 'F00' : 'Vermelho', + 'FF8C00' : 'Laranja Escuro', + 'FFD700' : 'Dourado', + '008000' : 'Verde', + '0FF' : 'Ciano', + '00F' : 'Azul', + 'EE82EE' : 'Violeta', + 'A9A9A9' : 'Cinza Escuro', + 'FFA07A' : 'Salmão Claro', + 'FFA500' : 'Laranja', + 'FFFF00' : 'Amarelo', + '00FF00' : 'Lima', + 'AFEEEE' : 'Turquesa Pálido', + 'ADD8E6' : 'Azul Claro', + 'DDA0DD' : 'Ameixa', + 'D3D3D3' : 'Cinza Claro', + 'FFF0F5' : 'Lavanda 1', + 'FAEBD7' : 'Branco Antiguidade', + 'FFFFE0' : 'Amarelo Claro', + 'F0FFF0' : 'Orvalho', + 'F0FFFF' : 'Azure', + 'F0F8FF' : 'Azul Alice', + 'E6E6FA' : 'Lavanda 2', + 'FFF' : 'Branco' + }, + + scayt : + { + title : 'Correção ortográfica durante a digitação', + opera_title : 'Não suportado no Opera', + enable : 'Habilitar correção ortográfica durante a digitação', + disable : 'Desabilitar correção ortográfica durante a digitação', + about : 'Sobre a correção ortográfica durante a digitação', + toggle : 'Ativar/desativar correção ortográfica durante a digitação', + options : 'Opções', + langs : 'Idiomas', + moreSuggestions : 'Mais sugestões', + ignore : 'Ignorar', + ignoreAll : 'Ignorar todas', + addWord : 'Adicionar palavra', + emptyDic : 'O nome do dicionário não deveria estar vazio.', + + optionsTab : 'Opções', + allCaps : 'Ignorar palavras maiúsculas', + ignoreDomainNames : 'Ignorar nomes de domÃnio', + mixedCase : 'Ignorar palavras com maiúsculas e minúsculas misturadas', + mixedWithDigits : 'Ignorar palavras com números', + + languagesTab : 'Idiomas', + + dictionariesTab : 'Dicionários', + dic_field_name : 'Nome do Dicionário', + dic_create : 'Criar', + dic_restore : 'Restaurar', + dic_delete : 'Excluir', + dic_rename : 'Renomear', + dic_info : 'Inicialmente, o dicionário do usuário fica armazenado em um Cookie. Porém, Cookies tem tamanho limitado, portanto quand o dicionário do usuário atingir o tamanho limite poderá ser armazenado no nosso servidor. Para armazenar seu dicionário pessoal no nosso servidor deverá especificar um nome para ele. Se já tiver um dicionário armazenado por favor especifique o seu nome e clique em Restaurar.', + + aboutTab : 'Sobre' + }, + + about : + { + title : 'Sobre o CKEditor', + dlgTitle : 'Sobre o CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Para informações sobre a licença por favor visite o nosso site:', + copy : 'Copyright © $1. Todos os direitos reservados.' + }, + + maximize : 'Maximizar', + minimize : 'Minimize', + + fakeobjects : + { + anchor : 'Ãncora', + flash : 'Animação em Flash', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Objeto desconhecido' + }, + + resize : 'Arraste para redimensionar', + + colordialog : + { + title : 'Selecione uma cor', + options : 'Opções de Cor', + highlight : 'Grifar', + selected : 'Cor Selecionada', + clear : 'Limpar' + }, + + toolbarCollapse : 'Diminuir Barra de Ferramentas', + toolbarExpand : 'Aumentar Barra de Ferramentas', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Propriedades Documento', + title : 'Propriedades Documento', + design : 'Design', // MISSING + meta : 'Meta Dados', + chooseColor : 'Escolher', + other : '<outro>', + docTitle : 'TÃtulo da Página', + charset : 'Codificação de Caracteres', + charsetOther : 'Outra Codificação de Caracteres', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Europa Central', + charsetCT : 'Chinês Tradicional (Big5)', + charsetCR : 'CirÃlico', + charsetGR : 'Grego', + charsetJP : 'Japonês', + charsetKR : 'Coreano', + charsetTR : 'Turco', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Europa Ocidental', + docType : 'Cabeçalho Tipo de Documento', + docTypeOther : 'Other Document Type Heading', // MISSING + xhtmlDec : 'Incluir Declarações XHTML', + bgColor : 'Cor do Plano de Fundo', + bgImage : 'URL da Imagem de Plano de Fundo', + bgFixed : 'Plano de Fundo Fixo', + txtColor : 'Cor do Texto', + margin : 'Margens da Página', + marginTop : 'Superior', + marginLeft : 'Inferior', + marginRight : 'Direita', + marginBottom : 'Inferior', + metaKeywords : 'Palavras-chave de Indexação do Documento (separadas por vÃrgula)', + metaDescription : 'Descrição do Documento', + metaAuthor : 'Autor', + metaCopyright : 'Direitos Autorais', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/pt.js b/_source/lang/pt.js new file mode 100644 index 0000000..3995471 --- /dev/null +++ b/_source/lang/pt.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Portuguese language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['pt'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Fonte', + newPage : 'Nova Página', + save : 'Guardar', + preview : 'Pré-visualizar', + cut : 'Cortar', + copy : 'Copiar', + paste : 'Colar', + print : 'Imprimir', + underline : 'Sublinhado', + bold : 'Negrito', + italic : 'Itálico', + selectAll : 'Seleccionar Tudo', + removeFormat : 'Eliminar Formato', + strike : 'Rasurado', + subscript : 'Superior à Linha', + superscript : 'Inferior à Linha', + horizontalrule : 'Inserir Linha Horizontal', + pagebreak : 'Inserir Quebra de Página', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Eliminar Hiperligação', + undo : 'Anular', + redo : 'Repetir', + + // Common messages and labels. + common : + { + browseServer : 'Navegar no Servidor', + url : 'URL', + protocol : 'Protocolo', + upload : 'Carregar', + uploadSubmit : 'Enviar para o Servidor', + image : 'Imagem', + flash : 'Flash', + form : 'Formulário', + checkbox : 'Caixa de Verificação', + radio : 'Botão de Opção', + textField : 'Campo de Texto', + textarea : 'Ãrea de Texto', + hiddenField : 'Campo Escondido', + button : 'Botão', + select : 'Caixa de Combinação', + imageButton : 'Botão de Imagem', + notSet : '<Não definido>', + id : 'Id', + name : 'Nome', + langDir : 'Orientação de idioma', + langDirLtr : 'Esquerda à Direita (LTR)', + langDirRtl : 'Direita a Esquerda (RTL)', + langCode : 'Código de Idioma', + longDescr : 'Descrição Completa do URL', + cssClass : 'Classes de Estilo de Folhas Classes', + advisoryTitle : 'TÃtulo', + cssStyle : 'Estilo', + ok : 'OK', + cancel : 'Cancelar', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Avançado', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Largura', + height : 'Altura', + align : 'Alinhamento', + alignLeft : 'Esquerda', + alignRight : 'Direita', + alignCenter : 'Centrado', + alignTop : 'Topo', + alignMiddle : 'Centro', + alignBottom : 'Fundo', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Inserir Caracter Especial', + title : 'Seleccione um caracter especial', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Inserir/Editar Hiperligação', + other : '<outro>', + menu : 'Editar Hiperligação', + title : 'Hiperligação', + info : 'Informação de Hiperligação', + target : 'Destino', + upload : 'Carregar', + advanced : 'Avançado', + type : 'Tipo de Hiperligação', + toUrl : 'URL', // MISSING + toAnchor : 'Referência a esta página', + toEmail : 'E-Mail', + targetFrame : '<Frame>', + targetPopup : '<Janela de popup>', + targetFrameName : 'Nome do Frame Destino', + targetPopupName : 'Nome da Janela de Popup', + popupFeatures : 'CaracterÃsticas de Janela de Popup', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Barra de Estado', + popupLocationBar: 'Barra de localização', + popupToolbar : 'Barra de Ferramentas', + popupMenuBar : 'Barra de Menu', + popupFullScreen : 'Janela Completa (IE)', + popupScrollBars : 'Barras de deslocamento', + popupDependent : 'Dependente (Netscape)', + popupLeft : 'Posição Esquerda', + popupTop : 'Posição Direita', + id : 'Id', // MISSING + langDir : 'Orientação de idioma', + langDirLTR : 'Esquerda à Direita (LTR)', + langDirRTL : 'Direita a Esquerda (RTL)', + acccessKey : 'Chave de Acesso', + name : 'Nome', + langCode : 'Orientação de idioma', + tabIndex : 'Ãndice de Tubulação', + advisoryTitle : 'TÃtulo', + advisoryContentType : 'Tipo de Conteúdo', + cssClasses : 'Classes de Estilo de Folhas Classes', + charset : 'Fonte de caracteres vinculado', + styles : 'Estilo', + rel : 'Relationship', // MISSING + selectAnchor : 'Seleccionar una referência', + anchorName : 'Por Nome de Referência', + anchorId : 'Por ID de elemento', + emailAddress : 'Endereço de E-Mail', + emailSubject : 'TÃtulo de Mensagem', + emailBody : 'Corpo da Mensagem', + noAnchors : '(Não há referências disponÃveis no documento)', + noUrl : 'Por favor introduza a hiperligação URL', + noEmail : 'Por favor introduza o endereço de e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : ' Inserir/Editar Ãncora', + menu : 'Propriedades da Ãncora', + title : 'Propriedades da Ãncora', + name : 'Nome da Ãncora', + errorName : 'Por favor, introduza o nome da âncora', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'Procurar', + replace : 'Substituir', + findWhat : 'Texto a Procurar:', + replaceWith : 'Substituir por:', + notFoundMsg : 'O texto especificado não foi encontrado.', + matchCase : 'Maiúsculas/Minúsculas', + matchWord : 'Coincidir com toda a palavra', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Substituir Tudo', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tabela', + title : 'Propriedades da Tabela', + menu : 'Propriedades da Tabela', + deleteTable : 'Eliminar Tabela', + rows : 'Linhas', + columns : 'Colunas', + border : 'Tamanho do Limite', + widthPx : 'pixeis', + widthPc : 'percentagem', + widthUnit : 'width unit', // MISSING + cellSpace : 'Esp. e/células', + cellPad : 'Esp. interior', + caption : 'TÃtulo', + summary : 'Sumário', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Célula', + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'Eliminar Célula', + merge : 'Unir Células', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Linha', + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'Eliminar Linhas' + }, + + column : + { + menu : 'Coluna', + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'Eliminar Coluna' + } + }, + + // Button Dialog. + button : + { + title : 'Propriedades do Botão', + text : 'Texto (Valor)', + type : 'Tipo', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Propriedades da Caixa de Verificação', + radioTitle : 'Propriedades do Botão de Opção', + value : 'Valor', + selected : 'Seleccionado' + }, + + // Form Dialog. + form : + { + title : 'Propriedades do Formulário', + menu : 'Propriedades do Formulário', + action : 'Acção', + method : 'Método', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Propriedades da Caixa de Combinação', + selectInfo : 'Informação', + opAvail : 'Opções PossÃveis', + value : 'Valor', + size : 'Tamanho', + lines : 'linhas', + chkMulti : 'Permitir selecções múltiplas', + opText : 'Texto', + opValue : 'Valor', + btnAdd : 'Adicionar', + btnModify : 'Modificar', + btnUp : 'Para cima', + btnDown : 'Para baixo', + btnSetValue : 'Definir um valor por defeito', + btnDelete : 'Apagar' + }, + + // Textarea Dialog. + textarea : + { + title : 'Propriedades da Ãrea de Texto', + cols : 'Colunas', + rows : 'Linhas' + }, + + // Text Field Dialog. + textfield : + { + title : 'Propriedades do Campo de Texto', + name : 'Nome', + value : 'Valor', + charWidth : 'Tamanho do caracter', + maxChars : 'Nr. Máximo de Caracteres', + type : 'Tipo', + typeText : 'Texto', + typePass : 'Palavra-chave' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Propriedades do Campo Escondido', + name : 'Nome', + value : 'Valor' + }, + + // Image Dialog. + image : + { + title : 'Propriedades da Imagem', + titleButton : 'Propriedades do Botão de imagens', + menu : 'Propriedades da Imagem', + infoTab : 'Informação da Imagem', + btnUpload : 'Enviar para o Servidor', + upload : 'Carregar', + alt : 'Texto Alternativo', + lockRatio : 'Proporcional', + resetSize : 'Tamanho Original', + border : 'Limite', + hSpace : 'Esp.Horiz', + vSpace : 'Esp.Vert', + alertUrl : 'Por favor introduza o URL da imagem', + linkTab : 'Hiperligação', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Propriedades do Flash', + propertiesTab : 'Properties', // MISSING + title : 'Propriedades do Flash', + chkPlay : 'Reproduzir automaticamente', + chkLoop : 'Loop', + chkMenu : 'Permitir Menu do Flash', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Escala', + scaleAll : 'Mostrar tudo', + scaleNoBorder : 'Sem Limites', + scaleFit : 'Tamanho Exacto', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs inferior', + alignAbsMiddle : 'Abs centro', + alignBaseline : 'Linha de base', + alignTextTop : 'Topo do texto', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Cor de Fundo', + hSpace : 'Esp.Horiz', + vSpace : 'Esp.Vert', + validateSrc : 'Por favor introduza a hiperligação URL', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Verificação Ortográfica', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Não está num directório', + changeTo : 'Mudar para', + btnIgnore : 'Ignorar', + btnIgnoreAll : 'Ignorar Tudo', + btnReplace : 'Substituir', + btnReplaceAll : 'Substituir Tudo', + btnUndo : 'Anular', + noSuggestions : '- Sem sugestões -', + progress : 'Verificação ortográfica em progressoâ¦', + noMispell : 'Verificação ortográfica completa: não foram encontrados erros', + noChanges : 'Verificação ortográfica completa: não houve alteração de palavras', + oneChange : 'Verificação ortográfica completa: uma palavra alterada', + manyChanges : 'Verificação ortográfica completa: %1 palavras alteradas', + ieSpellDownload : ' Verificação ortográfica não instalada. Quer descarregar agora?' + }, + + smiley : + { + toolbar : 'Emoticons', + title : 'Inserir um Emoticon', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Numeração', + bulletedlist : 'Marcas', + indent : 'Aumentar Avanço', + outdent : 'Diminuir Avanço', + + justify : + { + left : 'Alinhar à Esquerda', + center : 'Alinhar ao Centro', + right : 'Alinhar à Direita', + block : 'Justificado' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'Colar', + cutError : 'A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).', + copyError : 'A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).', + pasteMsg : 'Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Colar do Word', + title : 'Colar do Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Colar como Texto Simples', + title : 'Colar como Texto Simples' + }, + + templates : + { + button : 'Modelos', + title : 'Modelo de Conteúdo', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):', + emptyListMsg : '(Sem modelos definidos)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'Estilo', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Formato', + panelTitle : 'Formato', + + tag_p : 'Normal', + tag_pre : 'Formatado', + tag_address : 'Endereço', + tag_h1 : 'TÃtulo 1', + tag_h2 : 'TÃtulo 2', + tag_h3 : 'TÃtulo 3', + tag_h4 : 'TÃtulo 4', + tag_h5 : 'TÃtulo 5', + tag_h6 : 'TÃtulo 6', + tag_div : 'Normal (DIV)' // MISSING + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Tipo de Letra', + voiceLabel : 'Font', // MISSING + panelTitle : 'Tipo de Letra' + }, + + fontSize : + { + label : 'Tamanho', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'Tamanho' + }, + + colorButton : + { + textColorTitle : 'Cor do Texto', + bgColorTitle : 'Cor de Fundo', + panelTitle : 'Colors', // MISSING + auto : 'Automático', + more : 'Mais Cores...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Propriedades do Documento', + title : 'Propriedades do Documento', + design : 'Design', // MISSING + meta : 'Meta Data', + chooseColor : 'Choose', // MISSING + other : '<outro>', + docTitle : 'TÃtulo da Página', + charset : 'Codificação de Caracteres', + charsetOther : 'Outra Codificação de Caracteres', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Tipo de Cabeçalho do Documento', + docTypeOther : 'Outro Tipo de Cabeçalho do Documento', + xhtmlDec : 'Incluir Declarações XHTML', + bgColor : 'Cor de Fundo', + bgImage : 'Caminho para a Imagem de Fundo', + bgFixed : 'Fundo Fixo', + txtColor : 'Cor do Texto', + margin : 'Margem das Páginas', + marginTop : 'Topo', + marginLeft : 'Esquerda', + marginRight : 'Direita', + marginBottom : 'Fundo', + metaKeywords : 'Palavras de Indexação do Documento (separadas por virgula)', + metaDescription : 'Descrição do Documento', + metaAuthor : 'Autor', + metaCopyright : 'Direitos de Autor', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/ro.js b/_source/lang/ro.js new file mode 100644 index 0000000..c98f084 --- /dev/null +++ b/_source/lang/ro.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Romanian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['ro'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Sursa', + newPage : 'PaginÄ nouÄ', + save : 'SalveazÄ', + preview : 'Previzualizare', + cut : 'Taie', + copy : 'CopiazÄ', + paste : 'AdaugÄ', + print : 'PrinteazÄ', + underline : 'Subliniat (underline)', + bold : 'ÃngroÅat (bold)', + italic : 'Ãnclinat (italic)', + selectAll : 'SelecteazÄ tot', + removeFormat : 'ÃnlÄturÄ formatarea', + strike : 'TÄiat (strike through)', + subscript : 'Indice (subscript)', + superscript : 'Putere (superscript)', + horizontalrule : 'InsereazÄ linie orizontÄ', + pagebreak : 'InsereazÄ separator de paginÄ (Page Break)', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'ÃnlÄturÄ link (legÄturÄ web)', + undo : 'Starea anterioarÄ (undo)', + redo : 'Starea ulterioarÄ (redo)', + + // Common messages and labels. + common : + { + browseServer : 'RÄsfoieÅte server', + url : 'URL', + protocol : 'Protocol', + upload : 'ÃncarcÄ', + uploadSubmit : 'Trimite la server', + image : 'Imagine', + flash : 'Flash', + form : 'Formular (Form)', + checkbox : 'BifÄ (Checkbox)', + radio : 'Buton radio (RadioButton)', + textField : 'Câmp text (TextField)', + textarea : 'SuprafaÅ£Ä text (Textarea)', + hiddenField : 'Câmp ascuns (HiddenField)', + button : 'Buton', + select : 'Câmp selecÅ£ie (SelectionField)', + imageButton : 'Buton imagine (ImageButton)', + notSet : '<nesetat>', + id : 'Id', + name : 'Nume', + langDir : 'DirecÅ£ia cuvintelor', + langDirLtr : 'stânga-dreapta (LTR)', + langDirRtl : 'dreapta-stânga (RTL)', + langCode : 'Codul limbii', + longDescr : 'Descrierea lungÄ URL', + cssClass : 'Clasele cu stilul paginii (CSS)', + advisoryTitle : 'Titlul consultativ', + cssStyle : 'Stil', + ok : 'Bine', + cancel : 'Anulare', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Avansat', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'LÄÅ£ime', + height : 'ÃnÄlÅ£ime', + align : 'Aliniere', + alignLeft : 'Stânga', + alignRight : 'Dreapta', + alignCenter : 'Centru', + alignTop : 'Sus', + alignMiddle : 'Mijloc', + alignBottom : 'Jos', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'InsereazÄ caracter special', + title : 'SelecteazÄ caracter special', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'InsereazÄ/EditeazÄ link (legÄturÄ web)', + other : '<alt>', + menu : 'EditeazÄ Link', + title : 'Link (LegÄturÄ web)', + info : 'InformaÅ£ii despre link (LegÄturÄ web)', + target : 'Å¢intÄ (Target)', + upload : 'ÃncarcÄ', + advanced : 'Avansat', + type : 'Tipul link-ului (al legÄturii web)', + toUrl : 'URL', // MISSING + toAnchor : 'AncorÄ Ã®n aceastÄ paginÄ', + toEmail : 'E-Mail', + targetFrame : '<frame>', + targetPopup : '<fereastra popup>', + targetFrameName : 'Numele frame-ului Å£intÄ', + targetPopupName : 'Numele ferestrei popup', + popupFeatures : 'ProprietÄÅ£ile ferestrei popup', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Bara de status', + popupLocationBar: 'Bara de locaÅ£ie', + popupToolbar : 'Bara de opÅ£iuni', + popupMenuBar : 'Bara de meniu', + popupFullScreen : 'Tot ecranul (Full Screen)(IE)', + popupScrollBars : 'Scroll Bars', + popupDependent : 'Dependent (Netscape)', + popupLeft : 'PoziÅ£ia la stânga', + popupTop : 'PoziÅ£ia la dreapta', + id : 'Id', // MISSING + langDir : 'DirecÅ£ia cuvintelor', + langDirLTR : 'stânga-dreapta (LTR)', + langDirRTL : 'dreapta-stânga (RTL)', + acccessKey : 'Tasta de acces', + name : 'Nume', + langCode : 'DirecÅ£ia cuvintelor', + tabIndex : 'Indexul tabului', + advisoryTitle : 'Titlul consultativ', + advisoryContentType : 'Tipul consultativ al titlului', + cssClasses : 'Clasele cu stilul paginii (CSS)', + charset : 'Setul de caractere al resursei legate', + styles : 'Stil', + rel : 'Relationship', // MISSING + selectAnchor : 'SelectaÅ£i o ancorÄ', + anchorName : 'dupÄ numele ancorei', + anchorId : 'dupÄ Id-ul elementului', + emailAddress : 'AdresÄ de e-mail', + emailSubject : 'Subiectul mesajului', + emailBody : 'ConÅ£inutul mesajului', + noAnchors : '(Nicio ancorÄ disponibilÄ Ã®n document)', + noUrl : 'VÄ rugÄm sÄ scrieÅ£i URL-ul', + noEmail : 'VÄ rugÄm sÄ scrieÅ£i adresa de e-mail' + }, + + // Anchor dialog + anchor : + { + toolbar : 'InsereazÄ/EditeazÄ ancorÄ', + menu : 'ProprietÄÅ£i ancorÄ', + title : 'ProprietÄÅ£i ancorÄ', + name : 'Numele ancorei', + errorName : 'VÄ rugÄm scrieÅ£i numele ancorei', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'GÄseÅte Åi înlocuieÅte', + find : 'GÄseÅte', + replace : 'ÃnlocuieÅte', + findWhat : 'GÄseÅte:', + replaceWith : 'ÃnlocuieÅte cu:', + notFoundMsg : 'Textul specificat nu a fost gÄsit.', + matchCase : 'DeosebeÅte majuscule de minuscule (Match case)', + matchWord : 'Doar cuvintele întregi', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'ÃnlocuieÅte tot', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tabel', + title : 'ProprietÄÅ£ile tabelului', + menu : 'ProprietÄÅ£ile tabelului', + deleteTable : 'Återge tabel', + rows : 'Linii', + columns : 'Coloane', + border : 'MÄrimea marginii', + widthPx : 'pixeli', + widthPc : 'procente', + widthUnit : 'width unit', // MISSING + cellSpace : 'SpaÅ£iu între celule', + cellPad : 'SpaÅ£iu în cadrul celulei', + caption : 'Titlu (Caption)', + summary : 'Rezumat', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'CelulÄ', + insertBefore : 'InsereazÄ celulÄ Ã®nainte', + insertAfter : 'InsereazÄ celulÄ dupÄ', + deleteCell : 'Återge celule', + merge : 'UneÅte celule', + mergeRight : 'UneÅte la dreapta', + mergeDown : 'UneÅte jos', + splitHorizontal : 'Ãmparte celula pe orizontalÄ', + splitVertical : 'Ãmparte celula pe verticalÄ', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Linie', + insertBefore : 'InsereazÄ linie înainte', + insertAfter : 'InsereazÄ linie dupÄ', + deleteRow : 'Återge linii' + }, + + column : + { + menu : 'ColoanÄ', + insertBefore : 'InsereazÄ coloanÄ Ã®nainte', + insertAfter : 'InsereazÄ coloanÄ dupÄ', + deleteColumn : 'Återge celule' + } + }, + + // Button Dialog. + button : + { + title : 'ProprietÄÅ£i buton', + text : 'Text (Valoare)', + type : 'Tip', + typeBtn : 'Button', + typeSbm : 'Submit', + typeRst : 'Reset' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ProprietÄÅ£i bifÄ (Checkbox)', + radioTitle : 'ProprietÄÅ£i buton radio (Radio Button)', + value : 'Valoare', + selected : 'Selectat' + }, + + // Form Dialog. + form : + { + title : 'ProprietÄÅ£i formular (Form)', + menu : 'ProprietÄÅ£i formular (Form)', + action : 'AcÅ£iune', + method : 'MetodÄ', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'ProprietÄÅ£i câmp selecÅ£ie (Selection Field)', + selectInfo : 'InformaÅ£ii', + opAvail : 'OpÅ£iuni disponibile', + value : 'Valoare', + size : 'MÄrime', + lines : 'linii', + chkMulti : 'Permite selecÅ£ii multiple', + opText : 'Text', + opValue : 'Valoare', + btnAdd : 'AdaugÄ', + btnModify : 'ModificÄ', + btnUp : 'Sus', + btnDown : 'Jos', + btnSetValue : 'SeteazÄ ca valoare selectatÄ', + btnDelete : 'Återge' + }, + + // Textarea Dialog. + textarea : + { + title : 'ProprietÄÅ£i suprafaÅ£Ä text (Textarea)', + cols : 'Coloane', + rows : 'Linii' + }, + + // Text Field Dialog. + textfield : + { + title : 'ProprietÄÅ£i câmp text (Text Field)', + name : 'Nume', + value : 'Valoare', + charWidth : 'LÄrgimea caracterului', + maxChars : 'Caractere maxime', + type : 'Tip', + typeText : 'Text', + typePass : 'ParolÄ' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ProprietÄÅ£i câmp ascuns (Hidden Field)', + name : 'Nume', + value : 'Valoare' + }, + + // Image Dialog. + image : + { + title : 'ProprietÄÅ£ile imaginii', + titleButton : 'ProprietÄÅ£i buton imagine (Image Button)', + menu : 'ProprietÄÅ£ile imaginii', + infoTab : 'InformaÅ£ii despre imagine', + btnUpload : 'Trimite la server', + upload : 'ÃncarcÄ', + alt : 'Text alternativ', + lockRatio : 'PÄstreazÄ proporÅ£iile', + resetSize : 'ReseteazÄ mÄrimea', + border : 'Margine', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'VÄ rugÄm sÄ scrieÅ£i URL-ul imaginii', + linkTab : 'Link (LegÄturÄ web)', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'ProprietÄÅ£ile flash-ului', + propertiesTab : 'Properties', // MISSING + title : 'ProprietÄÅ£ile flash-ului', + chkPlay : 'RuleazÄ automat', + chkLoop : 'RepetÄ (Loop)', + chkMenu : 'ActiveazÄ meniul flash', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'ScalÄ', + scaleAll : 'AratÄ tot', + scaleNoBorder : 'FÄrÄ margini (No border)', + scaleFit : 'PotriveÅte', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Jos absolut (Abs Bottom)', + alignAbsMiddle : 'Mijloc absolut (Abs Middle)', + alignBaseline : 'Linia de jos (Baseline)', + alignTextTop : 'Text sus', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Coloarea fundalului', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'VÄ rugÄm sÄ scrieÅ£i URL-ul', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'VerificÄ text', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Nu e în dicÅ£ionar', + changeTo : 'SchimbÄ Ã®n', + btnIgnore : 'IgnorÄ', + btnIgnoreAll : 'IgnorÄ toate', + btnReplace : 'ÃnlocuieÅte', + btnReplaceAll : 'ÃnlocuieÅte tot', + btnUndo : 'Starea anterioarÄ (undo)', + noSuggestions : '- FÄrÄ sugestii -', + progress : 'Verificarea textului în desfÄÅurare...', + noMispell : 'Verificarea textului terminatÄ: Nicio greÅealÄ gÄsitÄ', + noChanges : 'Verificarea textului terminatÄ: Niciun cuvânt modificat', + oneChange : 'Verificarea textului terminatÄ: Un cuvânt modificat', + manyChanges : 'Verificarea textului terminatÄ: 1% cuvinte modificate', + ieSpellDownload : 'Unealta pentru verificat textul (Spell checker) neinstalatÄ. DoriÅ£i sÄ o descÄrcaÅ£i acum?' + }, + + smiley : + { + toolbar : 'FigurÄ expresivÄ (Emoticon)', + title : 'InsereazÄ o figurÄ expresivÄ (Emoticon)', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ListÄ numerotatÄ', + bulletedlist : 'ListÄ cu puncte', + indent : 'CreÅte indentarea', + outdent : 'Scade indentarea', + + justify : + { + left : 'Aliniere la stânga', + center : 'Aliniere centralÄ', + right : 'Aliniere la dreapta', + block : 'Aliniere în bloc (Block Justify)' + }, + + blockquote : 'Citat', + + clipboard : + { + title : 'AdaugÄ', + cutError : 'SetÄrile de securitate ale navigatorului (browser) pe care îl folosiÅ£i nu permit editorului sÄ execute automat operaÅ£iunea de tÄiere. VÄ rugÄm folosiÅ£i tastatura (Ctrl/Cmd+X).', + copyError : 'SetÄrile de securitate ale navigatorului (browser) pe care îl folosiÅ£i nu permit editorului sÄ execute automat operaÅ£iunea de copiere. VÄ rugÄm folosiÅ£i tastatura (Ctrl/Cmd+C).', + pasteMsg : 'VÄ rugÄm adÄugaÅ£i în cÄsuÅ£a urmÄtoare folosind tastatura (<STRONG>Ctrl/Cmd+V</STRONG>) Åi apÄsaÅ£i <STRONG>OK</STRONG>.', + securityMsg : 'Din cauza setÄrilor de securitate ale programului dvs. cu care navigaÅ£i pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui sÄ adÄugaÅ£i din nou datele în aceastÄ fereastrÄ.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'AdaugÄ din Word', + title : 'AdaugÄ din Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'AdaugÄ ca text simplu (Plain Text)', + title : 'AdaugÄ ca text simplu (Plain Text)' + }, + + templates : + { + button : 'Template-uri (Åabloane)', + title : 'Template-uri (Åabloane) de conÅ£inut', + options : 'Template Options', // MISSING + insertOption : 'ÃnlocuieÅte cuprinsul actual', + selectPromptMsg : 'VÄ rugÄm selectaÅ£i template-ul (Åablonul) ce se va deschide în editor<br>(conÅ£inutul actual va fi pierdut):', + emptyListMsg : '(Niciun template (Åablon) definit)' + }, + + showBlocks : 'AratÄ blocurile', + + stylesCombo : + { + label : 'Stil', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Formatare', + panelTitle : 'Formatare', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', // MISSING + panelTitle : 'Font' + }, + + fontSize : + { + label : 'MÄrime', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'MÄrime' + }, + + colorButton : + { + textColorTitle : 'Culoarea textului', + bgColorTitle : 'Coloarea fundalului', + panelTitle : 'Colors', // MISSING + auto : 'Automatic', + more : 'Mai multe culori...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'ProprietÄÅ£ile documentului', + title : 'ProprietÄÅ£ile documentului', + design : 'Design', // MISSING + meta : 'Meta Tags', // MISSING + chooseColor : 'Choose', // MISSING + other : '<alt>', + docTitle : 'Titlul paginii', + charset : 'Encoding setului de caractere', + charsetOther : 'Alt encoding al setului de caractere', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinezesc tradiÅ£ional (Big5)', + charsetCR : 'Chirilic', + charsetGR : 'Grecesc', + charsetJP : 'Japonez', + charsetKR : 'Corean', + charsetTR : 'Turcesc', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Vest european', + docType : 'Document Type Heading', // MISSING + docTypeOther : 'Alt Document Type Heading', + xhtmlDec : 'Include declaraÅ£ii XHTML', + bgColor : 'Culoarea fundalului (Background Color)', + bgImage : 'URL-ul imaginii din fundal (Background Image URL)', + bgFixed : 'Fundal neflotant, fix (Non-scrolling Background)', + txtColor : 'Culoarea textului', + margin : 'Marginile paginii', + marginTop : 'Sus', + marginLeft : 'Stânga', + marginRight : 'Dreapta', + marginBottom : 'Jos', + metaKeywords : 'Cuvinte cheie dupÄ care se va indexa documentul (separate prin virgulÄ)', + metaDescription : 'Descrierea documentului', + metaAuthor : 'Autor', + metaCopyright : 'Drepturi de autor', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/ru.js b/_source/lang/ru.js new file mode 100644 index 0000000..5a947a6 --- /dev/null +++ b/_source/lang/ru.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Russian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['ru'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'ÐÑÑоÑник', + newPage : 'ÐÐ¾Ð²Ð°Ñ ÑÑÑаниÑа', + save : 'Ð¡Ð¾Ñ ÑаниÑÑ', + preview : 'ÐÑедваÑиÑелÑнÑй пÑоÑмоÑÑ', + cut : 'ÐÑÑезаÑÑ', + copy : 'ÐопиÑоваÑÑ', + paste : 'ÐÑÑавиÑÑ', + print : 'ÐеÑаÑÑ', + underline : 'ÐодÑеÑкнÑÑÑй', + bold : 'ÐиÑнÑй', + italic : 'ÐÑÑÑив', + selectAll : 'ÐÑделиÑÑ Ð²Ñе', + removeFormat : 'УбÑаÑÑ ÑоÑмаÑиÑование', + strike : 'ÐаÑеÑкнÑÑÑй', + subscript : 'ÐодÑÑÑоÑнÑй индекÑ', + superscript : 'ÐадÑÑÑоÑнÑй индекÑ', + horizontalrule : 'ÐÑÑавиÑÑ Ð³Ð¾ÑизонÑалÑнÑÑ Ð»Ð¸Ð½Ð¸Ñ', + pagebreak : 'ÐÑÑавиÑÑ ÑазÑÑв ÑÑÑаниÑÑ', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'УбÑаÑÑ ÑÑÑлкÑ', + undo : 'ÐÑмениÑÑ', + redo : 'ÐовÑоÑиÑÑ', + + // Common messages and labels. + common : + { + browseServer : 'ÐÑоÑмоÑÑеÑÑ Ð½Ð° ÑеÑвеÑе', + url : 'URL', + protocol : 'ÐÑоÑокол', + upload : 'ÐакаÑаÑÑ', + uploadSubmit : 'ÐоÑлаÑÑ Ð½Ð° ÑеÑвеÑ', + image : 'ÐзобÑажение', + flash : 'Flash', + form : 'ФоÑма', + checkbox : 'Ð¤Ð»Ð°Ð³Ð¾Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°', + radio : 'Ðнопка вÑбоÑа', + textField : 'ТекÑÑовое поле', + textarea : 'ТекÑÑÐ¾Ð²Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑÑ', + hiddenField : 'СкÑÑÑое поле', + button : 'Ðнопка', + select : 'СпиÑок', + imageButton : 'Ðнопка Ñ Ð¸Ð·Ð¾Ð±Ñажением', + notSet : '<не опÑеделено>', + id : 'ÐденÑиÑикаÑоÑ', + name : 'ÐмÑ', + langDir : 'ÐапÑавление ÑзÑка', + langDirLtr : 'Слева на пÑаво (LTR)', + langDirRtl : 'СпÑава на лево (RTL)', + langCode : 'ЯзÑк', + longDescr : 'Ðлинное опиÑание URL', + cssClass : 'ÐлаÑÑ CSS', + advisoryTitle : 'Ðаголовок', + cssStyle : 'СÑÐ¸Ð»Ñ CSS', + ok : 'ÐÐ', + cancel : 'ÐÑмена', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'ÐнÑоÑмаÑиÑ', + advancedTab : 'РаÑÑиÑеннÑй', + validateNumberFailed : 'ÐÑо знаÑение не ÑвлÑеÑÑÑ ÑиÑлом.', + confirmNewPage : 'ÐÑе неÑÐ¾Ñ ÑаненнÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ ÑÑеÑÑнÑ. ÐÑ ÑвеÑенÑ, ÑÑо Ñ Ð¾ÑиÑе пеÑейÑи на дÑÑгÑÑ ÑÑÑаниÑÑ?', + confirmCancel : 'ÐекоÑоÑÑе опÑии бÑли измененÑ. ÐÑ ÑвеÑенÑ, ÑÑо Ñ Ð¾ÑиÑе закÑÑÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'ШиÑина', + height : 'ÐÑÑоÑа', + align : 'ÐÑÑавнивание', + alignLeft : 'Ðо Ð»ÐµÐ²Ð¾Ð¼Ñ ÐºÑаÑ', + alignRight : 'Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ', + alignCenter : 'Ðо ÑенÑÑÑ', + alignTop : 'Ðо веÑÑ Ñ', + alignMiddle : 'ÐоÑеÑедине', + alignBottom : 'ÐонизÑ', + invalidHeight : 'ÐÑÑоÑа задаеÑÑÑ ÑиÑлом.', + invalidWidth : 'ШиÑина задаеÑÑÑ ÑиÑлом.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, недоÑÑÑпно</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'ÐÑÑавиÑÑ ÑпеÑиалÑнÑй Ñимвол', + title : 'ÐÑбеÑиÑе ÑпеÑиалÑнÑй Ñимвол', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'ÐÑÑавиÑÑ/РедакÑиÑоваÑÑ ÑÑÑлкÑ', + other : '<дÑÑгой>', + menu : 'ÐÑÑавиÑÑ ÑÑÑлкÑ', + title : 'СÑÑлка', + info : 'ÐнÑоÑмаÑÐ¸Ñ ÑÑÑлки', + target : 'ЦелÑ', + upload : 'ÐакаÑаÑÑ', + advanced : 'РаÑÑиÑеннÑй', + type : 'Тип ÑÑÑлки', + toUrl : 'URL', // MISSING + toAnchor : 'ЯкоÑÑ Ð½Ð° ÑÑÑ ÑÑÑаниÑÑ', + toEmail : 'Ðл. поÑÑа', + targetFrame : '<ÑÑейм>', + targetPopup : '<вÑплÑваÑÑее окно>', + targetFrameName : 'ÐÐ¼Ñ Ñелевого ÑÑейма', + targetPopupName : 'ÐÐ¼Ñ Ð²ÑплÑваÑÑего окна', + popupFeatures : 'СвойÑÑва вÑплÑваÑÑего окна', + popupResizable : 'ÐзменÑемÑй ÑазмеÑ', + popupStatusBar : 'СÑÑока ÑоÑÑоÑниÑ', + popupLocationBar: 'ÐÐ°Ð½ÐµÐ»Ñ Ð»Ð¾ÐºÐ°Ñии', + popupToolbar : 'ÐÐ°Ð½ÐµÐ»Ñ Ð¸Ð½ÑÑÑÑменÑов', + popupMenuBar : 'ÐÐ°Ð½ÐµÐ»Ñ Ð¼ÐµÐ½Ñ', + popupFullScreen : 'ÐолнÑй ÑкÑан (IE)', + popupScrollBars : 'ÐолоÑÑ Ð¿ÑокÑÑÑки', + popupDependent : 'ÐавиÑимÑй (Netscape)', + popupLeft : 'ÐозиÑÐ¸Ñ Ñлева', + popupTop : 'ÐозиÑÐ¸Ñ ÑвеÑÑ Ñ', + id : 'Id', + langDir : 'ÐапÑавление ÑзÑка', + langDirLTR : 'Слева напÑаво (LTR)', + langDirRTL : 'СпÑава налево (RTL)', + acccessKey : 'ÐоÑÑÑÐ°Ñ ÐºÐ»Ð°Ð²Ð¸Ñа', + name : 'ÐмÑ', + langCode : 'Ðод ÑзÑка', + tabIndex : 'ÐоÑледоваÑелÑноÑÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð°', + advisoryTitle : 'Ðаголовок', + advisoryContentType : 'Тип ÑодеÑжимого', + cssClasses : 'ÐлаÑÑ CSS', + charset : 'ÐодиÑовка', + styles : 'СÑÐ¸Ð»Ñ CSS', + rel : 'Relationship', // MISSING + selectAnchor : 'ÐÑбеÑиÑе ÑкоÑÑ', + anchorName : 'Ðо имени ÑкоÑÑ', + anchorId : 'Ðо иденÑиÑикаÑоÑÑ ÑлеменÑа', + emailAddress : 'ÐдÑÐµÑ Ñл. поÑÑÑ', + emailSubject : 'Ðаголовок ÑообÑениÑ', + emailBody : 'Тело ÑообÑениÑ', + noAnchors : '(ÐÐµÑ ÑкоÑей доÑÑÑпнÑÑ Ð² ÑÑом докÑменÑе)', + noUrl : 'ÐожалÑйÑÑа, введиÑе URL ÑÑÑлки', + noEmail : 'ÐожалÑйÑÑа, введиÑе адÑÐµÑ Ñл. поÑÑÑ' + }, + + // Anchor dialog + anchor : + { + toolbar : 'ÐÑÑавиÑÑ/РедакÑиÑоваÑÑ ÑкоÑÑ', + menu : 'СвойÑÑва ÑкоÑÑ', + title : 'СвойÑÑва ÑкоÑÑ', + name : 'ÐÐ¼Ñ ÑкоÑÑ', + errorName : 'ÐожалÑйÑÑа, введиÑе Ð¸Ð¼Ñ ÑкоÑÑ', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'ÐайÑи и замениÑÑ', + find : 'ÐайÑи', + replace : 'ÐамениÑÑ', + findWhat : 'ÐайÑи:', + replaceWith : 'ÐамениÑÑ Ð½Ð°:', + notFoundMsg : 'УказаннÑй ÑекÑÑ Ð½Ðµ найден.', + matchCase : 'УÑиÑÑваÑÑ ÑегиÑÑÑ', + matchWord : 'ТолÑко Ñлово Ñеликом', + matchCyclic : 'ÐаÑинаÑÑ Ñ Ð½Ð°Ñала поÑле доÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñа', + replaceAll : 'ÐамениÑÑ Ð²Ñе', + replaceSuccessMsg : '%1 Ñовпадение(й) заменено.' + }, + + // Table Dialog + table : + { + toolbar : 'ТаблиÑа', + title : 'СвойÑÑва ÑаблиÑÑ', + menu : 'СвойÑÑва ÑаблиÑÑ', + deleteTable : 'УдалиÑÑ ÑаблиÑÑ', + rows : 'СÑÑоки', + columns : 'Ðолонки', + border : 'Ð Ð°Ð·Ð¼ÐµÑ Ð±Ð¾ÑдÑÑа', + widthPx : 'пикÑелей', + widthPc : 'пÑоÑенÑов', + widthUnit : 'width unit', // MISSING + cellSpace : 'ÐÑомежÑÑок (spacing)', + cellPad : 'ÐÑÑÑÑп (padding)', + caption : 'Ðаголовок', + summary : 'РезÑме', + headers : 'Ðаголовки', + headersNone : 'ÐеÑ', + headersColumn : 'ÐеÑвÑй ÑÑолбеÑ', + headersRow : 'ÐеÑÐ²Ð°Ñ ÑÑÑока', + headersBoth : 'Ðба ваÑианÑа', + invalidRows : 'ЧиÑло ÑÑÑок должно бÑÑÑ Ð±Ð¾Ð»ÑÑе 0.', + invalidCols : 'ЧиÑло ÑÑолбÑов должно бÑÑÑ Ð±Ð¾Ð»ÑÑе 0.', + invalidBorder : 'ШиÑина боÑдÑÑа должна бÑÑÑ ÑиÑлом.', + invalidWidth : 'ШиÑина ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ ÑиÑлом.', + invalidHeight : 'ÐÑÑоÑа ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ ÑиÑлом.', + invalidCellSpacing : 'Ð Ð°Ð·Ð¼ÐµÑ Ð¿ÑомежÑÑков (cellspacing) Ð¼ÐµÐ¶Ð´Ñ ÑÑейками Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑиÑлом.', + invalidCellPadding : 'ÐÑÑÑÑÐ¿Ñ Ð²Ð½ÑÑÑи ÑÑеек (cellpadding) Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑиÑлом.', + + cell : + { + menu : 'ЯÑейка', + insertBefore : 'ÐÑÑавиÑÑ ÑÑÐµÐ¹ÐºÑ Ð´Ð¾', + insertAfter : 'ÐÑÑавиÑÑ ÑÑÐµÐ¹ÐºÑ Ð¿Ð¾Ñле', + deleteCell : 'УдалиÑÑ ÑÑейки', + merge : 'ÐбÑединиÑÑ ÑÑейки', + mergeRight : 'ÐбÑединиÑÑ Ñ Ð¿Ñавой', + mergeDown : 'ÐбÑединиÑÑ Ñ Ð½Ð¸Ð¶Ð½ÐµÐ¹', + splitHorizontal : 'РазбиÑÑ ÑÑÐµÐ¹ÐºÑ Ð³Ð¾ÑизонÑалÑно', + splitVertical : 'РазбиÑÑ ÑÑÐµÐ¹ÐºÑ Ð²ÐµÑÑикалÑно', + title : 'СвойÑÑва ÑÑейки', + cellType : 'Тип ÑÑейки', + rowSpan : 'Rows Span', + colSpan : 'Columns Span', + wordWrap : 'ÐеÑÐµÐ½Ð¾Ñ Ð¿Ð¾ Ñловам', + hAlign : 'ÐÑÑавнивание по гоÑизонÑали', + vAlign : 'ÐÑÑавнивание по веÑÑикали', + alignBaseline : 'Ðо базовой линии', + bgColor : 'Ð¦Ð²ÐµÑ Ñона', + borderColor : 'Ð¦Ð²ÐµÑ Ð³ÑаниÑÑ', + data : 'ÐаннÑе', + header : 'Ðаголовок', + yes : 'Ðа', + no : 'ÐеÑ', + invalidWidth : 'ШиÑина ÑÑейки должна бÑÑÑ ÑиÑлом.', + invalidHeight : 'ÐÑÑоÑа ÑÑейки должна бÑÑÑ ÑиÑлом.', + invalidRowSpan : 'Rows span must be a whole number.', + invalidColSpan : 'Columns span must be a whole number.', + chooseColor : 'ÐÑбеÑиÑе' + }, + + row : + { + menu : 'СÑÑока', + insertBefore : 'ÐÑÑавиÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð¾', + insertAfter : 'ÐÑÑавиÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ñле', + deleteRow : 'УдалиÑÑ ÑÑÑоки' + }, + + column : + { + menu : 'Ðолонка', + insertBefore : 'ÐÑÑавиÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ Ð´Ð¾', + insertAfter : 'ÐÑÑавиÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ Ð¿Ð¾Ñле', + deleteColumn : 'УдалиÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸' + } + }, + + // Button Dialog. + button : + { + title : 'СвойÑÑва кнопки', + text : 'ТекÑÑ (ÐнаÑение)', + type : 'Тип', + typeBtn : 'Ðнопка', + typeSbm : 'ÐÑпÑавиÑÑ', + typeRst : 'СбÑоÑиÑÑ' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'СвойÑÑва Ñлаговой кнопки', + radioTitle : 'СвойÑÑва кнопки вÑбоÑа', + value : 'ÐнаÑение', + selected : 'ÐÑбÑаннаÑ' + }, + + // Form Dialog. + form : + { + title : 'СвойÑÑва ÑоÑмÑ', + menu : 'СвойÑÑва ÑоÑмÑ', + action : 'ÐейÑÑвие', + method : 'ÐеÑод', + encoding : 'ÐодиÑовка' + }, + + // Select Field Dialog. + select : + { + title : 'СвойÑÑва ÑпиÑка', + selectInfo : 'ÐнÑоÑмаÑиÑ', + opAvail : 'ÐоÑÑÑпнÑе ваÑианÑÑ', + value : 'ÐнаÑение', + size : 'РазмеÑ', + lines : 'линии', + chkMulti : 'РазÑеÑиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑвеннÑй вÑбоÑ', + opText : 'ТекÑÑ', + opValue : 'ÐнаÑение', + btnAdd : 'ÐобавиÑÑ', + btnModify : 'ÐодиÑиÑиÑоваÑÑ', + btnUp : 'ÐвеÑÑ ', + btnDown : 'Ðниз', + btnSetValue : 'УÑÑановиÑÑ ÐºÐ°Ðº вÑбÑанное знаÑение', + btnDelete : 'УдалиÑÑ' + }, + + // Textarea Dialog. + textarea : + { + title : 'СвойÑÑва ÑекÑÑовой облаÑÑи', + cols : 'Ðолонки', + rows : 'СÑÑоки' + }, + + // Text Field Dialog. + textfield : + { + title : 'СвойÑÑва ÑекÑÑового полÑ', + name : 'ÐмÑ', + value : 'ÐнаÑение', + charWidth : 'ШиÑина', + maxChars : 'ÐакÑ. кол-во Ñимволов', + type : 'Тип', + typeText : 'ТекÑÑ', + typePass : 'ÐаÑолÑ' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'СвойÑÑва ÑкÑÑÑого полÑ', + name : 'ÐмÑ', + value : 'ÐнаÑение' + }, + + // Image Dialog. + image : + { + title : 'СвойÑÑва изобÑажениÑ', + titleButton : 'СвойÑÑва кнопки Ñ Ð¸Ð·Ð¾Ð±Ñажением', + menu : 'СвойÑÑва изобÑажениÑ', + infoTab : 'ÐнÑоÑмаÑÐ¸Ñ Ð¾ изобÑажении', + btnUpload : 'ÐÑпÑавиÑÑ Ð½Ð° ÑеÑвеÑ', + upload : 'ÐакаÑаÑÑ', + alt : 'ÐлÑÑеÑнаÑивнÑй ÑекÑÑ', + lockRatio : 'Ð¡Ð¾Ñ ÑанÑÑÑ Ð¿ÑопоÑÑии', + resetSize : 'СбÑоÑиÑÑ ÑазмеÑ', + border : 'ÐоÑдÑÑ', + hSpace : 'ÐоÑизонÑалÑнÑй оÑÑÑÑп', + vSpace : 'ÐеÑÑикалÑнÑй оÑÑÑÑп', + alertUrl : 'ÐожалÑйÑÑа, введиÑе URL изобÑажениÑ', + linkTab : 'СÑÑлка', + button2Img : 'Do you want to transform the selected image button on a simple image?', + img2Button : 'Do you want to transform the selected image on a image button?', + urlMissing : 'ÐÑÑÑÑÑÑвÑÐµÑ URL каÑÑинки.', + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'СвойÑÑва Flash', + propertiesTab : 'СвойÑÑва', + title : 'СвойÑÑва Flash', + chkPlay : 'ÐвÑо пÑоигÑÑвание', + chkLoop : 'ÐовÑоÑ', + chkMenu : 'ÐклÑÑиÑÑ Ð¼ÐµÐ½Ñ Flash', + chkFull : 'ÑазÑеÑиÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑкÑаннÑй Ñежим', + scale : 'ÐаÑÑÑабиÑоваÑÑ', + scaleAll : 'ÐоказÑваÑÑ Ð²Ñе', + scaleNoBorder : 'Ðез боÑдÑÑа', + scaleFit : 'ТоÑное Ñовпадение', + access : 'ÐблаÑÑÑ Ð´Ð¾ÑÑÑпа ÑкÑипÑа', + accessAlways : 'ÐÑегда', + accessSameDomain: 'Ð¢Ð¾Ñ Ð¶Ðµ домен', + accessNever : 'Ðикогда', + alignAbsBottom : 'ÐÐ±Ñ Ð¿Ð¾Ð½Ð¸Ð·Ñ', + alignAbsMiddle : 'ÐÐ±Ñ Ð¿Ð¾ÑеÑедине', + alignBaseline : 'Ðо базовой линии', + alignTextTop : 'ТекÑÑ Ð½Ð°Ð²ÐµÑÑ Ñ', + quality : 'ÐаÑеÑÑво', + qualityBest : 'ÐÑÑÑее', + qualityHigh : 'ÐÑÑокое', + qualityAutoHigh : 'ÐÑÑокое (авÑо)', + qualityMedium : 'СÑеднее', + qualityAutoLow : 'Ðизкое (авÑо)', + qualityLow : 'Ðизкое', + windowModeWindow: 'Ðкно', + windowModeOpaque: 'ÐепÑозÑаÑнÑй', + windowModeTransparent : 'ÐÑозÑаÑнÑй', + windowMode : 'ÐконнÑй Ñежим', + flashvars : 'ÐеÑеменнÑе Ð´Ð»Ñ Flash', + bgcolor : 'Ð¦Ð²ÐµÑ Ñона', + hSpace : 'ÐоÑизонÑалÑнÑй оÑÑÑÑп', + vSpace : 'ÐеÑÑикалÑнÑй оÑÑÑÑп', + validateSrc : 'ÐожалÑйÑÑа, введиÑе URL ÑÑÑлки', + validateHSpace : 'ÐоÑизонÑалÑнÑй оÑÑÑÑп задаеÑÑÑ ÑиÑлом.', + validateVSpace : 'ÐеÑÑикалÑнÑй оÑÑÑÑп задаеÑÑÑ ÑиÑлом.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'ÐÑовеÑиÑÑ Ð¾ÑÑогÑаÑиÑ', + title : 'ÐÑовеÑка пÑавопиÑаниÑ', + notAvailable : 'ÐзвиниÑе, ÑеÑÐ²Ð¸Ñ ÑейÑÐ°Ñ Ð½ÐµÐ´Ð¾ÑÑÑпен.', + errorLoading : 'ÐÑибка пÑи загÑÑзке ÑлÑжебного Ñ Ð¾ÑÑа пÑиложениÑ: %s.', + notInDic : 'ÐÐµÑ Ð² ÑловаÑе', + changeTo : 'ÐамениÑÑ Ð½Ð°', + btnIgnore : 'ÐгноÑиÑоваÑÑ', + btnIgnoreAll : 'ÐгноÑиÑоваÑÑ Ð²Ñе', + btnReplace : 'ÐамениÑÑ', + btnReplaceAll : 'ÐамениÑÑ Ð²Ñе', + btnUndo : 'ÐÑмениÑÑ', + noSuggestions : '- ÐÐµÑ Ð¿Ñедположений -', + progress : 'ÐÐ´ÐµÑ Ð¿ÑовеÑка оÑÑогÑаÑии...', + noMispell : 'ÐÑовеÑка оÑÑогÑаÑии законÑена: оÑибок не найдено', + noChanges : 'ÐÑовеÑка оÑÑогÑаÑии законÑена: ни одного Ñлова не изменено', + oneChange : 'ÐÑовеÑка оÑÑогÑаÑии законÑена: одно Ñлово изменено', + manyChanges : 'ÐÑовеÑка оÑÑогÑаÑии законÑена: 1% Ñлов изменено', + ieSpellDownload : 'ÐодÑÐ»Ñ Ð¿ÑовеÑки оÑÑогÑаÑии не ÑÑÑановлен. ХоÑиÑе ÑкаÑаÑÑ ÐµÐ³Ð¾ ÑейÑаÑ?' + }, + + smiley : + { + toolbar : 'Смайлик', + title : 'ÐÑÑавиÑÑ Ñмайлик', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 ÑлеменÑ' + }, + + numberedlist : 'ÐÑмеÑованнÑй ÑпиÑок', + bulletedlist : 'ÐаÑкиÑованнÑй ÑпиÑок', + indent : 'УвелиÑиÑÑ Ð¾ÑÑÑÑп', + outdent : 'УменÑÑиÑÑ Ð¾ÑÑÑÑп', + + justify : + { + left : 'Ðо Ð»ÐµÐ²Ð¾Ð¼Ñ ÐºÑаÑ', + center : 'Ðо ÑенÑÑÑ', + right : 'Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ', + block : 'Ðо ÑиÑине' + }, + + blockquote : 'ЦиÑаÑа', + + clipboard : + { + title : 'ÐÑÑавиÑÑ', + cutError : 'ÐаÑÑÑойки безопаÑноÑÑи ваÑего бÑаÑзеÑа не позволÑÑÑ ÑедакÑоÑÑ Ð°Ð²ÑомаÑиÑеÑки вÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑии вÑÑезаниÑ. ÐожалÑйÑÑа, иÑполÑзÑйÑе клавиаÑÑÑÑ Ð´Ð»Ñ ÑÑого (Ctrl/Cmd+X).', + copyError : 'ÐаÑÑÑойки безопаÑноÑÑи ваÑего бÑаÑзеÑа не позволÑÑÑ ÑедакÑоÑÑ Ð°Ð²ÑомаÑиÑеÑки вÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑии копиÑованиÑ. ÐожалÑйÑÑа, иÑполÑзÑйÑе клавиаÑÑÑÑ Ð´Ð»Ñ ÑÑого (Ctrl/Cmd+C).', + pasteMsg : 'ÐожалÑйÑÑа, вÑÑавÑÑе ÑекÑÑ Ð² пÑÑмоÑголÑник, иÑполÑзÑÑ ÑоÑеÑание ÐºÐ»Ð°Ð²Ð¸Ñ (<STRONG>Ctrl/Cmd+V</STRONG>), и нажмиÑе <STRONG>OK</STRONG>.', + securityMsg : 'Ðо пÑиÑине наÑÑÑоек безопаÑноÑÑи бÑаÑзеÑа, ÑедакÑÐ¾Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑпа к даннÑм бÑÑеÑа обмена напÑÑмÑÑ. Ðам Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑÑавиÑÑ ÑекÑÑ Ñнова в ÑÑо окно.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'ТекÑÑ, коÑоÑÑй Ð²Ñ Ñ Ð¾ÑиÑе вÑÑавиÑÑ, Ð¿Ð¾Ñ Ð¾Ð¶ на копиÑÑемÑй из Word. ÐÑ Ñ Ð¾ÑиÑе оÑиÑÑиÑÑ ÐµÐ³Ð¾ пеÑед вÑÑавкой?', + toolbar : 'ÐÑÑавиÑÑ Ð¸Ð· Word', + title : 'ÐÑÑавиÑÑ Ð¸Ð· Word', + error : 'Ðевозможно оÑиÑÑиÑÑ Ð²ÑÑавленнÑе даннÑе из-за внÑÑÑенней оÑибки' + }, + + pasteText : + { + button : 'ÐÑÑавиÑÑ ÑолÑко ÑекÑÑ', + title : 'ÐÑÑавиÑÑ ÑолÑко ÑекÑÑ' + }, + + templates : + { + button : 'ШаблонÑ', + title : 'Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ ÑодеÑжимого', + options : 'Template Options', // MISSING + insertOption : 'ÐамениÑÑ ÑекÑÑее ÑодеÑжание', + selectPromptMsg : 'ÐожалÑйÑÑа, вÑбеÑеÑе Ñаблон Ð´Ð»Ñ Ð¾ÑкÑÑÑÐ¸Ñ Ð² ÑедакÑоÑе<br>(ÑекÑÑее ÑодеÑжимое бÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑно):', + emptyListMsg : '(Ðи одного Ñаблона не опÑеделено)' + }, + + showBlocks : 'ÐоказаÑÑ Ð±Ð»Ð¾ÐºÐ¸', + + stylesCombo : + { + label : 'СÑилÑ', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', + panelTitle2 : 'Inline Styles', + panelTitle3 : 'СÑили обÑекÑа' + }, + + format : + { + label : 'ФоÑмаÑиÑование', + panelTitle : 'ФоÑмаÑиÑование', + + tag_p : 'ÐоÑмалÑнÑй', + tag_pre : 'ФоÑмаÑиÑованнÑй', + tag_address : 'ÐдÑеÑ', + tag_h1 : 'Ðаголовок 1', + tag_h2 : 'Ðаголовок 2', + tag_h3 : 'Ðаголовок 3', + tag_h4 : 'Ðаголовок 4', + tag_h5 : 'Ðаголовок 5', + tag_h6 : 'Ðаголовок 6', + tag_div : 'ÐоÑмалÑнÑй (DIV)' + }, + + div : + { + title : 'СоздаÑÑ Div-конÑейнеÑ', + toolbar : 'СоздаÑÑ Div-конÑейнеÑ', + cssClassInputLabel : 'ÐлаÑÑÑ ÑаблиÑÑ ÑÑилей', + styleSelectLabel : 'СÑилÑ', + IdInputLabel : 'Id', + languageCodeInputLabel : 'Ðод ÑзÑка', + inlineStyleInputLabel : 'ÐокалÑнÑй ÑÑилÑ', + advisoryTitleInputLabel : 'Advisory Title', + langDirLabel : 'ÐапÑавление пиÑÑма', + langDirLTRLabel : 'Слева напÑаво (LTR)', + langDirRTLLabel : 'СпÑава налево (RTL)', + edit : 'РедакÑиÑоваÑÑ Div', + remove : 'УбÑаÑÑ Div' + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ШÑиÑÑ', + voiceLabel : 'ШÑиÑÑ', + panelTitle : 'ШÑиÑÑ' + }, + + fontSize : + { + label : 'РазмеÑ', + voiceLabel : 'Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа', + panelTitle : 'РазмеÑ' + }, + + colorButton : + { + textColorTitle : 'Ð¦Ð²ÐµÑ ÑекÑÑа', + bgColorTitle : 'Ð¦Ð²ÐµÑ Ñона', + panelTitle : 'Colors', // MISSING + auto : 'ÐвÑомаÑиÑеÑкий', + more : 'ЦвеÑа...' + }, + + colors : + { + '000' : 'ЧеÑнÑй', + '800000' : 'ÐоÑдовÑй', + '8B4513' : 'СÑаÑой кожи', + '2F4F4F' : 'ТемнÑй ÑиневаÑо-ÑеÑÑй', + '008080' : 'ЧайнÑй', + '000080' : 'Темно-ÑиниÑй', + '4B0082' : 'Ðндиго', + '696969' : 'ÐÑÑзно-ÑеÑÑй', + 'B22222' : 'ÐгнеÑпоÑнÑй киÑпиÑ', + 'A52A2A' : 'ÐоÑиÑневÑй', + 'DAA520' : 'ÐÑаÑное золоÑо', + '006400' : 'Темно-зеленÑй', + '40E0D0' : 'ÐиÑÑзовÑй', + '0000CD' : 'Синий', + '800080' : 'ÐÑÑпÑÑнÑй', + '808080' : 'СеÑÑй', + 'F00' : 'ÐÑаÑнÑй', + 'FF8C00' : 'Темно-оÑанжевÑй', + 'FFD700' : 'ÐолоÑой', + '008000' : 'ÐеленÑй', + '0FF' : 'ÐоÑÑкой волнÑ', + '00F' : 'ÐолÑбой', + 'EE82EE' : 'ФиолеÑовÑй', + 'A9A9A9' : 'Темно-ÑеÑÑй', + 'FFA07A' : 'СвеÑлÑй оÑанжево-ÑозовÑй', + 'FFA500' : 'ÐÑанжевÑй', + 'FFFF00' : 'ÐелÑÑй', + '00FF00' : 'ÐзвеÑÑковÑй', + 'AFEEEE' : 'Ðледно-биÑÑзовÑй', + 'ADD8E6' : 'СвелÑо-Ñиний', + 'DDA0DD' : 'СливовÑй', + 'D3D3D3' : 'СвеÑло-ÑеÑÑй', + 'FFF0F5' : 'ÐледнÑй Ñозово-лиловÑй ', + 'FAEBD7' : 'ÐнÑиÑнÑй белÑй', + 'FFFFE0' : 'СвеÑло-желÑÑй', + 'F0FFF0' : 'Свежего меда', + 'F0FFFF' : 'ÐазÑÑÑ', + 'F0F8FF' : 'Ðледно-голÑбой', + 'E6E6FA' : 'Ðледно-лиловÑй', + 'FFF' : 'ÐелÑй' + }, + + scayt : + { + title : 'ÐÑовеÑка ÐÑÑогÑаÑии по ÐеÑе Ðвода', + opera_title : 'Not supported by Opera', // MISSING + enable : 'ÐклÑÑиÑÑ ÐÐÐÐ', + disable : 'ÐÑклÑÑиÑÑ ÐÐÐÐ', + about : 'Ð ÐÐÐÐ', + toggle : 'ÐеÑеклÑÑиÑÑ ÐÐÐÐ', + options : 'ÐаÑÑÑойки', + langs : 'ЯзÑки', + moreSuggestions : 'ÐолÑÑе ваÑианÑов', + ignore : 'ÐÑопÑÑÑиÑÑ', + ignoreAll : 'ÐÑопÑÑÑиÑÑ Ð²ÑÑ', + addWord : 'ÐобавиÑÑ Ñлово', + emptyDic : 'ÐÐ¼Ñ ÑловаÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð½Ðµ пÑÑÑÑм.', + + optionsTab : 'ÐаÑÑÑойки', + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'ЯзÑки', + + dictionariesTab : 'СловаÑи', + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'Ð ÑловаÑÑÑ ' + }, + + about : + { + title : 'РпÑогÑамме CKEditor', + dlgTitle : 'РпÑогÑамме CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Ðо вопÑоÑам лиÑензиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑаÑайÑеÑÑ Ð½Ð° Ð½Ð°Ñ ÑайÑ:', + copy : 'Copyright © $1. ÐÑе пÑава заÑиÑенÑ.' + }, + + maximize : 'ÐакÑимизиÑоваÑÑ', + minimize : 'ÐинимизиÑоваÑÑ', + + fakeobjects : + { + anchor : 'ЯкоÑÑ', + flash : 'Flash-анимаÑиÑ', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'ÐеизвеÑÑнÑй обÑекÑ' + }, + + resize : 'ÐеÑеÑаÑиÑе Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑазмеÑа', + + colordialog : + { + title : 'ÐÑбеÑиÑе ÑвеÑ', + options : 'Color Options', // MISSING + highlight : 'ÐÑделиÑÑ', + selected : 'ÐÑбÑанное', + clear : 'ÐÑиÑÑиÑÑ' + }, + + toolbarCollapse : 'СвеÑнÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð¸Ð½ÑÑÑÑменÑов', + toolbarExpand : 'РазвеÑнÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð¸Ð½ÑÑÑÑменÑов', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'СвойÑÑва докÑменÑа', + title : 'СвойÑÑва докÑменÑа', + design : 'Design', // MISSING + meta : 'ÐеÑа даннÑе', + chooseColor : 'ÐÑбеÑиÑе', + other : '<дÑÑгой>', + docTitle : 'Ðаголовок ÑÑÑаниÑÑ', + charset : 'ÐодиÑовка набоÑа Ñимволов', + charsetOther : 'ÐÑÑÐ³Ð°Ñ ÐºÐ¾Ð´Ð¸Ñовка набоÑа Ñимволов', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'ЦенÑÑалÑно-евÑопейÑкаÑ', + charsetCT : 'ÐиÑайÑÐºÐ°Ñ ÑÑадиÑÐ¸Ð¾Ð½Ð½Ð°Ñ (Big5)', + charsetCR : 'ÐиÑиллиÑа', + charsetGR : 'ÐÑеÑеÑкаÑ', + charsetJP : 'ЯпонÑкаÑ', + charsetKR : 'ÐоÑейÑкаÑ', + charsetTR : 'ТÑÑеÑкаÑ', + charsetUN : 'Юникод (UTF-8)', + charsetWE : 'Ðападно-евÑопейÑкаÑ', + docType : 'Ðаголовок Ñипа докÑменÑа', + docTypeOther : 'ÐÑÑгой заголовок Ñипа докÑменÑа', + xhtmlDec : 'ÐклÑÑиÑÑ XHTML обÑÑвлениÑ', + bgColor : 'Ð¦Ð²ÐµÑ Ñона', + bgImage : 'URL изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñона', + bgFixed : 'ÐеÑкÑоллиÑÑемÑй Ñон', + txtColor : 'Ð¦Ð²ÐµÑ ÑекÑÑа', + margin : 'ÐÑÑÑÑÐ¿Ñ ÑÑÑаниÑÑ', + marginTop : 'ÐеÑÑ Ð½Ð¸Ð¹', + marginLeft : 'ÐевÑй', + marginRight : 'ÐÑавÑй', + marginBottom : 'Ðижний', + metaKeywords : 'ÐлÑÑевÑе Ñлова докÑменÑа (ÑазделеннÑе запÑÑой)', + metaDescription : 'ÐпиÑание докÑменÑа', + metaAuthor : 'ÐвÑоÑ', + metaCopyright : 'ÐвÑоÑÑкие пÑава', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/sk.js b/_source/lang/sk.js new file mode 100644 index 0000000..a59f53b --- /dev/null +++ b/_source/lang/sk.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Slovak language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['sk'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, stlaÄte ALT 0 pre nápovedu.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Zdroj', + newPage : 'Nová stránka', + save : 'UložiÅ¥', + preview : 'Náhľad', + cut : 'Vystrihnúť', + copy : 'KopÃrovaÅ¥', + paste : 'VložiÅ¥', + print : 'TlaÄ', + underline : 'PodÄiarknuté', + bold : 'TuÄné', + italic : 'KurzÃva', + selectAll : 'VybraÅ¥ vÅ¡etko', + removeFormat : 'OdstrániÅ¥ formátovanie', + strike : 'PreÄiarknuté', + subscript : 'Dolný index', + superscript : 'Horný index', + horizontalrule : 'VložiÅ¥ vodorovnú Äiaru', + pagebreak : 'VložiÅ¥ oddeľovaÄ stránky', + pagebreakAlt : 'Zalomenie strany', + unlink : 'OdstrániÅ¥ odkaz', + undo : 'Späť', + redo : 'Znovu', + + // Common messages and labels. + common : + { + browseServer : 'PrechádzaÅ¥ server', + url : 'URL', + protocol : 'Protokol', + upload : 'OdoslaÅ¥', + uploadSubmit : 'OdoslaÅ¥ na server', + image : 'Obrázok', + flash : 'Flash', + form : 'Formulár', + checkbox : 'ZaÅ¡krtávacie polÃÄko', + radio : 'PrepÃnaÄ', + textField : 'Textové pole', + textarea : 'Textová oblasÅ¥', + hiddenField : 'Skryté pole', + button : 'TlaÄidlo', + select : 'Rozbaľovacà zoznam', + imageButton : 'Obrázkové tlaÄidlo', + notSet : '<nenastavené>', + id : 'Id', + name : 'Meno', + langDir : 'Orientácia jazyka', + langDirLtr : 'Zľava doprava (LTR)', + langDirRtl : 'Sprava doľava (RTL)', + langCode : 'Kód jazyka', + longDescr : 'Dlhý popis URL', + cssClass : 'Trieda Å¡týlu', + advisoryTitle : 'Pomocný titulok', + cssStyle : 'Å týl', + ok : 'OK', + cancel : 'ZruÅ¡iÅ¥', + close : 'Zatvorit', + preview : 'Náhľad', + generalTab : 'Hlavné', + advancedTab : 'RozÅ¡Ãrené', + validateNumberFailed : 'Hodnota nieje ÄÃslo.', + confirmNewPage : 'Prajete si naÄÃtat novú stránku? VÅ¡etky neuložené zmeny budú stratené. ', + confirmCancel : 'Niektore možnosti boli zmenené. Naozaj chcete zavrieÅ¥ okno?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Å Ãrka', + height : 'Výška', + align : 'Zarovnanie', + alignLeft : 'Vľavo', + alignRight : 'Vpravo', + alignCenter : 'Na stred', + alignTop : 'Nahor', + alignMiddle : 'Na stred', + alignBottom : 'Dole', + invalidHeight : 'Výška musà byÅ¥ ÄÃslo.', + invalidWidth : 'Å Ãrka musà byÅ¥ ÄÃslo.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'VložiÅ¥ Å¡peciálne znaky', + title : 'Výber Å¡peciálneho znaku', + options : 'Možnosti Å¡pecÃalneho znaku' + }, + + // Link dialog. + link : + { + toolbar : 'VložiÅ¥/zmeniÅ¥ odkaz', + other : '<iný>', + menu : 'ZmeniÅ¥ odkaz', + title : 'Odkaz', + info : 'Informácie o odkaze', + target : 'Cieľ', + upload : 'OdoslaÅ¥', + advanced : 'RozÅ¡Ãrené', + type : 'Typ odkazu', + toUrl : 'URL', // MISSING + toAnchor : 'Kotva v tejto stránke', + toEmail : 'E-Mail', + targetFrame : '<rámec>', + targetPopup : '<vyskakovacie okno>', + targetFrameName : 'Meno rámu cieľa', + targetPopupName : 'Názov vyskakovacieho okna', + popupFeatures : 'Vlastnosti vyskakovacieho okna', + popupResizable : 'Meniteľná veľkosÅ¥', + popupStatusBar : 'Stavový riadok', + popupLocationBar: 'Panel umiestnenia', + popupToolbar : 'Panel nástrojov', + popupMenuBar : 'Panel ponuky', + popupFullScreen : 'Celá obrazovka (IE)', + popupScrollBars : 'PosuvnÃky', + popupDependent : 'ZávislosÅ¥ (Netscape)', + popupLeft : 'Ľavý okraj', + popupTop : 'Horný okraj', + id : 'Id', // MISSING + langDir : 'Orientácia jazyka', + langDirLTR : 'Zľava doprava (LTR)', + langDirRTL : 'Sprava doľava (RTL)', + acccessKey : 'PrÃstupový kľúÄ', + name : 'Meno', + langCode : 'Orientácia jazyka', + tabIndex : 'Poradie prvku', + advisoryTitle : 'Pomocný titulok', + advisoryContentType : 'Pomocný typ obsahu', + cssClasses : 'Trieda Å¡týlu', + charset : 'Priradená znaková sada', + styles : 'Å týl', + rel : 'Relationship', // MISSING + selectAnchor : 'VybraÅ¥ kotvu', + anchorName : 'Podľa mena kotvy', + anchorId : 'Podľa Id objektu', + emailAddress : 'E-Mailová adresa', + emailSubject : 'Predmet správy', + emailBody : 'Telo správy', + noAnchors : '(V stránke nie je definovaná žiadna kotva)', + noUrl : 'Zadajte prosÃm URL odkazu', + noEmail : 'Zadajte prosÃm e-mailovú adresu' + }, + + // Anchor dialog + anchor : + { + toolbar : 'VložiÅ¥/zmeniÅ¥ kotvu', + menu : 'Vlastnosti kotvy', + title : 'Vlastnosti kotvy', + name : 'Meno kotvy', + errorName : 'Zadajte prosÃm meno kotvy', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Vlastnosti ÄÃselného zoznamu', + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Druh', + start : 'ZaÄiatok', + validateStartNumber :'ZaÄiatoÄné ÄÃslo ÄÃselného zoznamu musà byÅ¥ celé ÄÃslo.', + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'NájsÅ¥ a nahradiÅ¥', + find : 'HľadaÅ¥', + replace : 'NahradiÅ¥', + findWhat : 'Äo hľadaÅ¥:', + replaceWith : 'ÄÃm nahradiÅ¥:', + notFoundMsg : 'Hľadaný text nebol nájdený.', + matchCase : 'RozliÅ¡ovaÅ¥ malé/veľké pÃsmená', + matchWord : 'Len celé slová', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'NahradiÅ¥ vÅ¡etko', + replaceSuccessMsg : '%1 výskyt(ov) nahradených.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabuľka', + title : 'Vlastnosti tabuľky', + menu : 'Vlastnosti tabuľky', + deleteTable : 'VymazaÅ¥ tabuľku', + rows : 'Riadky', + columns : 'Stĺpce', + border : 'OhraniÄenie', + widthPx : 'pixelov', + widthPc : 'percent', + widthUnit : 'width unit', // MISSING + cellSpace : 'VzdialenosÅ¥ buniek', + cellPad : 'Odsadenie obsahu', + caption : 'Popis', + summary : 'Prehľad', + headers : 'HlaviÄka', + headersNone : 'Žiadne', + headersColumn : 'Prvý stĺpec', + headersRow : 'Prvý riadok', + headersBoth : 'Obe', + invalidRows : 'PoÄet riadkov musà byÅ¥ ÄÃslo väÄÅ¡ie ako 0.', + invalidCols : 'PoÄet stĺpcov musà byÅ¥ ÄÃslo väÄÅ¡ie ako 0.', + invalidBorder : 'Å irka rámu musà byÅ¥ celé ÄÃslo.', + invalidWidth : 'Å irka tabuľky musà byÅ¥ ÄÃslo.', + invalidHeight : 'Výška tabuľky musà byÅ¥ ÄÃslo.', + invalidCellSpacing : 'Medzera mädzi bunkami (spacing) musà byÅ¥ ÄÃslo.', + invalidCellPadding : 'Odsadenie v bunkách (padding) musà byÅ¥ ÄÃslo.', + + cell : + { + menu : 'Bunka', + insertBefore : 'VložiÅ¥ bunku pred', + insertAfter : 'VložiÅ¥ bunku za', + deleteCell : 'VymazaÅ¥ bunky', + merge : 'ZlúÄiÅ¥ bunky', + mergeRight : 'ZlúÄiÅ¥ doprava', + mergeDown : 'ZlúÄiÅ¥ dole', + splitHorizontal : 'RozdeliÅ¥ bunky horizontálne', + splitVertical : 'RozdeliÅ¥ bunky vertikálne', + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Riadok', + insertBefore : 'VložiÅ¥ riadok za', + insertAfter : 'VložiÅ¥ riadok pred', + deleteRow : 'VymazaÅ¥ riadok' + }, + + column : + { + menu : 'Stĺpec', + insertBefore : 'VložiÅ¥ stĺpec za', + insertAfter : 'VložiÅ¥ stĺpec pred', + deleteColumn : 'ZmazaÅ¥ stĺpec' + } + }, + + // Button Dialog. + button : + { + title : 'Vlastnosti tlaÄidla', + text : 'Text', + type : 'Typ', + typeBtn : 'TlaÄidlo', + typeSbm : 'OdoslaÅ¥', + typeRst : 'VymazaÅ¥' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Vlastnosti zaÅ¡krtávacieho polÃÄka', + radioTitle : 'Vlastnosti prepÃnaÄa', + value : 'Hodnota', + selected : 'Vybrané' + }, + + // Form Dialog. + form : + { + title : 'Vlastnosti formulára', + menu : 'Vlastnosti formulára', + action : 'Akcie', + method : 'Metóda', + encoding : 'Kódovanie' + }, + + // Select Field Dialog. + select : + { + title : 'Vlastnosti rozbaľovacieho zoznamu', + selectInfo : 'Info', + opAvail : 'Dostupné možnosti', + value : 'Hodnota', + size : 'VeľkosÅ¥', + lines : 'riadkov', + chkMulti : 'PovoliÅ¥ viacnásobný výber', + opText : 'Text', + opValue : 'Hodnota', + btnAdd : 'PridaÅ¥', + btnModify : 'ZmeniÅ¥', + btnUp : 'Hore', + btnDown : 'Dole', + btnSetValue : 'NastaviÅ¥ ako vybranú hodnotu', + btnDelete : 'ZmazaÅ¥' + }, + + // Textarea Dialog. + textarea : + { + title : 'Vlastnosti textovej oblasti', + cols : 'Stĺpce', + rows : 'Riadky' + }, + + // Text Field Dialog. + textfield : + { + title : 'Vlastnosti textového poľa', + name : 'Názov', + value : 'Hodnota', + charWidth : 'Å Ãrka pola (znakov)', + maxChars : 'Maximálny poÄet znakov', + type : 'Typ', + typeText : 'Text', + typePass : 'Heslo' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Vlastnosti skrytého poľa', + name : 'Názov', + value : 'Hodnota' + }, + + // Image Dialog. + image : + { + title : 'Vlastnosti obrázku', + titleButton : 'Vlastnosti obrázkového tlaÄidla', + menu : 'Vlastnosti obrázku', + infoTab : 'Informácie o obrázku', + btnUpload : 'OdoslaÅ¥ na server', + upload : 'OdoslaÅ¥', + alt : 'AlternatÃvny text', + lockRatio : 'Zámok', + resetSize : 'Pôvodná veľkosÅ¥', + border : 'Okraje', + hSpace : 'H-medzera', + vSpace : 'V-medzera', + alertUrl : 'Zadajte prosÃm URL obrázku', + linkTab : 'Odkaz', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Vlastnosti Flashu', + propertiesTab : 'Properties', // MISSING + title : 'Vlastnosti Flashu', + chkPlay : 'Automatické prehrávanie', + chkLoop : 'Opakovanie', + chkMenu : 'PovoliÅ¥ Flash Menu', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Mierka', + scaleAll : 'ZobraziÅ¥ mierku', + scaleNoBorder : 'Bez okrajov', + scaleFit : 'RoztiahnuÅ¥ na celé', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Ãplne dole', + alignAbsMiddle : 'Do stredu', + alignBaseline : 'Na základÅu', + alignTextTop : 'Na horný okraj textu', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Farba pozadia', + hSpace : 'H-medzera', + vSpace : 'V-medzera', + validateSrc : 'Zadajte prosÃm URL odkazu', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Kontrola pravopisu', + title : 'Spell Check', // MISSING + notAvailable : 'Služba práve nieje dostupná.', + errorLoading : 'Chyba pri naÄÃtanà slovnÃka z adresy: %s.', + notInDic : 'Nie je v slovnÃku', + changeTo : 'ZmeniÅ¥ na', + btnIgnore : 'IgnorovaÅ¥', + btnIgnoreAll : 'IgnorovaÅ¥ vÅ¡etko', + btnReplace : 'PrepÃsat', + btnReplaceAll : 'PrepÃsat vÅ¡etko', + btnUndo : 'Späť', + noSuggestions : '- Žiadny návrh -', + progress : 'Prebieha kontrola pravopisu...', + noMispell : 'Kontrola pravopisu dokonÄená: bez chýb', + noChanges : 'Kontrola pravopisu dokonÄená: žiadne slová nezmenené', + oneChange : 'Kontrola pravopisu dokonÄená: zmenené jedno slovo', + manyChanges : 'Kontrola pravopisu dokonÄená: zmenených %1 slov', + ieSpellDownload : 'Kontrola pravopisu nie je naiÅ¡talovaná. Chcete ju hneÄ stiahnuÅ¥?' + }, + + smiley : + { + toolbar : 'SmajlÃky', + title : 'Vkladanie smajlÃkov', + options : 'Možnosti smajlÃkov' + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ÄÃslovanie', + bulletedlist : 'Odrážky', + indent : 'ZväÄÅ¡iÅ¥ odsadenie', + outdent : 'ZmenÅ¡iÅ¥ odsadenie', + + justify : + { + left : 'ZarovnaÅ¥ vľavo', + center : 'ZarovnaÅ¥ na stred', + right : 'ZarovnaÅ¥ vpravo', + block : 'ZarovnaÅ¥ do bloku' + }, + + blockquote : 'Citácia', + + clipboard : + { + title : 'VložiÅ¥', + cutError : 'BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre vystrihnutie zvoleného textu do schránky. ProsÃm vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl/Cmd+X).', + copyError : 'BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre kopÃrovanie zvoleného textu do schránky. ProsÃm skopÃrujte zvolený text do schránky pomocou klávesnice (Ctrl/Cmd+C).', + pasteMsg : 'ProsÃm vložte nasledovný rámÄek použitÃm klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlaÄte <STRONG>OK</STRONG>.', + securityMsg : 'BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru pristupovaÅ¥ priamo k datám v schránke. MusÃte ich vložiÅ¥ znovu do tohto okna.', + pasteArea : 'VložiÅ¥ pole' + }, + + pastefromword : + { + confirmCleanup : 'Vkladaný text vyzerá byÅ¥ skopÃrovaný z Wordu. Chcete ho automaticky vyÄistiÅ¥ pred vkladanÃm?', + toolbar : 'VložiÅ¥ z Wordu', + title : 'VložiÅ¥ z Wordu', + error : 'Nastala chyba pri Äistenà údajov. Nie je možné vyÄistiÅ¥ vložené údaje.' + }, + + pasteText : + { + button : 'VložiÅ¥ ako Äistý text', + title : 'VložiÅ¥ ako Äistý text' + }, + + templates : + { + button : 'Å ablóny', + title : 'Å ablóny obsahu', + options : 'Vlastnosti Å¡ablóny', + insertOption : 'NahradiÅ¥ aktuálny obsah', + selectPromptMsg : 'ProsÃm vyberte Å¡ablóny na otvorenie v editore<br>(súšasný obsah bude stratený):', + emptyListMsg : '(žiadne Å¡ablóny nenájdené)' + }, + + showBlocks : 'UkázaÅ¥ bloky', + + stylesCombo : + { + label : 'Å týl', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Formát', + panelTitle : 'Formát', + + tag_p : 'Normálny', + tag_pre : 'Formátovaný', + tag_address : 'Adresa', + tag_h1 : 'Nadpis 1', + tag_h2 : 'Nadpis 2', + tag_h3 : 'Nadpis 3', + tag_h4 : 'Nadpis 4', + tag_h5 : 'Nadpis 5', + tag_h6 : 'Nadpis 6', + tag_div : 'Odsek (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame - vlastnosti', + toolbar : 'IFrame', // MISSING + noUrl : 'Vložte URL pre iframe', + scrolling : 'PovoliÅ¥ skrolovanie', + border : 'ZobraziÅ¥ orámovanie' + }, + + font : + { + label : 'PÃsmo', + voiceLabel : 'Font', // MISSING + panelTitle : 'PÃsmo' + }, + + fontSize : + { + label : 'VeľkosÅ¥', + voiceLabel : 'VeľkosÅ¥ pÃsma', + panelTitle : 'VeľkosÅ¥' + }, + + colorButton : + { + textColorTitle : 'Farba textu', + bgColorTitle : 'Farba pozadia', + panelTitle : 'Farby', + auto : 'Automaticky', + more : 'Viac farieb...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'MaximalizovaÅ¥', + minimize : 'MinimalizovaÅ¥', + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Vlastnosti dokumentu', + title : 'Vlastnosti dokumentu', + design : 'Design', // MISSING + meta : 'Meta Data', + chooseColor : 'Choose', // MISSING + other : '<iný>', + docTitle : 'Titulok', + charset : 'Kódová stránka', + charsetOther : 'Iná kódová stránka', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Stredoeurópske', + charsetCT : 'ÄÃnÅ¡tina tradiÄná (Big5)', + charsetCR : 'Cyrillika', + charsetGR : 'GréÄtina', + charsetJP : 'JaponÄina', + charsetKR : 'KorejÄina', + charsetTR : 'TureÄtina', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Západná európa', + docType : 'Typ záhlavia dokumentu', + docTypeOther : 'Iný typ záhlavia dokumentu', + xhtmlDec : 'Obsahuje deklarácie XHTML', + bgColor : 'Farba pozadia', + bgImage : 'URL adresa obrázku na pozadÃ', + bgFixed : 'Fixné pozadie', + txtColor : 'Farba textu', + margin : 'Okraje stránky', + marginTop : 'Horný', + marginLeft : 'Ľavý', + marginRight : 'Pravý', + marginBottom : 'Dolný', + metaKeywords : 'KľúÄové slová pre indexovanie (oddelené Äiarkou)', + metaDescription : 'Popis stránky', + metaAuthor : 'Autor', + metaCopyright : 'Autorské práva', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/sl.js b/_source/lang/sl.js new file mode 100644 index 0000000..e00fb0a --- /dev/null +++ b/_source/lang/sl.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Slovenian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['sl'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Izvorna koda', + newPage : 'Nova stran', + save : 'Shrani', + preview : 'Predogled', + cut : 'Izreži', + copy : 'Kopiraj', + paste : 'Prilepi', + print : 'Natisni', + underline : 'PodÄrtano', + bold : 'Krepko', + italic : 'LežeÄe', + selectAll : 'Izberi vse', + removeFormat : 'Odstrani oblikovanje', + strike : 'PreÄrtano', + subscript : 'Podpisano', + superscript : 'Nadpisano', + horizontalrule : 'Vstavi vodoravno Ärto', + pagebreak : 'Vstavi prelom strani', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Odstrani povezavo', + undo : 'Razveljavi', + redo : 'Ponovi', + + // Common messages and labels. + common : + { + browseServer : 'Prebrskaj na strežniku', + url : 'URL', + protocol : 'Protokol', + upload : 'Prenesi', + uploadSubmit : 'PoÅ¡lji na strežnik', + image : 'Slika', + flash : 'Flash', + form : 'Obrazec', + checkbox : 'Potrditveno polje', + radio : 'Izbirno polje', + textField : 'Vnosno polje', + textarea : 'Vnosno obmoÄje', + hiddenField : 'Skrito polje', + button : 'Gumb', + select : 'Spustni seznam', + imageButton : 'Gumb s sliko', + notSet : '<ni postavljen>', + id : 'Id', + name : 'Ime', + langDir : 'Smer jezika', + langDirLtr : 'Od leve proti desni (LTR)', + langDirRtl : 'Od desne proti levi (RTL)', + langCode : 'Oznaka jezika', + longDescr : 'Dolg opis URL-ja', + cssClass : 'Razred stilne predloge', + advisoryTitle : 'Predlagani naslov', + cssStyle : 'Slog', + ok : 'V redu', + cancel : 'PrekliÄi', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'SploÅ¡no', + advancedTab : 'Napredno', + validateNumberFailed : 'Ta vrednost ni Å¡tevilo.', + confirmNewPage : 'Vse neshranjene spremembe te vsebine bodo izgubljene. Ali gotovo želiÅ¡ naložiti novo stran?', + confirmCancel : 'Nekaj možnosti je bilo spremenjenih. Ali gotovo želiÅ¡ zapreti okno?', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Å irina', + height : 'ViÅ¡ina', + align : 'Poravnava', + alignLeft : 'Levo', + alignRight : 'Desno', + alignCenter : 'Sredinsko', + alignTop : 'Na vrh', + alignMiddle : 'V sredino', + alignBottom : 'Na dno', + invalidHeight : 'ViÅ¡ina mora biti Å¡tevilo.', + invalidWidth : 'Å irina mora biti Å¡tevilo.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, nedosegljiv</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Vstavi posebni znak', + title : 'Izberi posebni znak', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Vstavi/uredi povezavo', + other : '<drug>', + menu : 'Uredi povezavo', + title : 'Povezava', + info : 'Podatki o povezavi', + target : 'Cilj', + upload : 'Prenesi', + advanced : 'Napredno', + type : 'Vrsta povezave', + toUrl : 'URL', // MISSING + toAnchor : 'Zaznamek na tej strani', + toEmail : 'Elektronski naslov', + targetFrame : '<okvir>', + targetPopup : '<pojavno okno>', + targetFrameName : 'Ime ciljnega okvirja', + targetPopupName : 'Ime pojavnega okna', + popupFeatures : 'ZnaÄilnosti pojavnega okna', + popupResizable : 'Spremenljive velikosti', + popupStatusBar : 'Vrstica stanja', + popupLocationBar: 'Naslovna vrstica', + popupToolbar : 'Orodna vrstica', + popupMenuBar : 'Menijska vrstica', + popupFullScreen : 'Celozaslonska slika (IE)', + popupScrollBars : 'Drsniki', + popupDependent : 'Podokno (Netscape)', + popupLeft : 'Lega levo', + popupTop : 'Lega na vrhu', + id : 'Id', + langDir : 'Smer jezika', + langDirLTR : 'Od leve proti desni (LTR)', + langDirRTL : 'Od desne proti levi (RTL)', + acccessKey : 'Vstopno geslo', + name : 'Ime', + langCode : 'Smer jezika', + tabIndex : 'Å tevilka tabulatorja', + advisoryTitle : 'Predlagani naslov', + advisoryContentType : 'Predlagani tip vsebine (content-type)', + cssClasses : 'Razred stilne predloge', + charset : 'Kodna tabela povezanega vira', + styles : 'Slog', + rel : 'Relationship', // MISSING + selectAnchor : 'Izberi zaznamek', + anchorName : 'Po imenu zaznamka', + anchorId : 'Po ID-ju elementa', + emailAddress : 'Elektronski naslov', + emailSubject : 'Predmet sporoÄila', + emailBody : 'Vsebina sporoÄila', + noAnchors : '(V tem dokumentu ni zaznamkov)', + noUrl : 'Vnesite URL povezave', + noEmail : 'Vnesite elektronski naslov' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Vstavi/uredi zaznamek', + menu : 'Lastnosti zaznamka', + title : 'Lastnosti zaznamka', + name : 'Ime zaznamka', + errorName : 'Prosim vnesite ime zaznamka', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Najdi in zamenjaj', + find : 'Najdi', + replace : 'Zamenjaj', + findWhat : 'Najdi:', + replaceWith : 'Zamenjaj z:', + notFoundMsg : 'Navedeno besedilo ni bilo najdeno.', + matchCase : 'Razlikuj velike in male Ärke', + matchWord : 'Samo cele besede', + matchCyclic : 'Primerjaj znake v cirilici', + replaceAll : 'Zamenjaj vse', + replaceSuccessMsg : '%1 pojavitev je bilo zamenjano.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabela', + title : 'Lastnosti tabele', + menu : 'Lastnosti tabele', + deleteTable : 'IzbriÅ¡i tabelo', + rows : 'Vrstice', + columns : 'Stolpci', + border : 'Velikost obrobe', + widthPx : 'pik', + widthPc : 'procentov', + widthUnit : 'width unit', // MISSING + cellSpace : 'Razmik med celicami', + cellPad : 'Polnilo med celicami', + caption : 'Naslov', + summary : 'Povzetek', + headers : 'Glave', + headersNone : 'Brez', + headersColumn : 'Prvi stolpec', + headersRow : 'Prva vrstica', + headersBoth : 'Oboje', + invalidRows : 'Å tevilo vrstic mora biti veÄje od 0.', + invalidCols : 'Å tevilo stolpcev mora biti veÄje od 0.', + invalidBorder : 'Å irina obrobe mora biti Å¡tevilo.', + invalidWidth : 'Å irina tabele mora biti Å¡tevilo.', + invalidHeight : 'ViÅ¡ina tabele mora biti Å¡tevilo.', + invalidCellSpacing : 'Razmik med celicami mora biti Å¡tevilo.', + invalidCellPadding : 'Zamik celic mora biti Å¡tevilo', + + cell : + { + menu : 'Celica', + insertBefore : 'Vstavi celico pred', + insertAfter : 'Vstavi celico za', + deleteCell : 'IzbriÅ¡i celice', + merge : 'Združi celice', + mergeRight : 'Združi desno', + mergeDown : 'Druži navzdol', + splitHorizontal : 'Razdeli celico vodoravno', + splitVertical : 'Razdeli celico navpiÄno', + title : 'Lastnosti celice', + cellType : 'Vrsta celice', + rowSpan : 'Razpon vrstic', + colSpan : 'Razpon stolpcev', + wordWrap : 'Prelom besedila', + hAlign : 'Vodoravna poravnava', + vAlign : 'NavpiÄna poravnava', + alignBaseline : 'Osnovnica', + bgColor : 'Barva ozadja', + borderColor : 'Barva obrobe', + data : 'Podatki', + header : 'Glava', + yes : 'Da', + no : 'Ne', + invalidWidth : 'Å irina celice mora biti Å¡tevilo.', + invalidHeight : 'ViÅ¡ina celice mora biti Å¡tevilo.', + invalidRowSpan : 'Razpon vrstic mora biti celo Å¡tevilo.', + invalidColSpan : 'Razpon stolpcev mora biti celo Å¡tevilo.', + chooseColor : 'Izberi' + }, + + row : + { + menu : 'Vrstica', + insertBefore : 'Vstavi vrstico pred', + insertAfter : 'Vstavi vrstico za', + deleteRow : 'IzbriÅ¡i vrstice' + }, + + column : + { + menu : 'Stolpec', + insertBefore : 'Vstavi stolpec pred', + insertAfter : 'Vstavi stolpec za', + deleteColumn : 'IzbriÅ¡i stolpce' + } + }, + + // Button Dialog. + button : + { + title : 'Lastnosti gumba', + text : 'Besedilo (Vrednost)', + type : 'Tip', + typeBtn : 'Gumb', + typeSbm : 'Potrdi', + typeRst : 'Ponastavi' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Lastnosti potrditvenega polja', + radioTitle : 'Lastnosti izbirnega polja', + value : 'Vrednost', + selected : 'Izbrano' + }, + + // Form Dialog. + form : + { + title : 'Lastnosti obrazca', + menu : 'Lastnosti obrazca', + action : 'Akcija', + method : 'Metoda', + encoding : 'Kodiranje znakov' + }, + + // Select Field Dialog. + select : + { + title : 'Lastnosti spustnega seznama', + selectInfo : 'Podatki', + opAvail : 'Razpoložljive izbire', + value : 'Vrednost', + size : 'Velikost', + lines : 'vrstic', + chkMulti : 'Dovoli izbor veÄih vrstic', + opText : 'Besedilo', + opValue : 'Vrednost', + btnAdd : 'Dodaj', + btnModify : 'Spremeni', + btnUp : 'Gor', + btnDown : 'Dol', + btnSetValue : 'Postavi kot privzeto izbiro', + btnDelete : 'IzbriÅ¡i' + }, + + // Textarea Dialog. + textarea : + { + title : 'Lastnosti vnosnega obmoÄja', + cols : 'Stolpcev', + rows : 'Vrstic' + }, + + // Text Field Dialog. + textfield : + { + title : 'Lastnosti vnosnega polja', + name : 'Ime', + value : 'Vrednost', + charWidth : 'Dolžina', + maxChars : 'NajveÄje Å¡tevilo znakov', + type : 'Tip', + typeText : 'Besedilo', + typePass : 'Geslo' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Lastnosti skritega polja', + name : 'Ime', + value : 'Vrednost' + }, + + // Image Dialog. + image : + { + title : 'Lastnosti slike', + titleButton : 'Lastnosti gumba s sliko', + menu : 'Lastnosti slike', + infoTab : 'Podatki o sliki', + btnUpload : 'PoÅ¡lji na strežnik', + upload : 'PoÅ¡lji', + alt : 'Nadomestno besedilo', + lockRatio : 'Zakleni razmerje', + resetSize : 'Ponastavi velikost', + border : 'Obroba', + hSpace : 'Vodoravni razmik', + vSpace : 'NavpiÄni razmik', + alertUrl : 'Vnesite URL slike', + linkTab : 'Povezava', + button2Img : 'ŽeliÅ¡ pretvoriti izbrani gumb s sliko v preprosto sliko?', + img2Button : 'ŽeliÅ¡ pretvoriti izbrano sliko v gumb s sliko?', + urlMissing : 'Manjka vir (URL) slike.', + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Lastnosti Flash', + propertiesTab : 'Lastnosti', + title : 'Lastnosti Flash', + chkPlay : 'Samodejno predvajaj', + chkLoop : 'Ponavljanje', + chkMenu : 'OmogoÄi Flash Meni', + chkFull : 'Dovoli celozaslonski naÄin', + scale : 'PoveÄava', + scaleAll : 'Pokaži vse', + scaleNoBorder : 'Brez obrobe', + scaleFit : 'NatanÄno prileganje', + access : 'Dostop skript', + accessAlways : 'Vedno', + accessSameDomain: 'Samo ista domena', + accessNever : 'Nikoli', + alignAbsBottom : 'Popolnoma na dno', + alignAbsMiddle : 'Popolnoma v sredino', + alignBaseline : 'Na osnovno Ärto', + alignTextTop : 'Besedilo na vrh', + quality : 'Kakovost', + qualityBest : 'NajviÅ¡ja', + qualityHigh : 'Visoka', + qualityAutoHigh : 'Samodejno visoka', + qualityMedium : 'Srednja', + qualityAutoLow : 'Samodejno nizka', + qualityLow : 'Nizka', + windowModeWindow: 'Okno', + windowModeOpaque: 'Motno', + windowModeTransparent : 'Prosojno', + windowMode : 'Vrsta okna', + flashvars : 'Spremenljivke za Flash', + bgcolor : 'Barva ozadja', + hSpace : 'Vodoravni razmik', + vSpace : 'NavpiÄni razmik', + validateSrc : 'Vnesite URL povezave', + validateHSpace : 'Vodoravni razmik mora biti Å¡tevilo.', + validateVSpace : 'NavpiÄni razmik mora biti Å¡tevilo.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Preveri Ärkovanje', + title : 'Ärkovalnik', + notAvailable : 'Oprostite, storitev trenutno ni dosegljiva.', + errorLoading : 'Napaka pri nalaganju storitve programa na naslovu %s.', + notInDic : 'Ni v slovarju', + changeTo : 'Spremeni v', + btnIgnore : 'Prezri', + btnIgnoreAll : 'Prezri vse', + btnReplace : 'Zamenjaj', + btnReplaceAll : 'Zamenjaj vse', + btnUndo : 'Razveljavi', + noSuggestions : '- Ni predlogov -', + progress : 'Preverjanje Ärkovanja se izvaja...', + noMispell : 'Ärkovanje je konÄano: Brez napak', + noChanges : 'Ärkovanje je konÄano: Nobena beseda ni bila spremenjena', + oneChange : 'Ärkovanje je konÄano: Spremenjena je bila ena beseda', + manyChanges : 'Ärkovanje je konÄano: Spremenjenih je bilo %1 besed', + ieSpellDownload : 'Ärkovalnik ni nameÅ¡Äen. Ali ga želite prenesti sedaj?' + }, + + smiley : + { + toolbar : 'SmeÅ¡ko', + title : 'Vstavi smeÅ¡ka', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' + }, + + numberedlist : 'OÅ¡tevilÄen seznam', + bulletedlist : 'OznaÄen seznam', + indent : 'PoveÄaj zamik', + outdent : 'ZmanjÅ¡aj zamik', + + justify : + { + left : 'Leva poravnava', + center : 'Sredinska poravnava', + right : 'Desna poravnava', + block : 'Obojestranska poravnava' + }, + + blockquote : 'Citat', + + clipboard : + { + title : 'Prilepi', + cutError : 'Varnostne nastavitve brskalnika ne dopuÅ¡Äajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).', + copyError : 'Varnostne nastavitve brskalnika ne dopuÅ¡Äajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).', + pasteMsg : 'Prosim prilepite v sleÄi okvir s pomoÄjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.', + securityMsg : 'Zaradi varnostnih nastavitev vaÅ¡ega brskalnika urejevalnik ne more neposredno dostopati do odložiÅ¡Äa. Vsebino odložiÅ¡Äa ponovno prilepite v to okno.', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Prilepi iz Worda', + title : 'Prilepi iz Worda', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Prilepi kot golo besedilo', + title : 'Prilepi kot golo besedilo' + }, + + templates : + { + button : 'Predloge', + title : 'Vsebinske predloge', + options : 'Template Options', // MISSING + insertOption : 'Zamenjaj trenutno vsebino', + selectPromptMsg : 'Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):', + emptyListMsg : '(Ni pripravljenih predlog)' + }, + + showBlocks : 'Prikaži ograde', + + stylesCombo : + { + label : 'Slog', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Slogi odstavkov', + panelTitle2 : 'Slogi besedila', + panelTitle3 : 'Slogi objektov' + }, + + format : + { + label : 'Oblika', + panelTitle : 'Oblika', + + tag_p : 'Navaden', + tag_pre : 'Oblikovan', + tag_address : 'Napis', + tag_h1 : 'Naslov 1', + tag_h2 : 'Naslov 2', + tag_h3 : 'Naslov 3', + tag_h4 : 'Naslov 4', + tag_h5 : 'Naslov 5', + tag_h6 : 'Naslov 6', + tag_div : 'Navaden (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Pisava', + voiceLabel : 'Pisava', + panelTitle : 'Pisava' + }, + + fontSize : + { + label : 'Velikost', + voiceLabel : 'Velikost', + panelTitle : 'Velikost' + }, + + colorButton : + { + textColorTitle : 'Barva besedila', + bgColorTitle : 'Barva ozadja', + panelTitle : 'Colors', // MISSING + auto : 'Samodejno', + more : 'VeÄ barv...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Ärkovanje med tipkanjem', + opera_title : 'Not supported by Opera', // MISSING + enable : 'OmogoÄi SCAYT', + disable : 'OnemogoÄi SCAYT', + about : 'O storitvi SCAYT', + toggle : 'Preklopi SCAYT', + options : 'Možnosti', + langs : 'Jeziki', + moreSuggestions : 'VeÄ predlogov', + ignore : 'Prezri', + ignoreAll : 'Prezri vse', + addWord : 'Dodaj besedo', + emptyDic : 'Ime slovarja ne more biti prazno.', + + optionsTab : 'Možnosti', + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Jeziki', + + dictionariesTab : 'Slovarji', + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'O storitvi' + }, + + about : + { + title : 'O programu CKEditor', + dlgTitle : 'O programu CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Za informacijo o licenci prostim obiÅ¡Äite naÅ¡o spletno stran:', + copy : 'Copyright © $1. Vse pravice pridržane.' + }, + + maximize : 'Maksimiraj', + minimize : 'Minimiraj', + + fakeobjects : + { + anchor : 'Sidro', + flash : 'Flash animacija', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Neznan objekt' + }, + + resize : 'Potegni za spremembo velikosti', + + colordialog : + { + title : 'Izberi barvo', + options : 'Color Options', // MISSING + highlight : 'Poudarjeno', + selected : 'Izbrano', + clear : 'PoÄisti' + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Lastnosti dokumenta', + title : 'Lastnosti dokumenta', + design : 'Design', // MISSING + meta : 'Meta podatki', + chooseColor : 'Izberi', + other : '<drug>', + docTitle : 'Naslov strani', + charset : 'Kodna tabela', + charsetOther : 'Druga kodna tabela', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Srednjeevropsko', + charsetCT : 'Tradicionalno Kitajsko (Big5)', + charsetCR : 'Cirilica', + charsetGR : 'GrÅ¡ko', + charsetJP : 'Japonsko', + charsetKR : 'Korejsko', + charsetTR : 'TurÅ¡ko', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Zahodnoevropsko', + docType : 'Glava tipa dokumenta', + docTypeOther : 'Druga glava tipa dokumenta', + xhtmlDec : 'Vstavi XHTML deklaracije', + bgColor : 'Barva ozadja', + bgImage : 'URL slike za ozadje', + bgFixed : 'NepremiÄno ozadje', + txtColor : 'Barva besedila', + margin : 'Zamiki strani', + marginTop : 'Na vrhu', + marginLeft : 'Levo', + marginRight : 'Desno', + marginBottom : 'Spodaj', + metaKeywords : 'KljuÄne besede (loÄene z vejicami)', + metaDescription : 'Opis strani', + metaAuthor : 'Avtor', + metaCopyright : 'Avtorske pravice', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/sr-latn.js b/_source/lang/sr-latn.js new file mode 100644 index 0000000..04a95ee --- /dev/null +++ b/_source/lang/sr-latn.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Serbian (Latin) language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['sr-latn'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Kôd', + newPage : 'Nova stranica', + save : 'SaÄuvaj', + preview : 'Izgled stranice', + cut : 'Iseci', + copy : 'Kopiraj', + paste : 'Zalepi', + print : 'Å tampa', + underline : 'PodvuÄeno', + bold : 'Podebljano', + italic : 'Kurziv', + selectAll : 'OznaÄi sve', + removeFormat : 'Ukloni formatiranje', + strike : 'Precrtano', + subscript : 'Indeks', + superscript : 'Stepen', + horizontalrule : 'Unesi horizontalnu liniju', + pagebreak : 'Insert Page Break for Printing', // MISSING + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Ukloni link', + undo : 'Poni�ti akciju', + redo : 'Ponovi akciju', + + // Common messages and labels. + common : + { + browseServer : 'Pretraži server', + url : 'URL', + protocol : 'Protokol', + upload : 'PoÅ¡alji', + uploadSubmit : 'PoÅ¡alji na server', + image : 'Slika', + flash : 'FleÅ¡', + form : 'Forma', + checkbox : 'Polje za potvrdu', + radio : 'Radio-dugme', + textField : 'Tekstualno polje', + textarea : 'Zona teksta', + hiddenField : 'Skriveno polje', + button : 'Dugme', + select : 'Izborno polje', + imageButton : 'Dugme sa slikom', + notSet : '<nije postavljeno>', + id : 'Id', + name : 'Naziv', + langDir : 'Smer jezika', + langDirLtr : 'S leva na desno (LTR)', + langDirRtl : 'S desna na levo (RTL)', + langCode : 'Kôd jezika', + longDescr : 'Pun opis URL', + cssClass : 'Stylesheet klase', + advisoryTitle : 'Advisory naslov', + cssStyle : 'Stil', + ok : 'OK', + cancel : 'Otkaži', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'Napredni tagovi', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Å irina', + height : 'Visina', + align : 'Ravnanje', + alignLeft : 'Levo', + alignRight : 'Desno', + alignCenter : 'Sredina', + alignTop : 'Vrh', + alignMiddle : 'Sredina', + alignBottom : 'Dole', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Unesi specijalni karakter', + title : 'Odaberite specijalni karakter', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'Unesi/izmeni link', + other : '<оÑÑало>', + menu : 'Izmeni link', + title : 'Link', + info : 'Link Info', + target : 'Meta', + upload : 'PoÅ¡alji', + advanced : 'Napredni tagovi', + type : 'Vrsta linka', + toUrl : 'URL', // MISSING + toAnchor : 'Sidro na ovoj stranici', + toEmail : 'E-Mail', + targetFrame : '<okvir>', + targetPopup : '<popup prozor>', + targetFrameName : 'Naziv odrediÅ¡nog frejma', + targetPopupName : 'Naziv popup prozora', + popupFeatures : 'MoguÄnosti popup prozora', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'Statusna linija', + popupLocationBar: 'Lokacija', + popupToolbar : 'Toolbar', + popupMenuBar : 'Kontekstni meni', + popupFullScreen : 'Prikaz preko celog ekrana (IE)', + popupScrollBars : 'Scroll bar', + popupDependent : 'Zavisno (Netscape)', + popupLeft : 'Od leve ivice ekrana (px)', + popupTop : 'Od vrha ekrana (px)', + id : 'Id', // MISSING + langDir : 'Smer jezika', + langDirLTR : 'S leva na desno (LTR)', + langDirRTL : 'S desna na levo (RTL)', + acccessKey : 'Pristupni taster', + name : 'Naziv', + langCode : 'Smer jezika', + tabIndex : 'Tab indeks', + advisoryTitle : 'Advisory naslov', + advisoryContentType : 'Advisory vrsta sadržaja', + cssClasses : 'Stylesheet klase', + charset : 'Linked Resource Charset', + styles : 'Stil', + rel : 'Relationship', // MISSING + selectAnchor : 'Odaberi sidro', + anchorName : 'Po nazivu sidra', + anchorId : 'Po Id-ju elementa', + emailAddress : 'E-Mail adresa', + emailSubject : 'Naslov', + emailBody : 'Sadržaj poruke', + noAnchors : '(Nema dostupnih sidra)', + noUrl : 'Unesite URL linka', + noEmail : 'Otkucajte adresu elektronske pote' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Unesi/izmeni sidro', + menu : 'Osobine sidra', + title : 'Osobine sidra', + name : 'Ime sidra', + errorName : 'Unesite ime sidra', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'Pretraga', + replace : 'Zamena', + findWhat : 'Pronadi:', + replaceWith : 'Zameni sa:', + notFoundMsg : 'Traženi tekst nije pronaÄen.', + matchCase : 'Razlikuj mala i velika slova', + matchWord : 'Uporedi cele reci', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Zameni sve', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Tabela', + title : 'Osobine tabele', + menu : 'Osobine tabele', + deleteTable : 'Delete Table', // MISSING + rows : 'Redova', + columns : 'Kolona', + border : 'VeliÄina okvira', + widthPx : 'piksela', + widthPc : 'procenata', + widthUnit : 'width unit', // MISSING + cellSpace : 'Äelijski prostor', + cellPad : 'Razmak Äelija', + caption : 'Naslov tabele', + summary : 'Summary', // MISSING + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cell', // MISSING + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'ObriÅ¡i Äelije', + merge : 'Spoj celije', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', // MISSING + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'ObriÅ¡i redove' + }, + + column : + { + menu : 'Column', // MISSING + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'ObriÅ¡i kolone' + } + }, + + // Button Dialog. + button : + { + title : 'Osobine dugmeta', + text : 'Tekst (vrednost)', + type : 'Tip', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Osobine polja za potvrdu', + radioTitle : 'Osobine radio-dugmeta', + value : 'Vrednost', + selected : 'OznaÄeno' + }, + + // Form Dialog. + form : + { + title : 'Osobine forme', + menu : 'Osobine forme', + action : 'Akcija', + method : 'Metoda', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'Osobine izbornog polja', + selectInfo : 'Info', + opAvail : 'Dostupne opcije', + value : 'Vrednost', + size : 'VeliÄina', + lines : 'linija', + chkMulti : 'Dozvoli viÅ¡estruku selekciju', + opText : 'Tekst', + opValue : 'Vrednost', + btnAdd : 'Dodaj', + btnModify : 'Izmeni', + btnUp : 'Gore', + btnDown : 'Dole', + btnSetValue : 'Podesi kao oznaÄenu vrednost', + btnDelete : 'ObriÅ¡i' + }, + + // Textarea Dialog. + textarea : + { + title : 'Osobine zone teksta', + cols : 'Broj kolona', + rows : 'Broj redova' + }, + + // Text Field Dialog. + textfield : + { + title : 'Osobine tekstualnog polja', + name : 'Naziv', + value : 'Vrednost', + charWidth : 'Å irina (karaktera)', + maxChars : 'Maksimalno karaktera', + type : 'Tip', + typeText : 'Tekst', + typePass : 'Lozinka' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Osobine skrivenog polja', + name : 'Naziv', + value : 'Vrednost' + }, + + // Image Dialog. + image : + { + title : 'Osobine slika', + titleButton : 'Osobine dugmeta sa slikom', + menu : 'Osobine slika', + infoTab : 'Info slike', + btnUpload : 'PoÅ¡alji na server', + upload : 'PoÅ¡alji', + alt : 'Alternativni tekst', + lockRatio : 'ZakljuÄaj odnos', + resetSize : 'Resetuj veliÄinu', + border : 'Okvir', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'Unesite URL slike', + linkTab : 'Link', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Osobine fleÅ¡a', + propertiesTab : 'Properties', // MISSING + title : 'Osobine fleÅ¡a', + chkPlay : 'Automatski start', + chkLoop : 'Ponavljaj', + chkMenu : 'UkljuÄi fleÅ¡ meni', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'Skaliraj', + scaleAll : 'Prikaži sve', + scaleNoBorder : 'Bez ivice', + scaleFit : 'Popuni povrÅ¡inu', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs dole', + alignAbsMiddle : 'Abs sredina', + alignBaseline : 'Bazno', + alignTextTop : 'Vrh teksta', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'Boja pozadine', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'Unesite URL linka', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Proveri spelovanje', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'Nije u reÄniku', + changeTo : 'Izmeni', + btnIgnore : 'IgnoriÅ¡i', + btnIgnoreAll : 'IgnoriÅ¡i sve', + btnReplace : 'Zameni', + btnReplaceAll : 'Zameni sve', + btnUndo : 'Vrati akciju', + noSuggestions : '- Bez sugestija -', + progress : 'Provera spelovanja u toku...', + noMispell : 'Provera spelovanja zavrÅ¡ena: greÅ¡ke nisu pronadene', + noChanges : 'Provera spelovanja zavrÅ¡ena: Nije izmenjena nijedna rec', + oneChange : 'Provera spelovanja zavrÅ¡ena: Izmenjena je jedna reÄ', + manyChanges : 'Provera spelovanja zavrÅ¡ena: %1 reÄ(i) je izmenjeno', + ieSpellDownload : 'Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?' + }, + + smiley : + { + toolbar : 'Smajli', + title : 'Unesi smajlija', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'Nabrojiva lista', + bulletedlist : 'Nenabrojiva lista', + indent : 'UveÄaj levu marginu', + outdent : 'Smanji levu marginu', + + justify : + { + left : 'Levo ravnanje', + center : 'Centriran tekst', + right : 'Desno ravnanje', + block : 'Obostrano ravnanje' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'Zalepi', + cutError : 'Sigurnosna podeÅ¡avanja VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite preÄicu sa tastature (Ctrl/Cmd+X).', + copyError : 'Sigurnosna podeÅ¡avanja VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite preÄicu sa tastature (Ctrl/Cmd+C).', + pasteMsg : 'Molimo Vas da zalepite unutar donje povrine koristeÄi tastaturnu preÄicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Zalepi iz Worda', + title : 'Zalepi iz Worda', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Zalepi kao Äist tekst', + title : 'Zalepi kao Äist tekst' + }, + + templates : + { + button : 'Obrasci', + title : 'Obrasci za sadržaj', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):', + emptyListMsg : '(Nema definisanih obrazaca)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'Stil', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'Format', + panelTitle : 'Format', + + tag_p : 'Normal', + tag_pre : 'Formatirano', + tag_address : 'Adresa', + tag_h1 : 'Naslov 1', + tag_h2 : 'Naslov 2', + tag_h3 : 'Naslov 3', + tag_h4 : 'Naslov 4', + tag_h5 : 'Naslov 5', + tag_h6 : 'Naslov 6', + tag_div : 'Normal (DIV)' // MISSING + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Font', + voiceLabel : 'Font', // MISSING + panelTitle : 'Font' + }, + + fontSize : + { + label : 'VeliÄina fonta', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'VeliÄina fonta' + }, + + colorButton : + { + textColorTitle : 'Boja teksta', + bgColorTitle : 'Boja pozadine', + panelTitle : 'Colors', // MISSING + auto : 'Automatski', + more : 'ViÅ¡e boja...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Osobine dokumenta', + title : 'Osobine dokumenta', + design : 'Design', // MISSING + meta : 'Metapodaci', + chooseColor : 'Choose', // MISSING + other : '<оÑÑало>', + docTitle : 'Naslov stranice', + charset : 'Kodiranje skupa karaktera', + charsetOther : 'Ostala kodiranja skupa karaktera', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'Zaglavlje tipa dokumenta', + docTypeOther : 'Ostala zaglavlja tipa dokumenta', + xhtmlDec : 'Ukljuci XHTML deklaracije', + bgColor : 'Boja pozadine', + bgImage : 'URL pozadinske slike', + bgFixed : 'Fiksirana pozadina', + txtColor : 'Boja teksta', + margin : 'Margine stranice', + marginTop : 'Gornja', + marginLeft : 'Leva', + marginRight : 'Desna', + marginBottom : 'Donja', + metaKeywords : 'KljuÄne reci za indeksiranje dokumenta (razdvojene zarezima)', + metaDescription : 'Opis dokumenta', + metaAuthor : 'Autor', + metaCopyright : 'Autorska prava', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/sr.js b/_source/lang/sr.js new file mode 100644 index 0000000..8dd4681 --- /dev/null +++ b/_source/lang/sr.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Serbian (Cyrillic) language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['sr'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'Kôд', + newPage : 'Ðова ÑÑÑаниÑа', + save : 'СаÑÑваÑ', + preview : 'Ðзглед ÑÑÑаниÑе', + cut : 'ÐÑеÑи', + copy : 'ÐопиÑаÑ', + paste : 'Ðалепи', + print : 'ШÑампа', + underline : 'ÐодвÑÑено', + bold : 'ÐодебÑано', + italic : 'ÐÑÑзив', + selectAll : 'ÐзнаÑи Ñве', + removeFormat : 'Уклони ÑоÑмаÑиÑаÑе', + strike : 'ÐÑеÑÑÑано', + subscript : 'ÐндекÑ', + superscript : 'СÑепен', + horizontalrule : 'УнеÑи Ñ Ð¾ÑизонÑÐ°Ð»Ð½Ñ Ð»Ð¸Ð½Ð¸ÑÑ', + pagebreak : 'Insert Page Break for Printing', // MISSING + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Уклони линк', + undo : 'ÐониÑÑи акÑиÑÑ', + redo : 'Ðонови акÑиÑÑ', + + // Common messages and labels. + common : + { + browseServer : 'ÐÑеÑÑажи ÑеÑвеÑ', + url : 'УРÐ', + protocol : 'ÐÑоÑокол', + upload : 'ÐоÑаÑи', + uploadSubmit : 'ÐоÑаÑи на ÑеÑвеÑ', + image : 'Слика', + flash : 'Ð¤Ð»ÐµÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ', + form : 'ФоÑма', + checkbox : 'ÐоÑе за поÑвÑдÑ', + radio : 'Радио-дÑгме', + textField : 'ТекÑÑÑално поÑе', + textarea : 'Ðона ÑекÑÑа', + hiddenField : 'СкÑивено поÑе', + button : 'ÐÑгме', + select : 'ÐзбоÑно поÑе', + imageButton : 'ÐÑгме Ñа Ñликом', + notSet : '<ниÑе поÑÑавÑено>', + id : 'Ðд', + name : 'Ðазив', + langDir : 'Ð¡Ð¼ÐµÑ Ñезика', + langDirLtr : 'С лева на деÑно (LTR)', + langDirRtl : 'С деÑна на лево (RTL)', + langCode : 'Kôд Ñезика', + longDescr : 'ÐÑн Ð¾Ð¿Ð¸Ñ Ð£Ð Ð', + cssClass : 'Stylesheet клаÑе', + advisoryTitle : 'Advisory наÑлов', + cssStyle : 'СÑил', + ok : 'OK', + cancel : 'OÑкажи', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'ÐапÑедни Ñагови', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'ШиÑина', + height : 'ÐиÑина', + align : 'РавнаÑе', + alignLeft : 'Ðево', + alignRight : 'ÐеÑно', + alignCenter : 'СÑедина', + alignTop : 'ÐÑÑ ', + alignMiddle : 'СÑедина', + alignBottom : 'Ðоле', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'УнеÑи ÑпеÑиÑални каÑакÑеÑ', + title : 'ÐдабеÑиÑе ÑпеÑиÑални каÑакÑеÑ', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'УнеÑи/измени линк', + other : '<other>', // MISSING + menu : 'ÐÑомени линк', + title : 'Ðинк', + info : 'Ðинк инÑо', + target : 'MeÑa', + upload : 'ÐоÑаÑи', + advanced : 'ÐапÑедни Ñагови', + type : 'ÐÑÑÑа линка', + toUrl : 'URL', // MISSING + toAnchor : 'СидÑо на Ð¾Ð²Ð¾Ñ ÑÑÑаниÑи', + toEmail : 'EлекÑÑонÑка поÑÑа', + targetFrame : '<оквиÑ>', + targetPopup : '<иÑкаÑÑÑи пÑозоÑ>', + targetFrameName : 'Ðазив одÑедиÑног ÑÑеÑма', + targetPopupName : 'Ðазив иÑкаÑÑÑег пÑозоÑа', + popupFeatures : 'ÐогÑÑноÑÑи иÑкаÑÑÑег пÑозоÑа', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'СÑаÑÑÑна линиÑа', + popupLocationBar: 'ÐокаÑиÑа', + popupToolbar : 'Toolbar', + popupMenuBar : 'ÐонÑекÑÑни мени', + popupFullScreen : 'ÐÑиказ пÑеко Ñелог екÑана (ÐE)', + popupScrollBars : 'СкÑол баÑ', + popupDependent : 'ÐавиÑно (Netscape)', + popupLeft : 'Ðд леве ивиÑе екÑана (пикÑела)', + popupTop : 'Ðд вÑÑ Ð° екÑана (пикÑела)', + id : 'Id', // MISSING + langDir : 'Ð¡Ð¼ÐµÑ Ñезика', + langDirLTR : 'С лева на деÑно (LTR)', + langDirRTL : 'С деÑна на лево (RTL)', + acccessKey : 'ÐÑиÑÑÑпни ÑаÑÑеÑ', + name : 'Ðазив', + langCode : 'Ð¡Ð¼ÐµÑ Ñезика', + tabIndex : 'Таб индекÑ', + advisoryTitle : 'Advisory наÑлов', + advisoryContentType : 'Advisory вÑÑÑа ÑадÑжаÑа', + cssClasses : 'Stylesheet клаÑе', + charset : 'Linked Resource Charset', + styles : 'СÑил', + rel : 'Relationship', // MISSING + selectAnchor : 'ÐдабеÑи ÑидÑо', + anchorName : 'Ðо Ð½Ð°Ð·Ð¸Ð²Ñ ÑидÑа', + anchorId : 'Ðo Ðд-jÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñа', + emailAddress : 'ÐдÑеÑа елекÑÑонÑке поÑÑе', + emailSubject : 'ÐаÑлов', + emailBody : 'СадÑÐ¶Ð°Ñ Ð¿Ð¾ÑÑке', + noAnchors : '(Ðема доÑÑÑÐ¿Ð½Ð¸Ñ ÑидÑа)', + noUrl : 'УнеÑиÑе УРРлинка', + noEmail : 'ÐÑкÑÑаÑÑе адÑеÑÑ ÐµÐ»ÐµÐºÑÑонÑке поÑÑе' + }, + + // Anchor dialog + anchor : + { + toolbar : 'УнеÑи/измени ÑидÑо', + menu : 'ÐÑобине ÑидÑа', + title : 'ÐÑобине ÑидÑа', + name : 'Ðме ÑидÑа', + errorName : 'Ðолимо ÐÐ°Ñ Ð´Ð° ÑнеÑеÑе име ÑидÑа', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'ÐÑеÑÑага', + replace : 'Ðамена', + findWhat : 'ÐÑонаÑи:', + replaceWith : 'Ðамени Ñа:', + notFoundMsg : 'ТÑажени ÑекÑÑ Ð½Ð¸Ñе пÑонаÑен.', + matchCase : 'РазликÑÑ Ð²ÐµÐ»Ð¸ÐºÐ° и мала Ñлова', + matchWord : 'УпоÑеди Ñеле ÑеÑи', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'Ðамени Ñве', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'Табела', + title : 'ÐÑобине Ñабеле', + menu : 'ÐÑобине Ñабеле', + deleteTable : 'Delete Table', // MISSING + rows : 'Редова', + columns : 'Kолона', + border : 'ÐелиÑина оквиÑа', + widthPx : 'пикÑела', + widthPc : 'пÑоÑенаÑа', + widthUnit : 'width unit', // MISSING + cellSpace : 'ÐелиÑÑки пÑоÑÑоÑ', + cellPad : 'Размак ÑелиÑа', + caption : 'ÐаÑлов Ñабеле', + summary : 'Summary', // MISSING + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'Cell', // MISSING + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'ÐбÑиÑи ÑелиÑе', + merge : 'Ð¡Ð¿Ð¾Ñ ÑелиÑе', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'Row', // MISSING + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'ÐбÑиÑи Ñедове' + }, + + column : + { + menu : 'Column', // MISSING + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'ÐбÑиÑи колоне' + } + }, + + // Button Dialog. + button : + { + title : 'ÐÑобине дÑгмеÑа', + text : 'ТекÑÑ (вÑедноÑÑ)', + type : 'Tип', + typeBtn : 'Button', // MISSING + typeSbm : 'Submit', // MISSING + typeRst : 'Reset' // MISSING + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ÐÑобине поÑа за поÑвÑдÑ', + radioTitle : 'ÐÑобине Ñадио-дÑгмеÑа', + value : 'ÐÑедноÑÑ', + selected : 'ÐзнаÑено' + }, + + // Form Dialog. + form : + { + title : 'ÐÑобине ÑоÑме', + menu : 'ÐÑобине ÑоÑме', + action : 'AкÑиÑа', + method : 'MеÑода', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'ÐÑобине избоÑног поÑа', + selectInfo : 'ÐнÑо', + opAvail : 'ÐоÑÑÑпне опÑиÑе', + value : 'ÐÑедноÑÑ', + size : 'ÐелиÑина', + lines : 'линиÑа', + chkMulti : 'Ðозволи виÑеÑÑÑÑÐºÑ ÑелекÑиÑÑ', + opText : 'ТекÑÑ', + opValue : 'ÐÑедноÑÑ', + btnAdd : 'ÐодаÑ', + btnModify : 'Ðзмени', + btnUp : 'ÐоÑе', + btnDown : 'Ðоле', + btnSetValue : 'ÐодеÑи као ознаÑÐµÐ½Ñ Ð²ÑедноÑÑ', + btnDelete : 'ÐбÑиÑи' + }, + + // Textarea Dialog. + textarea : + { + title : 'ÐÑобине зоне ÑекÑÑа', + cols : 'ÐÑÐ¾Ñ ÐºÐ¾Ð»Ð¾Ð½Ð°', + rows : 'ÐÑÐ¾Ñ Ñедова' + }, + + // Text Field Dialog. + textfield : + { + title : 'ÐÑобине ÑекÑÑÑалног поÑа', + name : 'Ðазив', + value : 'ÐÑедноÑÑ', + charWidth : 'ШиÑина (каÑакÑеÑа)', + maxChars : 'ÐакÑимално каÑакÑеÑа', + type : 'Тип', + typeText : 'ТекÑÑ', + typePass : 'Ðозинка' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ÐÑобине ÑкÑивеног поÑа', + name : 'Ðазив', + value : 'ÐÑедноÑÑ' + }, + + // Image Dialog. + image : + { + title : 'ÐÑобине Ñлика', + titleButton : 'ÐÑобине дÑгмеÑа Ñа Ñликом', + menu : 'ÐÑобине Ñлика', + infoTab : 'ÐнÑо Ñлике', + btnUpload : 'ÐоÑаÑи на ÑеÑвеÑ', + upload : 'ÐоÑаÑи', + alt : 'ÐлÑеÑнаÑивни ÑекÑÑ', + lockRatio : 'ÐакÑÑÑÐ°Ñ Ð¾Ð´Ð½Ð¾Ñ', + resetSize : 'РеÑеÑÑÑ Ð²ÐµÐ»Ð¸ÑинÑ', + border : 'ÐквиÑ', + hSpace : 'HSpace', + vSpace : 'VSpace', + alertUrl : 'УнеÑиÑе УРРÑлике', + linkTab : 'Ðинк', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'ÐÑобине ФлеÑа', + propertiesTab : 'Properties', // MISSING + title : 'ÐÑобине ÑлеÑа', + chkPlay : 'ÐÑÑомаÑÑки ÑÑаÑÑ', + chkLoop : 'ÐонавÑаÑ', + chkMenu : 'УкÑÑÑи ÑÐ»ÐµÑ Ð¼ÐµÐ½Ð¸', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'СкалиÑаÑ', + scaleAll : 'ÐÑикажи Ñве', + scaleNoBorder : 'Ðез ивиÑе', + scaleFit : 'ÐопÑни повÑÑинÑ', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'Abs доле', + alignAbsMiddle : 'Abs ÑÑедина', + alignBaseline : 'Ðазно', + alignTextTop : 'ÐÑÑ ÑекÑÑа', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'ÐоÑа позадине', + hSpace : 'HSpace', + vSpace : 'VSpace', + validateSrc : 'УнеÑиÑе УРРлинка', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'ÐÑовеÑи ÑпеловаÑе', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'ÐиÑе Ñ ÑеÑникÑ', + changeTo : 'Ðзмени', + btnIgnore : 'ÐгноÑиÑи', + btnIgnoreAll : 'ÐгноÑиÑи Ñве', + btnReplace : 'Ðамени', + btnReplaceAll : 'Ðамени Ñве', + btnUndo : 'ÐÑаÑи акÑиÑÑ', + noSuggestions : '- Ðез ÑÑгеÑÑиÑа -', + progress : 'ÐÑовеÑа ÑпеловаÑа Ñ ÑокÑ...', + noMispell : 'ÐÑовеÑа ÑпеловаÑа завÑÑена: гÑеÑке ниÑÑ Ð¿ÑонаÑене', + noChanges : 'ÐÑовеÑа ÑпеловаÑа завÑÑена: ÐиÑе измеÑена ниÑедна ÑеÑ', + oneChange : 'ÐÑовеÑа ÑпеловаÑа завÑÑена: ÐзмеÑена Ñе Ñедна ÑеÑ', + manyChanges : 'ÐÑовеÑа ÑпеловаÑа завÑÑена: %1 ÑеÑ(и) Ñе измеÑено', + ieSpellDownload : 'ÐÑовеÑа ÑпеловаÑа ниÑе инÑÑалиÑана. Ðа ли желиÑе да Ñе ÑкинеÑе Ñа ÐнÑеÑнеÑа?' + }, + + smiley : + { + toolbar : 'СмаÑли', + title : 'УнеÑи ÑмаÑлиÑа', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ÐабÑоÑÐ¸Ð²Ñ Ð»Ð¸ÑÑÑ', + bulletedlist : 'ÐенабÑоÑива лиÑÑа', + indent : 'УвеÑÐ°Ñ Ð»ÐµÐ²Ñ Ð¼Ð°ÑгинÑ', + outdent : 'СмаÑи Ð»ÐµÐ²Ñ Ð¼Ð°ÑгинÑ', + + justify : + { + left : 'Ðево ÑавнаÑе', + center : 'ЦенÑÑиÑан ÑекÑÑ', + right : 'ÐеÑно ÑавнаÑе', + block : 'ÐбоÑÑÑано ÑавнаÑе' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'Ðалепи', + cutError : 'СигÑÑноÑна подеÑаваÑа ÐаÑег пÑеÑÑаживаÑа не дозвоÑаваÑÑ Ð¾Ð¿ÐµÑаÑиÑе аÑÑомаÑÑког иÑеÑаÑа ÑекÑÑа. Ðолимо ÐÐ°Ñ Ð´Ð° коÑиÑÑиÑе пÑеÑиÑÑ Ñа ÑаÑÑаÑÑÑе (Ctrl/Cmd+X).', + copyError : 'СигÑÑноÑна подеÑаваÑа ÐаÑег пÑеÑÑаживаÑа не дозвоÑаваÑÑ Ð¾Ð¿ÐµÑаÑиÑе аÑÑомаÑÑког копиÑаÑа ÑекÑÑа. Ðолимо ÐÐ°Ñ Ð´Ð° коÑиÑÑиÑе пÑеÑиÑÑ Ñа ÑаÑÑаÑÑÑе (Ctrl/Cmd+C).', + pasteMsg : 'Ðолимо ÐÐ°Ñ Ð´Ð° залепиÑе ÑнÑÑÐ°Ñ Ð´Ð¾Ñе повÑÑине коÑиÑÑеÑи ÑаÑÑаÑÑÑÐ½Ñ Ð¿ÑеÑиÑÑ (<STRONG>Ctrl/Cmd+V</STRONG>) и да пÑиÑиÑнеÑе <STRONG>OK</STRONG>.', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'Ðалепи из Worda', + title : 'Ðалепи из Worda', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Ðалепи као ÑиÑÑ ÑекÑÑ', + title : 'Ðалепи као ÑиÑÑ ÑекÑÑ' + }, + + templates : + { + button : 'ÐбÑаÑÑи', + title : 'ÐбÑаÑÑи за ÑадÑжаÑ', + options : 'Template Options', // MISSING + insertOption : 'Replace actual contents', // MISSING + selectPromptMsg : 'Ðолимо ÐÐ°Ñ Ð´Ð° одабеÑеÑе обÑÐ°Ð·Ð°Ñ ÐºÐ¾Ñи Ñе биÑи пÑимеÑен на ÑÑÑаниÑÑ (ÑÑенÑÑни ÑадÑÐ¶Ð°Ñ Ñе биÑи обÑиÑан):', + emptyListMsg : '(Ðема деÑиниÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑазаÑа)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'СÑил', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'ФоÑмаÑ', + panelTitle : 'ФоÑмаÑ', + + tag_p : 'Normal', + tag_pre : 'Formatirano', + tag_address : 'Adresa', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Normal (DIV)' // MISSING + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ФонÑ', + voiceLabel : 'Font', // MISSING + panelTitle : 'ФонÑ' + }, + + fontSize : + { + label : 'ÐелиÑина ÑонÑа', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'ÐелиÑина ÑонÑа' + }, + + colorButton : + { + textColorTitle : 'ÐоÑа ÑекÑÑа', + bgColorTitle : 'ÐоÑа позадине', + panelTitle : 'Colors', // MISSING + auto : 'ÐÑÑомаÑÑки', + more : 'ÐиÑе боÑа...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'ÐÑобине докÑменÑа', + title : 'ÐÑобине докÑменÑа', + design : 'Design', // MISSING + meta : 'ÐеÑаподаÑи', + chooseColor : 'Choose', // MISSING + other : '<other>', + docTitle : 'ÐаÑлов ÑÑÑаниÑе', + charset : 'ÐодиÑаÑе ÑкÑпа каÑакÑеÑа', + charsetOther : 'ÐÑÑала кодиÑаÑа ÑкÑпа каÑакÑеÑа', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'ÐаглавÑе Ñипа докÑменÑа', + docTypeOther : 'ÐÑÑала заглавÑа Ñипа докÑменÑа', + xhtmlDec : 'УлÑÑÑи XHTML деклаÑаÑиÑе', + bgColor : 'ÐоÑа позадине', + bgImage : 'УРРпозадинÑке Ñлике', + bgFixed : 'ФикÑиÑана позадина', + txtColor : 'ÐоÑа ÑекÑÑа', + margin : 'ÐаÑгине ÑÑÑаниÑе', + marginTop : 'ÐоÑÑа', + marginLeft : 'Ðева', + marginRight : 'ÐеÑна', + marginBottom : 'ÐоÑа', + metaKeywords : 'ÐÑÑÑне ÑеÑи за индекÑиÑаÑе докÑменÑа (ÑаздвоÑене заÑезом)', + metaDescription : 'ÐÐ¿Ð¸Ñ Ð´Ð¾ÐºÑменÑа', + metaAuthor : 'ÐÑÑоÑ', + metaCopyright : 'ÐÑÑоÑÑка пÑава', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/sv.js b/_source/lang/sv.js new file mode 100644 index 0000000..c71744f --- /dev/null +++ b/_source/lang/sv.js @@ -0,0 +1,811 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** +* @fileOverview +*/ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['sv'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, tryck ALT 0 för hjälp.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', + + // Toolbar buttons without dialogs. + source : 'Källa', + newPage : 'Ny sida', + save : 'Spara', + preview : 'Förhandsgranska', + cut : 'Klipp ut', + copy : 'Kopiera', + paste : 'Klistra in', + print : 'Skriv ut', + underline : 'Understruken', + bold : 'Fet', + italic : 'Kursiv', + selectAll : 'Markera allt', + removeFormat : 'Radera formatering', + strike : 'Genomstruken', + subscript : 'Nedsänkta tecken', + superscript : 'Upphöjda tecken', + horizontalrule : 'Infoga horisontal linje', + pagebreak : 'Infoga sidbrytning', + pagebreakAlt : 'Sidbrytning', + unlink : 'Radera länk', + undo : 'à ngra', + redo : 'Gör om', + + // Common messages and labels. + common : + { + browseServer : 'Bläddra pÃ¥ server', + url : 'URL', + protocol : 'Protokoll', + upload : 'Ladda upp', + uploadSubmit : 'Skicka till server', + image : 'Bild', + flash : 'Flash', + form : 'Formulär', + checkbox : 'Kryssruta', + radio : 'Alternativknapp', + textField : 'Textfält', + textarea : 'Textruta', + hiddenField : 'Dolt fält', + button : 'Knapp', + select : 'Flervalslista', + imageButton : 'Bildknapp', + notSet : '<ej angivet>', + id : 'Id', + name : 'Namn', + langDir : 'SprÃ¥kriktning', + langDirLtr : 'Vänster till Höger (VTH)', + langDirRtl : 'Höger till Vänster (HTV)', + langCode : 'SprÃ¥kkod', + longDescr : 'URL-beskrivning', + cssClass : 'Stilmall', + advisoryTitle : 'Titel', + cssStyle : 'Stilmall', + ok : 'OK', + cancel : 'Avbryt', + close : 'Stäng', + preview : 'Förhandsgranska', + generalTab : 'Allmänt', + advancedTab : 'Avancerad', + validateNumberFailed : 'Värdet är inte ett nummer.', + confirmNewPage : 'Alla ändringar i innehÃ¥llet kommer att förloras. Ãr du säker pÃ¥ att du vill ladda en ny sida?', + confirmCancel : 'NÃ¥gra av de alternativ har ändrats. Ãr du säker pÃ¥ att stänga dialogrutan?', + options : 'Alternativ', + target : 'MÃ¥l', + targetNew : 'Nytt fönster (_blank)', + targetTop : 'Ãversta fönstret (_top)', + targetSelf : 'Samma fönster (_self)', + targetParent : 'FöregÃ¥ende fönster (_parent)', + langDirLTR : 'Vänster till höger (LTR)', + langDirRTL : 'Höger till vänster (RTL)', + styles : 'Stil', + cssClasses : 'Stilmallar', + width : 'Bredd', + height : 'Höjd', + align : 'Justering', + alignLeft : 'Vänster', + alignRight : 'Höger', + alignCenter : 'Centrerad', + alignTop : 'Ãverkant', + alignMiddle : 'Mitten', + alignBottom : 'Nederkant', + invalidHeight : 'Höjd mÃ¥ste vara ett nummer.', + invalidWidth : 'Bredd mÃ¥ste vara ett nummer.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, Ej tillgänglig</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Klistra in utökat tecken', + title : 'Välj utökat tecken', + options : 'Special Character Options' + }, + + // Link dialog. + link : + { + toolbar : 'Infoga/Redigera länk', + other : '<annan>', + menu : 'Redigera länk', + title : 'Länk', + info : 'Länkinformation', + target : 'MÃ¥l', + upload : 'Ladda upp', + advanced : 'Avancerad', + type : 'Länktyp', + toUrl : 'URL', + toAnchor : 'Ankare i sidan', + toEmail : 'E-post', + targetFrame : '<ram>', + targetPopup : '<popup-fönster>', + targetFrameName : 'MÃ¥lets ramnamn', + targetPopupName : 'Popup-fönstrets namn', + popupFeatures : 'Popup-fönstrets egenskaper', + popupResizable : 'Resizable', + popupStatusBar : 'Statusfält', + popupLocationBar: 'Adressfält', + popupToolbar : 'Verktygsfält', + popupMenuBar : 'Menyfält', + popupFullScreen : 'Helskärm (endast IE)', + popupScrollBars : 'Scrolllista', + popupDependent : 'Beroende (endast Netscape)', + popupLeft : 'Position frÃ¥n vänster', + popupTop : 'Position frÃ¥n sidans topp', + id : 'Id', + langDir : 'SprÃ¥kriktning', + langDirLTR : 'Vänster till höger (VTH)', + langDirRTL : 'Höger till vänster (HTV)', + acccessKey : 'Behörighetsnyckel', + name : 'Namn', + langCode : 'SprÃ¥kriktning', + tabIndex : 'Tabindex', + advisoryTitle : 'Titel', + advisoryContentType : 'InnehÃ¥llstyp', + cssClasses : 'Stylesheet class', + charset : 'Teckenuppställning', + styles : 'Stilmall', + rel : 'Relationship', // MISSING + selectAnchor : 'Välj ett ankare', + anchorName : 'efter ankarnamn', + anchorId : 'efter objektid', + emailAddress : 'E-postadress', + emailSubject : 'Ãmne', + emailBody : 'InnehÃ¥ll', + noAnchors : '(Inga ankare kunde hittas)', + noUrl : 'Var god ange länkens URL', + noEmail : 'Var god ange E-postadress' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Infoga/Redigera ankarlänk', + menu : 'Egenskaper för ankarlänk', + title : 'Egenskaper för ankarlänk', + name : 'Ankarnamn', + errorName : 'Var god ange ett ankarnamn', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Egenskaper för punktlista', + bulletedTitle : 'Egenskaper för punktlista', + type : 'Typ', + start : 'Start', + validateStartNumber :'List start number must be a whole number.', + circle : 'Cirkel', + disc : 'Disk', + square : 'Fyrkant', + none : 'Ingen', + notset : '<ej angiven>', + armenian : 'Armenisk numrering', + georgian : 'Georgisk numrering (an, ban, gan, etc.)', + lowerRoman : 'Romerska gemener (i, ii, iii, iv, v, etc.)', + upperRoman : 'Romerska versaler (I, II, III, IV, V, etc.)', + lowerAlpha : 'Alpha gemener (a, b, c, d, e, etc.)', + upperAlpha : 'Alpha versaler (A, B, C, D, E, etc.)', + lowerGreek : 'Grekiska gemener (alpha, beta, gamma, etc.)', + decimal : 'Decimal (1, 2, 3, etc.)', + decimalLeadingZero : 'Decimal nolla (01, 02, 03, etc.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Sök och ersätt', + find : 'Sök', + replace : 'Ersätt', + findWhat : 'Sök efter:', + replaceWith : 'Ersätt med:', + notFoundMsg : 'Angiven text kunde ej hittas.', + matchCase : 'Skiftläge', + matchWord : 'Inkludera hela ord', + matchCyclic : 'Matcha cykliska', + replaceAll : 'Ersätt alla', + replaceSuccessMsg : '%1 förekomst(er) ersatta.' + }, + + // Table Dialog + table : + { + toolbar : 'Tabell', + title : 'Tabellegenskaper', + menu : 'Tabellegenskaper', + deleteTable : 'Radera tabell', + rows : 'Rader', + columns : 'Kolumner', + border : 'Kantstorlek', + widthPx : 'pixlar', + widthPc : 'procent', + widthUnit : 'enhet bredd', + cellSpace : 'CellavstÃ¥nd', + cellPad : 'Cellutfyllnad', + caption : 'Rubrik', + summary : 'Sammanfattning', + headers : 'Ruberiker', + headersNone : 'Ingen', + headersColumn : 'Första kolumnen', + headersRow : 'Första raden', + headersBoth : 'BÃ¥da', + invalidRows : 'Antal rader mÃ¥ste vara större än 0.', + invalidCols : 'Antal kolumner mÃ¥ste vara ett nummer större än 0.', + invalidBorder : 'Ram mÃ¥ste vara ett nummer.', + invalidWidth : 'Tabell mÃ¥ste vara ett nummer.', + invalidHeight : 'Tabellens höjd mÃ¥ste vara ett nummer.', + invalidCellSpacing : 'Luft i cell mÃ¥ste vara ett nummer.', + invalidCellPadding : 'Luft i cell mÃ¥ste vara ett nummer.', + + cell : + { + menu : 'Cell', + insertBefore : 'Lägg till cell före', + insertAfter : 'Lägg till cell efter', + deleteCell : 'Radera celler', + merge : 'Sammanfoga celler', + mergeRight : 'Sammanfoga höger', + mergeDown : 'Sammanfoga ner', + splitHorizontal : 'Dela cell horisontellt', + splitVertical : 'Dela cell vertikalt', + title : 'Egenskaper för cell', + cellType : 'Celltyp', + rowSpan : 'Rad spann', + colSpan : 'Kolumnen spann', + wordWrap : 'Radbrytning', + hAlign : 'Horisontell justering', + vAlign : 'Vertikal justering', + alignBaseline : 'Baslinje', + bgColor : 'Bakgrundsfärg', + borderColor : 'Ramfärg', + data : 'Data', + header : 'Rubrik', + yes : 'Ja', + no : 'Nej', + invalidWidth : 'Cellens bredd mÃ¥ste vara ett nummer.', + invalidHeight : 'Cellens höjd mÃ¥ste vara ett nummer.', + invalidRowSpan : 'Radutvidgning mÃ¥ste vara ett heltal.', + invalidColSpan : 'Kolumn mÃ¥ste vara ett heltal.', + chooseColor : 'Välj' + }, + + row : + { + menu : 'Rad', + insertBefore : 'Lägg till Rad Före', + insertAfter : 'Lägg till rad efter', + deleteRow : 'Radera rad' + }, + + column : + { + menu : 'Kolumn', + insertBefore : 'Lägg till kolumn före', + insertAfter : 'Lägg till kolumn efter', + deleteColumn : 'Radera kolumn' + } + }, + + // Button Dialog. + button : + { + title : 'Egenskaper för knapp', + text : 'Text (värde)', + type : 'Typ', + typeBtn : 'Knapp', + typeSbm : 'Skicka', + typeRst : 'à terställ' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Egenskaper för kryssruta', + radioTitle : 'Egenskaper för alternativknapp', + value : 'Värde', + selected : 'Vald' + }, + + // Form Dialog. + form : + { + title : 'Egenskaper för formulär', + menu : 'Egenskaper för formulär', + action : 'Funktion', + method : 'Metod', + encoding : 'Kodning' + }, + + // Select Field Dialog. + select : + { + title : 'Egenskaper för flervalslista', + selectInfo : 'Information', + opAvail : 'Befintliga val', + value : 'Värde', + size : 'Storlek', + lines : 'Linjer', + chkMulti : 'TillÃ¥t flerval', + opText : 'Text', + opValue : 'Värde', + btnAdd : 'Lägg till', + btnModify : 'Redigera', + btnUp : 'Upp', + btnDown : 'Ner', + btnSetValue : 'Markera som valt värde', + btnDelete : 'Radera' + }, + + // Textarea Dialog. + textarea : + { + title : 'Egenskaper för textruta', + cols : 'Kolumner', + rows : 'Rader' + }, + + // Text Field Dialog. + textfield : + { + title : 'Egenskaper för textfält', + name : 'Namn', + value : 'Värde', + charWidth : 'Teckenbredd', + maxChars : 'Max antal tecken', + type : 'Typ', + typeText : 'Text', + typePass : 'Lösenord' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Egenskaper för dolt fält', + name : 'Namn', + value : 'Värde' + }, + + // Image Dialog. + image : + { + title : 'Bildegenskaper', + titleButton : 'Egenskaper för bildknapp', + menu : 'Bildegenskaper', + infoTab : 'Bildinformation', + btnUpload : 'Skicka till server', + upload : 'Ladda upp', + alt : 'Alternativ text', + lockRatio : 'LÃ¥s höjd/bredd förhÃ¥llanden', + resetSize : 'à terställ storlek', + border : 'Kant', + hSpace : 'Horis. marginal', + vSpace : 'Vert. marginal', + alertUrl : 'Var god och ange bildens URL', + linkTab : 'Länk', + button2Img : 'Vill du omvandla den valda bildknappen pÃ¥ en enkel bild?', + img2Button : 'Vill du omvandla den valda bildknappen pÃ¥ en enkel bild?', + urlMissing : 'Bildkällans URL saknas.', + validateBorder : 'Kantlinje mÃ¥ste vara ett heltal.', + validateHSpace : 'HSpace mÃ¥ste vara ett heltal.', + validateVSpace : 'VSpace mÃ¥ste vara ett heltal.' + }, + + // Flash Dialog + flash : + { + properties : 'Flashegenskaper', + propertiesTab : 'Egenskaper', + title : 'Flashegenskaper', + chkPlay : 'Automatisk uppspelning', + chkLoop : 'Upprepa/Loopa', + chkMenu : 'Aktivera Flashmeny', + chkFull : 'TillÃ¥t helskärm', + scale : 'Skala', + scaleAll : 'Visa allt', + scaleNoBorder : 'Ingen ram', + scaleFit : 'Exakt passning', + access : 'Script-tillgÃ¥ng', + accessAlways : 'Alltid', + accessSameDomain: 'Samma domän', + accessNever : 'Aldrig', + alignAbsBottom : 'Absolut nederkant', + alignAbsMiddle : 'Absolut centrering', + alignBaseline : 'Baslinje', + alignTextTop : 'Text överkant', + quality : 'Kvalitet', + qualityBest : 'Bäst', + qualityHigh : 'Hög', + qualityAutoHigh : 'Auto Hög', + qualityMedium : 'Medium', + qualityAutoLow : 'Auto LÃ¥g', + qualityLow : 'LÃ¥g', + windowModeWindow: 'Fönster', + windowModeOpaque: 'Opaque', + windowModeTransparent : 'Transparent', + windowMode : 'Fönsterläge', + flashvars : 'Variabler för Flash', + bgcolor : 'Bakgrundsfärg', + hSpace : 'Horis. marginal', + vSpace : 'Vert. marginal', + validateSrc : 'Var god ange länkens URL', + validateHSpace : 'HSpace mÃ¥ste vara ett nummer.', + validateVSpace : 'VSpace mÃ¥ste vara ett nummer.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Stavningskontroll', + title : 'Kontrollera stavning', + notAvailable : 'Tyvärr är tjänsten ej tillgänglig nu', + errorLoading : 'Tjänsten är ej tillgänglig: %s.', + notInDic : 'Saknas i ordlistan', + changeTo : 'Ãndra till', + btnIgnore : 'Ignorera', + btnIgnoreAll : 'Ignorera alla', + btnReplace : 'Ersätt', + btnReplaceAll : 'Ersätt alla', + btnUndo : 'à ngra', + noSuggestions : '- Förslag saknas -', + progress : 'Stavningskontroll pÃ¥gÃ¥r...', + noMispell : 'Stavningskontroll slutförd: Inga stavfel pÃ¥träffades.', + noChanges : 'Stavningskontroll slutförd: Inga ord rättades.', + oneChange : 'Stavningskontroll slutförd: Ett ord rättades.', + manyChanges : 'Stavningskontroll slutförd: %1 ord rättades.', + ieSpellDownload : 'Stavningskontrollen är ej installerad. Vill du göra det nu?' + }, + + smiley : + { + toolbar : 'Smiley', + title : 'Infoga smiley', + options : 'Smileyinställningar' + }, + + elementsPath : + { + eleLabel : 'Elementets sökväg', + eleTitle : '%1 element' + }, + + numberedlist : 'Numrerad lista', + bulletedlist : 'Punktlista', + indent : 'Ãka indrag', + outdent : 'Minska indrag', + + justify : + { + left : 'Vänsterjustera', + center : 'Centrera', + right : 'Högerjustera', + block : 'Justera till marginaler' + }, + + blockquote : 'Blockcitat', + + clipboard : + { + title : 'Klistra in', + cutError : 'Säkerhetsinställningar i Er webläsare tillÃ¥ter inte Ã¥tgÃ¥rden Klipp ut. Använd (Ctrl/Cmd+X) istället.', + copyError : 'Säkerhetsinställningar i Er webläsare tillÃ¥ter inte Ã¥tgÃ¥rden Kopiera. Använd (Ctrl/Cmd+C) istället', + pasteMsg : 'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl/Cmd+V</STRONG>) klicka sen pÃ¥ <STRONG>OK</STRONG>.', + securityMsg : 'PÃ¥ grund av din webbläsares säkerhetsinställningar kan verktyget inte fÃ¥ Ã¥tkomst till urklippsdatan. Var god och använd detta fönster istället.', + pasteArea : 'Paste Area' + }, + + pastefromword : + { + confirmCleanup : 'Texten du vill klistra in verkar vara kopierad frÃ¥n Word. Vill du rensa innan du klistrar?', + toolbar : 'Klistra in frÃ¥n Word', + title : 'Klistra in frÃ¥n Word', + error : 'Det var inte möjligt att städa upp den inklistrade data pÃ¥ grund av ett internt fel' + }, + + pasteText : + { + button : 'Klistra in som vanlig text', + title : 'Klistra in som vanlig text' + }, + + templates : + { + button : 'Sidmallar', + title : 'Sidmallar', + options : 'Inställningar för mall', + insertOption : 'Ersätt aktuellt innehÃ¥ll', + selectPromptMsg : 'Var god välj en mall att använda med editorn<br>(allt nuvarande innehÃ¥ll raderas):', + emptyListMsg : '(Ingen mall är vald)' + }, + + showBlocks : 'Visa block', + + stylesCombo : + { + label : 'Anpassad stil', + panelTitle : 'Formatmallar', + panelTitle1 : 'Blockstil', + panelTitle2 : 'Inbäddad stil', + panelTitle3 : 'Objektets stil' + }, + + format : + { + label : 'Teckenformat', + panelTitle : 'Teckenformat', + + tag_p : 'Normal', + tag_pre : 'Formaterad', + tag_address : 'Adress', + tag_h1 : 'Rubrik 1', + tag_h2 : 'Rubrik 2', + tag_h3 : 'Rubrik 3', + tag_h4 : 'Rubrik 4', + tag_h5 : 'Rubrik 5', + tag_h6 : 'Rubrik 6', + tag_div : 'Normal (DIV)' + }, + + div : + { + title : 'Skapa Div container', + toolbar : 'Skapa Div container', + cssClassInputLabel : 'Stilmallar', + styleSelectLabel : 'Stil', + IdInputLabel : 'Id', + languageCodeInputLabel : ' SprÃ¥kkod', + inlineStyleInputLabel : 'Inline Style', + advisoryTitleInputLabel : 'RÃ¥dgivande titel', + langDirLabel : 'SprÃ¥kriktning', + langDirLTRLabel : 'Vänster till Höger (LTR)', + langDirRTLLabel : 'Höger till vänster (RTL)', + edit : 'Redigera Div', + remove : 'Ta bort Div' + }, + + iframe : + { + title : 'iFrame Egenskaper', + toolbar : 'iFrame', + noUrl : 'Skriv in URL för iFrame', + scrolling : 'Aktivera rullningslister', + border : 'Visa ramkant' + }, + + font : + { + label : 'Typsnitt', + voiceLabel : 'Typsnitt', + panelTitle : 'Typsnitt' + }, + + fontSize : + { + label : 'Storlek', + voiceLabel : 'Teckenstorlek', + panelTitle : 'Storlek' + }, + + colorButton : + { + textColorTitle : 'Textfärg', + bgColorTitle : 'Bakgrundsfärg', + panelTitle : 'Färger', + auto : 'Automatisk', + more : 'Fler färger...' + }, + + colors : + { + '000' : 'Svart', + '800000' : 'Rödbrun', + '8B4513' : 'Mörkbrun', + '2F4F4F' : 'SkiffergrÃ¥', + '008080' : 'Kricka', + '000080' : 'MarinblÃ¥', + '4B0082' : 'Indigo', + '696969' : 'MörkgrÃ¥', + 'B22222' : 'Tegelsten', + 'A52A2A' : 'Brun', + 'DAA520' : 'Mörk guld', + '006400' : 'Mörkgrön', + '40E0D0' : 'Turkos', + '0000CD' : 'Medium blÃ¥', + '800080' : 'Lila', + '808080' : 'GrÃ¥', + 'F00' : 'Röd', + 'FF8C00' : 'Mörkorange', + 'FFD700' : 'Guld', + '008000' : 'Grön', + '0FF' : 'Turkos', + '00F' : 'BlÃ¥', + 'EE82EE' : 'Violett', + 'A9A9A9' : 'Matt grÃ¥', + 'FFA07A' : 'Laxrosa', + 'FFA500' : 'Orange', + 'FFFF00' : 'Gul', + '00FF00' : 'Lime', + 'AFEEEE' : 'Ljusturkos', + 'ADD8E6' : 'LjusblÃ¥', + 'DDA0DD' : 'Plommon', + 'D3D3D3' : 'LjusgrÃ¥', + 'FFF0F5' : 'Ljus lavender', + 'FAEBD7' : 'Antikvit', + 'FFFFE0' : 'Ljusgul', + 'F0FFF0' : 'Honung', + 'F0FFFF' : 'AzurblÃ¥', + 'F0F8FF' : 'AliceblÃ¥', + 'E6E6FA' : 'Lavender', + 'FFF' : 'Vit' + }, + + scayt : + { + title : 'Stavningskontroll medan du skriver', + opera_title : 'Stöds ej av Opera', + enable : 'Aktivera SCAYT', + disable : 'Inaktivera SCAYT', + about : 'Om SCAYT', + toggle : 'Växla SCAYT', + options : 'Inställningar', + langs : 'SprÃ¥k', + moreSuggestions : 'Fler förslag', + ignore : 'Ignorera', + ignoreAll : 'Ignorera alla', + addWord : 'Lägg till ord', + emptyDic : 'Ordlistans namn fÃ¥r ej vara tomt.', + + optionsTab : 'Inställningar', + allCaps : 'Ignorera alla ord med enbart versaler', + ignoreDomainNames : 'Ignorera domännamn', + mixedCase : 'Ignorera ord med blandat shiftläge', + mixedWithDigits : 'Ignorera ord med nummer', + + languagesTab : 'SprÃ¥k', + + dictionariesTab : 'Ordlistor', + dic_field_name : 'Ordlistans namn', + dic_create : 'Skapa', + dic_restore : 'à terställ', + dic_delete : 'Ta bort', + dic_rename : 'Byt namn', + dic_info : 'Inledningsvis lagras ordlistan i en cookie. När ordlista växer till en punkt där det inte kan lagras i en cookie, lagras den pÃ¥ vÃ¥r server. För att lagra din personliga ordlista pÃ¥ vÃ¥r server du ska ange ett namn för din ordbok. Om du redan har en lagrad ordbok, skriv namnet och klicka pÃ¥ knappen à terställ.', + + aboutTab : 'Om' + }, + + about : + { + title : 'Om CKEditor', + dlgTitle : 'Om CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'För information av licenciering besök vÃ¥r hemsida:', + copy : 'Copyright © $1. Alla rättigheter reserverade.' + }, + + maximize : 'Maximera', + minimize : 'Minimera', + + fakeobjects : + { + anchor : 'Ankare', + flash : 'Flashanimation', + iframe : 'iFrame', + hiddenfield : 'Gömt fält', + unknown : 'Okänt objekt' + }, + + resize : 'Dra för att ändra storlek', + + colordialog : + { + title : 'Välj färg', + options : 'Färgalternativ', + highlight : 'Markera', + selected : 'Vald färg', + clear : 'Rensa' + }, + + toolbarCollapse : 'Dölj verktygsfält', + toolbarExpand : 'Visa verktygsfält', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text riktning frÃ¥n vänster till höger', + rtl : 'Text riktning frÃ¥n höger till vänster' + }, + + docprops : + { + label : 'Dokumentegenskaper', + title : 'Dokumentegenskaper', + design : 'Design', // MISSING + meta : 'Metadata', + chooseColor : 'Välj', + other : '<annan>', + docTitle : 'Sidtitel', + charset : 'Teckenuppsättningar', + charsetOther : 'Ãvriga teckenuppsättningar', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central Europa', + charsetCT : 'Traditionell Kinesisk (Big5)', + charsetCR : 'Kyrillisk', + charsetGR : 'Grekiska', + charsetJP : 'Japanska', + charsetKR : 'Koreanska', + charsetTR : 'Turkiska', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Väst Europa', + docType : 'Sidhuvud', + docTypeOther : 'Ãvriga sidhuvuden', + xhtmlDec : 'Inkludera XHTML deklaration', + bgColor : 'Bakgrundsfärg', + bgImage : 'Bakgrundsbildens URL', + bgFixed : 'Fast bakgrund', + txtColor : 'Textfärg', + margin : 'Sidmarginal', + marginTop : 'Topp', + marginLeft : 'Vänster', + marginRight : 'Höger', + marginBottom : 'Botten', + metaKeywords : 'Sidans nyckelord', + metaDescription : 'Sidans beskrivning', + metaAuthor : 'Författare', + metaCopyright : 'Upphovsrätt', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/th.js b/_source/lang/th.js new file mode 100644 index 0000000..e6b9779 --- /dev/null +++ b/_source/lang/th.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Thai language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['th'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'à¸à¸¹à¸£à¸«à¸±à¸ª HTML', + newPage : 'สรà¹à¸²à¸à¸«à¸à¹à¸²à¹à¸à¸à¸ªà¸²à¸£à¹à¸«à¸¡à¹', + save : 'à¸à¸±à¸à¸à¸¶à¸', + preview : 'à¸à¸¹à¸«à¸à¹à¸²à¹à¸à¸à¸ªà¸²à¸£à¸à¸±à¸§à¸à¸¢à¹à¸²à¸', + cut : 'à¸à¸±à¸', + copy : 'สำà¹à¸à¸²', + paste : 'วาà¸', + print : 'สัà¹à¸à¸à¸´à¸¡à¸à¹', + underline : 'à¸à¸±à¸§à¸à¸µà¸à¹à¸ªà¹à¸à¹à¸à¹', + bold : 'à¸à¸±à¸§à¸«à¸à¸²', + italic : 'à¸à¸±à¸§à¹à¸à¸µà¸¢à¸', + selectAll : 'à¹à¸¥à¸·à¸à¸à¸à¸±à¹à¸à¸«à¸¡à¸', + removeFormat : 'ลà¹à¸²à¸à¸£à¸¹à¸à¹à¸à¸', + strike : 'à¸à¸±à¸§à¸à¸µà¸à¹à¸ªà¹à¸à¸à¸±à¸', + subscript : 'à¸à¸±à¸§à¸«à¹à¸à¸¢', + superscript : 'à¸à¸±à¸§à¸¢à¸', + horizontalrule : 'à¹à¸à¸£à¸à¹à¸ªà¹à¸à¸à¸±à¹à¸à¸à¸£à¸£à¸à¸±à¸', + pagebreak : 'à¹à¸à¸£à¸à¸à¸±à¸§à¹à¸à¹à¸à¸«à¸à¹à¸² Page Break', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'ลภลิà¸à¸à¹', + undo : 'ยà¸à¹à¸¥à¸´à¸à¸à¸³à¸ªà¸±à¹à¸', + redo : 'à¸à¸³à¸à¹à¸³à¸à¸³à¸ªà¸±à¹à¸', + + // Common messages and labels. + common : + { + browseServer : 'à¹à¸à¸´à¸à¸«à¸à¹à¸²à¸à¹à¸²à¸à¸à¸±à¸à¸à¸²à¸£à¹à¸à¸¥à¹à¸à¸±à¸à¹à¸«à¸¥à¸', + url : 'à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸ URL', + protocol : 'à¹à¸à¸£à¹à¸à¸à¸à¸¥', + upload : 'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹', + uploadSubmit : 'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹à¹à¸à¹à¸à¹à¸à¹à¸§à¹à¸à¸µà¹à¹à¸à¸£à¸·à¹à¸à¸à¹à¸¡à¹à¸à¹à¸²à¸¢ (à¹à¸à¸´à¸£à¹à¸à¹à¸§à¸à¸£à¹)', + image : 'รูà¸à¸ าà¸', + flash : 'à¹à¸à¸¥à¹ Flash', + form : 'à¹à¸à¸à¸à¸à¸£à¹à¸¡', + checkbox : 'à¹à¸à¹à¸à¸à¹à¸à¸', + radio : 'à¹à¸£à¸à¸´à¹à¸à¸à¸±à¸à¸à¸à¸', + textField : 'à¹à¸à¹à¸à¸à¹à¸à¸´à¸¥à¸à¹', + textarea : 'à¹à¸à¹à¸à¸à¹à¹à¸à¹à¸£à¸µà¸¢', + hiddenField : 'ฮิà¸à¹à¸à¸à¸à¸´à¸¥à¸à¹', + button : 'à¸à¸¸à¹à¸¡', + select : 'à¹à¸à¸à¸à¸±à¸§à¹à¸¥à¸·à¸à¸', + imageButton : 'à¸à¸¸à¹à¸¡à¹à¸à¸à¸£à¸¹à¸à¸ าà¸', + notSet : '<à¹à¸¡à¹à¸£à¸°à¸à¸¸>', + id : 'à¹à¸à¸à¸µ', + name : 'à¸à¸·à¹à¸', + langDir : 'à¸à¸²à¸£à¹à¸à¸µà¸¢à¸-à¸à¹à¸²à¸à¸ าษา', + langDirLtr : 'à¸à¸²à¸à¸à¹à¸²à¸¢à¹à¸à¸à¸§à¸² (LTR)', + langDirRtl : 'à¸à¸²à¸à¸à¸§à¸²à¸¡à¸²à¸à¹à¸²à¸¢ (RTL)', + langCode : 'รหัสภาษา', + longDescr : 'à¸à¸³à¸à¸à¸´à¸à¸²à¸¢à¸à¸£à¸°à¸à¸à¸ URL', + cssClass : 'à¸à¸¥à¸²à¸ªà¸à¸à¸à¹à¸à¸¥à¹à¸à¸³à¸«à¸à¸à¸¥à¸±à¸à¸©à¸à¸°à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥', + advisoryTitle : 'à¸à¸³à¹à¸à¸£à¸´à¹à¸à¸à¸³', + cssStyle : 'ลัà¸à¸©à¸à¸°à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥', + ok : 'à¸à¸à¸¥à¸', + cancel : 'ยà¸à¹à¸¥à¸´à¸', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'General', // MISSING + advancedTab : 'à¸à¸±à¹à¸à¸ªà¸¹à¸', + validateNumberFailed : 'This value is not a number.', // MISSING + confirmNewPage : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING + confirmCancel : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'à¸à¸§à¸²à¸¡à¸à¸§à¹à¸²à¸', + height : 'à¸à¸§à¸²à¸¡à¸ªà¸¹à¸', + align : 'à¸à¸²à¸£à¸à¸±à¸à¸§à¸²à¸', + alignLeft : 'à¸à¸´à¸à¸à¹à¸²à¸¢', + alignRight : 'à¸à¸´à¸à¸à¸§à¸²', + alignCenter : 'à¸à¸¶à¹à¸à¸à¸¥à¸²à¸', + alignTop : 'à¸à¸à¸ªà¸¸à¸', + alignMiddle : 'à¸à¸¶à¹à¸à¸à¸¥à¸²à¸à¹à¸à¸§à¸à¸±à¹à¸', + alignBottom : 'à¸à¸´à¸à¸à¹à¸²à¸à¸¥à¹à¸²à¸', + invalidHeight : 'Height must be a number.', // MISSING + invalidWidth : 'Width must be a number.', // MISSING + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'à¹à¸à¸£à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸´à¹à¸¨à¸©', + title : 'à¹à¸à¸£à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸´à¹à¸¨à¸©', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'à¹à¸à¸£à¸/à¹à¸à¹à¹à¸ ลิà¸à¸à¹', + other : '<à¸à¸·à¹à¸ à¹>', + menu : 'à¹à¸à¹à¹à¸ ลิà¸à¸à¹', + title : 'ลิà¸à¸à¹à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸à¹à¸§à¹à¸ à¸à¸µà¹à¸¡à¸¥à¹ รูà¸à¸ าภหรืà¸à¹à¸à¸¥à¹à¸à¸·à¹à¸à¹', + info : 'รายละà¹à¸à¸µà¸¢à¸', + target : 'à¸à¸²à¸£à¹à¸à¸´à¸à¸«à¸à¹à¸²à¸¥à¸´à¸à¸à¹', + upload : 'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹', + advanced : 'à¸à¸±à¹à¸à¸ªà¸¹à¸', + type : 'à¸à¸£à¸°à¹à¸ à¸à¸à¸à¸à¸¥à¸´à¸à¸à¹', + toUrl : 'URL', // MISSING + toAnchor : 'à¸à¸¸à¸à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸ (Anchor)', + toEmail : 'สà¹à¸à¸à¸µà¹à¸¡à¸¥à¹ (E-Mail)', + targetFrame : '<à¹à¸à¸´à¸à¹à¸à¹à¸à¸£à¸¡>', + targetPopup : '<à¹à¸à¸´à¸à¸«à¸à¹à¸²à¸à¸à¹à¸¥à¹à¸ (Pop-up)>', + targetFrameName : 'à¸à¸·à¹à¸à¸à¸²à¸£à¹à¹à¸à¹à¸à¹à¸à¸£à¸¡', + targetPopupName : 'ระà¸à¸¸à¸à¸·à¹à¸à¸«à¸à¹à¸²à¸à¸à¹à¸¥à¹à¸ (Pop-up)', + popupFeatures : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¸«à¸à¹à¸²à¸à¸à¹à¸¥à¹à¸ (Pop-up)', + popupResizable : 'Resizable', // MISSING + popupStatusBar : 'à¹à¸ªà¸à¸à¹à¸à¸à¸ªà¸à¸²à¸à¸°', + popupLocationBar: 'à¹à¸ªà¸à¸à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¸à¸à¹à¸à¸¥à¹', + popupToolbar : 'à¹à¸ªà¸à¸à¹à¸à¸à¹à¸à¸£à¸·à¹à¸à¸à¸¡à¸·à¸', + popupMenuBar : 'à¹à¸ªà¸à¸à¹à¸à¸à¹à¸¡à¸à¸¹', + popupFullScreen : 'à¹à¸ªà¸à¸à¹à¸à¹à¸¡à¸«à¸à¹à¸²à¸à¸ (IE5.5++ à¹à¸à¹à¸²à¸à¸±à¹à¸)', + popupScrollBars : 'à¹à¸ªà¸à¸à¹à¸à¸à¹à¸¥à¸·à¹à¸à¸', + popupDependent : 'à¹à¸ªà¸à¸à¹à¸à¹à¸¡à¸«à¸à¹à¸²à¸à¸ (Netscape)', + popupLeft : 'à¸à¸´à¸à¸±à¸à¸à¹à¸²à¸¢ (Left Position)', + popupTop : 'à¸à¸´à¸à¸±à¸à¸à¸ (Top Position)', + id : 'Id', // MISSING + langDir : 'à¸à¸²à¸£à¹à¸à¸µà¸¢à¸-à¸à¹à¸²à¸à¸ าษา', + langDirLTR : 'à¸à¸²à¸à¸à¹à¸²à¸¢à¹à¸à¸à¸§à¸² (LTR)', + langDirRTL : 'à¸à¸²à¸à¸à¸§à¸²à¸¡à¸²à¸à¹à¸²à¸¢ (RTL)', + acccessKey : 'à¹à¸à¸à¹à¸à¸ª à¸à¸µà¸¢à¹', + name : 'à¸à¸·à¹à¸', + langCode : 'à¸à¸²à¸£à¹à¸à¸µà¸¢à¸-à¸à¹à¸²à¸à¸ าษา', + tabIndex : 'ลำà¸à¸±à¸à¸à¸à¸ à¹à¸à¹à¸', + advisoryTitle : 'à¸à¸³à¹à¸à¸£à¸´à¹à¸à¸à¸³', + advisoryContentType : 'à¸à¸à¸´à¸à¸à¸à¸à¸à¸³à¹à¸à¸£à¸´à¹à¸à¸à¸³', + cssClasses : 'à¸à¸¥à¸²à¸ªà¸à¸à¸à¹à¸à¸¥à¹à¸à¸³à¸«à¸à¸à¸¥à¸±à¸à¸©à¸à¸°à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥', + charset : 'ลิà¸à¸à¹à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸à¹à¸à¸¢à¸±à¸à¸à¸¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£', + styles : 'ลัà¸à¸©à¸à¸°à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥', + rel : 'Relationship', // MISSING + selectAnchor : 'ระà¸à¸¸à¸à¹à¸à¸¡à¸¹à¸¥à¸à¸à¸à¸à¸¸à¸à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸ (Anchor)', + anchorName : 'à¸à¸·à¹à¸', + anchorId : 'à¹à¸à¸à¸µ', + emailAddress : 'à¸à¸µà¹à¸¡à¸¥à¹ (E-Mail)', + emailSubject : 'หัวà¹à¸£à¸·à¹à¸à¸', + emailBody : 'à¸à¹à¸à¸à¸§à¸²à¸¡', + noAnchors : '(ยัà¸à¹à¸¡à¹à¸¡à¸µà¸à¸¸à¸à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸à¸ ายà¹à¸à¸«à¸à¹à¸²à¹à¸à¸à¸ªà¸²à¸£à¸à¸µà¹)', + noUrl : 'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸à¸à¸à¸à¹à¸¥à¸à¹ (URL)', + noEmail : 'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸µà¹à¸¡à¸¥à¹ (E-mail)' + }, + + // Anchor dialog + anchor : + { + toolbar : 'à¹à¸à¸£à¸/à¹à¸à¹à¹à¸ Anchor', + menu : 'รายละà¹à¸à¸µà¸¢à¸ Anchor', + title : 'รายละà¹à¸à¸µà¸¢à¸ Anchor', + name : 'à¸à¸·à¹à¸ Anchor', + errorName : 'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸·à¹à¸à¸à¸à¸ Anchor', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Find and Replace', // MISSING + find : 'à¸à¹à¸à¸«à¸²', + replace : 'à¸à¹à¸à¸«à¸²à¹à¸¥à¸°à¹à¸à¸à¸à¸µà¹', + findWhat : 'à¸à¹à¸à¸«à¸²à¸à¸³à¸§à¹à¸²:', + replaceWith : 'à¹à¸à¸à¸à¸µà¹à¸à¹à¸§à¸¢:', + notFoundMsg : 'à¹à¸¡à¹à¸à¸à¸à¸³à¸à¸µà¹à¸à¹à¸à¸«à¸².', + matchCase : 'à¸à¸±à¸§à¹à¸«à¸à¹-à¹à¸¥à¹à¸ à¸à¹à¸à¸à¸à¸£à¸à¸à¸±à¸', + matchWord : 'à¸à¹à¸à¸à¸à¸£à¸à¸à¸±à¸à¸à¸¸à¸à¸à¸³', + matchCyclic : 'Match cyclic', // MISSING + replaceAll : 'à¹à¸à¸à¸à¸µà¹à¸à¸±à¹à¸à¸«à¸¡à¸à¸à¸µà¹à¸à¸', + replaceSuccessMsg : '%1 occurrence(s) replaced.' // MISSING + }, + + // Table Dialog + table : + { + toolbar : 'à¸à¸²à¸£à¸²à¸', + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¸à¸²à¸£à¸²à¸', + menu : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¸à¸²à¸£à¸²à¸', + deleteTable : 'ลà¸à¸à¸²à¸£à¸²à¸', + rows : 'à¹à¸à¸§', + columns : 'สà¸à¸¡à¸à¹', + border : 'à¸à¸à¸²à¸à¹à¸ªà¹à¸à¸à¸à¸', + widthPx : 'à¸à¸¸à¸à¸ªà¸µ', + widthPc : 'à¹à¸à¸à¸£à¹à¹à¸à¹à¸', + widthUnit : 'width unit', // MISSING + cellSpace : 'ระยะà¹à¸à¸§à¸à¸à¸à¸', + cellPad : 'ระยะà¹à¸à¸§à¸à¸±à¹à¸', + caption : 'หัวà¹à¸£à¸·à¹à¸à¸à¸à¸à¸à¸à¸²à¸£à¸²à¸', + summary : 'สรุà¸à¸à¸§à¸²à¸¡', + headers : 'Headers', // MISSING + headersNone : 'None', // MISSING + headersColumn : 'First column', // MISSING + headersRow : 'First Row', // MISSING + headersBoth : 'Both', // MISSING + invalidRows : 'Number of rows must be a number greater than 0.', // MISSING + invalidCols : 'Number of columns must be a number greater than 0.', // MISSING + invalidBorder : 'Border size must be a number.', // MISSING + invalidWidth : 'Table width must be a number.', // MISSING + invalidHeight : 'Table height must be a number.', // MISSING + invalidCellSpacing : 'Cell spacing must be a positive number.', // MISSING + invalidCellPadding : 'Cell padding must be a positive number.', // MISSING + + cell : + { + menu : 'à¸à¹à¸à¸à¸à¸²à¸£à¸²à¸', + insertBefore : 'Insert Cell Before', // MISSING + insertAfter : 'Insert Cell After', // MISSING + deleteCell : 'ลà¸à¸à¹à¸à¸', + merge : 'à¸à¸ªà¸²à¸à¸à¹à¸à¸', + mergeRight : 'Merge Right', // MISSING + mergeDown : 'Merge Down', // MISSING + splitHorizontal : 'Split Cell Horizontally', // MISSING + splitVertical : 'Split Cell Vertically', // MISSING + title : 'Cell Properties', // MISSING + cellType : 'Cell Type', // MISSING + rowSpan : 'Rows Span', // MISSING + colSpan : 'Columns Span', // MISSING + wordWrap : 'Word Wrap', // MISSING + hAlign : 'Horizontal Alignment', // MISSING + vAlign : 'Vertical Alignment', // MISSING + alignBaseline : 'Baseline', // MISSING + bgColor : 'Background Color', // MISSING + borderColor : 'Border Color', // MISSING + data : 'Data', // MISSING + header : 'Header', // MISSING + yes : 'Yes', // MISSING + no : 'No', // MISSING + invalidWidth : 'Cell width must be a number.', // MISSING + invalidHeight : 'Cell height must be a number.', // MISSING + invalidRowSpan : 'Rows span must be a whole number.', // MISSING + invalidColSpan : 'Columns span must be a whole number.', // MISSING + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'à¹à¸à¸§', + insertBefore : 'Insert Row Before', // MISSING + insertAfter : 'Insert Row After', // MISSING + deleteRow : 'ลà¸à¹à¸à¸§' + }, + + column : + { + menu : 'à¸à¸à¸¥à¸±à¸¡à¸à¹', + insertBefore : 'Insert Column Before', // MISSING + insertAfter : 'Insert Column After', // MISSING + deleteColumn : 'ลà¸à¸ªà¸à¸¡à¸à¹' + } + }, + + // Button Dialog. + button : + { + title : 'รายละà¹à¸à¸µà¸¢à¸à¸à¸à¸ à¸à¸¸à¹à¸¡', + text : 'à¸à¹à¸à¸à¸§à¸²à¸¡ (à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£)', + type : 'à¸à¹à¸à¸à¸§à¸²à¸¡', + typeBtn : 'Button', + typeSbm : 'Submit', + typeRst : 'Reset' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¹à¸à¸à¹à¸à¸', + radioTitle : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸£à¸à¸´à¹à¸à¸à¸±à¸à¸à¸à¸', + value : 'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£', + selected : 'à¹à¸¥à¸·à¸à¸à¹à¸à¹à¸à¸à¹à¸²à¹à¸£à¸´à¹à¸¡à¸à¹à¸' + }, + + // Form Dialog. + form : + { + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¸à¸à¸à¸£à¹à¸¡', + menu : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¸à¸à¸à¸£à¹à¸¡', + action : 'à¹à¸à¸à¸à¸±à¹à¸', + method : 'à¹à¸¡à¸à¸à¸', + encoding : 'Encoding' // MISSING + }, + + // Select Field Dialog. + select : + { + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¸à¸à¸±à¸§à¹à¸¥à¸·à¸à¸', + selectInfo : 'à¸à¸´à¸à¹à¸', + opAvail : 'รายà¸à¸²à¸£à¸à¸±à¸§à¹à¸¥à¸·à¸à¸', + value : 'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£', + size : 'à¸à¸à¸²à¸', + lines : 'à¸à¸£à¸£à¸à¸±à¸', + chkMulti : 'à¹à¸¥à¸·à¸à¸à¸«à¸¥à¸²à¸¢à¸à¹à¸²à¹à¸à¹', + opText : 'à¸à¹à¸à¸à¸§à¸²à¸¡', + opValue : 'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£', + btnAdd : 'à¹à¸à¸´à¹à¸¡', + btnModify : 'à¹à¸à¹à¹à¸', + btnUp : 'à¸à¸', + btnDown : 'ลà¹à¸²à¸', + btnSetValue : 'à¹à¸¥à¸·à¸à¸à¹à¸à¹à¸à¸à¹à¸²à¹à¸£à¸´à¹à¸¡à¸à¹à¸', + btnDelete : 'ลà¸' + }, + + // Textarea Dialog. + textarea : + { + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¹à¸à¹à¸à¹à¸£à¸µà¸¢', + cols : 'สà¸à¸¡à¸ à¹', + rows : 'à¹à¸à¸§' + }, + + // Text Field Dialog. + textfield : + { + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¹à¸à¸à¹à¸à¸´à¸¥à¸à¹', + name : 'à¸à¸·à¹à¸', + value : 'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£', + charWidth : 'à¸à¸§à¸²à¸¡à¸à¸§à¹à¸²à¸', + maxChars : 'à¸à¸³à¸à¸§à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸ªà¸¹à¸à¸ªà¸¸à¸', + type : 'à¸à¸à¸´à¸', + typeText : 'à¸à¹à¸à¸à¸§à¸²à¸¡', + typePass : 'รหัสà¸à¹à¸²à¸' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ ฮิà¸à¹à¸à¸à¸à¸´à¸¥à¸à¹', + name : 'à¸à¸·à¹à¸', + value : 'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£' + }, + + // Image Dialog. + image : + { + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ รูà¸à¸ าà¸', + titleButton : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¸à¸¸à¹à¸¡à¹à¸à¸à¸£à¸¹à¸à¸ าà¸', + menu : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ รูà¸à¸ าà¸', + infoTab : 'à¸à¹à¸à¸¡à¸¹à¸¥à¸à¸à¸à¸£à¸¹à¸à¸ าà¸', + btnUpload : 'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹à¹à¸à¹à¸à¹à¸à¹à¸§à¹à¸à¸µà¹à¹à¸à¸£à¸·à¹à¸à¸à¹à¸¡à¹à¸à¹à¸²à¸¢ (à¹à¸à¸´à¸£à¹à¸à¹à¸§à¸à¸£à¹)', + upload : 'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹', + alt : 'à¸à¸³à¸à¸£à¸°à¸à¸à¸à¸£à¸¹à¸à¸ าà¸', + lockRatio : 'à¸à¸³à¸«à¸à¸à¸à¸±à¸à¸£à¸²à¸ªà¹à¸§à¸ à¸à¸§à¹à¸²à¸-สูภà¹à¸à¸à¸à¸à¸à¸µà¹', + resetSize : 'à¸à¸³à¸«à¸à¸à¸£à¸¹à¸à¹à¸à¹à¸²à¸à¸à¸²à¸à¸à¸£à¸´à¸', + border : 'à¸à¸à¸²à¸à¸à¸à¸à¸£à¸¹à¸', + hSpace : 'ระยะà¹à¸à¸§à¸à¸à¸', + vSpace : 'ระยะà¹à¸à¸§à¸à¸±à¹à¸', + alertUrl : 'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸à¸à¸à¸à¹à¸¥à¸à¹à¸à¸à¸à¹à¸à¸¥à¹à¸£à¸¹à¸à¸ าภ(URL)', + linkTab : 'ลิà¹à¸à¸à¹', + button2Img : 'Do you want to transform the selected image button on a simple image?', // MISSING + img2Button : 'Do you want to transform the selected image on a image button?', // MISSING + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¹à¸à¸¥à¹ Flash', + propertiesTab : 'Properties', // MISSING + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¹à¸à¸¥à¹ Flash', + chkPlay : 'à¹à¸¥à¹à¸à¸à¸±à¸à¹à¸à¸¡à¸±à¸à¸´ Auto Play', + chkLoop : 'à¹à¸¥à¹à¸à¸§à¸à¸£à¸à¸ Loop', + chkMenu : 'à¹à¸«à¹à¹à¸à¹à¸à¸²à¸à¹à¸¡à¸à¸¹à¸à¸à¸ Flash', + chkFull : 'Allow Fullscreen', // MISSING + scale : 'à¸à¸±à¸à¸£à¸²à¸ªà¹à¸§à¸ Scale', + scaleAll : 'à¹à¸ªà¸à¸à¹à¸«à¹à¹à¸«à¹à¸à¸à¸±à¹à¸à¸«à¸¡à¸ Show all', + scaleNoBorder : 'à¹à¸¡à¹à¹à¸ªà¸à¸à¹à¸ªà¹à¸à¸à¸à¸ No Border', + scaleFit : 'à¹à¸ªà¸à¸à¹à¸«à¹à¸à¸à¸à¸µà¸à¸±à¸à¸à¸·à¹à¸à¸à¸µà¹ Exact Fit', + access : 'Script Access', // MISSING + accessAlways : 'Always', // MISSING + accessSameDomain: 'Same domain', // MISSING + accessNever : 'Never', // MISSING + alignAbsBottom : 'à¸à¸´à¸à¸à¹à¸²à¸à¸¥à¹à¸²à¸à¸ªà¸¸à¸', + alignAbsMiddle : 'à¸à¸¶à¹à¸à¸à¸¥à¸²à¸', + alignBaseline : 'à¸à¸´à¸à¸à¸£à¸£à¸à¸±à¸', + alignTextTop : 'à¹à¸à¹à¸à¸±à¸§à¸à¸±à¸à¸©à¸£', + quality : 'Quality', // MISSING + qualityBest : 'Best', // MISSING + qualityHigh : 'High', // MISSING + qualityAutoHigh : 'Auto High', // MISSING + qualityMedium : 'Medium', // MISSING + qualityAutoLow : 'Auto Low', // MISSING + qualityLow : 'Low', // MISSING + windowModeWindow: 'Window', // MISSING + windowModeOpaque: 'Opaque', // MISSING + windowModeTransparent : 'Transparent', // MISSING + windowMode : 'Window mode', // MISSING + flashvars : 'Variables for Flash', // MISSING + bgcolor : 'สีà¸à¸·à¹à¸à¸«à¸¥à¸±à¸', + hSpace : 'ระยะà¹à¸à¸§à¸à¸à¸', + vSpace : 'ระยะà¹à¸à¸§à¸à¸±à¹à¸', + validateSrc : 'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸à¸à¸à¸à¹à¸¥à¸à¹ (URL)', + validateHSpace : 'HSpace must be a number.', // MISSING + validateVSpace : 'VSpace must be a number.' // MISSING + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'à¸à¸£à¸§à¸à¸à¸²à¸£à¸ªà¸°à¸à¸à¸à¸³', + title : 'Spell Check', // MISSING + notAvailable : 'Sorry, but service is unavailable now.', // MISSING + errorLoading : 'Error loading application service host: %s.', // MISSING + notInDic : 'à¹à¸¡à¹à¸à¸à¹à¸à¸à¸´à¸à¸à¸±à¸à¸à¸²à¸£à¸µ', + changeTo : 'à¹à¸à¹à¹à¸à¹à¸à¹à¸', + btnIgnore : 'ยà¸à¹à¸§à¹à¸', + btnIgnoreAll : 'ยà¸à¹à¸§à¹à¸à¸à¸±à¹à¸à¸«à¸¡à¸', + btnReplace : 'à¹à¸à¸à¸à¸µà¹', + btnReplaceAll : 'à¹à¸à¸à¸à¸µà¹à¸à¸±à¹à¸à¸«à¸¡à¸', + btnUndo : 'ยà¸à¹à¸¥à¸´à¸', + noSuggestions : '- à¹à¸¡à¹à¸¡à¸µà¸à¸³à¹à¸à¸°à¸à¸³à¹à¸à¹ -', + progress : 'à¸à¸³à¸¥à¸±à¸à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸...', + noMispell : 'à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸à¹à¸ªà¸£à¹à¸à¸ªà¸´à¹à¸: à¹à¸¡à¹à¸à¸à¸à¸³à¸ªà¸°à¸à¸à¸à¸´à¸', + noChanges : 'à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸à¹à¸ªà¸£à¹à¸à¸ªà¸´à¹à¸: à¹à¸¡à¹à¸¡à¸µà¸à¸²à¸£à¹à¸à¹à¸à¸³à¹à¸à¹', + oneChange : 'à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸à¹à¸ªà¸£à¹à¸à¸ªà¸´à¹à¸: à¹à¸à¹à¹à¸1à¸à¸³', + manyChanges : 'à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸à¹à¸ªà¸£à¹à¸à¸ªà¸´à¹à¸:: à¹à¸à¹à¹à¸ %1 à¸à¸³', + ieSpellDownload : 'à¹à¸¡à¹à¹à¸à¹à¸à¸´à¸à¸à¸±à¹à¸à¸£à¸°à¸à¸à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸. à¸à¹à¸à¸à¸à¸²à¸£à¸à¸´à¸à¸à¸±à¹à¸à¹à¸«à¸¡à¸à¸£à¸±à¸?' + }, + + smiley : + { + toolbar : 'รูà¸à¸ªà¸·à¹à¸à¸à¸²à¸£à¸¡à¸à¹', + title : 'à¹à¸à¸£à¸à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸à¹à¸ªà¸·à¹à¸à¸à¸²à¸£à¸¡à¸à¹', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 element' // MISSING + }, + + numberedlist : 'ลำà¸à¸±à¸à¸£à¸²à¸¢à¸à¸²à¸£à¹à¸à¸à¸à¸±à¸§à¹à¸¥à¸', + bulletedlist : 'ลำà¸à¸±à¸à¸£à¸²à¸¢à¸à¸²à¸£à¹à¸à¸à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸à¹', + indent : 'à¹à¸à¸´à¹à¸¡à¸£à¸°à¸¢à¸°à¸¢à¹à¸à¸«à¸à¹à¸²', + outdent : 'ลà¸à¸£à¸°à¸¢à¸°à¸¢à¹à¸à¸«à¸à¹à¸²', + + justify : + { + left : 'à¸à¸±à¸à¸à¸´à¸à¸à¹à¸²à¸¢', + center : 'à¸à¸±à¸à¸à¸¶à¹à¸à¸à¸¥à¸²à¸', + right : 'à¸à¸±à¸à¸à¸´à¸à¸à¸§à¸²', + block : 'à¸à¸±à¸à¸à¸à¸à¸µà¸«à¸à¹à¸²à¸à¸£à¸°à¸à¸²à¸©' + }, + + blockquote : 'Block Quote', // MISSING + + clipboard : + { + title : 'วาà¸', + cutError : 'à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸à¸±à¸à¸à¹à¸à¸à¸§à¸²à¸¡à¸à¸µà¹à¹à¸¥à¸·à¸à¸à¹à¸§à¹à¹à¸à¹à¹à¸à¸·à¹à¸à¸à¸à¸²à¸à¸à¸²à¸£à¸à¸³à¸«à¸à¸à¸à¹à¸²à¸£à¸°à¸à¸±à¸à¸à¸§à¸²à¸¡à¸à¸¥à¸à¸à¸ ัย. à¸à¸£à¸¸à¸à¸²à¹à¸à¹à¸à¸¸à¹à¸¡à¸¥à¸±à¸à¹à¸à¸·à¹à¸à¸§à¸²à¸à¸à¹à¸à¸à¸§à¸²à¸¡à¹à¸à¸ (à¸à¸à¸à¸¸à¹à¸¡ Ctrl/Cmd à¹à¸¥à¸°à¸à¸±à¸§ X à¸à¸£à¹à¸à¸¡à¸à¸±à¸).', + copyError : 'à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸ªà¸³à¹à¸à¸²à¸à¹à¸à¸à¸§à¸²à¸¡à¸à¸µà¹à¹à¸¥à¸·à¸à¸à¹à¸§à¹à¹à¸à¹à¹à¸à¸·à¹à¸à¸à¸à¸²à¸à¸à¸²à¸£à¸à¸³à¸«à¸à¸à¸à¹à¸²à¸£à¸°à¸à¸±à¸à¸à¸§à¸²à¸¡à¸à¸¥à¸à¸à¸ ัย. à¸à¸£à¸¸à¸à¸²à¹à¸à¹à¸à¸¸à¹à¸¡à¸¥à¸±à¸à¹à¸à¸·à¹à¸à¸§à¸²à¸à¸à¹à¸à¸à¸§à¸²à¸¡à¹à¸à¸ (à¸à¸à¸à¸¸à¹à¸¡ Ctrl/Cmd à¹à¸¥à¸°à¸à¸±à¸§ C à¸à¸£à¹à¸à¸¡à¸à¸±à¸).', + pasteMsg : 'à¸à¸£à¸¸à¸à¸²à¹à¸à¹à¸à¸µà¸¢à¹à¸à¸à¸£à¹à¸à¹à¸à¹à¸²à¸à¸±à¹à¸ à¹à¸à¸¢à¸à¸à¸à¸¸à¹à¸¡ (<strong>Ctrl/Cmd à¹à¸¥à¸° V</strong>)à¸à¸£à¹à¸à¸¡à¹à¸à¸±à¸ à¹à¸¥à¸°à¸à¸ <strong>OK</strong>.', + securityMsg : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.', // MISSING + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING + toolbar : 'วาà¸à¸ªà¸³à¹à¸à¸²à¸à¸²à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¹à¸§à¸´à¸£à¹à¸', + title : 'วาà¸à¸ªà¸³à¹à¸à¸²à¸à¸²à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¹à¸§à¸´à¸£à¹à¸', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'วาà¸à¹à¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸£à¸£à¸¡à¸à¸²', + title : 'วาà¸à¹à¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸£à¸£à¸¡à¸à¸²' + }, + + templates : + { + button : 'à¹à¸à¸¡à¹à¸à¸¥à¸', + title : 'à¹à¸à¸¡à¹à¸à¸¥à¸à¸à¸à¸à¸ªà¹à¸§à¸à¹à¸à¸·à¹à¸à¸«à¸²à¹à¸§à¹à¸à¹à¸à¸à¹', + options : 'Template Options', // MISSING + insertOption : 'à¹à¸à¸à¸à¸µà¹à¹à¸à¸·à¹à¸à¸«à¸²à¹à¸§à¹à¸à¹à¸à¸à¹à¸à¸µà¹à¹à¸¥à¸·à¸à¸', + selectPromptMsg : 'à¸à¸£à¸¸à¸à¸²à¹à¸¥à¸·à¸à¸ à¹à¸à¸¡à¹à¸à¸¥à¸ à¹à¸à¸·à¹à¸à¸à¸³à¹à¸à¹à¸à¹à¹à¸à¹à¸à¸à¸µà¸à¸´à¸à¹à¸à¸à¸£à¹<br />(à¹à¸à¸·à¹à¸à¸«à¸²à¸ªà¹à¸§à¸à¸à¸µà¹à¸à¸°à¸«à¸²à¸¢à¹à¸):', + emptyListMsg : '(ยัà¸à¹à¸¡à¹à¸¡à¸µà¸à¸²à¸£à¸à¸³à¸«à¸à¸à¹à¸à¸¡à¹à¸à¸¥à¸)' + }, + + showBlocks : 'Show Blocks', // MISSING + + stylesCombo : + { + label : 'ลัà¸à¸©à¸à¸°', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'Block Styles', // MISSING + panelTitle2 : 'Inline Styles', // MISSING + panelTitle3 : 'Object Styles' // MISSING + }, + + format : + { + label : 'รูà¸à¹à¸à¸', + panelTitle : 'รูà¸à¹à¸à¸', + + tag_p : 'Normal', + tag_pre : 'Formatted', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Paragraph (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'à¹à¸à¸à¸à¸±à¸à¸©à¸£', + voiceLabel : 'Font', // MISSING + panelTitle : 'à¹à¸à¸à¸à¸±à¸à¸©à¸£' + }, + + fontSize : + { + label : 'à¸à¸à¸²à¸', + voiceLabel : 'Font Size', // MISSING + panelTitle : 'à¸à¸à¸²à¸' + }, + + colorButton : + { + textColorTitle : 'สีà¸à¸±à¸§à¸à¸±à¸à¸©à¸£', + bgColorTitle : 'สีà¸à¸·à¹à¸à¸«à¸¥à¸±à¸', + panelTitle : 'Colors', // MISSING + auto : 'สีà¸à¸±à¸à¹à¸à¸¡à¸±à¸à¸´', + more : 'à¹à¸¥à¸·à¸à¸à¸ªà¸µà¸à¸·à¹à¸à¹...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Spell Check As You Type', // MISSING + opera_title : 'Not supported by Opera', // MISSING + enable : 'Enable SCAYT', // MISSING + disable : 'Disable SCAYT', // MISSING + about : 'About SCAYT', // MISSING + toggle : 'Toggle SCAYT', // MISSING + options : 'Options', // MISSING + langs : 'Languages', // MISSING + moreSuggestions : 'More suggestions', // MISSING + ignore : 'Ignore', // MISSING + ignoreAll : 'Ignore All', // MISSING + addWord : 'Add Word', // MISSING + emptyDic : 'Dictionary name should not be empty.', // MISSING + + optionsTab : 'Options', // MISSING + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'Languages', // MISSING + + dictionariesTab : 'Dictionaries', // MISSING + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'About' // MISSING + }, + + about : + { + title : 'About CKEditor', // MISSING + dlgTitle : 'About CKEditor', // MISSING + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'For licensing information please visit our web site:', // MISSING + copy : 'Copyright © $1. All rights reserved.' // MISSING + }, + + maximize : 'Maximize', // MISSING + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'Anchor', // MISSING + flash : 'Flash Animation', // MISSING + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Unknown Object' // MISSING + }, + + resize : 'Drag to resize', // MISSING + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¹à¸à¸à¸ªà¸²à¸£', + title : 'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¹à¸à¸à¸ªà¸²à¸£', + design : 'Design', // MISSING + meta : 'à¸à¹à¸à¸¡à¸¹à¸¥à¸ªà¸³à¸«à¸£à¸±à¸à¹à¸ªà¸´à¸£à¹à¸à¹à¸à¸à¸à¸´à¹à¸', + chooseColor : 'Choose', // MISSING + other : '<à¸à¸·à¹à¸ à¹>', + docTitle : 'à¸à¸·à¹à¸à¹à¸à¹à¸à¸´à¹à¸¥', + charset : 'à¸à¸¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£', + charsetOther : 'à¸à¸¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸·à¹à¸à¹', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Central European', // MISSING + charsetCT : 'Chinese Traditional (Big5)', // MISSING + charsetCR : 'Cyrillic', // MISSING + charsetGR : 'Greek', // MISSING + charsetJP : 'Japanese', // MISSING + charsetKR : 'Korean', // MISSING + charsetTR : 'Turkish', // MISSING + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Western European', // MISSING + docType : 'à¸à¸£à¸°à¹à¸ à¸à¸à¸à¸à¹à¸à¸à¸ªà¸²à¸£', + docTypeOther : 'à¸à¸£à¸°à¹à¸ à¸à¹à¸à¸à¸ªà¸²à¸£à¸à¸·à¹à¸à¹', + xhtmlDec : 'รวมà¹à¸à¸² XHTML Declarations à¹à¸§à¹à¸à¹à¸§à¸¢', + bgColor : 'สีà¸à¸·à¹à¸à¸«à¸¥à¸±à¸', + bgImage : 'à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸à¸à¸à¸à¹à¸¥à¸à¹à¸à¸à¸à¸£à¸¹à¸à¸à¸·à¹à¸à¸«à¸¥à¸±à¸ (Image URL)', + bgFixed : 'à¸à¸·à¹à¸à¸«à¸¥à¸±à¸à¹à¸à¸à¹à¸¡à¹à¸¡à¸µà¹à¸à¸à¹à¸¥à¸·à¹à¸à¸', + txtColor : 'สีà¸à¸±à¸§à¸à¸±à¸à¸©à¸£', + margin : 'ระยะà¸à¸à¸à¸à¸à¸à¸«à¸à¹à¸²à¹à¸à¸à¸ªà¸²à¸£', + marginTop : 'à¸à¹à¸²à¸à¸à¸', + marginLeft : 'à¸à¹à¸²à¸à¸à¹à¸²à¸¢', + marginRight : 'à¸à¹à¸²à¸à¸à¸§à¸²', + marginBottom : 'à¸à¹à¸²à¸à¸¥à¹à¸²à¸', + metaKeywords : 'à¸à¸³à¸ªà¸³à¸à¸±à¸à¸à¸à¸´à¸à¸²à¸¢à¹à¸à¸à¸ªà¸²à¸£ (à¸à¸±à¹à¸à¸à¸³à¸à¹à¸§à¸¢ à¸à¸à¸¡à¸¡à¹à¸²)', + metaDescription : 'à¸à¸£à¸°à¹à¸¢à¸à¸à¸à¸´à¸à¸²à¸¢à¹à¸à¸µà¹à¸¢à¸§à¸à¸±à¸à¹à¸à¸à¸ªà¸²à¸£', + metaAuthor : 'à¸à¸¹à¹à¸ªà¸£à¹à¸²à¸à¹à¸à¸à¸ªà¸²à¸£', + metaCopyright : 'สà¸à¸§à¸à¸¥à¸´à¸à¸ªà¸´à¸à¸à¸´à¹', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/tr.js b/_source/lang/tr.js new file mode 100644 index 0000000..52f738b --- /dev/null +++ b/_source/lang/tr.js @@ -0,0 +1,811 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** +* @fileOverview +*/ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['tr'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Zengin metin editörü, %1, yardım için ALT 0 tuÅuna basın.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Zengin Metin Editörü', + + // Toolbar buttons without dialogs. + source : 'Kaynak', + newPage : 'Yeni Sayfa', + save : 'Kaydet', + preview : 'Ãn Ä°zleme', + cut : 'Kes', + copy : 'Kopyala', + paste : 'YapıÅtır', + print : 'Yazdır', + underline : 'Altı Ãizgili', + bold : 'Kalın', + italic : 'Ä°talik', + selectAll : 'Tümünü Seç', + removeFormat : 'Biçimi Kaldır', + strike : 'Ãstü Ãizgili', + subscript : 'Alt Simge', + superscript : 'Ãst Simge', + horizontalrule : 'Yatay Satır Ekle', + pagebreak : 'Sayfa Sonu Ekle', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Köprü Kaldır', + undo : 'Geri Al', + redo : 'Tekrarla', + + // Common messages and labels. + common : + { + browseServer : 'Sunucuyu Gez', + url : 'URL', + protocol : 'Protokol', + upload : 'KarÅıya Yükle', + uploadSubmit : 'Sunucuya Yolla', + image : 'Resim', + flash : 'Flash', + form : 'Form', + checkbox : 'Onay Kutusu', + radio : 'Seçenek DüÄmesi', + textField : 'Metin GiriÅi', + textarea : 'Ãok Satırlı Metin', + hiddenField : 'Gizli Veri', + button : 'DüÄme', + select : 'Seçim Menüsü', + imageButton : 'Resimli DüÄme', + notSet : '<tanımlanmamıÅ>', + id : 'Kimlik', + name : 'Ad', + langDir : 'Dil Yönü', + langDirLtr : 'Soldan SaÄa (LTR)', + langDirRtl : 'SaÄdan Sola (RTL)', + langCode : 'Dil Kodlaması', + longDescr : 'Uzun Tanımlı URL', + cssClass : 'Biçem Sayfası Sınıfları', + advisoryTitle : 'DanıÅma BaÅlıÄı', + cssStyle : 'Biçem', + ok : 'Tamam', + cancel : 'Ä°ptal', + close : 'Kapat', + preview : 'Ãn gösterim', + generalTab : 'Genel', + advancedTab : 'GeliÅmiÅ', + validateNumberFailed : 'Bu deÄer sayı deÄildir.', + confirmNewPage : 'Ä°ceriÄiniz kayıt edilmediÄinden dolayı kaybolacaktır. Yeni bir sayfa yüklemek istediÄinize eminsiniz?', + confirmCancel : 'Bazı seçenekler deÄiÅmiÅtir. Dialog penceresini kapatmak istediÄinize eminmisiniz?', + options : 'Seçenekler', + target : 'Hedef', + targetNew : 'Yeni Pencere (_blank)', + targetTop : 'Enüst Pencere (_top)', + targetSelf : 'Aynı Pencere (_self)', + targetParent : 'Ana Pencere (_parent)', + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'GeniÅlik', + height : 'Yükseklik', + align : 'Hizalama', + alignLeft : 'Sol', + alignRight : 'SaÄ', + alignCenter : 'Merkez', + alignTop : 'Tepe', + alignMiddle : 'Orta', + alignBottom : 'Alt', + invalidHeight : 'Yükseklik sayı olmalıdır.', + invalidWidth : 'GeniÅlik bir sayı olmalıdır.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, hazır deÄildir</span>' + }, + + contextmenu : + { + options : 'İçerik Menüsü Seçenekleri' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Ãzel Karakter Ekle', + title : 'Ãzel Karakter Seç', + options : 'Ãzel Karakter Seçenekleri' + }, + + // Link dialog. + link : + { + toolbar : 'Link Ekle/Düzenle', + other : '<diÄer>', + menu : 'Link Düzenle', + title : 'Link', + info : 'Link Bilgisi', + target : 'Hedef', + upload : 'KarÅıya Yükle', + advanced : 'GeliÅmiÅ', + type : 'Link Türü', + toUrl : 'URL', + toAnchor : 'Bu sayfada çapa', + toEmail : 'E-Posta', + targetFrame : '<çerçeve>', + targetPopup : '<yeni açılan pencere>', + targetFrameName : 'Hedef Ãerçeve Adı', + targetPopupName : 'Yeni Açılan Pencere Adı', + popupFeatures : 'Yeni Açılan Pencere Ãzellikleri', + popupResizable : 'Resizable', + popupStatusBar : 'Durum ÃubuÄu', + popupLocationBar: 'Yer ÃubuÄu', + popupToolbar : 'Araç ÃubuÄu', + popupMenuBar : 'Menü ÃubuÄu', + popupFullScreen : 'Tam Ekran (IE)', + popupScrollBars : 'Kaydırma Ãubukları', + popupDependent : 'BaÄımlı (Netscape)', + popupLeft : 'Sola Göre Konum', + popupTop : 'Yukarıya Göre Konum', + id : 'Id', + langDir : 'Dil Yönü', + langDirLTR : 'Soldan SaÄa (LTR)', + langDirRTL : 'SaÄdan Sola (RTL)', + acccessKey : 'EriÅim TuÅu', + name : 'Ad', + langCode : 'Dil Yönü', + tabIndex : 'Sekme Ä°ndeksi', + advisoryTitle : 'DanıÅma BaÅlıÄı', + advisoryContentType : 'DanıÅma İçerik Türü', + cssClasses : 'Biçem Sayfası Sınıfları', + charset : 'BaÄlı Kaynak Karakter Gurubu', + styles : 'Biçem', + rel : 'Relationship', // MISSING + selectAnchor : 'BaÄlantı Seç', + anchorName : 'BaÄlantı Adı ile', + anchorId : 'Eleman Kimlik Numarası ile', + emailAddress : 'E-Posta Adresi', + emailSubject : 'Ä°leti Konusu', + emailBody : 'Ä°leti Gövdesi', + noAnchors : '(Bu belgede hiç çapa yok)', + noUrl : 'Lütfen Link URL\'sini yazın', + noEmail : 'Lütfen E-posta adresini yazın' + }, + + // Anchor dialog + anchor : + { + toolbar : 'BaÄlantı Ekle/Düzenle', + menu : 'BaÄlantı Ãzellikleri', + title : 'BaÄlantı Ãzellikleri', + name : 'BaÄlantı Adı', + errorName : 'Lütfen baÄlantı için ad giriniz', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'SayılandırılmıŠListe Ãzellikleri', + bulletedTitle : 'Simgeli Liste Ãzellikleri', + type : 'Tipi', + start : 'BaÅla', + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Daire', + disc : 'Disk', + square : 'Kare', + none : 'Yok', + notset : '<ayarlanmamıÅ>', + armenian : 'Ermenice sayılandırma', + georgian : 'Gürcüce numaralandırma (an, ban, gan, vs.)', + lowerRoman : 'Küçük Roman (i, ii, iii, iv, v, vs.)', + upperRoman : 'Büyük Roman (I, II, III, IV, V, vs.)', + lowerAlpha : 'Küçük Alpha (a, b, c, d, e, vs.)', + upperAlpha : 'Büyük Alpha (A, B, C, D, E, vs.)', + lowerGreek : 'Küçük Greek (alpha, beta, gamma, vs.)', + decimal : 'Ondalık (1, 2, 3, vs.)', + decimalLeadingZero : 'BaÅı sıfırlı ondalık (01, 02, 03, vs.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Bul ve DeÄiÅtir', + find : 'Bul', + replace : 'DeÄiÅtir', + findWhat : 'Aranan:', + replaceWith : 'Bununla deÄiÅtir:', + notFoundMsg : 'Belirtilen yazı bulunamadı.', + matchCase : 'Büyük/küçük harf duyarlı', + matchWord : 'Kelimenin tamamı uysun', + matchCyclic : 'EÅleÅen döngü', + replaceAll : 'Tümünü DeÄiÅtir', + replaceSuccessMsg : '%1 bulunanlardan deÄiÅtirildi.' + }, + + // Table Dialog + table : + { + toolbar : 'Tablo', + title : 'Tablo Ãzellikleri', + menu : 'Tablo Ãzellikleri', + deleteTable : 'Tabloyu Sil', + rows : 'Satırlar', + columns : 'Sütunlar', + border : 'Kenar KalınlıÄı', + widthPx : 'piksel', + widthPc : 'yüzde', + widthUnit : 'geniÅlik birimi', + cellSpace : 'Izgara kalınlıÄı', + cellPad : 'Izgara yazı arası', + caption : 'BaÅlık', + summary : 'Ãzet', + headers : 'BaÅlıklar', + headersNone : 'Yok', + headersColumn : 'Ä°lk Sütun', + headersRow : 'Ä°lk Satır', + headersBoth : 'Her Ä°kisi', + invalidRows : 'Satır sayısı 0 sayısından büyük olmalıdır.', + invalidCols : 'Sütün sayısı 0 sayısından büyük olmalıdır.', + invalidBorder : 'Ãerceve büyüklüklüÄü sayı olmalıdır.', + invalidWidth : 'Tablo geniÅliÄi sayı olmalıdır.', + invalidHeight : 'Tablo yüksekliÄi sayı olmalıdır.', + invalidCellSpacing : 'Hücre boÅluÄu (spacing) sayı olmalıdır.', + invalidCellPadding : 'Hücre aralıÄı (padding) sayı olmalıdır.', + + cell : + { + menu : 'Hücre', + insertBefore : 'Hücre Ekle - Ãnce', + insertAfter : 'Hücre Ekle - Sonra', + deleteCell : 'Hücre Sil', + merge : 'Hücreleri BirleÅtir', + mergeRight : 'BirleÅtir - SaÄdaki Ä°le ', + mergeDown : 'BirleÅtir - AÅaÄıdaki Ä°le ', + splitHorizontal : 'Hücreyi Yatay Böl', + splitVertical : 'Hücreyi Dikey Böl', + title : 'Hücre Ãzellikleri', + cellType : 'Hücre Tipi', + rowSpan : 'Satırlar Mesafesi (Span)', + colSpan : 'Sütünlar Mesafesi (Span)', + wordWrap : 'Kelime Kaydırma', + hAlign : 'DüÅey Hizalama', + vAlign : 'YataÅ Hizalama', + alignBaseline : 'Tabana', + bgColor : 'Arkaplan Rengi', + borderColor : 'Ãerçeve Rengi', + data : 'Veri', + header : 'BaÅlık', + yes : 'Evet', + no : 'Hayır', + invalidWidth : 'Hücre geniÅliÄi sayı olmalıdır.', + invalidHeight : 'Hücre yüksekliÄi sayı olmalıdır.', + invalidRowSpan : 'Satırların mesafesi tam sayı olmalıdır.', + invalidColSpan : 'Sütünların mesafesi tam sayı olmalıdır.', + chooseColor : 'Seçiniz' + }, + + row : + { + menu : 'Satır', + insertBefore : 'Satır Ekle - Ãnce', + insertAfter : 'Satır Ekle - Sonra', + deleteRow : 'Satır Sil' + }, + + column : + { + menu : 'Sütun', + insertBefore : 'Kolon Ekle - Ãnce', + insertAfter : 'Kolon Ekle - Sonra', + deleteColumn : 'Sütun Sil' + } + }, + + // Button Dialog. + button : + { + title : 'DüÄme Ãzellikleri', + text : 'Metin (DeÄer)', + type : 'Tip', + typeBtn : 'DüÄme', + typeSbm : 'Gönder', + typeRst : 'Sıfırla' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Onay Kutusu Ãzellikleri', + radioTitle : 'Seçenek DüÄmesi Ãzellikleri', + value : 'DeÄer', + selected : 'Seçili' + }, + + // Form Dialog. + form : + { + title : 'Form Ãzellikleri', + menu : 'Form Ãzellikleri', + action : 'Ä°Ålem', + method : 'Yöntem', + encoding : 'Kodlama' + }, + + // Select Field Dialog. + select : + { + title : 'Seçim Menüsü Ãzellikleri', + selectInfo : 'Bilgi', + opAvail : 'Mevcut Seçenekler', + value : 'DeÄer', + size : 'Boyut', + lines : 'satır', + chkMulti : 'Ãoklu seçime izin ver', + opText : 'Metin', + opValue : 'DeÄer', + btnAdd : 'Ekle', + btnModify : 'Düzenle', + btnUp : 'Yukarı', + btnDown : 'AÅaÄı', + btnSetValue : 'Seçili deÄer olarak ata', + btnDelete : 'Sil' + }, + + // Textarea Dialog. + textarea : + { + title : 'Ãok Satırlı Metin Ãzellikleri', + cols : 'Sütunlar', + rows : 'Satırlar' + }, + + // Text Field Dialog. + textfield : + { + title : 'Metin GiriÅi Ãzellikleri', + name : 'Ad', + value : 'DeÄer', + charWidth : 'Karakter GeniÅliÄi', + maxChars : 'En Fazla Karakter', + type : 'Tür', + typeText : 'Metin', + typePass : 'Åifre' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Gizli Veri Ãzellikleri', + name : 'Ad', + value : 'DeÄer' + }, + + // Image Dialog. + image : + { + title : 'Resim Ãzellikleri', + titleButton : 'Resimli DüÄme Ãzellikleri', + menu : 'Resim Ãzellikleri', + infoTab : 'Resim Bilgisi', + btnUpload : 'Sunucuya Yolla', + upload : 'KarÅıya Yükle', + alt : 'Alternatif Yazı', + lockRatio : 'Oranı Kilitle', + resetSize : 'Boyutu BaÅa Döndür', + border : 'Kenar', + hSpace : 'Yatay BoÅluk', + vSpace : 'Dikey BoÅluk', + alertUrl : 'Lütfen resmin URL\'sini yazınız', + linkTab : 'Köprü', + button2Img : 'Seçili resim butonunu basit resime çevirmek istermisiniz?', + img2Button : 'Seçili olan resimi, resimli butona çevirmek istermisiniz?', + urlMissing : 'Resmin URL kaynaÄı eksiktir.', + validateBorder : 'Ãerçeve tam sayı olmalıdır.', + validateHSpace : 'HSpace tam sayı olmalıdır.', + validateVSpace : 'VSpace tam sayı olmalıdır.' + }, + + // Flash Dialog + flash : + { + properties : 'Flash Ãzellikleri', + propertiesTab : 'Ãzellikler', + title : 'Flash Ãzellikleri', + chkPlay : 'Otomatik Oynat', + chkLoop : 'Döngü', + chkMenu : 'Flash Menüsünü Kullan', + chkFull : 'Tam ekrana Ä°zinver', + scale : 'Boyutlandır', + scaleAll : 'Hepsini Göster', + scaleNoBorder : 'Kenar Yok', + scaleFit : 'Tam SıÄdır', + access : 'Kod Ä°zni', + accessAlways : 'Herzaman', + accessSameDomain: 'Aynı domain', + accessNever : 'Asla', + alignAbsBottom : 'Tam Altı', + alignAbsMiddle : 'Tam Ortası', + alignBaseline : 'Taban Ãizgisi', + alignTextTop : 'Yazı Tepeye', + quality : 'Kalite', + qualityBest : 'En iyi', + qualityHigh : 'Yüksek', + qualityAutoHigh : 'Otomatik Yükseklik', + qualityMedium : 'Orta', + qualityAutoLow : 'Otomatik DüÅüklük', + qualityLow : 'DüÅük', + windowModeWindow: 'Pencere', + windowModeOpaque: 'Opak', + windowModeTransparent : 'Åeffaf', + windowMode : 'Pencere modu', + flashvars : 'Flash DeÄerleri', + bgcolor : 'Arka Renk', + hSpace : 'Yatay BoÅluk', + vSpace : 'Dikey BoÅluk', + validateSrc : 'Lütfen köprü URL\'sini yazın', + validateHSpace : 'HSpace sayı olmalıdır.', + validateVSpace : 'VSpace sayı olmalıdır.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Yazım Denetimi', + title : 'Yazımı Denetle', + notAvailable : 'Ãzügünüz, bu servis Åuanda hizmet dıÅıdır.', + errorLoading : 'Uygulamada yüklerken hata oluÅtu: %s.', + notInDic : 'Sözlükte Yok', + changeTo : 'Åuna deÄiÅtir:', + btnIgnore : 'Yoksay', + btnIgnoreAll : 'Tümünü Yoksay', + btnReplace : 'DeÄiÅtir', + btnReplaceAll : 'Tümünü DeÄiÅtir', + btnUndo : 'Geri Al', + noSuggestions : '- Ãneri Yok -', + progress : 'Yazım denetimi iÅlemde...', + noMispell : 'Yazım denetimi tamamlandı: YanlıŠyazıma rastlanmadı', + noChanges : 'Yazım denetimi tamamlandı: Hiçbir kelime deÄiÅtirilmedi', + oneChange : 'Yazım denetimi tamamlandı: Bir kelime deÄiÅtirildi', + manyChanges : 'Yazım denetimi tamamlandı: %1 kelime deÄiÅtirildi', + ieSpellDownload : 'Yazım denetimi yüklenmemiÅ. Åimdi yüklemek ister misiniz?' + }, + + smiley : + { + toolbar : 'Ä°fade', + title : 'Ä°fade Ekle', + options : 'Ä°fade Seçenekleri' + }, + + elementsPath : + { + eleLabel : 'Elementlerin yolu', + eleTitle : '%1 element' + }, + + numberedlist : 'Numaralı Liste', + bulletedlist : 'Simgeli Liste', + indent : 'Sekme Arttır', + outdent : 'Sekme Azalt', + + justify : + { + left : 'Sola Dayalı', + center : 'OrtalanmıÅ', + right : 'SaÄa Dayalı', + block : 'Ä°ki Kenara YaslanmıÅ' + }, + + blockquote : 'Blok OluÅtur', + + clipboard : + { + title : 'YapıÅtır', + cutError : 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme iÅlemine izin vermiyor. Ä°Ålem için (Ctrl/Cmd+X) tuÅlarını kullanın.', + copyError : 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama iÅlemine izin vermiyor. Ä°Ålem için (Ctrl/Cmd+C) tuÅlarını kullanın.', + pasteMsg : 'Lütfen aÅaÄıdaki kutunun içine yapıÅtırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.', + securityMsg : 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya eriÅimine izin vermiyor. Bu pencere içine tekrar yapıÅtırmalısınız..', + pasteArea : 'Paste Area' + }, + + pastefromword : + { + confirmCleanup : 'YapıÅtırmaya çalıÅtıÄınız metin Word\'den kopyalanmıÅtır. YapıÅtırmadan önce silmek istermisiniz?', + toolbar : 'Word\'den YapıÅtır', + title : 'Word\'den YapıÅtır', + error : 'YapıÅtırmadaki veri bilgisi hata düzelene kadar silinmeyecektir' + }, + + pasteText : + { + button : 'Düz Metin Olarak YapıÅtır', + title : 'Düz Metin Olarak YapıÅtır' + }, + + templates : + { + button : 'Åablonlar', + title : 'İçerik Åablonları', + options : 'Åablon Seçenekleri', + insertOption : 'Mevcut içerik ile deÄiÅtir', + selectPromptMsg : 'Düzenleyicide açmak için lütfen bir Åablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):', + emptyListMsg : '(Belirli bir Åablon seçilmedi)' + }, + + showBlocks : 'Blokları Göster', + + stylesCombo : + { + label : 'Biçem', + panelTitle : 'Stilleri Düzenliyor', + panelTitle1 : 'Blok Stilleri', + panelTitle2 : 'Inline Stilleri', + panelTitle3 : 'Nesne Stilleri' + }, + + format : + { + label : 'Biçim', + panelTitle : 'Biçim', + + tag_p : 'Normal', + tag_pre : 'Biçimli', + tag_address : 'Adres', + tag_h1 : 'BaÅlık 1', + tag_h2 : 'BaÅlık 2', + tag_h3 : 'BaÅlık 3', + tag_h4 : 'BaÅlık 4', + tag_h5 : 'BaÅlık 5', + tag_h6 : 'BaÅlık 6', + tag_div : 'Paragraf (DIV)' + }, + + div : + { + title : 'Div İçeriÄi OluÅtur', + toolbar : 'Div İçeriÄi OluÅtur', + cssClassInputLabel : 'Stilltipi Sınıfı', + styleSelectLabel : 'Stil', + IdInputLabel : 'Id', + languageCodeInputLabel : ' Dil Kodu', + inlineStyleInputLabel : 'Inline Stili', + advisoryTitleInputLabel : 'Tavsiye BaÅlıÄı', + langDirLabel : 'Dil Yönü', + langDirLTRLabel : 'Soldan saÄa (LTR)', + langDirRTLLabel : 'SaÄdan sola (RTL)', + edit : 'Div Düzenle', + remove : 'Div Kaldır' + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Yazı Türü', + voiceLabel : 'Font', + panelTitle : 'Yazı Türü' + }, + + fontSize : + { + label : 'Boyut', + voiceLabel : 'Font Size', + panelTitle : 'Boyut' + }, + + colorButton : + { + textColorTitle : 'Yazı Rengi', + bgColorTitle : 'Arka Renk', + panelTitle : 'Renkler', + auto : 'Otomatik', + more : 'DiÄer renkler...' + }, + + colors : + { + '000' : 'Siyah', + '800000' : 'Kestane', + '8B4513' : 'Koyu Kahverengi', + '2F4F4F' : 'Koyu KurÅuni Gri', + '008080' : 'Teal', + '000080' : 'Mavi', + '4B0082' : 'Ãivit Mavisi', + '696969' : 'Silik Gri', + 'B22222' : 'AteÅ TuÄlası', + 'A52A2A' : 'Kahverengi', + 'DAA520' : 'Altun Sırık', + '006400' : 'Koyu YeÅil', + '40E0D0' : 'Turkuaz', + '0000CD' : 'Orta Mavi', + '800080' : 'Pembe', + '808080' : 'Gri', + 'F00' : 'Kırmızı', + 'FF8C00' : 'Koyu Portakal', + 'FFD700' : 'Altın', + '008000' : 'YeÅil', + '0FF' : 'Ciyan', + '00F' : 'Mavi', + 'EE82EE' : 'MenekÅe', + 'A9A9A9' : 'Koyu Gri', + 'FFA07A' : 'Açık Sarımsı', + 'FFA500' : 'Portakal', + 'FFFF00' : 'Sarı', + '00FF00' : 'Açık YeÅil', + 'AFEEEE' : 'Sönük Turkuaz', + 'ADD8E6' : 'Açık Mavi', + 'DDA0DD' : 'Mor', + 'D3D3D3' : 'Açık Gri', + 'FFF0F5' : 'Eflatun Pembe', + 'FAEBD7' : 'Antik Beyaz', + 'FFFFE0' : 'Açık Sarı', + 'F0FFF0' : 'Balsarısı', + 'F0FFFF' : 'Gök Mavisi', + 'F0F8FF' : 'Reha Mavi', + 'E6E6FA' : 'Eflatun', + 'FFF' : 'Beyaz' + }, + + scayt : + { + title : 'GirmiÅ olduÄunuz kelime denetimi', + opera_title : 'Opera tarafından desteklenmemektedir', + enable : 'SCAYT etkinleÅtir', + disable : 'SCAYT pasifleÅtir', + about : 'SCAYT hakkında', + toggle : 'SCAYT deÄiÅtir', + options : 'Seçenekler', + langs : 'Diller', + moreSuggestions : 'Daha fazla öneri', + ignore : 'Yoksay', + ignoreAll : 'Tümünü Yoksay', + addWord : 'Kelime Ekle', + emptyDic : 'Sözlük adı boÅ olamaz.', + + optionsTab : 'Seçenekler', + allCaps : 'Tüm büyük küçük kelimeleri yoksay', + ignoreDomainNames : 'Domain adlarını yoksay', + mixedCase : 'KarıÅık büyüklük ile Sözcükler yoksay', + mixedWithDigits : 'Sayılarla Kelimeler yoksay', + + languagesTab : 'Diller', + + dictionariesTab : 'Sözlükler', + dic_field_name : 'Sözlük adı', + dic_create : 'OluÅtur', + dic_restore : 'Geri al', + dic_delete : 'Sil', + dic_rename : 'Yeniden adlandır', + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', + + aboutTab : 'Hakkında' + }, + + about : + { + title : 'CKEditor Hakkında', + dlgTitle : 'CKEditor Hakkında', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:', + copy : 'Copyright © $1. Tüm hakları saklıdır.' + }, + + maximize : 'Büyült', + minimize : 'Küçült', + + fakeobjects : + { + anchor : 'BaÄlantı', + flash : 'Flash Animasyonu', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Bilinmeyen Nesne' + }, + + resize : 'Boyutlandırmak için sürükle', + + colordialog : + { + title : 'Renk seç', + options : 'Renk Seçenekleri', + highlight : 'Ä°Åaretle', + selected : 'SeçilmiÅ', + clear : 'Temizle' + }, + + toolbarCollapse : 'Toolbar\'ı topla', + toolbarExpand : 'Toolbar\'ı aç', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Belge Ãzellikleri', + title : 'Belge Ãzellikleri', + design : 'Design', // MISSING + meta : 'Tanım Bilgisi (Meta)', + chooseColor : 'Seçiniz', + other : '<diÄer>', + docTitle : 'Sayfa BaÅlıÄı', + charset : 'Karakter Kümesi Kodlaması', + charsetOther : 'DiÄer Karakter Kümesi Kodlaması', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Orta Avrupa', + charsetCT : 'Geleneksel Ãince (Big5)', + charsetCR : 'Kiril', + charsetGR : 'Yunanca', + charsetJP : 'Japonca', + charsetKR : 'Korece', + charsetTR : 'Türkçe', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Batı Avrupa', + docType : 'Belge Türü BaÅlıÄı', + docTypeOther : 'DiÄer Belge Türü BaÅlıÄı', + xhtmlDec : 'XHTML Bildirimlerini Dahil Et', + bgColor : 'Arka Plan Rengi', + bgImage : 'Arka Plan Resim URLsi', + bgFixed : 'Sabit Arka Plan', + txtColor : 'Yazı Rengi', + margin : 'Kenar BoÅlukları', + marginTop : 'Tepe', + marginLeft : 'Sol', + marginRight : 'SaÄ', + marginBottom : 'Alt', + metaKeywords : 'Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmıÅ)', + metaDescription : 'Belge Tanımı', + metaAuthor : 'Yazar', + metaCopyright : 'Telif', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/uk.js b/_source/lang/uk.js new file mode 100644 index 0000000..3d45dfc --- /dev/null +++ b/_source/lang/uk.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Ukrainian language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['uk'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'ТекÑÑовий ÑедакÑоÑ, %1, наÑиÑнÑÑÑ ALT 0 Ð´Ð»Ñ Ð´Ð¾Ð²Ñдки.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'ТекÑÑовий ÑедакÑоÑ', + + // Toolbar buttons without dialogs. + source : 'ÐжеÑело', + newPage : 'Ðова ÑÑоÑÑнка', + save : 'ÐбеÑегÑи', + preview : 'ÐопеÑеднÑй пеÑеглÑд', + cut : 'ÐиÑÑзаÑи', + copy : 'ÐопÑÑваÑи', + paste : 'ÐÑÑавиÑи', + print : 'ÐÑÑк', + underline : 'ÐÑдкÑеÑлений', + bold : 'ÐиÑний', + italic : 'ÐÑÑÑив', + selectAll : 'ÐидÑлиÑи вÑе', + removeFormat : 'ÐÑиÑÑиÑи ÑоÑмаÑÑваннÑ', + strike : 'ÐакÑеÑлений', + subscript : 'ÐижнÑй ÑндекÑ', + superscript : 'ÐеÑÑ Ð½Ñй ÑндекÑ', + horizontalrule : 'ÐоÑизонÑалÑна лÑнÑÑ', + pagebreak : 'ÐÑÑавиÑи ÑозÑив ÑÑоÑÑнки', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'ÐидалиÑи поÑиланнÑ', + undo : 'ÐовеÑнÑÑи', + redo : 'ÐовÑоÑиÑи', + + // Common messages and labels. + common : + { + browseServer : 'ÐглÑд', + url : 'URL', + protocol : 'ÐÑоÑокол', + upload : 'ÐадÑÑлаÑи', + uploadSubmit : 'ÐадÑÑлаÑи на ÑеÑвеÑ', + image : 'ÐобÑаженнÑ', + flash : 'Flash', + form : 'ФоÑма', + checkbox : 'ÐалоÑка', + radio : 'Ðнопка вибоÑÑ', + textField : 'ТекÑÑове поле', + textarea : 'ТекÑÑова облаÑÑÑ', + hiddenField : 'ÐÑÐ¸Ñ Ð¾Ð²Ð°Ð½Ðµ поле', + button : 'Ðнопка', + select : 'СпиÑок', + imageButton : 'Ðнопка Ñз зобÑаженнÑм', + notSet : '<не визнаÑено>', + id : 'ÐденÑиÑÑкаÑоÑ', + name : 'Ðм\'Ñ', + langDir : 'ÐапÑÑмок мови', + langDirLtr : 'ÐлÑва напÑаво (LTR)', + langDirRtl : 'СпÑава налÑво (RTL)', + langCode : 'Ðод мови', + longDescr : 'Ðовгий Ð¾Ð¿Ð¸Ñ URL', + cssClass : 'ÐÐ»Ð°Ñ CSS', + advisoryTitle : 'Ðаголовок', + cssStyle : 'СÑÐ¸Ð»Ñ CSS', + ok : 'ÐÐ', + cancel : 'СкаÑÑваÑи', + close : 'ÐакÑиÑи', + preview : 'ÐопеÑеднÑй пеÑеглÑд', + generalTab : 'ÐÑновне', + advancedTab : 'ÐодаÑкове', + validateNumberFailed : 'ÐнаÑÐµÐ½Ð½Ñ Ð½Ðµ Ñ ÑÑлим ÑиÑлом.', + confirmNewPage : 'ÐÑÑ Ð½ÐµÐ·Ð±ÐµÑÐµÐ¶ÐµÐ½Ñ Ð·Ð¼Ñни бÑдÑÑÑ Ð²ÑÑаÑенÑ. Ðи впевненÑ, Ñо Ñ Ð¾ÑеÑе заванÑажиÑи Ð½Ð¾Ð²Ñ ÑÑоÑÑнкÑ?', + confirmCancel : 'ÐеÑÐºÑ Ð¾Ð¿ÑÑÑ Ð·Ð¼Ñнено. ÐакÑиÑи вÑкно без збеÑÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð¼Ñн?', + options : 'ÐпÑÑÑ', + target : 'ЦÑлÑ', + targetNew : 'Ðове вÑкно (_blank)', + targetTop : 'ÐоÑоÑне вÑкно (_top)', + targetSelf : 'ÐоÑоÑний ÑÑейм/вÑкно (_self)', + targetParent : 'ÐаÑÑкÑвÑÑкий ÑÑейм/вÑкно (_parent)', + langDirLTR : 'ÐлÑва напÑаво (LTR)', + langDirRTL : 'СпÑава налÑво (RTL)', + styles : 'СÑÐ¸Ð»Ñ CSS', + cssClasses : 'ÐÐ»Ð°Ñ CSS', + width : 'ШиÑина', + height : 'ÐиÑоÑа', + align : 'ÐиÑÑвнÑваннÑ', + alignLeft : 'Ðо лÑÐ²Ð¾Ð¼Ñ ÐºÑаÑ', + alignRight : 'Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ', + alignCenter : 'Ðо ÑенÑÑÑ', + alignTop : 'Ðо веÑÑ Ð½ÑÐ¾Ð¼Ñ ÐºÑаÑ', + alignMiddle : 'Ðо ÑеÑединÑ', + alignBottom : 'Ðо нижнÑÐ¾Ð¼Ñ ÐºÑаÑ', + invalidHeight : 'ÐиÑоÑа повинна бÑÑи ÑÑлим ÑиÑлом.', + invalidWidth : 'ШиÑина повинна бÑÑи ÑÑлим ÑиÑлом.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, не доÑÑÑпне</span>' + }, + + contextmenu : + { + options : 'ÐпÑÑÑ ÐºÐ¾Ð½ÑекÑÑного менÑ' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'СпеÑÑалÑний Ñимвол', + title : 'ÐбеÑÑÑÑ ÑпеÑÑалÑний Ñимвол', + options : 'ÐпÑÑÑ' + }, + + // Link dialog. + link : + { + toolbar : 'ÐÑÑавиÑи/РедагÑваÑи поÑиланнÑ', + other : '<ÑнÑий>', + menu : 'ÐÑÑавиÑи поÑиланнÑ', + title : 'ÐоÑиланнÑ', + info : 'ÐнÑоÑмаÑÑÑ Ð¿Ð¾ÑиланнÑ', + target : 'ЦÑлÑ', + upload : 'ÐадÑÑлаÑи', + advanced : 'ÐодаÑкове', + type : 'Тип поÑиланнÑ', + toUrl : 'URL', + toAnchor : 'ЯкÑÑ Ð½Ð° ÑÑ ÑÑоÑÑнкÑ', + toEmail : 'Ðл. поÑÑа', + targetFrame : '<ÑÑейм>', + targetPopup : '<випливаÑÑе вÑкно>', + targetFrameName : 'Ðм\'Ñ ÑÑлÑового ÑÑеймÑ', + targetPopupName : 'Ðм\'Ñ Ð²Ð¸Ð¿Ð»Ð¸Ð²Ð°ÑÑого вÑкна', + popupFeatures : 'ÐлаÑÑивоÑÑÑ Ð²Ð¸Ð¿Ð»Ð¸Ð²Ð°ÑÑого вÑкна', + popupResizable : 'ÐаÑÑÑабоване', + popupStatusBar : 'Ð Ñдок ÑÑаÑÑÑÑ', + popupLocationBar: 'ÐÐ°Ð½ÐµÐ»Ñ Ð»Ð¾ÐºÐ°ÑÑÑ', + popupToolbar : 'ÐÐ°Ð½ÐµÐ»Ñ ÑнÑÑÑÑменÑÑв', + popupMenuBar : 'ÐÐ°Ð½ÐµÐ»Ñ Ð¼ÐµÐ½Ñ', + popupFullScreen : 'Ðовний екÑан (IE)', + popupScrollBars : 'СÑÑÑÑки пÑокÑÑÑки', + popupDependent : 'Ðалежний (Netscape)', + popupLeft : 'ÐозиÑÑÑ Ð·Ð»Ñва', + popupTop : 'ÐозиÑÑÑ Ð·Ð²ÐµÑÑ Ñ', + id : 'ÐденÑиÑÑкаÑоÑ', + langDir : 'ÐапÑÑмок мови', + langDirLTR : 'ÐлÑва напÑаво (LTR)', + langDirRTL : 'СпÑава налÑво (RTL)', + acccessKey : 'ÐаÑÑÑа клавÑÑа', + name : 'Ðм\'Ñ', + langCode : 'Ðод мови', + tabIndex : 'ÐоÑлÑдовнÑÑÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´Ñ', + advisoryTitle : 'Ðаголовок', + advisoryContentType : 'Тип вмÑÑÑÑ', + cssClasses : 'ÐÐ»Ð°Ñ CSS', + charset : 'ÐодÑваннÑ', + styles : 'СÑÐ¸Ð»Ñ CSS', + rel : 'Relationship', // MISSING + selectAnchor : 'ÐбеÑÑÑÑ ÑкÑÑ', + anchorName : 'Ðа Ñм\'Ñм елеменÑÑ', + anchorId : 'Ðа ÑденÑиÑÑкаÑоÑом елеменÑÑ', + emailAddress : 'ÐдÑеÑа ел. поÑÑи', + emailSubject : 'Тема лиÑÑа', + emailBody : 'ТÑло повÑдомленнÑ', + noAnchors : '(Ð ÑÑÐ¾Ð¼Ñ Ð´Ð¾ÐºÑменÑÑ Ð½ÐµÐ¼Ð°Ñ ÑкоÑÑв)', + noUrl : 'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ URL поÑиланнÑ', + noEmail : 'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ Ð°Ð´ÑÐµÑ ÐµÐ». поÑÑи' + }, + + // Anchor dialog + anchor : + { + toolbar : 'ÐÑÑавиÑи/РедагÑваÑи ÑкÑÑ', + menu : 'ÐлаÑÑивоÑÑÑ ÑкоÑÑ', + title : 'ÐлаÑÑивоÑÑÑ ÑкоÑÑ', + name : 'Ðм\'Ñ ÑкоÑÑ', + errorName : 'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ Ñм\'Ñ ÑкоÑÑ', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'ÐпÑÑÑ Ð½ÑмеÑованого ÑпиÑкÑ', + bulletedTitle : 'ÐпÑÑÑ Ð¼Ð°ÑкÑÑованого ÑпиÑкÑ', + type : 'Тип', + start : 'ÐоÑаÑи з...', + validateStartNumber :'ÐоÑаÑковий Ð½Ð¾Ð¼ÐµÑ ÑпиÑÐºÑ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ бÑÑи ÑÑлим ÑиÑлом.', + circle : 'ÐÑлÑÑе', + disc : 'ÐÑÑжеÑок', + square : 'ÐвадÑаÑик', + none : 'Ðема', + notset : '<не вказано>', + armenian : 'ÐÑÑменÑÑка нÑмеÑаÑÑÑ', + georgian : 'ÐÑÑзинÑÑка нÑмеÑаÑÑÑ (an, ban, gan Ñ Ñ.д.)', + lowerRoman : 'ÐÐ°Ð»Ñ ÑимÑÑÐºÑ (i, ii, iii, iv, v Ñ Ñ.д.)', + upperRoman : 'ÐÐµÐ»Ð¸ÐºÑ ÑимÑÑÐºÑ (I, II, III, IV, V Ñ Ñ.д.)', + lowerAlpha : 'ÐÐ°Ð»Ñ Ð»Ð°Ñ. бÑкви (a, b, c, d, e Ñ Ñ.д.)', + upperAlpha : 'ÐÐµÐ»Ð¸ÐºÑ Ð»Ð°Ñ. бÑкви (A, B, C, D, E Ñ Ñ.д.)', + lowerGreek : 'ÐÐ°Ð»Ñ Ð³Ñ. бÑкви (алÑÑа, беÑа, гамма Ñ Ñ.д.)', + decimal : 'ÐеÑÑÑÐºÐ¾Ð²Ñ (1, 2, 3 Ñ Ñ.д.)', + decimalLeadingZero : 'ÐеÑÑÑÐºÐ¾Ð²Ñ Ð· нÑлем (01, 02, 03 Ñ Ñ.д.)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'ÐнайÑи Ñ Ð·Ð°Ð¼ÑниÑи', + find : 'ÐоÑÑк', + replace : 'ÐамÑна', + findWhat : 'ШÑкаÑи:', + replaceWith : 'ÐамÑниÑи на:', + notFoundMsg : 'Ðказаний ÑекÑÑ Ð½Ðµ знайдено.', + matchCase : 'ÐÑÐ°Ñ Ð¾Ð²ÑваÑи ÑегÑÑÑÑ', + matchWord : 'ÐбÑг ÑÑÐ»Ð¸Ñ ÑлÑв', + matchCyclic : 'ЦиклÑÑна замÑна', + replaceAll : 'ÐамÑниÑи вÑе', + replaceSuccessMsg : '%1 ÑпÑвпадÑнÑ(нÑ) замÑнено.' + }, + + // Table Dialog + table : + { + toolbar : 'ТаблиÑÑ', + title : 'ÐлаÑÑивоÑÑÑ ÑаблиÑÑ', + menu : 'ÐлаÑÑивоÑÑÑ ÑаблиÑÑ', + deleteTable : 'ÐидалиÑи ÑаблиÑÑ', + rows : 'Ð Ñдки', + columns : 'СÑовбÑÑ', + border : 'РозмÑÑ Ñамки', + widthPx : 'пÑкÑелÑв', + widthPc : 'вÑдÑоÑкÑв', + widthUnit : 'ÐдиниÑÑ Ð²Ð¸Ð¼ÑÑ.', + cellSpace : 'ÐÑомÑжок', + cellPad : 'ÐнÑÑÑ. вÑдÑÑÑп', + caption : 'Ðаголовок ÑаблиÑÑ', + summary : 'ÐеÑалÑний Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ ÑаблиÑÑ', + headers : 'Ðаголовки ÑÑовбÑÑв/ÑÑдкÑв', + headersNone : 'Ðез заголовкÑв', + headersColumn : 'СÑовбÑÑ', + headersRow : 'Ð Ñдки', + headersBoth : 'СÑовбÑÑ Ñ ÑÑдки', + invalidRows : 'ÐÑлÑкÑÑÑÑ ÑÑдкÑв повинна бÑÑи бÑлÑÑÐ¾Ñ 0.', + invalidCols : 'ÐÑлÑкÑÑÑÑ ÑÑовбÑÑв повинна бÑÑи бÑлÑÑÐ¾Ñ 0.', + invalidBorder : 'РозмÑÑ Ñамки повинен бÑÑи ÑÑлим ÑиÑлом.', + invalidWidth : 'ШиÑина ÑаблиÑÑ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð° бÑÑи ÑÑлим ÑиÑлом.', + invalidHeight : 'ÐиÑоÑа ÑаблиÑÑ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð° бÑÑи ÑÑлим ÑиÑлом.', + invalidCellSpacing : 'ÐÑомÑжок мÑж комÑÑками повинен бÑÑи ÑÑлим ÑиÑлом.', + invalidCellPadding : 'ÐнÑÑÑ. вÑдÑÑÑп комÑÑки повинен бÑÑи ÑÑлим ÑиÑлом.', + + cell : + { + menu : 'ÐомÑÑки', + insertBefore : 'ÐÑÑавиÑи комÑÑÐºÑ Ð¿ÐµÑед', + insertAfter : 'ÐÑÑавиÑи комÑÑÐºÑ Ð¿ÑÑлÑ', + deleteCell : 'ÐидалиÑи комÑÑки', + merge : 'Ðб\'ÑднаÑи комÑÑки', + mergeRight : 'Ðб\'ÑднаÑи ÑпÑава', + mergeDown : 'Ðб\'ÑднаÑи донизÑ', + splitHorizontal : 'РоздÑлиÑи комÑÑÐºÑ Ð¿Ð¾ гоÑизонÑалÑ', + splitVertical : 'РоздÑлиÑи комÑÑÐºÑ Ð¿Ð¾ веÑÑикалÑ', + title : 'ÐлаÑÑивоÑÑÑ ÐºÐ¾Ð¼ÑÑки', + cellType : 'Тип комÑÑки', + rowSpan : 'Ðб\'ÑÐ´Ð½Ð°Ð½Ð½Ñ ÑÑдкÑв', + colSpan : 'Ðб\'ÑÐ´Ð½Ð°Ð½Ð½Ñ ÑÑовпÑÑв', + wordWrap : 'ÐвÑопеÑенеÑÐµÐ½Ð½Ñ ÑекÑÑÑ', + hAlign : 'ÐоÑиз. виÑÑвнÑваннÑ', + vAlign : 'ÐеÑÑ. виÑÑвнÑваннÑ', + alignBaseline : 'Ðо базовÑй лÑнÑÑ', + bgColor : 'ÐолÑÑ ÑонÑ', + borderColor : 'ÐолÑÑ Ñамки', + data : 'ÐанÑ', + header : 'Ðаголовок', + yes : 'Так', + no : 'ÐÑ', + invalidWidth : 'ШиÑина комÑÑки повинна бÑÑи ÑÑлим ÑиÑлом.', + invalidHeight : 'ÐиÑоÑа комÑÑки повинна бÑÑи ÑÑлим ÑиÑлом.', + invalidRowSpan : 'ÐÑлÑкÑÑÑÑ Ð¾Ð±\'ÑднÑÐ²Ð°Ð½Ð¸Ñ ÑÑдкÑв повинна бÑÑи ÑÑлим ÑиÑлом.', + invalidColSpan : 'ÐÑлÑкÑÑÑÑ Ð¾Ð±\'ÑднÑÐ²Ð°Ð½Ð¸Ñ ÑÑовбÑÑв повинна бÑÑи ÑÑлим ÑиÑлом.', + chooseColor : 'ÐбÑаÑи' + }, + + row : + { + menu : 'Ð Ñдки', + insertBefore : 'ÐÑÑавиÑи ÑÑдок пеÑед', + insertAfter : 'ÐÑÑавиÑи ÑÑдок пÑÑлÑ', + deleteRow : 'ÐидалиÑи ÑÑдки' + }, + + column : + { + menu : 'СÑовбÑÑ', + insertBefore : 'ÐÑÑавиÑи ÑÑовбеÑÑ Ð¿ÐµÑед', + insertAfter : 'ÐÑÑавиÑи ÑÑовбеÑÑ Ð¿ÑÑлÑ', + deleteColumn : 'ÐидалиÑи ÑÑовбÑÑ' + } + }, + + // Button Dialog. + button : + { + title : 'ÐлаÑÑивоÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸', + text : 'ÐнаÑеннÑ', + type : 'Тип', + typeBtn : 'Ðнопка (button)', + typeSbm : 'ÐадÑÑлаÑи (submit)', + typeRst : 'ÐÑиÑÑиÑи (reset)' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'ÐлаÑÑивоÑÑÑ Ð³Ð°Ð»Ð¾Ñки', + radioTitle : 'ÐлаÑÑивоÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ вибоÑÑ', + value : 'ÐнаÑеннÑ', + selected : 'ÐбÑана' + }, + + // Form Dialog. + form : + { + title : 'ÐлаÑÑивоÑÑÑ ÑоÑми', + menu : 'ÐлаÑÑивоÑÑÑ ÑоÑми', + action : 'ÐÑÑ', + method : 'ÐеÑод', + encoding : 'ÐодÑваннÑ' + }, + + // Select Field Dialog. + select : + { + title : 'ÐлаÑÑивоÑÑÑ ÑпиÑкÑ', + selectInfo : 'ÐнÑо', + opAvail : 'ÐоÑÑÑÐ¿Ð½Ñ Ð²Ð°ÑÑанÑи', + value : 'ÐнаÑеннÑ', + size : 'ÐÑлÑкÑÑÑÑ', + lines : 'Ð²Ð¸Ð´Ð¸Ð¼Ð¸Ñ Ð¿Ð¾Ð·Ð¸ÑÑй Ñ ÑпиÑкÑ', + chkMulti : 'СпиÑок з мÑлÑÑивибоÑом', + opText : 'ТекÑÑ', + opValue : 'ÐнаÑеннÑ', + btnAdd : 'ÐобавиÑи', + btnModify : 'ÐмÑниÑи', + btnUp : 'ÐгоÑÑ', + btnDown : 'Ðниз', + btnSetValue : 'ÐÑÑановиÑи Ñк обÑане знаÑеннÑ', + btnDelete : 'ÐидалиÑи' + }, + + // Textarea Dialog. + textarea : + { + title : 'ÐлаÑÑивоÑÑÑ ÑекÑÑÐ¾Ð²Ð¾Ñ Ð¾Ð±Ð»Ð°ÑÑÑ', + cols : 'СÑовбÑÑ', + rows : 'Ð Ñдки' + }, + + // Text Field Dialog. + textfield : + { + title : 'ÐлаÑÑивоÑÑÑ ÑекÑÑового полÑ', + name : 'Ðм\'Ñ', + value : 'ÐнаÑеннÑ', + charWidth : 'ШиÑина', + maxChars : 'ÐакÑ. к-ÑÑ ÑимволÑв', + type : 'Тип', + typeText : 'ТекÑÑ', + typePass : 'ÐаÑолÑ' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'ÐлаÑÑивоÑÑÑ Ð¿ÑÐ¸Ñ Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ полÑ', + name : 'Ðм\'Ñ', + value : 'ÐнаÑеннÑ' + }, + + // Image Dialog. + image : + { + title : 'ÐлаÑÑивоÑÑÑ Ð·Ð¾Ð±ÑаженнÑ', + titleButton : 'ÐлаÑÑивоÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ Ñз зобÑаженнÑм', + menu : 'ÐлаÑÑивоÑÑÑ Ð·Ð¾Ð±ÑаженнÑ', + infoTab : 'ÐнÑоÑмаÑÑÑ Ð¿Ñо зобÑаженнÑ', + btnUpload : 'ÐадÑÑлаÑи на ÑеÑвеÑ', + upload : 'ÐадÑÑлаÑи', + alt : 'ÐлÑÑеÑнаÑивний ÑекÑÑ', + lockRatio : 'ÐбеÑегÑи пÑопоÑÑÑÑ', + resetSize : 'ÐÑиÑÑиÑи Ð¿Ð¾Ð»Ñ ÑозмÑÑÑв', + border : 'Рамка', + hSpace : 'ÐоÑиз. вÑдÑÑÑп', + vSpace : 'ÐеÑÑ. вÑдÑÑÑп', + alertUrl : 'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ URL зобÑаженнÑ', + linkTab : 'ÐоÑиланнÑ', + button2Img : 'ÐажаÑÑе пеÑеÑвоÑиÑи обÑÐ°Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÑ-зобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° пÑоÑÑе зобÑаженнÑ?', + img2Button : 'ÐажаÑÑе пеÑеÑвоÑиÑи обÑане зобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° кнопкÑ-зобÑаженнÑ?', + urlMissing : 'ÐкажÑÑÑ URL зобÑаженнÑ.', + validateBorder : 'ШиÑина Ñамки повинна бÑÑи ÑÑлим ÑиÑлом.', + validateHSpace : 'ÐоÑиз. вÑдÑÑÑп повинен бÑÑи ÑÑлим ÑиÑлом.', + validateVSpace : 'ÐеÑÑ. вÑдÑÑÑп повинен бÑÑи ÑÑлим ÑиÑлом.' + }, + + // Flash Dialog + flash : + { + properties : 'ÐлаÑÑивоÑÑÑ Flash', + propertiesTab : 'ÐлаÑÑивоÑÑÑ', + title : 'ÐлаÑÑивоÑÑÑ Flash', + chkPlay : 'ÐвÑопÑогÑаваннÑ', + chkLoop : 'ЦиклÑÑно', + chkMenu : 'ÐозволиÑи Ð¼ÐµÐ½Ñ Flash', + chkFull : 'ÐозволиÑи повноекÑанний пеÑеглÑд', + scale : 'ÐаÑÑÑаб', + scaleAll : 'ÐоказаÑи вÑе', + scaleNoBorder : 'Ðез Ñамки', + scaleFit : 'ÐоÑ. ÑозмÑÑ', + access : 'ÐоÑÑÑп до ÑкÑипÑа', + accessAlways : 'Ðавжди', + accessSameDomain: 'Ð Ñого ж домена', + accessNever : 'ÐÑколи', + alignAbsBottom : 'Ðо нижнÑÐ¾Ð¼Ñ ÐºÑÐ°Ñ (abs)', + alignAbsMiddle : 'Ðо ÑеÑÐµÐ´Ð¸Ð½Ñ (abs)', + alignBaseline : 'Ðо базовÑй лÑнÑÑ', + alignTextTop : 'ТекÑÑ Ð¿Ð¾ веÑÑ Ð½ÑÐ¾Ð¼Ñ ÐºÑаÑ', + quality : 'ЯкÑÑÑÑ', + qualityBest : 'ÐÑдмÑнна', + qualityHigh : 'ÐиÑока', + qualityAutoHigh : 'ÐвÑом. вÑдмÑнна', + qualityMedium : 'СеÑеднÑ', + qualityAutoLow : 'ÐвÑом. низÑка', + qualityLow : 'ÐизÑка', + windowModeWindow: 'ÐÑкно', + windowModeOpaque: 'ÐепÑозоÑÑÑÑÑ', + windowModeTransparent : 'ÐÑозоÑÑÑÑÑ', + windowMode : 'ÐÑконний Ñежим', + flashvars : 'ÐмÑÐ½Ð½Ñ Flash', + bgcolor : 'ÐолÑÑ ÑонÑ', + hSpace : 'ÐоÑиз. вÑдÑÑÑп', + vSpace : 'ÐеÑÑ. вÑдÑÑÑп', + validateSrc : 'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ URL поÑиланнÑ', + validateHSpace : 'ÐоÑиз. вÑдÑÑÑп повинен бÑÑи ÑÑлим ÑиÑлом.', + validateVSpace : 'ÐеÑÑ. вÑдÑÑÑп повинен бÑÑи ÑÑлим ÑиÑлом.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'ÐеÑевÑÑиÑи оÑÑогÑаÑÑÑ', + title : 'ÐеÑевÑÑка оÑÑогÑаÑÑÑ', + notAvailable : 'ÐибаÑÑе, але ÑеÑвÑÑ Ð½Ð°ÑÐ°Ð·Ñ Ð½ÐµÐ´Ð¾ÑÑÑпний.', + errorLoading : 'Ðомилка заванÑÐ°Ð¶ÐµÐ½Ð½Ñ : %s.', + notInDic : 'ÐÐµÐ¼Ð°Ñ Ð² ÑловникÑ', + changeTo : 'ÐамÑниÑи на', + btnIgnore : 'ÐÑопÑÑÑиÑи', + btnIgnoreAll : 'ÐÑопÑÑÑиÑи вÑе', + btnReplace : 'ÐамÑниÑи', + btnReplaceAll : 'ÐамÑниÑи вÑе', + btnUndo : 'Ðазад', + noSuggestions : '- Ð½ÐµÐ¼Ð°Ñ Ð²Ð°ÑÑанÑÑв -', + progress : 'ÐиконÑÑÑÑÑÑ Ð¿ÐµÑевÑÑка оÑÑогÑаÑÑÑ...', + noMispell : 'ÐеÑевÑÑÐºÑ Ð¾ÑÑогÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑено: помилок не знайдено', + noChanges : 'ÐеÑевÑÑÐºÑ Ð¾ÑÑогÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑено: жодне Ñлово не змÑнено', + oneChange : 'ÐеÑевÑÑÐºÑ Ð¾ÑÑогÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑено: змÑнено одне Ñлово', + manyChanges : 'ÐеÑевÑÑÐºÑ Ð¾ÑÑогÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑено: 1% ÑлÑв(ова) змÑнено', + ieSpellDownload : 'ÐодÑÐ»Ñ Ð¿ÐµÑевÑÑки оÑÑогÑаÑÑÑ Ð½Ðµ вÑÑановлено. ÐажаÑÑе заванÑажиÑи його заÑаз?' + }, + + smiley : + { + toolbar : 'Смайлик', + title : 'ÐÑÑавиÑи Ñмайлик', + options : 'ÐпÑÑÑ ÑмайликÑв' + }, + + elementsPath : + { + eleLabel : 'ШлÑÑ ', + eleTitle : '%1 елеменÑ' + }, + + numberedlist : 'ÐÑмеÑований ÑпиÑок', + bulletedlist : 'ÐаÑкÑÑований ÑпиÑок', + indent : 'ÐбÑлÑÑиÑи вÑдÑÑÑп', + outdent : 'ÐменÑиÑи вÑдÑÑÑп', + + justify : + { + left : 'Ðо лÑÐ²Ð¾Ð¼Ñ ÐºÑаÑ', + center : 'Ðо ÑенÑÑÑ', + right : 'Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ', + block : 'Ðо ÑиÑинÑ' + }, + + blockquote : 'ЦиÑаÑа', + + clipboard : + { + title : 'ÐÑÑавиÑи', + cutError : 'ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ ÐаÑого бÑаÑзеÑа не дозволÑÑÑÑ ÑедакÑоÑÑ Ð°Ð²ÑомаÑиÑно виконÑваÑи опеÑаÑÑÑ Ð²Ð¸ÑÑзÑваннÑ. ÐÑÐ´Ñ Ð»Ð°Ñка, викоÑиÑÑовÑйÑе клавÑаÑÑÑÑ Ð´Ð»Ñ ÑÑого (Ctrl/Cmd+X)', + copyError : 'ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ ÐаÑого бÑаÑзеÑа не дозволÑÑÑÑ ÑедакÑоÑÑ Ð°Ð²ÑомаÑиÑно виконÑваÑи опеÑаÑÑÑ ÐºÐ¾Ð¿ÑÑваннÑ. ÐÑÐ´Ñ Ð»Ð°Ñка, викоÑиÑÑовÑйÑе клавÑаÑÑÑÑ Ð´Ð»Ñ ÑÑого (Ctrl/Cmd+C).', + pasteMsg : 'ÐÑÐ´Ñ Ð»Ð°Ñка, вÑÑавÑе ÑнÑоÑмаÑÑÑ Ð· бÑÑеÑа обмÑÐ½Ñ Ð² ÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ, коÑиÑÑÑÑÑиÑÑ ÐºÐ¾Ð¼Ð±ÑнаÑÑÑÑ ÐºÐ»Ð°Ð²ÑÑ (<STRONG>Ctrl/Cmd+V</STRONG>), Ñа наÑиÑнÑÑÑ <STRONG>OK</STRONG>.', + securityMsg : 'РедакÑÐ¾Ñ Ð½Ðµ може оÑÑимаÑи пÑÑмий доÑÑÑп до бÑÑеÑÑ Ð¾Ð±Ð¼ÑÐ½Ñ Ñ Ð·Ð²\'ÑÐ·ÐºÑ Ð· налаÑÑÑваннÑми ÐаÑого бÑаÑзеÑа. Ðам поÑÑÑбно вÑÑавиÑи ÑнÑоÑмаÑÑÑ Ð² Ñе вÑкно.', + pasteArea : 'ÐблаÑÑÑ Ð²ÑÑавки' + }, + + pastefromword : + { + confirmCleanup : 'ТекÑÑ, Ñо Ðи намагаÑÑеÑÑ Ð²ÑÑавиÑи, ÑÑ Ð¾Ð¶Ð¸Ð¹ на ÑкопÑйований з Word. ÐажаÑÑе оÑиÑÑиÑи його ÑоÑмаÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑед вÑÑавлÑннÑм?', + toolbar : 'ÐÑÑавиÑи з Word', + title : 'ÐÑÑавиÑи з Word', + error : 'Ðеможливо оÑиÑÑиÑи ÑоÑмаÑÑÐ²Ð°Ð½Ð½Ñ ÑеÑез внÑÑÑÑÑÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ.' + }, + + pasteText : + { + button : 'ÐÑÑавиÑи ÑÑлÑки ÑекÑÑ', + title : 'ÐÑÑавиÑи ÑÑлÑки ÑекÑÑ' + }, + + templates : + { + button : 'Шаблони', + title : 'Шаблони змÑÑÑÑ', + options : 'ÐпÑÑÑ ÑаблонÑ', + insertOption : 'ÐамÑниÑи поÑоÑний вмÑÑÑ', + selectPromptMsg : 'ÐбеÑÑÑÑ, бÑÐ´Ñ Ð»Ð°Ñка, Ñаблон Ð´Ð»Ñ Ð²ÑдкÑиÑÑÑ Ð² ÑедакÑоÑÑ<br>(поÑоÑний змÑÑÑ Ð±Ñде вÑÑаÑено):', + emptyListMsg : '(Ðе знайдено жодного ÑаблонÑ)' + }, + + showBlocks : 'ÐоказÑваÑи блоки', + + stylesCombo : + { + label : 'СÑилÑ', + panelTitle : 'СÑÐ¸Ð»Ñ ÑоÑмаÑÑваннÑ', + panelTitle1 : 'ÐлоÑÐ½Ñ ÑÑилÑ', + panelTitle2 : 'Ð ÑÐ´ÐºÐ¾Ð²Ñ ÑÑилÑ', + panelTitle3 : 'Ðб\'ÑкÑÐ½Ñ ÑÑилÑ' + }, + + format : + { + label : 'ФоÑмаÑÑваннÑ', + panelTitle : 'ФоÑмаÑÑваннÑ', + + tag_p : 'ÐоÑмалÑний', + tag_pre : 'ФоÑмаÑований', + tag_address : 'ÐдÑеÑа', + tag_h1 : 'Ðаголовок 1', + tag_h2 : 'Ðаголовок 2', + tag_h3 : 'Ðаголовок 3', + tag_h4 : 'Ðаголовок 4', + tag_h5 : 'Ðаголовок 5', + tag_h6 : 'Ðаголовок 6', + tag_div : 'ÐоÑмалÑний (div)' + }, + + div : + { + title : 'СÑвоÑиÑи блок-конÑейнеÑ', + toolbar : 'СÑвоÑиÑи блок-конÑейнеÑ', + cssClassInputLabel : 'ÐÐ»Ð°Ñ CSS', + styleSelectLabel : 'СÑÐ¸Ð»Ñ CSS', + IdInputLabel : 'ÐденÑиÑÑкаÑоÑ', + languageCodeInputLabel : 'Ðод мови', + inlineStyleInputLabel : 'ÐпиÑаний ÑÑилÑ', + advisoryTitleInputLabel : 'ÐмÑÑÑ Ð²Ð¸Ð¿Ð»Ð¸Ð²Ð°ÑÑÐ¾Ñ Ð¿Ñдказки', + langDirLabel : 'ÐапÑÑмок мови', + langDirLTRLabel : 'ÐлÑва напÑаво (LTR)', + langDirRTLLabel : 'СпÑава налÑво (RTL)', + edit : 'РедагÑваÑи блок', + remove : 'ÐидалиÑи блок' + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'ШÑиÑÑ', + voiceLabel : 'ШÑиÑÑ', + panelTitle : 'ШÑиÑÑ' + }, + + fontSize : + { + label : 'РозмÑÑ', + voiceLabel : 'РозмÑÑ ÑÑиÑÑÑ', + panelTitle : 'РозмÑÑ' + }, + + colorButton : + { + textColorTitle : 'ÐолÑÑ ÑекÑÑÑ', + bgColorTitle : 'ÐолÑÑ ÑонÑ', + panelTitle : 'ÐолÑоÑи', + auto : 'ÐвÑо', + more : 'ÐолÑоÑи...' + }, + + colors : + { + '000' : 'ЧоÑний', + '800000' : 'ÐоÑдовий', + '8B4513' : 'ÐоÑиÑневий', + '2F4F4F' : 'Темний ÑÑÑо-зелений', + '008080' : 'ÐоÑÑÑÐºÐ¾Ñ Ñ Ð²Ð¸Ð»Ñ', + '000080' : 'Сливовий', + '4B0082' : 'Ðндиго', + '696969' : 'ТемноÑÑÑий', + 'B22222' : 'ТемноÑеÑвоний', + 'A52A2A' : 'ÐаÑÑановий', + 'DAA520' : 'Ðежевий', + '006400' : 'Темнозелений', + '40E0D0' : 'ÐÑÑÑзовий', + '0000CD' : 'ТемноÑинÑй', + '800080' : 'ÐÑÑпÑÑний', + '808080' : 'СÑÑий', + 'F00' : 'ЧеÑвоний', + 'FF8C00' : 'ТемнооÑанжевий', + 'FFD700' : 'ÐовÑий', + '008000' : 'Ðелений', + '0FF' : 'СинÑо-зелений', + '00F' : 'СинÑй', + 'EE82EE' : 'ФÑолеÑовий', + 'A9A9A9' : 'СвÑÑлоÑÑÑий', + 'FFA07A' : 'Рожевий', + 'FFA500' : 'ÐÑанжевий', + 'FFFF00' : 'ЯÑкÑавожовÑий', + '00FF00' : 'СалаÑовий', + 'AFEEEE' : 'СвÑÑлобÑÑÑзовий', + 'ADD8E6' : 'ÐлакиÑний', + 'DDA0DD' : 'СвÑÑлоÑÑолеÑовий', + 'D3D3D3' : 'СÑÑблÑÑÑий', + 'FFF0F5' : 'СвÑÑлоÑожевий', + 'FAEBD7' : 'СвÑÑлооÑанжевий', + 'FFFFE0' : 'СвÑÑложовÑий', + 'F0FFF0' : 'СвÑÑлозелений', + 'F0FFFF' : 'СвÑÑлий ÑинÑо-зелений', + 'F0F8FF' : 'СвÑÑлоблакиÑний', + 'E6E6FA' : 'Ðавандовий', + 'FFF' : 'ÐÑлий' + }, + + scayt : + { + title : 'ÐеÑеÑÑÑка оÑÑогÑаÑÑÑ Ð¿Ð¾ мÑÑÑ Ð½Ð°Ð±Ð¾ÑÑ', + opera_title : 'Ðе пÑдÑÑимÑÑÑÑÑÑ Ð² Opera', + enable : 'ÐвÑмкнÑÑи SCAYT', + disable : 'ÐимкнÑÑи SCAYT', + about : 'ÐÑо SCAYT', + toggle : 'ÐеÑемкнÑÑи SCAYT', + options : 'ÐпÑÑÑ', + langs : 'Ðови', + moreSuggestions : 'ÐÑлÑÑе ваÑÑанÑÑв', + ignore : 'ÐÑопÑÑÑиÑи', + ignoreAll : 'ÐÑопÑÑÑиÑи вÑÑ', + addWord : 'ÐодаÑи Ñлово', + emptyDic : 'Ðазва Ñловника повинна бÑÑи вказана.', + + optionsTab : 'ÐпÑÑÑ', + allCaps : 'ÐÑопÑÑÑиÑи пÑопиÑÐ½Ñ Ñлова', + ignoreDomainNames : 'ÐÑопÑÑÑиÑи Ð´Ð¾Ð¼ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸', + mixedCase : 'ÐÑопÑÑÑиÑи Ñлова Ð·Ñ Ð·Ð¼ÑÑаним ÑегÑÑÑÑом', + mixedWithDigits : 'ÐÑопÑÑÑиÑи Ñлова, Ñо мÑÑÑÑÑÑ ÑиÑÑи', + + languagesTab : 'Ðови', + + dictionariesTab : 'Словники', + dic_field_name : 'Ðазва Ñловника', + dic_create : 'СÑвоÑиÑи', + dic_restore : 'ÐÑдновиÑи', + dic_delete : 'ÐидалиÑи', + dic_rename : 'ÐеÑейменÑваÑи', + dic_info : 'Як пÑавило, коÑиÑÑÑваÑÑÐºÑ Ñловники збеÑÑгаÑÑÑÑÑ Ñ cookie-ÑÐ°Ð¹Ð»Ð°Ñ . Ðднак, cookie-Ñайли маÑÑÑ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° ÑозмÑÑ. ЯкÑо коÑиÑÑÑваÑÑкий Ñловник зÑоÑÑÐ°Ñ Ð² обÑÑÐ·Ñ Ð½Ð°ÑÑÑлÑки, Ñо вже не може бÑÑи збеÑежений Ñ cookie-ÑайлÑ, ÑÐ¾Ð´Ñ Ð¹Ð¾Ð³Ð¾ можна збеÑегÑи на наÑÐ¾Ð¼Ñ ÑеÑвеÑÑ. Щоб збеÑегÑи ÐÐ°Ñ Ð¿ÐµÑÑоналÑний Ñловник на наÑÐ¾Ð¼Ñ ÑеÑвеÑÑ Ð½ÐµÐ¾Ð±Ñ Ñдно вказаÑи Ð½Ð°Ð·Ð²Ñ Ñловника. ЯкÑо Ðи вже збеÑÑгали Ñловник на ÑеÑвеÑÑ, бÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ Ð½Ð°Ð·Ð²Ñ Ð·Ð±ÐµÑеженого Ñловника Ñ Ð½Ð°ÑиÑнÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ ÐÑдновиÑи.', + + aboutTab : 'ÐÑо SCAYT' + }, + + about : + { + title : 'ÐÑо CKEditor', + dlgTitle : 'ÐÑо CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Щодо ÑнÑоÑмаÑÑÑ Ð· лÑÑензÑÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÑÑайÑе на Ð½Ð°Ñ ÑайÑ:', + copy : 'Copyright © $1. ÐÑÑ Ð¿Ñава заÑÑеÑежено.' + }, + + maximize : 'ÐакÑимÑзÑваÑи', + minimize : 'ÐÑнÑмÑзÑваÑи', + + fakeobjects : + { + anchor : 'ЯкÑÑ', + flash : 'Flash-анÑмаÑÑÑ', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'ÐевÑдомий об\'ÑкÑ' + }, + + resize : 'ÐоÑÑгнÑÑÑ Ð´Ð»Ñ Ð·Ð¼Ñни ÑозмÑÑÑв', + + colordialog : + { + title : 'ÐбÑаÑи колÑÑ', + options : 'ÐпÑÑÑ ÐºÐ¾Ð»ÑоÑÑв', + highlight : 'ÐолÑÑ, на Ñкий вказÑÑ ÐºÑÑÑоÑ', + selected : 'ÐбÑаний колÑÑ', + clear : 'ÐÑиÑÑиÑи' + }, + + toolbarCollapse : 'ÐгоÑнÑÑи Ð¿Ð°Ð½ÐµÐ»Ñ ÑнÑÑÑÑменÑÑв', + toolbarExpand : 'РозгоÑнÑÑи Ð¿Ð°Ð½ÐµÐ»Ñ ÑнÑÑÑÑменÑÑв', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'ÐапÑÑмок ÑекÑÑÑ Ð·Ð»Ñва напÑаво', + rtl : 'ÐапÑÑмок ÑекÑÑÑ ÑпÑава налÑво' + }, + + docprops : + { + label : 'ÐлаÑÑивоÑÑÑ Ð´Ð¾ÐºÑменÑа', + title : 'ÐлаÑÑивоÑÑÑ Ð´Ð¾ÐºÑменÑа', + design : 'Design', // MISSING + meta : 'ÐеÑа данÑ', + chooseColor : 'ÐбÑаÑи', + other : '<ÑнÑий>', + docTitle : 'Ðаголовок ÑÑоÑÑнки', + charset : 'ÐодÑÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ð¾ÑÑ ÑимволÑв', + charsetOther : 'ÐнÑе кодÑÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ð¾ÑÑ ÑимволÑв', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'ЦенÑÑалÑно-ÑвÑопейÑÑка', + charsetCT : 'ÐиÑайÑÑка ÑÑадиÑÑйна (Big5)', + charsetCR : 'ÐиÑилиÑÑ', + charsetGR : 'ÐÑеÑÑка', + charsetJP : 'ЯпонÑÑка', + charsetKR : 'ÐоÑейÑÑка', + charsetTR : 'ТÑÑеÑÑка', + charsetUN : 'ЮнÑкод (UTF-8)', + charsetWE : 'ÐÐ°Ñ Ñдно-евÑопейÑкаÑ', + docType : 'Ðаголовок ÑÐ¸Ð¿Ñ Ð´Ð¾ÐºÑменÑÑ', + docTypeOther : 'ÐнÑий заголовок ÑÐ¸Ð¿Ñ Ð´Ð¾ÐºÑменÑÑ', + xhtmlDec : 'ÐвÑмкнÑÑи XHTML оголоÑеннÑ', + bgColor : 'ÐолÑÑ Ñла', + bgImage : 'URL зобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ñла', + bgFixed : 'Тло без пÑокÑÑÑки', + txtColor : 'ÐолÑÑ ÑекÑÑÑ', + margin : 'ÐÑдÑÑÑпи ÑÑоÑÑнки', + marginTop : 'ÐеÑÑ Ð½Ñй', + marginLeft : 'ÐÑвий', + marginRight : 'ÐÑавий', + marginBottom : 'ÐижнÑй', + metaKeywords : 'ÐлÑÑÐ¾Ð²Ñ Ñлова докÑменÑа (ÑоздÑÐ»ÐµÐ½Ñ ÐºÐ¾Ð¼Ð°Ð¼Ð¸)', + metaDescription : 'ÐÐ¿Ð¸Ñ Ð´Ð¾ÐºÑменÑа', + metaAuthor : 'ÐвÑоÑ', + metaCopyright : 'ÐвÑоÑÑÑÐºÑ Ð¿Ñава', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/vi.js b/_source/lang/vi.js new file mode 100644 index 0000000..a0d3a47 --- /dev/null +++ b/_source/lang/vi.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Vietnamese language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['vi'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Bá» soạn thảo, %1, nhấn ALT + 0 Äá» xem hÆ°á»ng dẫn.', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Bá» soạn thảo', + + // Toolbar buttons without dialogs. + source : 'Mã HTML', + newPage : 'Trang má»i', + save : 'LÆ°u', + preview : 'Xem trÆ°á»c', + cut : 'Cắt', + copy : 'Sao chép', + paste : 'Dán', + print : 'In', + underline : 'Gạch chân', + bold : 'Äáºm', + italic : 'Nghiêng', + selectAll : 'Chá»n tất cả', + removeFormat : 'Xoá Äá»nh dạng', + strike : 'Gạch xuyên ngang', + subscript : 'Chá» sá» dÆ°á»i', + superscript : 'Chá» sá» trên', + horizontalrule : 'Chèn ÄÆ°á»ng phân cách ngang', + pagebreak : 'Chèn ngắt trang', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'Xoá liên kết', + undo : 'Khôi phục thao tác', + redo : 'Là m lại thao tác', + + // Common messages and labels. + common : + { + browseServer : 'Duyá»t trên máy chủ', + url : 'URL', + protocol : 'Giao thức', + upload : 'Tải lên', + uploadSubmit : 'Tải lên máy chủ', + image : 'Hình ảnh', + flash : 'Flash', + form : 'Biá»u mẫu', + checkbox : 'Nút kiá»m', + radio : 'Nút chá»n', + textField : 'TrÆ°á»ng vÄn bản', + textarea : 'Vùng vÄn bản', + hiddenField : 'TrÆ°á»ng ẩn', + button : 'Nút', + select : 'à chá»n', + imageButton : 'Nút hình ảnh', + notSet : '<không thiết láºp>', + id : 'Äá»nh danh', + name : 'Tên', + langDir : 'HÆ°á»ng ngôn ngữ', + langDirLtr : 'Trái sang phải (LTR)', + langDirRtl : 'Phải sang trái (RTL)', + langCode : 'Mã ngôn ngữ', + longDescr : 'Mô tả URL', + cssClass : 'Lá»p Stylesheet', + advisoryTitle : 'Nhan Äá» hÆ°á»ng dẫn', + cssStyle : 'Kiá»u (style)', + ok : 'Äá»ng ý', + cancel : 'Bá» qua', + close : 'Äóng', + preview : 'Xem trÆ°á»c', + generalTab : 'Tab chung', + advancedTab : 'Tab má» rá»ng', + validateNumberFailed : 'Giá trá» nà y không phải là sá».', + confirmNewPage : 'Má»i thay Äá»i không Äược lÆ°u lại, ná»i dung nà y sẽ bá» mất. Bạn có chắc chắn muá»n tải má»t trang má»i?', + confirmCancel : 'Má»t và i tùy chá»n Äã bá» thay Äá»i. Bạn có chắc chắn muá»n Äóng há»p thoại?', + options : 'Tùy chá»n', + target : 'ÄÃch Äến', + targetNew : 'Cá»a sá» má»i (_blank)', + targetTop : 'Cá»a sá» trên cùng (_top)', + targetSelf : 'Tại trang (_self)', + targetParent : 'Cá»a sá» cha (_parent)', + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : 'Chiá»u rá»ng', + height : 'chiá»u cao', + align : 'Vá» trÃ', + alignLeft : 'Trái', + alignRight : 'Phải', + alignCenter : 'Giữa', + alignTop : 'Trên', + alignMiddle : 'Giữa', + alignBottom : 'DÆ°á»i', + invalidHeight : 'Chiá»u cao phải là sá» nguyên.', + invalidWidth : 'Chiá»u rá»ng phải là sá» nguyên.', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, không có</span>' + }, + + contextmenu : + { + options : 'Tùy chá»n menu bá» xung' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'Chèn ký tá»± Äặc biá»t', + title : 'Hãy chá»n ký tá»± Äặc biá»t', + options : 'Tùy chá»n các ký tá»± Äặc biá»t' + }, + + // Link dialog. + link : + { + toolbar : 'Chèn/Sá»a liên kết', + other : '<khác>', + menu : 'Sá»a liên kết', + title : 'Liên kết', + info : 'Thông tin liên kết', + target : 'ÄÃch', + upload : 'Tải lên', + advanced : 'Má» rá»ng', + type : 'Kiá»u liên kết', + toUrl : 'URL', + toAnchor : 'Neo trong trang nà y', + toEmail : 'ThÆ° Äiá»n tá»', + targetFrame : '<khung>', + targetPopup : '<cá»a sá» popup>', + targetFrameName : 'Tên khung ÄÃch', + targetPopupName : 'Tên cá»a sá» Popup', + popupFeatures : 'Äặc Äiá»m của cá»a sá» Popup', + popupResizable : 'Có thá» thay Äá»i kÃch cỡ', + popupStatusBar : 'Thanh trạng thái', + popupLocationBar: 'Thanh vá» trÃ', + popupToolbar : 'Thanh công cụ', + popupMenuBar : 'Thanh Menu', + popupFullScreen : 'Toà n mà n hình (IE)', + popupScrollBars : 'Thanh cuá»n', + popupDependent : 'Phụ thuá»c (Netscape)', + popupLeft : 'Vá» trà bên trái', + popupTop : 'Vá» trà phÃa trên', + id : 'Äá»nh danh', + langDir : 'HÆ°á»ng ngôn ngữ', + langDirLTR : 'Trái sang phải (LTR)', + langDirRTL : 'Phải sang trái (RTL)', + acccessKey : 'PhÃm há» trợ truy cáºp', + name : 'Tên', + langCode : 'Mã ngôn ngữ', + tabIndex : 'Chá» sá» của Tab', + advisoryTitle : 'Nhan Äá» hÆ°á»ng dẫn', + advisoryContentType : 'Ná»i dung hÆ°á»ng dẫn', + cssClasses : 'Lá»p Stylesheet', + charset : 'Bảng mã của tà i nguyên Äược liên kết Äến', + styles : 'Kiá»u (style)', + rel : 'Relationship', // MISSING + selectAnchor : 'Chá»n má»t Äiá»m neo', + anchorName : 'Theo tên Äiá»m neo', + anchorId : 'Theo Äá»nh danh thà nh phần', + emailAddress : 'ThÆ° Äiá»n tá»', + emailSubject : 'Tiêu Äá» thông Äiá»p', + emailBody : 'Ná»i dung thông Äiá»p', + noAnchors : '(Không có Äiá»m neo nà o trong tà i liá»u)', + noUrl : 'Hãy ÄÆ°a và o ÄÆ°á»ng dẫn liên kết (URL)', + noEmail : 'Hãy ÄÆ°a và o Äá»a chá» thÆ° Äiá»n tá»' + }, + + // Anchor dialog + anchor : + { + toolbar : 'Chèn/Sá»a Äiá»m neo', + menu : 'Thuá»c tÃnh Äiá»m neo', + title : 'Thuá»c tÃnh Äiá»m neo', + name : 'Tên của Äiá»m neo', + errorName : 'Hãy nháºp và o tên của Äiá»m neo', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Thuá»c tÃnh danh sách có thứ tá»±', + bulletedTitle : 'Thuá»c tÃnh danh sách không thứ tá»±', + type : 'Kiá»u loại', + start : 'Bắt Äầu', + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Khuyên tròn', + disc : 'Hình ÄÄ©a', + square : 'Hình vuông', + none : 'Không gì cả', + notset : '<không thiết láºp>', + armenian : 'Sá» theo kiá»u Armenian', + georgian : 'Sá» theo kiá»u Georgian (an, ban, gan...)', + lowerRoman : 'Sá» La Mã kiá»u thÆ°á»ng (i, ii, iii, iv, v...)', + upperRoman : 'Sá» La Mã kiá»u HOA (I, II, III, IV, V...)', + lowerAlpha : 'Kiá»u abc thÆ°á»ng (a, b, c, d, e...)', + upperAlpha : 'Kiá»u ABC HOA (A, B, C, D, E...)', + lowerGreek : 'Kiá»u Hy Lạp (alpha, beta, gamma...)', + decimal : 'Kiá»u sá» (1, 2, 3 ...)', + decimalLeadingZero : 'Kiá»u sá» (01, 02, 03...)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'Tìm kiếm và thay thế', + find : 'Tìm kiếm', + replace : 'Thay thế', + findWhat : 'Tìm chuá»i:', + replaceWith : 'Thay bằng:', + notFoundMsg : 'Không tìm thấy chuá»i cần tìm.', + matchCase : 'Phân biá»t chữ hoa/thÆ°á»ng', + matchWord : 'Giá»ng toà n bá» từ', + matchCyclic : 'Giá»ng má»t phần', + replaceAll : 'Thay thế tất cả', + replaceSuccessMsg : '%1 vá» trà Äã Äược thay thế.' + }, + + // Table Dialog + table : + { + toolbar : 'Bảng', + title : 'Thuá»c tÃnh bảng', + menu : 'Thuá»c tÃnh bảng', + deleteTable : 'Xóa bảng', + rows : 'Sá» hà ng', + columns : 'Sá» cá»t', + border : 'KÃch thÆ°á»c ÄÆ°á»ng viá»n', + widthPx : 'Äiá»m ảnh (px)', + widthPc : 'Phần trÄm (%)', + widthUnit : 'ÄÆ¡n vá»', + cellSpace : 'Khoảng cách giữa các ô', + cellPad : 'Khoảng Äá»m giữ ô và ná»i dung', + caption : 'Äầu Äá»', + summary : 'Tóm lược', + headers : 'Äầu Äá»', + headersNone : 'Không có', + headersColumn : 'Cá»t Äầu tiên', + headersRow : 'Hà ng Äầu tiên', + headersBoth : 'Cả hai', + invalidRows : 'Sá» lượng hà ng phải là má»t sá» lá»n hÆ¡n 0.', + invalidCols : 'Sá» lượng cá»t phải là má»t sá» lá»n hÆ¡n 0.', + invalidBorder : 'KÃch cỡ của ÄÆ°á»ng biên phải là má»t sá» nguyên.', + invalidWidth : 'Chiá»u rá»ng của bảng phải là má»t sá» nguyên.', + invalidHeight : 'Chiá»u cao của bảng phải là má»t sá» nguyên.', + invalidCellSpacing : 'Khoảng cách giữa các ô phải là má»t sá» nguyên.', + invalidCellPadding : 'Khoảng Äá»m giữa ô và ná»i dung phải là má»t sá» nguyên.', + + cell : + { + menu : 'Ã', + insertBefore : 'Chèn ô PhÃa trÆ°á»c', + insertAfter : 'Chèn ô PhÃa sau', + deleteCell : 'Xoá ô', + merge : 'Kết hợp ô', + mergeRight : 'Kết hợp sang phải', + mergeDown : 'Kết hợp xuá»ng dÆ°á»i', + splitHorizontal : 'Phân tách ô theo chiá»u ngang', + splitVertical : 'Phân tách ô theo chiá»u dá»c', + title : 'Thuá»c tÃnh của ô', + cellType : 'Kiá»u của ô', + rowSpan : 'Kết hợp hà ng', + colSpan : 'Kết hợp cá»t', + wordWrap : 'Chữ liá»n hà ng', + hAlign : 'Canh lá» ngang', + vAlign : 'Canh lá» dá»c', + alignBaseline : 'ÄÆ°á»ng cÆ¡ sá»', + bgColor : 'Mà u ná»n', + borderColor : 'Mà u viá»n', + data : 'Dữ liá»u', + header : 'Äầu Äá»', + yes : 'Có', + no : 'Không', + invalidWidth : 'Chiá»u rá»ng của ô phải là má»t sá» nguyên.', + invalidHeight : 'Chiá»u cao của ô phải là má»t sá» nguyên.', + invalidRowSpan : 'Sá» hà ng kết hợp phải là má»t sá» nguyên.', + invalidColSpan : 'Sá» cá»t kết hợp phải là má»t sá» nguyên.', + chooseColor : 'Chá»n mà u' + }, + + row : + { + menu : 'Hà ng', + insertBefore : 'Chèn hà ng phÃa trÆ°á»c', + insertAfter : 'Chèn hà ng phÃa sau', + deleteRow : 'Xoá hà ng' + }, + + column : + { + menu : 'Cá»t', + insertBefore : 'Chèn cá»t phÃa trÆ°á»c', + insertAfter : 'Chèn cá»t phÃa sau', + deleteColumn : 'Xoá cá»t' + } + }, + + // Button Dialog. + button : + { + title : 'Thuá»c tÃnh của nút', + text : 'Chuá»i hiá»n thá» (giá trá»)', + type : 'Kiá»u', + typeBtn : 'Nút bấm', + typeSbm : 'Nút gá»i', + typeRst : 'Nút nháºp lại' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'Thuá»c tÃnh nút kiá»m', + radioTitle : 'Thuá»c tÃnh nút chá»n', + value : 'Giá trá»', + selected : 'Äược chá»n' + }, + + // Form Dialog. + form : + { + title : 'Thuá»c tÃnh biá»u mẫu', + menu : 'Thuá»c tÃnh biá»u mẫu', + action : 'Hà nh Äá»ng', + method : 'PhÆ°Æ¡ng thức', + encoding : 'Bảng mã' + }, + + // Select Field Dialog. + select : + { + title : 'Thuá»c tÃnh ô chá»n', + selectInfo : 'Thông tin', + opAvail : 'Các tùy chá»n có thá» sá» dụng', + value : 'Giá trá»', + size : 'KÃch cỡ', + lines : 'dòng', + chkMulti : 'Cho phép chá»n nhiá»u', + opText : 'VÄn bản', + opValue : 'Giá trá»', + btnAdd : 'Thêm', + btnModify : 'Thay Äá»i', + btnUp : 'Lên', + btnDown : 'Xuá»ng', + btnSetValue : 'Giá trá» Äược chá»n', + btnDelete : 'Nút xoá' + }, + + // Textarea Dialog. + textarea : + { + title : 'Thuá»c tÃnh vùng vÄn bản', + cols : 'Sá» cá»t', + rows : 'Sá» hà ng' + }, + + // Text Field Dialog. + textfield : + { + title : 'Thuá»c tÃnh trÆ°á»ng vÄn bản', + name : 'Tên', + value : 'Giá trá»', + charWidth : 'Äá» rá»ng của ký tá»±', + maxChars : 'Sá» ký tá»± tá»i Äa', + type : 'Kiá»u', + typeText : 'Ký tá»±', + typePass : 'Máºt khẩu' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'Thuá»c tÃnh trÆ°á»ng ẩn', + name : 'Tên', + value : 'Giá trá»' + }, + + // Image Dialog. + image : + { + title : 'Thuá»c tÃnh của ảnh', + titleButton : 'Thuá»c tÃnh nút của ảnh', + menu : 'Thuá»c tÃnh của ảnh', + infoTab : 'Thông tin của ảnh', + btnUpload : 'Tải lên máy chủ', + upload : 'Tải lên', + alt : 'Chú thÃch ảnh', + lockRatio : 'Giữ nguyên tá»· lá»', + resetSize : 'KÃch thÆ°á»c gá»c', + border : 'ÄÆ°á»ng viá»n', + hSpace : 'Khoảng Äá»m ngang', + vSpace : 'Khoảng Äá»m dá»c', + alertUrl : 'Hãy ÄÆ°a và o ÄÆ°á»ng dẫn của ảnh', + linkTab : 'Tab liên kết', + button2Img : 'Bạn có muá»n chuyá»n nút bấm bằng ảnh Äược chá»n thà nh ảnh?', + img2Button : 'Bạn có muá»n chuyá»n Äá»i ảnh Äược chá»n thà nh nút bấm bằng ảnh?', + urlMissing : 'Thiếu ÄÆ°á»ng dẫn hình ảnh', + validateBorder : 'Chiá»u rá»ng của ÄÆ°á»ng viá»n phải là má»t sá» nguyên dÆ°Æ¡ng', + validateHSpace : 'Khoảng Äá»m ngang phải là má»t sá» nguyên dÆ°Æ¡ng', + validateVSpace : 'Khoảng Äá»m dá»c phải là má»t sá» nguyên dÆ°Æ¡ng' + }, + + // Flash Dialog + flash : + { + properties : 'Thuá»c tÃnh Flash', + propertiesTab : 'Thuá»c tÃnh', + title : 'Thuá»c tÃnh Flash', + chkPlay : 'Tá»± Äá»ng chạy', + chkLoop : 'Lặp', + chkMenu : 'Cho phép báºt menu của Flash', + chkFull : 'Cho phép toà n mà n hình', + scale : 'Tá»· lá»', + scaleAll : 'Hiá»n thá» tất cả', + scaleNoBorder : 'Không ÄÆ°á»ng viá»n', + scaleFit : 'Vừa vặn', + access : 'Truy cáºp mã', + accessAlways : 'Luôn luôn', + accessSameDomain: 'Cùng tên miá»n', + accessNever : 'Không bao giá»', + alignAbsBottom : 'DÆ°á»i tuyá»t Äá»i', + alignAbsMiddle : 'Giữa tuyá»t Äá»i', + alignBaseline : 'ÄÆ°á»ng cÆ¡ sá»', + alignTextTop : 'PhÃa trên chữ', + quality : 'Chất lượng', + qualityBest : 'Tá»t nhất', + qualityHigh : 'Cao', + qualityAutoHigh : 'Cao tá»± Äá»ng', + qualityMedium : 'Trung bình', + qualityAutoLow : 'Thấp tá»± Äá»ng', + qualityLow : 'Thấp', + windowModeWindow: 'Cá»a sá»', + windowModeOpaque: 'Má» Äục', + windowModeTransparent : 'Trong suá»t', + windowMode : 'Chế Äá» cá»a sá»', + flashvars : 'Các biến sá» dà nh cho Flash', + bgcolor : 'Mà u ná»n', + hSpace : 'Khoảng Äá»m ngang', + vSpace : 'Khoảng Äá»m dá»c', + validateSrc : 'Hãy ÄÆ°a và o ÄÆ°á»ng dẫn liên kết', + validateHSpace : 'Khoảng Äá»m ngang phải là sá» nguyên.', + validateVSpace : 'Khoảng Äá»m dá»c phải là sá» nguyên.' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'Kiá»m tra chÃnh tả', + title : 'Kiá»m tra chÃnh tả', + notAvailable : 'Xin lá»i, dá»ch vụ nà y hiá»n tại không có.', + errorLoading : 'Lá»i khi Äang nạp dá»ch vụ ứng dụng: %s.', + notInDic : 'Không có trong từ Äiá»n', + changeTo : 'Chuyá»n thà nh', + btnIgnore : 'Bá» qua', + btnIgnoreAll : 'Bá» qua tất cả', + btnReplace : 'Thay thế', + btnReplaceAll : 'Thay thế tất cả', + btnUndo : 'Phục há»i lại', + noSuggestions : '- Không ÄÆ°a ra gợi ý vá» từ -', + progress : 'Äang tiến hà nh kiá»m tra chÃnh tả...', + noMispell : 'Hoà n tất kiá»m tra chÃnh tả: Không có lá»i chÃnh tả', + noChanges : 'Hoà n tất kiá»m tra chÃnh tả: Không có từ nà o Äược thay Äá»i', + oneChange : 'Hoà n tất kiá»m tra chÃnh tả: Má»t từ Äã Äược thay Äá»i', + manyChanges : 'Hoà n tất kiá»m tra chÃnh tả: %1 từ Äã Äược thay Äá»i', + ieSpellDownload : 'Chức nÄng kiá»m tra chÃnh tả chÆ°a Äược cà i Äặt. Bạn có muá»n tải vá» ngay bây giá»?' + }, + + smiley : + { + toolbar : 'Hình biá»u lá» cảm xúc (mặt cÆ°á»i)', + title : 'Chèn hình biá»u lá» cảm xúc (mặt cÆ°á»i)', + options : 'Tùy chá»n hình biá»u lá» cảm xúc' + }, + + elementsPath : + { + eleLabel : 'Nhãn thà nh phần', + eleTitle : '%1 thà nh phần' + }, + + numberedlist : 'Danh sách có thứ tá»±', + bulletedlist : 'Danh sách không thứ tá»±', + indent : 'Dá»ch và o trong', + outdent : 'Dá»ch ra ngoà i', + + justify : + { + left : 'Canh trái', + center : 'Canh giữa', + right : 'Canh phải', + block : 'Canh Äá»u' + }, + + blockquote : 'Khá»i trÃch dẫn', + + clipboard : + { + title : 'Dán', + cutError : 'Các thiết láºp bảo máºt của trình duyá»t không cho phép trình biên táºp tá»± Äá»ng thá»±c thi lá»nh cắt. Hãy sá» dụng bà n phÃm cho lá»nh nà y (Ctrl/Cmd+X).', + copyError : 'Các thiết láºp bảo máºt của trình duyá»t không cho phép trình biên táºp tá»± Äá»ng thá»±c thi lá»nh sao chép. Hãy sá» dụng bà n phÃm cho lá»nh nà y (Ctrl/Cmd+C).', + pasteMsg : 'Hãy dán ná»i dung và o trong khung bên dÆ°á»i, sá» dụng tá» hợp phÃm (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn và o nút <STRONG>Äá»ng ý</STRONG>.', + securityMsg : 'Do thiết láºp bảo máºt của trình duyá»t nên trình biên táºp không thá» truy cáºp trá»±c tiếp và o ná»i dung Äã sao chép. Bạn cần phải dán lại ná»i dung và o cá»a sá» nà y.', + pasteArea : 'Khu vá»±c dán' + }, + + pastefromword : + { + confirmCleanup : 'VÄn bản bạn muá»n dán có kèm Äá»nh dạng của Word. Bạn có muá»n loại bá» Äá»nh dạng Word trÆ°á»c khi dán?', + toolbar : 'Dán vá»i Äá»nh dạng Word', + title : 'Dán vá»i Äá»nh dạng Word', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'Dán theo Äá»nh dạng vÄn bản thuần', + title : 'Dán theo Äá»nh dạng vÄn bản thuần' + }, + + templates : + { + button : 'Mẫu dá»±ng sẵn', + title : 'Ná»i dung Mẫu dá»±ng sẵn', + options : 'Tùy chá»n mẫu dá»±ng sẵn', + insertOption : 'Thay thế ná»i dung hiá»n tại', + selectPromptMsg : 'Hãy chá»n mẫu dá»±ng sẵn Äá» má» trong trình biên táºp<br>(ná»i dung hiá»n tại sẽ bá» mất):', + emptyListMsg : '(Không có mẫu dá»±ng sẵn nà o Äược Äá»nh nghÄ©a)' + }, + + showBlocks : 'Hiá»n thá» các khá»i', + + stylesCombo : + { + label : 'Kiá»u', + panelTitle : 'Phong cách Äá»nh dạng', + panelTitle1 : 'Kiá»u khá»i', + panelTitle2 : 'Kiá»u trá»±c tiếp', + panelTitle3 : 'Kiá»u Äá»i tượng' + }, + + format : + { + label : 'Äá»nh dạng', + panelTitle : 'Äá»nh dạng', + + tag_p : 'Bình thÆ°á»ng (P)', + tag_pre : 'Äã thiết láºp', + tag_address : 'Address', + tag_h1 : 'Heading 1', + tag_h2 : 'Heading 2', + tag_h3 : 'Heading 3', + tag_h4 : 'Heading 4', + tag_h5 : 'Heading 5', + tag_h6 : 'Heading 6', + tag_div : 'Bình thÆ°á»ng (DIV)' + }, + + div : + { + title : 'Tạo khá»i các thà nh phần', + toolbar : 'Tạo khá»i các thà nh phần', + cssClassInputLabel : 'Các lá»p CSS', + styleSelectLabel : 'Kiá»u (style)', + IdInputLabel : 'Äá»nh danh (id)', + languageCodeInputLabel : 'Mã ngôn ngữ', + inlineStyleInputLabel : 'Kiá»u ná»i dòng', + advisoryTitleInputLabel : 'Nhan Äá» hÆ°á»ng dẫn', + langDirLabel : 'HÆ°á»ng ngôn ngữ', + langDirLTRLabel : 'Trái sang phải (LTR)', + langDirRTLLabel : 'Phải qua trái (RTL)', + edit : 'Chá»nh sá»a', + remove : 'Xóa bá»' + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'Phông', + voiceLabel : 'Phông', + panelTitle : 'Phông' + }, + + fontSize : + { + label : 'Cỡ chữ', + voiceLabel : 'KÃch cỡ phông', + panelTitle : 'Cỡ chữ' + }, + + colorButton : + { + textColorTitle : 'Mà u chữ', + bgColorTitle : 'Mà u ná»n', + panelTitle : 'Mà u sắc', + auto : 'Tá»± Äá»ng', + more : 'Mà u khác...' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'Kiá»m tra chÃnh tả ngay khi gõ chữ (SCAYT)', + opera_title : 'Không há» trợ trên trình duyá»t Opera', + enable : 'Báºt SCAYT', + disable : 'Tắt SCAYT', + about : 'Thông tin vá» SCAYT', + toggle : 'Báºt tắt SCAYT', + options : 'Tùy chá»n', + langs : 'Ngôn ngữ', + moreSuggestions : 'Äá» xuất thêm', + ignore : 'Bá» qua', + ignoreAll : 'Bá» qua tất cả', + addWord : 'Thêm từ', + emptyDic : 'Tên của từ Äiá»n không Äược Äá» trá»ng.', + + optionsTab : 'Tùy chá»n', + allCaps : 'Không phân biá»t chữ HOA chữ thÆ°á»ng', + ignoreDomainNames : 'Bá» qua tên miá»n', + mixedCase : 'Không phân biá»t loại chữ', + mixedWithDigits : 'Không phân biá»t chữ và sá»', + + languagesTab : 'Tab ngôn ngữ', + + dictionariesTab : 'Từ Äiá»n', + dic_field_name : 'Tên từ Äiá»n', + dic_create : 'Tạo', + dic_restore : 'Phục há»i', + dic_delete : 'Xóa', + dic_rename : 'Thay tên', + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'Thông tin' + }, + + about : + { + title : 'Thông tin vá» CKEditor', + dlgTitle : 'Thông tin vá» CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : 'Vui lòng ghé thÄm trang web của chúng tôi Äá» có thông tin vá» giấy phép:', + copy : 'Bản quyá»n © $1. Giữ toà n quyá»n.' + }, + + maximize : 'Phóng to tá»i Äa', + minimize : 'Thu nhá»', + + fakeobjects : + { + anchor : 'Äiá»m neo', + flash : 'Flash', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'Äá»i tượng không rõ rà ng' + }, + + resize : 'Kéo rê Äá» thay Äá»i kÃch cỡ', + + colordialog : + { + title : 'Chá»n mà u', + options : 'Color Options', // MISSING + highlight : 'Mà u chá»n', + selected : 'Mà u Äã chá»n', + clear : 'Xóa bá»' + }, + + toolbarCollapse : 'Thu gá»n thanh công cụ', + toolbarExpand : 'Má» rá»ng thnah công cụ', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'Thuá»c tÃnh Tà i liá»u', + title : 'Thuá»c tÃnh Tà i liá»u', + design : 'Design', // MISSING + meta : 'Siêu dữ liá»u', + chooseColor : 'Chá»n mà u', + other : '<khác>', + docTitle : 'Tiêu Äá» Trang', + charset : 'Bảng mã ký tá»±', + charsetOther : 'Bảng mã ký tá»± khác', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'Trung Ãu', + charsetCT : 'Tiếng Trung Quá»c (Big5)', + charsetCR : 'Tiếng Kirin', + charsetGR : 'Tiếng Hy Lạp', + charsetJP : 'Tiếng Nháºt', + charsetKR : 'Tiếng Hà n', + charsetTR : 'Tiếng Thá» NhÄ© Kỳ', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : 'Tây Ãu', + docType : 'Kiá»u Äá» mục Tà i liá»u', + docTypeOther : 'Kiá»u Äá» mục Tà i liá»u khác', + xhtmlDec : 'Bao gá»m cả Äá»nh nghÄ©a XHTML', + bgColor : 'Mà u ná»n', + bgImage : 'URL của Hình ảnh ná»n', + bgFixed : 'Không cuá»n ná»n', + txtColor : 'Mà u chữ', + margin : 'ÄÆ°á»ng biên của Trang', + marginTop : 'Trên', + marginLeft : 'Trái', + marginRight : 'Phải', + marginBottom : 'DÆ°á»i', + metaKeywords : 'Các từ khóa chá» mục tà i liá»u (phân cách bá»i dấu phẩy)', + metaDescription : 'Mô tả tà i liá»u', + metaAuthor : 'Tác giả', + metaCopyright : 'Bản quyá»n', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/zh-cn.js b/_source/lang/zh-cn.js new file mode 100644 index 0000000..49b85d6 --- /dev/null +++ b/_source/lang/zh-cn.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Chinese Simplified language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['zh-cn'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'æè§å³æå¾ç¼è¾å¨, %1, æ ALT+0 æ¥ç帮å©ã', + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'æè§å³æå¾ç¼è¾å¨', + + // Toolbar buttons without dialogs. + source : 'æºç ', + newPage : 'æ°å»º', + save : 'ä¿å', + preview : 'é¢è§', + cut : 'åªå', + copy : 'å¤å¶', + paste : 'ç²è´´', + print : 'æå°', + underline : 'ä¸å线', + bold : 'å ç²', + italic : 'å¾æ', + selectAll : 'å ¨é', + removeFormat : 'æ¸ é¤æ ¼å¼', + strike : 'å é¤çº¿', + subscript : 'ä¸æ ', + superscript : 'ä¸æ ', + horizontalrule : 'æå ¥æ°´å¹³çº¿', + pagebreak : 'æå ¥å页符', + pagebreakAlt : 'Page Break', // MISSING + unlink : 'åæ¶è¶ é¾æ¥', + undo : 'æ¤æ¶', + redo : 'éå', + + // Common messages and labels. + common : + { + browseServer : 'æµè§æå¡å¨', + url : 'æºæ件', + protocol : 'åè®®', + upload : 'ä¸ä¼ ', + uploadSubmit : 'ä¸ä¼ å°æå¡å¨ä¸', + image : 'å¾è±¡', + flash : 'Flash', + form : '表å', + checkbox : 'å¤éæ¡', + radio : 'åéæé®', + textField : 'åè¡ææ¬', + textarea : 'å¤è¡ææ¬', + hiddenField : 'éèå', + button : 'æé®', + select : 'å表/èå', + imageButton : 'å¾åå', + notSet : '<没æ设置>', + id : 'ID', + name : 'å称', + langDir : 'è¯è¨æ¹å', + langDirLtr : 'ä»å·¦å°å³ (LTR)', + langDirRtl : 'ä»å³å°å·¦ (RTL)', + langCode : 'è¯è¨ä»£ç ', + longDescr : '详ç»è¯´æå°å', + cssClass : 'æ ·å¼ç±»å称', + advisoryTitle : 'æ é¢', + cssStyle : 'è¡å æ ·å¼', + ok : 'ç¡®å®', + cancel : 'åæ¶', + close : 'å ³é', + preview : 'é¢è§', + generalTab : '常è§', + advancedTab : 'é«çº§', + validateNumberFailed : 'éè¦è¾å ¥æ°åæ ¼å¼', + confirmNewPage : 'å½åææ¡£å 容æªä¿å,æ¯å¦ç¡®è®¤æ°å»ºææ¡£ï¼', + confirmCancel : 'é¨åä¿®æ¹å°æªä¿åï¼æ¯å¦ç¡®è®¤å ³é对è¯æ¡ï¼', + options : 'é项', + target : 'ç®æ çªå£', + targetNew : 'æ°çªå£ (_blank)', + targetTop : 'æ´é¡µ (_top)', + targetSelf : 'æ¬çªå£ (_self)', + targetParent : 'ç¶çªå£ (_parent)', + langDirLTR : 'ä»å·¦å°å³ (LTR)', + langDirRTL : 'ä»å³å°å·¦ (RTL)', + styles : 'æ ·å¼', + cssClasses : 'æ ·å¼ç±»', + width : '宽度', + height : 'é«åº¦', + align : '对é½æ¹å¼', + alignLeft : '左对é½', + alignRight : 'å³å¯¹é½', + alignCenter : 'å± ä¸', + alignTop : '顶端', + alignMiddle : 'å± ä¸', + alignBottom : 'åºé¨', + invalidHeight : 'é«åº¦å¿ 须为æ°åæ ¼å¼', + invalidWidth : 'å®½åº¦å¿ é¡»ä¸ºæ°åæ ¼å¼', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, ä¸å¯ç¨</span>' + }, + + contextmenu : + { + options : 'å¿«æ·èåé项' + }, + + // Special char dialog. + specialChar : + { + toolbar : 'æå ¥ç¹æ®ç¬¦å·', + title : 'éæ©ç¹æ®ç¬¦å·', + options : 'ç¹æ®ç¬¦å·é项' + }, + + // Link dialog. + link : + { + toolbar : 'æå ¥/ç¼è¾è¶ é¾æ¥', + other : '<å ¶ä»>', + menu : 'ç¼è¾è¶ é¾æ¥', + title : 'è¶ é¾æ¥', + info : 'è¶ é¾æ¥ä¿¡æ¯', + target : 'ç®æ ', + upload : 'ä¸ä¼ ', + advanced : 'é«çº§', + type : 'è¶ é¾æ¥ç±»å', + toUrl : 'å°å', + toAnchor : '页å éç¹é¾æ¥', + toEmail : 'çµåé®ä»¶', + targetFrame : '<æ¡æ¶>', + targetPopup : '<å¼¹åºçªå£>', + targetFrameName : 'ç®æ æ¡æ¶å称', + targetPopupName : 'å¼¹åºçªå£å称', + popupFeatures : 'å¼¹åºçªå£å±æ§', + popupResizable : 'å¯ç¼©æ¾', + popupStatusBar : 'ç¶ææ ', + popupLocationBar: 'å°åæ ', + popupToolbar : 'å·¥å ·æ ', + popupMenuBar : 'èåæ ', + popupFullScreen : 'å ¨å± (IE)', + popupScrollBars : 'æ»å¨æ¡', + popupDependent : 'ä¾é (NS)', + popupLeft : 'å·¦', + popupTop : 'å³', + id : 'ID', + langDir : 'è¯è¨æ¹å', + langDirLTR : 'ä»å·¦å°å³ (LTR)', + langDirRTL : 'ä»å³å°å·¦ (RTL)', + acccessKey : '访é®é®', + name : 'å称', + langCode : 'è¯è¨ä»£ç ', + tabIndex : 'Tab é®æ¬¡åº', + advisoryTitle : 'æ é¢', + advisoryContentType : 'å 容类å', + cssClasses : 'æ ·å¼ç±»å称', + charset : 'å符ç¼ç ', + styles : 'è¡å æ ·å¼', + rel : 'Relationship', // MISSING + selectAnchor : 'éæ©ä¸ä¸ªéç¹', + anchorName : 'æéç¹å称', + anchorId : 'æéç¹ ID', + emailAddress : 'å°å', + emailSubject : '主é¢', + emailBody : 'å 容', + noAnchors : '(æ¤æ档没æå¯ç¨çéç¹)', + noUrl : '请è¾å ¥è¶ é¾æ¥å°å', + noEmail : '请è¾å ¥çµåé®ä»¶å°å' + }, + + // Anchor dialog + anchor : + { + toolbar : 'æå ¥/ç¼è¾éç¹é¾æ¥', + menu : 'éç¹é¾æ¥å±æ§', + title : 'éç¹é¾æ¥å±æ§', + name : 'éç¹å称', + errorName : '请è¾å ¥éç¹å称', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'ç¼å·å表å±æ§', + bulletedTitle : '项ç®å表å±æ§', + type : 'æ è®°ç±»å', + start : 'å¼å§åºå·', + validateStartNumber :'å表å¼å§åºå·å¿ 须为æ´æ°æ ¼å¼', + circle : '空å¿å', + disc : 'å®å¿å', + square : 'å®å¿æ¹å', + none : 'æ æ è®°', + notset : '<没æ设置>', + armenian : 'ä¼ ç»çäºç¾å°¼äºç¼å·æ¹å¼', + georgian : 'ä¼ ç»çä¹æ²»äºç¼å·æ¹å¼(an, ban, gan, ç)', + lowerRoman : 'å°åç½é©¬æ°å(i, ii, iii, iv, v, ç)', + upperRoman : '大åç½é©¬æ°å(I, II, III, IV, V, ç)', + lowerAlpha : 'å°åè±æåæ¯(a, b, c, d, e, ç)', + upperAlpha : '大åè±æåæ¯(A, B, C, D, E, ç)', + lowerGreek : 'å°åå¸è åæ¯(alpha, beta, gamma, ç)', + decimal : 'æ°å (1, 2, 3, ç)', + decimalLeadingZero : '0å¼å¤´çæ°åæ è®°(01, 02, 03, ç)' + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'æ¥æ¾åæ¿æ¢', + find : 'æ¥æ¾', + replace : 'æ¿æ¢', + findWhat : 'æ¥æ¾:', + replaceWith : 'æ¿æ¢:', + notFoundMsg : 'æå®ææ¬æ²¡ææ¾å°', + matchCase : 'åºå大å°å', + matchWord : 'å ¨åå¹é ', + matchCyclic : '循ç¯å¹é ', + replaceAll : 'å ¨é¨æ¿æ¢', + replaceSuccessMsg : 'å ±å®æ %1 å¤æ¿æ¢.' + }, + + // Table Dialog + table : + { + toolbar : 'è¡¨æ ¼', + title : 'è¡¨æ ¼å±æ§', + menu : 'è¡¨æ ¼å±æ§', + deleteTable : 'å é¤è¡¨æ ¼', + rows : 'è¡æ°', + columns : 'åæ°', + border : 'è¾¹æ¡', + widthPx : 'åç´ ', + widthPc : 'ç¾åæ¯', + widthUnit : '宽度åä½', + cellSpace : 'é´è·', + cellPad : 'è¾¹è·', + caption : 'æ é¢', + summary : 'æè¦', + headers : 'æ é¢åå æ ¼', + headersNone : 'æ ', + headersColumn : '第ä¸å', + headersRow : '第ä¸è¡', + headersBoth : '第ä¸åå第ä¸è¡', + invalidRows : 'æå®çåæ°å¿ 须大äºé¶', + invalidCols : 'æå®çè¡æ°å¿ 须大äºé¶', + invalidBorder : 'è¾¹æ¡ç²ç»å¿ 须为æ°åæ ¼å¼', + invalidWidth : 'è¡¨æ ¼å®½åº¦å¿ é¡»ä¸ºæ°åæ ¼å¼', + invalidHeight : 'è¡¨æ ¼é«åº¦å¿ 须为æ°åæ ¼å¼', + invalidCellSpacing : 'åå æ ¼é´è·å¿ 须为æ°åæ ¼å¼', + invalidCellPadding : 'åå æ ¼å¡«å å¿ é¡»ä¸ºæ°åæ ¼å¼', + + cell : + { + menu : 'åå æ ¼', + insertBefore : 'å¨å·¦ä¾§æå ¥åå æ ¼', + insertAfter : 'å¨å³ä¾§æå ¥åå æ ¼', + deleteCell : 'å é¤åå æ ¼', + merge : 'å并åå æ ¼', + mergeRight : 'åå³å并åå æ ¼', + mergeDown : 'åä¸å并åå æ ¼', + splitHorizontal : 'æ°´å¹³æååå æ ¼', + splitVertical : 'åç´æååå æ ¼', + title : 'åå æ ¼å±æ§', + cellType : 'åå æ ¼ç±»å', + rowSpan : '纵跨è¡æ°', + colSpan : '横跨åæ°', + wordWrap : 'èªå¨æ¢è¡', + hAlign : '水平对é½', + vAlign : 'åç´å¯¹é½', + alignBaseline : 'åºçº¿', + bgColor : 'èæ¯é¢è²', + borderColor : 'è¾¹æ¡é¢è²', + data : 'æ°æ®', + header : '表头', + yes : 'æ¯', + no : 'å¦', + invalidWidth : 'åå æ ¼å®½åº¦å¿ é¡»ä¸ºæ°åæ ¼å¼', + invalidHeight : 'åå æ ¼é«åº¦å¿ 须为æ°åæ ¼å¼', + invalidRowSpan : 'è¡è·¨åº¦å¿ 须为æ´æ°æ ¼å¼', + invalidColSpan : 'åè·¨åº¦å¿ é¡»ä¸ºæ´æ°æ ¼å¼', + chooseColor : 'éæ©' + }, + + row : + { + menu : 'è¡', + insertBefore : 'å¨ä¸æ¹æå ¥è¡', + insertAfter : 'å¨ä¸æ¹æå ¥è¡', + deleteRow : 'å é¤è¡' + }, + + column : + { + menu : 'å', + insertBefore : 'å¨å·¦ä¾§æå ¥å', + insertAfter : 'å¨å³ä¾§æå ¥å', + deleteColumn : 'å é¤å' + } + }, + + // Button Dialog. + button : + { + title : 'æé®å±æ§', + text : 'æ ç¾(å¼)', + type : 'ç±»å', + typeBtn : 'æé®', + typeSbm : 'æ交', + typeRst : 'é设' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'å¤éæ¡å±æ§', + radioTitle : 'åéæé®å±æ§', + value : 'éå®å¼', + selected : 'å·²å¾é' + }, + + // Form Dialog. + form : + { + title : '表åå±æ§', + menu : '表åå±æ§', + action : 'å¨ä½', + method : 'æ¹æ³', + encoding : '表åç¼ç ' + }, + + // Select Field Dialog. + select : + { + title : 'èå/å表å±æ§', + selectInfo : 'éæ©ä¿¡æ¯', + opAvail : 'å¯é项', + value : 'å¼', + size : 'é«åº¦', + lines : 'è¡', + chkMulti : 'å 许å¤é', + opText : 'é项ææ¬', + opValue : 'é项å¼', + btnAdd : 'æ·»å ', + btnModify : 'ä¿®æ¹', + btnUp : 'ä¸ç§»', + btnDown : 'ä¸ç§»', + btnSetValue : '设为åå§éå®', + btnDelete : 'å é¤' + }, + + // Textarea Dialog. + textarea : + { + title : 'å¤è¡ææ¬å±æ§', + cols : 'å符宽度', + rows : 'è¡æ°' + }, + + // Text Field Dialog. + textfield : + { + title : 'åè¡ææ¬å±æ§', + name : 'å称', + value : 'åå§å¼', + charWidth : 'å符宽度', + maxChars : 'æå¤å符æ°', + type : 'ç±»å', + typeText : 'ææ¬', + typePass : 'å¯ç ' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'éèåå±æ§', + name : 'å称', + value : 'åå§å¼' + }, + + // Image Dialog. + image : + { + title : 'å¾è±¡å±æ§', + titleButton : 'å¾ååå±æ§', + menu : 'å¾è±¡å±æ§', + infoTab : 'å¾è±¡', + btnUpload : 'ä¸ä¼ å°æå¡å¨ä¸', + upload : 'ä¸ä¼ ', + alt : 'æ¿æ¢ææ¬', + lockRatio : 'éå®æ¯ä¾', + resetSize : 'åå§å°ºå¯¸', + border : 'è¾¹æ¡å¤§å°', + hSpace : 'æ°´å¹³é´è·', + vSpace : 'åç´é´è·', + alertUrl : '请è¾å ¥å¾è±¡å°å', + linkTab : 'é¾æ¥', + button2Img : 'ç¡®å®è¦æå½åæé®æ¹å为å¾åå?', + img2Button : 'ç¡®å®è¦æå½åå¾åæ¹å为æé®å?', + urlMissing : '缺å°å¾åæºæ件å°å', + validateBorder : 'è¾¹æ¡å¤§å°å¿ 须为æ´æ°æ ¼å¼', + validateHSpace : 'æ°´å¹³é´è·å¿ 须为æ´æ°æ ¼å¼', + validateVSpace : 'åç´é´è·å¿ 须为æ´æ°æ ¼å¼' + }, + + // Flash Dialog + flash : + { + properties : 'Flash å±æ§', + propertiesTab : 'å±æ§', + title : 'æ é¢', + chkPlay : 'èªå¨ææ¾', + chkLoop : '循ç¯', + chkMenu : 'å¯ç¨ Flash èå', + chkFull : 'å¯ç¨å ¨å±', + scale : '缩æ¾', + scaleAll : 'å ¨é¨æ¾ç¤º', + scaleNoBorder : 'æ è¾¹æ¡', + scaleFit : 'ä¸¥æ ¼å¹é ', + access : 'å 许èæ¬è®¿é®', + accessAlways : 'æ»æ¯', + accessSameDomain: 'åå', + accessNever : 'ä»ä¸', + alignAbsBottom : 'ç»å¯¹åºé¨', + alignAbsMiddle : 'ç»å¯¹å± ä¸', + alignBaseline : 'åºçº¿', + alignTextTop : 'ææ¬ä¸æ¹', + quality : 'è´¨é', + qualityBest : 'æ好', + qualityHigh : 'é«', + qualityAutoHigh : 'é«(èªå¨)', + qualityMedium : 'ä¸(èªå¨)', + qualityAutoLow : 'ä½(èªå¨)', + qualityLow : 'ä½', + windowModeWindow: 'çªä½', + windowModeOpaque: 'ä¸éæ', + windowModeTransparent : 'éæ', + windowMode : 'çªä½æ¨¡å¼', + flashvars : 'Flash åé', + bgcolor : 'èæ¯é¢è²', + hSpace : 'æ°´å¹³é´è·', + vSpace : 'åç´é´è·', + validateSrc : '请è¾å ¥æºæ件å°å', + validateHSpace : 'æ°´å¹³é´è·å¿ 须为æ°åæ ¼å¼', + validateVSpace : 'åç´é´è·å¿ 须为æ°åæ ¼å¼' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'æ¼åæ£æ¥', + title : 'æ¼åæ£æ¥', + notAvailable : 'æ±æ, æå¡ç®åæä¸å¯ç¨', + errorLoading : 'å è½½åºè¯¥æå¡ä¸»æºæ¶åºé: %s.', + notInDic : '没æå¨åå ¸é', + changeTo : 'æ´æ¹ä¸º', + btnIgnore : '忽ç¥', + btnIgnoreAll : 'å ¨é¨å¿½ç¥', + btnReplace : 'æ¿æ¢', + btnReplaceAll : 'å ¨é¨æ¿æ¢', + btnUndo : 'æ¤æ¶', + noSuggestions : '- 没æ建议 -', + progress : 'æ£å¨è¿è¡æ¼åæ£æ¥...', + noMispell : 'æ¼åæ£æ¥å®æ: 没æåç°æ¼åé误', + noChanges : 'æ¼åæ£æ¥å®æ: 没ææ´æ¹ä»»ä½åè¯', + oneChange : 'æ¼åæ£æ¥å®æ: æ´æ¹äºä¸ä¸ªåè¯', + manyChanges : 'æ¼åæ£æ¥å®æ: æ´æ¹äº %1 个åè¯', + ieSpellDownload : 'æ¼åæ£æ¥æ件è¿æ²¡å®è£ , ä½ æ¯å¦æ³ç°å¨å°±ä¸è½½?' + }, + + smiley : + { + toolbar : '表æ 符', + title : 'æå ¥è¡¨æ å¾æ ', + options : '表æ å¾æ é项' + }, + + elementsPath : + { + eleLabel : 'å ç´ è·¯å¾', + eleTitle : '%1 å ç´ ' + }, + + numberedlist : 'ç¼å·å表', + bulletedlist : '项ç®å表', + indent : 'å¢å 缩è¿é', + outdent : 'åå°ç¼©è¿é', + + justify : + { + left : '左对é½', + center : 'å± ä¸', + right : 'å³å¯¹é½', + block : '两端对é½' + }, + + blockquote : 'åå¼ç¨', + + clipboard : + { + title : 'ç²è´´', + cutError : 'æ¨çæµè§å¨å®å ¨è®¾ç½®ä¸å 许ç¼è¾å¨èªå¨æ§è¡åªåæä½, 请使ç¨é®çå¿«æ·é®(Ctrl/Cmd+X)æ¥å®æ', + copyError : 'æ¨çæµè§å¨å®å ¨è®¾ç½®ä¸å 许ç¼è¾å¨èªå¨æ§è¡å¤å¶æä½, 请使ç¨é®çå¿«æ·é®(Ctrl/Cmd+C)æ¥å®æ', + pasteMsg : '请使ç¨é®çå¿«æ·é®(<STRONG>Ctrl/Cmd+V</STRONG>)æå 容ç²è´´å°ä¸é¢çæ¹æ¡éï¼åæ <STRONG>ç¡®å®</STRONG>', + securityMsg : 'å ä¸ºä½ çæµè§å¨çå®å ¨è®¾ç½®åå , æ¬ç¼è¾å¨ä¸è½ç´æ¥è®¿é®ä½ çåªè´´æ¿å 容, ä½ éè¦å¨æ¬çªå£éæ°ç²è´´ä¸æ¬¡', + pasteArea : 'ç²è´´åºå' + }, + + pastefromword : + { + confirmCleanup : 'æ¨è¦ç²è´´çå 容好åæ¯æ¥èª MS Word, æ¯å¦è¦æ¸ é¤ MS Word æ ¼å¼ååç²è´´?', + toolbar : 'ä» MS Word ç²è´´', + title : 'ä» MS Word ç²è´´', + error : 'ç±äºå é¨é误æ æ³æ¸ çè¦ç²è´´çæ°æ®' + }, + + pasteText : + { + button : 'ç²è´´ä¸ºæ æ ¼å¼ææ¬', + title : 'ç²è´´ä¸ºæ æ ¼å¼ææ¬' + }, + + templates : + { + button : '模æ¿', + title : 'å 容模æ¿', + options : '模æ¿é项', + insertOption : 'æ¿æ¢å½åå 容', + selectPromptMsg : '请éæ©ç¼è¾å¨å 容模æ¿:', + emptyListMsg : '(没æ模æ¿)' + }, + + showBlocks : 'æ¾ç¤ºåºå', + + stylesCombo : + { + label : 'æ ·å¼', + panelTitle : 'æ ·å¼', + panelTitle1 : 'å级å ç´ æ ·å¼', + panelTitle2 : 'å èå ç´ æ ·å¼', + panelTitle3 : '对象å ç´ æ ·å¼' + }, + + format : + { + label : 'æ ¼å¼', + panelTitle : 'æ ¼å¼', + + tag_p : 'æ®é', + tag_pre : 'å·²ç¼ææ ¼å¼', + tag_address : 'å°å', + tag_h1 : 'æ é¢ 1', + tag_h2 : 'æ é¢ 2', + tag_h3 : 'æ é¢ 3', + tag_h4 : 'æ é¢ 4', + tag_h5 : 'æ é¢ 5', + tag_h6 : 'æ é¢ 6', + tag_div : '段è½(DIV)' + }, + + div : + { + title : 'å建 DIV 容å¨', + toolbar : 'å建 DIV 容å¨', + cssClassInputLabel : 'æ ·å¼ç±»å称', + styleSelectLabel : 'æ ·å¼', + IdInputLabel : 'ID', + languageCodeInputLabel : 'è¯è¨ä»£ç ', + inlineStyleInputLabel : 'è¡å æ ·å¼', + advisoryTitleInputLabel : 'æ é¢', + langDirLabel : 'è¯è¨æ¹å', + langDirLTRLabel : 'ä»å·¦å°å³ (LTR)', + langDirRTLLabel : 'ä»å³å°å·¦ (RTL)', + edit : 'ç¼è¾ DIV', + remove : 'ç§»é¤ DIV' + }, + + iframe : + { + title : 'iFrameå±æ§', + toolbar : 'iFrame', + noUrl : '请è¾å ¥æ¡æ¶ç URL', + scrolling : 'å 许æ»å¨æ¡', + border : 'æ¾ç¤ºæ¡æ¶è¾¹æ¡' + }, + + font : + { + label : 'åä½', + voiceLabel : 'åä½', + panelTitle : 'åä½' + }, + + fontSize : + { + label : '大å°', + voiceLabel : 'æå大å°', + panelTitle : '大å°' + }, + + colorButton : + { + textColorTitle : 'ææ¬é¢è²', + bgColorTitle : 'èæ¯é¢è²', + panelTitle : 'é¢è²', + auto : 'èªå¨', + more : 'å ¶å®é¢è²...' + }, + + colors : + { + '000' : 'é»', + '800000' : 'è¤çº¢', + '8B4513' : 'æ·±è¤', + '2F4F4F' : '墨绿', + '008080' : '绿æ¾ç³', + '000080' : 'æµ·åè', + '4B0082' : 'éè', + '696969' : 'æç°', + 'B22222' : 'ç 红', + 'A52A2A' : 'è¤', + 'DAA520' : 'éé»', + '006400' : '深绿', + '40E0D0' : 'è绿', + '0000CD' : 'ä¸è', + '800080' : 'ç´«', + '808080' : 'ç°', + 'F00' : '红', + 'FF8C00' : 'æ·±æ©', + 'FFD700' : 'é', + '008000' : '绿', + '0FF' : 'é', + '00F' : 'è', + 'EE82EE' : 'ç´«ç½å °', + 'A9A9A9' : 'æ·±ç°', + 'FFA07A' : '亮æ©', + 'FFA500' : 'æ©', + 'FFFF00' : 'é»', + '00FF00' : '水绿', + 'AFEEEE' : 'ç²è', + 'ADD8E6' : '亮è', + 'DDA0DD' : 'æ¢ çº¢', + 'D3D3D3' : 'æ·¡ç°', + 'FFF0F5' : '淡紫红', + 'FAEBD7' : 'å¤è£ç½', + 'FFFFE0' : 'æ·¡é»', + 'F0FFF0' : 'èç½', + 'F0FFFF' : '天è', + 'F0F8FF' : 'æ·¡è', + 'E6E6FA' : 'æ·¡ç´«', + 'FFF' : 'ç½' + }, + + scayt : + { + title : 'å³æ¶æ¼åæ£æ¥', + opera_title : 'ä¸æ¯æ Opera æµè§å¨', + enable : 'å¯ç¨å³æ¶æ¼åæ£æ¥', + disable : 'ç¦ç¨å³æ¶æ¼åæ£æ¥', + about : 'å ³äºå³æ¶æ¼åæ£æ¥', + toggle : 'æå/å¯ç¨å³æ¶æ¼åæ£æ¥', + options : 'é项', + langs : 'è¯è¨', + moreSuggestions : 'æ´å¤æ¼å建议', + ignore : '忽ç¥', + ignoreAll : 'å ¨é¨å¿½ç¥', + addWord : 'æ·»å åè¯', + emptyDic : 'åå ¸åä¸åºä¸ºç©º.', + + optionsTab : 'é项', + allCaps : '忽ç¥ææ大ååè¯', + ignoreDomainNames : '忽ç¥åå', + mixedCase : '忽ç¥å¤§å°åæ··åçåè¯', + mixedWithDigits : '忽ç¥å¸¦æ°åçåè¯', + + languagesTab : 'è¯è¨', + + dictionariesTab : 'åå ¸', + dic_field_name : 'åå ¸å称', + dic_create : 'å建', + dic_restore : 'è¿å', + dic_delete : 'å é¤', + dic_rename : 'éå½å', + dic_info : 'ä¸å¼å§ç¨æ·è¯å ¸å¨åå¨ Cookie ä¸, ä½æ¯ Cookies ç容éæ¯æéç, å½ç¨æ·è¯å ¸å¢é¿å°è¶ åº Cookie éå¶æ¶å°±æ æ³åå¨åäº, è¿æ¶æ¨å¯ä»¥å°è¯å ¸å¨åå°æ们çæå¡å¨ä¸. è¦ææ¨ç个人è¯å ¸å°å¨åå°æ们çæå¡å¨ä¸çè¯, éè¦ä¸ºæ¨çè¯å ¸æå®ä¸ä¸ªå称, å¦ææ¨å¨æ们çæå¡å¨ä¸å·²ç»æå¨åæä¸ä¸ªè¯å ¸, 请è¾å ¥è¯å ¸å称并æè¿åæé®.', + + aboutTab : 'å ³äº' + }, + + about : + { + title : 'å ³äºCKEditor', + dlgTitle : 'å ³äºCKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : '访é®æ们çç½ç«ä»¥è·åæ´å¤å ³äºåè®®çä¿¡æ¯', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'å ¨å±', + minimize : 'æå°å', + + fakeobjects : + { + anchor : 'éç¹', + flash : 'Flash å¨ç»', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'æªç¥å¯¹è±¡' + }, + + resize : 'ææ½ä»¥æ¹å尺寸', + + colordialog : + { + title : 'éæ©é¢è²', + options : 'é¢è²é项', + highlight : 'é«äº®', + selected : 'éæ©é¢è²', + clear : 'æ¸ é¤' + }, + + toolbarCollapse : 'æå å·¥å ·æ ', + toolbarExpand : 'å±å¼å·¥å ·æ ', + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'æåæ¹å为ä»å·¦è³å³', + rtl : 'æåæ¹å为ä»å³è³å·¦' + }, + + docprops : + { + label : '页é¢å±æ§', + title : '页é¢å±æ§', + design : 'Design', // MISSING + meta : 'Meta æ°æ®', + chooseColor : 'éæ©', + other : '<å ¶ä»>', + docTitle : '页é¢æ é¢', + charset : 'å符ç¼ç ', + charsetOther : 'å ¶å®å符ç¼ç ', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'ä¸æ¬§', + charsetCT : 'ç¹ä½ä¸æ (Big5)', + charsetCR : '西éå°æ', + charsetGR : 'å¸è æ', + charsetJP : 'æ¥æ', + charsetKR : 'é©æ', + charsetTR : 'åè³å ¶æ', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : '西欧', + docType : 'æ档类å', + docTypeOther : 'å ¶å®æ档类å', + xhtmlDec : 'å å« XHTML 声æ', + bgColor : 'èæ¯é¢è²', + bgImage : 'èæ¯å¾å', + bgFixed : 'ä¸æ»å¨èæ¯å¾å', + txtColor : 'ææ¬é¢è²', + margin : '页é¢è¾¹è·', + marginTop : 'ä¸', + marginLeft : 'å·¦', + marginRight : 'å³', + marginBottom : 'ä¸', + metaKeywords : '页é¢ç´¢å¼å ³é®å (ç¨åè§éå·[,]åé)', + metaDescription : '页é¢è¯´æ', + metaAuthor : 'ä½è ', + metaCopyright : 'çæ', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/lang/zh.js b/_source/lang/zh.js new file mode 100644 index 0000000..9d38e21 --- /dev/null +++ b/_source/lang/zh.js @@ -0,0 +1,812 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.lang} object, for the + * Chinese Traditional language. + */ + +/**#@+ + @type String + @example +*/ + +/** + * Constains the dictionary of language entries. + * @namespace + */ +CKEDITOR.lang['zh'] = +{ + /** + * The language reading direction. Possible values are "rtl" for + * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right + * languages (like English). + * @default 'ltr' + */ + dir : 'ltr', + + /* + * Screenreader titles. Please note that screenreaders are not always capable + * of reading non-English words. So be careful while translating it. + */ + editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING + + // ARIA descriptions. + toolbars : 'Editor toolbars', // MISSING + editor : 'Rich Text Editor', // MISSING + + // Toolbar buttons without dialogs. + source : 'åå§ç¢¼', + newPage : 'éæ°æªæ¡', + save : 'å²å', + preview : 'é 覽', + cut : 'åªä¸', + copy : 'è¤è£½', + paste : 'è²¼ä¸', + print : 'åå°', + underline : 'åºç·', + bold : 'ç²é«', + italic : 'æé«', + selectAll : 'å ¨é¸', + removeFormat : 'æ¸ é¤æ ¼å¼', + strike : 'åªé¤ç·', + subscript : 'ä¸æ¨', + superscript : 'ä¸æ¨', + horizontalrule : 'æå ¥æ°´å¹³ç·', + pagebreak : 'æå ¥åé 符è', + pagebreakAlt : 'Page Break', // MISSING + unlink : '移é¤è¶ é£çµ', + undo : '復å', + redo : 'éè¤', + + // Common messages and labels. + common : + { + browseServer : 'ç覽伺æå¨ç«¯', + url : 'URL', + protocol : 'éè¨åå®', + upload : 'ä¸å³', + uploadSubmit : 'ä¸å³è³ä¼ºæå¨', + image : 'å½±å', + flash : 'Flash', + form : '表å®', + checkbox : 'æ ¸åæ¹å¡', + radio : 'é¸é æé', + textField : 'æåæ¹å¡', + textarea : 'æååå', + hiddenField : 'é±èæ¬ä½', + button : 'æé', + select : 'æ¸ å®/é¸å®', + imageButton : 'å½±åæé', + notSet : '<å°æªè¨å®>', + id : 'ID', + name : 'å稱', + langDir : 'èªè¨æ¹å', + langDirLtr : 'ç±å·¦èå³ (LTR)', + langDirRtl : 'ç±å³èå·¦ (RTL)', + langCode : 'èªè¨ä»£ç¢¼', + longDescr : '詳細 URL', + cssClass : '樣å¼è¡¨é¡å¥', + advisoryTitle : 'æ¨é¡', + cssStyle : '樣å¼', + ok : '確å®', + cancel : 'åæ¶', + close : 'Close', // MISSING + preview : 'Preview', // MISSING + generalTab : 'ä¸è¬', + advancedTab : 'é²é', + validateNumberFailed : 'éè¦è¼¸å ¥æ¸åæ ¼å¼', + confirmNewPage : 'ç¾åçä¿®æ¹å°æªå²åï¼è¦éæ°æªæ¡ï¼', + confirmCancel : 'é¨ä»½é¸é å°æªå²åï¼è¦ééå°è©±çï¼', + options : 'Options', // MISSING + target : 'Target', // MISSING + targetNew : 'New Window (_blank)', // MISSING + targetTop : 'Topmost Window (_top)', // MISSING + targetSelf : 'Same Window (_self)', // MISSING + targetParent : 'Parent Window (_parent)', // MISSING + langDirLTR : 'Left to Right (LTR)', // MISSING + langDirRTL : 'Right to Left (RTL)', // MISSING + styles : 'Style', // MISSING + cssClasses : 'Stylesheet Classes', // MISSING + width : '寬度', + height : 'é«åº¦', + align : 'å°é½', + alignLeft : 'é å·¦å°é½', + alignRight : 'é å³å°é½', + alignCenter : 'ç½®ä¸', + alignTop : 'é ä¸å°é½', + alignMiddle : 'ç½®ä¸å°é½', + alignBottom : 'é ä¸å°é½', + invalidHeight : 'é«åº¦å¿ é çºæ¸åæ ¼å¼', + invalidWidth : 'å¯¬åº¦å¿ é çºæ¸åæ ¼å¼', + invalidCssLength : 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING + invalidHtmlLength : 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING + + // Put the voice-only part of the label in the span. + unavailable : '%1<span class="cke_accessibility">, å·²éé</span>' + }, + + contextmenu : + { + options : 'Context Menu Options' // MISSING + }, + + // Special char dialog. + specialChar : + { + toolbar : 'æå ¥ç¹æ®ç¬¦è', + title : 'è«é¸æç¹æ®ç¬¦è', + options : 'Special Character Options' // MISSING + }, + + // Link dialog. + link : + { + toolbar : 'æå ¥/ç·¨è¼¯è¶ é£çµ', + other : '<å ¶ä»>', + menu : 'ç·¨è¼¯è¶ é£çµ', + title : 'è¶ é£çµ', + info : 'è¶ é£çµè³è¨', + target : 'ç®æ¨', + upload : 'ä¸å³', + advanced : 'é²é', + type : 'è¶ é£æ¥é¡å', + toUrl : 'URL', // MISSING + toAnchor : 'æ¬é é¨é»', + toEmail : 'é»åéµä»¶', + targetFrame : '<æ¡æ¶>', + targetPopup : '<快顯è¦çª>', + targetFrameName : 'ç®æ¨æ¡æ¶å稱', + targetPopupName : '快顯è¦çªå稱', + popupFeatures : '快顯è¦çªå±¬æ§', + popupResizable : 'å¯ç¸®æ¾', + popupStatusBar : 'çæ å', + popupLocationBar: '網åå', + popupToolbar : 'å·¥å ·å', + popupMenuBar : 'é¸å®å', + popupFullScreen : 'å ¨è¢å¹ (IE)', + popupScrollBars : 'æ²è»¸', + popupDependent : 'å¾å±¬ (NS)', + popupLeft : 'å·¦', + popupTop : 'å³', + id : 'ID', + langDir : 'èªè¨æ¹å', + langDirLTR : 'ç±å·¦èå³ (LTR)', + langDirRTL : 'ç±å³èå·¦ (RTL)', + acccessKey : 'ååéµ', + name : 'å稱', + langCode : 'èªè¨æ¹å', + tabIndex : 'å®ä½é åº', + advisoryTitle : 'æ¨é¡', + advisoryContentType : 'å §å®¹é¡å', + cssClasses : '樣å¼è¡¨é¡å¥', + charset : 'é£çµè³æºä¹ç·¨ç¢¼', + styles : '樣å¼', + rel : 'Relationship', // MISSING + selectAnchor : 'è«é¸æé¨é»', + anchorName : 'ä¾é¨é»å稱', + anchorId : 'ä¾å 件 ID', + emailAddress : 'é»åéµä»¶', + emailSubject : 'éµä»¶ä¸»æ¨', + emailBody : 'éµä»¶å §å®¹', + noAnchors : '(æ¬æ件å°ç¡å¯ç¨ä¹é¨é»)', + noUrl : 'è«è¼¸å ¥æ¬²é£çµç URL', + noEmail : 'è«è¼¸å ¥é»åéµä»¶ä½å' + }, + + // Anchor dialog + anchor : + { + toolbar : 'æå ¥/編輯é¨é»', + menu : 'é¨é»å±¬æ§', + title : 'é¨é»å±¬æ§', + name : 'é¨é»å稱', + errorName : 'è«è¼¸å ¥é¨é»å稱', + remove : 'Remove Anchor' // MISSING + }, + + // List style dialog + list: + { + numberedTitle : 'Numbered List Properties', // MISSING + bulletedTitle : 'Bulleted List Properties', // MISSING + type : 'Type', // MISSING + start : 'Start', // MISSING + validateStartNumber :'List start number must be a whole number.', // MISSING + circle : 'Circle', // MISSING + disc : 'Disc', // MISSING + square : 'Square', // MISSING + none : 'None', // MISSING + notset : '<not set>', // MISSING + armenian : 'Armenian numbering', // MISSING + georgian : 'Georgian numbering (an, ban, gan, etc.)', // MISSING + lowerRoman : 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING + upperRoman : 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING + lowerAlpha : 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING + upperAlpha : 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING + lowerGreek : 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING + decimal : 'Decimal (1, 2, 3, etc.)', // MISSING + decimalLeadingZero : 'Decimal leading zero (01, 02, 03, etc.)' // MISSING + }, + + // Find And Replace Dialog + findAndReplace : + { + title : 'å°æ¾èå代', + find : 'å°æ¾', + replace : 'å代', + findWhat : 'å°æ¾:', + replaceWith : 'å代:', + notFoundMsg : 'æªæ¾å°æå®çæåã', + matchCase : '大å°å¯«é ç¸ç¬¦', + matchWord : 'å ¨åç¸ç¬¦', + matchCyclic : '循ç°æç´¢', + replaceAll : 'å ¨é¨å代', + replaceSuccessMsg : 'å ±å®æ %1 次å代' + }, + + // Table Dialog + table : + { + toolbar : 'è¡¨æ ¼', + title : 'è¡¨æ ¼å±¬æ§', + menu : 'è¡¨æ ¼å±¬æ§', + deleteTable : 'åªé¤è¡¨æ ¼', + rows : 'åæ¸', + columns : 'æ¬æ¸', + border : 'éæ¡', + widthPx : 'åç´ ', + widthPc : 'ç¾åæ¯', + widthUnit : 'width unit', // MISSING + cellSpace : 'éè·', + cellPad : 'å §è·', + caption : 'æ¨é¡', + summary : 'æè¦', + headers : 'æ¨é¡', + headersNone : 'ç¡æ¨é¡', + headersColumn : '第ä¸æ¬', + headersRow : '第ä¸å', + headersBoth : '第ä¸æ¬å第ä¸å', + invalidRows : 'å¿ é æä¸ææ´å¤çå', + invalidCols : 'å¿ é æä¸ææ´å¤çæ¬', + invalidBorder : 'éæ¡å¤§å°å¿ é çºæ¸åæ ¼å¼', + invalidWidth : 'è¡¨æ ¼å¯¬åº¦å¿ é çºæ¸åæ ¼å¼', + invalidHeight : 'è¡¨æ ¼é«åº¦å¿ é çºæ¸åæ ¼å¼', + invalidCellSpacing : 'å²åæ ¼éè·å¿ é çºæ¸åæ ¼å¼', + invalidCellPadding : 'å²åæ ¼å §è·å¿ é çºæ¸åæ ¼å¼', + + cell : + { + menu : 'å²åæ ¼', + insertBefore : 'åå·¦æå ¥å²åæ ¼', + insertAfter : 'åå³æå ¥å²åæ ¼', + deleteCell : 'åªé¤å²åæ ¼', + merge : 'åä½µå²åæ ¼', + mergeRight : 'åå³åä½µå²åæ ¼', + mergeDown : 'åä¸åä½µå²åæ ¼', + splitHorizontal : 'æ©«ååå²å²åæ ¼', + splitVertical : '縱ååå²å²åæ ¼', + title : 'å²åæ ¼å±¬æ§', + cellType : 'å²åæ ¼é¡å¥', + rowSpan : 'å²åæ ¼åæ¸', + colSpan : 'å²åæ ¼æ¬æ¸', + wordWrap : 'èªåæè¡', + hAlign : 'æ°´å¹³å°é½', + vAlign : 'åç´å°é½', + alignBaseline : 'åºç·å°é½', + bgColor : 'èæ¯é¡è²', + borderColor : 'éæ¡é¡è²', + data : 'æ¸æ', + header : 'æ¨é¡', + yes : 'æ¯', + no : 'å¦', + invalidWidth : 'å²åæ ¼å¯¬åº¦å¿ é çºæ¸åæ ¼å¼', + invalidHeight : 'å²åæ ¼é«åº¦å¿ é çºæ¸åæ ¼å¼', + invalidRowSpan : 'å²åæ ¼åæ¸å¿ é çºæ´æ¸æ ¼å¼', + invalidColSpan : 'å²åæ ¼æ¬æ¸åº¦å¿ é çºæ´æ¸æ ¼å¼', + chooseColor : 'Choose' // MISSING + }, + + row : + { + menu : 'å', + insertBefore : 'åä¸æå ¥å', + insertAfter : 'åä¸æå ¥å', + deleteRow : 'åªé¤å' + }, + + column : + { + menu : 'æ¬', + insertBefore : 'åå·¦æå ¥æ¬', + insertAfter : 'åå³æå ¥æ¬', + deleteColumn : 'åªé¤æ¬' + } + }, + + // Button Dialog. + button : + { + title : 'æé屬æ§', + text : '顯示æå (å¼)', + type : 'é¡å', + typeBtn : 'æé (Button)', + typeSbm : 'éåº (Submit)', + typeRst : 'éè¨ (Reset)' + }, + + // Checkbox and Radio Button Dialogs. + checkboxAndRadio : + { + checkboxTitle : 'æ ¸åæ¹å¡å±¬æ§', + radioTitle : 'é¸é æé屬æ§', + value : 'é¸åå¼', + selected : 'å·²é¸å' + }, + + // Form Dialog. + form : + { + title : '表å®å±¬æ§', + menu : '表å®å±¬æ§', + action : 'åä½', + method : 'æ¹æ³', + encoding : '表å®ç·¨ç¢¼' + }, + + // Select Field Dialog. + select : + { + title : 'æ¸ å®/é¸å®å±¬æ§', + selectInfo : 'è³è¨', + opAvail : 'å¯ç¨é¸é ', + value : 'å¼', + size : '大å°', + lines : 'è¡', + chkMulti : 'å¯å¤é¸', + opText : '顯示æå', + opValue : 'é¸åå¼', + btnAdd : 'æ°å¢', + btnModify : 'ä¿®æ¹', + btnUp : 'ä¸ç§»', + btnDown : 'ä¸ç§»', + btnSetValue : 'è¨çºé è¨å¼', + btnDelete : 'åªé¤' + }, + + // Textarea Dialog. + textarea : + { + title : 'æååå屬æ§', + cols : 'åå 寬度', + rows : 'åæ¸' + }, + + // Text Field Dialog. + textfield : + { + title : 'æåæ¹å¡å±¬æ§', + name : 'å稱', + value : 'å¼', + charWidth : 'åå 寬度', + maxChars : 'æå¤åå æ¸', + type : 'é¡å', + typeText : 'æå', + typePass : 'å¯ç¢¼' + }, + + // Hidden Field Dialog. + hidden : + { + title : 'é±èæ¬ä½å±¬æ§', + name : 'å稱', + value : 'å¼' + }, + + // Image Dialog. + image : + { + title : 'å½±å屬æ§', + titleButton : 'å½±åæé屬æ§', + menu : 'å½±å屬æ§', + infoTab : 'å½±åè³è¨', + btnUpload : 'ä¸å³è³ä¼ºæå¨', + upload : 'ä¸å³', + alt : 'æ¿ä»£æå', + lockRatio : 'çæ¯ä¾', + resetSize : 'éè¨çºå大å°', + border : 'éæ¡', + hSpace : 'æ°´å¹³è·é¢', + vSpace : 'åç´è·é¢', + alertUrl : 'è«è¼¸å ¥å½±å URL', + linkTab : 'è¶ é£çµ', + button2Img : 'è¦æå½±åæéæ¹æå½±ååï¼', + img2Button : 'è¦æå½±åæ¹æå½±åæéåï¼', + urlMissing : 'Image source URL is missing.', // MISSING + validateBorder : 'Border must be a whole number.', // MISSING + validateHSpace : 'HSpace must be a whole number.', // MISSING + validateVSpace : 'VSpace must be a whole number.' // MISSING + }, + + // Flash Dialog + flash : + { + properties : 'Flash 屬æ§', + propertiesTab : '屬æ§', + title : 'Flash 屬æ§', + chkPlay : 'èªåææ¾', + chkLoop : 'éè¤', + chkMenu : 'éåé¸å®', + chkFull : 'ååå ¨è¢å¹é¡¯ç¤º', + scale : '縮æ¾', + scaleAll : 'å ¨é¨é¡¯ç¤º', + scaleNoBorder : 'ç¡éæ¡', + scaleFit : '精確符å', + access : 'å è¨±è ³æ¬è¨ªå', + accessAlways : 'æ°¸é ', + accessSameDomain: 'ç¸ååå', + accessNever : 'æ°¸ä¸', + alignAbsBottom : 'çµå°ä¸æ¹', + alignAbsMiddle : 'çµå°ä¸é', + alignBaseline : 'åºæºç·', + alignTextTop : 'æåä¸æ¹', + quality : 'è³ªç´ ', + qualityBest : 'æ好', + qualityHigh : 'é«', + qualityAutoHigh : 'é«ï¼èªåï¼', + qualityMedium : 'ä¸ï¼èªåï¼', + qualityAutoLow : 'ä½ï¼èªåï¼', + qualityLow : 'ä½', + windowModeWindow: 'è¦çª', + windowModeOpaque: 'ä¸éæ', + windowModeTransparent : 'éæ', + windowMode : 'è¦çªæ¨¡å¼', + flashvars : 'Flash è®æ¸', + bgcolor : 'èæ¯é¡è²', + hSpace : 'æ°´å¹³è·é¢', + vSpace : 'åç´è·é¢', + validateSrc : 'è«è¼¸å ¥æ¬²é£çµç URL', + validateHSpace : 'æ°´å¹³éè·å¿ é çºæ¸åæ ¼å¼', + validateVSpace : 'åç´éè·å¿ é çºæ¸åæ ¼å¼' + }, + + // Speller Pages Dialog + spellCheck : + { + toolbar : 'æ¼å檢æ¥', + title : 'æ¼å檢æ¥', + notAvailable : 'æ±æï¼æåç®åæ«ä¸å¯ç¨', + errorLoading : 'ç¡æ³è¯ç³»ä¾æå¨: %s.', + notInDic : 'ä¸å¨åå ¸ä¸', + changeTo : 'æ´æ¹çº', + btnIgnore : '忽ç¥', + btnIgnoreAll : 'å ¨é¨å¿½ç¥', + btnReplace : 'å代', + btnReplaceAll : 'å ¨é¨å代', + btnUndo : '復å', + noSuggestions : '- ç¡å»ºè°å¼ -', + progress : 'é²è¡æ¼å檢æ¥ä¸â¦', + noMispell : 'æ¼å檢æ¥å®æï¼æªç¼ç¾æ¼åé¯èª¤', + noChanges : 'æ¼å檢æ¥å®æï¼æªæ´æ¹ä»»ä½å®å', + oneChange : 'æ¼å檢æ¥å®æï¼æ´æ¹äº 1 åå®å', + manyChanges : 'æ¼å檢æ¥å®æï¼æ´æ¹äº %1 åå®å', + ieSpellDownload : 'å°æªå®è£æ¼å檢æ¥å 件ãæ¨æ¯å¦æ³è¦ç¾å¨ä¸è¼ï¼' + }, + + smiley : + { + toolbar : '表æ 符è', + title : 'æå ¥è¡¨æ 符è', + options : 'Smiley Options' // MISSING + }, + + elementsPath : + { + eleLabel : 'Elements path', // MISSING + eleTitle : '%1 å ç´ ' + }, + + numberedlist : 'ç·¨èæ¸ å®', + bulletedlist : 'é ç®æ¸ å®', + indent : 'å¢å 縮æ', + outdent : 'æ¸å°ç¸®æ', + + justify : + { + left : 'é å·¦å°é½', + center : 'ç½®ä¸', + right : 'é å³å°é½', + block : 'å·¦å³å°é½' + }, + + blockquote : 'å¼ç¨æå', + + clipboard : + { + title : 'è²¼ä¸', + cutError : 'ç覽å¨çå®å ¨æ§è¨å®ä¸å 許編輯å¨èªåå·è¡åªä¸åä½ãè«ä½¿ç¨å¿«æ·éµ (Ctrl/Cmd+X) åªä¸ã', + copyError : 'ç覽å¨çå®å ¨æ§è¨å®ä¸å 許編輯å¨èªåå·è¡è¤è£½åä½ãè«ä½¿ç¨å¿«æ·éµ (Ctrl/Cmd+C) è¤è£½ã', + pasteMsg : 'è«ä½¿ç¨å¿«æ·éµ (<strong>Ctrl/Cmd+V</strong>) è²¼å°ä¸æ¹ååä¸ä¸¦æä¸ <strong>確å®</strong>', + securityMsg : 'å çºç覽å¨çå®å ¨æ§è¨å®ï¼æ¬ç·¨è¼¯å¨ç¡æ³ç´æ¥ååæ¨çåªè²¼ç°¿è³æï¼è«æ¨èªè¡å¨æ¬è¦çªé²è¡è²¼ä¸åä½ã', + pasteArea : 'Paste Area' // MISSING + }, + + pastefromword : + { + confirmCleanup : 'æ¨æ³è²¼ä¸çæåä¼¼ä¹æ¯èª Word è¤è£½èä¾ï¼è«åæ¨æ¯å¦è¦å æ¸ é¤ Word çæ ¼å¼å¾åè¡è²¼ä¸ï¼', + toolbar : 'èª Word è²¼ä¸', + title : 'èª Word è²¼ä¸', + error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING + }, + + pasteText : + { + button : 'è²¼çºç´æåæ ¼å¼', + title : 'è²¼çºç´æåæ ¼å¼' + }, + + templates : + { + button : '樣ç', + title : 'å §å®¹æ¨£ç', + options : 'Template Options', // MISSING + insertOption : 'å代åæå §å®¹', + selectPromptMsg : 'è«é¸æ欲éåç樣ç<br> (åæçå §å®¹å°æè¢«æ¸ é¤):', + emptyListMsg : '(ç¡æ¨£ç)' + }, + + showBlocks : '顯示åå¡', + + stylesCombo : + { + label : '樣å¼', + panelTitle : 'Formatting Styles', // MISSING + panelTitle1 : 'å¡ç´å ç´ æ¨£å¼', + panelTitle2 : 'å §è¯å ç´ æ¨£å¼', + panelTitle3 : 'ç©ä»¶å ç´ æ¨£å¼' + }, + + format : + { + label : 'æ ¼å¼', + panelTitle : 'æ ¼å¼', + + tag_p : 'ä¸è¬', + tag_pre : 'å·²æ ¼å¼å', + tag_address : 'ä½å', + tag_h1 : 'æ¨é¡ 1', + tag_h2 : 'æ¨é¡ 2', + tag_h3 : 'æ¨é¡ 3', + tag_h4 : 'æ¨é¡ 4', + tag_h5 : 'æ¨é¡ 5', + tag_h6 : 'æ¨é¡ 6', + tag_div : 'ä¸è¬ (DIV)' + }, + + div : + { + title : 'Create Div Container', // MISSING + toolbar : 'Create Div Container', // MISSING + cssClassInputLabel : 'Stylesheet Classes', // MISSING + styleSelectLabel : 'Style', // MISSING + IdInputLabel : 'Id', // MISSING + languageCodeInputLabel : ' Language Code', // MISSING + inlineStyleInputLabel : 'Inline Style', // MISSING + advisoryTitleInputLabel : 'Advisory Title', // MISSING + langDirLabel : 'Language Direction', // MISSING + langDirLTRLabel : 'Left to Right (LTR)', // MISSING + langDirRTLLabel : 'Right to Left (RTL)', // MISSING + edit : 'Edit Div', // MISSING + remove : 'Remove Div' // MISSING + }, + + iframe : + { + title : 'IFrame Properties', // MISSING + toolbar : 'IFrame', // MISSING + noUrl : 'Please type the iframe URL', // MISSING + scrolling : 'Enable scrollbars', // MISSING + border : 'Show frame border' // MISSING + }, + + font : + { + label : 'åé«', + voiceLabel : 'åé«', + panelTitle : 'åé«' + }, + + fontSize : + { + label : '大å°', + voiceLabel : 'æå大å°', + panelTitle : '大å°' + }, + + colorButton : + { + textColorTitle : 'æåé¡è²', + bgColorTitle : 'èæ¯é¡è²', + panelTitle : 'Colors', // MISSING + auto : 'èªå', + more : 'æ´å¤é¡è²â¦' + }, + + colors : + { + '000' : 'Black', // MISSING + '800000' : 'Maroon', // MISSING + '8B4513' : 'Saddle Brown', // MISSING + '2F4F4F' : 'Dark Slate Gray', // MISSING + '008080' : 'Teal', // MISSING + '000080' : 'Navy', // MISSING + '4B0082' : 'Indigo', // MISSING + '696969' : 'Dark Gray', // MISSING + 'B22222' : 'Fire Brick', // MISSING + 'A52A2A' : 'Brown', // MISSING + 'DAA520' : 'Golden Rod', // MISSING + '006400' : 'Dark Green', // MISSING + '40E0D0' : 'Turquoise', // MISSING + '0000CD' : 'Medium Blue', // MISSING + '800080' : 'Purple', // MISSING + '808080' : 'Gray', // MISSING + 'F00' : 'Red', // MISSING + 'FF8C00' : 'Dark Orange', // MISSING + 'FFD700' : 'Gold', // MISSING + '008000' : 'Green', // MISSING + '0FF' : 'Cyan', // MISSING + '00F' : 'Blue', // MISSING + 'EE82EE' : 'Violet', // MISSING + 'A9A9A9' : 'Dim Gray', // MISSING + 'FFA07A' : 'Light Salmon', // MISSING + 'FFA500' : 'Orange', // MISSING + 'FFFF00' : 'Yellow', // MISSING + '00FF00' : 'Lime', // MISSING + 'AFEEEE' : 'Pale Turquoise', // MISSING + 'ADD8E6' : 'Light Blue', // MISSING + 'DDA0DD' : 'Plum', // MISSING + 'D3D3D3' : 'Light Grey', // MISSING + 'FFF0F5' : 'Lavender Blush', // MISSING + 'FAEBD7' : 'Antique White', // MISSING + 'FFFFE0' : 'Light Yellow', // MISSING + 'F0FFF0' : 'Honeydew', // MISSING + 'F0FFFF' : 'Azure', // MISSING + 'F0F8FF' : 'Alice Blue', // MISSING + 'E6E6FA' : 'Lavender', // MISSING + 'FFF' : 'White' // MISSING + }, + + scayt : + { + title : 'å³ææ¼å¯«æª¢æ¥', + opera_title : 'Not supported by Opera', // MISSING + enable : 'åç¨å³ææ¼å¯«æª¢æ¥', + disable : 'ééå³ææ¼å¯«æª¢æ¥', + about : 'éæ¼å³ææ¼å¯«æª¢æ¥', + toggle : 'åç¨ï¼ééå³ææ¼å¯«æª¢æ¥', + options : 'é¸é ', + langs : 'èªè¨', + moreSuggestions : 'æ´å¤æ¼å¯«å»ºè°', + ignore : '忽ç¥', + ignoreAll : 'å ¨é¨å¿½ç¥', + addWord : 'æ·»å å®è©', + emptyDic : 'åå ¸åä¸æçºç©º.', + + optionsTab : 'é¸é ', + allCaps : 'Ignore All-Caps Words', // MISSING + ignoreDomainNames : 'Ignore Domain Names', // MISSING + mixedCase : 'Ignore Words with Mixed Case', // MISSING + mixedWithDigits : 'Ignore Words with Numbers', // MISSING + + languagesTab : 'èªè¨', + + dictionariesTab : 'åå ¸', + dic_field_name : 'Dictionary name', // MISSING + dic_create : 'Create', // MISSING + dic_restore : 'Restore', // MISSING + dic_delete : 'Delete', // MISSING + dic_rename : 'Rename', // MISSING + dic_info : 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING + + aboutTab : 'éæ¼' + }, + + about : + { + title : 'éæ¼ CKEditor', + dlgTitle : 'éæ¼ CKEditor', + help : 'Check $1 for help.', // MISSING + userGuide : 'CKEditor User\'s Guide', // MISSING + moreInfo : '訪åæåç網ç«ä»¥ç²åæ´å¤éæ¼åè°çä¿¡æ¯', + copy : 'Copyright © $1. All rights reserved.' + }, + + maximize : 'æ大å', + minimize : 'Minimize', // MISSING + + fakeobjects : + { + anchor : 'é¨é»', + flash : 'Flash åç«', + iframe : 'IFrame', // MISSING + hiddenfield : 'Hidden Field', // MISSING + unknown : 'ä¸æç©ä»¶' + }, + + resize : 'ææ½æ¹è®å¤§å°', + + colordialog : + { + title : 'Select color', // MISSING + options : 'Color Options', // MISSING + highlight : 'Highlight', // MISSING + selected : 'Selected Color', // MISSING + clear : 'Clear' // MISSING + }, + + toolbarCollapse : 'Collapse Toolbar', // MISSING + toolbarExpand : 'Expand Toolbar', // MISSING + + toolbarGroups : + { + document : 'Document', // MISSING + clipboard : 'Clipboard/Undo', // MISSING + editing : 'Editing', // MISSING + forms : 'Forms', // MISSING + basicstyles : 'Basic Styles', // MISSING + paragraph : 'Paragraph', // MISSING + links : 'Links', // MISSING + insert : 'Insert', // MISSING + styles : 'Styles', // MISSING + colors : 'Colors', // MISSING + tools : 'Tools' // MISSING + }, + + bidi : + { + ltr : 'Text direction from left to right', // MISSING + rtl : 'Text direction from right to left' // MISSING + }, + + docprops : + { + label : 'æ件屬æ§', + title : 'æ件屬æ§', + design : 'Design', // MISSING + meta : 'Meta è³æ', + chooseColor : 'Choose', // MISSING + other : '<å ¶ä»>', + docTitle : 'é é¢æ¨é¡', + charset : 'åå 編碼', + charsetOther : 'å ¶ä»åå 編碼', + charsetASCII : 'ASCII', // MISSING + charsetCE : 'ä¸æèªç³»', + charsetCT : 'æ£é«ä¸æ (Big5)', + charsetCR : 'æ¯æ夫æ', + charsetGR : 'å¸èæ', + charsetJP : 'æ¥æ', + charsetKR : 'éæ', + charsetTR : 'åè³å ¶æ', + charsetUN : 'Unicode (UTF-8)', // MISSING + charsetWE : '西æèªç³»', + docType : 'æ件é¡å', + docTypeOther : 'å ¶ä»æ件é¡å', + xhtmlDec : 'å å« XHTML å®ç¾©', + bgColor : 'èæ¯é¡è²', + bgImage : 'èæ¯å½±å', + bgFixed : '浮水å°', + txtColor : 'æåé¡è²', + margin : 'é é¢éç', + marginTop : 'ä¸', + marginLeft : 'å·¦', + marginRight : 'å³', + marginBottom : 'ä¸', + metaKeywords : 'æ件索å¼ééµå (ç¨åå½¢éè[,]åé)', + metaDescription : 'æ件說æ', + metaAuthor : 'ä½è ', + metaCopyright : 'çæ¬ææ', + previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING + } +}; diff --git a/_source/plugins/a11yhelp/dialogs/a11yhelp.js b/_source/plugins/a11yhelp/dialogs/a11yhelp.js new file mode 100644 index 0000000..ff07429 --- /dev/null +++ b/_source/plugins/a11yhelp/dialogs/a11yhelp.js @@ -0,0 +1,222 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'a11yHelp', function( editor ) +{ + var lang = editor.lang.accessibilityHelp, + id = CKEDITOR.tools.getNextId(); + + // CharCode <-> KeyChar. + var keyMap = + { + 8 : "BACKSPACE", + 9 : "TAB" , + 13 : "ENTER" , + 16 : "SHIFT" , + 17 : "CTRL" , + 18 : "ALT" , + 19 : "PAUSE" , + 20 : "CAPSLOCK" , + 27 : "ESCAPE" , + 33 : "PAGE UP" , + 34 : "PAGE DOWN" , + 35 : "END" , + 36 : "HOME" , + 37 : "LEFT ARROW" , + 38 : "UP ARROW" , + 39 : "RIGHT ARROW" , + 40 : "DOWN ARROW" , + 45 : "INSERT" , + 46 : "DELETE" , + 91 : "LEFT WINDOW KEY" , + 92 : "RIGHT WINDOW KEY" , + 93 : "SELECT KEY" , + 96 : "NUMPAD 0" , + 97 : "NUMPAD 1" , + 98 : "NUMPAD 2" , + 99 : "NUMPAD 3" , + 100 : "NUMPAD 4" , + 101 : "NUMPAD 5" , + 102 : "NUMPAD 6" , + 103 : "NUMPAD 7" , + 104 : "NUMPAD 8" , + 105 : "NUMPAD 9" , + 106 : "MULTIPLY" , + 107 : "ADD" , + 109 : "SUBTRACT" , + 110 : "DECIMAL POINT" , + 111 : "DIVIDE" , + 112 : "F1" , + 113 : "F2" , + 114 : "F3" , + 115 : "F4" , + 116 : "F5" , + 117 : "F6" , + 118 : "F7" , + 119 : "F8" , + 120 : "F9" , + 121 : "F10" , + 122 : "F11" , + 123 : "F12" , + 144 : "NUM LOCK" , + 145 : "SCROLL LOCK" , + 186 : "SEMI-COLON" , + 187 : "EQUAL SIGN" , + 188 : "COMMA" , + 189 : "DASH" , + 190 : "PERIOD" , + 191 : "FORWARD SLASH" , + 192 : "GRAVE ACCENT" , + 219 : "OPEN BRACKET" , + 220 : "BACK SLASH" , + 221 : "CLOSE BRAKET" , + 222 : "SINGLE QUOTE" + }; + + // Modifier keys override. + keyMap[ CKEDITOR.ALT ] = 'ALT'; + keyMap[ CKEDITOR.SHIFT ] = 'SHIFT'; + keyMap[ CKEDITOR.CTRL ] = 'CTRL'; + + // Sort in desc. + var modifiers = [ CKEDITOR.ALT, CKEDITOR.SHIFT, CKEDITOR.CTRL ]; + + function representKeyStroke( keystroke ) + { + var quotient, + modifier, + presentation = []; + + for ( var i = 0; i < modifiers.length; i++ ) + { + modifier = modifiers[ i ]; + quotient = keystroke / modifiers[ i ]; + if ( quotient > 1 && quotient <= 2 ) + { + keystroke -= modifier; + presentation.push( keyMap[ modifier ] ); + } + } + + presentation.push( keyMap[ keystroke ] + || String.fromCharCode( keystroke ) ); + + return presentation.join( '+' ); + } + + var variablesPattern = /\$\{(.*?)\}/g; + function replaceVariables( match, name ) + { + var keystrokes = editor.config.keystrokes, + definition, + length = keystrokes.length; + + for ( var i = 0; i < length; i++ ) + { + definition = keystrokes[ i ]; + if ( definition[ 1 ] == name ) + break; + } + return representKeyStroke( definition[ 0 ] ); + } + + // Create the help list directly from lang file entries. + function buildHelpContents() + { + var pageTpl = '<div class="cke_accessibility_legend" role="document" aria-labelledby="' + id + '_arialbl" tabIndex="-1">%1</div>' + + '<span id="' + id + '_arialbl" class="cke_voice_label">' + lang.contents + ' </span>', + sectionTpl = '<h1>%1</h1><dl>%2</dl>', + itemTpl = '<dt>%1</dt><dd>%2</dd>'; + + var pageHtml = [], + sections = lang.legend, + sectionLength = sections.length; + + for ( var i = 0; i < sectionLength; i++ ) + { + var section = sections[ i ], + sectionHtml = [], + items = section.items, + itemsLength = items.length; + + for ( var j = 0; j < itemsLength; j++ ) + { + var item = items[ j ], + itemHtml; + itemHtml = itemTpl.replace( '%1', item.name ). + replace( '%2', item.legend.replace( variablesPattern, replaceVariables ) ); + sectionHtml.push( itemHtml ); + } + + pageHtml.push( sectionTpl.replace( '%1', section.name ).replace( '%2', sectionHtml.join( '' ) ) ); + } + + return pageTpl.replace( '%1', pageHtml.join( '' ) ); + } + + return { + title : lang.title, + minWidth : 600, + minHeight : 400, + contents : [ + { + id : 'info', + label : editor.lang.common.generalTab, + expand : true, + elements : + [ + { + type : 'html', + id : 'legends', + style : 'white-space:normal;', + focus : function() {}, + html : buildHelpContents() + + '<style type="text/css">' + + '.cke_accessibility_legend' + + '{' + + 'width:600px;' + + 'height:400px;' + + 'padding-right:5px;' + + 'overflow-y:auto;' + + 'overflow-x:hidden;' + + '}' + + // Some adjustments are to be done for IE6 and Quirks to work "properly" (#5757) + '.cke_browser_quirks .cke_accessibility_legend,' + + '.cke_browser_ie6 .cke_accessibility_legend' + + '{' + + 'height:390px' + + '}' + + // Override non-wrapping white-space rule in reset css. + '.cke_accessibility_legend *' + + '{' + + 'white-space:normal;' + + '}' + + '.cke_accessibility_legend h1' + + '{' + + 'font-size: 20px;' + + 'border-bottom: 1px solid #AAA;' + + 'margin: 5px 0px 15px;' + + '}' + + '.cke_accessibility_legend dl' + + '{' + + 'margin-left: 5px;' + + '}' + + '.cke_accessibility_legend dt' + + '{' + + 'font-size: 13px;' + + 'font-weight: bold;' + + '}' + + '.cke_accessibility_legend dd' + + '{' + + 'margin:10px' + + '}' + + '</style>' + } + ] + } + ], + buttons : [ CKEDITOR.dialog.cancelButton ] + }; +}); diff --git a/_source/plugins/a11yhelp/lang/en.js b/_source/plugins/a11yhelp/lang/en.js new file mode 100644 index 0000000..a3edc25 --- /dev/null +++ b/_source/plugins/a11yhelp/lang/en.js @@ -0,0 +1,108 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang( 'a11yhelp', 'en', +{ + accessibilityHelp : + { + title : 'Accessibility Instructions', + contents : 'Help Contents. To close this dialog press ESC.', + legend : + [ + { + name : 'General', + items : + [ + { + name : 'Editor Toolbar', + legend: + 'Press ${toolbarFocus} to navigate to the toolbar. ' + + 'Move to the next and previous toolbar group with TAB and SHIFT-TAB. ' + + 'Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. ' + + 'Press SPACE or ENTER to activate the toolbar button.' + }, + + { + name : 'Editor Dialog', + legend : + 'Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. ' + + 'For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. ' + + 'Then move to next tab with TAB OR RIGTH ARROW. ' + + 'Move to previous tab with SHIFT + TAB or LEFT ARROW. ' + + 'Press SPACE or ENTER to select the tab page.' + }, + + { + name : 'Editor Context Menu', + legend : + 'Press ${contextMenu} or APPLICATION KEY to open context-menu. ' + + 'Then move to next menu option with TAB or DOWN ARROW. ' + + 'Move to previous option with SHIFT+TAB or UP ARROW. ' + + 'Press SPACE or ENTER to select the menu option. ' + + 'Open sub-menu of current option wtih SPACE or ENTER or RIGHT ARROW. ' + + 'Go back to parent menu item with ESC or LEFT ARROW. ' + + 'Close context menu with ESC.' + }, + + { + name : 'Editor List Box', + legend : + 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. ' + + 'Move to previous list item with SHIFT + TAB or UP ARROW. ' + + 'Press SPACE or ENTER to select the list option. ' + + 'Press ESC to close the list-box.' + }, + + { + name : 'Editor Element Path Bar', + legend : + 'Press ${elementsPathFocus} to navigate to the elements path bar. ' + + 'Move to next element button with TAB or RIGHT ARROW. ' + + 'Move to previous button with SHIFT+TAB or LEFT ARROW. ' + + 'Press SPACE or ENTER to select the element in editor.' + } + ] + }, + { + name : 'Commands', + items : + [ + { + name : ' Undo command', + legend : 'Press ${undo}' + }, + { + name : ' Redo command', + legend : 'Press ${redo}' + }, + { + name : ' Bold command', + legend : 'Press ${bold}' + }, + { + name : ' Italic command', + legend : 'Press ${italic}' + }, + { + name : ' Underline command', + legend : 'Press ${underline}' + }, + { + name : ' Link command', + legend : 'Press ${link}' + }, + { + name : ' Toolbar Collapse command', + legend : 'Press ${toolbarCollapse}' + }, + { + name : ' Accessibility Help', + legend : 'Press ${a11yHelp}' + } + ] + } + ] + } +}); diff --git a/_source/plugins/a11yhelp/lang/he.js b/_source/plugins/a11yhelp/lang/he.js new file mode 100644 index 0000000..d708b86 --- /dev/null +++ b/_source/plugins/a11yhelp/lang/he.js @@ -0,0 +1,216 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang( 'a11yhelp', 'he', +{ + accessibilityHelp : + { + title : '××ר××ת × ××ש×ת', + contents : '××ר××ת × ××ש×ת. ×ס×××¨× ×××¥ ×סק××פ (ESC).', + legend : + [ + { + name : '××××', + items : + [ + { + name : 'סר×× ×××××', + legend: + '×××¥ ×¢× ${toolbarFocus} ××× ×× ××× ×סר×× ×××××. ' + + '×¢××ר ××פת×ר ××× ×¢× ×קש ×××× (TAB) ×× ××¥ ש××××. ' + + '×¢××ר ××פת×ר ×ק××× ×¢× ×קש ×ש××¤× (SHIFT) + ××× (TAB) ×× ××¥ ××× ×. ' + + '×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××פע×× ×ת ××פת×ר ×× ××ר.' + }, + + { + name : '×××××××× (×××× ×ת תש×××)', + legend : + '×ת×× ××××××, ×××¥ ××× (TAB) ××× ×× ××× ×ש×× ×××, ×××¥ ש××¤× (SHIFT) + ××× (TAB) ××× ×× ××× ×ש×× ×ק×××, ×××¥ ×× ×ר (ENTER) ××× ×ש××× ×ת ×××××××, ×××¥ ×סק××פ (ESC) ××× ××××. ' + + '×ת×× ×××××××× ××¢×× ×ספר ××××× (×ש×× ××ת), ×××¥ ××× (ALT) + F10 ××× ×× ××× ×ש×רת ××××××. ' + + '× ××× ×××× ××× ×¢× ××× (TAB) ×× ××¥ ש××××. ' + + '×¢××ר ×××× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ש××××. ' + + '×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××× ×¡ ××××.' + }, + + { + name : 'תפר×× ××קשר (Context Menu)', + legend : + '×××¥ ${contextMenu} ×× APPLICATION KEY××× ×פת×× ×ת תפר×× ××קשר. ' + + '×¢××ר ××פשר×ת ×××× ×¢× ××× (TAB) ×× ××¥ ××××. ' + + '×¢××ר ××פשר×ת ×ק×××ת ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ×××¢××. ' + + '×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××ר ×ת ××פשר×ת. ' + + '×¤×ª× ×ת תת ×תפר×× (Sub-menu) ×©× ××פשר×ת ×× ××××ת ×¢× ×¨××× ×× ×× ×ר (ENTER) ×× ××¥ ש××××. ' + + '×××ר ×תפר×× ××× ×¢× ×סק××פ (ESC) ×× ××¥ ש××××. ' + + 'ס××ר ×ת תפר×× ××קשר ×¢× ×סק××פ (ESC).' + }, + + { + name : 'תפר×××× ×¦×¤×× (List boxes)', + legend : + '×ת×× ×ª×¤×¨×× ×¦×£, ×¢××ר ×פר×× ××× ×¢× ××× (TAB) ×× ××¥ ××××. ' + + '×¢××ר ×תפר×× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) or ××¥ ×¢××××. ' + + 'Press SPACE or ENTER to select the list option. ' + + 'Press ESC to close the list-box.' + }, + + { + name : '×¢×¥ ×××× ××× (Elements Path)', + legend : + '×××¥ ${elementsPathFocus} ××× ×× ××× ××¢×¥ ××××× ×××. ' + + '×¢××ר ×פר×× ××× ×¢× ××× (TAB) ×× ××¥ ××× ×. ' + + '×¢××ר ×פר×× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ש××××. ' + + '×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××ר ×ת ××××× × ××¢×ר×.' + } + ] + }, + { + name : 'פק×××ת', + items : + [ + { + name : ' ××××× ×¦×¢× ××ר××', + legend : '×××¥ ${undo}' + }, + { + name : ' ×××¨× ×¢× ×¦×¢× ××ר××', + legend : '×××¥ ${redo}' + }, + { + name : ' ×××ש×', + legend : '×××¥ ${bold}' + }, + { + name : ' ×××××', + legend : '×××¥ ${italic}' + }, + { + name : ' ××ספת ×§× ×ª×ת××', + legend : '×××¥ ${underline}' + }, + { + name : ' ××ספת ××× ×§', + legend : '×××¥ ${link}' + }, + { + name : ' ×××××¥ סר×× ×××××', + legend : '×××¥ ${toolbarCollapse}' + }, + { + name : ' ××ר××ת × ××ש×ת', + legend : '×××¥ ${a11yHelp}' + } + ] + } + ] + } +}); +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang( 'a11yhelp', 'he', +{ + accessibilityHelp : + { + title : '××ר××ת × ××ש×ת', + contents : '××ר××ת × ××ש×ת. ×ס×××¨× ×××¥ ×סק××פ (ESC).', + legend : + [ + { + name : '××××', + items : + [ + { + name : 'סר×× ×××××', + legend: + '×××¥ ×¢× ${toolbarFocus} ××× ×× ××× ×סר×× ×××××. ' + + '×¢××ר ××פת×ר ××× ×¢× ×קש ×××× (TAB) ×× ××¥ ש××××. ' + + '×¢××ר ××פת×ר ×ק××× ×¢× ×קש ×ש××¤× (SHIFT) + ××× (TAB) ×× ××¥ ××× ×. ' + + '×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××פע×× ×ת ××פת×ר ×× ××ר.' + }, + + { + name : '×××××××× (×××× ×ת תש×××)', + legend : + '×ת×× ××××××, ×××¥ ××× (TAB) ××× ×× ××× ×ש×× ×××, ×××¥ ש××¤× (SHIFT) + ××× (TAB) ××× ×× ××× ×ש×× ×ק×××, ×××¥ ×× ×ר (ENTER) ××× ×ש××× ×ת ×××××××, ×××¥ ×סק××פ (ESC) ××× ××××. ' + + '×ת×× ×××××××× ××¢×× ×ספר ××××× (×ש×× ××ת), ×××¥ ××× (ALT) + F10 ××× ×× ××× ×ש×רת ××××××. ' + + '× ××× ×××× ××× ×¢× ××× (TAB) ×× ××¥ ש××××. ' + + '×¢××ר ×××× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ש××××. ' + + '×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××× ×¡ ××××.' + }, + + { + name : 'תפר×× ××קשר (Context Menu)', + legend : + '×××¥ ${contextMenu} ×× APPLICATION KEY××× ×פת×× ×ת תפר×× ××קשר. ' + + '×¢××ר ××פשר×ת ×××× ×¢× ××× (TAB) ×× ××¥ ××××. ' + + '×¢××ר ××פשר×ת ×ק×××ת ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ×××¢××. ' + + '×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××ר ×ת ××פשר×ת. ' + + '×¤×ª× ×ת תת ×תפר×× (Sub-menu) ×©× ××פשר×ת ×× ××××ת ×¢× ×¨××× ×× ×× ×ר (ENTER) ×× ××¥ ש××××. ' + + '×××ר ×תפר×× ××× ×¢× ×סק××פ (ESC) ×× ××¥ ש××××. ' + + 'ס××ר ×ת תפר×× ××קשר ×¢× ×סק××פ (ESC).' + }, + + { + name : 'תפר×××× ×¦×¤×× (List boxes)', + legend : + '×ת×× ×ª×¤×¨×× ×¦×£, ×¢××ר ×פר×× ××× ×¢× ××× (TAB) ×× ××¥ ××××. ' + + '×¢××ר ×תפר×× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) or ××¥ ×¢××××. ' + + 'Press SPACE or ENTER to select the list option. ' + + 'Press ESC to close the list-box.' + }, + + { + name : '×¢×¥ ×××× ××× (Elements Path)', + legend : + '×××¥ ${elementsPathFocus} ××× ×× ××× ××¢×¥ ××××× ×××. ' + + '×¢××ר ×פר×× ××× ×¢× ××× (TAB) ×× ××¥ ××× ×. ' + + '×¢××ר ×פר×× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ש××××. ' + + '×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××ר ×ת ××××× × ××¢×ר×.' + } + ] + }, + { + name : 'פק×××ת', + items : + [ + { + name : ' ××××× ×¦×¢× ××ר××', + legend : '×××¥ ${undo}' + }, + { + name : ' ×××¨× ×¢× ×¦×¢× ××ר××', + legend : '×××¥ ${redo}' + }, + { + name : ' ×××ש×', + legend : '×××¥ ${bold}' + }, + { + name : ' ×××××', + legend : '×××¥ ${italic}' + }, + { + name : ' ××ספת ×§× ×ª×ת××', + legend : '×××¥ ${underline}' + }, + { + name : ' ××ספת ××× ×§', + legend : '×××¥ ${link}' + }, + { + name : ' ×××××¥ סר×× ×××××', + legend : '×××¥ ${toolbarCollapse}' + }, + { + name : ' ××ר××ת × ××ש×ת', + legend : '×××¥ ${a11yHelp}' + } + ] + } + ] + } +}); diff --git a/_source/plugins/a11yhelp/plugin.js b/_source/plugins/a11yhelp/plugin.js new file mode 100644 index 0000000..80e556c --- /dev/null +++ b/_source/plugins/a11yhelp/plugin.js @@ -0,0 +1,47 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Plugin definition for the a11yhelp, which provides a dialog + * with accessibility related help. + */ + +(function() +{ + var pluginName = 'a11yhelp', + commandName = 'a11yHelp'; + + CKEDITOR.plugins.add( pluginName, + { + // List of available localizations. + availableLangs : { en:1, he:1 }, + + init : function( editor ) + { + var plugin = this; + editor.addCommand( commandName, + { + exec : function() + { + var langCode = editor.langCode; + langCode = plugin.availableLangs[ langCode ] ? langCode : 'en'; + + CKEDITOR.scriptLoader.load( + CKEDITOR.getUrl( plugin.path + 'lang/' + langCode + '.js' ), + function() + { + CKEDITOR.tools.extend( editor.lang, plugin.langEntries[ langCode ] ); + editor.openDialog( commandName ); + }); + }, + modes : { wysiwyg:1, source:1 }, + readOnly : 1, + canUndo : false + }); + + CKEDITOR.dialog.add( commandName, this.path + 'dialogs/a11yhelp.js' ); + } + }); +})(); diff --git a/_source/plugins/about/dialogs/about.js b/_source/plugins/about/dialogs/about.js new file mode 100644 index 0000000..1bb2e5d --- /dev/null +++ b/_source/plugins/about/dialogs/about.js @@ -0,0 +1,76 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'about', function( editor ) +{ + var lang = editor.lang.about; + + return { + title : CKEDITOR.env.ie ? lang.dlgTitle : lang.title, + minWidth : 390, + minHeight : 230, + contents : [ + { + id : 'tab1', + label : '', + title : '', + expand : true, + padding : 0, + elements : + [ + { + type : 'html', + html : + '<style type="text/css">' + + '.cke_about_container' + + '{' + + 'color:#000 !important;' + + 'padding:10px 10px 0;' + + 'margin-top:5px' + + '}' + + '.cke_about_container p' + + '{' + + 'margin: 0 0 10px;' + + '}' + + '.cke_about_container .cke_about_logo' + + '{' + + 'height:81px;' + + 'background-color:#fff;' + + 'background-image:url(' + CKEDITOR.plugins.get( 'about' ).path + 'dialogs/logo_ckeditor.png);' + + 'background-position:center; ' + + 'background-repeat:no-repeat;' + + 'margin-bottom:10px;' + + '}' + + '.cke_about_container a' + + '{' + + 'cursor:pointer !important;' + + 'color:blue !important;' + + 'text-decoration:underline !important;' + + '}' + + '</style>' + + '<div class="cke_about_container">' + + '<div class="cke_about_logo"></div>' + + '<p>' + + 'CKEditor ' + CKEDITOR.version + ' (revision ' + CKEDITOR.revision + ')<br>' + + '<a href="http://ckeditor.com/">http://ckeditor.com</a>' + + '</p>' + + '<p>' + + lang.help.replace( '$1', '<a href="http://docs.cksource.com/CKEditor_3.x/Users_Guide/Quick_Reference">' + lang.userGuide + '</a>' ) + + '</p>' + + '<p>' + + lang.moreInfo + '<br>' + + '<a href="http://ckeditor.com/license">http://ckeditor.com/license</a>' + + '</p>' + + '<p>' + + lang.copy.replace( '$1', '<a href="http://cksource.com/">CKSource</a> - Frederico Knabben' ) + + '</p>' + + '</div>' + } + ] + } + ], + buttons : [ CKEDITOR.dialog.cancelButton ] + }; +} ); diff --git a/_source/plugins/about/dialogs/logo_ckeditor.png b/_source/plugins/about/dialogs/logo_ckeditor.png new file mode 100644 index 0000000000000000000000000000000000000000..ad0190218c15869fc273b2b5b8e476405bcdab97 GIT binary patch literal 2759 zcmV;&3OMzNP)<h;3K|Lk000e1NJLTq005%^002D*0{{R3_TDLh00090P)t-sCd=sm z|Nn@MjyOC$_xJbo^z@*lrNF|&@9^;O`~9e^tdNzK#_{;q+1cdz{KW3|_5J=_-tn&S z`ThO<@$vE0_51Ps{o(fd`T6-E$mV3)@7VVHS>Eu3>h~qY;_K_{9>?bB=;$)e>7t~h zH_PTS(d**k;-=>Ey6*Q*)$G&r`I6=HTi5NF<ME8`_{Yl1YTfYX=;*cb`ttJf^Yim{ z=Ja4=WY5vkn(6hpySu%<zV`O^5WCxa>Gp_<i{IhlYUA_b_xnNC?OfaM<mBXJ;quDM z%Lla79L408@A>BD=G^%FHq-18yxecu>>bACvhMip?d{C;`g(nScjxs8wbdfY=bG^O zUeoA=+w0cW)|i}~Q{3>5;_<ET_<HE}P}}br!{X5P`+nl`Q`72h;qrOe>)qYmz3}+A z?Dmc3^qb}LHqz^e=JbKz@k!O}k?#0m;qoNP=iuPrD$VH{#N*`U<ru=@RL$fp&gpaD z@e;k<Q&v~P^7-of{rmg-F3;+S?DrMG-xI#w)YQ}?%I8(s?m^4tu(PyP-0($7N-NIk zEzjz0aB&pB-V?sw3%A#=v9S-j+U4cte%<c|v(p>I<8S2i#`OAW)aWS8=#T35k=^U0 z?e|~b@-D>R$@2N<`~9fs^rPzbH`MHa>Gn$5?<&dWSKRNF=JY(&>@U#jG}7xC!s4~+ z^hnX_y7l{~?DkFC?*p;WZRGQL-|-f~;DqG#?Ck8S>h+ZC_c+Afi|O|M{{G<k{6){{ zGsxo;w$yUv^g7h+Fwp8Bz}<-B@{;HDMAz*Oy4el6*>d9YJksj~veInU>JYr!i{S4% z(dw0#m_)|j+S=MX#^62E>}TThgzoru*62&j<UPpY(b3UF)9W9|<_Wgec;fS2(&uB( z<DTdA&G`JS>-Mtf@(Q-reCG6D)ap~)@H@`wB)ivf+wMl#?a}e~vF-O@)#^Rg?V;lC zd)n;D_x#rR{Xf*~Ki2IDwbg*-^RMjomEi6SxY&Z>@u1Wdd;kCkg-Jv~RCr$P+H;IN z+Y$%xt?nLkZQHhO|7_c~ZQJ&>ZQFjf?Yyef+nt`>-fUj(OM33jJ^$=vb~gFsd#0++ zNv{XE|N7<|&vz6QTy$fjbM;Hrw_=}Pw>-m5jm@WDtGaQi<yP#?<%>?7b3fyntl6I9 zuDtxW=UOO6G$y;3(K%sg?tIVfqwf7p)s2=}BGDtojf~A+j~~7NquMhe+bPCN6yvU) zXx!{3#`Aw3Q(8JG_h?1!d`~1QV_YyKL3^X$U+$ilwm!6U?4V~cM$eE@_g;DV50|Pk zf`aDmT!h5HIa(W?cMolxH!m&pa_OLFr5LMc7tB~efCo;H@h+{6Swqo?F<u^<i!sjk zoIksxnE)4K*S+&ki1HW`7}0Lm*!VHUxSqv$f5qctd=W6=rHqV@E-dO<kg|Emml5rc zXl;~YJn1#T3Gigc_gKNKfVo&OiBS||Lz~9N^&&A816*_LWUbV9KJ*K|emyxkg@{LD zG&XuQrlp03mijugekS!DHet5d86b#^<9)R?{wR&@G<ZpUr)qn_3>wtb8dKocM7%vy z<K9!s`VKsbeTPk$s?`9&ulKZXc%;2y@%W`b*VYJ)tnb*fu<wMhLEUxF3cuiY7%|XV zi7_sHaD&E1FV=Um?9!lqt{^yei(fDrvG2@*rxugZp{?=Bv87{kkDi1IEEsm)Spl!_ z3W5hH#)!M%5E1wMNexgGy@SV<7afg&I-ai+0XBRW-_di@+U5et<kA5Iv+%zdVGtYC z&VrCp<7iN~{1qnd+Ih|{w#G{9Z8C0E5w7B;MLgNK1d01$0Hc{R02s}g{mYE>hw0@O z(b&k&J6)^gzBA3fd{H7KGvfsy;@*{}-o$r#en+&8OwqfQ#wAFP1~TeZ0c0c|G7KCV z`(GTGEoM$MX3?OoJ-r6|4qXsppAUi;Pk8(geo3vd4StWtjVt4O5zBbKOa?3|6OA%) zKqFfN8_kk&O$EkyW-?61z9U``rujuJh%zOhu^|jnDaO|0uEhN$aap1<JCEnzh5wte zT<9@EZUyz7^9AzB_6yUG7YvyLlc?_`B~grToplwh;&+3Jk%(oWYBU-wSUv`$XiVp9 z0>_qxdD6}Ja-=~J=>p{IIhzrT0LC8UqwIn(?U;Dax``KrWJnB*@U1+8eJ2&3-ng>0 z<Umrd80*xG_|5DFRii;FpnMf$re6N7Xe>mq>s{d(8`KX$m3$S9vReZqCb7P=4Bo^T zOJ4bx64cG-fr=4{yFt}hND&fsBxmR`%6kn)3ui_**tRhwet^S@cQrag&ftXk1x%K1 z)E*u|G^nSW!f3?AQ;Y|eDM5LBw~BEUucYf0ttX$;laQ8~>toc*Rb;bRjA*nN`rf%- z3!%Q#d=C<(dzQ8GYD0|a0@m~$Q!B>!>c3sTj%6yw9mrgwYSded3VSc3jVqKr`S{v^ z``p)fn%%Psg5|3q-C;%_8UHqHr4jQP5%)O;%&{nskScp^B!$fAZ7k%BAg_@lX|Gj` z6UNb?u7*VEMvWJQnGiERtkSV(?^zgL@+umKE4!om_c5Cx`x?u+d`0i+Z8R%mE3}}o zT*V02*r4{CD90Gle$_O6>4U?lVEi2v<4+$`&Ox5HsTe^-er;o>n(-fOP*3|E^&KM8 zggFG0Hf(VCzt9?QLgK!!2Ac-%k4oggd!63jUJGi*F>Fvz^pj(xlWkHZoh7Ec^}+`f z<KX(AxCR-m%(X}~N=R2@e>Ib?Rx^hFjOVK`#@M;AMIzD#VG_K#XQRVWa)5|`A6)+f zmm`HV^T<`k@0W}c($#2F={*F>SM5FOM!3e>xBW%2V9-b>+tguu@ymDs3kG+({_wB* zo_okrgj~s}L=N1;%Q?NE+QZe253xag@thnZoosPXPl4mFuo&wPAAZB%wMdlbN1JSv zk$O&E0;2lNLaBuch?G8SL1Mqg)ihz&WdO#=h!kVkuy}un#~Amq7~i<>l=?ZmJGw}! z83nS=#VDUC1W*`-ZDdqAQ>Yr9Y{JZf3@OH~Z#w|)O!>4#jFE`<4cGX&LNy!I2?<1u zX`60>q|{;Tyd(A<W;~^_aRzJODUdLFrZ1Q-v^`BHTX9fJ#Ai$z8@pI*+?-;yT1P)6 z77WEG?ld#L_gm1|2=bs73x>s5BK4hTmi^HmKyzb;qJ1+Woorc*@0}78)ZTbe9@LB3 zjan?2$39^b&`pfNQjGFWpFJLLa<gZeiSnREW7zjolicvRYl1wev46Ykv*G_xj4_9% z`?>S;YhSC?{w@DMfbWb?c&`lz5Q=rWoa}5LqqKZ{vU7C0Vj&=4t+%(9#wSo$tV3Dn z!{L#cO*L_G3#AnoS97o_GBUig)0nN(2`JUbxK_~RATT@<c?+jbecv`>)27ea+BCxU z{?w@p7uGaIhCfWq;s9-s9^RB9hA1ORNozz8G45a{MrriP(Fs}^!P}cQI|rSe;o*_E z-3M#f!hLQ+9YyGa8PZm3S~FBNR5nyMv~qHC*w135v5NT?^q%jG{{>TbMQK%m_%Hwf N002ovPDHLkV1f@(614yT literal 0 HcmV?d00001 diff --git a/_source/plugins/about/plugin.js b/_source/plugins/about/plugin.js new file mode 100644 index 0000000..29451c6 --- /dev/null +++ b/_source/plugins/about/plugin.js @@ -0,0 +1,24 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'about', +{ + requires : [ 'dialog' ], + init : function( editor ) + { + var command = editor.addCommand( 'about', new CKEDITOR.dialogCommand( 'about' ) ); + command.modes = { wysiwyg:1, source:1 }; + command.canUndo = false; + command.readOnly = 1; + + editor.ui.addButton( 'About', + { + label : editor.lang.about.title, + command : 'about' + }); + + CKEDITOR.dialog.add( 'about', this.path + 'dialogs/about.js' ); + } +}); diff --git a/_source/plugins/adobeair/plugin.js b/_source/plugins/adobeair/plugin.js new file mode 100644 index 0000000..8cd799b --- /dev/null +++ b/_source/plugins/adobeair/plugin.js @@ -0,0 +1,228 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var eventNameList = [ 'click', 'keydown', 'mousedown', 'keypress', 'mouseover', 'mouseout' ]; + + // Inline event callbacks assigned via innerHTML/outerHTML, such as + // onclick/onmouseover, are ignored in AIR. + // Use DOM2 event listeners to substitue inline handlers instead. + function convertInlineHandlers( container ) + { + // TODO: document.querySelectorAll is not supported in AIR. + var children = container.getElementsByTag( '*' ), + count = children.count(), + child; + + for ( var i = 0; i < count; i++ ) + { + child = children.getItem( i ); + + (function( node ) + { + for ( var j = 0; j < eventNameList.length; j++ ) + { + (function( eventName ) + { + var inlineEventHandler = node.getAttribute( 'on' + eventName ); + if ( node.hasAttribute( 'on' + eventName ) ) + { + node.removeAttribute( 'on' + eventName ); + node.on( eventName, function( evt ) + { + var callFunc = /(return\s*)?CKEDITOR\.tools\.callFunction\(([^)]+)\)/.exec( inlineEventHandler ), + hasReturn = callFunc && callFunc[ 1 ], + callFuncArgs = callFunc && callFunc[ 2 ].split( ',' ), + preventDefault = /return false;/.test( inlineEventHandler ); + + if ( callFuncArgs ) + { + var nums = callFuncArgs.length, + argName; + + for ( var i = 0; i < nums; i++ ) + { + // Trim spaces around param. + callFuncArgs[ i ] = argName = CKEDITOR.tools.trim( callFuncArgs[ i ] ); + + // String form param. + var strPattern = argName.match( /^(["'])([^"']*?)\1$/ ); + if ( strPattern ) + { + callFuncArgs[ i ] = strPattern[ 2 ]; + continue; + } + + // Integer form param. + if ( argName.match( /\d+/ ) ) + { + callFuncArgs[ i ] = parseInt( argName, 10 ); + continue; + } + + // Speical variables. + switch( argName ) + { + case 'this' : + callFuncArgs[ i ] = node.$; + break; + case 'event' : + callFuncArgs[ i ] = evt.data.$; + break; + case 'null' : + callFuncArgs [ i ] = null; + break; + } + } + + var retval = CKEDITOR.tools.callFunction.apply( window, callFuncArgs ); + if ( hasReturn && retval === false ) + preventDefault = 1; + } + + if ( preventDefault ) + evt.data.preventDefault(); + }); + } + })( eventNameList[ j ] ); + } + })( child ); + } + } + + CKEDITOR.plugins.add( 'adobeair', + { + init : function( editor ) + { + if ( !CKEDITOR.env.air ) + return; + + // Body doesn't get default margin on AIR. + editor.addCss( 'body { padding: 8px }' ); + + editor.on( 'uiReady', function() + { + convertInlineHandlers( editor.container ); + + if ( editor.sharedSpaces ) + { + for ( var space in editor.sharedSpaces ) + convertInlineHandlers( editor.sharedSpaces[ space ] ); + } + + editor.on( 'elementsPathUpdate', function( evt ) { convertInlineHandlers( evt.data.space ); } ); + }); + + editor.on( 'contentDom', function() + { + // Hyperlinks are enabled in editable documents in Adobe + // AIR. Prevent their click behavior. + editor.document.on( 'click', function( ev ) + { + ev.data.preventDefault( true ); + }); + }); + } + }); + + CKEDITOR.ui.on( 'ready', function( evt ) + { + var ui = evt.data; + // richcombo, panelbutton and menu + if ( ui._.panel ) + { + var panel = ui._.panel._.panel, + holder; + + ( function() + { + // Adding dom event listeners off-line are not supported in AIR, + // waiting for panel iframe loaded. + if ( !panel.isLoaded ) + { + setTimeout( arguments.callee, 30 ); + return; + } + holder = panel._.holder; + convertInlineHandlers( holder ); + })(); + } + else if ( ui instanceof CKEDITOR.dialog ) + convertInlineHandlers( ui._.element ); + }); +})(); + +CKEDITOR.dom.document.prototype.write = CKEDITOR.tools.override( CKEDITOR.dom.document.prototype.write, + function( original_write ) + { + function appendElement( parent, tagName, fullTag, text ) + { + var node = parent.append( tagName ), + attrs = CKEDITOR.htmlParser.fragment.fromHtml( fullTag ).children[ 0 ].attributes; + attrs && node.setAttributes( attrs ); + text && node.append( parent.getDocument().createText( text ) ); + } + + return function( html, mode ) + { + // document.write() or document.writeln() fail silently after + // the page load event in Adobe AIR. + // DOM manipulation could be used instead. + if ( this.getBody() ) + { + // We're taking the below extra work only because innerHTML + // on <html> element doesn't work as expected. + var doc = this, + head = this.getHead(); + + // Create style nodes for inline css. ( <style> content doesn't applied when setting via innerHTML ) + html = html.replace( /(<style[^>]*>)([\s\S]*?)<\/style>/gi, + function ( match, startTag, styleText ) + { + appendElement( head, 'style', startTag, styleText ); + return ''; + }); + + html = html.replace( /<base\b[^>]*\/>/i, + function( match ) + { + appendElement( head, 'base', match ); + return ''; + }); + + html = html.replace( /<title>([\s\S]*)<\/title>/i, + function( match, title ) + { + doc.$.title = title; + return ''; + }); + + // Move the rest of head stuff. + html = html.replace( /<head>([\s\S]*)<\/head>/i, + function( headHtml ) + { + // Inject the <head> HTML inside a <div>. + // Do that before getDocumentHead because WebKit moves + // <link css> elements to the <head> at this point. + var div = new CKEDITOR.dom.element( 'div', doc ); + div.setHtml( headHtml ); + // Move the <div> nodes to <head>. + div.moveChildren( head ); + return ''; + }); + + html.replace( /(<body[^>]*>)([\s\S]*)(?=$|<\/body>)/i, + function( match, startTag, innerHTML ) + { + doc.getBody().setHtml( innerHTML ); + var attrs = CKEDITOR.htmlParser.fragment.fromHtml( startTag ).children[ 0 ].attributes; + attrs && doc.getBody().setAttributes( attrs ); + }); + } + else + original_write.apply( this, arguments ); + }; + }); diff --git a/_source/plugins/ajax/plugin.js b/_source/plugins/ajax/plugin.js new file mode 100644 index 0000000..a4b713a --- /dev/null +++ b/_source/plugins/ajax/plugin.js @@ -0,0 +1,152 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.ajax} object, which holds ajax methods for + * data loading. + */ + +(function() +{ + CKEDITOR.plugins.add( 'ajax', + { + requires : [ 'xml' ] + }); + + /** + * Ajax methods for data loading. + * @namespace + * @example + */ + CKEDITOR.ajax = (function() + { + var createXMLHttpRequest = function() + { + // In IE, using the native XMLHttpRequest for local files may throw + // "Access is Denied" errors. + if ( !CKEDITOR.env.ie || location.protocol != 'file:' ) + try { return new XMLHttpRequest(); } catch(e) {} + + try { return new ActiveXObject( 'Msxml2.XMLHTTP' ); } catch (e) {} + try { return new ActiveXObject( 'Microsoft.XMLHTTP' ); } catch (e) {} + + return null; + }; + + var checkStatus = function( xhr ) + { + // HTTP Status Codes: + // 2xx : Success + // 304 : Not Modified + // 0 : Returned when running locally (file://) + // 1223 : IE may change 204 to 1223 (see http://dev.jquery.com/ticket/1450) + + return ( xhr.readyState == 4 && + ( ( xhr.status >= 200 && xhr.status < 300 ) || + xhr.status == 304 || + xhr.status === 0 || + xhr.status == 1223 ) ); + }; + + var getResponseText = function( xhr ) + { + if ( checkStatus( xhr ) ) + return xhr.responseText; + return null; + }; + + var getResponseXml = function( xhr ) + { + if ( checkStatus( xhr ) ) + { + var xml = xhr.responseXML; + return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText ); + } + return null; + }; + + var load = function( url, callback, getResponseFn ) + { + var async = !!callback; + + var xhr = createXMLHttpRequest(); + + if ( !xhr ) + return null; + + xhr.open( 'GET', url, async ); + + if ( async ) + { + // TODO: perform leak checks on this closure. + /** @ignore */ + xhr.onreadystatechange = function() + { + if ( xhr.readyState == 4 ) + { + callback( getResponseFn( xhr ) ); + xhr = null; + } + }; + } + + xhr.send(null); + + return async ? '' : getResponseFn( xhr ); + }; + + return /** @lends CKEDITOR.ajax */ { + + /** + * Loads data from an URL as plain text. + * @param {String} url The URL from which load data. + * @param {Function} [callback] A callback function to be called on + * data load. If not provided, the data will be loaded + * synchronously. + * @returns {String} The loaded data. For asynchronous requests, an + * empty string. For invalid requests, null. + * @example + * // Load data synchronously. + * var data = CKEDITOR.ajax.load( 'somedata.txt' ); + * alert( data ); + * @example + * // Load data asynchronously. + * var data = CKEDITOR.ajax.load( 'somedata.txt', function( data ) + * { + * alert( data ); + * } ); + */ + load : function( url, callback ) + { + return load( url, callback, getResponseText ); + }, + + /** + * Loads data from an URL as XML. + * @param {String} url The URL from which load data. + * @param {Function} [callback] A callback function to be called on + * data load. If not provided, the data will be loaded + * synchronously. + * @returns {CKEDITOR.xml} An XML object holding the loaded data. For asynchronous requests, an + * empty string. For invalid requests, null. + * @example + * // Load XML synchronously. + * var xml = CKEDITOR.ajax.loadXml( 'somedata.xml' ); + * alert( xml.getInnerXml( '//' ) ); + * @example + * // Load XML asynchronously. + * var data = CKEDITOR.ajax.loadXml( 'somedata.xml', function( xml ) + * { + * alert( xml.getInnerXml( '//' ) ); + * } ); + */ + loadXml : function( url, callback ) + { + return load( url, callback, getResponseXml ); + } + }; + })(); + +})(); diff --git a/_source/plugins/autogrow/plugin.js b/_source/plugins/autogrow/plugin.js new file mode 100644 index 0000000..d6c4697 --- /dev/null +++ b/_source/plugins/autogrow/plugin.js @@ -0,0 +1,88 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file AutoGrow plugin + */ +(function(){ + var resizeEditor = function( editor ) + { + if ( !editor.window ) + return; + var doc = editor.document, + currentHeight = editor.window.getViewPaneSize().height, + newHeight; + + // We can not use documentElement to calculate the height for IE (#6061). + // It is not good for IE Quirks, yet using offsetHeight would also not work as expected (#6408). + // We do the same for FF because of the html height workaround (#6341). + if ( CKEDITOR.env.ie || CKEDITOR.env.gecko ) + newHeight = doc.getBody().$.scrollHeight + ( CKEDITOR.env.ie && CKEDITOR.env.quirks ? 0 : 24 ); + else + newHeight = doc.getDocumentElement().$.offsetHeight; + + var min = editor.config.autoGrow_minHeight, + max = editor.config.autoGrow_maxHeight; + ( min == undefined ) && ( editor.config.autoGrow_minHeight = min = 200 ); + if ( min ) + newHeight = Math.max( newHeight, min ); + if ( max ) + newHeight = Math.min( newHeight, max ); + + if ( newHeight != currentHeight ) + { + newHeight = editor.fire( 'autoGrow', { currentHeight : currentHeight, newHeight : newHeight } ).newHeight; + editor.resize( editor.container.getStyle( 'width' ), newHeight, true ); + } + }; + CKEDITOR.plugins.add( 'autogrow', + { + init : function( editor ) + { + for ( var eventName in { contentDom:1, key:1, selectionChange:1, insertElement:1 } ) + { + editor.on( eventName, function( evt ) + { + var maximize = editor.getCommand( 'maximize' ); + // Some time is required for insertHtml, and it gives other events better performance as well. + if ( evt.editor.mode == 'wysiwyg' && + // Disable autogrow when the editor is maximized .(#6339) + ( !maximize || maximize.state != CKEDITOR.TRISTATE_ON ) ) + { + setTimeout( function(){ resizeEditor( evt.editor ); }, 100 ); + } + }); + } + } + }); +})(); +/** + * The minimum height to which the editor can reach using AutoGrow. + * @name CKEDITOR.config.autoGrow_minHeight + * @type Number + * @default 200 + * @since 3.4 + * @example + * config.autoGrow_minHeight = 300; + */ + +/** + * The maximum height to which the editor can reach using AutoGrow. Zero means unlimited. + * @name CKEDITOR.config.autoGrow_maxHeight + * @type Number + * @default 0 + * @since 3.4 + * @example + * config.autoGrow_maxHeight = 400; + */ + +/** + * Fired when the AutoGrow plugin is about to change the size of the editor. + * @name CKEDITOR.editor#autogrow + * @event + * @param {Number} data.currentHeight The current height of the editor (before the resizing). + * @param {Number} data.newHeight The new height of the editor (after the resizing). It can be changed + * to determine another height to be used instead. + */ diff --git a/_source/plugins/basicstyles/plugin.js b/_source/plugins/basicstyles/plugin.js new file mode 100644 index 0000000..aa00e9a --- /dev/null +++ b/_source/plugins/basicstyles/plugin.js @@ -0,0 +1,101 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'basicstyles', +{ + requires : [ 'styles', 'button' ], + + init : function( editor ) + { + // All buttons use the same code to register. So, to avoid + // duplications, let's use this tool function. + var addButtonCommand = function( buttonName, buttonLabel, commandName, styleDefiniton ) + { + var style = new CKEDITOR.style( styleDefiniton ); + + editor.attachStyleStateChange( style, function( state ) + { + !editor.readOnly && editor.getCommand( commandName ).setState( state ); + }); + + editor.addCommand( commandName, new CKEDITOR.styleCommand( style ) ); + + editor.ui.addButton( buttonName, + { + label : buttonLabel, + command : commandName + }); + }; + + var config = editor.config, + lang = editor.lang; + + addButtonCommand( 'Bold' , lang.bold , 'bold' , config.coreStyles_bold ); + addButtonCommand( 'Italic' , lang.italic , 'italic' , config.coreStyles_italic ); + addButtonCommand( 'Underline' , lang.underline , 'underline' , config.coreStyles_underline ); + addButtonCommand( 'Strike' , lang.strike , 'strike' , config.coreStyles_strike ); + addButtonCommand( 'Subscript' , lang.subscript , 'subscript' , config.coreStyles_subscript ); + addButtonCommand( 'Superscript' , lang.superscript , 'superscript' , config.coreStyles_superscript ); + } +}); + +// Basic Inline Styles. + +/** + * The style definition to be used to apply the bold style in the text. + * @type Object + * @example + * config.coreStyles_bold = { element : 'b', overrides : 'strong' }; + * @example + * config.coreStyles_bold = { element : 'span', attributes : {'class': 'Bold'} }; + */ +CKEDITOR.config.coreStyles_bold = { element : 'strong', overrides : 'b' }; + +/** + * The style definition to be used to apply the italic style in the text. + * @type Object + * @default { element : 'em', overrides : 'i' } + * @example + * config.coreStyles_italic = { element : 'i', overrides : 'em' }; + * @example + * CKEDITOR.config.coreStyles_italic = { element : 'span', attributes : {'class': 'Italic'} }; + */ +CKEDITOR.config.coreStyles_italic = { element : 'em', overrides : 'i' }; + +/** + * The style definition to be used to apply the underline style in the text. + * @type Object + * @default { element : 'u' } + * @example + * CKEDITOR.config.coreStyles_underline = { element : 'span', attributes : {'class': 'Underline'}}; + */ +CKEDITOR.config.coreStyles_underline = { element : 'u' }; + +/** + * The style definition to be used to apply the strike style in the text. + * @type Object + * @default { element : 'strike' } + * @example + * CKEDITOR.config.coreStyles_strike = { element : 'span', attributes : {'class': 'StrikeThrough'}, overrides : 'strike' }; + */ +CKEDITOR.config.coreStyles_strike = { element : 'strike' }; + +/** + * The style definition to be used to apply the subscript style in the text. + * @type Object + * @default { element : 'sub' } + * @example + * CKEDITOR.config.coreStyles_subscript = { element : 'span', attributes : {'class': 'Subscript'}, overrides : 'sub' }; + */ +CKEDITOR.config.coreStyles_subscript = { element : 'sub' }; + +/** + * The style definition to be used to apply the superscript style in the text. + * @type Object + * @default { element : 'sup' } + * @example + * CKEDITOR.config.coreStyles_superscript = { element : 'span', attributes : {'class': 'Superscript'}, overrides : 'sup' }; + */ +CKEDITOR.config.coreStyles_superscript = { element : 'sup' }; diff --git a/_source/plugins/bbcode/plugin.js b/_source/plugins/bbcode/plugin.js new file mode 100644 index 0000000..9ea7232 --- /dev/null +++ b/_source/plugins/bbcode/plugin.js @@ -0,0 +1,931 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + CKEDITOR.on( 'dialogDefinition', function( ev ) + { + var tab, name = ev.data.name, + definition = ev.data.definition; + + if ( name == 'link' ) + { + definition.removeContents( 'target' ); + definition.removeContents( 'upload' ); + definition.removeContents( 'advanced' ); + tab = definition.getContents( 'info' ); + tab.remove( 'emailSubject' ); + tab.remove( 'emailBody' ); + } + else if ( name == 'image' ) + { + definition.removeContents( 'advanced' ); + tab = definition.getContents( 'Link' ); + tab.remove( 'cmbTarget' ); + tab = definition.getContents( 'info' ); + tab.remove( 'txtAlt' ); + tab.remove( 'basic' ); + } + }); + + var bbcodeMap = { 'b' : 'strong', 'u': 'u', 'i' : 'em', 'color' : 'span', 'size' : 'span', 'quote' : 'blockquote', 'code' : 'code', 'url' : 'a', 'email' : 'span', 'img' : 'span', '*' : 'li', 'list' : 'ol' }, + convertMap = { 'strong' : 'b' , 'b' : 'b', 'u': 'u', 'em' : 'i', 'i': 'i', 'code' : 'code', 'li' : '*' }, + tagnameMap = { 'strong' : 'b', 'em' : 'i', 'u' : 'u', 'li' : '*', 'ul' : 'list', 'ol' : 'list', 'code' : 'code', 'a' : 'link', 'img' : 'img', 'blockquote' : 'quote' }, + stylesMap = { 'color' : 'color', 'size' : 'font-size' }, + attributesMap = { 'url' : 'href', 'email' : 'mailhref', 'quote': 'cite', 'list' : 'listType' }; + + // List of block-like tags. + var dtd = CKEDITOR.dtd, + blockLikeTags = CKEDITOR.tools.extend( { table:1 }, dtd.$block, dtd.$listItem, dtd.$tableContent, dtd.$list ); + + var semicolonFixRegex = /\s*(?:;\s*|$)/; + function serializeStyleText( stylesObject ) + { + var styleText = ''; + for ( var style in stylesObject ) + { + var styleVal = stylesObject[ style ], + text = ( style + ':' + styleVal ).replace( semicolonFixRegex, ';' ); + + styleText += text; + } + return styleText; + } + + function parseStyleText( styleText ) + { + var retval = {}; + ( styleText || '' ) + .replace( /"/g, '"' ) + .replace( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function( match, name, value ) + { + retval[ name.toLowerCase() ] = value; + } ); + return retval; + } + + function RGBToHex( cssStyle ) + { + return cssStyle.replace( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, function( match, red, green, blue ) + { + red = parseInt( red, 10 ).toString( 16 ); + green = parseInt( green, 10 ).toString( 16 ); + blue = parseInt( blue, 10 ).toString( 16 ); + var color = [red, green, blue] ; + + // Add padding zeros if the hex value is less than 0x10. + for ( var i = 0 ; i < color.length ; i++ ) + color[i] = String( '0' + color[i] ).slice( -2 ) ; + + return '#' + color.join( '' ) ; + }); + } + + // Maintain the map of smiley-to-description. + var smileyMap = {"smiley":":)","sad":":(","wink":";)","laugh":":D","cheeky":":P","blush":":*)","surprise":":-o","indecision":":|","angry":">:(","angel":"o:)","cool":"8-)","devil":">:-)","crying":";(","kiss":":-*" }, + smileyReverseMap = {}, + smileyRegExp = []; + + // Build regexp for the list of smiley text. + for ( var i in smileyMap ) + { + smileyReverseMap[ smileyMap[ i ] ] = i; + smileyRegExp.push( smileyMap[ i ].replace( /\(|\)|\:|\/|\*|\-|\|/g, function( match ) { return '\\' + match; } ) ); + } + + smileyRegExp = new RegExp( smileyRegExp.join( '|' ), 'g' ); + + var decodeHtml = ( function () + { + var regex = [], + entities = + { + nbsp : '\u00A0', // IE | FF + shy : '\u00AD', // IE + gt : '\u003E', // IE | FF | -- | Opera + lt : '\u003C' // IE | FF | Safari | Opera + }; + + for ( var entity in entities ) + regex.push( entity ); + + regex = new RegExp( '&(' + regex.join( '|' ) + ');', 'g' ); + + return function( html ) + { + return html.replace( regex, function( match, entity ) + { + return entities[ entity ]; + }); + }; + })(); + + CKEDITOR.BBCodeParser = function() + { + this._ = + { + bbcPartsRegex : /(?:\[([^\/\]=]*?)(?:=([^\]]*?))?\])|(?:\[\/([a-z]{1,16})\])/ig + }; + }; + + CKEDITOR.BBCodeParser.prototype = + { + parse : function( bbcode ) + { + var parts, + part, + lastIndex = 0; + + while ( ( parts = this._.bbcPartsRegex.exec( bbcode ) ) ) + { + var tagIndex = parts.index; + if ( tagIndex > lastIndex ) + { + var text = bbcode.substring( lastIndex, tagIndex ); + this.onText( text, 1 ); + } + + lastIndex = this._.bbcPartsRegex.lastIndex; + + /* + "parts" is an array with the following items: + 0 : The entire match for opening/closing tags and line-break; + 1 : line-break; + 2 : open of tag excludes option; + 3 : tag option; + 4 : close of tag; + */ + + part = ( parts[ 1 ] || parts[ 3 ] || '' ).toLowerCase(); + // Unrecognized tags should be delivered as a simple text (#7860). + if ( part && !bbcodeMap[ part ] ) + { + this.onText( parts[ 0 ] ); + continue; + } + + // Opening tag + if ( parts[ 1 ] ) + { + var tagName = bbcodeMap[ part ], + attribs = {}, + styles = {}, + optionPart = parts[ 2 ]; + + if ( optionPart ) + { + if ( part == 'list' ) + { + if ( !isNaN( optionPart ) ) + optionPart = 'decimal'; + else if ( /^[a-z]+$/.test( optionPart ) ) + optionPart = 'lower-alpha'; + else if ( /^[A-Z]+$/.test( optionPart ) ) + optionPart = 'upper-alpha'; + } + + if ( stylesMap[ part ] ) + { + // Font size represents percentage. + if ( part == 'size' ) + optionPart += '%'; + + styles[ stylesMap[ part ] ] = optionPart; + attribs.style = serializeStyleText( styles ); + } + else if ( attributesMap[ part ] ) + attribs[ attributesMap[ part ] ] = optionPart; + } + + // Two special handling - image and email, protect them + // as "span" with an attribute marker. + if ( part == 'email' || part == 'img' ) + attribs[ 'bbcode' ] = part; + + this.onTagOpen( tagName, attribs, CKEDITOR.dtd.$empty[ tagName ] ); + } + // Closing tag + else if ( parts[ 3 ] ) + this.onTagClose( bbcodeMap[ part ] ); + } + + if ( bbcode.length > lastIndex ) + this.onText( bbcode.substring( lastIndex, bbcode.length ), 1 ); + } + }; + + /** + * Creates a {@link CKEDITOR.htmlParser.fragment} from an HTML string. + * @param {String} source The HTML to be parsed, filling the fragment. + * @param {Number} [fixForBody=false] Wrap body with specified element if needed. + * @returns CKEDITOR.htmlParser.fragment The fragment created. + * @example + * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<b>Sample</b> Text' ); + * alert( fragment.children[0].name ); "b" + * alert( fragment.children[1].value ); " Text" + */ + CKEDITOR.htmlParser.fragment.fromBBCode = function( source ) + { + var parser = new CKEDITOR.BBCodeParser(), + fragment = new CKEDITOR.htmlParser.fragment(), + pendingInline = [], + pendingBrs = 0, + currentNode = fragment, + returnPoint; + + function checkPending( newTagName ) + { + if ( pendingInline.length > 0 ) + { + for ( var i = 0 ; i < pendingInline.length ; i++ ) + { + var pendingElement = pendingInline[ i ], + pendingName = pendingElement.name, + pendingDtd = CKEDITOR.dtd[ pendingName ], + currentDtd = currentNode.name && CKEDITOR.dtd[ currentNode.name ]; + + if ( ( !currentDtd || currentDtd[ pendingName ] ) && ( !newTagName || !pendingDtd || pendingDtd[ newTagName ] || !CKEDITOR.dtd[ newTagName ] ) ) + { + // Get a clone for the pending element. + pendingElement = pendingElement.clone(); + + // Add it to the current node and make it the current, + // so the new element will be added inside of it. + pendingElement.parent = currentNode; + currentNode = pendingElement; + + // Remove the pending element (back the index by one + // to properly process the next entry). + pendingInline.splice( i, 1 ); + i--; + } + } + } + } + + function checkPendingBrs( tagName, closing ) + { + var len = currentNode.children.length, + previous = len > 0 && currentNode.children[ len - 1 ], + lineBreakParent = !previous && BBCodeWriter.getRule( tagnameMap[ currentNode.name ], 'breakAfterOpen' ), + lineBreakPrevious = previous && previous.type == CKEDITOR.NODE_ELEMENT && BBCodeWriter.getRule( tagnameMap[ previous.name ], 'breakAfterClose' ), + lineBreakCurrent = tagName && BBCodeWriter.getRule( tagnameMap[ tagName ], closing ? 'breakBeforeClose' : 'breakBeforeOpen' ); + + if ( pendingBrs && ( lineBreakParent || lineBreakPrevious || lineBreakCurrent ) ) + pendingBrs--; + + // 1. Either we're at the end of block, where it requires us to compensate the br filler + // removing logic (from htmldataprocessor). + // 2. Or we're at the end of pseudo block, where it requires us to compensate + // the bogus br effect. + if ( pendingBrs && tagName in blockLikeTags ) + pendingBrs++; + + while ( pendingBrs && pendingBrs-- ) + currentNode.children.push( previous = new CKEDITOR.htmlParser.element( 'br' ) ); + } + + function addElement( node, target ) + { + checkPendingBrs( node.name, 1 ); + + target = target || currentNode || fragment; + + var len = target.children.length, + previous = len > 0 && target.children[ len - 1 ] || null; + + node.previous = previous; + node.parent = target; + + target.children.push( node ); + + if ( node.returnPoint ) + { + currentNode = node.returnPoint; + delete node.returnPoint; + } + } + + parser.onTagOpen = function( tagName, attributes, selfClosing ) + { + var element = new CKEDITOR.htmlParser.element( tagName, attributes ); + + // This is a tag to be removed if empty, so do not add it immediately. + if ( CKEDITOR.dtd.$removeEmpty[ tagName ] ) + { + pendingInline.push( element ); + return; + } + + var currentName = currentNode.name; + + var currentDtd = currentName + && ( CKEDITOR.dtd[ currentName ] + || ( currentNode._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span ) ); + + // If the element cannot be child of the current element. + if ( currentDtd && !currentDtd[ tagName ] ) + { + var reApply = false, + addPoint; // New position to start adding nodes. + + // If the element name is the same as the current element name, + // then just close the current one and append the new one to the + // parent. This situation usually happens with <p>, <li>, <dt> and + // <dd>, specially in IE. Do not enter in this if block in this case. + if ( tagName == currentName ) + addElement( currentNode, currentNode.parent ); + else if ( tagName in CKEDITOR.dtd.$listItem ) + { + parser.onTagOpen( 'ul', {} ); + addPoint = currentNode; + reApply = true; + } + else + { + addElement( currentNode, currentNode.parent ); + + // The current element is an inline element, which + // cannot hold the new one. Put it in the pending list, + // and try adding the new one after it. + pendingInline.unshift( currentNode ); + reApply = true; + } + + if ( addPoint ) + currentNode = addPoint; + // Try adding it to the return point, or the parent element. + else + currentNode = currentNode.returnPoint || currentNode.parent; + + if ( reApply ) + { + parser.onTagOpen.apply( this, arguments ); + return; + } + } + + checkPending( tagName ); + checkPendingBrs( tagName ); + + element.parent = currentNode; + element.returnPoint = returnPoint; + returnPoint = 0; + + if ( element.isEmpty ) + addElement( element ); + else + currentNode = element; + }; + + parser.onTagClose = function( tagName ) + { + // Check if there is any pending tag to be closed. + for ( var i = pendingInline.length - 1 ; i >= 0 ; i-- ) + { + // If found, just remove it from the list. + if ( tagName == pendingInline[ i ].name ) + { + pendingInline.splice( i, 1 ); + return; + } + } + + var pendingAdd = [], + newPendingInline = [], + candidate = currentNode; + + while ( candidate.type && candidate.name != tagName ) + { + // If this is an inline element, add it to the pending list, if we're + // really closing one of the parents element later, they will continue + // after it. + if ( !candidate._.isBlockLike ) + newPendingInline.unshift( candidate ); + + // This node should be added to it's parent at this point. But, + // it should happen only if the closing tag is really closing + // one of the nodes. So, for now, we just cache it. + pendingAdd.push( candidate ); + + candidate = candidate.parent; + } + + if ( candidate.type ) + { + // Add all elements that have been found in the above loop. + for ( i = 0 ; i < pendingAdd.length ; i++ ) + { + var node = pendingAdd[ i ]; + addElement( node, node.parent ); + } + + currentNode = candidate; + + + addElement( candidate, candidate.parent ); + + // The parent should start receiving new nodes now, except if + // addElement changed the currentNode. + if ( candidate == currentNode ) + currentNode = currentNode.parent; + + pendingInline = pendingInline.concat( newPendingInline ); + } + }; + + parser.onText = function( text ) + { + var currentDtd = CKEDITOR.dtd[ currentNode.name ]; + if ( !currentDtd || currentDtd[ '#' ] ) + { + checkPendingBrs(); + checkPending(); + + text.replace(/([\r\n])|[^\r\n]*/g, function( piece, lineBreak ) + { + if ( lineBreak !== undefined && lineBreak.length ) + pendingBrs++; + else if ( piece.length ) + { + var lastIndex = 0; + + // Create smiley from text emotion. + piece.replace( smileyRegExp, function( match, index ) + { + addElement( new CKEDITOR.htmlParser.text( piece.substring( lastIndex, index ) ), currentNode ); + addElement( new CKEDITOR.htmlParser.element( 'smiley', { 'desc': smileyReverseMap[ match ] } ), currentNode ); + lastIndex = index + match.length; + }); + + if ( lastIndex != piece.length ) + addElement( new CKEDITOR.htmlParser.text( piece.substring( lastIndex, piece.length ) ), currentNode ); + } + }); + } + }; + + // Parse it. + parser.parse( CKEDITOR.tools.htmlEncode( source ) ); + + // Close all hanging nodes. + while ( currentNode.type ) + { + var parent = currentNode.parent, + node = currentNode; + + addElement( node, parent ); + currentNode = parent; + } + + return fragment; + }; + + CKEDITOR.htmlParser.BBCodeWriter = CKEDITOR.tools.createClass( + { + $ : function() + { + this._ = + { + output : [], + rules : [] + }; + + // List and list item. + this.setRules( 'list', + { + breakBeforeOpen : 1, + breakAfterOpen : 1, + breakBeforeClose : 1, + breakAfterClose : 1 + } ); + + this.setRules( '*', + { + breakBeforeOpen : 1, + breakAfterOpen : 0, + breakBeforeClose : 1, + breakAfterClose : 0 + } ); + + this.setRules( 'quote', + { + breakBeforeOpen : 1, + breakAfterOpen : 0, + breakBeforeClose : 0, + breakAfterClose : 1 + } ); + }, + + proto : + { + /** + * Sets formatting rules for a given tag. The possible rules are: + * <ul> + * <li><b>breakBeforeOpen</b>: break line before the opener tag for this element.</li> + * <li><b>breakAfterOpen</b>: break line after the opener tag for this element.</li> + * <li><b>breakBeforeClose</b>: break line before the closer tag for this element.</li> + * <li><b>breakAfterClose</b>: break line after the closer tag for this element.</li> + * </ul> + * + * All rules default to "false". Each call to the function overrides + * already present rules, leaving the undefined untouched. + * + * @param {String} tagName The tag name to which set the rules. + * @param {Object} rules An object containing the element rules. + * @example + * // Break line before and after "img" tags. + * writer.setRules( 'list', + * { + * breakBeforeOpen : true + * breakAfterOpen : true + * }); + */ + setRules : function( tagName, rules ) + { + var currentRules = this._.rules[ tagName ]; + + if ( currentRules ) + CKEDITOR.tools.extend( currentRules, rules, true ); + else + this._.rules[ tagName ] = rules; + }, + + getRule : function( tagName, ruleName ) + { + return this._.rules[ tagName ] && this._.rules[ tagName ][ ruleName ]; + }, + + openTag : function( tag, attributes ) + { + if ( tag in bbcodeMap ) + { + if ( this.getRule( tag, 'breakBeforeOpen' ) ) + this.lineBreak( 1 ); + + this.write( '[', tag ); + var option = attributes.option; + option && this.write( '=', option ); + this.write( ']' ); + + if ( this.getRule( tag, 'breakAfterOpen' ) ) + this.lineBreak( 1 ); + } + else if ( tag == 'br' ) + this._.output.push( '\n' ); + }, + + openTagClose : function() { }, + attribute : function() { }, + + closeTag : function( tag ) + { + if ( tag in bbcodeMap ) + { + if ( this.getRule( tag, 'breakBeforeClose' ) ) + this.lineBreak( 1 ); + + tag != '*' && this.write( '[/', tag, ']' ); + + if ( this.getRule( tag, 'breakAfterClose' ) ) + this.lineBreak( 1 ); + } + }, + + text : function( text ) + { + this.write( text ); + }, + + /** + * Writes a comment. + * @param {String} comment The comment text. + * @example + * // Writes "<!-- My comment -->". + * writer.comment( ' My comment ' ); + */ + comment : function() {}, + + /* + * Output line-break for formatting. + */ + lineBreak : function() + { + // Avoid line break when: + // 1) Previous tag already put one. + // 2) We're at output start. + if ( !this._.hasLineBreak && this._.output.length ) + { + this.write( '\n' ); + this._.hasLineBreak = 1; + } + }, + + write : function() + { + this._.hasLineBreak = 0; + var data = Array.prototype.join.call( arguments, '' ); + this._.output.push( data ); + }, + + reset : function() + { + this._.output = []; + this._.hasLineBreak = 0; + }, + + getHtml : function( reset ) + { + var bbcode = this._.output.join( '' ); + + if ( reset ) + this.reset(); + + return decodeHtml ( bbcode ); + } + } + }); + + var BBCodeWriter = new CKEDITOR.htmlParser.BBCodeWriter(); + + CKEDITOR.plugins.add( 'bbcode', + { + requires : [ 'htmldataprocessor', 'entities' ], + beforeInit : function( editor ) + { + // Adapt some critical editor configuration for better support + // of BBCode environment. + var config = editor.config; + CKEDITOR.tools.extend( config, + { + enterMode : CKEDITOR.ENTER_BR, + basicEntities: false, + entities : false, + fillEmptyBlocks : false + }, true ); + }, + init : function( editor ) + { + var config = editor.config; + + function BBCodeToHtml( code ) + { + var fragment = CKEDITOR.htmlParser.fragment.fromBBCode( code ), + writer = new CKEDITOR.htmlParser.basicWriter(); + + fragment.writeHtml( writer, dataFilter ); + return writer.getHtml( true ); + } + + var dataFilter = new CKEDITOR.htmlParser.filter(); + dataFilter.addRules( + { + elements : + { + 'blockquote' : function( element ) + { + var quoted = new CKEDITOR.htmlParser.element( 'div' ); + quoted.children = element.children; + element.children = [ quoted ]; + var citeText = element.attributes.cite; + if ( citeText ) + { + var cite = new CKEDITOR.htmlParser.element( 'cite' ); + cite.add( new CKEDITOR.htmlParser.text( citeText.replace( /^"|"$/g, '' ) ) ); + delete element.attributes.cite; + element.children.unshift( cite ); + } + }, + 'span' : function( element ) + { + var bbcode; + if ( ( bbcode = element.attributes.bbcode ) ) + { + if ( bbcode == 'img' ) + { + element.name = 'img'; + element.attributes.src = element.children[ 0 ].value; + element.children = []; + } + else if ( bbcode == 'email' ) + { + element.name = 'a'; + element.attributes.href = 'mailto:' + element.children[ 0 ].value; + } + + delete element.attributes.bbcode; + } + }, + 'ol' : function ( element ) + { + if ( element.attributes.listType ) + { + if ( element.attributes.listType != 'decimal' ) + element.attributes.style = 'list-style-type:' + element.attributes.listType; + } + else + element.name = 'ul'; + + delete element.attributes.listType; + }, + a : function( element ) + { + if ( !element.attributes.href ) + element.attributes.href = element.children[ 0 ].value; + }, + 'smiley' : function( element ) + { + element.name = 'img'; + + var description = element.attributes.desc, + image = config.smiley_images[ CKEDITOR.tools.indexOf( config.smiley_descriptions, description ) ], + src = CKEDITOR.tools.htmlEncode( config.smiley_path + image ); + + element.attributes = + { + src : src, + 'data-cke-saved-src' : src, + title : description, + alt : description + }; + } + } + } ); + + editor.dataProcessor.htmlFilter.addRules( + { + elements : + { + $ : function( element ) + { + var attributes = element.attributes, + style = parseStyleText( attributes.style ), + value; + + var tagName = element.name; + if ( tagName in convertMap ) + tagName = convertMap[ tagName ]; + else if ( tagName == 'span' ) + { + if ( ( value = style.color ) ) + { + tagName = 'color'; + value = RGBToHex( value ); + } + else if ( ( value = style[ 'font-size' ] ) ) + { + var percentValue = value.match( /(\d+)%$/ ); + if ( percentValue ) + { + value = percentValue[ 1 ]; + tagName = 'size'; + } + } + } + else if ( tagName == 'ol' || tagName == 'ul' ) + { + if ( ( value = style[ 'list-style-type'] ) ) + { + switch ( value ) + { + case 'lower-alpha': + value = 'a'; + break; + case 'upper-alpha': + value = 'A'; + break; + } + } + else if ( tagName == 'ol' ) + value = 1; + + tagName = 'list'; + } + else if ( tagName == 'blockquote' ) + { + try + { + var cite = element.children[ 0 ], + quoted = element.children[ 1 ], + citeText = cite.name == 'cite' && cite.children[ 0 ].value; + + if ( citeText ) + { + value = '"' + citeText + '"'; + element.children = quoted.children; + } + + } + catch( er ) + { + } + + tagName = 'quote'; + } + else if ( tagName == 'a' ) + { + if ( ( value = attributes.href ) ) + { + if ( value.indexOf( 'mailto:' ) !== -1 ) + { + tagName = 'email'; + // [email] should have a single text child with email address. + element.children = [ new CKEDITOR.htmlParser.text( value.replace( 'mailto:', '' ) ) ]; + value = ''; + } + else + { + var singleton = element.children.length == 1 && element.children[ 0 ]; + if ( singleton + && singleton.type == CKEDITOR.NODE_TEXT + && singleton.value == value ) + value = ''; + + tagName = 'url'; + } + } + } + else if ( tagName == 'img' ) + { + element.isEmpty = 0; + + // Translate smiley (image) to text emotion. + var src = attributes[ 'data-cke-saved-src' ]; + if ( src && src.indexOf( editor.config.smiley_path ) != -1 ) + return new CKEDITOR.htmlParser.text( smileyMap[ attributes.alt ] ); + else + element.children = [ new CKEDITOR.htmlParser.text( src ) ]; + } + + element.name = tagName; + value && ( element.attributes.option = value ); + + return null; + }, + + // Remove any bogus br from the end of a pseudo block, + // e.g. <div>some text<br /><p>paragraph</p></div> + br : function( element ) + { + var next = element.next; + if ( next && next.name in blockLikeTags ) + return false; + } + } + }, 1 ); + + editor.dataProcessor.writer = BBCodeWriter; + + editor.on( 'beforeSetMode', function( evt ) + { + evt.removeListener(); + var wysiwyg = editor._.modes[ 'wysiwyg' ]; + wysiwyg.loadData = CKEDITOR.tools.override( wysiwyg.loadData, function( org ) + { + return function( data ) + { + return ( org.call( this, BBCodeToHtml( data ) ) ); + }; + } ); + } ); + }, + + afterInit : function( editor ) + { + var filters; + if ( editor._.elementsPath ) + { + // Eliminate irrelevant elements from displaying, e.g body and p. + if ( ( filters = editor._.elementsPath.filters ) ) + filters.push( function( element ) + { + var htmlName = element.getName(), + name = tagnameMap[ htmlName ] || false; + + // Specialized anchor presents as email. + if ( name == 'link' && element.getAttribute( 'href' ).indexOf( 'mailto:' ) === 0 ) + name = 'email'; + // Styled span could be either size or color. + else if ( htmlName == 'span' ) + { + if ( element.getStyle( 'font-size' ) ) + name = 'size'; + else if ( element.getStyle( 'color' ) ) + name = 'color'; + } + else if ( name == 'img' ) + { + var src = element.data( 'cke-saved-src' ); + if ( src && src.indexOf( editor.config.smiley_path ) === 0 ) + name = 'smiley'; + } + + return name; + }); + } + } + } ); + +})(); diff --git a/_source/plugins/bidi/plugin.js b/_source/plugins/bidi/plugin.js new file mode 100644 index 0000000..2233ee1 --- /dev/null +++ b/_source/plugins/bidi/plugin.js @@ -0,0 +1,334 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var guardElements = { table:1, ul:1, ol:1, blockquote:1, div:1 }, + directSelectionGuardElements = {}, + // All guard elements which can have a direction applied on them. + allGuardElements = {}; + CKEDITOR.tools.extend( directSelectionGuardElements, guardElements, { tr:1, p:1, div:1, li:1 } ); + CKEDITOR.tools.extend( allGuardElements, directSelectionGuardElements, { td:1 } ); + + function onSelectionChange( e ) + { + setToolbarStates( e ); + handleMixedDirContent( e ); + } + + function setToolbarStates( evt ) + { + var editor = evt.editor, + path = evt.data.path; + + if ( editor.readOnly ) + return; + + var useComputedState = editor.config.useComputedState, + selectedElement; + + useComputedState = useComputedState === undefined || useComputedState; + + // We can use computedState provided by the browser or traverse parents manually. + if ( !useComputedState ) + selectedElement = getElementForDirection( path.lastElement ); + + selectedElement = selectedElement || path.block || path.blockLimit; + + // If we're having BODY here, user probably done CTRL+A, let's try to get the enclosed node, if any. + if ( selectedElement.is( 'body' ) ) + { + var enclosedNode = editor.getSelection().getRanges()[ 0 ].getEnclosedNode(); + enclosedNode && enclosedNode.type == CKEDITOR.NODE_ELEMENT && ( selectedElement = enclosedNode ); + } + + if ( !selectedElement ) + return; + + var selectionDir = useComputedState ? + selectedElement.getComputedStyle( 'direction' ) : + selectedElement.getStyle( 'direction' ) || selectedElement.getAttribute( 'dir' ); + + editor.getCommand( 'bidirtl' ).setState( selectionDir == 'rtl' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); + editor.getCommand( 'bidiltr' ).setState( selectionDir == 'ltr' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); + } + + function handleMixedDirContent( evt ) + { + var editor = evt.editor, + directionNode = evt.data.path.block || evt.data.path.blockLimit; + + editor.fire( 'contentDirChanged', directionNode ? directionNode.getComputedStyle( 'direction' ) : editor.lang.dir ); + } + + /** + * Returns element with possibility of applying the direction. + * @param node + */ + function getElementForDirection( node ) + { + while ( node && !( node.getName() in allGuardElements || node.is( 'body' ) ) ) + { + var parent = node.getParent(); + if ( !parent ) + break; + + node = parent; + } + + return node; + } + + function switchDir( element, dir, editor, database ) + { + if ( element.isReadOnly() ) + return; + + // Mark this element as processed by switchDir. + CKEDITOR.dom.element.setMarker( database, element, 'bidi_processed', 1 ); + + // Check whether one of the ancestors has already been styled. + var parent = element; + while ( ( parent = parent.getParent() ) && !parent.is( 'body' ) ) + { + if ( parent.getCustomData( 'bidi_processed' ) ) + { + // Ancestor style must dominate. + element.removeStyle( 'direction' ); + element.removeAttribute( 'dir' ); + return; + } + } + + var useComputedState = ( 'useComputedState' in editor.config ) ? editor.config.useComputedState : 1; + + var elementDir = useComputedState ? element.getComputedStyle( 'direction' ) + : element.getStyle( 'direction' ) || element.hasAttribute( 'dir' ); + + // Stop if direction is same as present. + if ( elementDir == dir ) + return; + + // Clear direction on this element. + element.removeStyle( 'direction' ); + + // Do the second check when computed state is ON, to check + // if we need to apply explicit direction on this element. + if ( useComputedState ) + { + element.removeAttribute( 'dir' ); + if ( dir != element.getComputedStyle( 'direction' ) ) + element.setAttribute( 'dir', dir ); + } + else + // Set new direction for this element. + element.setAttribute( 'dir', dir ); + + editor.forceNextSelectionCheck(); + + return; + } + + function getFullySelected( range, elements, enterMode ) + { + var ancestor = range.getCommonAncestor( false, true ); + + range = range.clone(); + range.enlarge( enterMode == CKEDITOR.ENTER_BR ? + CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS + : CKEDITOR.ENLARGE_BLOCK_CONTENTS ); + + if ( range.checkBoundaryOfElement( ancestor, CKEDITOR.START ) + && range.checkBoundaryOfElement( ancestor, CKEDITOR.END ) ) + { + var parent; + while ( ancestor && ancestor.type == CKEDITOR.NODE_ELEMENT + && ( parent = ancestor.getParent() ) + && parent.getChildCount() == 1 + && !( ancestor.getName() in elements ) ) + ancestor = parent; + + return ancestor.type == CKEDITOR.NODE_ELEMENT + && ( ancestor.getName() in elements ) + && ancestor; + } + } + + function bidiCommand( dir ) + { + return function( editor ) + { + var selection = editor.getSelection(), + enterMode = editor.config.enterMode, + ranges = selection.getRanges(); + + if ( ranges && ranges.length ) + { + var database = {}; + + // Creates bookmarks for selection, as we may split some blocks. + var bookmarks = selection.createBookmarks(); + + var rangeIterator = ranges.createIterator(), + range, + i = 0; + + while ( ( range = rangeIterator.getNextRange( 1 ) ) ) + { + // Apply do directly selected elements from guardElements. + var selectedElement = range.getEnclosedNode(); + + // If this is not our element of interest, apply to fully selected elements from guardElements. + if ( !selectedElement || selectedElement + && !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements ) + ) + selectedElement = getFullySelected( range, guardElements, enterMode ); + + selectedElement && switchDir( selectedElement, dir, editor, database ); + + var iterator, + block; + + // Walker searching for guardElements. + var walker = new CKEDITOR.dom.walker( range ); + + var start = bookmarks[ i ].startNode, + end = bookmarks[ i++ ].endNode; + + walker.evaluator = function( node ) + { + return !! ( node.type == CKEDITOR.NODE_ELEMENT + && node.getName() in guardElements + && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) + && node.getParent().type == CKEDITOR.NODE_ELEMENT + && node.getParent().getName() == 'blockquote' ) + // Element must be fully included in the range as well. (#6485). + && node.getPosition( start ) & CKEDITOR.POSITION_FOLLOWING + && ( ( node.getPosition( end ) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_CONTAINS ) == CKEDITOR.POSITION_PRECEDING ) ); + }; + + while ( ( block = walker.next() ) ) + switchDir( block, dir, editor, database ); + + iterator = range.createIterator(); + iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; + + while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) + switchDir( block, dir, editor, database ); + } + + CKEDITOR.dom.element.clearAllMarkers( database ); + + editor.forceNextSelectionCheck(); + // Restore selection position. + selection.selectBookmarks( bookmarks ); + + editor.focus(); + } + }; + } + + CKEDITOR.plugins.add( 'bidi', + { + requires : [ 'styles', 'button' ], + + init : function( editor ) + { + // All buttons use the same code to register. So, to avoid + // duplications, let's use this tool function. + var addButtonCommand = function( buttonName, buttonLabel, commandName, commandExec ) + { + editor.addCommand( commandName, new CKEDITOR.command( editor, { exec : commandExec }) ); + + editor.ui.addButton( buttonName, + { + label : buttonLabel, + command : commandName + }); + }; + + var lang = editor.lang.bidi; + + addButtonCommand( 'BidiLtr', lang.ltr, 'bidiltr', bidiCommand( 'ltr' ) ); + addButtonCommand( 'BidiRtl', lang.rtl, 'bidirtl', bidiCommand( 'rtl' ) ); + + editor.on( 'selectionChange', onSelectionChange ); + editor.on( 'contentDom', function() + { + editor.document.on( 'dirChanged', function( evt ) + { + editor.fire( 'dirChanged', + { + node : evt.data, + dir : evt.data.getDirection( 1 ) + } ); + }); + }); + } + }); + + // If the element direction changed, we need to switch the margins of + // the element and all its children, so it will get really reflected + // like a mirror. (#5910) + function isOffline( el ) + { + var html = el.getDocument().getBody().getParent(); + while ( el ) + { + if ( el.equals( html ) ) + return false; + el = el.getParent(); + } + return true; + } + function dirChangeNotifier( org ) + { + var isAttribute = org == elementProto.setAttribute, + isRemoveAttribute = org == elementProto.removeAttribute, + dirStyleRegexp = /\bdirection\s*:\s*(.*?)\s*(:?$|;)/; + + return function( name, val ) + { + if ( !this.getDocument().equals( CKEDITOR.document ) ) + { + var orgDir; + if ( ( name == ( isAttribute || isRemoveAttribute ? 'dir' : 'direction' ) || + name == 'style' && ( isRemoveAttribute || dirStyleRegexp.test( val ) ) ) && !isOffline( this ) ) + { + orgDir = this.getDirection( 1 ); + var retval = org.apply( this, arguments ); + if ( orgDir != this.getDirection( 1 ) ) + { + this.getDocument().fire( 'dirChanged', this ); + return retval; + } + } + } + + return org.apply( this, arguments ); + }; + } + + var elementProto = CKEDITOR.dom.element.prototype, + methods = [ 'setStyle', 'removeStyle', 'setAttribute', 'removeAttribute' ]; + for ( var i = 0; i < methods.length; i++ ) + elementProto[ methods[ i ] ] = CKEDITOR.tools.override( elementProto[ methods [ i ] ], dirChangeNotifier ); +})(); + +/** + * Fired when the language direction of an element is changed + * @name CKEDITOR.editor#dirChanged + * @event + * @param {CKEDITOR.editor} editor This editor instance. + * @param {Object} eventData.node The element that is being changed. + * @param {String} eventData.dir The new direction. + */ + +/** + * Fired when the language direction in the specific cursor position is changed + * @name CKEDITOR.editor#contentDirChanged + * @event + * @param {String} eventData The direction in the current position. + */ diff --git a/_source/plugins/blockquote/plugin.js b/_source/plugins/blockquote/plugin.js new file mode 100644 index 0000000..dc4eb8c --- /dev/null +++ b/_source/plugins/blockquote/plugin.js @@ -0,0 +1,305 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Blockquote. + */ + +(function() +{ + function getState( editor, path ) + { + var firstBlock = path.block || path.blockLimit; + + if ( !firstBlock || firstBlock.getName() == 'body' ) + return CKEDITOR.TRISTATE_OFF; + + // See if the first block has a blockquote parent. + if ( firstBlock.getAscendant( 'blockquote', true ) ) + return CKEDITOR.TRISTATE_ON; + + return CKEDITOR.TRISTATE_OFF; + } + + function onSelectionChange( evt ) + { + var editor = evt.editor; + if ( editor.readOnly ) + return; + + var command = editor.getCommand( 'blockquote' ); + command.state = getState( editor, evt.data.path ); + command.fire( 'state' ); + } + + function noBlockLeft( bqBlock ) + { + for ( var i = 0, length = bqBlock.getChildCount(), child ; i < length && ( child = bqBlock.getChild( i ) ) ; i++ ) + { + if ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() ) + return false; + } + return true; + } + + var commandObject = + { + exec : function( editor ) + { + var state = editor.getCommand( 'blockquote' ).state, + selection = editor.getSelection(), + range = selection && selection.getRanges( true )[0]; + + if ( !range ) + return; + + var bookmarks = selection.createBookmarks(); + + // Kludge for #1592: if the bookmark nodes are in the beginning of + // blockquote, then move them to the nearest block element in the + // blockquote. + if ( CKEDITOR.env.ie ) + { + var bookmarkStart = bookmarks[0].startNode, + bookmarkEnd = bookmarks[0].endNode, + cursor; + + if ( bookmarkStart && bookmarkStart.getParent().getName() == 'blockquote' ) + { + cursor = bookmarkStart; + while ( ( cursor = cursor.getNext() ) ) + { + if ( cursor.type == CKEDITOR.NODE_ELEMENT && + cursor.isBlockBoundary() ) + { + bookmarkStart.move( cursor, true ); + break; + } + } + } + + if ( bookmarkEnd + && bookmarkEnd.getParent().getName() == 'blockquote' ) + { + cursor = bookmarkEnd; + while ( ( cursor = cursor.getPrevious() ) ) + { + if ( cursor.type == CKEDITOR.NODE_ELEMENT && + cursor.isBlockBoundary() ) + { + bookmarkEnd.move( cursor ); + break; + } + } + } + } + + var iterator = range.createIterator(), + block; + iterator.enlargeBr = editor.config.enterMode != CKEDITOR.ENTER_BR; + + if ( state == CKEDITOR.TRISTATE_OFF ) + { + var paragraphs = []; + while ( ( block = iterator.getNextParagraph() ) ) + paragraphs.push( block ); + + // If no paragraphs, create one from the current selection position. + if ( paragraphs.length < 1 ) + { + var para = editor.document.createElement( editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ), + firstBookmark = bookmarks.shift(); + range.insertNode( para ); + para.append( new CKEDITOR.dom.text( '\ufeff', editor.document ) ); + range.moveToBookmark( firstBookmark ); + range.selectNodeContents( para ); + range.collapse( true ); + firstBookmark = range.createBookmark(); + paragraphs.push( para ); + bookmarks.unshift( firstBookmark ); + } + + // Make sure all paragraphs have the same parent. + var commonParent = paragraphs[0].getParent(), + tmp = []; + for ( var i = 0 ; i < paragraphs.length ; i++ ) + { + block = paragraphs[i]; + commonParent = commonParent.getCommonAncestor( block.getParent() ); + } + + // The common parent must not be the following tags: table, tbody, tr, ol, ul. + var denyTags = { table : 1, tbody : 1, tr : 1, ol : 1, ul : 1 }; + while ( denyTags[ commonParent.getName() ] ) + commonParent = commonParent.getParent(); + + // Reconstruct the block list to be processed such that all resulting blocks + // satisfy parentNode.equals( commonParent ). + var lastBlock = null; + while ( paragraphs.length > 0 ) + { + block = paragraphs.shift(); + while ( !block.getParent().equals( commonParent ) ) + block = block.getParent(); + if ( !block.equals( lastBlock ) ) + tmp.push( block ); + lastBlock = block; + } + + // If any of the selected blocks is a blockquote, remove it to prevent + // nested blockquotes. + while ( tmp.length > 0 ) + { + block = tmp.shift(); + if ( block.getName() == 'blockquote' ) + { + var docFrag = new CKEDITOR.dom.documentFragment( editor.document ); + while ( block.getFirst() ) + { + docFrag.append( block.getFirst().remove() ); + paragraphs.push( docFrag.getLast() ); + } + + docFrag.replace( block ); + } + else + paragraphs.push( block ); + } + + // Now we have all the blocks to be included in a new blockquote node. + var bqBlock = editor.document.createElement( 'blockquote' ); + bqBlock.insertBefore( paragraphs[0] ); + while ( paragraphs.length > 0 ) + { + block = paragraphs.shift(); + bqBlock.append( block ); + } + } + else if ( state == CKEDITOR.TRISTATE_ON ) + { + var moveOutNodes = [], + database = {}; + + while ( ( block = iterator.getNextParagraph() ) ) + { + var bqParent = null, + bqChild = null; + while ( block.getParent() ) + { + if ( block.getParent().getName() == 'blockquote' ) + { + bqParent = block.getParent(); + bqChild = block; + break; + } + block = block.getParent(); + } + + // Remember the blocks that were recorded down in the moveOutNodes array + // to prevent duplicates. + if ( bqParent && bqChild && !bqChild.getCustomData( 'blockquote_moveout' ) ) + { + moveOutNodes.push( bqChild ); + CKEDITOR.dom.element.setMarker( database, bqChild, 'blockquote_moveout', true ); + } + } + + CKEDITOR.dom.element.clearAllMarkers( database ); + + var movedNodes = [], + processedBlockquoteBlocks = []; + + database = {}; + while ( moveOutNodes.length > 0 ) + { + var node = moveOutNodes.shift(); + bqBlock = node.getParent(); + + // If the node is located at the beginning or the end, just take it out + // without splitting. Otherwise, split the blockquote node and move the + // paragraph in between the two blockquote nodes. + if ( !node.getPrevious() ) + node.remove().insertBefore( bqBlock ); + else if ( !node.getNext() ) + node.remove().insertAfter( bqBlock ); + else + { + node.breakParent( node.getParent() ); + processedBlockquoteBlocks.push( node.getNext() ); + } + + // Remember the blockquote node so we can clear it later (if it becomes empty). + if ( !bqBlock.getCustomData( 'blockquote_processed' ) ) + { + processedBlockquoteBlocks.push( bqBlock ); + CKEDITOR.dom.element.setMarker( database, bqBlock, 'blockquote_processed', true ); + } + + movedNodes.push( node ); + } + + CKEDITOR.dom.element.clearAllMarkers( database ); + + // Clear blockquote nodes that have become empty. + for ( i = processedBlockquoteBlocks.length - 1 ; i >= 0 ; i-- ) + { + bqBlock = processedBlockquoteBlocks[i]; + if ( noBlockLeft( bqBlock ) ) + bqBlock.remove(); + } + + if ( editor.config.enterMode == CKEDITOR.ENTER_BR ) + { + var firstTime = true; + while ( movedNodes.length ) + { + node = movedNodes.shift(); + + if ( node.getName() == 'div' ) + { + docFrag = new CKEDITOR.dom.documentFragment( editor.document ); + var needBeginBr = firstTime && node.getPrevious() && + !( node.getPrevious().type == CKEDITOR.NODE_ELEMENT && node.getPrevious().isBlockBoundary() ); + if ( needBeginBr ) + docFrag.append( editor.document.createElement( 'br' ) ); + + var needEndBr = node.getNext() && + !( node.getNext().type == CKEDITOR.NODE_ELEMENT && node.getNext().isBlockBoundary() ); + while ( node.getFirst() ) + node.getFirst().remove().appendTo( docFrag ); + + if ( needEndBr ) + docFrag.append( editor.document.createElement( 'br' ) ); + + docFrag.replace( node ); + firstTime = false; + } + } + } + } + + selection.selectBookmarks( bookmarks ); + editor.focus(); + } + }; + + CKEDITOR.plugins.add( 'blockquote', + { + init : function( editor ) + { + editor.addCommand( 'blockquote', commandObject ); + + editor.ui.addButton( 'Blockquote', + { + label : editor.lang.blockquote, + command : 'blockquote' + } ); + + editor.on( 'selectionChange', onSelectionChange ); + }, + + requires : [ 'domiterator' ] + } ); +})(); diff --git a/_source/plugins/button/plugin.js b/_source/plugins/button/plugin.js new file mode 100644 index 0000000..7655229 --- /dev/null +++ b/_source/plugins/button/plugin.js @@ -0,0 +1,290 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'button', +{ + beforeInit : function( editor ) + { + editor.ui.addHandler( CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler ); + } +}); + +/** + * Button UI element. + * @constant + * @example + */ +CKEDITOR.UI_BUTTON = 'button'; + +/** + * Represents a button UI element. This class should not be called directly. To + * create new buttons use {@link CKEDITOR.ui.prototype.addButton} instead. + * @constructor + * @param {Object} definition The button definition. + * @example + */ +CKEDITOR.ui.button = function( definition ) +{ + // Copy all definition properties to this object. + CKEDITOR.tools.extend( this, definition, + // Set defaults. + { + title : definition.label, + className : definition.className || ( definition.command && 'cke_button_' + definition.command ) || '', + click : definition.click || function( editor ) + { + editor.execCommand( definition.command ); + } + }); + + this._ = {}; +}; + +/** + * Transforms a button definition in a {@link CKEDITOR.ui.button} instance. + * @type Object + * @example + */ +CKEDITOR.ui.button.handler = +{ + create : function( definition ) + { + return new CKEDITOR.ui.button( definition ); + } +}; + +( function() +{ +CKEDITOR.ui.button.prototype = +{ + /** + * Renders the button. + * @param {CKEDITOR.editor} editor The editor instance which this button is + * to be used by. + * @param {Array} output The output array to which append the HTML relative + * to this button. + * @example + */ + render : function( editor, output ) + { + var env = CKEDITOR.env, + id = this._.id = CKEDITOR.tools.getNextId(), + classes = '', + command = this.command, // Get the command name. + clickFn; + + this._.editor = editor; + + var instance = + { + id : id, + button : this, + editor : editor, + focus : function() + { + var element = CKEDITOR.document.getById( id ); + element.focus(); + }, + execute : function() + { + // IE 6 needs some time before execution (#7922) + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 ) + CKEDITOR.tools.setTimeout( function(){ this.button.click( editor ); }, 0, this ); + else + this.button.click( editor ); + } + }; + + var keydownFn = CKEDITOR.tools.addFunction( function( ev ) + { + if ( instance.onkey ) + { + ev = new CKEDITOR.dom.event( ev ); + return ( instance.onkey( instance, ev.getKeystroke() ) !== false ); + } + }); + + var focusFn = CKEDITOR.tools.addFunction( function( ev ) + { + var retVal; + + if ( instance.onfocus ) + retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false ); + + // FF2: prevent focus event been bubbled up to editor container, which caused unexpected editor focus. + if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) + ev.preventBubble(); + return retVal; + }); + + instance.clickFn = clickFn = CKEDITOR.tools.addFunction( instance.execute, instance ); + + + // Indicate a mode sensitive button. + if ( this.modes ) + { + var modeStates = {}; + + function updateState() + { + // "this" is a CKEDITOR.ui.button instance. + + var mode = editor.mode; + + if ( mode ) + { + // Restore saved button state. + var state = this.modes[ mode ] ? modeStates[ mode ] != undefined ? modeStates[ mode ] : + CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; + + this.setState( editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state ); + } + } + + editor.on( 'beforeModeUnload', function() + { + if ( editor.mode && this._.state != CKEDITOR.TRISTATE_DISABLED ) + modeStates[ editor.mode ] = this._.state; + }, this ); + + editor.on( 'mode', updateState, this); + + // If this button is sensitive to readOnly state, update it accordingly. + !this.readOnly && editor.on( 'readOnly', updateState, this); + } + else if ( command ) + { + // Get the command instance. + command = editor.getCommand( command ); + + if ( command ) + { + command.on( 'state', function() + { + this.setState( command.state ); + }, this); + + classes += 'cke_' + ( + command.state == CKEDITOR.TRISTATE_ON ? 'on' : + command.state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : + 'off' ); + } + } + + if ( !command ) + classes += 'cke_off'; + + if ( this.className ) + classes += ' ' + this.className; + + output.push( + '<span class="cke_button' + ( this.icon && this.icon.indexOf( '.png' ) == -1 ? ' cke_noalphafix' : '' ) + '">', + '<a id="', id, '"' + + ' class="', classes, '"', + env.gecko && env.version >= 10900 && !env.hc ? '' : '" href="javascript:void(\''+ ( this.title || '' ).replace( "'", '' )+ '\')"', + ' title="', this.title, '"' + + ' tabindex="-1"' + + ' hidefocus="true"' + + ' role="button"' + + ' aria-labelledby="' + id + '_label"' + + ( this.hasArrow ? ' aria-haspopup="true"' : '' ) ); + + // Some browsers don't cancel key events in the keydown but in the + // keypress. + // TODO: Check if really needed for Gecko+Mac. + if ( env.opera || ( env.gecko && env.mac ) ) + { + output.push( + ' onkeypress="return false;"' ); + } + + // With Firefox, we need to force the button to redraw, otherwise it + // will remain in the focus state. + if ( env.gecko ) + { + output.push( + ' onblur="this.style.cssText = this.style.cssText;"' ); + } + + output.push( + ' onkeydown="return CKEDITOR.tools.callFunction(', keydownFn, ', event);"' + + ' onfocus="return CKEDITOR.tools.callFunction(', focusFn,', event);" ' + + ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188 + '="CKEDITOR.tools.callFunction(', clickFn, ', this); return false;">' + + '<span class="cke_icon"' ); + + if ( this.icon ) + { + var offset = ( this.iconOffset || 0 ) * -16; + output.push( ' style="background-image:url(', CKEDITOR.getUrl( this.icon ), ');background-position:0 ' + offset + 'px;"' ); + } + + output.push( + '> </span>' + + '<span id="', id, '_label" class="cke_label">', this.label, '</span>' ); + + if ( this.hasArrow ) + { + output.push( + '<span class="cke_buttonarrow">' + // BLACK DOWN-POINTING TRIANGLE + + ( CKEDITOR.env.hc ? '▼' : ' ' ) + + '</span>' ); + } + + output.push( + '</a>', + '</span>' ); + + if ( this.onRender ) + this.onRender(); + + return instance; + }, + + setState : function( state ) + { + if ( this._.state == state ) + return false; + + this._.state = state; + + var element = CKEDITOR.document.getById( this._.id ); + + if ( element ) + { + element.setState( state ); + state == CKEDITOR.TRISTATE_DISABLED ? + element.setAttribute( 'aria-disabled', true ) : + element.removeAttribute( 'aria-disabled' ); + + state == CKEDITOR.TRISTATE_ON ? + element.setAttribute( 'aria-pressed', true ) : + element.removeAttribute( 'aria-pressed' ); + + return true; + } + else + return false; + } +}; + +})(); + +/** + * Adds a button definition to the UI elements list. + * @param {String} name The button name. + * @param {Object} definition The button definition. + * @example + * editorInstance.ui.addButton( 'MyBold', + * { + * label : 'My Bold', + * command : 'bold' + * }); + */ +CKEDITOR.ui.prototype.addButton = function( name, definition ) +{ + this.add( name, CKEDITOR.UI_BUTTON, definition ); +}; diff --git a/_source/plugins/clipboard/dialogs/paste.js b/_source/plugins/clipboard/dialogs/paste.js new file mode 100644 index 0000000..9a659ed --- /dev/null +++ b/_source/plugins/clipboard/dialogs/paste.js @@ -0,0 +1,223 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'paste', function( editor ) +{ + var lang = editor.lang.clipboard; + var isCustomDomain = CKEDITOR.env.isCustomDomain(); + + function onPasteFrameLoad( win ) + { + var doc = new CKEDITOR.dom.document( win.document ), + docElement = doc.$; + + var script = doc.getById( 'cke_actscrpt' ); + script && script.remove(); + + CKEDITOR.env.ie ? + docElement.body.contentEditable = "true" : + docElement.designMode = "on"; + + // IE before version 8 will leave cursor blinking inside the document after + // editor blurred unless we clean up the selection. (#4716) + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) + { + doc.getWindow().on( 'blur', function() + { + docElement.selection.empty(); + } ); + } + + doc.on( "keydown", function( e ) + { + var domEvent = e.data, + key = domEvent.getKeystroke(), + processed; + + switch( key ) + { + case 27 : + this.hide(); + processed = 1; + break; + + case 9 : + case CKEDITOR.SHIFT + 9 : + this.changeFocus( true ); + processed = 1; + } + + processed && domEvent.preventDefault(); + }, this ); + + editor.fire( 'ariaWidget', new CKEDITOR.dom.element( win.frameElement ) ); + } + + return { + title : lang.title, + + minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 370 : 350, + minHeight : CKEDITOR.env.quirks ? 250 : 245, + onShow : function() + { + // FIREFOX BUG: Force the browser to render the dialog to make the to-be- + // inserted iframe editable. (#3366) + this.parts.dialog.$.offsetHeight; + + this.setupContent(); + }, + + onHide : function() + { + if ( CKEDITOR.env.ie ) + this.getParentEditor().document.getBody().$.contentEditable = 'true'; + }, + + onLoad : function() + { + if ( ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) && editor.lang.dir == 'rtl' ) + this.parts.contents.setStyle( 'overflow', 'hidden' ); + }, + + onOk : function() + { + this.commitContent(); + }, + + contents : [ + { + id : 'general', + label : editor.lang.common.generalTab, + elements : [ + { + type : 'html', + id : 'securityMsg', + html : '<div style="white-space:normal;width:340px;">' + lang.securityMsg + '</div>' + }, + { + type : 'html', + id : 'pasteMsg', + html : '<div style="white-space:normal;width:340px;">'+lang.pasteMsg +'</div>' + }, + { + type : 'html', + id : 'editing_area', + style : 'width: 100%; height: 100%;', + html : '', + focus : function() + { + var win = this.getInputElement().$.contentWindow; + + // #3291 : JAWS needs the 500ms delay to detect that the editor iframe + // iframe is no longer editable. So that it will put the focus into the + // Paste from Word dialog's editable area instead. + setTimeout( function() + { + win.focus(); + }, 500 ); + }, + setup : function() + { + var dialog = this.getDialog(); + var htmlToLoad = + '<html dir="' + editor.config.contentsLangDirection + '"' + + ' lang="' + ( editor.config.contentsLanguage || editor.langCode ) + '">' + + '<head><style>body { margin: 3px; height: 95%; } </style></head><body>' + + '<script id="cke_actscrpt" type="text/javascript">' + + 'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, dialog ) + ', this );' + + '</script></body>' + + '</html>'; + + var src = + CKEDITOR.env.air ? + 'javascript:void(0)' : + isCustomDomain ? + 'javascript:void((function(){' + + 'document.open();' + + 'document.domain=\'' + document.domain + '\';' + + 'document.close();' + + '})())"' + : + ''; + + var iframe = CKEDITOR.dom.element.createFromHtml( + '<iframe' + + ' class="cke_pasteframe"' + + ' frameborder="0" ' + + ' allowTransparency="true"' + + ' src="' + src + '"' + + ' role="region"' + + ' aria-label="' + lang.pasteArea + '"' + + ' aria-describedby="' + dialog.getContentElement( 'general', 'pasteMsg' ).domId + '"' + + ' aria-multiple="true"' + + '></iframe>' ); + + iframe.on( 'load', function( e ) + { + e.removeListener(); + + var doc = iframe.getFrameDocument(); + doc.write( htmlToLoad ); + + if ( CKEDITOR.env.air ) + onPasteFrameLoad.call( this, doc.getWindow().$ ); + }, dialog ); + + iframe.setCustomData( 'dialog', dialog ); + + var container = this.getElement(); + container.setHtml( '' ); + container.append( iframe ); + + // IE need a redirect on focus to make + // the cursor blinking inside iframe. (#5461) + if ( CKEDITOR.env.ie ) + { + var focusGrabber = CKEDITOR.dom.element.createFromHtml( '<span tabindex="-1" style="position:absolute;" role="presentation"></span>' ); + focusGrabber.on( 'focus', function() + { + iframe.$.contentWindow.focus(); + }); + container.append( focusGrabber ); + + // Override focus handler on field. + this.focus = function() + { + focusGrabber.focus(); + this.fire( 'focus' ); + }; + } + + this.getInputElement = function(){ return iframe; }; + + // Force container to scale in IE. + if ( CKEDITOR.env.ie ) + { + container.setStyle( 'display', 'block' ); + container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' ); + } + }, + commit : function( data ) + { + var container = this.getElement(), + editor = this.getDialog().getParentEditor(), + body = this.getInputElement().getFrameDocument().getBody(), + bogus = body.getBogus(), + html; + bogus && bogus.remove(); + + // Saving the contents so changes until paste is complete will not take place (#7500) + html = body.getHtml(); + + setTimeout( function(){ + editor.fire( 'paste', { 'html' : html } ); + }, 0 ); + } + } + ] + } + ] + }; +}); diff --git a/_source/plugins/clipboard/plugin.js b/_source/plugins/clipboard/plugin.js new file mode 100644 index 0000000..3c53ab1 --- /dev/null +++ b/_source/plugins/clipboard/plugin.js @@ -0,0 +1,453 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Clipboard support + */ + +(function() +{ + // Tries to execute any of the paste, cut or copy commands in IE. Returns a + // boolean indicating that the operation succeeded. + var execIECommand = function( editor, command ) + { + var doc = editor.document, + body = doc.getBody(); + + var enabled = 0; + var onExec = function() + { + enabled = 1; + }; + + // The following seems to be the only reliable way to detect that + // clipboard commands are enabled in IE. It will fire the + // onpaste/oncut/oncopy events only if the security settings allowed + // the command to execute. + body.on( command, onExec ); + + // IE6/7: document.execCommand has problem to paste into positioned element. + ( CKEDITOR.env.version > 7 ? doc.$ : doc.$.selection.createRange() ) [ 'execCommand' ]( command ); + + body.removeListener( command, onExec ); + + return enabled; + }; + + // Attempts to execute the Cut and Copy operations. + var tryToCutCopy = + CKEDITOR.env.ie ? + function( editor, type ) + { + return execIECommand( editor, type ); + } + : // !IE. + function( editor, type ) + { + try + { + // Other browsers throw an error if the command is disabled. + return editor.document.$.execCommand( type, false, null ); + } + catch( e ) + { + return false; + } + }; + + // A class that represents one of the cut or copy commands. + var cutCopyCmd = function( type ) + { + this.type = type; + this.canUndo = this.type == 'cut'; // We can't undo copy to clipboard. + this.startDisabled = true; + }; + + cutCopyCmd.prototype = + { + exec : function( editor, data ) + { + this.type == 'cut' && fixCut( editor ); + + var success = tryToCutCopy( editor, this.type ); + + if ( !success ) + alert( editor.lang.clipboard[ this.type + 'Error' ] ); // Show cutError or copyError. + + return success; + } + }; + + // Paste command. + var pasteCmd = + { + canUndo : false, + + exec : + CKEDITOR.env.ie ? + function( editor ) + { + // Prevent IE from pasting at the begining of the document. + editor.focus(); + + if ( !editor.document.getBody().fire( 'beforepaste' ) + && !execIECommand( editor, 'paste' ) ) + { + editor.fire( 'pasteDialog' ); + return false; + } + } + : + function( editor ) + { + try + { + if ( !editor.document.getBody().fire( 'beforepaste' ) + && !editor.document.$.execCommand( 'Paste', false, null ) ) + { + throw 0; + } + } + catch ( e ) + { + setTimeout( function() + { + editor.fire( 'pasteDialog' ); + }, 0 ); + return false; + } + } + }; + + // Listens for some clipboard related keystrokes, so they get customized. + var onKey = function( event ) + { + if ( this.mode != 'wysiwyg' ) + return; + + switch ( event.data.keyCode ) + { + // Paste + case CKEDITOR.CTRL + 86 : // CTRL+V + case CKEDITOR.SHIFT + 45 : // SHIFT+INS + + var body = this.document.getBody(); + + // Simulate 'beforepaste' event for all none-IEs. + if ( !CKEDITOR.env.ie && body.fire( 'beforepaste' ) ) + event.cancel(); + // Simulate 'paste' event for Opera/Firefox2. + else if ( CKEDITOR.env.opera + || CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) + body.fire( 'paste' ); + return; + + // Cut + case CKEDITOR.CTRL + 88 : // CTRL+X + case CKEDITOR.SHIFT + 46 : // SHIFT+DEL + + // Save Undo snapshot. + var editor = this; + this.fire( 'saveSnapshot' ); // Save before paste + setTimeout( function() + { + editor.fire( 'saveSnapshot' ); // Save after paste + }, 0 ); + } + }; + + function cancel( evt ) { evt.cancel(); } + + // Allow to peek clipboard content by redirecting the + // pasting content into a temporary bin and grab the content of it. + function getClipboardData( evt, mode, callback ) + { + var doc = this.document; + + // Avoid recursions on 'paste' event or consequent paste too fast. (#5730) + if ( doc.getById( 'cke_pastebin' ) ) + return; + + // If the browser supports it, get the data directly + if ( mode == 'text' && evt.data && evt.data.$.clipboardData ) + { + // evt.data.$.clipboardData.types contains all the flavours in Mac's Safari, but not on windows. + var plain = evt.data.$.clipboardData.getData( 'text/plain' ); + if ( plain ) + { + evt.data.preventDefault(); + callback( plain ); + return; + } + } + + var sel = this.getSelection(), + range = new CKEDITOR.dom.range( doc ); + + // Create container to paste into + var pastebin = new CKEDITOR.dom.element( mode == 'text' ? 'textarea' : CKEDITOR.env.webkit ? 'body' : 'div', doc ); + pastebin.setAttribute( 'id', 'cke_pastebin' ); + // Safari requires a filler node inside the div to have the content pasted into it. (#4882) + CKEDITOR.env.webkit && pastebin.append( doc.createText( '\xa0' ) ); + doc.getBody().append( pastebin ); + + pastebin.setStyles( + { + position : 'absolute', + // Position the bin exactly at the position of the selected element + // to avoid any subsequent document scroll. + top : sel.getStartElement().getDocumentPosition().y + 'px', + width : '1px', + height : '1px', + overflow : 'hidden' + }); + + // It's definitely a better user experience if we make the paste-bin pretty unnoticed + // by pulling it off the screen. + pastebin.setStyle( this.config.contentsLangDirection == 'ltr' ? 'left' : 'right', '-1000px' ); + + var bms = sel.createBookmarks(); + + this.on( 'selectionChange', cancel, null, null, 0 ); + + // Turn off design mode temporarily before give focus to the paste bin. + if ( mode == 'text' ) + pastebin.$.focus(); + else + { + range.setStartAt( pastebin, CKEDITOR.POSITION_AFTER_START ); + range.setEndAt( pastebin, CKEDITOR.POSITION_BEFORE_END ); + range.select( true ); + } + + var editor = this; + // Wait a while and grab the pasted contents + window.setTimeout( function() + { + mode == 'text' && CKEDITOR.env.gecko && editor.focusGrabber.focus(); + pastebin.remove(); + editor.removeListener( 'selectionChange', cancel ); + + // Grab the HTML contents. + // We need to look for a apple style wrapper on webkit it also adds + // a div wrapper if you copy/paste the body of the editor. + // Remove hidden div and restore selection. + var bogusSpan; + pastebin = ( CKEDITOR.env.webkit + && ( bogusSpan = pastebin.getFirst() ) + && ( bogusSpan.is && bogusSpan.hasClass( 'Apple-style-span' ) ) ? + bogusSpan : pastebin ); + + sel.selectBookmarks( bms ); + callback( pastebin[ 'get' + ( mode == 'text' ? 'Value' : 'Html' ) ]() ); + }, 0 ); + } + + // Cutting off control type element in IE standards breaks the selection entirely. (#4881) + function fixCut( editor ) + { + if ( !CKEDITOR.env.ie || CKEDITOR.env.quirks ) + return; + + var sel = editor.getSelection(); + var control; + if( ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && ( control = sel.getSelectedElement() ) ) + { + var range = sel.getRanges()[ 0 ]; + var dummy = editor.document.createText( '' ); + dummy.insertBefore( control ); + range.setStartBefore( dummy ); + range.setEndAfter( control ); + sel.selectRanges( [ range ] ); + + // Clear up the fix if the paste wasn't succeeded. + setTimeout( function() + { + // Element still online? + if ( control.getParent() ) + { + dummy.remove(); + sel.selectElement( control ); + } + }, 0 ); + } + } + + var depressBeforeEvent; + function stateFromNamedCommand( command, editor ) + { + // IE Bug: queryCommandEnabled('paste') fires also 'beforepaste(copy/cut)', + // guard to distinguish from the ordinary sources( either + // keyboard paste or execCommand ) (#4874). + CKEDITOR.env.ie && ( depressBeforeEvent = 1 ); + + var retval = CKEDITOR.TRISTATE_OFF; + try { retval = editor.document.$.queryCommandEnabled( command ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; }catch( er ){} + + depressBeforeEvent = 0; + return retval; + } + + var inReadOnly; + function setToolbarStates() + { + if ( this.mode != 'wysiwyg' ) + return; + + this.getCommand( 'cut' ).setState( inReadOnly ? CKEDITOR.TRISTATE_DISABLED : stateFromNamedCommand( 'Cut', this ) ); + this.getCommand( 'copy' ).setState( stateFromNamedCommand( 'Copy', this ) ); + var pasteState = inReadOnly ? CKEDITOR.TRISTATE_DISABLED : + CKEDITOR.env.webkit ? CKEDITOR.TRISTATE_OFF : stateFromNamedCommand( 'Paste', this ); + this.fire( 'pasteState', pasteState ); + } + + // Register the plugin. + CKEDITOR.plugins.add( 'clipboard', + { + requires : [ 'dialog', 'htmldataprocessor' ], + init : function( editor ) + { + // Inserts processed data into the editor at the end of the + // events chain. + editor.on( 'paste', function( evt ) + { + var data = evt.data; + if ( data[ 'html' ] ) + editor.insertHtml( data[ 'html' ] ); + else if ( data[ 'text' ] ) + editor.insertText( data[ 'text' ] ); + + setTimeout( function () { editor.fire( 'afterPaste' ); }, 0 ); + + }, null, null, 1000 ); + + editor.on( 'pasteDialog', function( evt ) + { + setTimeout( function() + { + // Open default paste dialog. + editor.openDialog( 'paste' ); + }, 0 ); + }); + + editor.on( 'pasteState', function( evt ) + { + editor.getCommand( 'paste' ).setState( evt.data ); + }); + + function addButtonCommand( buttonName, commandName, command, ctxMenuOrder ) + { + var lang = editor.lang[ commandName ]; + + editor.addCommand( commandName, command ); + editor.ui.addButton( buttonName, + { + label : lang, + command : commandName + }); + + // If the "menu" plugin is loaded, register the menu item. + if ( editor.addMenuItems ) + { + editor.addMenuItem( commandName, + { + label : lang, + command : commandName, + group : 'clipboard', + order : ctxMenuOrder + }); + } + } + + addButtonCommand( 'Cut', 'cut', new cutCopyCmd( 'cut' ), 1 ); + addButtonCommand( 'Copy', 'copy', new cutCopyCmd( 'copy' ), 4 ); + addButtonCommand( 'Paste', 'paste', pasteCmd, 8 ); + + CKEDITOR.dialog.add( 'paste', CKEDITOR.getUrl( this.path + 'dialogs/paste.js' ) ); + + editor.on( 'key', onKey, editor ); + + // We'll be catching all pasted content in one line, regardless of whether the + // it's introduced by a document command execution (e.g. toolbar buttons) or + // user paste behaviors. (e.g. Ctrl-V) + editor.on( 'contentDom', function() + { + var body = editor.document.getBody(); + body.on( CKEDITOR.env.webkit ? 'paste' : 'beforepaste', function( evt ) + { + if ( depressBeforeEvent ) + return; + + // Fire 'beforePaste' event so clipboard flavor get customized + // by other plugins. + var eventData = { mode : 'html' }; + editor.fire( 'beforePaste', eventData ); + + getClipboardData.call( editor, evt, eventData.mode, function ( data ) + { + // The very last guard to make sure the + // paste has successfully happened. + if ( !( data = CKEDITOR.tools.trim( data.replace( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,'' ) ) ) ) + return; + + var dataTransfer = {}; + dataTransfer[ eventData.mode ] = data; + editor.fire( 'paste', dataTransfer ); + } ); + }); + + // Dismiss the (wrong) 'beforepaste' event fired on context menu open. (#7953) + body.on( 'contextmenu', function() + { + depressBeforeEvent = 1; + setTimeout( function() { depressBeforeEvent = 0; }, 10 ); + }); + + body.on( 'beforecut', function() { !depressBeforeEvent && fixCut( editor ); } ); + + body.on( 'mouseup', function(){ setTimeout( function(){ setToolbarStates.call( editor ); }, 0 ); }, editor ); + body.on( 'keyup', setToolbarStates, editor ); + }); + + // For improved performance, we're checking the readOnly state on selectionChange instead of hooking a key event for that. + editor.on( 'selectionChange', function( evt ) + { + inReadOnly = evt.data.selection.getRanges()[ 0 ].checkReadOnly(); + setToolbarStates.call( editor ); + }); + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + var readOnly = selection.getRanges()[ 0 ].checkReadOnly(); + return { + cut : !readOnly && stateFromNamedCommand( 'Cut', editor ), + copy : stateFromNamedCommand( 'Copy', editor ), + paste : !readOnly && ( CKEDITOR.env.webkit ? CKEDITOR.TRISTATE_OFF : stateFromNamedCommand( 'Paste', editor ) ) + }; + }); + } + } + }); +})(); + +/** + * Fired when a clipboard operation is about to be taken into the editor. + * Listeners can manipulate the data to be pasted before having it effectively + * inserted into the document. + * @name CKEDITOR.editor#paste + * @since 3.1 + * @event + * @param {String} [data.html] The HTML data to be pasted. If not available, e.data.text will be defined. + * @param {String} [data.text] The plain text data to be pasted, available when plain text operations are to used. If not available, e.data.html will be defined. + */ + +/** + * Internal event to open the Paste dialog + * @name CKEDITOR.editor#pasteDialog + * @event + */ diff --git a/_source/plugins/colorbutton/plugin.js b/_source/plugins/colorbutton/plugin.js new file mode 100644 index 0000000..b3e5d9c --- /dev/null +++ b/_source/plugins/colorbutton/plugin.js @@ -0,0 +1,294 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'colorbutton', +{ + requires : [ 'panelbutton', 'floatpanel', 'styles' ], + + init : function( editor ) + { + var config = editor.config, + lang = editor.lang.colorButton; + + var clickFn; + + if ( !CKEDITOR.env.hc ) + { + addButton( 'TextColor', 'fore', lang.textColorTitle ); + addButton( 'BGColor', 'back', lang.bgColorTitle ); + } + + function addButton( name, type, title ) + { + var colorBoxId = CKEDITOR.tools.getNextId() + '_colorBox'; + editor.ui.add( name, CKEDITOR.UI_PANELBUTTON, + { + label : title, + title : title, + className : 'cke_button_' + name.toLowerCase(), + modes : { wysiwyg : 1 }, + + panel : + { + css : editor.skin.editor.css, + attributes : { role : 'listbox', 'aria-label' : lang.panelTitle } + }, + + onBlock : function( panel, block ) + { + block.autoSize = true; + block.element.addClass( 'cke_colorblock' ); + block.element.setHtml( renderColors( panel, type, colorBoxId ) ); + // The block should not have scrollbars (#5933, #6056) + block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' ); + + CKEDITOR.ui.fire( 'ready', this ); + + var keys = block.keys; + var rtl = editor.lang.dir == 'rtl'; + keys[ rtl ? 37 : 39 ] = 'next'; // ARROW-RIGHT + keys[ 40 ] = 'next'; // ARROW-DOWN + keys[ 9 ] = 'next'; // TAB + keys[ rtl ? 39 : 37 ] = 'prev'; // ARROW-LEFT + keys[ 38 ] = 'prev'; // ARROW-UP + keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB + keys[ 32 ] = 'click'; // SPACE + }, + + // The automatic colorbox should represent the real color (#6010) + onOpen : function() + { + var selection = editor.getSelection(), + block = selection && selection.getStartElement(), + path = new CKEDITOR.dom.elementPath( block ), + color; + + // Find the closest block element. + block = path.block || path.blockLimit || editor.document.getBody(); + + // The background color might be transparent. In that case, look up the color in the DOM tree. + do + { + color = block && block.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) || 'transparent'; + } + while ( type == 'back' && color == 'transparent' && block && ( block = block.getParent() ) ); + + // The box should never be transparent. + if ( !color || color == 'transparent' ) + color = '#ffffff'; + + this._.panel._.iframe.getFrameDocument().getById( colorBoxId ).setStyle( 'background-color', color ); + } + }); + } + + + function renderColors( panel, type, colorBoxId ) + { + var output = [], + colors = config.colorButton_colors.split( ',' ), + total = colors.length + ( config.colorButton_enableMore ? 2 : 1 ); + + var clickFn = CKEDITOR.tools.addFunction( function( color, type ) + { + if ( color == '?' ) + { + var applyColorStyle = arguments.callee; + function onColorDialogClose( evt ) + { + this.removeListener( 'ok', onColorDialogClose ); + this.removeListener( 'cancel', onColorDialogClose ); + + evt.name == 'ok' && applyColorStyle( this.getContentElement( 'picker', 'selectedColor' ).getValue(), type ); + } + + editor.openDialog( 'colordialog', function() + { + this.on( 'ok', onColorDialogClose ); + this.on( 'cancel', onColorDialogClose ); + } ); + + return; + } + + editor.focus(); + + panel.hide( false ); + + editor.fire( 'saveSnapshot' ); + + // Clean up any conflicting style within the range. + new CKEDITOR.style( config['colorButton_' + type + 'Style'], { color : 'inherit' } ).remove( editor.document ); + + if ( color ) + { + var colorStyle = config['colorButton_' + type + 'Style']; + + colorStyle.childRule = type == 'back' ? + function( element ) + { + // It's better to apply background color as the innermost style. (#3599) + // Except for "unstylable elements". (#6103) + return isUnstylable( element ); + } + : + function( element ) + { + // Fore color style must be applied inside links instead of around it. + return element.getName() != 'a' || isUnstylable( element ); + }; + + new CKEDITOR.style( colorStyle, { color : color } ).apply( editor.document ); + } + + editor.fire( 'saveSnapshot' ); + }); + + // Render the "Automatic" button. + output.push( + '<a class="cke_colorauto" _cke_focus=1 hidefocus=true' + + ' title="', lang.auto, '"' + + ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',null,\'', type, '\');return false;"' + + ' href="javascript:void(\'', lang.auto, '\')"' + + ' role="option" aria-posinset="1" aria-setsize="', total, '">' + + '<table role="presentation" cellspacing=0 cellpadding=0 width="100%">' + + '<tr>' + + '<td>' + + '<span class="cke_colorbox" id="', colorBoxId, '"></span>' + + '</td>' + + '<td colspan=7 align=center>', + lang.auto, + '</td>' + + '</tr>' + + '</table>' + + '</a>' + + '<table role="presentation" cellspacing=0 cellpadding=0 width="100%">' ); + + // Render the color boxes. + for ( var i = 0 ; i < colors.length ; i++ ) + { + if ( ( i % 8 ) === 0 ) + output.push( '</tr><tr>' ); + + var parts = colors[ i ].split( '/' ), + colorName = parts[ 0 ], + colorCode = parts[ 1 ] || colorName; + + // The data can be only a color code (without #) or colorName + color code + // If only a color code is provided, then the colorName is the color with the hash + // Convert the color from RGB to RRGGBB for better compatibility with IE and <font>. See #5676 + if (!parts[1]) + colorName = '#' + colorName.replace( /^(.)(.)(.)$/, '$1$1$2$2$3$3' ); + + var colorLabel = editor.lang.colors[ colorCode ] || colorCode; + output.push( + '<td>' + + '<a class="cke_colorbox" _cke_focus=1 hidefocus=true' + + ' title="', colorLabel, '"' + + ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'', colorName, '\',\'', type, '\'); return false;"' + + ' href="javascript:void(\'', colorLabel, '\')"' + + ' role="option" aria-posinset="', ( i + 2 ), '" aria-setsize="', total, '">' + + '<span class="cke_colorbox" style="background-color:#', colorCode, '"></span>' + + '</a>' + + '</td>' ); + } + + // Render the "More Colors" button. + if ( config.colorButton_enableMore === undefined || config.colorButton_enableMore ) + { + output.push( + '</tr>' + + '<tr>' + + '<td colspan=8 align=center>' + + '<a class="cke_colormore" _cke_focus=1 hidefocus=true' + + ' title="', lang.more, '"' + + ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'?\',\'', type, '\');return false;"' + + ' href="javascript:void(\'', lang.more, '\')"', + ' role="option" aria-posinset="', total, '" aria-setsize="', total, '">', + lang.more, + '</a>' + + '</td>' ); // tr is later in the code. + } + + output.push( '</tr></table>' ); + + return output.join( '' ); + } + + function isUnstylable( ele ) + { + return ( ele.getAttribute( 'contentEditable' ) == 'false' ) || ele.getAttribute( 'data-nostyle' ); + } + } +}); + +/** + * Whether to enable the "More Colors..." button in the color selectors. + * @name CKEDITOR.config.colorButton_enableMore + * @default true + * @type Boolean + * @example + * config.colorButton_enableMore = false; + */ + +/** + * Defines the colors to be displayed in the color selectors. It's a string + * containing the hexadecimal notation for HTML colors, without the "#" prefix. + * + * Since 3.3: A name may be optionally defined by prefixing the entries with the + * name and the slash character. For example, "FontColor1/FF9900" will be + * displayed as the color #FF9900 in the selector, but will be outputted as "FontColor1". + * @name CKEDITOR.config.colorButton_colors + * @type String + * @default '000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF' + * @example + * // Brazil colors only. + * config.colorButton_colors = '00923E,F8C100,28166F'; + * @example + * config.colorButton_colors = 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00' + */ +CKEDITOR.config.colorButton_colors = + '000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,' + + 'B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,' + + 'F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,' + + 'FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,' + + 'FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF'; + +/** + * Holds the style definition to be used to apply the text foreground color. + * @name CKEDITOR.config.colorButton_foreStyle + * @type Object + * @example + * // This is basically the default setting value. + * config.colorButton_foreStyle = + * { + * element : 'span', + * styles : { 'color' : '#(color)' } + * }; + */ +CKEDITOR.config.colorButton_foreStyle = + { + element : 'span', + styles : { 'color' : '#(color)' }, + overrides : [ { element : 'font', attributes : { 'color' : null } } ] + }; + +/** + * Holds the style definition to be used to apply the text background color. + * @name CKEDITOR.config.colorButton_backStyle + * @type Object + * @example + * // This is basically the default setting value. + * config.colorButton_backStyle = + * { + * element : 'span', + * styles : { 'background-color' : '#(color)' } + * }; + */ +CKEDITOR.config.colorButton_backStyle = + { + element : 'span', + styles : { 'background-color' : '#(color)' } + }; diff --git a/_source/plugins/colordialog/dialogs/colordialog.js b/_source/plugins/colordialog/dialogs/colordialog.js new file mode 100644 index 0000000..61d411b --- /dev/null +++ b/_source/plugins/colordialog/dialogs/colordialog.js @@ -0,0 +1,340 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'colordialog', function( editor ) + { + // Define some shorthands. + var $el = CKEDITOR.dom.element, + $doc = CKEDITOR.document, + $tools = CKEDITOR.tools, + lang = editor.lang.colordialog; + + // Reference the dialog. + var dialog; + + var spacer = + { + type : 'html', + html : ' ' + }; + + function clearSelected() + { + $doc.getById( selHiColorId ).removeStyle( 'background-color' ); + dialog.getContentElement( 'picker', 'selectedColor' ).setValue( '' ); + } + + function updateSelected( evt ) + { + if ( ! ( evt instanceof CKEDITOR.dom.event ) ) + evt = new CKEDITOR.dom.event( evt ); + + var target = evt.getTarget(), + color; + + if ( target.getName() == 'a' && ( color = target.getChild( 0 ).getHtml() ) ) + dialog.getContentElement( 'picker', 'selectedColor' ).setValue( color ); + } + + function updateHighlight( event ) + { + if ( ! ( event instanceof CKEDITOR.dom.event ) ) + event = event.data; + + var target = event.getTarget(), + color; + + if ( target.getName() == 'a' && ( color = target.getChild( 0 ).getHtml() ) ) + { + $doc.getById( hicolorId ).setStyle( 'background-color', color ); + $doc.getById( hicolorTextId ).setHtml( color ); + } + } + + function clearHighlight() + { + $doc.getById( hicolorId ).removeStyle( 'background-color' ); + $doc.getById( hicolorTextId ).setHtml( ' ' ); + } + + var onMouseout = $tools.addFunction( clearHighlight ), + onClick = updateSelected, + onClickHandler = CKEDITOR.tools.addFunction( onClick ), + onFocus = updateHighlight, + onBlur = clearHighlight; + + var onKeydownHandler = CKEDITOR.tools.addFunction( function( ev ) + { + ev = new CKEDITOR.dom.event( ev ); + var element = ev.getTarget(); + var relative, nodeToMove; + var keystroke = ev.getKeystroke(), + rtl = editor.lang.dir == 'rtl'; + + switch ( keystroke ) + { + // UP-ARROW + case 38 : + // relative is TR + if ( ( relative = element.getParent().getParent().getPrevious() ) ) + { + nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] ); + nodeToMove.focus(); + onBlur( ev, element ); + onFocus( ev, nodeToMove ); + } + ev.preventDefault(); + break; + // DOWN-ARROW + case 40 : + // relative is TR + if ( ( relative = element.getParent().getParent().getNext() ) ) + { + nodeToMove = relative.getChild( [ element.getParent().getIndex(), 0 ] ); + if ( nodeToMove && nodeToMove.type == 1 ) + { + nodeToMove.focus(); + onBlur( ev, element ); + onFocus( ev, nodeToMove ); + } + } + ev.preventDefault(); + break; + // SPACE + // ENTER is already handled as onClick + case 32 : + onClick( ev ); + ev.preventDefault(); + break; + + // RIGHT-ARROW + case rtl ? 37 : 39 : + // relative is TD + if ( ( relative = element.getParent().getNext() ) ) + { + nodeToMove = relative.getChild( 0 ); + if ( nodeToMove.type == 1 ) + { + nodeToMove.focus(); + onBlur( ev, element ); + onFocus( ev, nodeToMove ); + ev.preventDefault( true ); + } + else + onBlur( null, element ); + } + // relative is TR + else if ( ( relative = element.getParent().getParent().getNext() ) ) + { + nodeToMove = relative.getChild( [ 0, 0 ] ); + if ( nodeToMove && nodeToMove.type == 1 ) + { + nodeToMove.focus(); + onBlur( ev, element ); + onFocus( ev, nodeToMove ); + ev.preventDefault( true ); + } + else + onBlur( null, element ); + } + break; + + // LEFT-ARROW + case rtl ? 39 : 37 : + // relative is TD + if ( ( relative = element.getParent().getPrevious() ) ) + { + nodeToMove = relative.getChild( 0 ); + nodeToMove.focus(); + onBlur( ev, element ); + onFocus( ev, nodeToMove ); + ev.preventDefault( true ); + } + // relative is TR + else if ( ( relative = element.getParent().getParent().getPrevious() ) ) + { + nodeToMove = relative.getLast().getChild( 0 ); + nodeToMove.focus(); + onBlur( ev, element ); + onFocus( ev, nodeToMove ); + ev.preventDefault( true ); + } + else + onBlur( null, element ); + break; + default : + // Do not stop not handled events. + return; + } + }); + + function createColorTable() + { + // Create the base colors array. + var aColors = [ '00', '33', '66', '99', 'cc', 'ff' ]; + + // This function combines two ranges of three values from the color array into a row. + function appendColorRow( rangeA, rangeB ) + { + for ( var i = rangeA ; i < rangeA + 3 ; i++ ) + { + var row = table.$.insertRow( -1 ); + + for ( var j = rangeB ; j < rangeB + 3 ; j++ ) + { + for ( var n = 0 ; n < 6 ; n++ ) + { + appendColorCell( row, '#' + aColors[j] + aColors[n] + aColors[i] ); + } + } + } + } + + // This function create a single color cell in the color table. + function appendColorCell( targetRow, color ) + { + var cell = new $el( targetRow.insertCell( -1 ) ); + cell.setAttribute( 'class', 'ColorCell' ); + cell.setStyle( 'background-color', color ); + + cell.setStyle( 'width', '15px' ); + cell.setStyle( 'height', '15px' ); + + var index = cell.$.cellIndex + 1 + 18 * targetRow.rowIndex; + cell.append( CKEDITOR.dom.element.createFromHtml( + '<a href="javascript: void(0);" role="option"' + + ' aria-posinset="' + index + '"' + + ' aria-setsize="' + 13 * 18 + '"' + + ' style="cursor: pointer;display:block;width:100%;height:100% " title="'+ CKEDITOR.tools.htmlEncode( color )+ '"' + + ' onkeydown="CKEDITOR.tools.callFunction( ' + onKeydownHandler + ', event, this )"' + + ' onclick="CKEDITOR.tools.callFunction(' + onClickHandler + ', event, this ); return false;"' + + ' tabindex="-1"><span class="cke_voice_label">' + color + '</span> </a>', CKEDITOR.document ) ); + } + + appendColorRow( 0, 0 ); + appendColorRow( 3, 0 ); + appendColorRow( 0, 3 ); + appendColorRow( 3, 3 ); + + // Create the last row. + var oRow = table.$.insertRow(-1) ; + + // Create the gray scale colors cells. + for ( var n = 0 ; n < 6 ; n++ ) + { + appendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ; + } + + // Fill the row with black cells. + for ( var i = 0 ; i < 12 ; i++ ) + { + appendColorCell( oRow, '#000000' ) ; + } + } + + var table = new $el( 'table' ); + createColorTable(); + var html = table.getHtml(); + + var numbering = function( id ) + { + return CKEDITOR.tools.getNextId() + '_' + id; + }, + hicolorId = numbering( 'hicolor' ), + hicolorTextId = numbering( 'hicolortext' ), + selHiColorId = numbering( 'selhicolor' ), + tableLabelId = numbering( 'color_table_label' ); + + return { + title : lang.title, + minWidth : 360, + minHeight : 220, + onLoad : function() + { + // Update reference. + dialog = this; + }, + contents : [ + { + id : 'picker', + label : lang.title, + accessKey : 'I', + elements : + [ + { + type : 'hbox', + padding : 0, + widths : [ '70%', '10%', '30%' ], + children : + [ + { + type : 'html', + html : '<table role="listbox" aria-labelledby="' + tableLabelId + '" onmouseout="CKEDITOR.tools.callFunction( ' + onMouseout + ' );">' + + ( !CKEDITOR.env.webkit ? html : '' ) + + '</table><span id="' + tableLabelId + '" class="cke_voice_label">' + lang.options +'</span>', + onLoad : function() + { + var table = CKEDITOR.document.getById( this.domId ); + table.on( 'mouseover', updateHighlight ); + // In WebKit, the table content must be inserted after this event call (#6150) + CKEDITOR.env.webkit && table.setHtml( html ); + }, + focus: function() + { + var firstColor = this.getElement().getElementsByTag( 'a' ).getItem( 0 ); + firstColor.focus(); + } + }, + spacer, + { + type : 'vbox', + padding : 0, + widths : [ '70%', '5%', '25%' ], + children : + [ + { + type : 'html', + html : '<span>' + lang.highlight +'</span>\ + <div id="' + hicolorId + '" style="border: 1px solid; height: 74px; width: 74px;"></div>\ + <div id="' + hicolorTextId + '"> </div><span>' + lang.selected + '</span>\ + <div id="' + selHiColorId + '" style="border: 1px solid; height: 20px; width: 74px;"></div>' + }, + { + type : 'text', + label : lang.selected, + labelStyle: 'display:none', + id : 'selectedColor', + style : 'width: 74px', + onChange : function() + { + // Try to update color preview with new value. If fails, then set it no none. + try + { + $doc.getById( selHiColorId ).setStyle( 'background-color', this.getValue() ); + } + catch ( e ) + { + clearSelected(); + } + } + }, + spacer, + { + type : 'button', + id : 'clear', + style : 'margin-top: 5px', + label : lang.clear, + onClick : clearSelected + } + ] + } + ] + } + ] + } + ] + }; + } + ); diff --git a/_source/plugins/colordialog/plugin.js b/_source/plugins/colordialog/plugin.js new file mode 100644 index 0000000..ca7f44e --- /dev/null +++ b/_source/plugins/colordialog/plugin.js @@ -0,0 +1,15 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.colordialog = +{ + init : function( editor ) + { + editor.addCommand( 'colordialog', new CKEDITOR.dialogCommand( 'colordialog' ) ); + CKEDITOR.dialog.add( 'colordialog', this.path + 'dialogs/colordialog.js' ); + } +}; + +CKEDITOR.plugins.add( 'colordialog', CKEDITOR.plugins.colordialog ); diff --git a/_source/plugins/contextmenu/plugin.js b/_source/plugins/contextmenu/plugin.js new file mode 100644 index 0000000..31bc859 --- /dev/null +++ b/_source/plugins/contextmenu/plugin.js @@ -0,0 +1,177 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'contextmenu', +{ + requires : [ 'menu' ], + + // Make sure the base class (CKEDITOR.menu) is loaded before it (#3318). + onLoad : function() + { + CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass( + { + base : CKEDITOR.menu, + + $ : function( editor ) + { + this.base.call( this, editor, + { + panel: + { + className : editor.skinClass + ' cke_contextmenu', + attributes : + { + 'aria-label' : editor.lang.contextmenu.options + } + } + }); + }, + + proto : + { + addTarget : function( element, nativeContextMenuOnCtrl ) + { + // Opera doesn't support 'contextmenu' event, we have duo approaches employed here: + // 1. Inherit the 'button override' hack we introduced in v2 (#4530), while this require the Opera browser + // option 'Allow script to detect context menu/right click events' to be always turned on. + // 2. Considering the fact that ctrl/meta key is not been occupied + // for multiple range selecting (like Gecko), we use this key + // combination as a fallback for triggering context-menu. (#4530) + if ( CKEDITOR.env.opera && !( 'oncontextmenu' in document.body )) + { + var contextMenuOverrideButton; + element.on( 'mousedown', function( evt ) + { + evt = evt.data; + if ( evt.$.button != 2 ) + { + if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 ) + element.fire( 'contextmenu', evt ); + return; + } + + if ( nativeContextMenuOnCtrl + && ( CKEDITOR.env.mac ? evt.$.metaKey : evt.$.ctrlKey ) ) + return; + + var target = evt.getTarget(); + + if ( !contextMenuOverrideButton ) + { + var ownerDoc = target.getDocument(); + contextMenuOverrideButton = ownerDoc.createElement( 'input' ) ; + contextMenuOverrideButton.$.type = 'button' ; + ownerDoc.getBody().append( contextMenuOverrideButton ) ; + } + + contextMenuOverrideButton.setAttribute( 'style', 'position:absolute;top:' + ( evt.$.clientY - 2 ) + + 'px;left:' + ( evt.$.clientX - 2 ) + + 'px;width:5px;height:5px;opacity:0.01' ); + + } ); + + element.on( 'mouseup', function ( evt ) + { + if ( contextMenuOverrideButton ) + { + contextMenuOverrideButton.remove(); + contextMenuOverrideButton = undefined; + // Simulate 'contextmenu' event. + element.fire( 'contextmenu', evt.data ); + } + } ); + } + + element.on( 'contextmenu', function( event ) + { + var domEvent = event.data; + + if ( nativeContextMenuOnCtrl && + // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event, + // which make this property unreliable. (#4826) + ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ) ) + return; + + + // Cancel the browser context menu. + domEvent.preventDefault(); + + var offsetParent = domEvent.getTarget().getDocument().getDocumentElement(), + offsetX = domEvent.$.clientX, + offsetY = domEvent.$.clientY; + + CKEDITOR.tools.setTimeout( function() + { + this.open( offsetParent, null, offsetX, offsetY ); + }, + 0, this ); + }, + this ); + + if ( CKEDITOR.env.opera ) + { + // 'contextmenu' event triggered by Windows menu key is unpreventable, + // cancel the key event itself. (#6534) + element.on( 'keypress' , function ( evt ) + { + var domEvent = evt.data; + + if ( domEvent.$.keyCode === 0 ) + domEvent.preventDefault(); + }); + } + + if ( CKEDITOR.env.webkit ) + { + var holdCtrlKey, + onKeyDown = function( event ) + { + holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey ; + }, + resetOnKeyUp = function() + { + holdCtrlKey = 0; + }; + + element.on( 'keydown', onKeyDown ); + element.on( 'keyup', resetOnKeyUp ); + element.on( 'contextmenu', resetOnKeyUp ); + } + }, + + open : function( offsetParent, corner, offsetX, offsetY ) + { + this.editor.focus(); + offsetParent = offsetParent || CKEDITOR.document.getDocumentElement(); + this.show( offsetParent, corner, offsetX, offsetY ); + } + } + }); + }, + + beforeInit : function( editor ) + { + editor.contextMenu = new CKEDITOR.plugins.contextMenu( editor ); + + editor.addCommand( 'contextMenu', + { + exec : function() + { + editor.contextMenu.open( editor.document.getBody() ); + } + }); + } +}); + +/** + * Whether to show the browser native context menu when the CTRL or the + * META (Mac) key is pressed while opening the context menu. + * @name CKEDITOR.config.browserContextMenuOnCtrl + * @since 3.0.2 + * @type Boolean + * @default true + * @example + * config.browserContextMenuOnCtrl = false; + */ diff --git a/_source/plugins/devtools/lang/en.js b/_source/plugins/devtools/lang/en.js new file mode 100644 index 0000000..3281505 --- /dev/null +++ b/_source/plugins/devtools/lang/en.js @@ -0,0 +1,16 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang( 'devtools', 'en', +{ + devTools : + { + title : 'Element Information', + dialogName : 'Dialog window name', + tabName : 'Tab name', + elementId : 'Element ID', + elementType : 'Element type' + } +}); diff --git a/_source/plugins/devtools/plugin.js b/_source/plugins/devtools/plugin.js new file mode 100644 index 0000000..a53b504 --- /dev/null +++ b/_source/plugins/devtools/plugin.js @@ -0,0 +1,173 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'devtools', +{ + lang : [ 'en' ], + + init : function( editor ) + { + editor._.showDialogDefinitionTooltips = 1; + }, + onLoad : function() + { + CKEDITOR.document.appendStyleText( CKEDITOR.config.devtools_styles || + '#cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff }' + + '#cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; }' + + '#cke_tooltip ul { padding: 0pt; list-style-type: none; }' ); + } +}); + +(function() +{ + function defaultCallback( editor, dialog, element, tabName ) + { + var lang = editor.lang.devTools, + link = '<a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.' + + ( element ? ( element.type == 'text' ? 'textInput' : element.type ) : 'content' ) + + '.html" target="_blank">' + ( element ? element.type : 'content' ) + '</a>', + str = + '<h2>' + lang.title + '</h2>' + + '<ul>' + + '<li><strong>' + lang.dialogName + '</strong> : ' + dialog.getName() + '</li>' + + '<li><strong>' + lang.tabName + '</strong> : ' + tabName + '</li>'; + + if ( element ) + str += '<li><strong>' + lang.elementId + '</strong> : ' + element.id + '</li>'; + + str += '<li><strong>' + lang.elementType + '</strong> : ' + link + '</li>'; + + return str + '</ul>'; + } + + function showTooltip( callback, el, editor, dialog, obj, tabName ) + { + var pos = el.getDocumentPosition(), + styles = { 'z-index' : CKEDITOR.dialog._.currentZIndex + 10, top : ( pos.y + el.getSize( 'height' ) ) + 'px' }; + + tooltip.setHtml( callback( editor, dialog, obj, tabName ) ); + tooltip.show(); + + // Translate coordinate for RTL. + if ( editor.lang.dir == 'rtl' ) + { + var viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(); + styles.right = ( viewPaneSize.width - pos.x - el.getSize( 'width' ) ) + 'px'; + } + else + styles.left = pos.x + 'px'; + + tooltip.setStyles( styles ); + } + + var tooltip; + CKEDITOR.on( 'reset', function() + { + tooltip && tooltip.remove(); + tooltip = null; + }); + + CKEDITOR.on( 'dialogDefinition', function( evt ) + { + var editor = evt.editor; + if ( editor._.showDialogDefinitionTooltips ) + { + if ( !tooltip ) + { + tooltip = CKEDITOR.dom.element.createFromHtml( '<div id="cke_tooltip" tabindex="-1" style="position: absolute"></div>', CKEDITOR.document ); + tooltip.hide(); + tooltip.on( 'mouseover', function(){ this.show(); } ); + tooltip.on( 'mouseout', function(){ this.hide(); } ); + tooltip.appendTo( CKEDITOR.document.getBody() ); + } + + var dialog = evt.data.definition.dialog, + callback = editor.config.devtools_textCallback || defaultCallback; + + dialog.on( 'load', function() + { + var tabs = dialog.parts.tabs.getChildren(), tab; + for ( var i = 0, len = tabs.count(); i < len; i++ ) + { + tab = tabs.getItem( i ); + tab.on( 'mouseover', function() + { + var id = this.$.id; + showTooltip( callback, this, editor, dialog, null, id.substring( 4, id.lastIndexOf( '_' ) ) ); + }); + tab.on( 'mouseout', function() + { + tooltip.hide(); + }); + } + + dialog.foreach( function( obj ) + { + if ( obj.type in { hbox : 1, vbox : 1 } ) + return; + + var el = obj.getElement(); + if ( el ) + { + el.on( 'mouseover', function() + { + showTooltip( callback, this, editor, dialog, obj, dialog._.currentTabId ); + }); + el.on( 'mouseout', function() + { + tooltip.hide(); + }); + } + }); + }); + } + }); +})(); + +/** + * A function that returns the text to be displayed inside the developer tooltip when hovering over a dialog UI element. + * There are 4 parameters that are being passed into the function: editor, dialog, element, tab name. + * @name editor.config.devtools_textCallback + * @since 3.6 + * @type Function + * @default (see example) + * @example + * // This is actually the default value. + * // Show dialog name, tab id and element id. + * config.devtools_textCallback = function( editor, dialog, element, tabName ) + * { + * var lang = editor.lang.devTools, + * link = '<a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.' + + * ( element ? ( element.type == 'text' ? 'textInput' : element.type ) : 'content' ) + + * '.html" target="_blank">' + ( element ? element.type : 'content' ) + '</a>', + * str = + * '<h2>' + lang.title + '</h2>' + + * '<ul>' + + * '<li><strong>' + lang.dialogName + '</strong> : ' + dialog.getName() + '</li>' + + * '<li><strong>' + lang.tabName + '</strong> : ' + tabName + '</li>'; + * + * if ( element ) + * str += '<li><strong>' + lang.elementId + '</strong> : ' + element.id + '</li>'; + * + * str += '<li><strong>' + lang.elementType + '</strong> : ' + link + '</li>'; + * + * return str + '</ul>'; + * } + */ + +/** + * A setting that holds CSS rules to be injected do page and contain styles to be applied to the tooltip element. + * @name CKEDITOR.config.devtools_styles + * @since 3.6 + * @type String + * @default (see example) + * @example + * // This is actually the default value. + * CKEDITOR.config.devtools_styles = " + * #cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff } + * #cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; } + * #cke_tooltip ul { padding: 0pt; list-style-type: none; } + * "; + */ diff --git a/_source/plugins/dialog/dialogDefinition.js b/_source/plugins/dialog/dialogDefinition.js new file mode 100644 index 0000000..a3db7f8 --- /dev/null +++ b/_source/plugins/dialog/dialogDefinition.js @@ -0,0 +1,1166 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the "virtual" dialog, dialog content and dialog button + * definition classes. + */ + +/** + * The definition of a dialog window. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create dialogs. + * </div> + * @name CKEDITOR.dialog.definition + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * CKEDITOR.dialog.add( 'testOnly', function( editor ) + * { + * return { + * title : 'Test Dialog', + * resizable : CKEDITOR.DIALOG_RESIZE_BOTH, + * minWidth : 500, + * minHeight : 400, + * contents : [ + * { + * id : 'tab1', + * label : 'First Tab', + * title : 'First Tab Title', + * accessKey : 'Q', + * elements : [ + * { + * type : 'text', + * label : 'Test Text 1', + * id : 'testText1', + * 'default' : 'hello world!' + * } + * ] + * } + * ] + * }; + * }); + */ + +/** + * The dialog title, displayed in the dialog's header. Required. + * @name CKEDITOR.dialog.definition.prototype.title + * @field + * @type String + * @example + */ + +/** + * How the dialog can be resized, must be one of the four contents defined below. + * <br /><br /> + * <strong>CKEDITOR.DIALOG_RESIZE_NONE</strong><br /> + * <strong>CKEDITOR.DIALOG_RESIZE_WIDTH</strong><br /> + * <strong>CKEDITOR.DIALOG_RESIZE_HEIGHT</strong><br /> + * <strong>CKEDITOR.DIALOG_RESIZE_BOTH</strong><br /> + * @name CKEDITOR.dialog.definition.prototype.resizable + * @field + * @type Number + * @default CKEDITOR.DIALOG_RESIZE_NONE + * @example + */ + +/** + * The minimum width of the dialog, in pixels. + * @name CKEDITOR.dialog.definition.prototype.minWidth + * @field + * @type Number + * @default 600 + * @example + */ + +/** + * The minimum height of the dialog, in pixels. + * @name CKEDITOR.dialog.definition.prototype.minHeight + * @field + * @type Number + * @default 400 + * @example + */ + + +/** + * The initial width of the dialog, in pixels. + * @name CKEDITOR.dialog.definition.prototype.width + * @field + * @type Number + * @default @CKEDITOR.dialog.definition.prototype.minWidth + * @since 3.5.3 + * @example + */ + +/** + * The initial height of the dialog, in pixels. + * @name CKEDITOR.dialog.definition.prototype.height + * @field + * @type Number + * @default @CKEDITOR.dialog.definition.prototype.minHeight + * @since 3.5.3 + * @example + */ + +/** + * The buttons in the dialog, defined as an array of + * {@link CKEDITOR.dialog.definition.button} objects. + * @name CKEDITOR.dialog.definition.prototype.buttons + * @field + * @type Array + * @default [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ] + * @example + */ + +/** + * The contents in the dialog, defined as an array of + * {@link CKEDITOR.dialog.definition.content} objects. Required. + * @name CKEDITOR.dialog.definition.prototype.contents + * @field + * @type Array + * @example + */ + +/** + * The function to execute when OK is pressed. + * @name CKEDITOR.dialog.definition.prototype.onOk + * @field + * @type Function + * @example + */ + +/** + * The function to execute when Cancel is pressed. + * @name CKEDITOR.dialog.definition.prototype.onCancel + * @field + * @type Function + * @example + */ + +/** + * The function to execute when the dialog is displayed for the first time. + * @name CKEDITOR.dialog.definition.prototype.onLoad + * @field + * @type Function + * @example + */ + +/** + * The function to execute when the dialog is loaded (executed every time the dialog is opened). + * @name CKEDITOR.dialog.definition.prototype.onShow + * @field + * @type Function + * @example + */ + +/** + * <div class="notapi">This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create dialog content pages.</div> + * @name CKEDITOR.dialog.definition.content + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + */ + +/** + * The id of the content page. + * @name CKEDITOR.dialog.definition.content.prototype.id + * @field + * @type String + * @example + */ + +/** + * The tab label of the content page. + * @name CKEDITOR.dialog.definition.content.prototype.label + * @field + * @type String + * @example + */ + +/** + * The popup message of the tab label. + * @name CKEDITOR.dialog.definition.content.prototype.title + * @field + * @type String + * @example + */ + +/** + * The CTRL hotkey for switching to the tab. + * @name CKEDITOR.dialog.definition.content.prototype.accessKey + * @field + * @type String + * @example + * contentDefinition.accessKey = 'Q'; // Switch to this page when CTRL-Q is pressed. + */ + +/** + * The UI elements contained in this content page, defined as an array of + * {@link CKEDITOR.dialog.definition.uiElement} objects. + * @name CKEDITOR.dialog.definition.content.prototype.elements + * @field + * @type Array + * @example + */ + +/** + * The definition of user interface element (textarea, radio etc). + * <div class="notapi">This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create dialog UI elements.</div> + * @name CKEDITOR.dialog.definition.uiElement + * @constructor + * @see CKEDITOR.ui.dialog.uiElement + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + */ + +/** + * The id of the UI element. + * @name CKEDITOR.dialog.definition.uiElement.prototype.id + * @field + * @type String + * @example + */ + +/** + * The type of the UI element. Required. + * @name CKEDITOR.dialog.definition.uiElement.prototype.type + * @field + * @type String + * @example + */ + +/** + * The popup label of the UI element. + * @name CKEDITOR.dialog.definition.uiElement.prototype.title + * @field + * @type String + * @example + */ + +/** + * CSS class names to append to the UI element. + * @name CKEDITOR.dialog.definition.uiElement.prototype.className + * @field + * @type String + * @example + */ + +/** + * Inline CSS classes to append to the UI element. + * @name CKEDITOR.dialog.definition.uiElement.prototype.style + * @field + * @type String + * @example + */ + +/** + * Horizontal alignment (in container) of the UI element. + * @name CKEDITOR.dialog.definition.uiElement.prototype.align + * @field + * @type String + * @example + */ + +/** + * Function to execute the first time the UI element is displayed. + * @name CKEDITOR.dialog.definition.uiElement.prototype.onLoad + * @field + * @type Function + * @example + */ + +/** + * Function to execute whenever the UI element's parent dialog is displayed. + * @name CKEDITOR.dialog.definition.uiElement.prototype.onShow + * @field + * @type Function + * @example + */ + +/** + * Function to execute whenever the UI element's parent dialog is closed. + * @name CKEDITOR.dialog.definition.uiElement.prototype.onHide + * @field + * @type Function + * @example + */ + +/** + * Function to execute whenever the UI element's parent dialog's {@link CKEDITOR.dialog.definition.setupContent} method is executed. + * It usually takes care of the respective UI element as a standalone element. + * @name CKEDITOR.dialog.definition.uiElement.prototype.setup + * @field + * @type Function + * @example + */ + +/** + * Function to execute whenever the UI element's parent dialog's {@link CKEDITOR.dialog.definition.commitContent} method is executed. + * It usually takes care of the respective UI element as a standalone element. + * @name CKEDITOR.dialog.definition.uiElement.prototype.commit + * @field + * @type Function + * @example + */ + +// ----- hbox ----- + +/** + * Horizontal layout box for dialog UI elements, auto-expends to available width of container. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create horizontal layouts. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.hbox} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * @name CKEDITOR.dialog.definition.hbox + * @extends CKEDITOR.dialog.definition.uiElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * <b>type : 'hbox',</b> + * widths : [ '25%', '25%', '50%' ], + * children : + * [ + * { + * type : 'text', + * id : 'id1', + * width : '40px', + * }, + * { + * type : 'text', + * id : 'id2', + * width : '40px', + * }, + * { + * type : 'text', + * id : 'id3' + * } + * ] + * } + */ + +/** + * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. + * @name CKEDITOR.dialog.definition.hbox.prototype.children + * @field + * @type Array + * @example + */ + +/** + * (Optional) The widths of child cells. + * @name CKEDITOR.dialog.definition.hbox.prototype.widths + * @field + * @type Array + * @example + */ + +/** + * (Optional) The height of the layout. + * @name CKEDITOR.dialog.definition.hbox.prototype.height + * @field + * @type Number + * @example + */ + +/** + * The CSS styles to apply to this element. + * @name CKEDITOR.dialog.definition.hbox.prototype.styles + * @field + * @type String + * @example + */ + +/** + * (Optional) The padding width inside child cells. Example: 0, 1. + * @name CKEDITOR.dialog.definition.hbox.prototype.padding + * @field + * @type Number + * @example + */ + +/** + * (Optional) The alignment of the whole layout. Example: center, top. + * @name CKEDITOR.dialog.definition.hbox.prototype.align + * @field + * @type String + * @example + */ + +// ----- vbox ----- + +/** + * Vertical layout box for dialog UI elements. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create vertical layouts. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.vbox} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * <style type="text/css">.details .detailList {display:none;} </style> + * @name CKEDITOR.dialog.definition.vbox + * @extends CKEDITOR.dialog.definition.uiElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * <b>type : 'vbox',</b> + * align : 'right', + * width : '200px', + * children : + * [ + * { + * type : 'text', + * id : 'age', + * label : 'Age' + * }, + * { + * type : 'text', + * id : 'sex', + * label : 'Sex' + * }, + * { + * type : 'text', + * id : 'nationality', + * label : 'Nationality' + * } + * ] + * } + */ + +/** + * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. + * @name CKEDITOR.dialog.definition.vbox.prototype.children + * @field + * @type Array + * @example + */ + +/** + * (Optional) The width of the layout. + * @name CKEDITOR.dialog.definition.vbox.prototype.width + * @field + * @type Array + * @example + */ + +/** + * (Optional) The heights of individual cells. + * @name CKEDITOR.dialog.definition.vbox.prototype.heights + * @field + * @type Number + * @example + */ + +/** + * The CSS styles to apply to this element. + * @name CKEDITOR.dialog.definition.vbox.prototype.styles + * @field + * @type String + * @example + */ + +/** + * (Optional) The padding width inside child cells. Example: 0, 1. + * @name CKEDITOR.dialog.definition.vbox.prototype.padding + * @field + * @type Number + * @example + */ + +/** + * (Optional) The alignment of the whole layout. Example: center, top. + * @name CKEDITOR.dialog.definition.vbox.prototype.align + * @field + * @type String + * @example + */ + +/** + * (Optional) Whether the layout should expand vertically to fill its container. + * @name CKEDITOR.dialog.definition.vbox.prototype.expand + * @field + * @type Boolean + * @example + */ + +// ----- labeled element ------ + +/** + * The definition of labeled user interface element (textarea, textInput etc). + * <div class="notapi">This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create dialog UI elements.</div> + * @name CKEDITOR.dialog.definition.labeledElement + * @extends CKEDITOR.dialog.definition.uiElement + * @constructor + * @see CKEDITOR.ui.dialog.labeledElement + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + */ + +/** + * The label of the UI element. + * @name CKEDITOR.dialog.definition.labeledElement.prototype.label + * @type String + * @field + * @example + * { + * type : 'text', + * label : 'My Label ' + * } + */ + +/** + * (Optional) Specify the layout of the label. Set to 'horizontal' for horizontal layout. + * The default layout is vertical. + * @name CKEDITOR.dialog.definition.labeledElement.prototype.labelLayout + * @type String + * @field + * @example + * { + * type : 'text', + * label : 'My Label ', + * <strong> labelLayout : 'horizontal',</strong> + * } + */ + +/** + * (Optional) Applies only to horizontal layouts: a two elements array of lengths to specify the widths of the +* label and the content element. See also {@link CKEDITOR.dialog.definition.labeledElement#labelLayout}. + * @name CKEDITOR.dialog.definition.labeledElement.prototype.widths + * @type Array + * @field + * @example + * { + * type : 'text', + * label : 'My Label ', + * labelLayout : 'horizontal', + * <strong> widths : [100, 200],</strong> + * } + */ + +/** + * Specify the inline style of the uiElement label. + * @name CKEDITOR.dialog.definition.labeledElement.prototype.labelStyle + * @type String + * @field + * @example + * { + * type : 'text', + * label : 'My Label ', + * <strong> labelStyle : 'color: red',</strong> + * } + */ + + +/** + * Specify the inline style of the input element. + * @name CKEDITOR.dialog.definition.labeledElement.prototype.inputStyle + * @type String + * @since 3.6.1 + * @field + * @example + * { + * type : 'text', + * label : 'My Label ', + * <strong> inputStyle : 'text-align:center',</strong> + * } + */ + +/** + * Specify the inline style of the input element container . + * @name CKEDITOR.dialog.definition.labeledElement.prototype.controlStyle + * @type String + * @since 3.6.1 + * @field + * @example + * { + * type : 'text', + * label : 'My Label ', + * <strong> controlStyle : 'width:3em',</strong> + * } + */ + + +// ----- button ------ + +/** + * The definition of a button. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create buttons. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.button} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}. + * @name CKEDITOR.dialog.definition.button + * @extends CKEDITOR.dialog.definition.uiElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * <b>type : 'button',</b> + * id : 'buttonId', + * label : 'Click me', + * title : 'My title', + * onClick : function() { + * // this = CKEDITOR.ui.dialog.button + * alert( 'Clicked: ' + this.id ); + * } + * } + */ + +/** + * Whether the button is disabled. + * @name CKEDITOR.dialog.definition.button.prototype.disabled + * @type Boolean + * @field + * @example + */ + +/** + * The label of the UI element. + * @name CKEDITOR.dialog.definition.button.prototype.label + * @type String + * @field + * @example + */ + +// ----- checkbox ------ + +/** + * The definition of a checkbox element. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create groups of checkbox buttons. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.checkbox} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}. + * @name CKEDITOR.dialog.definition.checkbox + * @extends CKEDITOR.dialog.definition.uiElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * <b>type : 'checkbox',</b> + * id : 'agree', + * label : 'I agree', + * 'default' : 'checked', + * onClick : function() { + * // this = CKEDITOR.ui.dialog.checkbox + * alert( 'Checked: ' + this.getValue() ); + * } + * } + */ + +/** + * (Optional) The validation function. + * @name CKEDITOR.dialog.definition.checkbox.prototype.validate + * @field + * @type Function + * @example + */ + +/** + * The label of the UI element. + * @name CKEDITOR.dialog.definition.checkbox.prototype.label + * @type String + * @field + * @example + */ + +/** + * The default state. + * @name CKEDITOR.dialog.definition.checkbox.prototype.default + * @type String + * @field + * @default + * '' (unchecked) + * @example + */ + +// ----- file ----- + +/** + * The definition of a file upload input. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create file upload elements. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.file} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}. + * @name CKEDITOR.dialog.definition.file + * @extends CKEDITOR.dialog.definition.labeledElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * <b>type : 'file'</b>, + * id : 'upload', + * label : 'Select file from your computer', + * size : 38 + * }, + * { + * type : 'fileButton', + * id : 'fileId', + * label : 'Upload file', + * 'for' : [ 'tab1', 'upload' ] + * filebrowser : { + * onSelect : function( fileUrl, data ) { + * alert( 'Successfully uploaded: ' + fileUrl ); + * } + * } + * } + */ + +/** + * (Optional) The validation function. + * @name CKEDITOR.dialog.definition.file.prototype.validate + * @field + * @type Function + * @example + */ + +/** + * (Optional) The action attribute of the form element associated with this file upload input. + * If empty, CKEditor will use path to server connector for currently opened folder. + * @name CKEDITOR.dialog.definition.file.prototype.action + * @type String + * @field + * @example + */ + +/** + * The size of the UI element. + * @name CKEDITOR.dialog.definition.file.prototype.size + * @type Number + * @field + * @example + */ + +// ----- fileButton ----- + +/** + * The definition of a button for submitting the file in a file upload input. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create a button for submitting the file in a file upload input. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.fileButton} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}. + * @name CKEDITOR.dialog.definition.fileButton + * @extends CKEDITOR.dialog.definition.uiElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * type : 'file', + * id : 'upload', + * label : 'Select file from your computer', + * size : 38 + * }, + * { + * <b>type : 'fileButton'</b>, + * id : 'fileId', + * label : 'Upload file', + * 'for' : [ 'tab1', 'upload' ] + * filebrowser : { + * onSelect : function( fileUrl, data ) { + * alert( 'Successfully uploaded: ' + fileUrl ); + * } + * } + * } + */ + +/** + * (Optional) The validation function. + * @name CKEDITOR.dialog.definition.fileButton.prototype.validate + * @field + * @type Function + * @example + */ + +/** + * The label of the UI element. + * @name CKEDITOR.dialog.definition.fileButton.prototype.label + * @type String + * @field + * @example + */ + +/** + * The instruction for CKEditor how to deal with file upload. + * By default, the file and fileButton elements will not work "as expected" if this attribute is not set. + * @name CKEDITOR.dialog.definition.fileButton.prototype.filebrowser + * @type String|Object + * @field + * @example + * // Update field with id 'txtUrl' in the 'tab1' tab when file is uploaded. + * filebrowser : 'tab1:txtUrl' + * + * // Call custom onSelect function when file is successfully uploaded. + * filebrowser : { + * onSelect : function( fileUrl, data ) { + * alert( 'Successfully uploaded: ' + fileUrl ); + * } + * } + */ + +/** + * An array that contains pageId and elementId of the file upload input element for which this button is created. + * @name CKEDITOR.dialog.definition.fileButton.prototype.for + * @type String + * @field + * @example + * [ pageId, elementId ] + */ + +// ----- html ----- + +/** + * The definition of a raw HTML element. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create elements made from raw HTML code. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.html} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}.<br /> + * To access HTML elements use {@link CKEDITOR.dom.document#getById} + * @name CKEDITOR.dialog.definition.html + * @extends CKEDITOR.dialog.definition.uiElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example 1: + * { + * <b>type : 'html',</b> + * html : '<h3>This is some sample HTML content.</h3>' + * } + * @example + * // Example 2: + * // Complete sample with document.getById() call when the "Ok" button is clicked. + * var dialogDefinition = + * { + * title : 'Sample dialog', + * minWidth : 300, + * minHeight : 200, + * onOk : function() { + * // "this" is now a CKEDITOR.dialog object. + * var document = this.getElement().getDocument(); + * // document = CKEDITOR.dom.document + * var element = <b>document.getById( 'myDiv' );</b> + * if ( element ) + * alert( element.getHtml() ); + * }, + * contents : [ + * { + * id : 'tab1', + * label : '', + * title : '', + * elements : + * [ + * { + * <b>type : 'html',</b> + * html : '<b><div id="myDiv">Sample <b>text</b>.</div></b><div id="otherId">Another div.</div>' + * }, + * ] + * } + * ], + * buttons : [ CKEDITOR.dialog.cancelButton, CKEDITOR.dialog.okButton ] + * }; + */ + +/** + * (Required) HTML code of this element. + * @name CKEDITOR.dialog.definition.html.prototype.html + * @type String + * @field + * @example + */ + +// ----- radio ------ + +/** + * The definition of a radio group. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create groups of radio buttons. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.radio} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}. + * @name CKEDITOR.dialog.definition.radio + * @extends CKEDITOR.dialog.definition.labeledElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * <b>type : 'radio',</b> + * id : 'country', + * label : 'Which country is bigger', + * items : [ [ 'France', 'FR' ], [ 'Germany', 'DE' ] ] , + * style : 'color:green', + * 'default' : 'DE', + * onClick : function() { + * // this = CKEDITOR.ui.dialog.radio + * alert( 'Current value: ' + this.getValue() ); + * } + * } + */ + +/** + * The default value. + * @name CKEDITOR.dialog.definition.radio.prototype.default + * @type String + * @field + * @example + */ + +/** + * (Optional) The validation function. + * @name CKEDITOR.dialog.definition.radio.prototype.validate + * @field + * @type Function + * @example + */ + +/** + * An array of options. Each option is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value' is missing, then the value would be assumed to be the same as the description. + * @name CKEDITOR.dialog.definition.radio.prototype.items + * @field + * @type Array + * @example + */ + +// ----- selectElement ------ + +/** + * The definition of a select element. + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create select elements. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.select} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}. + * @name CKEDITOR.dialog.definition.select + * @extends CKEDITOR.dialog.definition.labeledElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * <b>type : 'select',</b> + * id : 'sport', + * label : 'Select your favourite sport', + * items : [ [ 'Basketball' ], [ 'Baseball' ], [ 'Hockey' ], [ 'Football' ] ], + * 'default' : 'Football', + * onChange : function( api ) { + * // this = CKEDITOR.ui.dialog.select + * alert( 'Current value: ' + this.getValue() ); + * } + * } + */ + +/** + * The default value. + * @name CKEDITOR.dialog.definition.select.prototype.default + * @type String + * @field + * @example + */ + +/** + * (Optional) The validation function. + * @name CKEDITOR.dialog.definition.select.prototype.validate + * @field + * @type Function + * @example + */ + +/** + * An array of options. Each option is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value' is missing, then the value would be assumed to be the same as the description. + * @name CKEDITOR.dialog.definition.select.prototype.items + * @field + * @type Array + * @example + */ + +/** + * (Optional) Set this to true if you'd like to have a multiple-choice select box. + * @name CKEDITOR.dialog.definition.select.prototype.multiple + * @type Boolean + * @field + * @example + * @default false + */ + +/** + * (Optional) The number of items to display in the select box. + * @name CKEDITOR.dialog.definition.select.prototype.size + * @type Number + * @field + * @example + */ + +// ----- textInput ----- + +/** + * The definition of a text field (single line). + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create text fields. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.textInput} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}. + * @name CKEDITOR.dialog.definition.textInput + * @extends CKEDITOR.dialog.definition.labeledElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * { + * <b>type : 'text',</b> + * id : 'name', + * label : 'Your name', + * 'default' : '', + * validate : function() { + * if ( !this.getValue() ) + * { + * api.openMsgDialog( '', 'Name cannot be empty.' ); + * return false; + * } + * } + * } + */ + +/** + * The default value. + * @name CKEDITOR.dialog.definition.textInput.prototype.default + * @type String + * @field + * @example + */ + +/** + * (Optional) The maximum length. + * @name CKEDITOR.dialog.definition.textInput.prototype.maxLength + * @type Number + * @field + * @example + */ + +/** + * (Optional) The size of the input field. + * @name CKEDITOR.dialog.definition.textInput.prototype.size + * @type Number + * @field + * @example + */ + +/** + * (Optional) The validation function. + * @name CKEDITOR.dialog.definition.textInput.prototype.validate + * @field + * @type Function + * @example + */ + +// ----- textarea ------ + +/** + * The definition of a text field (multiple lines). + * <div class="notapi"> + * This class is not really part of the API. It just illustrates the properties + * that developers can use to define and create textarea. + * <br /><br />Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.textarea} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. + * </div> + * For a complete example of dialog definition, please check {@link CKEDITOR.dialog.add}. + * @name CKEDITOR.dialog.definition.textarea + * @extends CKEDITOR.dialog.definition.labeledElement + * @constructor + * @example + * // There is no constructor for this class, the user just has to define an + * // object with the appropriate properties. + * + * // Example: + * { + * <b>type : 'textarea',</b> + * id : 'message', + * label : 'Your comment', + * 'default' : '', + * validate : function() { + * if ( this.getValue().length < 5 ) + * { + * api.openMsgDialog( 'The comment is too short.' ); + * return false; + * } + * } + * } + */ + +/** + * The number of rows. + * @name CKEDITOR.dialog.definition.textarea.prototype.rows + * @type Number + * @field + * @example + */ + +/** + * The number of columns. + * @name CKEDITOR.dialog.definition.textarea.prototype.cols + * @type Number + * @field + * @example + */ + +/** + * (Optional) The validation function. + * @name CKEDITOR.dialog.definition.textarea.prototype.validate + * @field + * @type Function + * @example + */ + +/** + * The default value. + * @name CKEDITOR.dialog.definition.textarea.prototype.default + * @type String + * @field + * @example + */ diff --git a/_source/plugins/dialog/plugin.js b/_source/plugins/dialog/plugin.js new file mode 100644 index 0000000..d24a80f --- /dev/null +++ b/_source/plugins/dialog/plugin.js @@ -0,0 +1,3289 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The floating dialog plugin. + */ + +/** + * No resize for this dialog. + * @constant + */ +CKEDITOR.DIALOG_RESIZE_NONE = 0; + +/** + * Only allow horizontal resizing for this dialog, disable vertical resizing. + * @constant + */ +CKEDITOR.DIALOG_RESIZE_WIDTH = 1; + +/** + * Only allow vertical resizing for this dialog, disable horizontal resizing. + * @constant + */ +CKEDITOR.DIALOG_RESIZE_HEIGHT = 2; + +/* + * Allow the dialog to be resized in both directions. + * @constant + */ +CKEDITOR.DIALOG_RESIZE_BOTH = 3; + +(function() +{ + var cssLength = CKEDITOR.tools.cssLength; + function isTabVisible( tabId ) + { + return !!this._.tabs[ tabId ][ 0 ].$.offsetHeight; + } + + function getPreviousVisibleTab() + { + var tabId = this._.currentTabId, + length = this._.tabIdList.length, + tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ) + length; + + for ( var i = tabIndex - 1 ; i > tabIndex - length ; i-- ) + { + if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) ) + return this._.tabIdList[ i % length ]; + } + + return null; + } + + function getNextVisibleTab() + { + var tabId = this._.currentTabId, + length = this._.tabIdList.length, + tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ); + + for ( var i = tabIndex + 1 ; i < tabIndex + length ; i++ ) + { + if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) ) + return this._.tabIdList[ i % length ]; + } + + return null; + } + + + function clearOrRecoverTextInputValue( container, isRecover ) + { + var inputs = container.$.getElementsByTagName( 'input' ); + for ( var i = 0, length = inputs.length; i < length ; i++ ) + { + var item = new CKEDITOR.dom.element( inputs[ i ] ); + + if ( item.getAttribute( 'type' ).toLowerCase() == 'text' ) + { + if ( isRecover ) + { + item.setAttribute( 'value', item.getCustomData( 'fake_value' ) || '' ); + item.removeCustomData( 'fake_value' ); + } + else + { + item.setCustomData( 'fake_value', item.getAttribute( 'value' ) ); + item.setAttribute( 'value', '' ); + } + } + } + } + + // Handle dialog element validation state UI changes. + function handleFieldValidated( isValid, msg ) + { + var input = this.getInputElement(); + if ( input ) + { + isValid ? input.removeAttribute( 'aria-invalid' ) + : input.setAttribute( 'aria-invalid', true ); + } + + if ( !isValid ) + { + if ( this.select ) + this.select(); + else + this.focus(); + } + + msg && alert( msg ); + + this.fire( 'validated', { valid : isValid, msg : msg } ); + } + + function resetField() + { + var input = this.getInputElement(); + input && input.removeAttribute( 'aria-invalid' ); + } + + + /** + * This is the base class for runtime dialog objects. An instance of this + * class represents a single named dialog for a single editor instance. + * @param {Object} editor The editor which created the dialog. + * @param {String} dialogName The dialog's registered name. + * @constructor + * @example + * var dialogObj = new CKEDITOR.dialog( editor, 'smiley' ); + */ + CKEDITOR.dialog = function( editor, dialogName ) + { + // Load the dialog definition. + var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ], + defaultDefinition = CKEDITOR.tools.clone( defaultDialogDefinition ), + buttonsOrder = editor.config.dialog_buttonsOrder || 'OS', + dir = editor.lang.dir; + + if ( ( buttonsOrder == 'OS' && CKEDITOR.env.mac ) || // The buttons in MacOS Apps are in reverse order (#4750) + ( buttonsOrder == 'rtl' && dir == 'ltr' ) || + ( buttonsOrder == 'ltr' && dir == 'rtl' ) ) + defaultDefinition.buttons.reverse(); + + + // Completes the definition with the default values. + definition = CKEDITOR.tools.extend( definition( editor ), defaultDefinition ); + + // Clone a functionally independent copy for this dialog. + definition = CKEDITOR.tools.clone( definition ); + + // Create a complex definition object, extending it with the API + // functions. + definition = new definitionObject( this, definition ); + + var doc = CKEDITOR.document; + + var themeBuilt = editor.theme.buildDialog( editor ); + + // Initialize some basic parameters. + this._ = + { + editor : editor, + element : themeBuilt.element, + name : dialogName, + contentSize : { width : 0, height : 0 }, + size : { width : 0, height : 0 }, + contents : {}, + buttons : {}, + accessKeyMap : {}, + + // Initialize the tab and page map. + tabs : {}, + tabIdList : [], + currentTabId : null, + currentTabIndex : null, + pageCount : 0, + lastTab : null, + tabBarMode : false, + + // Initialize the tab order array for input widgets. + focusList : [], + currentFocusIndex : 0, + hasFocus : false + }; + + this.parts = themeBuilt.parts; + + CKEDITOR.tools.setTimeout( function() + { + editor.fire( 'ariaWidget', this.parts.contents ); + }, + 0, this ); + + // Set the startup styles for the dialog, avoiding it enlarging the + // page size on the dialog creation. + var startStyles = { + position : CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed', + top : 0, + visibility : 'hidden' + }; + + startStyles[ dir == 'rtl' ? 'right' : 'left' ] = 0; + this.parts.dialog.setStyles( startStyles ); + + + // Call the CKEDITOR.event constructor to initialize this instance. + CKEDITOR.event.call( this ); + + // Fire the "dialogDefinition" event, making it possible to customize + // the dialog definition. + this.definition = definition = CKEDITOR.fire( 'dialogDefinition', + { + name : dialogName, + definition : definition + } + , editor ).definition; + + var tabsToRemove = {}; + // Cache tabs that should be removed. + if ( !( 'removeDialogTabs' in editor._ ) && editor.config.removeDialogTabs ) + { + var removeContents = editor.config.removeDialogTabs.split( ';' ); + + for ( i = 0; i < removeContents.length; i++ ) + { + var parts = removeContents[ i ].split( ':' ); + if ( parts.length == 2 ) + { + var removeDialogName = parts[ 0 ]; + if ( !tabsToRemove[ removeDialogName ] ) + tabsToRemove[ removeDialogName ] = []; + tabsToRemove[ removeDialogName ].push( parts[ 1 ] ); + } + } + editor._.removeDialogTabs = tabsToRemove; + } + + // Remove tabs of this dialog. + if ( editor._.removeDialogTabs && ( tabsToRemove = editor._.removeDialogTabs[ dialogName ] ) ) + { + for ( i = 0; i < tabsToRemove.length; i++ ) + definition.removeContents( tabsToRemove[ i ] ); + } + + // Initialize load, show, hide, ok and cancel events. + if ( definition.onLoad ) + this.on( 'load', definition.onLoad ); + + if ( definition.onShow ) + this.on( 'show', definition.onShow ); + + if ( definition.onHide ) + this.on( 'hide', definition.onHide ); + + if ( definition.onOk ) + { + this.on( 'ok', function( evt ) + { + // Dialog confirm might probably introduce content changes (#5415). + editor.fire( 'saveSnapshot' ); + setTimeout( function () { editor.fire( 'saveSnapshot' ); }, 0 ); + if ( definition.onOk.call( this, evt ) === false ) + evt.data.hide = false; + }); + } + + if ( definition.onCancel ) + { + this.on( 'cancel', function( evt ) + { + if ( definition.onCancel.call( this, evt ) === false ) + evt.data.hide = false; + }); + } + + var me = this; + + // Iterates over all items inside all content in the dialog, calling a + // function for each of them. + var iterContents = function( func ) + { + var contents = me._.contents, + stop = false; + + for ( var i in contents ) + { + for ( var j in contents[i] ) + { + stop = func.call( this, contents[i][j] ); + if ( stop ) + return; + } + } + }; + + this.on( 'ok', function( evt ) + { + iterContents( function( item ) + { + if ( item.validate ) + { + var retval = item.validate( this ), + invalid = typeof ( retval ) == 'string' || retval === false; + + if ( invalid ) + { + evt.data.hide = false; + evt.stop(); + } + + handleFieldValidated.call( item, !invalid, typeof retval == 'string' ? retval : undefined ); + return invalid; + } + }); + }, this, null, 0 ); + + this.on( 'cancel', function( evt ) + { + iterContents( function( item ) + { + if ( item.isChanged() ) + { + if ( !confirm( editor.lang.common.confirmCancel ) ) + evt.data.hide = false; + return true; + } + }); + }, this, null, 0 ); + + this.parts.close.on( 'click', function( evt ) + { + if ( this.fire( 'cancel', { hide : true } ).hide !== false ) + this.hide(); + evt.data.preventDefault(); + }, this ); + + // Sort focus list according to tab order definitions. + function setupFocus() + { + var focusList = me._.focusList; + focusList.sort( function( a, b ) + { + // Mimics browser tab order logics; + if ( a.tabIndex != b.tabIndex ) + return b.tabIndex - a.tabIndex; + // Sort is not stable in some browsers, + // fall-back the comparator to 'focusIndex'; + else + return a.focusIndex - b.focusIndex; + }); + + var size = focusList.length; + for ( var i = 0; i < size; i++ ) + focusList[ i ].focusIndex = i; + } + + function changeFocus( forward ) + { + var focusList = me._.focusList, + offset = forward ? 1 : -1; + if ( focusList.length < 1 ) + return; + + var current = me._.currentFocusIndex; + + // Trigger the 'blur' event of any input element before anything, + // since certain UI updates may depend on it. + try + { + focusList[ current ].getInputElement().$.blur(); + } + catch( e ){} + + var startIndex = ( current + offset + focusList.length ) % focusList.length, + currentIndex = startIndex; + while ( !focusList[ currentIndex ].isFocusable() ) + { + currentIndex = ( currentIndex + offset + focusList.length ) % focusList.length; + if ( currentIndex == startIndex ) + break; + } + focusList[ currentIndex ].focus(); + + // Select whole field content. + if ( focusList[ currentIndex ].type == 'text' ) + focusList[ currentIndex ].select(); + } + + this.changeFocus = changeFocus; + + var processed; + + function focusKeydownHandler( evt ) + { + // If I'm not the top dialog, ignore. + if ( me != CKEDITOR.dialog._.currentTop ) + return; + + var keystroke = evt.data.getKeystroke(), + rtl = editor.lang.dir == 'rtl'; + + processed = 0; + if ( keystroke == 9 || keystroke == CKEDITOR.SHIFT + 9 ) + { + var shiftPressed = ( keystroke == CKEDITOR.SHIFT + 9 ); + + // Handling Tab and Shift-Tab. + if ( me._.tabBarMode ) + { + // Change tabs. + var nextId = shiftPressed ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ); + me.selectPage( nextId ); + me._.tabs[ nextId ][ 0 ].focus(); + } + else + { + // Change the focus of inputs. + changeFocus( !shiftPressed ); + } + + processed = 1; + } + else if ( keystroke == CKEDITOR.ALT + 121 && !me._.tabBarMode && me.getPageCount() > 1 ) + { + // Alt-F10 puts focus into the current tab item in the tab bar. + me._.tabBarMode = true; + me._.tabs[ me._.currentTabId ][ 0 ].focus(); + processed = 1; + } + else if ( ( keystroke == 37 || keystroke == 39 ) && me._.tabBarMode ) + { + // Arrow keys - used for changing tabs. + nextId = ( keystroke == ( rtl ? 39 : 37 ) ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ) ); + me.selectPage( nextId ); + me._.tabs[ nextId ][ 0 ].focus(); + processed = 1; + } + else if ( ( keystroke == 13 || keystroke == 32 ) && me._.tabBarMode ) + { + this.selectPage( this._.currentTabId ); + this._.tabBarMode = false; + this._.currentFocusIndex = -1; + changeFocus( true ); + processed = 1; + } + + if ( processed ) + { + evt.stop(); + evt.data.preventDefault(); + } + } + + function focusKeyPressHandler( evt ) + { + processed && evt.data.preventDefault(); + } + + var dialogElement = this._.element; + // Add the dialog keyboard handlers. + this.on( 'show', function() + { + dialogElement.on( 'keydown', focusKeydownHandler, this, null, 0 ); + // Some browsers instead, don't cancel key events in the keydown, but in the + // keypress. So we must do a longer trip in those cases. (#4531) + if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) ) + dialogElement.on( 'keypress', focusKeyPressHandler, this ); + + } ); + this.on( 'hide', function() + { + dialogElement.removeListener( 'keydown', focusKeydownHandler ); + if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) ) + dialogElement.removeListener( 'keypress', focusKeyPressHandler ); + + // Reset fields state when closing dialog. + iterContents( function( item ) { resetField.apply( item ); } ); + } ); + this.on( 'iframeAdded', function( evt ) + { + var doc = new CKEDITOR.dom.document( evt.data.iframe.$.contentWindow.document ); + doc.on( 'keydown', focusKeydownHandler, this, null, 0 ); + } ); + + // Auto-focus logic in dialog. + this.on( 'show', function() + { + // Setup tabIndex on showing the dialog instead of on loading + // to allow dynamic tab order happen in dialog definition. + setupFocus(); + + if ( editor.config.dialog_startupFocusTab + && me._.pageCount > 1 ) + { + me._.tabBarMode = true; + me._.tabs[ me._.currentTabId ][ 0 ].focus(); + } + else if ( !this._.hasFocus ) + { + this._.currentFocusIndex = -1; + + // Decide where to put the initial focus. + if ( definition.onFocus ) + { + var initialFocus = definition.onFocus.call( this ); + // Focus the field that the user specified. + initialFocus && initialFocus.focus(); + } + // Focus the first field in layout order. + else + changeFocus( true ); + + /* + * IE BUG: If the initial focus went into a non-text element (e.g. button), + * then IE would still leave the caret inside the editing area. + */ + if ( this._.editor.mode == 'wysiwyg' && CKEDITOR.env.ie ) + { + var $selection = editor.document.$.selection, + $range = $selection.createRange(); + + if ( $range ) + { + if ( $range.parentElement && $range.parentElement().ownerDocument == editor.document.$ + || $range.item && $range.item( 0 ).ownerDocument == editor.document.$ ) + { + var $myRange = document.body.createTextRange(); + $myRange.moveToElementText( this.getElement().getFirst().$ ); + $myRange.collapse( true ); + $myRange.select(); + } + } + } + } + }, this, null, 0xffffffff ); + + // IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (#2661). + // This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken. + if ( CKEDITOR.env.ie6Compat ) + { + this.on( 'load', function( evt ) + { + var outer = this.getElement(), + inner = outer.getFirst(); + inner.remove(); + inner.appendTo( outer ); + }, this ); + } + + initDragAndDrop( this ); + initResizeHandles( this ); + + // Insert the title. + ( new CKEDITOR.dom.text( definition.title, CKEDITOR.document ) ).appendTo( this.parts.title ); + + // Insert the tabs and contents. + for ( var i = 0 ; i < definition.contents.length ; i++ ) + { + var page = definition.contents[i]; + page && this.addPage( page ); + } + + this.parts[ 'tabs' ].on( 'click', function( evt ) + { + var target = evt.data.getTarget(); + // If we aren't inside a tab, bail out. + if ( target.hasClass( 'cke_dialog_tab' ) ) + { + // Get the ID of the tab, without the 'cke_' prefix and the unique number suffix. + var id = target.$.id; + this.selectPage( id.substring( 4, id.lastIndexOf( '_' ) ) ); + + if ( this._.tabBarMode ) + { + this._.tabBarMode = false; + this._.currentFocusIndex = -1; + changeFocus( true ); + } + evt.data.preventDefault(); + } + }, this ); + + // Insert buttons. + var buttonsHtml = [], + buttons = CKEDITOR.dialog._.uiElementBuilders.hbox.build( this, + { + type : 'hbox', + className : 'cke_dialog_footer_buttons', + widths : [], + children : definition.buttons + }, buttonsHtml ).getChild(); + this.parts.footer.setHtml( buttonsHtml.join( '' ) ); + + for ( i = 0 ; i < buttons.length ; i++ ) + this._.buttons[ buttons[i].id ] = buttons[i]; + }; + + // Focusable interface. Use it via dialog.addFocusable. + function Focusable( dialog, element, index ) + { + this.element = element; + this.focusIndex = index; + // TODO: support tabIndex for focusables. + this.tabIndex = 0; + this.isFocusable = function() + { + return !element.getAttribute( 'disabled' ) && element.isVisible(); + }; + this.focus = function() + { + dialog._.currentFocusIndex = this.focusIndex; + this.element.focus(); + }; + // Bind events + element.on( 'keydown', function( e ) + { + if ( e.data.getKeystroke() in { 32:1, 13:1 } ) + this.fire( 'click' ); + } ); + element.on( 'focus', function() + { + this.fire( 'mouseover' ); + } ); + element.on( 'blur', function() + { + this.fire( 'mouseout' ); + } ); + } + + CKEDITOR.dialog.prototype = + { + destroy : function() + { + this.hide(); + this._.element.remove(); + }, + + /** + * Resizes the dialog. + * @param {Number} width The width of the dialog in pixels. + * @param {Number} height The height of the dialog in pixels. + * @function + * @example + * dialogObj.resize( 800, 640 ); + */ + resize : (function() + { + return function( width, height ) + { + if ( this._.contentSize && this._.contentSize.width == width && this._.contentSize.height == height ) + return; + + CKEDITOR.dialog.fire( 'resize', + { + dialog : this, + skin : this._.editor.skinName, + width : width, + height : height + }, this._.editor ); + + this.fire( 'resize', + { + skin : this._.editor.skinName, + width : width, + height : height + }, this._.editor ); + + // Update dialog position when dimension get changed in RTL. + if ( this._.editor.lang.dir == 'rtl' && this._.position ) + this._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width - + this._.contentSize.width - parseInt( this._.element.getFirst().getStyle( 'right' ), 10 ); + + this._.contentSize = { width : width, height : height }; + }; + })(), + + /** + * Gets the current size of the dialog in pixels. + * @returns {Object} An object with "width" and "height" properties. + * @example + * var width = dialogObj.getSize().width; + */ + getSize : function() + { + var element = this._.element.getFirst(); + return { width : element.$.offsetWidth || 0, height : element.$.offsetHeight || 0}; + }, + + /** + * Moves the dialog to an (x, y) coordinate relative to the window. + * @function + * @param {Number} x The target x-coordinate. + * @param {Number} y The target y-coordinate. + * @param {Boolean} save Flag indicate whether the dialog position should be remembered on next open up. + * @example + * dialogObj.move( 10, 40 ); + */ + move : (function() + { + var isFixed; + return function( x, y, save ) + { + // The dialog may be fixed positioned or absolute positioned. Ask the + // browser what is the current situation first. + var element = this._.element.getFirst(), + rtl = this._.editor.lang.dir == 'rtl'; + + if ( isFixed === undefined ) + isFixed = element.getComputedStyle( 'position' ) == 'fixed'; + + if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y ) + return; + + // Save the current position. + this._.position = { x : x, y : y }; + + // If not fixed positioned, add scroll position to the coordinates. + if ( !isFixed ) + { + var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition(); + x += scrollPosition.x; + y += scrollPosition.y; + } + + // Translate coordinate for RTL. + if ( rtl ) + { + var dialogSize = this.getSize(), + viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(); + x = viewPaneSize.width - dialogSize.width - x; + } + + var styles = { 'top' : ( y > 0 ? y : 0 ) + 'px' }; + styles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px'; + + element.setStyles( styles ); + + save && ( this._.moved = 1 ); + }; + })(), + + /** + * Gets the dialog's position in the window. + * @returns {Object} An object with "x" and "y" properties. + * @example + * var dialogX = dialogObj.getPosition().x; + */ + getPosition : function(){ return CKEDITOR.tools.extend( {}, this._.position ); }, + + /** + * Shows the dialog box. + * @example + * dialogObj.show(); + */ + show : function() + { + // Insert the dialog's element to the root document. + var element = this._.element; + var definition = this.definition; + if ( !( element.getParent() && element.getParent().equals( CKEDITOR.document.getBody() ) ) ) + element.appendTo( CKEDITOR.document.getBody() ); + else + element.setStyle( 'display', 'block' ); + + // FIREFOX BUG: Fix vanishing caret for Firefox 2 or Gecko 1.8. + if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) + { + var dialogElement = this.parts.dialog; + dialogElement.setStyle( 'position', 'absolute' ); + setTimeout( function() + { + dialogElement.setStyle( 'position', 'fixed' ); + }, 0 ); + } + + + // First, set the dialog to an appropriate size. + this.resize( this._.contentSize && this._.contentSize.width || definition.width || definition.minWidth, + this._.contentSize && this._.contentSize.height || definition.height || definition.minHeight ); + + // Reset all inputs back to their default value. + this.reset(); + + // Select the first tab by default. + this.selectPage( this.definition.contents[0].id ); + + // Set z-index. + if ( CKEDITOR.dialog._.currentZIndex === null ) + CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex; + this._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 ); + + // Maintain the dialog ordering and dialog cover. + // Also register key handlers if first dialog. + if ( CKEDITOR.dialog._.currentTop === null ) + { + CKEDITOR.dialog._.currentTop = this; + this._.parentDialog = null; + showCover( this._.editor ); + + element.on( 'keydown', accessKeyDownHandler ); + element.on( CKEDITOR.env.opera ? 'keypress' : 'keyup', accessKeyUpHandler ); + + // Prevent some keys from bubbling up. (#4269) + for ( var event in { keyup :1, keydown :1, keypress :1 } ) + element.on( event, preventKeyBubbling ); + } + else + { + this._.parentDialog = CKEDITOR.dialog._.currentTop; + var parentElement = this._.parentDialog.getElement().getFirst(); + parentElement.$.style.zIndex -= Math.floor( this._.editor.config.baseFloatZIndex / 2 ); + CKEDITOR.dialog._.currentTop = this; + } + + // Register the Esc hotkeys. + registerAccessKey( this, this, '\x1b', null, function() + { + this.getButton( 'cancel' ) && this.getButton( 'cancel' ).click(); + } ); + + // Reset the hasFocus state. + this._.hasFocus = false; + + CKEDITOR.tools.setTimeout( function() + { + this.layout(); + this.parts.dialog.setStyle( 'visibility', '' ); + + // Execute onLoad for the first show. + this.fireOnce( 'load', {} ); + CKEDITOR.ui.fire( 'ready', this ); + + this.fire( 'show', {} ); + this._.editor.fire( 'dialogShow', this ); + + // Save the initial values of the dialog. + this.foreach( function( contentObj ) { contentObj.setInitValue && contentObj.setInitValue(); } ); + + }, + 100, this ); + }, + + /** + * Rearrange the dialog to its previous position or the middle of the window. + * @since 3.5 + */ + layout : function() + { + var viewSize = CKEDITOR.document.getWindow().getViewPaneSize(), + dialogSize = this.getSize(); + + this.move( this._.moved ? this._.position.x : ( viewSize.width - dialogSize.width ) / 2, + this._.moved ? this._.position.y : ( viewSize.height - dialogSize.height ) / 2 ); + }, + + /** + * Executes a function for each UI element. + * @param {Function} fn Function to execute for each UI element. + * @returns {CKEDITOR.dialog} The current dialog object. + */ + foreach : function( fn ) + { + for ( var i in this._.contents ) + { + for ( var j in this._.contents[i] ) + fn.call( this, this._.contents[i][j] ); + } + return this; + }, + + /** + * Resets all input values in the dialog. + * @example + * dialogObj.reset(); + * @returns {CKEDITOR.dialog} The current dialog object. + */ + reset : (function() + { + var fn = function( widget ){ if ( widget.reset ) widget.reset( 1 ); }; + return function(){ this.foreach( fn ); return this; }; + })(), + + + /** + * Calls the {@link CKEDITOR.dialog.definition.uiElement#setup} method of each of the UI elements, with the arguments passed through it. + * It is usually being called when the dialog is opened, to put the initial value inside the field. + * @example + * dialogObj.setupContent(); + * @example + * var timestamp = ( new Date() ).valueOf(); + * dialogObj.setupContent( timestamp ); + */ + setupContent : function() + { + var args = arguments; + this.foreach( function( widget ) + { + if ( widget.setup ) + widget.setup.apply( widget, args ); + }); + }, + + /** + * Calls the {@link CKEDITOR.dialog.definition.uiElement#commit} method of each of the UI elements, with the arguments passed through it. + * It is usually being called when the user confirms the dialog, to process the values. + * @example + * dialogObj.commitContent(); + * @example + * var timestamp = ( new Date() ).valueOf(); + * dialogObj.commitContent( timestamp ); + */ + commitContent : function() + { + var args = arguments; + this.foreach( function( widget ) + { + // Make sure IE triggers "change" event on last focused input before closing the dialog. (#7915) + if ( CKEDITOR.env.ie && this._.currentFocusIndex == widget.focusIndex ) + widget.getInputElement().$.blur(); + + if ( widget.commit ) + widget.commit.apply( widget, args ); + }); + }, + + /** + * Hides the dialog box. + * @example + * dialogObj.hide(); + */ + hide : function() + { + if ( !this.parts.dialog.isVisible() ) + return; + + this.fire( 'hide', {} ); + this._.editor.fire( 'dialogHide', this ); + var element = this._.element; + element.setStyle( 'display', 'none' ); + this.parts.dialog.setStyle( 'visibility', 'hidden' ); + // Unregister all access keys associated with this dialog. + unregisterAccessKey( this ); + + // Close any child(top) dialogs first. + while( CKEDITOR.dialog._.currentTop != this ) + CKEDITOR.dialog._.currentTop.hide(); + + // Maintain dialog ordering and remove cover if needed. + if ( !this._.parentDialog ) + hideCover(); + else + { + var parentElement = this._.parentDialog.getElement().getFirst(); + parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) ); + } + CKEDITOR.dialog._.currentTop = this._.parentDialog; + + // Deduct or clear the z-index. + if ( !this._.parentDialog ) + { + CKEDITOR.dialog._.currentZIndex = null; + + // Remove access key handlers. + element.removeListener( 'keydown', accessKeyDownHandler ); + element.removeListener( CKEDITOR.env.opera ? 'keypress' : 'keyup', accessKeyUpHandler ); + + // Remove bubbling-prevention handler. (#4269) + for ( var event in { keyup :1, keydown :1, keypress :1 } ) + element.removeListener( event, preventKeyBubbling ); + + var editor = this._.editor; + editor.focus(); + + if ( editor.mode == 'wysiwyg' && CKEDITOR.env.ie ) + { + var selection = editor.getSelection(); + selection && selection.unlock( true ); + } + } + else + CKEDITOR.dialog._.currentZIndex -= 10; + + delete this._.parentDialog; + // Reset the initial values of the dialog. + this.foreach( function( contentObj ) { contentObj.resetInitValue && contentObj.resetInitValue(); } ); + }, + + /** + * Adds a tabbed page into the dialog. + * @param {Object} contents Content definition. + * @example + */ + addPage : function( contents ) + { + var pageHtml = [], + titleHtml = contents.label ? ' title="' + CKEDITOR.tools.htmlEncode( contents.label ) + '"' : '', + elements = contents.elements, + vbox = CKEDITOR.dialog._.uiElementBuilders.vbox.build( this, + { + type : 'vbox', + className : 'cke_dialog_page_contents', + children : contents.elements, + expand : !!contents.expand, + padding : contents.padding, + style : contents.style || 'width: 100%;height:100%' + }, pageHtml ); + + // Create the HTML for the tab and the content block. + var page = CKEDITOR.dom.element.createFromHtml( pageHtml.join( '' ) ); + page.setAttribute( 'role', 'tabpanel' ); + + var env = CKEDITOR.env; + var tabId = 'cke_' + contents.id + '_' + CKEDITOR.tools.getNextNumber(), + tab = CKEDITOR.dom.element.createFromHtml( [ + '<a class="cke_dialog_tab"', + ( this._.pageCount > 0 ? ' cke_last' : 'cke_first' ), + titleHtml, + ( !!contents.hidden ? ' style="display:none"' : '' ), + ' id="', tabId, '"', + env.gecko && env.version >= 10900 && !env.hc ? '' : ' href="javascript:void(0)"', + ' tabIndex="-1"', + ' hidefocus="true"', + ' role="tab">', + contents.label, + '</a>' + ].join( '' ) ); + + page.setAttribute( 'aria-labelledby', tabId ); + + // Take records for the tabs and elements created. + this._.tabs[ contents.id ] = [ tab, page ]; + this._.tabIdList.push( contents.id ); + !contents.hidden && this._.pageCount++; + this._.lastTab = tab; + this.updateStyle(); + + var contentMap = this._.contents[ contents.id ] = {}, + cursor, + children = vbox.getChild(); + + while ( ( cursor = children.shift() ) ) + { + contentMap[ cursor.id ] = cursor; + if ( typeof( cursor.getChild ) == 'function' ) + children.push.apply( children, cursor.getChild() ); + } + + // Attach the DOM nodes. + + page.setAttribute( 'name', contents.id ); + page.appendTo( this.parts.contents ); + + tab.unselectable(); + this.parts.tabs.append( tab ); + + // Add access key handlers if access key is defined. + if ( contents.accessKey ) + { + registerAccessKey( this, this, 'CTRL+' + contents.accessKey, + tabAccessKeyDown, tabAccessKeyUp ); + this._.accessKeyMap[ 'CTRL+' + contents.accessKey ] = contents.id; + } + }, + + /** + * Activates a tab page in the dialog by its id. + * @param {String} id The id of the dialog tab to be activated. + * @example + * dialogObj.selectPage( 'tab_1' ); + */ + selectPage : function( id ) + { + if ( this._.currentTabId == id ) + return; + + // Returning true means that the event has been canceled + if ( this.fire( 'selectPage', { page : id, currentPage : this._.currentTabId } ) === true ) + return; + + // Hide the non-selected tabs and pages. + for ( var i in this._.tabs ) + { + var tab = this._.tabs[i][0], + page = this._.tabs[i][1]; + if ( i != id ) + { + tab.removeClass( 'cke_dialog_tab_selected' ); + page.hide(); + } + page.setAttribute( 'aria-hidden', i != id ); + } + + var selected = this._.tabs[ id ]; + selected[ 0 ].addClass( 'cke_dialog_tab_selected' ); + + // [IE] an invisible input[type='text'] will enlarge it's width + // if it's value is long when it shows, so we clear it's value + // before it shows and then recover it (#5649) + if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ) + { + clearOrRecoverTextInputValue( selected[ 1 ] ); + selected[ 1 ].show(); + setTimeout( function() + { + clearOrRecoverTextInputValue( selected[ 1 ], 1 ); + }, 0 ); + } + else + selected[ 1 ].show(); + + this._.currentTabId = id; + this._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id ); + }, + + // Dialog state-specific style updates. + updateStyle : function() + { + // If only a single page shown, a different style is used in the central pane. + this.parts.dialog[ ( this._.pageCount === 1 ? 'add' : 'remove' ) + 'Class' ]( 'cke_single_page' ); + }, + + /** + * Hides a page's tab away from the dialog. + * @param {String} id The page's Id. + * @example + * dialog.hidePage( 'tab_3' ); + */ + hidePage : function( id ) + { + var tab = this._.tabs[id] && this._.tabs[id][0]; + if ( !tab || this._.pageCount == 1 || !tab.isVisible() ) + return; + // Switch to other tab first when we're hiding the active tab. + else if ( id == this._.currentTabId ) + this.selectPage( getPreviousVisibleTab.call( this ) ); + + tab.hide(); + this._.pageCount--; + this.updateStyle(); + }, + + /** + * Unhides a page's tab. + * @param {String} id The page's Id. + * @example + * dialog.showPage( 'tab_2' ); + */ + showPage : function( id ) + { + var tab = this._.tabs[id] && this._.tabs[id][0]; + if ( !tab ) + return; + tab.show(); + this._.pageCount++; + this.updateStyle(); + }, + + /** + * Gets the root DOM element of the dialog. + * @returns {CKEDITOR.dom.element} The <span> element containing this dialog. + * @example + * var dialogElement = dialogObj.getElement().getFirst(); + * dialogElement.setStyle( 'padding', '5px' ); + */ + getElement : function() + { + return this._.element; + }, + + /** + * Gets the name of the dialog. + * @returns {String} The name of this dialog. + * @example + * var dialogName = dialogObj.getName(); + */ + getName : function() + { + return this._.name; + }, + + /** + * Gets a dialog UI element object from a dialog page. + * @param {String} pageId id of dialog page. + * @param {String} elementId id of UI element. + * @example + * dialogObj.getContentElement( 'tabId', 'elementId' ).setValue( 'Example' ); + * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element. + */ + getContentElement : function( pageId, elementId ) + { + var page = this._.contents[ pageId ]; + return page && page[ elementId ]; + }, + + /** + * Gets the value of a dialog UI element. + * @param {String} pageId id of dialog page. + * @param {String} elementId id of UI element. + * @example + * alert( dialogObj.getValueOf( 'tabId', 'elementId' ) ); + * @returns {Object} The value of the UI element. + */ + getValueOf : function( pageId, elementId ) + { + return this.getContentElement( pageId, elementId ).getValue(); + }, + + /** + * Sets the value of a dialog UI element. + * @param {String} pageId id of the dialog page. + * @param {String} elementId id of the UI element. + * @param {Object} value The new value of the UI element. + * @example + * dialogObj.setValueOf( 'tabId', 'elementId', 'Example' ); + */ + setValueOf : function( pageId, elementId, value ) + { + return this.getContentElement( pageId, elementId ).setValue( value ); + }, + + /** + * Gets the UI element of a button in the dialog's button row. + * @param {String} id The id of the button. + * @example + * @returns {CKEDITOR.ui.dialog.button} The button object. + */ + getButton : function( id ) + { + return this._.buttons[ id ]; + }, + + /** + * Simulates a click to a dialog button in the dialog's button row. + * @param {String} id The id of the button. + * @example + * @returns The return value of the dialog's "click" event. + */ + click : function( id ) + { + return this._.buttons[ id ].click(); + }, + + /** + * Disables a dialog button. + * @param {String} id The id of the button. + * @example + */ + disableButton : function( id ) + { + return this._.buttons[ id ].disable(); + }, + + /** + * Enables a dialog button. + * @param {String} id The id of the button. + * @example + */ + enableButton : function( id ) + { + return this._.buttons[ id ].enable(); + }, + + /** + * Gets the number of pages in the dialog. + * @returns {Number} Page count. + */ + getPageCount : function() + { + return this._.pageCount; + }, + + /** + * Gets the editor instance which opened this dialog. + * @returns {CKEDITOR.editor} Parent editor instances. + */ + getParentEditor : function() + { + return this._.editor; + }, + + /** + * Gets the element that was selected when opening the dialog, if any. + * @returns {CKEDITOR.dom.element} The element that was selected, or null. + */ + getSelectedElement : function() + { + return this.getParentEditor().getSelection().getSelectedElement(); + }, + + /** + * Adds element to dialog's focusable list. + * + * @param {CKEDITOR.dom.element} element + * @param {Number} [index] + */ + addFocusable: function( element, index ) { + if ( typeof index == 'undefined' ) + { + index = this._.focusList.length; + this._.focusList.push( new Focusable( this, element, index ) ); + } + else + { + this._.focusList.splice( index, 0, new Focusable( this, element, index ) ); + for ( var i = index + 1 ; i < this._.focusList.length ; i++ ) + this._.focusList[ i ].focusIndex++; + } + } + }; + + CKEDITOR.tools.extend( CKEDITOR.dialog, + /** + * @lends CKEDITOR.dialog + */ + { + /** + * Registers a dialog. + * @param {String} name The dialog's name. + * @param {Function|String} dialogDefinition + * A function returning the dialog's definition, or the URL to the .js file holding the function. + * The function should accept an argument "editor" which is the current editor instance, and + * return an object conforming to {@link CKEDITOR.dialog.definition}. + * @see CKEDITOR.dialog.definition + * @example + * // Full sample plugin, which does not only register a dialog window but also adds an item to the context menu. + * // To open the dialog window, choose "Open dialog" in the context menu. + * CKEDITOR.plugins.add( 'myplugin', + * { + * init: function( editor ) + * { + * editor.addCommand( 'mydialog',new CKEDITOR.dialogCommand( 'mydialog' ) ); + * + * if ( editor.contextMenu ) + * { + * editor.addMenuGroup( 'mygroup', 10 ); + * editor.addMenuItem( 'My Dialog', + * { + * label : 'Open dialog', + * command : 'mydialog', + * group : 'mygroup' + * }); + * editor.contextMenu.addListener( function( element ) + * { + * return { 'My Dialog' : CKEDITOR.TRISTATE_OFF }; + * }); + * } + * + * <strong>CKEDITOR.dialog.add</strong>( 'mydialog', function( api ) + * { + * // CKEDITOR.dialog.definition + * var <strong>dialogDefinition</strong> = + * { + * title : 'Sample dialog', + * minWidth : 390, + * minHeight : 130, + * contents : [ + * { + * id : 'tab1', + * label : 'Label', + * title : 'Title', + * expand : true, + * padding : 0, + * elements : + * [ + * { + * type : 'html', + * html : '<p>This is some sample HTML content.</p>' + * }, + * { + * type : 'textarea', + * id : 'textareaId', + * rows : 4, + * cols : 40 + * } + * ] + * } + * ], + * buttons : [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ], + * onOk : function() { + * // "this" is now a CKEDITOR.dialog object. + * // Accessing dialog elements: + * var textareaObj = this.<strong>getContentElement</strong>( 'tab1', 'textareaId' ); + * alert( "You have entered: " + textareaObj.getValue() ); + * } + * }; + * + * return dialogDefinition; + * } ); + * } + * } ); + * + * CKEDITOR.replace( 'editor1', { extraPlugins : 'myplugin' } ); + */ + add : function( name, dialogDefinition ) + { + // Avoid path registration from multiple instances override definition. + if ( !this._.dialogDefinitions[name] + || typeof dialogDefinition == 'function' ) + this._.dialogDefinitions[name] = dialogDefinition; + }, + + exists : function( name ) + { + return !!this._.dialogDefinitions[ name ]; + }, + + getCurrent : function() + { + return CKEDITOR.dialog._.currentTop; + }, + + /** + * The default OK button for dialogs. Fires the "ok" event and closes the dialog if the event succeeds. + * @static + * @field + * @example + * @type Function + */ + okButton : (function() + { + var retval = function( editor, override ) + { + override = override || {}; + return CKEDITOR.tools.extend( { + id : 'ok', + type : 'button', + label : editor.lang.common.ok, + 'class' : 'cke_dialog_ui_button_ok', + onClick : function( evt ) + { + var dialog = evt.data.dialog; + if ( dialog.fire( 'ok', { hide : true } ).hide !== false ) + dialog.hide(); + } + }, override, true ); + }; + retval.type = 'button'; + retval.override = function( override ) + { + return CKEDITOR.tools.extend( function( editor ){ return retval( editor, override ); }, + { type : 'button' }, true ); + }; + return retval; + })(), + + /** + * The default cancel button for dialogs. Fires the "cancel" event and closes the dialog if no UI element value changed. + * @static + * @field + * @example + * @type Function + */ + cancelButton : (function() + { + var retval = function( editor, override ) + { + override = override || {}; + return CKEDITOR.tools.extend( { + id : 'cancel', + type : 'button', + label : editor.lang.common.cancel, + 'class' : 'cke_dialog_ui_button_cancel', + onClick : function( evt ) + { + var dialog = evt.data.dialog; + if ( dialog.fire( 'cancel', { hide : true } ).hide !== false ) + dialog.hide(); + } + }, override, true ); + }; + retval.type = 'button'; + retval.override = function( override ) + { + return CKEDITOR.tools.extend( function( editor ){ return retval( editor, override ); }, + { type : 'button' }, true ); + }; + return retval; + })(), + + /** + * Registers a dialog UI element. + * @param {String} typeName The name of the UI element. + * @param {Function} builder The function to build the UI element. + * @example + */ + addUIElement : function( typeName, builder ) + { + this._.uiElementBuilders[ typeName ] = builder; + } + }); + + CKEDITOR.dialog._ = + { + uiElementBuilders : {}, + + dialogDefinitions : {}, + + currentTop : null, + + currentZIndex : null + }; + + // "Inherit" (copy actually) from CKEDITOR.event. + CKEDITOR.event.implementOn( CKEDITOR.dialog ); + CKEDITOR.event.implementOn( CKEDITOR.dialog.prototype, true ); + + var defaultDialogDefinition = + { + resizable : CKEDITOR.DIALOG_RESIZE_BOTH, + minWidth : 600, + minHeight : 400, + buttons : [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ] + }; + + // Tool function used to return an item from an array based on its id + // property. + var getById = function( array, id, recurse ) + { + for ( var i = 0, item ; ( item = array[ i ] ) ; i++ ) + { + if ( item.id == id ) + return item; + if ( recurse && item[ recurse ] ) + { + var retval = getById( item[ recurse ], id, recurse ) ; + if ( retval ) + return retval; + } + } + return null; + }; + + // Tool function used to add an item into an array. + var addById = function( array, newItem, nextSiblingId, recurse, nullIfNotFound ) + { + if ( nextSiblingId ) + { + for ( var i = 0, item ; ( item = array[ i ] ) ; i++ ) + { + if ( item.id == nextSiblingId ) + { + array.splice( i, 0, newItem ); + return newItem; + } + + if ( recurse && item[ recurse ] ) + { + var retval = addById( item[ recurse ], newItem, nextSiblingId, recurse, true ); + if ( retval ) + return retval; + } + } + + if ( nullIfNotFound ) + return null; + } + + array.push( newItem ); + return newItem; + }; + + // Tool function used to remove an item from an array based on its id. + var removeById = function( array, id, recurse ) + { + for ( var i = 0, item ; ( item = array[ i ] ) ; i++ ) + { + if ( item.id == id ) + return array.splice( i, 1 ); + if ( recurse && item[ recurse ] ) + { + var retval = removeById( item[ recurse ], id, recurse ); + if ( retval ) + return retval; + } + } + return null; + }; + + /** + * This class is not really part of the API. It is the "definition" property value + * passed to "dialogDefinition" event handlers. + * @constructor + * @name CKEDITOR.dialog.definitionObject + * @extends CKEDITOR.dialog.definition + * @example + * CKEDITOR.on( 'dialogDefinition', function( evt ) + * { + * var definition = evt.data.definition; + * var content = definition.getContents( 'page1' ); + * ... + * } ); + */ + var definitionObject = function( dialog, dialogDefinition ) + { + // TODO : Check if needed. + this.dialog = dialog; + + // Transform the contents entries in contentObjects. + var contents = dialogDefinition.contents; + for ( var i = 0, content ; ( content = contents[i] ) ; i++ ) + contents[ i ] = content && new contentObject( dialog, content ); + + CKEDITOR.tools.extend( this, dialogDefinition ); + }; + + definitionObject.prototype = + /** @lends CKEDITOR.dialog.definitionObject.prototype */ + { + /** + * Gets a content definition. + * @param {String} id The id of the content definition. + * @returns {CKEDITOR.dialog.definition.content} The content definition + * matching id. + */ + getContents : function( id ) + { + return getById( this.contents, id ); + }, + + /** + * Gets a button definition. + * @param {String} id The id of the button definition. + * @returns {CKEDITOR.dialog.definition.button} The button definition + * matching id. + */ + getButton : function( id ) + { + return getById( this.buttons, id ); + }, + + /** + * Adds a content definition object under this dialog definition. + * @param {CKEDITOR.dialog.definition.content} contentDefinition The + * content definition. + * @param {String} [nextSiblingId] The id of an existing content + * definition which the new content definition will be inserted + * before. Omit if the new content definition is to be inserted as + * the last item. + * @returns {CKEDITOR.dialog.definition.content} The inserted content + * definition. + */ + addContents : function( contentDefinition, nextSiblingId ) + { + return addById( this.contents, contentDefinition, nextSiblingId ); + }, + + /** + * Adds a button definition object under this dialog definition. + * @param {CKEDITOR.dialog.definition.button} buttonDefinition The + * button definition. + * @param {String} [nextSiblingId] The id of an existing button + * definition which the new button definition will be inserted + * before. Omit if the new button definition is to be inserted as + * the last item. + * @returns {CKEDITOR.dialog.definition.button} The inserted button + * definition. + */ + addButton : function( buttonDefinition, nextSiblingId ) + { + return addById( this.buttons, buttonDefinition, nextSiblingId ); + }, + + /** + * Removes a content definition from this dialog definition. + * @param {String} id The id of the content definition to be removed. + * @returns {CKEDITOR.dialog.definition.content} The removed content + * definition. + */ + removeContents : function( id ) + { + removeById( this.contents, id ); + }, + + /** + * Removes a button definition from the dialog definition. + * @param {String} id The id of the button definition to be removed. + * @returns {CKEDITOR.dialog.definition.button} The removed button + * definition. + */ + removeButton : function( id ) + { + removeById( this.buttons, id ); + } + }; + + /** + * This class is not really part of the API. It is the template of the + * objects representing content pages inside the + * CKEDITOR.dialog.definitionObject. + * @constructor + * @name CKEDITOR.dialog.definition.contentObject + * @example + * CKEDITOR.on( 'dialogDefinition', function( evt ) + * { + * var definition = evt.data.definition; + * var content = definition.getContents( 'page1' ); + * content.remove( 'textInput1' ); + * ... + * } ); + */ + function contentObject( dialog, contentDefinition ) + { + this._ = + { + dialog : dialog + }; + + CKEDITOR.tools.extend( this, contentDefinition ); + } + + contentObject.prototype = + /** @lends CKEDITOR.dialog.definition.contentObject.prototype */ + { + /** + * Gets a UI element definition under the content definition. + * @param {String} id The id of the UI element definition. + * @returns {CKEDITOR.dialog.definition.uiElement} + */ + get : function( id ) + { + return getById( this.elements, id, 'children' ); + }, + + /** + * Adds a UI element definition to the content definition. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition The + * UI elemnet definition to be added. + * @param {String} nextSiblingId The id of an existing UI element + * definition which the new UI element definition will be inserted + * before. Omit if the new button definition is to be inserted as + * the last item. + * @returns {CKEDITOR.dialog.definition.uiElement} The element + * definition inserted. + */ + add : function( elementDefinition, nextSiblingId ) + { + return addById( this.elements, elementDefinition, nextSiblingId, 'children' ); + }, + + /** + * Removes a UI element definition from the content definition. + * @param {String} id The id of the UI element definition to be + * removed. + * @returns {CKEDITOR.dialog.definition.uiElement} The element + * definition removed. + * @example + */ + remove : function( id ) + { + removeById( this.elements, id, 'children' ); + } + }; + + function initDragAndDrop( dialog ) + { + var lastCoords = null, + abstractDialogCoords = null, + element = dialog.getElement().getFirst(), + editor = dialog.getParentEditor(), + magnetDistance = editor.config.dialog_magnetDistance, + margins = editor.skin.margins || [ 0, 0, 0, 0 ]; + + if ( typeof magnetDistance == 'undefined' ) + magnetDistance = 20; + + function mouseMoveHandler( evt ) + { + var dialogSize = dialog.getSize(), + viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(), + x = evt.data.$.screenX, + y = evt.data.$.screenY, + dx = x - lastCoords.x, + dy = y - lastCoords.y, + realX, realY; + + lastCoords = { x : x, y : y }; + abstractDialogCoords.x += dx; + abstractDialogCoords.y += dy; + + if ( abstractDialogCoords.x + margins[3] < magnetDistance ) + realX = - margins[3]; + else if ( abstractDialogCoords.x - margins[1] > viewPaneSize.width - dialogSize.width - magnetDistance ) + realX = viewPaneSize.width - dialogSize.width + ( editor.lang.dir == 'rtl' ? 0 : margins[1] ); + else + realX = abstractDialogCoords.x; + + if ( abstractDialogCoords.y + margins[0] < magnetDistance ) + realY = - margins[0]; + else if ( abstractDialogCoords.y - margins[2] > viewPaneSize.height - dialogSize.height - magnetDistance ) + realY = viewPaneSize.height - dialogSize.height + margins[2]; + else + realY = abstractDialogCoords.y; + + dialog.move( realX, realY, 1 ); + + evt.data.preventDefault(); + } + + function mouseUpHandler( evt ) + { + CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); + CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); + + if ( CKEDITOR.env.ie6Compat ) + { + var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); + coverDoc.removeListener( 'mousemove', mouseMoveHandler ); + coverDoc.removeListener( 'mouseup', mouseUpHandler ); + } + } + + dialog.parts.title.on( 'mousedown', function( evt ) + { + lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY }; + + CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); + CKEDITOR.document.on( 'mouseup', mouseUpHandler ); + abstractDialogCoords = dialog.getPosition(); + + if ( CKEDITOR.env.ie6Compat ) + { + var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); + coverDoc.on( 'mousemove', mouseMoveHandler ); + coverDoc.on( 'mouseup', mouseUpHandler ); + } + + evt.data.preventDefault(); + }, dialog ); + } + + function initResizeHandles( dialog ) + { + var def = dialog.definition, + resizable = def.resizable; + + if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ) + return; + + var editor = dialog.getParentEditor(); + var wrapperWidth, wrapperHeight, + viewSize, origin, startSize, + dialogCover; + + var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) + { + startSize = dialog.getSize(); + + var content = dialog.parts.contents, + iframeDialog = content.$.getElementsByTagName( 'iframe' ).length; + + // Shim to help capturing "mousemove" over iframe. + if ( iframeDialog ) + { + dialogCover = CKEDITOR.dom.element.createFromHtml( '<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>' ); + content.append( dialogCover ); + } + + // Calculate the offset between content and chrome size. + wrapperHeight = startSize.height - dialog.parts.contents.getSize( 'height', ! ( CKEDITOR.env.gecko || CKEDITOR.env.opera || CKEDITOR.env.ie && CKEDITOR.env.quirks ) ); + wrapperWidth = startSize.width - dialog.parts.contents.getSize( 'width', 1 ); + + origin = { x : $event.screenX, y : $event.screenY }; + + viewSize = CKEDITOR.document.getWindow().getViewPaneSize(); + + CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); + CKEDITOR.document.on( 'mouseup', mouseUpHandler ); + + if ( CKEDITOR.env.ie6Compat ) + { + var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); + coverDoc.on( 'mousemove', mouseMoveHandler ); + coverDoc.on( 'mouseup', mouseUpHandler ); + } + + $event.preventDefault && $event.preventDefault(); + }); + + // Prepend the grip to the dialog. + dialog.on( 'load', function() + { + var direction = ''; + if ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH ) + direction = ' cke_resizer_horizontal'; + else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT ) + direction = ' cke_resizer_vertical'; + var resizer = CKEDITOR.dom.element.createFromHtml( '<div' + + ' class="cke_resizer' + direction + ' cke_resizer_' + editor.lang.dir + '"' + + ' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' + + ' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event )"></div>' ); + dialog.parts.footer.append( resizer, 1 ); + }); + editor.on( 'destroy', function() { CKEDITOR.tools.removeFunction( mouseDownFn ); } ); + + function mouseMoveHandler( evt ) + { + var rtl = editor.lang.dir == 'rtl', + dx = ( evt.data.$.screenX - origin.x ) * ( rtl ? -1 : 1 ), + dy = evt.data.$.screenY - origin.y, + width = startSize.width, + height = startSize.height, + internalWidth = width + dx * ( dialog._.moved ? 1 : 2 ), + internalHeight = height + dy * ( dialog._.moved ? 1 : 2 ), + element = dialog._.element.getFirst(), + right = rtl && element.getComputedStyle( 'right' ), + position = dialog.getPosition(); + + if ( position.y + internalHeight > viewSize.height ) + internalHeight = viewSize.height - position.y; + + if ( ( rtl ? right : position.x ) + internalWidth > viewSize.width ) + internalWidth = viewSize.width - ( rtl ? right : position.x ); + + // Make sure the dialog will not be resized to the wrong side when it's in the leftmost position for RTL. + if ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) ) + width = Math.max( def.minWidth || 0, internalWidth - wrapperWidth ); + + if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) + height = Math.max( def.minHeight || 0, internalHeight - wrapperHeight ); + + dialog.resize( width, height ); + + if ( !dialog._.moved ) + dialog.layout(); + + evt.data.preventDefault(); + } + + function mouseUpHandler() + { + CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); + CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); + + if ( dialogCover ) + { + dialogCover.remove(); + dialogCover = null; + } + + if ( CKEDITOR.env.ie6Compat ) + { + var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); + coverDoc.removeListener( 'mouseup', mouseUpHandler ); + coverDoc.removeListener( 'mousemove', mouseMoveHandler ); + } + } + } + + var resizeCover; + // Caching resuable covers and allowing only one cover + // on screen. + var covers = {}, + currentCover; + + function cancelEvent( ev ) + { + ev.data.preventDefault(1); + } + + function showCover( editor ) + { + var win = CKEDITOR.document.getWindow(); + var config = editor.config, + backgroundColorStyle = config.dialog_backgroundCoverColor || 'white', + backgroundCoverOpacity = config.dialog_backgroundCoverOpacity, + baseFloatZIndex = config.baseFloatZIndex, + coverKey = CKEDITOR.tools.genKey( + backgroundColorStyle, + backgroundCoverOpacity, + baseFloatZIndex ), + coverElement = covers[ coverKey ]; + + if ( !coverElement ) + { + var html = [ + '<div tabIndex="-1" style="position: ', ( CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed' ), + '; z-index: ', baseFloatZIndex, + '; top: 0px; left: 0px; ', + ( !CKEDITOR.env.ie6Compat ? 'background-color: ' + backgroundColorStyle : '' ), + '" class="cke_dialog_background_cover">' + ]; + + if ( CKEDITOR.env.ie6Compat ) + { + // Support for custom document.domain in IE. + var isCustomDomain = CKEDITOR.env.isCustomDomain(), + iframeHtml = '<html><body style=\\\'background-color:' + backgroundColorStyle + ';\\\'></body></html>'; + + html.push( + '<iframe' + + ' hidefocus="true"' + + ' frameborder="0"' + + ' id="cke_dialog_background_iframe"' + + ' src="javascript:' ); + + html.push( 'void((function(){' + + 'document.open();' + + ( isCustomDomain ? 'document.domain=\'' + document.domain + '\';' : '' ) + + 'document.write( \'' + iframeHtml + '\' );' + + 'document.close();' + + '})())' ); + + html.push( + '"' + + ' style="' + + 'position:absolute;' + + 'left:0;' + + 'top:0;' + + 'width:100%;' + + 'height: 100%;' + + 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)">' + + '</iframe>' ); + } + + html.push( '</div>' ); + + coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) ); + coverElement.setOpacity( backgroundCoverOpacity != undefined ? backgroundCoverOpacity : 0.5 ); + + coverElement.on( 'keydown', cancelEvent ); + coverElement.on( 'keypress', cancelEvent ); + coverElement.on( 'keyup', cancelEvent ); + + coverElement.appendTo( CKEDITOR.document.getBody() ); + covers[ coverKey ] = coverElement; + } + else + coverElement. show(); + + currentCover = coverElement; + var resizeFunc = function() + { + var size = win.getViewPaneSize(); + coverElement.setStyles( + { + width : size.width + 'px', + height : size.height + 'px' + } ); + }; + + var scrollFunc = function() + { + var pos = win.getScrollPosition(), + cursor = CKEDITOR.dialog._.currentTop; + coverElement.setStyles( + { + left : pos.x + 'px', + top : pos.y + 'px' + }); + + if ( cursor ) + { + do + { + var dialogPos = cursor.getPosition(); + cursor.move( dialogPos.x, dialogPos.y ); + } while ( ( cursor = cursor._.parentDialog ) ); + } + }; + + resizeCover = resizeFunc; + win.on( 'resize', resizeFunc ); + resizeFunc(); + // Using Safari/Mac, focus must be kept where it is (#7027) + if ( !( CKEDITOR.env.mac && CKEDITOR.env.webkit ) ) + coverElement.focus(); + + if ( CKEDITOR.env.ie6Compat ) + { + // IE BUG: win.$.onscroll assignment doesn't work.. it must be window.onscroll. + // So we need to invent a really funny way to make it work. + var myScrollHandler = function() + { + scrollFunc(); + arguments.callee.prevScrollHandler.apply( this, arguments ); + }; + win.$.setTimeout( function() + { + myScrollHandler.prevScrollHandler = window.onscroll || function(){}; + window.onscroll = myScrollHandler; + }, 0 ); + scrollFunc(); + } + } + + function hideCover() + { + if ( !currentCover ) + return; + + var win = CKEDITOR.document.getWindow(); + currentCover.hide(); + win.removeListener( 'resize', resizeCover ); + + if ( CKEDITOR.env.ie6Compat ) + { + win.$.setTimeout( function() + { + var prevScrollHandler = window.onscroll && window.onscroll.prevScrollHandler; + window.onscroll = prevScrollHandler || null; + }, 0 ); + } + resizeCover = null; + } + + function removeCovers() + { + for ( var coverId in covers ) + covers[ coverId ].remove(); + covers = {}; + } + + var accessKeyProcessors = {}; + + var accessKeyDownHandler = function( evt ) + { + var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, + alt = evt.data.$.altKey, + shift = evt.data.$.shiftKey, + key = String.fromCharCode( evt.data.$.keyCode ), + keyProcessor = accessKeyProcessors[( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '') + ( shift ? 'SHIFT+' : '' ) + key]; + + if ( !keyProcessor || !keyProcessor.length ) + return; + + keyProcessor = keyProcessor[keyProcessor.length - 1]; + keyProcessor.keydown && keyProcessor.keydown.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); + evt.data.preventDefault(); + }; + + var accessKeyUpHandler = function( evt ) + { + var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, + alt = evt.data.$.altKey, + shift = evt.data.$.shiftKey, + key = String.fromCharCode( evt.data.$.keyCode ), + keyProcessor = accessKeyProcessors[( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '') + ( shift ? 'SHIFT+' : '' ) + key]; + + if ( !keyProcessor || !keyProcessor.length ) + return; + + keyProcessor = keyProcessor[keyProcessor.length - 1]; + if ( keyProcessor.keyup ) + { + keyProcessor.keyup.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); + evt.data.preventDefault(); + } + }; + + var registerAccessKey = function( uiElement, dialog, key, downFunc, upFunc ) + { + var procList = accessKeyProcessors[key] || ( accessKeyProcessors[key] = [] ); + procList.push( { + uiElement : uiElement, + dialog : dialog, + key : key, + keyup : upFunc || uiElement.accessKeyUp, + keydown : downFunc || uiElement.accessKeyDown + } ); + }; + + var unregisterAccessKey = function( obj ) + { + for ( var i in accessKeyProcessors ) + { + var list = accessKeyProcessors[i]; + for ( var j = list.length - 1 ; j >= 0 ; j-- ) + { + if ( list[j].dialog == obj || list[j].uiElement == obj ) + list.splice( j, 1 ); + } + if ( list.length === 0 ) + delete accessKeyProcessors[i]; + } + }; + + var tabAccessKeyUp = function( dialog, key ) + { + if ( dialog._.accessKeyMap[key] ) + dialog.selectPage( dialog._.accessKeyMap[key] ); + }; + + var tabAccessKeyDown = function( dialog, key ) + { + }; + + // ESC, ENTER + var preventKeyBubblingKeys = { 27 :1, 13 :1 }; + var preventKeyBubbling = function( e ) + { + if ( e.data.getKeystroke() in preventKeyBubblingKeys ) + e.data.stopPropagation(); + }; + + (function() + { + CKEDITOR.ui.dialog = + { + /** + * The base class of all dialog UI elements. + * @constructor + * @param {CKEDITOR.dialog} dialog Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element + * definition. Accepted fields: + * <ul> + * <li><strong>id</strong> (Required) The id of the UI element. See {@link + * CKEDITOR.dialog#getContentElement}</li> + * <li><strong>type</strong> (Required) The type of the UI element. The + * value to this field specifies which UI element class will be used to + * generate the final widget.</li> + * <li><strong>title</strong> (Optional) The popup tooltip for the UI + * element.</li> + * <li><strong>hidden</strong> (Optional) A flag that tells if the element + * should be initially visible.</li> + * <li><strong>className</strong> (Optional) Additional CSS class names + * to add to the UI element. Separated by space.</li> + * <li><strong>style</strong> (Optional) Additional CSS inline styles + * to add to the UI element. A semicolon (;) is required after the last + * style declaration.</li> + * <li><strong>accessKey</strong> (Optional) The alphanumeric access key + * for this element. Access keys are automatically prefixed by CTRL.</li> + * <li><strong>on*</strong> (Optional) Any UI element definition field that + * starts with <em>on</em> followed immediately by a capital letter and + * probably more letters is an event handler. Event handlers may be further + * divided into registered event handlers and DOM event handlers. Please + * refer to {@link CKEDITOR.ui.dialog.uiElement#registerEvents} and + * {@link CKEDITOR.ui.dialog.uiElement#eventProcessors} for more + * information.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to be added to the dialog's content area. + * @param {Function|String} nodeNameArg + * A function returning a string, or a simple string for the node name for + * the root DOM node. Default is 'div'. + * @param {Function|Object} stylesArg + * A function returning an object, or a simple object for CSS styles applied + * to the DOM node. Default is empty object. + * @param {Function|Object} attributesArg + * A fucntion returning an object, or a simple object for attributes applied + * to the DOM node. Default is empty object. + * @param {Function|String} contentsArg + * A function returning a string, or a simple string for the HTML code inside + * the root DOM node. Default is empty string. + * @example + */ + uiElement : function( dialog, elementDefinition, htmlList, nodeNameArg, stylesArg, attributesArg, contentsArg ) + { + if ( arguments.length < 4 ) + return; + + var nodeName = ( nodeNameArg.call ? nodeNameArg( elementDefinition ) : nodeNameArg ) || 'div', + html = [ '<', nodeName, ' ' ], + styles = ( stylesArg && stylesArg.call ? stylesArg( elementDefinition ) : stylesArg ) || {}, + attributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {}, + innerHTML = ( contentsArg && contentsArg.call ? contentsArg.call( this, dialog, elementDefinition ) : contentsArg ) || '', + domId = this.domId = attributes.id || CKEDITOR.tools.getNextId() + '_uiElement', + id = this.id = elementDefinition.id, + i; + + // Set the id, a unique id is required for getElement() to work. + attributes.id = domId; + + // Set the type and definition CSS class names. + var classes = {}; + if ( elementDefinition.type ) + classes[ 'cke_dialog_ui_' + elementDefinition.type ] = 1; + if ( elementDefinition.className ) + classes[ elementDefinition.className ] = 1; + if ( elementDefinition.disabled ) + classes[ 'cke_disabled' ] = 1; + + var attributeClasses = ( attributes['class'] && attributes['class'].split ) ? attributes['class'].split( ' ' ) : []; + for ( i = 0 ; i < attributeClasses.length ; i++ ) + { + if ( attributeClasses[i] ) + classes[ attributeClasses[i] ] = 1; + } + var finalClasses = []; + for ( i in classes ) + finalClasses.push( i ); + attributes['class'] = finalClasses.join( ' ' ); + + // Set the popup tooltop. + if ( elementDefinition.title ) + attributes.title = elementDefinition.title; + + // Write the inline CSS styles. + var styleStr = ( elementDefinition.style || '' ).split( ';' ); + + // Element alignment support. + if ( elementDefinition.align ) + { + var align = elementDefinition.align; + styles[ 'margin-left' ] = align == 'left' ? 0 : 'auto'; + styles[ 'margin-right' ] = align == 'right' ? 0 : 'auto'; + } + + for ( i in styles ) + styleStr.push( i + ':' + styles[i] ); + if ( elementDefinition.hidden ) + styleStr.push( 'display:none' ); + for ( i = styleStr.length - 1 ; i >= 0 ; i-- ) + { + if ( styleStr[i] === '' ) + styleStr.splice( i, 1 ); + } + if ( styleStr.length > 0 ) + attributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' ); + + // Write the attributes. + for ( i in attributes ) + html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[i] ) + '" '); + + // Write the content HTML. + html.push( '>', innerHTML, '</', nodeName, '>' ); + + // Add contents to the parent HTML array. + htmlList.push( html.join( '' ) ); + + ( this._ || ( this._ = {} ) ).dialog = dialog; + + // Override isChanged if it is defined in element definition. + if ( typeof( elementDefinition.isChanged ) == 'boolean' ) + this.isChanged = function(){ return elementDefinition.isChanged; }; + if ( typeof( elementDefinition.isChanged ) == 'function' ) + this.isChanged = elementDefinition.isChanged; + + // Overload 'get(set)Value' on definition. + if ( typeof( elementDefinition.setValue ) == 'function' ) + { + this.setValue = CKEDITOR.tools.override( this.setValue, function( org ) + { + return function( val ){ org.call( this, elementDefinition.setValue.call( this, val ) ); }; + } ); + } + + if ( typeof( elementDefinition.getValue ) == 'function' ) + { + this.getValue = CKEDITOR.tools.override( this.getValue, function( org ) + { + return function(){ return elementDefinition.getValue.call( this, org.call( this ) ); }; + } ); + } + + // Add events. + CKEDITOR.event.implementOn( this ); + + this.registerEvents( elementDefinition ); + if ( this.accessKeyUp && this.accessKeyDown && elementDefinition.accessKey ) + registerAccessKey( this, dialog, 'CTRL+' + elementDefinition.accessKey ); + + var me = this; + dialog.on( 'load', function() + { + if ( me.getInputElement() ) + { + me.getInputElement().on( 'focus', function() + { + dialog._.tabBarMode = false; + dialog._.hasFocus = true; + me.fire( 'focus' ); + }, me ); + } + } ); + + // Register the object as a tab focus if it can be included. + if ( this.keyboardFocusable ) + { + this.tabIndex = elementDefinition.tabIndex || 0; + + this.focusIndex = dialog._.focusList.push( this ) - 1; + this.on( 'focus', function() + { + dialog._.currentFocusIndex = me.focusIndex; + } ); + } + + // Completes this object with everything we have in the + // definition. + CKEDITOR.tools.extend( this, elementDefinition ); + }, + + /** + * Horizontal layout box for dialog UI elements, auto-expends to available width of container. + * @constructor + * @extends CKEDITOR.ui.dialog.uiElement + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {Array} childObjList + * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this + * container. + * @param {Array} childHtmlList + * Array of HTML code that correspond to the HTML output of all the + * objects in childObjList. + * @param {Array} htmlList + * Array of HTML code that this element will output to. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>widths</strong> (Optional) The widths of child cells.</li> + * <li><strong>height</strong> (Optional) The height of the layout.</li> + * <li><strong>padding</strong> (Optional) The padding width inside child + * cells.</li> + * <li><strong>align</strong> (Optional) The alignment of the whole layout + * </li> + * </ul> + * @example + */ + hbox : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) + { + if ( arguments.length < 4 ) + return; + + this._ || ( this._ = {} ); + + var children = this._.children = childObjList, + widths = elementDefinition && elementDefinition.widths || null, + height = elementDefinition && elementDefinition.height || null, + styles = {}, + i; + /** @ignore */ + var innerHTML = function() + { + var html = [ '<tbody><tr class="cke_dialog_ui_hbox">' ]; + for ( i = 0 ; i < childHtmlList.length ; i++ ) + { + var className = 'cke_dialog_ui_hbox_child', + styles = []; + if ( i === 0 ) + className = 'cke_dialog_ui_hbox_first'; + if ( i == childHtmlList.length - 1 ) + className = 'cke_dialog_ui_hbox_last'; + html.push( '<td class="', className, '" role="presentation" ' ); + if ( widths ) + { + if ( widths[i] ) + styles.push( 'width:' + cssLength( widths[i] ) ); + } + else + styles.push( 'width:' + Math.floor( 100 / childHtmlList.length ) + '%' ); + if ( height ) + styles.push( 'height:' + cssLength( height ) ); + if ( elementDefinition && elementDefinition.padding != undefined ) + styles.push( 'padding:' + cssLength( elementDefinition.padding ) ); + // In IE Quirks alignment has to be done on table cells. (#7324) + if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && children[ i ].align ) + styles.push( 'text-align:' + children[ i ].align ); + if ( styles.length > 0 ) + html.push( 'style="' + styles.join('; ') + '" ' ); + html.push( '>', childHtmlList[i], '</td>' ); + } + html.push( '</tr></tbody>' ); + return html.join( '' ); + }; + + var attribs = { role : 'presentation' }; + elementDefinition && elementDefinition.align && ( attribs.align = elementDefinition.align ); + + CKEDITOR.ui.dialog.uiElement.call( + this, + dialog, + elementDefinition || { type : 'hbox' }, + htmlList, + 'table', + styles, + attribs, + innerHTML ); + }, + + /** + * Vertical layout box for dialog UI elements. + * @constructor + * @extends CKEDITOR.ui.dialog.hbox + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {Array} childObjList + * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this + * container. + * @param {Array} childHtmlList + * Array of HTML code that correspond to the HTML output of all the + * objects in childObjList. + * @param {Array} htmlList + * Array of HTML code that this element will output to. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>width</strong> (Optional) The width of the layout.</li> + * <li><strong>heights</strong> (Optional) The heights of individual cells. + * </li> + * <li><strong>align</strong> (Optional) The alignment of the layout.</li> + * <li><strong>padding</strong> (Optional) The padding width inside child + * cells.</li> + * <li><strong>expand</strong> (Optional) Whether the layout should expand + * vertically to fill its container.</li> + * </ul> + * @example + */ + vbox : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) + { + if ( arguments.length < 3 ) + return; + + this._ || ( this._ = {} ); + + var children = this._.children = childObjList, + width = elementDefinition && elementDefinition.width || null, + heights = elementDefinition && elementDefinition.heights || null; + /** @ignore */ + var innerHTML = function() + { + var html = [ '<table role="presentation" cellspacing="0" border="0" ' ]; + html.push( 'style="' ); + if ( elementDefinition && elementDefinition.expand ) + html.push( 'height:100%;' ); + html.push( 'width:' + cssLength( width || '100%' ), ';' ); + html.push( '"' ); + html.push( 'align="', CKEDITOR.tools.htmlEncode( + ( elementDefinition && elementDefinition.align ) || ( dialog.getParentEditor().lang.dir == 'ltr' ? 'left' : 'right' ) ), '" ' ); + + html.push( '><tbody>' ); + for ( var i = 0 ; i < childHtmlList.length ; i++ ) + { + var styles = []; + html.push( '<tr><td role="presentation" ' ); + if ( width ) + styles.push( 'width:' + cssLength( width || '100%' ) ); + if ( heights ) + styles.push( 'height:' + cssLength( heights[i] ) ); + else if ( elementDefinition && elementDefinition.expand ) + styles.push( 'height:' + Math.floor( 100 / childHtmlList.length ) + '%' ); + if ( elementDefinition && elementDefinition.padding != undefined ) + styles.push( 'padding:' + cssLength( elementDefinition.padding ) ); + // In IE Quirks alignment has to be done on table cells. (#7324) + if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && children[ i ].align ) + styles.push( 'text-align:' + children[ i ].align ); + if ( styles.length > 0 ) + html.push( 'style="', styles.join( '; ' ), '" ' ); + html.push( ' class="cke_dialog_ui_vbox_child">', childHtmlList[i], '</td></tr>' ); + } + html.push( '</tbody></table>' ); + return html.join( '' ); + }; + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type : 'vbox' }, htmlList, 'div', null, { role : 'presentation' }, innerHTML ); + } + }; + })(); + + CKEDITOR.ui.dialog.uiElement.prototype = + { + /** + * Gets the root DOM element of this dialog UI object. + * @returns {CKEDITOR.dom.element} Root DOM element of UI object. + * @example + * uiElement.getElement().hide(); + */ + getElement : function() + { + return CKEDITOR.document.getById( this.domId ); + }, + + /** + * Gets the DOM element that the user inputs values. + * This function is used by setValue(), getValue() and focus(). It should + * be overrided in child classes where the input element isn't the root + * element. + * @returns {CKEDITOR.dom.element} The element where the user input values. + * @example + * var rawValue = textInput.getInputElement().$.value; + */ + getInputElement : function() + { + return this.getElement(); + }, + + /** + * Gets the parent dialog object containing this UI element. + * @returns {CKEDITOR.dialog} Parent dialog object. + * @example + * var dialog = uiElement.getDialog(); + */ + getDialog : function() + { + return this._.dialog; + }, + + /** + * Sets the value of this dialog UI object. + * @param {Object} value The new value. + * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element. + * @returns {CKEDITOR.dialog.uiElement} The current UI element. + * @example + * uiElement.setValue( 'Dingo' ); + */ + setValue : function( value, noChangeEvent ) + { + this.getInputElement().setValue( value ); + !noChangeEvent && this.fire( 'change', { value : value } ); + return this; + }, + + /** + * Gets the current value of this dialog UI object. + * @returns {Object} The current value. + * @example + * var myValue = uiElement.getValue(); + */ + getValue : function() + { + return this.getInputElement().getValue(); + }, + + /** + * Tells whether the UI object's value has changed. + * @returns {Boolean} true if changed, false if not changed. + * @example + * if ( uiElement.isChanged() ) + * confirm( 'Value changed! Continue?' ); + */ + isChanged : function() + { + // Override in input classes. + return false; + }, + + /** + * Selects the parent tab of this element. Usually called by focus() or overridden focus() methods. + * @returns {CKEDITOR.dialog.uiElement} The current UI element. + * @example + * focus : function() + * { + * this.selectParentTab(); + * // do something else. + * } + */ + selectParentTab : function() + { + var element = this.getInputElement(), + cursor = element, + tabId; + while ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 ) + { /*jsl:pass*/ } + + // Some widgets don't have parent tabs (e.g. OK and Cancel buttons). + if ( !cursor ) + return this; + + tabId = cursor.getAttribute( 'name' ); + // Avoid duplicate select. + if ( this._.dialog._.currentTabId != tabId ) + this._.dialog.selectPage( tabId ); + return this; + }, + + /** + * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page. + * @returns {CKEDITOR.dialog.uiElement} The current UI element. + * @example + * uiElement.focus(); + */ + focus : function() + { + this.selectParentTab().getInputElement().focus(); + return this; + }, + + /** + * Registers the on* event handlers defined in the element definition. + * The default behavior of this function is: + * <ol> + * <li> + * If the on* event is defined in the class's eventProcesors list, + * then the registration is delegated to the corresponding function + * in the eventProcessors list. + * </li> + * <li> + * If the on* event is not defined in the eventProcessors list, then + * register the event handler under the corresponding DOM event of + * the UI element's input DOM element (as defined by the return value + * of {@link CKEDITOR.ui.dialog.uiElement#getInputElement}). + * </li> + * </ol> + * This function is only called at UI element instantiation, but can + * be overridded in child classes if they require more flexibility. + * @param {CKEDITOR.dialog.definition.uiElement} definition The UI element + * definition. + * @returns {CKEDITOR.dialog.uiElement} The current UI element. + * @example + */ + registerEvents : function( definition ) + { + var regex = /^on([A-Z]\w+)/, + match; + + var registerDomEvent = function( uiElement, dialog, eventName, func ) + { + dialog.on( 'load', function() + { + uiElement.getInputElement().on( eventName, func, uiElement ); + }); + }; + + for ( var i in definition ) + { + if ( !( match = i.match( regex ) ) ) + continue; + if ( this.eventProcessors[i] ) + this.eventProcessors[i].call( this, this._.dialog, definition[i] ); + else + registerDomEvent( this, this._.dialog, match[1].toLowerCase(), definition[i] ); + } + + return this; + }, + + /** + * The event processor list used by + * {@link CKEDITOR.ui.dialog.uiElement#getInputElement} at UI element + * instantiation. The default list defines three on* events: + * <ol> + * <li>onLoad - Called when the element's parent dialog opens for the + * first time</li> + * <li>onShow - Called whenever the element's parent dialog opens.</li> + * <li>onHide - Called whenever the element's parent dialog closes.</li> + * </ol> + * @field + * @type Object + * @example + * // This connects the 'click' event in CKEDITOR.ui.dialog.button to onClick + * // handlers in the UI element's definitions. + * CKEDITOR.ui.dialog.button.eventProcessors = CKEDITOR.tools.extend( {}, + * CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, + * { onClick : function( dialog, func ) { this.on( 'click', func ); } }, + * true ); + */ + eventProcessors : + { + onLoad : function( dialog, func ) + { + dialog.on( 'load', func, this ); + }, + + onShow : function( dialog, func ) + { + dialog.on( 'show', func, this ); + }, + + onHide : function( dialog, func ) + { + dialog.on( 'hide', func, this ); + } + }, + + /** + * The default handler for a UI element's access key down event, which + * tries to put focus to the UI element.<br /> + * Can be overridded in child classes for more sophisticaed behavior. + * @param {CKEDITOR.dialog} dialog The parent dialog object. + * @param {String} key The key combination pressed. Since access keys + * are defined to always include the CTRL key, its value should always + * include a 'CTRL+' prefix. + * @example + */ + accessKeyDown : function( dialog, key ) + { + this.focus(); + }, + + /** + * The default handler for a UI element's access key up event, which + * does nothing.<br /> + * Can be overridded in child classes for more sophisticated behavior. + * @param {CKEDITOR.dialog} dialog The parent dialog object. + * @param {String} key The key combination pressed. Since access keys + * are defined to always include the CTRL key, its value should always + * include a 'CTRL+' prefix. + * @example + */ + accessKeyUp : function( dialog, key ) + { + }, + + /** + * Disables a UI element. + * @example + */ + disable : function() + { + var element = this.getElement(), + input = this.getInputElement(); + input.setAttribute( 'disabled', 'true' ); + element.addClass( 'cke_disabled' ); + }, + + /** + * Enables a UI element. + * @example + */ + enable : function() + { + var element = this.getElement(), + input = this.getInputElement(); + input.removeAttribute( 'disabled' ); + element.removeClass( 'cke_disabled' ); + }, + + /** + * Determines whether an UI element is enabled or not. + * @returns {Boolean} Whether the UI element is enabled. + * @example + */ + isEnabled : function() + { + return !this.getElement().hasClass( 'cke_disabled' ); + }, + + /** + * Determines whether an UI element is visible or not. + * @returns {Boolean} Whether the UI element is visible. + * @example + */ + isVisible : function() + { + return this.getInputElement().isVisible(); + }, + + /** + * Determines whether an UI element is focus-able or not. + * Focus-able is defined as being both visible and enabled. + * @returns {Boolean} Whether the UI element can be focused. + * @example + */ + isFocusable : function() + { + if ( !this.isEnabled() || !this.isVisible() ) + return false; + return true; + } + }; + + CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement, + /** + * @lends CKEDITOR.ui.dialog.hbox.prototype + */ + { + /** + * Gets a child UI element inside this container. + * @param {Array|Number} indices An array or a single number to indicate the child's + * position in the container's descendant tree. Omit to get all the children in an array. + * @returns {Array|CKEDITOR.ui.dialog.uiElement} Array of all UI elements in the container + * if no argument given, or the specified UI element if indices is given. + * @example + * var checkbox = hbox.getChild( [0,1] ); + * checkbox.setValue( true ); + */ + getChild : function( indices ) + { + // If no arguments, return a clone of the children array. + if ( arguments.length < 1 ) + return this._.children.concat(); + + // If indices isn't array, make it one. + if ( !indices.splice ) + indices = [ indices ]; + + // Retrieve the child element according to tree position. + if ( indices.length < 2 ) + return this._.children[ indices[0] ]; + else + return ( this._.children[ indices[0] ] && this._.children[ indices[0] ].getChild ) ? + this._.children[ indices[0] ].getChild( indices.slice( 1, indices.length ) ) : + null; + } + }, true ); + + CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox(); + + + + (function() + { + var commonBuilder = { + build : function( dialog, elementDefinition, output ) + { + var children = elementDefinition.children, + child, + childHtmlList = [], + childObjList = []; + for ( var i = 0 ; ( i < children.length && ( child = children[i] ) ) ; i++ ) + { + var childHtml = []; + childHtmlList.push( childHtml ); + childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) ); + } + return new CKEDITOR.ui.dialog[elementDefinition.type]( dialog, childObjList, childHtmlList, output, elementDefinition ); + } + }; + + CKEDITOR.dialog.addUIElement( 'hbox', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'vbox', commonBuilder ); + })(); + + /** + * Generic dialog command. It opens a specific dialog when executed. + * @constructor + * @augments CKEDITOR.commandDefinition + * @param {string} dialogName The name of the dialog to open when executing + * this command. + * @example + * // Register the "link" command, which opens the "link" dialog. + * editor.addCommand( 'link', <b>new CKEDITOR.dialogCommand( 'link' )</b> ); + */ + CKEDITOR.dialogCommand = function( dialogName ) + { + this.dialogName = dialogName; + }; + + CKEDITOR.dialogCommand.prototype = + { + /** @ignore */ + exec : function( editor ) + { + editor.openDialog( this.dialogName ); + }, + + // Dialog commands just open a dialog ui, thus require no undo logic, + // undo support should dedicate to specific dialog implementation. + canUndo: false, + + editorFocus : CKEDITOR.env.ie || CKEDITOR.env.webkit + }; + + (function() + { + var notEmptyRegex = /^([a]|[^a])+$/, + integerRegex = /^\d*$/, + numberRegex = /^\d*(?:\.\d+)?$/, + htmlLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/, + cssLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i; + + CKEDITOR.VALIDATE_OR = 1; + CKEDITOR.VALIDATE_AND = 2; + + CKEDITOR.dialog.validate = + { + functions : function() + { + var args = arguments; + return function() + { + /** + * It's important for validate functions to be able to accept the value + * as argument in addition to this.getValue(), so that it is possible to + * combine validate functions together to make more sophisticated + * validators. + */ + var value = this && this.getValue ? this.getValue() : args[ 0 ]; + + var msg = undefined, + relation = CKEDITOR.VALIDATE_AND, + functions = [], i; + + for ( i = 0 ; i < args.length ; i++ ) + { + if ( typeof( args[i] ) == 'function' ) + functions.push( args[i] ); + else + break; + } + + if ( i < args.length && typeof( args[i] ) == 'string' ) + { + msg = args[i]; + i++; + } + + if ( i < args.length && typeof( args[i]) == 'number' ) + relation = args[i]; + + var passed = ( relation == CKEDITOR.VALIDATE_AND ? true : false ); + for ( i = 0 ; i < functions.length ; i++ ) + { + if ( relation == CKEDITOR.VALIDATE_AND ) + passed = passed && functions[i]( value ); + else + passed = passed || functions[i]( value ); + } + + return !passed ? msg : true; + }; + }, + + regex : function( regex, msg ) + { + /* + * Can be greatly shortened by deriving from functions validator if code size + * turns out to be more important than performance. + */ + return function() + { + var value = this && this.getValue ? this.getValue() : arguments[0]; + return !regex.test( value ) ? msg : true; + }; + }, + + notEmpty : function( msg ) + { + return this.regex( notEmptyRegex, msg ); + }, + + integer : function( msg ) + { + return this.regex( integerRegex, msg ); + }, + + 'number' : function( msg ) + { + return this.regex( numberRegex, msg ); + }, + + 'cssLength' : function( msg ) + { + return this.functions( function( val ){ return cssLengthRegex.test( CKEDITOR.tools.trim( val ) ); }, msg ); + }, + + 'htmlLength' : function( msg ) + { + return this.functions( function( val ){ return htmlLengthRegex.test( CKEDITOR.tools.trim( val ) ); }, msg ); + }, + + equals : function( value, msg ) + { + return this.functions( function( val ){ return val == value; }, msg ); + }, + + notEqual : function( value, msg ) + { + return this.functions( function( val ){ return val != value; }, msg ); + } + }; + + CKEDITOR.on( 'instanceDestroyed', function( evt ) + { + // Remove dialog cover on last instance destroy. + if ( CKEDITOR.tools.isEmpty( CKEDITOR.instances ) ) + { + var currentTopDialog; + while ( ( currentTopDialog = CKEDITOR.dialog._.currentTop ) ) + currentTopDialog.hide(); + removeCovers(); + } + + var dialogs = evt.editor._.storedDialogs; + for ( var name in dialogs ) + dialogs[ name ].destroy(); + + }); + + })(); + + // Extend the CKEDITOR.editor class with dialog specific functions. + CKEDITOR.tools.extend( CKEDITOR.editor.prototype, + /** @lends CKEDITOR.editor.prototype */ + { + /** + * Loads and opens a registered dialog. + * @param {String} dialogName The registered name of the dialog. + * @param {Function} callback The function to be invoked after dialog instance created. + * @see CKEDITOR.dialog.add + * @example + * CKEDITOR.instances.editor1.openDialog( 'smiley' ); + * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed. null if the dialog name is not registered. + */ + openDialog : function( dialogName, callback ) + { + if ( this.mode == 'wysiwyg' && CKEDITOR.env.ie ) + { + var selection = this.getSelection(); + selection && selection.lock(); + } + + var dialogDefinitions = CKEDITOR.dialog._.dialogDefinitions[ dialogName ], + dialogSkin = this.skin.dialog; + + if ( CKEDITOR.dialog._.currentTop === null ) + showCover( this ); + + // If the dialogDefinition is already loaded, open it immediately. + if ( typeof dialogDefinitions == 'function' && dialogSkin._isLoaded ) + { + var storedDialogs = this._.storedDialogs || + ( this._.storedDialogs = {} ); + + var dialog = storedDialogs[ dialogName ] || + ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) ); + + callback && callback.call( dialog, dialog ); + dialog.show(); + + return dialog; + } + else if ( dialogDefinitions == 'failed' ) + { + hideCover(); + throw new Error( '[CKEDITOR.dialog.openDialog] Dialog "' + dialogName + '" failed when loading definition.' ); + } + + var me = this; + + function onDialogFileLoaded( success ) + { + var dialogDefinition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ], + skin = me.skin.dialog; + + // Check if both skin part and definition is loaded. + if ( !skin._isLoaded || loadDefinition && typeof success == 'undefined' ) + return; + + // In case of plugin error, mark it as loading failed. + if ( typeof dialogDefinition != 'function' ) + CKEDITOR.dialog._.dialogDefinitions[ dialogName ] = 'failed'; + + me.openDialog( dialogName, callback ); + } + + if ( typeof dialogDefinitions == 'string' ) + { + var loadDefinition = 1; + CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( dialogDefinitions ), onDialogFileLoaded, null, 0, 1 ); + } + + CKEDITOR.skins.load( this, 'dialog', onDialogFileLoaded ); + + return null; + } + }); +})(); + +CKEDITOR.plugins.add( 'dialog', + { + requires : [ 'dialogui' ] + }); + +// Dialog related configurations. + +/** + * The color of the dialog background cover. It should be a valid CSS color + * string. + * @name CKEDITOR.config.dialog_backgroundCoverColor + * @type String + * @default 'white' + * @example + * config.dialog_backgroundCoverColor = 'rgb(255, 254, 253)'; + */ + +/** + * The opacity of the dialog background cover. It should be a number within the + * range [0.0, 1.0]. + * @name CKEDITOR.config.dialog_backgroundCoverOpacity + * @type Number + * @default 0.5 + * @example + * config.dialog_backgroundCoverOpacity = 0.7; + */ + +/** + * If the dialog has more than one tab, put focus into the first tab as soon as dialog is opened. + * @name CKEDITOR.config.dialog_startupFocusTab + * @type Boolean + * @default false + * @example + * config.dialog_startupFocusTab = true; + */ + +/** + * The distance of magnetic borders used in moving and resizing dialogs, + * measured in pixels. + * @name CKEDITOR.config.dialog_magnetDistance + * @type Number + * @default 20 + * @example + * config.dialog_magnetDistance = 30; + */ + +/** + * The guideline to follow when generating the dialog buttons. There are 3 possible options: + * <ul> + * <li>'OS' - the buttons will be displayed in the default order of the user's OS;</li> + * <li>'ltr' - for Left-To-Right order;</li> + * <li>'rtl' - for Right-To-Left order.</li> + * </ul> + * @name CKEDITOR.config.dialog_buttonsOrder + * @type String + * @default 'OS' + * @since 3.5 + * @example + * config.dialog_buttonsOrder = 'rtl'; + */ + +/** + * The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. + * Separate each pair with semicolon (see example). + * <b>Note: All names are case-sensitive.</b> + * <b>Note: Be cautious when specifying dialog tabs that are mandatory, like "info", dialog functionality might be broken because of this!</b> + * @name CKEDITOR.config.removeDialogTabs + * @type String + * @since 3.5 + * @default '' + * @example + * config.removeDialogTabs = 'flash:advanced;image:Link'; + */ + +/** + * Fired when a dialog definition is about to be used to create a dialog into + * an editor instance. This event makes it possible to customize the definition + * before creating it. + * <p>Note that this event is called only the first time a specific dialog is + * opened. Successive openings will use the cached dialog, and this event will + * not get fired.</p> + * @name CKEDITOR#dialogDefinition + * @event + * @param {CKEDITOR.dialog.definition} data The dialog defination that + * is being loaded. + * @param {CKEDITOR.editor} editor The editor instance that will use the + * dialog. + */ + +/** + * Fired when a tab is going to be selected in a dialog + * @name CKEDITOR.dialog#selectPage + * @event + * @param {String} page The id of the page that it's gonna be selected. + * @param {String} currentPage The id of the current page. + */ + +/** + * Fired when the user tries to dismiss a dialog + * @name CKEDITOR.dialog#cancel + * @event + * @param {Boolean} hide Whether the event should proceed or not. + */ + +/** + * Fired when the user tries to confirm a dialog + * @name CKEDITOR.dialog#ok + * @event + * @param {Boolean} hide Whether the event should proceed or not. + */ + +/** + * Fired when a dialog is shown + * @name CKEDITOR.dialog#show + * @event + */ + +/** + * Fired when a dialog is shown + * @name CKEDITOR.editor#dialogShow + * @event + */ + +/** + * Fired when a dialog is hidden + * @name CKEDITOR.dialog#hide + * @event + */ + +/** + * Fired when a dialog is hidden + * @name CKEDITOR.editor#dialogHide + * @event + */ + +/** + * Fired when a dialog is being resized. The event is fired on + * both the 'CKEDITOR.dialog' object and the dialog instance + * since 3.5.3, previously it's available only in the global object. + * @name CKEDITOR.dialog#resize + * @since 3.5 + * @event + * @param {CKEDITOR.dialog} dialog The dialog being resized (if + * it's fired on the dialog itself, this parameter isn't sent). + * @param {String} skin The skin name. + * @param {Number} width The new width. + * @param {Number} height The new height. + */ diff --git a/_source/plugins/dialogadvtab/plugin.js b/_source/plugins/dialogadvtab/plugin.js new file mode 100644 index 0000000..ad111ff --- /dev/null +++ b/_source/plugins/dialogadvtab/plugin.js @@ -0,0 +1,207 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + +function setupAdvParams( element ) +{ + var attrName = this.att; + + var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || ''; + + if ( value !== undefined ) + this.setValue( value ); +} + +function commitAdvParams() +{ + // Dialogs may use different parameters in the commit list, so, by + // definition, we take the first CKEDITOR.dom.element available. + var element; + + for ( var i = 0 ; i < arguments.length ; i++ ) + { + if ( arguments[ i ] instanceof CKEDITOR.dom.element ) + { + element = arguments[ i ]; + break; + } + } + + if ( element ) + { + var attrName = this.att, + value = this.getValue(); + + if ( value ) + element.setAttribute( attrName, value ); + else + element.removeAttribute( attrName, value ); + } +} + +CKEDITOR.plugins.add( 'dialogadvtab', +{ + /** + * + * @param tabConfig + * id, dir, classes, styles + */ + createAdvancedTab : function( editor, tabConfig ) + { + if ( !tabConfig ) + tabConfig = { id:1, dir:1, classes:1, styles:1 }; + + var lang = editor.lang.common; + + var result = + { + id : 'advanced', + label : lang.advancedTab, + title : lang.advancedTab, + elements : + [ + { + type : 'vbox', + padding : 1, + children : [] + } + ] + }; + + var contents = []; + + if ( tabConfig.id || tabConfig.dir ) + { + if ( tabConfig.id ) + { + contents.push( + { + id : 'advId', + att : 'id', + type : 'text', + label : lang.id, + setup : setupAdvParams, + commit : commitAdvParams + }); + } + + if ( tabConfig.dir ) + { + contents.push( + { + id : 'advLangDir', + att : 'dir', + type : 'select', + label : lang.langDir, + 'default' : '', + style : 'width:100%', + items : + [ + [ lang.notSet, '' ], + [ lang.langDirLTR, 'ltr' ], + [ lang.langDirRTL, 'rtl' ] + ], + setup : setupAdvParams, + commit : commitAdvParams + }); + } + + result.elements[ 0 ].children.push( + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : [].concat( contents ) + }); + } + + if ( tabConfig.styles || tabConfig.classes ) + { + contents = []; + + if ( tabConfig.styles ) + { + contents.push( + { + id : 'advStyles', + att : 'style', + type : 'text', + label : lang.styles, + 'default' : '', + + onChange : function(){}, + + getStyle : function( name, defaultValue ) + { + var match = this.getValue().match( new RegExp( name + '\\s*:\\s*([^;]*)', 'i') ); + return match ? match[ 1 ] : defaultValue; + }, + + updateStyle : function( name, value ) + { + var styles = this.getValue(); + + // Remove the current value. + if ( styles ) + { + styles = styles + .replace( new RegExp( '\\s*' + name + '\s*:[^;]*(?:$|;\s*)', 'i' ), '' ) + .replace( /^[;\s]+/, '' ) + .replace( /\s+$/, '' ); + } + + if ( value ) + { + styles && !(/;\s*$/).test( styles ) && ( styles += '; ' ); + styles += name + ': ' + value; + } + + this.setValue( styles, 1 ); + + }, + + setup : setupAdvParams, + + commit : commitAdvParams + + }); + } + + if ( tabConfig.classes ) + { + contents.push( + { + type : 'hbox', + widths : [ '45%', '55%' ], + children : + [ + { + id : 'advCSSClasses', + att : 'class', + type : 'text', + label : lang.cssClasses, + 'default' : '', + setup : setupAdvParams, + commit : commitAdvParams + + } + ] + }); + } + + result.elements[ 0 ].children.push( + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : [].concat( contents ) + }); + } + + return result; + } +}); + +})(); diff --git a/_source/plugins/dialogui/plugin.js b/_source/plugins/dialogui/plugin.js new file mode 100644 index 0000000..c68c35b --- /dev/null +++ b/_source/plugins/dialogui/plugin.js @@ -0,0 +1,1541 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** @fileoverview The "dialogui" plugin. */ + +CKEDITOR.plugins.add( 'dialogui' ); + +(function() +{ + var initPrivateObject = function( elementDefinition ) + { + this._ || ( this._ = {} ); + this._['default'] = this._.initValue = elementDefinition['default'] || ''; + this._.required = elementDefinition[ 'required' ] || false; + var args = [ this._ ]; + for ( var i = 1 ; i < arguments.length ; i++ ) + args.push( arguments[i] ); + args.push( true ); + CKEDITOR.tools.extend.apply( CKEDITOR.tools, args ); + return this._; + }, + textBuilder = + { + build : function( dialog, elementDefinition, output ) + { + return new CKEDITOR.ui.dialog.textInput( dialog, elementDefinition, output ); + } + }, + commonBuilder = + { + build : function( dialog, elementDefinition, output ) + { + return new CKEDITOR.ui.dialog[elementDefinition.type]( dialog, elementDefinition, output ); + } + }, + containerBuilder = + { + build : function( dialog, elementDefinition, output ) + { + var children = elementDefinition.children, + child, + childHtmlList = [], + childObjList = []; + for ( var i = 0 ; ( i < children.length && ( child = children[i] ) ) ; i++ ) + { + var childHtml = []; + childHtmlList.push( childHtml ); + childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) ); + } + return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition ); + } + }, + commonPrototype = + { + isChanged : function() + { + return this.getValue() != this.getInitValue(); + }, + + reset : function( noChangeEvent ) + { + this.setValue( this.getInitValue(), noChangeEvent ); + }, + + setInitValue : function() + { + this._.initValue = this.getValue(); + }, + + resetInitValue : function() + { + this._.initValue = this._['default']; + }, + + getInitValue : function() + { + return this._.initValue; + } + }, + commonEventProcessors = CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, + { + onChange : function( dialog, func ) + { + if ( !this._.domOnChangeRegistered ) + { + dialog.on( 'load', function() + { + this.getInputElement().on( 'change', function() + { + // Make sure 'onchange' doesn't get fired after dialog closed. (#5719) + if ( !dialog.parts.dialog.isVisible() ) + return; + + this.fire( 'change', { value : this.getValue() } ); + }, this ); + }, this ); + this._.domOnChangeRegistered = true; + } + + this.on( 'change', func ); + } + }, true ), + eventRegex = /^on([A-Z]\w+)/, + cleanInnerDefinition = function( def ) + { + // An inner UI element should not have the parent's type, title or events. + for ( var i in def ) + { + if ( eventRegex.test( i ) || i == 'title' || i == 'type' ) + delete def[i]; + } + return def; + }; + + CKEDITOR.tools.extend( CKEDITOR.ui.dialog, + /** @lends CKEDITOR.ui.dialog */ + { + /** + * Base class for all dialog elements with a textual label on the left. + * @constructor + * @example + * @extends CKEDITOR.ui.dialog.uiElement + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>label</strong> (Required) The label string.</li> + * <li><strong>labelLayout</strong> (Optional) Put 'horizontal' here if the + * label element is to be layed out horizontally. Otherwise a vertical + * layout will be used.</li> + * <li><strong>widths</strong> (Optional) This applies only for horizontal + * layouts - an 2-element array of lengths to specify the widths of the + * label and the content element.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + * @param {Function} contentHtml + * A function returning the HTML code string to be added inside the content + * cell. + */ + labeledElement : function( dialog, elementDefinition, htmlList, contentHtml ) + { + if ( arguments.length < 4 ) + return; + + var _ = initPrivateObject.call( this, elementDefinition ); + _.labelId = CKEDITOR.tools.getNextId() + '_label'; + var children = this._.children = []; + /** @ignore */ + var innerHTML = function() + { + var html = [], + requiredClass = elementDefinition.required ? ' cke_required' : '' ; + if ( elementDefinition.labelLayout != 'horizontal' ) + html.push( '<label class="cke_dialog_ui_labeled_label' + requiredClass + '" ', + ' id="'+ _.labelId + '"', + ' for="' + _.inputId + '"', + ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) +'>', + elementDefinition.label, + '</label>', + '<div class="cke_dialog_ui_labeled_content"' + ( elementDefinition.controlStyle ? ' style="' + elementDefinition.controlStyle + '"' : '' ) + ' role="presentation">', + contentHtml.call( this, dialog, elementDefinition ), + '</div>' ); + else + { + var hboxDefinition = { + type : 'hbox', + widths : elementDefinition.widths, + padding : 0, + children : + [ + { + type : 'html', + html : '<label class="cke_dialog_ui_labeled_label' + requiredClass + '"' + + ' id="' + _.labelId + '"' + + ' for="' + _.inputId + '"' + + ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) +'>' + + CKEDITOR.tools.htmlEncode( elementDefinition.label ) + + '</span>' + }, + { + type : 'html', + html : '<span class="cke_dialog_ui_labeled_content"' + ( elementDefinition.controlStyle ? ' style="' + elementDefinition.controlStyle + '"' : '' ) + '>' + + contentHtml.call( this, dialog, elementDefinition ) + + '</span>' + } + ] + }; + CKEDITOR.dialog._.uiElementBuilders.hbox.build( dialog, hboxDefinition, html ); + } + return html.join( '' ); + }; + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'div', null, { role : 'presentation' }, innerHTML ); + }, + + /** + * A text input with a label. This UI element class represents both the + * single-line text inputs and password inputs in dialog boxes. + * @constructor + * @example + * @extends CKEDITOR.ui.dialog.labeledElement + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>default</strong> (Optional) The default value.</li> + * <li><strong>validate</strong> (Optional) The validation function. </li> + * <li><strong>maxLength</strong> (Optional) The maximum length of text box + * contents.</li> + * <li><strong>size</strong> (Optional) The size of the text box. This is + * usually overridden by the size defined by the skin, however.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + textInput : function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3 ) + return; + + initPrivateObject.call( this, elementDefinition ); + var domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textInput', + attributes = { 'class' : 'cke_dialog_ui_input_' + elementDefinition.type, id : domId, type : 'text' }, + i; + + // Set the validator, if any. + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + // Set the max length and size. + if ( elementDefinition.maxLength ) + attributes.maxlength = elementDefinition.maxLength; + if ( elementDefinition.size ) + attributes.size = elementDefinition.size; + + if ( elementDefinition.inputStyle ) + attributes.style = elementDefinition.inputStyle; + + // If user presses Enter in a text box, it implies clicking OK for the dialog. + var me = this, keyPressedOnMe = false; + dialog.on( 'load', function() + { + me.getInputElement().on( 'keydown', function( evt ) + { + if ( evt.data.getKeystroke() == 13 ) + keyPressedOnMe = true; + } ); + + // Lower the priority this 'keyup' since 'ok' will close the dialog.(#3749) + me.getInputElement().on( 'keyup', function( evt ) + { + if ( evt.data.getKeystroke() == 13 && keyPressedOnMe ) + { + dialog.getButton( 'ok' ) && setTimeout( function () + { + dialog.getButton( 'ok' ).click(); + }, 0 ); + keyPressedOnMe = false; + } + }, null, null, 1000 ); + } ); + + /** @ignore */ + var innerHTML = function() + { + // IE BUG: Text input fields in IE at 100% would exceed a <td> or inline + // container's width, so need to wrap it inside a <div>. + var html = [ '<div class="cke_dialog_ui_input_', elementDefinition.type, '" role="presentation"' ]; + + if ( elementDefinition.width ) + html.push( 'style="width:'+ elementDefinition.width +'" ' ); + + html.push( '><input ' ); + + attributes[ 'aria-labelledby' ] = this._.labelId; + this._.required && ( attributes[ 'aria-required' ] = this._.required ); + for ( var i in attributes ) + html.push( i + '="' + attributes[i] + '" ' ); + html.push( ' /></div>' ); + return html.join( '' ); + }; + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + }, + + /** + * A text area with a label on the top or left. + * @constructor + * @extends CKEDITOR.ui.dialog.labeledElement + * @example + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>rows</strong> (Optional) The number of rows displayed. + * Defaults to 5 if not defined.</li> + * <li><strong>cols</strong> (Optional) The number of cols displayed. + * Defaults to 20 if not defined. Usually overridden by skins.</li> + * <li><strong>default</strong> (Optional) The default value.</li> + * <li><strong>validate</strong> (Optional) The validation function. </li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + textarea : function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3 ) + return; + + initPrivateObject.call( this, elementDefinition ); + var me = this, + domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textarea', + attributes = {}; + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + // Generates the essential attributes for the textarea tag. + attributes.rows = elementDefinition.rows || 5; + attributes.cols = elementDefinition.cols || 20; + + if ( typeof elementDefinition.inputStyle != 'undefined' ) + attributes.style = elementDefinition.inputStyle; + + + /** @ignore */ + var innerHTML = function() + { + attributes[ 'aria-labelledby' ] = this._.labelId; + this._.required && ( attributes[ 'aria-required' ] = this._.required ); + var html = [ '<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea class="cke_dialog_ui_input_textarea" id="', domId, '" ' ]; + for ( var i in attributes ) + html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[i] ) + '" ' ); + html.push( '>', CKEDITOR.tools.htmlEncode( me._['default'] ), '</textarea></div>' ); + return html.join( '' ); + }; + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + }, + + /** + * A single checkbox with a label on the right. + * @constructor + * @extends CKEDITOR.ui.dialog.uiElement + * @example + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>checked</strong> (Optional) Whether the checkbox is checked + * on instantiation. Defaults to false.</li> + * <li><strong>validate</strong> (Optional) The validation function.</li> + * <li><strong>label</strong> (Optional) The checkbox label.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + checkbox : function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3 ) + return; + + var _ = initPrivateObject.call( this, elementDefinition, { 'default' : !!elementDefinition[ 'default' ] } ); + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + /** @ignore */ + var innerHTML = function() + { + var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition, + { + id : elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextId() + '_checkbox' + }, true ), + html = []; + + var labelId = CKEDITOR.tools.getNextId() + '_label'; + var attributes = { 'class' : 'cke_dialog_ui_checkbox_input', type : 'checkbox', 'aria-labelledby' : labelId }; + cleanInnerDefinition( myDefinition ); + if ( elementDefinition[ 'default' ] ) + attributes.checked = 'checked'; + + if ( typeof myDefinition.inputStyle != 'undefined' ) + myDefinition.style = myDefinition.inputStyle; + + _.checkbox = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'input', null, attributes ); + html.push( ' <label id="', labelId, '" for="', attributes.id, '"' + ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) + '>', + CKEDITOR.tools.htmlEncode( elementDefinition.label ), + '</label>' ); + return html.join( '' ); + }; + + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'span', null, null, innerHTML ); + }, + + /** + * A group of radio buttons. + * @constructor + * @example + * @extends CKEDITOR.ui.dialog.labeledElement + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>default</strong> (Required) The default value.</li> + * <li><strong>validate</strong> (Optional) The validation function.</li> + * <li><strong>items</strong> (Required) An array of options. Each option + * is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value' + * is missing, then the value would be assumed to be the same as the + * description.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + radio : function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3) + return; + + initPrivateObject.call( this, elementDefinition ); + if ( !this._['default'] ) + this._['default'] = this._.initValue = elementDefinition.items[0][1]; + if ( elementDefinition.validate ) + this.validate = elementDefinition.valdiate; + var children = [], me = this; + + /** @ignore */ + var innerHTML = function() + { + var inputHtmlList = [], html = [], + commonAttributes = { 'class' : 'cke_dialog_ui_radio_item', 'aria-labelledby' : this._.labelId }, + commonName = elementDefinition.id ? elementDefinition.id + '_radio' : CKEDITOR.tools.getNextId() + '_radio'; + for ( var i = 0 ; i < elementDefinition.items.length ; i++ ) + { + var item = elementDefinition.items[i], + title = item[2] !== undefined ? item[2] : item[0], + value = item[1] !== undefined ? item[1] : item[0], + inputId = CKEDITOR.tools.getNextId() + '_radio_input', + labelId = inputId + '_label', + inputDefinition = CKEDITOR.tools.extend( {}, elementDefinition, + { + id : inputId, + title : null, + type : null + }, true ), + labelDefinition = CKEDITOR.tools.extend( {}, inputDefinition, + { + title : title + }, true ), + inputAttributes = + { + type : 'radio', + 'class' : 'cke_dialog_ui_radio_input', + name : commonName, + value : value, + 'aria-labelledby' : labelId + }, + inputHtml = []; + if ( me._['default'] == value ) + inputAttributes.checked = 'checked'; + cleanInnerDefinition( inputDefinition ); + cleanInnerDefinition( labelDefinition ); + + if ( typeof inputDefinition.inputStyle != 'undefined' ) + inputDefinition.style = inputDefinition.inputStyle; + + children.push( new CKEDITOR.ui.dialog.uiElement( dialog, inputDefinition, inputHtml, 'input', null, inputAttributes ) ); + inputHtml.push( ' ' ); + new CKEDITOR.ui.dialog.uiElement( dialog, labelDefinition, inputHtml, 'label', null, { id : labelId, 'for' : inputAttributes.id }, + item[0] ); + inputHtmlList.push( inputHtml.join( '' ) ); + } + new CKEDITOR.ui.dialog.hbox( dialog, [], inputHtmlList, html ); + return html.join( '' ); + }; + + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + this._.children = children; + }, + + /** + * A button with a label inside. + * @constructor + * @example + * @extends CKEDITOR.ui.dialog.uiElement + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>label</strong> (Required) The button label.</li> + * <li><strong>disabled</strong> (Optional) Set to true if you want the + * button to appear in disabled state.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + button : function( dialog, elementDefinition, htmlList ) + { + if ( !arguments.length ) + return; + + if ( typeof elementDefinition == 'function' ) + elementDefinition = elementDefinition( dialog.getParentEditor() ); + + initPrivateObject.call( this, elementDefinition, { disabled : elementDefinition.disabled || false } ); + + // Add OnClick event to this input. + CKEDITOR.event.implementOn( this ); + + var me = this; + + // Register an event handler for processing button clicks. + dialog.on( 'load', function( eventInfo ) + { + var element = this.getElement(); + + (function() + { + element.on( 'click', function( evt ) + { + me.fire( 'click', { dialog : me.getDialog() } ); + evt.data.preventDefault(); + } ); + + element.on( 'keydown', function( evt ) + { + if ( evt.data.getKeystroke() in { 32:1 } ) + { + me.click(); + evt.data.preventDefault(); + } + } ); + })(); + + element.unselectable(); + }, this ); + + var outerDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); + delete outerDefinition.style; + + var labelId = CKEDITOR.tools.getNextId() + '_label'; + CKEDITOR.ui.dialog.uiElement.call( + this, + dialog, + outerDefinition, + htmlList, + 'a', + null, + { + style : elementDefinition.style, + href : 'javascript:void(0)', + title : elementDefinition.label, + hidefocus : 'true', + 'class' : elementDefinition['class'], + role : 'button', + 'aria-labelledby' : labelId + }, + '<span id="' + labelId + '" class="cke_dialog_ui_button">' + + CKEDITOR.tools.htmlEncode( elementDefinition.label ) + + '</span>' ); + }, + + /** + * A select box. + * @extends CKEDITOR.ui.dialog.uiElement + * @example + * @constructor + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>default</strong> (Required) The default value.</li> + * <li><strong>validate</strong> (Optional) The validation function.</li> + * <li><strong>items</strong> (Required) An array of options. Each option + * is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value' + * is missing, then the value would be assumed to be the same as the + * description.</li> + * <li><strong>multiple</strong> (Optional) Set this to true if you'd like + * to have a multiple-choice select box.</li> + * <li><strong>size</strong> (Optional) The number of items to display in + * the select box.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + select : function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3 ) + return; + + var _ = initPrivateObject.call( this, elementDefinition ); + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + _.inputId = CKEDITOR.tools.getNextId() + '_select'; + /** @ignore */ + var innerHTML = function() + { + var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition, + { + id : elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextId() + '_select' + }, true ), + html = [], + innerHTML = [], + attributes = { 'id' : _.inputId, 'class' : 'cke_dialog_ui_input_select', 'aria-labelledby' : this._.labelId }; + + // Add multiple and size attributes from element definition. + if ( elementDefinition.size != undefined ) + attributes.size = elementDefinition.size; + if ( elementDefinition.multiple != undefined ) + attributes.multiple = elementDefinition.multiple; + + cleanInnerDefinition( myDefinition ); + for ( var i = 0, item ; i < elementDefinition.items.length && ( item = elementDefinition.items[i] ) ; i++ ) + { + innerHTML.push( '<option value="', + CKEDITOR.tools.htmlEncode( item[1] !== undefined ? item[1] : item[0] ).replace( /"/g, '"' ), '" /> ', + CKEDITOR.tools.htmlEncode( item[0] ) ); + } + + if ( typeof myDefinition.inputStyle != 'undefined' ) + myDefinition.style = myDefinition.inputStyle; + + _.select = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'select', null, attributes, innerHTML.join( '' ) ); + return html.join( '' ); + }; + + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + }, + + /** + * A file upload input. + * @extends CKEDITOR.ui.dialog.labeledElement + * @example + * @constructor + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>validate</strong> (Optional) The validation function.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + file : function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3 ) + return; + + if ( elementDefinition['default'] === undefined ) + elementDefinition['default'] = ''; + + var _ = CKEDITOR.tools.extend( initPrivateObject.call( this, elementDefinition ), { definition : elementDefinition, buttons : [] } ); + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + /** @ignore */ + var innerHTML = function() + { + _.frameId = CKEDITOR.tools.getNextId() + '_fileInput'; + + // Support for custom document.domain in IE. + var isCustomDomain = CKEDITOR.env.isCustomDomain(); + + var html = [ + '<iframe' + + ' frameborder="0"' + + ' allowtransparency="0"' + + ' class="cke_dialog_ui_input_file"' + + ' id="', _.frameId, '"' + + ' title="', elementDefinition.label, '"' + + ' src="javascript:void(' ]; + + html.push( + isCustomDomain ? + '(function(){' + + 'document.open();' + + 'document.domain=\'' + document.domain + '\';' + + 'document.close();' + + '})()' + : + '0' ); + + html.push( + ')">' + + '</iframe>' ); + + return html.join( '' ); + }; + + // IE BUG: Parent container does not resize to contain the iframe automatically. + dialog.on( 'load', function() + { + var iframe = CKEDITOR.document.getById( _.frameId ), + contentDiv = iframe.getParent(); + contentDiv.addClass( 'cke_dialog_ui_input_file' ); + } ); + + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + }, + + /** + * A button for submitting the file in a file upload input. + * @extends CKEDITOR.ui.dialog.button + * @example + * @constructor + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>for</strong> (Required) The file input's page and element Id + * to associate to, in a 2-item array format: [ 'page_id', 'element_id' ]. + * </li> + * <li><strong>validate</strong> (Optional) The validation function.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + fileButton : function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3 ) + return; + + var _ = initPrivateObject.call( this, elementDefinition ), + me = this; + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); + var onClick = myDefinition.onClick; + myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button'; + myDefinition.onClick = function( evt ) + { + var target = elementDefinition[ 'for' ]; // [ pageId, elementId ] + if ( !onClick || onClick.call( this, evt ) !== false ) + { + dialog.getContentElement( target[0], target[1] ).submit(); + this.disable(); + } + }; + + dialog.on( 'load', function() + { + dialog.getContentElement( elementDefinition[ 'for' ][0], elementDefinition[ 'for' ][1] )._.buttons.push( me ); + } ); + + CKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList ); + }, + + html : (function() + { + var myHtmlRe = /^\s*<[\w:]+\s+([^>]*)?>/, + theirHtmlRe = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/, + emptyTagRe = /\/$/; + /** + * A dialog element made from raw HTML code. + * @extends CKEDITOR.ui.dialog.uiElement + * @name CKEDITOR.ui.dialog.html + * @param {CKEDITOR.dialog} dialog Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition. + * Accepted fields: + * <ul> + * <li><strong>html</strong> (Required) HTML code of this element.</li> + * </ul> + * @param {Array} htmlList List of HTML code to be added to the dialog's content area. + * @example + * @constructor + */ + return function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3 ) + return; + + var myHtmlList = [], + myHtml, + theirHtml = elementDefinition.html, + myMatch, theirMatch; + + // If the HTML input doesn't contain any tags at the beginning, add a <span> tag around it. + if ( theirHtml.charAt( 0 ) != '<' ) + theirHtml = '<span>' + theirHtml + '</span>'; + + // Look for focus function in definition. + var focus = elementDefinition.focus; + if ( focus ) + { + var oldFocus = this.focus; + this.focus = function() + { + oldFocus.call( this ); + typeof focus == 'function' && focus.call( this ); + this.fire( 'focus' ); + }; + if ( elementDefinition.isFocusable ) + { + var oldIsFocusable = this.isFocusable; + this.isFocusable = oldIsFocusable; + } + this.keyboardFocusable = true; + } + + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtmlList, 'span', null, null, '' ); + + // Append the attributes created by the uiElement call to the real HTML. + myHtml = myHtmlList.join( '' ); + myMatch = myHtml.match( myHtmlRe ); + theirMatch = theirHtml.match( theirHtmlRe ) || [ '', '', '' ]; + + if ( emptyTagRe.test( theirMatch[1] ) ) + { + theirMatch[1] = theirMatch[1].slice( 0, -1 ); + theirMatch[2] = '/' + theirMatch[2]; + } + + htmlList.push( [ theirMatch[1], ' ', myMatch[1] || '', theirMatch[2] ].join( '' ) ); + }; + })(), + + /** + * Form fieldset for grouping dialog UI elements. + * @constructor + * @extends CKEDITOR.ui.dialog.uiElement + * @param {CKEDITOR.dialog} dialog Parent dialog object. + * @param {Array} childObjList + * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this + * container. + * @param {Array} childHtmlList + * Array of HTML code that correspond to the HTML output of all the + * objects in childObjList. + * @param {Array} htmlList + * Array of HTML code that this element will output to. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>label</strong> (Optional) The legend of the this fieldset.</li> + * <li><strong>children</strong> (Required) An array of dialog field definitions which will be grouped inside this fieldset. </li> + * </ul> + */ + fieldset : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) + { + var legendLabel = elementDefinition.label; + /** @ignore */ + var innerHTML = function() + { + var html = []; + legendLabel && html.push( '<legend>' + legendLabel + '</legend>' ); + for ( var i = 0; i < childHtmlList.length; i++ ) + html.push( childHtmlList[ i ] ); + return html.join( '' ); + }; + + this._ = { children : childObjList }; + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'fieldset', null, null, innerHTML ); + } + + }, true ); + + CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement; + + CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement, + /** @lends CKEDITOR.ui.dialog.labeledElement.prototype */ + { + /** + * Sets the label text of the element. + * @param {String} label The new label text. + * @returns {CKEDITOR.ui.dialog.labeledElement} The current labeled element. + * @example + */ + setLabel : function( label ) + { + var node = CKEDITOR.document.getById( this._.labelId ); + if ( node.getChildCount() < 1 ) + ( new CKEDITOR.dom.text( label, CKEDITOR.document ) ).appendTo( node ); + else + node.getChild( 0 ).$.nodeValue = label; + return this; + }, + + /** + * Retrieves the current label text of the elment. + * @returns {String} The current label text. + * @example + */ + getLabel : function() + { + var node = CKEDITOR.document.getById( this._.labelId ); + if ( !node || node.getChildCount() < 1 ) + return ''; + else + return node.getChild( 0 ).getText(); + }, + + /** + * Defines the onChange event for UI element definitions. + * @field + * @type Object + * @example + */ + eventProcessors : commonEventProcessors + }, true ); + + CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement, + /** @lends CKEDITOR.ui.dialog.button.prototype */ + { + /** + * Simulates a click to the button. + * @example + * @returns {Object} Return value of the 'click' event. + */ + click : function() + { + if ( !this._.disabled ) + return this.fire( 'click', { dialog : this._.dialog } ); + this.getElement().$.blur(); + return false; + }, + + /** + * Enables the button. + * @example + */ + enable : function() + { + this._.disabled = false; + var element = this.getElement(); + element && element.removeClass( 'cke_disabled' ); + }, + + /** + * Disables the button. + * @example + */ + disable : function() + { + this._.disabled = true; + this.getElement().addClass( 'cke_disabled' ); + }, + + isVisible : function() + { + return this.getElement().getFirst().isVisible(); + }, + + isEnabled : function() + { + return !this._.disabled; + }, + + /** + * Defines the onChange event and onClick for button element definitions. + * @field + * @type Object + * @example + */ + eventProcessors : CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, + { + /** @ignore */ + onClick : function( dialog, func ) + { + this.on( 'click', func ); + } + }, true ), + + /** + * Handler for the element's access key up event. Simulates a click to + * the button. + * @example + */ + accessKeyUp : function() + { + this.click(); + }, + + /** + * Handler for the element's access key down event. Simulates a mouse + * down to the button. + * @example + */ + accessKeyDown : function() + { + this.focus(); + }, + + keyboardFocusable : true + }, true ); + + CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement, + /** @lends CKEDITOR.ui.dialog.textInput.prototype */ + { + /** + * Gets the text input DOM element under this UI object. + * @example + * @returns {CKEDITOR.dom.element} The DOM element of the text input. + */ + getInputElement : function() + { + return CKEDITOR.document.getById( this._.inputId ); + }, + + /** + * Puts focus into the text input. + * @example + */ + focus : function() + { + var me = this.selectParentTab(); + + // GECKO BUG: setTimeout() is needed to workaround invisible selections. + setTimeout( function() + { + var element = me.getInputElement(); + element && element.$.focus(); + }, 0 ); + }, + + /** + * Selects all the text in the text input. + * @example + */ + select : function() + { + var me = this.selectParentTab(); + + // GECKO BUG: setTimeout() is needed to workaround invisible selections. + setTimeout( function() + { + var e = me.getInputElement(); + if ( e ) + { + e.$.focus(); + e.$.select(); + } + }, 0 ); + }, + + /** + * Handler for the text input's access key up event. Makes a select() + * call to the text input. + * @example + */ + accessKeyUp : function() + { + this.select(); + }, + + /** + * Sets the value of this text input object. + * @param {Object} value The new value. + * @returns {CKEDITOR.ui.dialog.textInput} The current UI element. + * @example + * uiElement.setValue( 'Blamo' ); + */ + setValue : function( value ) + { + !value && ( value = '' ); + return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments ); + }, + + keyboardFocusable : true + }, commonPrototype, true ); + + CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput(); + + CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement, + /** @lends CKEDITOR.ui.dialog.select.prototype */ + { + /** + * Gets the DOM element of the select box. + * @returns {CKEDITOR.dom.element} The <select> element of this UI + * element. + * @example + */ + getInputElement : function() + { + return this._.select.getElement(); + }, + + /** + * Adds an option to the select box. + * @param {String} label Option label. + * @param {String} value (Optional) Option value, if not defined it'll be + * assumed to be the same as the label. + * @param {Number} index (Optional) Position of the option to be inserted + * to. If not defined the new option will be inserted to the end of list. + * @example + * @returns {CKEDITOR.ui.dialog.select} The current select UI element. + */ + add : function( label, value, index ) + { + var option = new CKEDITOR.dom.element( 'option', this.getDialog().getParentEditor().document ), + selectElement = this.getInputElement().$; + option.$.text = label; + option.$.value = ( value === undefined || value === null ) ? label : value; + if ( index === undefined || index === null ) + { + if ( CKEDITOR.env.ie ) + selectElement.add( option.$ ); + else + selectElement.add( option.$, null ); + } + else + selectElement.add( option.$, index ); + return this; + }, + + /** + * Removes an option from the selection list. + * @param {Number} index Index of the option to be removed. + * @example + * @returns {CKEDITOR.ui.dialog.select} The current select UI element. + */ + remove : function( index ) + { + var selectElement = this.getInputElement().$; + selectElement.remove( index ); + return this; + }, + + /** + * Clears all options out of the selection list. + * @returns {CKEDITOR.ui.dialog.select} The current select UI element. + */ + clear : function() + { + var selectElement = this.getInputElement().$; + while ( selectElement.length > 0 ) + selectElement.remove( 0 ); + return this; + }, + + keyboardFocusable : true + }, commonPrototype, true ); + + CKEDITOR.ui.dialog.checkbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement, + /** @lends CKEDITOR.ui.dialog.checkbox.prototype */ + { + /** + * Gets the checkbox DOM element. + * @example + * @returns {CKEDITOR.dom.element} The DOM element of the checkbox. + */ + getInputElement : function() + { + return this._.checkbox.getElement(); + }, + + /** + * Sets the state of the checkbox. + * @example + * @param {Boolean} true to tick the checkbox, false to untick it. + * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element. + */ + setValue : function( checked, noChangeEvent ) + { + this.getInputElement().$.checked = checked; + !noChangeEvent && this.fire( 'change', { value : checked } ); + }, + + /** + * Gets the state of the checkbox. + * @example + * @returns {Boolean} true means the checkbox is ticked, false means it's not ticked. + */ + getValue : function() + { + return this.getInputElement().$.checked; + }, + + /** + * Handler for the access key up event. Toggles the checkbox. + * @example + */ + accessKeyUp : function() + { + this.setValue( !this.getValue() ); + }, + + /** + * Defines the onChange event for UI element definitions. + * @field + * @type Object + * @example + */ + eventProcessors : + { + onChange : function( dialog, func ) + { + if ( !CKEDITOR.env.ie ) + return commonEventProcessors.onChange.apply( this, arguments ); + else + { + dialog.on( 'load', function() + { + var element = this._.checkbox.getElement(); + element.on( 'propertychange', function( evt ) + { + evt = evt.data.$; + if ( evt.propertyName == 'checked' ) + this.fire( 'change', { value : element.$.checked } ); + }, this ); + }, this ); + this.on( 'change', func ); + } + return null; + } + }, + + keyboardFocusable : true + }, commonPrototype, true ); + + CKEDITOR.ui.dialog.radio.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement, + /** @lends CKEDITOR.ui.dialog.radio.prototype */ + { + /** + * Checks one of the radio buttons in this button group. + * @example + * @param {String} value The value of the button to be chcked. + * @param {Boolean} noChangeEvent Internal commit, to supress 'change' event on this element. + */ + setValue : function( value, noChangeEvent ) + { + var children = this._.children, + item; + for ( var i = 0 ; ( i < children.length ) && ( item = children[i] ) ; i++ ) + item.getElement().$.checked = ( item.getValue() == value ); + !noChangeEvent && this.fire( 'change', { value : value } ); + }, + + /** + * Gets the value of the currently checked radio button. + * @example + * @returns {String} The currently checked button's value. + */ + getValue : function() + { + var children = this._.children; + for ( var i = 0 ; i < children.length ; i++ ) + { + if ( children[i].getElement().$.checked ) + return children[i].getValue(); + } + return null; + }, + + /** + * Handler for the access key up event. Focuses the currently + * selected radio button, or the first radio button if none is + * selected. + * @example + */ + accessKeyUp : function() + { + var children = this._.children, i; + for ( i = 0 ; i < children.length ; i++ ) + { + if ( children[i].getElement().$.checked ) + { + children[i].getElement().focus(); + return; + } + } + children[0].getElement().focus(); + }, + + /** + * Defines the onChange event for UI element definitions. + * @field + * @type Object + * @example + */ + eventProcessors : + { + onChange : function( dialog, func ) + { + if ( !CKEDITOR.env.ie ) + return commonEventProcessors.onChange.apply( this, arguments ); + else + { + dialog.on( 'load', function() + { + var children = this._.children, me = this; + for ( var i = 0 ; i < children.length ; i++ ) + { + var element = children[i].getElement(); + element.on( 'propertychange', function( evt ) + { + evt = evt.data.$; + if ( evt.propertyName == 'checked' && this.$.checked ) + me.fire( 'change', { value : this.getAttribute( 'value' ) } ); + } ); + } + }, this ); + this.on( 'change', func ); + } + return null; + } + }, + + keyboardFocusable : true + }, commonPrototype, true ); + + CKEDITOR.ui.dialog.file.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement, + commonPrototype, + /** @lends CKEDITOR.ui.dialog.file.prototype */ + { + /** + * Gets the <input> element of this file input. + * @returns {CKEDITOR.dom.element} The file input element. + * @example + */ + getInputElement : function() + { + var frameDocument = CKEDITOR.document.getById( this._.frameId ).getFrameDocument(); + return frameDocument.$.forms.length > 0 ? + new CKEDITOR.dom.element( frameDocument.$.forms[0].elements[0] ) : + this.getElement(); + }, + + /** + * Uploads the file in the file input. + * @returns {CKEDITOR.ui.dialog.file} This object. + * @example + */ + submit : function() + { + this.getInputElement().getParent().$.submit(); + return this; + }, + + /** + * Get the action assigned to the form. + * @returns {String} The value of the action. + * @example + */ + getAction : function() + { + return this.getInputElement().getParent().$.action; + }, + + /** + * The events must be applied on the inner input element, and + * that must be done when the iframe & form has been loaded + */ + registerEvents : function( definition ) + { + var regex = /^on([A-Z]\w+)/, + match; + + var registerDomEvent = function( uiElement, dialog, eventName, func ) + { + uiElement.on( 'formLoaded', function() + { + uiElement.getInputElement().on( eventName, func, uiElement ); + }); + }; + + for ( var i in definition ) + { + if ( !( match = i.match( regex ) ) ) + continue; + + if ( this.eventProcessors[i] ) + this.eventProcessors[i].call( this, this._.dialog, definition[i] ); + else + registerDomEvent( this, this._.dialog, match[1].toLowerCase(), definition[i] ); + } + + return this; + }, + + /** + * Redraws the file input and resets the file path in the file input. + * The redraw logic is necessary because non-IE browsers tend to clear + * the <iframe> containing the file input after closing the dialog. + * @example + */ + reset : function() + { + var _ = this._, + frameElement = CKEDITOR.document.getById( _.frameId ), + frameDocument = frameElement.getFrameDocument(), + elementDefinition = _.definition, + buttons = _.buttons, + callNumber = this.formLoadedNumber, + unloadNumber = this.formUnloadNumber, + langDir = _.dialog._.editor.lang.dir, + langCode = _.dialog._.editor.langCode; + + // The callback function for the iframe, but we must call tools.addFunction only once + // so we store the function number in this.formLoadedNumber + if ( !callNumber ) + { + callNumber = this.formLoadedNumber = CKEDITOR.tools.addFunction( + function() + { + // Now we can apply the events to the input type=file + this.fire( 'formLoaded' ) ; + }, this ) ; + + // Remove listeners attached to the content of the iframe (the file input) + unloadNumber = this.formUnloadNumber = CKEDITOR.tools.addFunction( + function() + { + this.getInputElement().clearCustomData(); + }, this ) ; + + this.getDialog()._.editor.on( 'destroy', function() + { + CKEDITOR.tools.removeFunction( callNumber ); + CKEDITOR.tools.removeFunction( unloadNumber ); + } ); + } + + function generateFormField() + { + frameDocument.$.open(); + + // Support for custom document.domain in IE. + if ( CKEDITOR.env.isCustomDomain() ) + frameDocument.$.domain = document.domain; + + var size = ''; + if ( elementDefinition.size ) + size = elementDefinition.size - ( CKEDITOR.env.ie ? 7 : 0 ); // "Browse" button is bigger in IE. + + frameDocument.$.write( [ '<html dir="' + langDir + '" lang="' + langCode + '"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">', + '<form enctype="multipart/form-data" method="POST" dir="' + langDir + '" lang="' + langCode + '" action="', + CKEDITOR.tools.htmlEncode( elementDefinition.action ), + '">', + '<input type="file" name="', + CKEDITOR.tools.htmlEncode( elementDefinition.id || 'cke_upload' ), + '" size="', + CKEDITOR.tools.htmlEncode( size > 0 ? size : "" ), + '" />', + '</form>', + '</body></html>', + '<script>window.parent.CKEDITOR.tools.callFunction(' + callNumber + ');', + 'window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction(' + unloadNumber + ')}</script>' ].join( '' ) ); + + frameDocument.$.close(); + + for ( var i = 0 ; i < buttons.length ; i++ ) + buttons[i].enable(); + } + + // #3465: Wait for the browser to finish rendering the dialog first. + if ( CKEDITOR.env.gecko ) + setTimeout( generateFormField, 500 ); + else + generateFormField(); + }, + + getValue : function() + { + return this.getInputElement().$.value || ''; + }, + + /*** + * The default value of input type="file" is an empty string, but during initialization + * of this UI element, the iframe still isn't ready so it can't be read from that object + * Setting it manually prevents later issues about the current value ("") being different + * of the initial value (undefined as it asked for .value of a div) + */ + setInitValue : function() + { + this._.initValue = ''; + }, + + /** + * Defines the onChange event for UI element definitions. + * @field + * @type Object + * @example + */ + eventProcessors : + { + onChange : function( dialog, func ) + { + // If this method is called several times (I'm not sure about how this can happen but the default + // onChange processor includes this protection) + // In order to reapply to the new element, the property is deleted at the beggining of the registerEvents method + if ( !this._.domOnChangeRegistered ) + { + // By listening for the formLoaded event, this handler will get reapplied when a new + // form is created + this.on( 'formLoaded', function() + { + this.getInputElement().on( 'change', function(){ this.fire( 'change', { value : this.getValue() } ); }, this ); + }, this ); + this._.domOnChangeRegistered = true; + } + + this.on( 'change', func ); + } + }, + + keyboardFocusable : true + }, true ); + + CKEDITOR.ui.dialog.fileButton.prototype = new CKEDITOR.ui.dialog.button; + + CKEDITOR.ui.dialog.fieldset.prototype = CKEDITOR.tools.clone( CKEDITOR.ui.dialog.hbox.prototype ); + + CKEDITOR.dialog.addUIElement( 'text', textBuilder ); + CKEDITOR.dialog.addUIElement( 'password', textBuilder ); + CKEDITOR.dialog.addUIElement( 'textarea', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'checkbox', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'radio', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'button', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'select', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'file', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'fileButton', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'html', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'fieldset', containerBuilder ); +})(); + +/** + * Fired when the value of the uiElement is changed + * @name CKEDITOR.ui.dialog.uiElement#change + * @event + */ + +/** + * Fired when the inner frame created by the element is ready. + * Each time the button is used or the dialog is loaded a new + * form might be created. + * @name CKEDITOR.ui.dialog.fileButton#formLoaded + * @event + */ diff --git a/_source/plugins/div/dialogs/div.js b/_source/plugins/div/dialogs/div.js new file mode 100644 index 0000000..27ca096 --- /dev/null +++ b/_source/plugins/div/dialogs/div.js @@ -0,0 +1,535 @@ +/* + * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +(function() +{ + + /** + * Add to collection with DUP examination. + * @param {Object} collection + * @param {Object} element + * @param {Object} database + */ + function addSafely( collection, element, database ) + { + // 1. IE doesn't support customData on text nodes; + // 2. Text nodes never get chance to appear twice; + if ( !element.is || !element.getCustomData( 'block_processed' ) ) + { + element.is && CKEDITOR.dom.element.setMarker( database, element, 'block_processed', true ); + collection.push( element ); + } + } + + function getNonEmptyChildren( element ) + { + var retval = []; + var children = element.getChildren(); + for ( var i = 0 ; i < children.count() ; i++ ) + { + var child = children.getItem( i ); + if ( ! ( child.type === CKEDITOR.NODE_TEXT + && ( /^[ \t\n\r]+$/ ).test( child.getText() ) ) ) + retval.push( child ); + } + return retval; + } + + + /** + * Dialog reused by both 'creatediv' and 'editdiv' commands. + * @param {Object} editor + * @param {String} command The command name which indicate what the current command is. + */ + function divDialog( editor, command ) + { + // Definition of elements at which div operation should stopped. + var divLimitDefinition = ( function(){ + + // Customzie from specialize blockLimit elements + var definition = CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$blockLimit ); + + // Exclude 'div' itself. + delete definition.div; + + // Exclude 'td' and 'th' when 'wrapping table' + if ( editor.config.div_wrapTable ) + { + delete definition.td; + delete definition.th; + } + return definition; + })(); + + // DTD of 'div' element + var dtd = CKEDITOR.dtd.div; + + /** + * Get the first div limit element on the element's path. + * @param {Object} element + */ + function getDivLimitElement( element ) + { + var pathElements = new CKEDITOR.dom.elementPath( element ).elements; + var divLimit; + for ( var i = 0; i < pathElements.length ; i++ ) + { + if ( pathElements[ i ].getName() in divLimitDefinition ) + { + divLimit = pathElements[ i ]; + break; + } + } + return divLimit; + } + + /** + * Init all fields' setup/commit function. + * @memberof divDialog + */ + function setupFields() + { + this.foreach( function( field ) + { + // Exclude layout container elements + if ( /^(?!vbox|hbox)/.test( field.type ) ) + { + if ( !field.setup ) + { + // Read the dialog fields values from the specified + // element attributes. + field.setup = function( element ) + { + field.setValue( element.getAttribute( field.id ) || '' ); + }; + } + if ( !field.commit ) + { + // Set element attributes assigned by the dialog + // fields. + field.commit = function( element ) + { + var fieldValue = this.getValue(); + // ignore default element attribute values + if ( 'dir' == field.id && element.getComputedStyle( 'direction' ) == fieldValue ) + return; + + if ( fieldValue ) + element.setAttribute( field.id, fieldValue ); + else + element.removeAttribute( field.id ); + }; + } + } + } ); + } + + /** + * Wrapping 'div' element around appropriate blocks among the selected ranges. + * @param {Object} editor + */ + function createDiv( editor ) + { + // new adding containers OR detected pre-existed containers. + var containers = []; + // node markers store. + var database = {}; + // All block level elements which contained by the ranges. + var containedBlocks = [], block; + + // Get all ranges from the selection. + var selection = editor.document.getSelection(), + ranges = selection.getRanges(); + var bookmarks = selection.createBookmarks(); + var i, iterator; + + // Calcualte a default block tag if we need to create blocks. + var blockTag = editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'; + + // collect all included elements from dom-iterator + for ( i = 0 ; i < ranges.length ; i++ ) + { + iterator = ranges[ i ].createIterator(); + while ( ( block = iterator.getNextParagraph() ) ) + { + // include contents of blockLimit elements. + if ( block.getName() in divLimitDefinition ) + { + var j, childNodes = block.getChildren(); + for ( j = 0 ; j < childNodes.count() ; j++ ) + addSafely( containedBlocks, childNodes.getItem( j ) , database ); + } + else + { + // Bypass dtd disallowed elements. + while ( !dtd[ block.getName() ] && block.getName() != 'body' ) + block = block.getParent(); + addSafely( containedBlocks, block, database ); + } + } + } + + CKEDITOR.dom.element.clearAllMarkers( database ); + + var blockGroups = groupByDivLimit( containedBlocks ); + var ancestor, blockEl, divElement; + + for ( i = 0 ; i < blockGroups.length ; i++ ) + { + var currentNode = blockGroups[ i ][ 0 ]; + + // Calculate the common parent node of all contained elements. + ancestor = currentNode.getParent(); + for ( j = 1 ; j < blockGroups[ i ].length; j++ ) + ancestor = ancestor.getCommonAncestor( blockGroups[ i ][ j ] ); + + divElement = new CKEDITOR.dom.element( 'div', editor.document ); + + // Normalize the blocks in each group to a common parent. + for ( j = 0; j < blockGroups[ i ].length ; j++ ) + { + currentNode = blockGroups[ i ][ j ]; + + while ( !currentNode.getParent().equals( ancestor ) ) + currentNode = currentNode.getParent(); + + // This could introduce some duplicated elements in array. + blockGroups[ i ][ j ] = currentNode; + } + + // Wrapped blocks counting + var fixedBlock = null; + for ( j = 0 ; j < blockGroups[ i ].length ; j++ ) + { + currentNode = blockGroups[ i ][ j ]; + + // Avoid DUP elements introduced by grouping. + if ( !( currentNode.getCustomData && currentNode.getCustomData( 'block_processed' ) ) ) + { + currentNode.is && CKEDITOR.dom.element.setMarker( database, currentNode, 'block_processed', true ); + + // Establish new container, wrapping all elements in this group. + if ( !j ) + divElement.insertBefore( currentNode ); + + divElement.append( currentNode ); + } + } + + CKEDITOR.dom.element.clearAllMarkers( database ); + containers.push( divElement ); + } + + selection.selectBookmarks( bookmarks ); + return containers; + } + + function getDiv( editor ) + { + var path = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() ), + blockLimit = path.blockLimit, + div = blockLimit && blockLimit.getAscendant( 'div', true ); + return div; + } + /** + * Divide a set of nodes to different groups by their path's blocklimit element. + * Note: the specified nodes should be in source order naturally, which mean they are supposed to producea by following class: + * * CKEDITOR.dom.range.Iterator + * * CKEDITOR.dom.domWalker + * @return {Array []} the grouped nodes + */ + function groupByDivLimit( nodes ) + { + var groups = [], + lastDivLimit = null, + path, block; + for ( var i = 0 ; i < nodes.length ; i++ ) + { + block = nodes[i]; + var limit = getDivLimitElement( block ); + if ( !limit.equals( lastDivLimit ) ) + { + lastDivLimit = limit ; + groups.push( [] ) ; + } + groups[ groups.length - 1 ].push( block ) ; + } + return groups; + } + + // Synchronous field values to other impacted fields is required, e.g. div styles + // change should also alter inline-style text. + function commitInternally( targetFields ) + { + var dialog = this.getDialog(), + element = dialog._element && dialog._element.clone() + || new CKEDITOR.dom.element( 'div', editor.document ); + + // Commit this field and broadcast to target fields. + this.commit( element, true ); + + targetFields = [].concat( targetFields ); + var length = targetFields.length, field; + for ( var i = 0; i < length; i++ ) + { + field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) ); + field && field.setup && field.setup( element, true ); + } + } + + + // Registered 'CKEDITOR.style' instances. + var styles = {} ; + /** + * Hold a collection of created block container elements. + */ + var containers = []; + /** + * @type divDialog + */ + return { + title : editor.lang.div.title, + minWidth : 400, + minHeight : 165, + contents : + [ + { + id :'info', + label :editor.lang.common.generalTab, + title :editor.lang.common.generalTab, + elements : + [ + { + type :'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + id :'elementStyle', + type :'select', + style :'width: 100%;', + label :editor.lang.div.styleSelectLabel, + 'default' : '', + // Options are loaded dynamically. + items : + [ + [ editor.lang.common.notSet , '' ] + ], + onChange : function() + { + commitInternally.call( this, [ 'info:class', 'advanced:dir', 'advanced:style' ] ); + }, + setup : function( element ) + { + for ( var name in styles ) + styles[ name ].checkElementRemovable( element, true ) && this.setValue( name ); + }, + commit: function( element ) + { + var styleName; + if ( ( styleName = this.getValue() ) ) + { + var style = styles[ styleName ]; + var customData = element.getCustomData( 'elementStyle' ) || ''; + + style.applyToObject( element ); + element.setCustomData( 'elementStyle', customData + style._.definition.attributes.style ); + } + } + }, + { + id :'class', + type :'text', + label :editor.lang.common.cssClass, + 'default' : '' + } + ] + } + ] + }, + { + id :'advanced', + label :editor.lang.common.advancedTab, + title :editor.lang.common.advancedTab, + elements : + [ + { + type :'vbox', + padding :1, + children : + [ + { + type :'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + type :'text', + id :'id', + label :editor.lang.common.id, + 'default' : '' + }, + { + type :'text', + id :'lang', + label :editor.lang.link.langCode, + 'default' : '' + } + ] + }, + { + type :'hbox', + children : + [ + { + type :'text', + id :'style', + style :'width: 100%;', + label :editor.lang.common.cssStyle, + 'default' : '', + commit : function( element ) + { + // Merge with 'elementStyle', which is of higher priority. + var merged = this.getValue() + ( element.getCustomData( 'elementStyle' ) || '' ); + element.setAttribute( 'style', merged ); + } + } + ] + }, + { + type :'hbox', + children : + [ + { + type :'text', + id :'title', + style :'width: 100%;', + label :editor.lang.common.advisoryTitle, + 'default' : '' + } + ] + }, + { + type :'select', + id :'dir', + style :'width: 100%;', + label :editor.lang.common.langDir, + 'default' : '', + items : + [ + [ editor.lang.common.notSet , '' ], + [ + editor.lang.common.langDirLtr, + 'ltr' + ], + [ + editor.lang.common.langDirRtl, + 'rtl' + ] + ] + } + ] + } + ] + } + ], + onLoad : function() + { + setupFields.call( this ); + + // Preparing for the 'elementStyle' field. + var dialog = this, + stylesField = this.getContentElement( 'info', 'elementStyle' ); + + // Reuse the 'stylescombo' plugin's styles definition. + editor.getStylesSet( function( stylesDefinitions ) + { + var styleName; + + if ( stylesDefinitions ) + { + // Digg only those styles that apply to 'div'. + for ( var i = 0 ; i < stylesDefinitions.length ; i++ ) + { + var styleDefinition = stylesDefinitions[ i ]; + if ( styleDefinition.element && styleDefinition.element == 'div' ) + { + styleName = styleDefinition.name; + styles[ styleName ] = new CKEDITOR.style( styleDefinition ); + + // Populate the styles field options with style name. + stylesField.items.push( [ styleName, styleName ] ); + stylesField.add( styleName, styleName ); + } + } + } + + // We should disable the content element + // it if no options are available at all. + stylesField[ stylesField.items.length > 1 ? 'enable' : 'disable' ](); + + // Now setup the field value manually. + setTimeout( function() { stylesField.setup( dialog._element ); }, 0 ); + } ); + }, + onShow : function() + { + // Whether always create new container regardless of existed + // ones. + if ( command == 'editdiv' ) + { + // Try to discover the containers that already existed in + // ranges + var div = getDiv( editor ); + // update dialog field values + div && this.setupContent( this._element = div ); + } + }, + onOk : function() + { + if ( command == 'editdiv' ) + containers = [ this._element ]; + else + containers = createDiv( editor, true ); + + // Update elements attributes + var size = containers.length; + for ( var i = 0; i < size; i++ ) + { + this.commitContent( containers[ i ] ); + + // Remove empty 'style' attribute. + !containers[ i ].getAttribute( 'style' ) && containers[ i ].removeAttribute( 'style' ); + } + + this.hide(); + }, + onHide : function() + { + // Remove style only when editing existing DIV. (#6315) + if ( command == 'editdiv' ) + this._element.removeCustomData( 'elementStyle' ); + delete this._element; + } + }; + } + + CKEDITOR.dialog.add( 'creatediv', function( editor ) + { + return divDialog( editor, 'creatediv' ); + } ); + CKEDITOR.dialog.add( 'editdiv', function( editor ) + { + return divDialog( editor, 'editdiv' ); + } ); +} )(); + +/* + * @name CKEDITOR.config.div_wrapTable + * Whether to wrap the whole table instead of indivisual cells when created 'div' in table cell. + * @type Boolean + * @default false + * @example config.div_wrapTable = true; + */ diff --git a/_source/plugins/div/plugin.js b/_source/plugins/div/plugin.js new file mode 100644 index 0000000..2f954dc --- /dev/null +++ b/_source/plugins/div/plugin.js @@ -0,0 +1,121 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "div" plugin. It wraps the selected block level elements with a 'div' element with specified styles and attributes. + * + */ + +(function() +{ + CKEDITOR.plugins.add( 'div', + { + requires : [ 'editingblock', 'domiterator', 'styles' ], + + init : function( editor ) + { + var lang = editor.lang.div; + + editor.addCommand( 'creatediv', new CKEDITOR.dialogCommand( 'creatediv' ) ); + editor.addCommand( 'editdiv', new CKEDITOR.dialogCommand( 'editdiv' ) ); + editor.addCommand( 'removediv', + { + exec : function( editor ) + { + var selection = editor.getSelection(), + ranges = selection && selection.getRanges(), + range, + bookmarks = selection.createBookmarks(), + walker, + toRemove = []; + + function findDiv( node ) + { + var path = new CKEDITOR.dom.elementPath( node ), + blockLimit = path.blockLimit, + div = blockLimit.is( 'div' ) && blockLimit; + + if ( div && !div.data( 'cke-div-added' ) ) + { + toRemove.push( div ); + div.data( 'cke-div-added' ); + } + } + + for ( var i = 0 ; i < ranges.length ; i++ ) + { + range = ranges[ i ]; + if ( range.collapsed ) + findDiv( selection.getStartElement() ); + else + { + walker = new CKEDITOR.dom.walker( range ); + walker.evaluator = findDiv; + walker.lastForward(); + } + } + + for ( i = 0 ; i < toRemove.length ; i++ ) + toRemove[ i ].remove( true ); + + selection.selectBookmarks( bookmarks ); + } + } ); + + editor.ui.addButton( 'CreateDiv', + { + label : lang.toolbar, + command :'creatediv' + } ); + + if ( editor.addMenuItems ) + { + editor.addMenuItems( + { + editdiv : + { + label : lang.edit, + command : 'editdiv', + group : 'div', + order : 1 + }, + + removediv: + { + label : lang.remove, + command : 'removediv', + group : 'div', + order : 5 + } + } ); + + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || element.isReadOnly() ) + return null; + + var elementPath = new CKEDITOR.dom.elementPath( element ), + blockLimit = elementPath.blockLimit; + + if ( blockLimit && blockLimit.getAscendant( 'div', true ) ) + { + return { + editdiv : CKEDITOR.TRISTATE_OFF, + removediv : CKEDITOR.TRISTATE_OFF + }; + } + + return null; + } ); + } + } + + CKEDITOR.dialog.add( 'creatediv', this.path + 'dialogs/div.js' ); + CKEDITOR.dialog.add( 'editdiv', this.path + 'dialogs/div.js' ); + } + } ); +})(); diff --git a/_source/plugins/docprops/dialogs/docprops.js b/_source/plugins/docprops/dialogs/docprops.js new file mode 100644 index 0000000..bfd404b --- /dev/null +++ b/_source/plugins/docprops/dialogs/docprops.js @@ -0,0 +1,686 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'docProps', function( editor ) +{ + var lang = editor.lang.docprops, + langCommon = editor.lang.common, + metaHash = {}; + + function getDialogValue( dialogName, callback ) + { + var onOk = function() + { + releaseHandlers( this ); + callback( this, this._.parentDialog ); + }; + var releaseHandlers = function( dialog ) + { + dialog.removeListener( 'ok', onOk ); + dialog.removeListener( 'cancel', releaseHandlers ); + }; + var bindToDialog = function( dialog ) + { + dialog.on( 'ok', onOk ); + dialog.on( 'cancel', releaseHandlers ); + }; + editor.execCommand( dialogName ); + if ( editor._.storedDialogs.colordialog ) + bindToDialog( editor._.storedDialogs.colordialog ); + else + { + CKEDITOR.on( 'dialogDefinition', function( e ) + { + if ( e.data.name != dialogName ) + return; + + var definition = e.data.definition; + + e.removeListener(); + definition.onLoad = CKEDITOR.tools.override( definition.onLoad, function( orginal ) + { + return function() + { + bindToDialog( this ); + definition.onLoad = orginal; + if ( typeof orginal == 'function' ) + orginal.call( this ); + }; + }); + }); + } + } + function handleOther() + { + var dialog = this.getDialog(), + other = dialog.getContentElement( 'general', this.id + 'Other' ); + if ( !other ) + return; + if ( this.getValue() == 'other' ) + { + other.getInputElement().removeAttribute( 'readOnly' ); + other.focus(); + other.getElement().removeClass( 'cke_disabled' ); + } + else + { + other.getInputElement().setAttribute( 'readOnly', true ); + other.getElement().addClass( 'cke_disabled' ); + } + } + function commitMeta( name, isHttp, value ) + { + return function( doc, html, head ) + { + var hash = metaHash, + val = typeof value != 'undefined' ? value : this.getValue(); + if ( !val && ( name in hash ) ) + hash[ name ].remove(); + else if ( val && ( name in hash ) ) + hash[ name ].setAttribute( 'content', val ); + else if ( val ) + { + var meta = new CKEDITOR.dom.element( 'meta', editor.document ); + meta.setAttribute( isHttp ? 'http-equiv' : 'name', name ); + meta.setAttribute( 'content', val ); + head.append( meta ); + } + }; + } + function setupMeta( name, ret ) + { + return function() + { + var hash = metaHash, + result = ( name in hash ) ? hash[ name ].getAttribute( 'content' ) || '' : ''; + if ( ret ) + return result; + this.setValue( result ); + return null; + }; + } + function commitMargin( name ) + { + return function( doc, html, head, body ) + { + body.removeAttribute( 'margin' + name ); + var val = this.getValue(); + if ( val !== '' ) + body.setStyle( 'margin-' + name, CKEDITOR.tools.cssLength( val ) ); + else + body.removeStyle( 'margin-' + name ); + }; + } + + function createMetaHash( doc ) + { + var hash = {}, + metas = doc.getElementsByTag( 'meta' ), + count = metas.count(); + + for ( var i = 0; i < count; i++ ) + { + var meta = metas.getItem( i ); + hash[ meta.getAttribute( meta.hasAttribute( 'http-equiv' ) ? 'http-equiv' : 'name' ).toLowerCase() ] = meta; + } + return hash; + } + // We cannot just remove the style from the element, as it might be affected from non-inline stylesheets. + // To get the proper result, we should manually set the inline style to its default value. + function resetStyle( element, prop, resetVal ) + { + element.removeStyle( prop ); + if ( element.getComputedStyle( prop ) != resetVal ) + element.setStyle( prop, resetVal ); + } + + // Utilty to shorten the creation of color fields in the dialog. + var colorField = function( id, label, fieldProps ) + { + return { + type : 'hbox', + padding : 0, + widths : [ '60%', '40%' ], + children : [ + CKEDITOR.tools.extend( { + type : 'text', + id : id, + label : lang[ label ] + }, fieldProps || {}, 1 ), + { + type : 'button', + id : id + 'Choose', + label : lang.chooseColor, + className : 'colorChooser', + onClick : function() + { + var self = this; + getDialogValue( 'colordialog', function( colorDialog ) + { + var dialog = self.getDialog(); + dialog.getContentElement( dialog._.currentTabId, id ).setValue( colorDialog.getContentElement( 'picker', 'selectedColor' ).getValue() ); + }); + } + } + ] + }; + }; + var previewSrc = 'javascript:' + + 'void((function(){' + + encodeURIComponent( + 'document.open();' + + ( CKEDITOR.env.isCustomDomain() ? 'document.domain=\'' + document.domain + '\';' : '' ) + + 'document.write( \'<html style="background-color: #ffffff; height: 100%"><head></head><body style="width: 100%; height: 100%; margin: 0px">' + lang.previewHtml + '</body></html>\' );' + + 'document.close();' + ) + + '})())'; + + return { + title : lang.title, + minHeight: 330, + minWidth: 500, + onShow : function() + { + var doc = editor.document, + html = doc.getElementsByTag( 'html' ).getItem( 0 ), + head = doc.getHead(), + body = doc.getBody(); + metaHash = createMetaHash( doc ); + this.setupContent( doc, html, head, body ); + }, + onHide : function() + { + metaHash = {}; + }, + onOk : function() + { + var doc = editor.document, + html = doc.getElementsByTag( 'html' ).getItem( 0 ), + head = doc.getHead(), + body = doc.getBody(); + this.commitContent( doc, html, head, body ); + }, + contents : [ + { + id : 'general', + label : langCommon.generalTab, + elements : [ + { + type : 'text', + id : 'title', + label : lang.docTitle, + setup : function( doc ) + { + this.setValue( doc.getElementsByTag( 'title' ).getItem( 0 ).data( 'cke-title' ) ); + }, + commit : function( doc, html, head, body, isPreview ) + { + if ( isPreview ) + return; + doc.getElementsByTag( 'title' ).getItem( 0 ).data( 'cke-title', this.getValue() ); + } + }, + { + type : 'hbox', + children : [ + { + type : 'select', + id : 'dir', + label : langCommon.langDir, + style : 'width: 100%', + items : [ + [ langCommon.notSet , '' ], + [ langCommon.langDirLtr, 'ltr' ], + [ langCommon.langDirRtl, 'rtl' ] + ], + setup : function( doc, html, head, body ) + { + this.setValue( body.getDirection() || '' ); + }, + commit : function( doc, html, head, body ) + { + var val = this.getValue(); + if ( val ) + body.setAttribute( 'dir', val ); + else + body.removeAttribute( 'dir' ); + body.removeStyle( 'direction' ); + } + }, + { + type : 'text', + id : 'langCode', + label : langCommon.langCode, + setup : function( doc, html ) + { + this.setValue( html.getAttribute( 'xml:lang' ) || html.getAttribute( 'lang' ) || '' ); + }, + commit : function( doc, html, head, body, isPreview ) + { + if ( isPreview ) + return; + var val = this.getValue(); + if ( val ) + html.setAttributes( { 'xml:lang' : val, lang : val } ); + else + html.removeAttributes( { 'xml:lang' : 1, lang : 1 } ); + } + } + ] + }, + { + type : 'hbox', + children : [ + { + type : 'select', + id : 'charset', + label : lang.charset, + style : 'width: 100%', + items : [ + [ langCommon.notSet, '' ], + [ lang.charsetASCII, 'us-ascii' ], + [ lang.charsetCE, 'iso-8859-2' ], + [ lang.charsetCT, 'big5' ], + [ lang.charsetCR, 'iso-8859-5' ], + [ lang.charsetGR, 'iso-8859-7' ], + [ lang.charsetJP, 'iso-2022-jp' ], + [ lang.charsetKR, 'iso-2022-kr' ], + [ lang.charsetTR, 'iso-8859-9' ], + [ lang.charsetUN, 'utf-8' ], + [ lang.charsetWE, 'iso-8859-1' ], + [ lang.other, 'other' ] + ], + 'default' : '', + onChange : function() + { + this.getDialog().selectedCharset = this.getValue() != 'other' ? this.getValue() : ''; + handleOther.call( this ); + }, + setup : function() + { + this.metaCharset = ( 'charset' in metaHash ); + + var func = setupMeta( this.metaCharset ? 'charset' : 'content-type', 1, 1 ), + val = func.call( this ); + + !this.metaCharset && val.match( /charset=[^=]+$/ ) && ( val = val.substring( val.indexOf( '=' ) + 1 ) ); + + if ( val ) + { + this.setValue( val.toLowerCase() ); + if ( !this.getValue() ) + { + this.setValue( 'other' ); + var other = this.getDialog().getContentElement( 'general', 'charsetOther' ); + other && other.setValue( val ); + } + this.getDialog().selectedCharset = val; + } + + handleOther.call( this ); + }, + commit : function( doc, html, head, body, isPreview ) + { + if ( isPreview ) + return; + var value = this.getValue(), + other = this.getDialog().getContentElement( 'general', 'charsetOther' ); + + value == 'other' && ( value = other ? other.getValue() : '' ); + + value && !this.metaCharset && ( value = ( metaHash[ 'content-type' ] ? metaHash[ 'content-type' ].getAttribute( 'content' ).split( ';' )[0] : 'text/html' ) + '; charset=' + value ); + + var func = commitMeta( this.metaCharset ? 'charset' : 'content-type', 1, value ); + func.call( this, doc, html, head ); + } + }, + { + type : 'text', + id : 'charsetOther', + label : lang.charsetOther, + onChange : function(){ this.getDialog().selectedCharset = this.getValue(); } + } + ] + }, + { + type : 'hbox', + children : [ + { + type : 'select', + id : 'docType', + label : lang.docType, + style : 'width: 100%', + items : [ + [ langCommon.notSet , '' ], + [ 'XHTML 1.1', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">' ], + [ 'XHTML 1.0 Transitional', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' ], + [ 'XHTML 1.0 Strict', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' ], + [ 'XHTML 1.0 Frameset', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">' ], + [ 'HTML 5', '<!DOCTYPE html>' ], + [ 'HTML 4.01 Transitional', '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' ], + [ 'HTML 4.01 Strict', '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' ], + [ 'HTML 4.01 Frameset', '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">' ], + [ 'HTML 3.2', '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">' ], + [ 'HTML 2.0', '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">' ], + [ lang.other, 'other' ] + ], + onChange : handleOther, + setup : function() + { + if ( editor.docType ) + { + this.setValue( editor.docType ); + if ( !this.getValue() ) + { + this.setValue( 'other' ); + var other = this.getDialog().getContentElement( 'general', 'docTypeOther' ); + other && other.setValue( editor.docType ); + } + } + handleOther.call( this ); + }, + commit : function( doc, html, head, body, isPreview ) + { + if ( isPreview ) + return; + var value = this.getValue(), + other = this.getDialog().getContentElement( 'general', 'docTypeOther' ); + editor.docType = value == 'other' ? ( other ? other.getValue() : '' ) : value; + } + }, + { + type : 'text', + id : 'docTypeOther', + label : lang.docTypeOther + } + ] + }, + { + type : 'checkbox', + id : 'xhtmlDec', + label : lang.xhtmlDec, + setup : function() + { + this.setValue( !!editor.xmlDeclaration ); + }, + commit : function( doc, html, head, body, isPreview ) + { + if ( isPreview ) + return; + if ( this.getValue() ) + { + editor.xmlDeclaration = '<?xml version="1.0" encoding="' + ( this.getDialog().selectedCharset || 'utf-8' )+ '"?>' ; + html.setAttribute( 'xmlns', 'http://www.w3.org/1999/xhtml' ); + } + else + { + editor.xmlDeclaration = ''; + html.removeAttribute( 'xmlns' ); + } + } + } + ] + }, + { + id : 'design', + label : lang.design, + elements : [ + { + type : 'hbox', + widths : [ '60%', '40%' ], + children : [ + { + type : 'vbox', + children : [ + colorField( 'txtColor', 'txtColor', + { + setup : function( doc, html, head, body ) + { + this.setValue( body.getComputedStyle( 'color' ) ); + }, + commit : function( doc, html, head, body, isPreview ) + { + if ( this.isChanged() || isPreview ) + { + body.removeAttribute( 'text' ); + var val = this.getValue(); + if ( val ) + body.setStyle( 'color', val ); + else + body.removeStyle( 'color' ); + } + } + }), + colorField( 'bgColor', 'bgColor', { + setup : function( doc, html, head, body ) + { + var val = body.getComputedStyle( 'background-color' ) || ''; + this.setValue( val == 'transparent' ? '' : val ); + }, + commit : function( doc, html, head, body, isPreview ) + { + if ( this.isChanged() || isPreview ) + { + body.removeAttribute( 'bgcolor' ); + var val = this.getValue(); + if ( val ) + body.setStyle( 'background-color', val ); + else + resetStyle( body, 'background-color', 'transparent' ); + } + } + }), + { + type : 'hbox', + widths : [ '60%', '40%' ], + padding : 1, + children : [ + { + type : 'text', + id : 'bgImage', + label : lang.bgImage, + setup : function( doc, html, head, body ) + { + var val = body.getComputedStyle( 'background-image' ) || ''; + if ( val == 'none' ) + val = ''; + else + { + val = val.replace( /url\(\s*(["']?)\s*([^\)]*)\s*\1\s*\)/i, function( match, quote, url ) + { + return url; + }); + } + this.setValue( val ); + }, + commit : function( doc, html, head, body ) + { + body.removeAttribute( 'background' ); + var val = this.getValue(); + if ( val ) + body.setStyle( 'background-image', 'url(' + val + ')' ); + else + resetStyle( body, 'background-image', 'none' ); + } + }, + { + type : 'button', + id : 'bgImageChoose', + label : langCommon.browseServer, + style : 'display:inline-block;margin-top:10px;', + hidden : true, + filebrowser : 'design:bgImage' + } + ] + }, + { + type : 'checkbox', + id : 'bgFixed', + label : lang.bgFixed, + setup : function( doc, html, head, body ) + { + this.setValue( body.getComputedStyle( 'background-attachment' ) == 'fixed' ); + }, + commit : function( doc, html, head, body ) + { + if ( this.getValue() ) + body.setStyle( 'background-attachment', 'fixed' ); + else + resetStyle( body, 'background-attachment', 'scroll' ); + } + } + ] + }, + { + type : 'vbox', + children : [ + { + type : 'html', + id : 'marginTitle', + html : '<div style="text-align: center; margin: 0px auto; font-weight: bold">' + lang.margin + '</div>' + }, + { + type : 'text', + id : 'marginTop', + label : lang.marginTop, + style : 'width: 80px; text-align: center; margin: 0px auto', + inputStyle : 'text-align: center', + setup : function( doc, html, head, body ) + { + this.setValue( body.getStyle( 'margin-top' ) || body.getAttribute( 'margintop' ) || '' ); + }, + commit : commitMargin( 'top' ), + onLoad : function() + { + this.getElement().getParent().setStyle( 'text-align', 'center' ); + } + }, + { + type : 'hbox', + children : [ + { + type : 'text', + id : 'marginLeft', + label : lang.marginLeft, + style : 'width: 80px; text-align: center; margin: 0px auto', + inputStyle : 'text-align: center', + setup : function( doc, html, head, body ) + { + this.setValue( body.getStyle( 'margin-left' ) || body.getAttribute( 'marginleft' ) || '' ); + }, + commit : commitMargin( 'left' ), + onLoad : function() + { + this.getElement().getParent().setStyle( 'text-align', 'center' ); + } + }, + { + type : 'text', + id : 'marginRight', + label : lang.marginRight, + style : 'width: 80px; text-align: center; margin: 0px auto', + inputStyle : 'text-align: center', + setup : function( doc, html, head, body ) + { + this.setValue( body.getStyle( 'margin-right' ) || body.getAttribute( 'marginright' ) || '' ); + }, + commit : commitMargin( 'right' ), + onLoad : function() + { + this.getElement().getParent().setStyle( 'text-align', 'center' ); + } + } + ] + }, + { + type : 'text', + id : 'marginBottom', + label : lang.marginBottom, + style : 'width: 80px; text-align: center; margin: 0px auto', + inputStyle : 'text-align: center', + setup : function( doc, html, head, body ) + { + this.setValue( body.getStyle( 'margin-bottom' ) || body.getAttribute( 'marginbottom' ) || '' ); + }, + commit : commitMargin( 'bottom' ), + onLoad : function() + { + this.getElement().getParent().setStyle( 'text-align', 'center' ); + } + } + ] + } + ] + } + ] + }, + { + id : 'meta', + label : lang.meta, + elements : [ + { + type : 'textarea', + id : 'metaKeywords', + label : lang.metaKeywords, + setup : setupMeta( 'keywords' ), + commit : commitMeta( 'keywords' ) + }, + { + type : 'textarea', + id : 'metaDescription', + label : lang.metaDescription, + setup : setupMeta( 'description' ), + commit : commitMeta( 'description' ) + }, + { + type : 'text', + id : 'metaAuthor', + label : lang.metaAuthor, + setup : setupMeta( 'author' ), + commit : commitMeta( 'author' ) + }, + { + type : 'text', + id : 'metaCopyright', + label : lang.metaCopyright, + setup : setupMeta( 'copyright' ), + commit : commitMeta( 'copyright' ) + } + ] + }, + { + id : 'preview', + label : langCommon.preview, + elements : [ + { + type : 'html', + id : 'previewHtml', + html : '<iframe src="' + previewSrc + '" style="width: 100%; height: 310px" hidefocus="true" frameborder="0" ' + + 'id="cke_docProps_preview_iframe"></iframe>', + onLoad : function() + { + this.getDialog().on( 'selectPage', function( ev ) + { + if ( ev.data.page == 'preview' ) + { + var self = this; + setTimeout( function() + { + var doc = CKEDITOR.document.getById( 'cke_docProps_preview_iframe' ).getFrameDocument(), + html = doc.getElementsByTag( 'html' ).getItem( 0 ), + head = doc.getHead(), + body = doc.getBody(); + self.commitContent( doc, html, head, body, 1 ); + }, 50 ); + } + }); + CKEDITOR.document.getById( 'cke_docProps_preview_iframe' ).getAscendant( 'table' ).setStyle( 'height', '100%' ); + } + } + ] + } + ] + }; +}); diff --git a/_source/plugins/docprops/plugin.js b/_source/plugins/docprops/plugin.js new file mode 100644 index 0000000..d905bdf --- /dev/null +++ b/_source/plugins/docprops/plugin.js @@ -0,0 +1,22 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'docprops', +{ + init : function( editor ) + { + var cmd = new CKEDITOR.dialogCommand( 'docProps' ); + // Only applicable on full page mode. + cmd.modes = { wysiwyg : editor.config.fullPage }; + editor.addCommand( 'docProps', cmd ); + CKEDITOR.dialog.add( 'docProps', this.path + 'dialogs/docprops.js' ); + + editor.ui.addButton( 'DocProps', + { + label : editor.lang.docprops.label, + command : 'docProps' + }); + } +}); diff --git a/_source/plugins/domiterator/plugin.js b/_source/plugins/domiterator/plugin.js new file mode 100644 index 0000000..5c092bb --- /dev/null +++ b/_source/plugins/domiterator/plugin.js @@ -0,0 +1,361 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file DOM iterator, which iterates over list items, lines and paragraphs. + */ + +CKEDITOR.plugins.add( 'domiterator' ); + +(function() +{ + /** + * @name CKEDITOR.dom.iterator + */ + function iterator( range ) + { + if ( arguments.length < 1 ) + return; + + this.range = range; + this.forceBrBreak = 0; + + // Whether include <br>s into the enlarged range.(#3730). + this.enlargeBr = 1; + this.enforceRealBlocks = 0; + + this._ || ( this._ = {} ); + } + + var beginWhitespaceRegex = /^[\r\n\t ]+$/, + // Ignore bookmark nodes.(#3783) + bookmarkGuard = CKEDITOR.dom.walker.bookmark( false, true ), + whitespacesGuard = CKEDITOR.dom.walker.whitespaces( true ), + skipGuard = function( node ) { return bookmarkGuard( node ) && whitespacesGuard( node ); }; + + // Get a reference for the next element, bookmark nodes are skipped. + function getNextSourceNode( node, startFromSibling, lastNode ) + { + var next = node.getNextSourceNode( startFromSibling, null, lastNode ); + while ( !bookmarkGuard( next ) ) + next = next.getNextSourceNode( startFromSibling, null, lastNode ); + return next; + } + + iterator.prototype = { + getNextParagraph : function( blockTag ) + { + // The block element to be returned. + var block; + + // The range object used to identify the paragraph contents. + var range; + + // Indicats that the current element in the loop is the last one. + var isLast; + + // Indicate at least one of the range boundaries is inside a preformat block. + var touchPre; + + // Instructs to cleanup remaining BRs. + var removePreviousBr, removeLastBr; + + // This is the first iteration. Let's initialize it. + if ( !this._.lastNode ) + { + range = this.range.clone(); + + // Shrink the range to exclude harmful "noises" (#4087, #4450, #5435). + range.shrink( CKEDITOR.NODE_ELEMENT, true ); + + touchPre = range.endContainer.hasAscendant( 'pre', true ) + || range.startContainer.hasAscendant( 'pre', true ); + + range.enlarge( this.forceBrBreak && !touchPre || !this.enlargeBr ? + CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS ); + + var walker = new CKEDITOR.dom.walker( range ), + ignoreBookmarkTextEvaluator = CKEDITOR.dom.walker.bookmark( true, true ); + // Avoid anchor inside bookmark inner text. + walker.evaluator = ignoreBookmarkTextEvaluator; + this._.nextNode = walker.next(); + // TODO: It's better to have walker.reset() used here. + walker = new CKEDITOR.dom.walker( range ); + walker.evaluator = ignoreBookmarkTextEvaluator; + var lastNode = walker.previous(); + this._.lastNode = lastNode.getNextSourceNode( true ); + + // We may have an empty text node at the end of block due to [3770]. + // If that node is the lastNode, it would cause our logic to leak to the + // next block.(#3887) + if ( this._.lastNode && + this._.lastNode.type == CKEDITOR.NODE_TEXT && + !CKEDITOR.tools.trim( this._.lastNode.getText() ) && + this._.lastNode.getParent().isBlockBoundary() ) + { + var testRange = new CKEDITOR.dom.range( range.document ); + testRange.moveToPosition( this._.lastNode, CKEDITOR.POSITION_AFTER_END ); + if ( testRange.checkEndOfBlock() ) + { + var path = new CKEDITOR.dom.elementPath( testRange.endContainer ); + var lastBlock = path.block || path.blockLimit; + this._.lastNode = lastBlock.getNextSourceNode( true ); + } + } + + // Probably the document end is reached, we need a marker node. + if ( !this._.lastNode ) + { + this._.lastNode = this._.docEndMarker = range.document.createText( '' ); + this._.lastNode.insertAfter( lastNode ); + } + + // Let's reuse this variable. + range = null; + } + + var currentNode = this._.nextNode; + lastNode = this._.lastNode; + + this._.nextNode = null; + while ( currentNode ) + { + // closeRange indicates that a paragraph boundary has been found, + // so the range can be closed. + var closeRange = 0, + parentPre = currentNode.hasAscendant( 'pre' ); + + // includeNode indicates that the current node is good to be part + // of the range. By default, any non-element node is ok for it. + var includeNode = ( currentNode.type != CKEDITOR.NODE_ELEMENT ), + continueFromSibling = 0; + + // If it is an element node, let's check if it can be part of the + // range. + if ( !includeNode ) + { + var nodeName = currentNode.getName(); + + if ( currentNode.isBlockBoundary( this.forceBrBreak && + !parentPre && { br : 1 } ) ) + { + // <br> boundaries must be part of the range. It will + // happen only if ForceBrBreak. + if ( nodeName == 'br' ) + includeNode = 1; + else if ( !range && !currentNode.getChildCount() && nodeName != 'hr' ) + { + // If we have found an empty block, and haven't started + // the range yet, it means we must return this block. + block = currentNode; + isLast = currentNode.equals( lastNode ); + break; + } + + // The range must finish right before the boundary, + // including possibly skipped empty spaces. (#1603) + if ( range ) + { + range.setEndAt( currentNode, CKEDITOR.POSITION_BEFORE_START ); + + // The found boundary must be set as the next one at this + // point. (#1717) + if ( nodeName != 'br' ) + this._.nextNode = currentNode; + } + + closeRange = 1; + } + else + { + // If we have child nodes, let's check them. + if ( currentNode.getFirst() ) + { + // If we don't have a range yet, let's start it. + if ( !range ) + { + range = new CKEDITOR.dom.range( this.range.document ); + range.setStartAt( currentNode, CKEDITOR.POSITION_BEFORE_START ); + } + + currentNode = currentNode.getFirst(); + continue; + } + includeNode = 1; + } + } + else if ( currentNode.type == CKEDITOR.NODE_TEXT ) + { + // Ignore normal whitespaces (i.e. not including or + // other unicode whitespaces) before/after a block node. + if ( beginWhitespaceRegex.test( currentNode.getText() ) ) + includeNode = 0; + } + + // The current node is good to be part of the range and we are + // starting a new range, initialize it first. + if ( includeNode && !range ) + { + range = new CKEDITOR.dom.range( this.range.document ); + range.setStartAt( currentNode, CKEDITOR.POSITION_BEFORE_START ); + } + + // The last node has been found. + isLast = ( ( !closeRange || includeNode ) && currentNode.equals( lastNode ) ); + + // If we are in an element boundary, let's check if it is time + // to close the range, otherwise we include the parent within it. + if ( range && !closeRange ) + { + while ( !currentNode.getNext( skipGuard ) && !isLast ) + { + var parentNode = currentNode.getParent(); + + if ( parentNode.isBlockBoundary( this.forceBrBreak + && !parentPre && { br : 1 } ) ) + { + closeRange = 1; + includeNode = 0; + isLast = isLast || ( parentNode.equals( lastNode) ); + // Make sure range includes bookmarks at the end of the block. (#7359) + range.setEndAt( parentNode, CKEDITOR.POSITION_BEFORE_END ); + break; + } + + currentNode = parentNode; + includeNode = 1; + isLast = ( currentNode.equals( lastNode ) ); + continueFromSibling = 1; + } + } + + // Now finally include the node. + if ( includeNode ) + range.setEndAt( currentNode, CKEDITOR.POSITION_AFTER_END ); + + currentNode = getNextSourceNode ( currentNode, continueFromSibling, lastNode ); + isLast = !currentNode; + + // We have found a block boundary. Let's close the range and move out of the + // loop. + if ( isLast || ( closeRange && range ) ) + break; + } + + // Now, based on the processed range, look for (or create) the block to be returned. + if ( !block ) + { + // If no range has been found, this is the end. + if ( !range ) + { + this._.docEndMarker && this._.docEndMarker.remove(); + this._.nextNode = null; + return null; + } + + var startPath = new CKEDITOR.dom.elementPath( range.startContainer ); + var startBlockLimit = startPath.blockLimit, + checkLimits = { div : 1, th : 1, td : 1 }; + block = startPath.block; + + if ( !block + && !this.enforceRealBlocks + && checkLimits[ startBlockLimit.getName() ] + && range.checkStartOfBlock() + && range.checkEndOfBlock() ) + block = startBlockLimit; + else if ( !block || ( this.enforceRealBlocks && block.getName() == 'li' ) ) + { + // Create the fixed block. + block = this.range.document.createElement( blockTag || 'p' ); + + // Move the contents of the temporary range to the fixed block. + range.extractContents().appendTo( block ); + block.trim(); + + // Insert the fixed block into the DOM. + range.insertNode( block ); + + removePreviousBr = removeLastBr = true; + } + else if ( block.getName() != 'li' ) + { + // If the range doesn't includes the entire contents of the + // block, we must split it, isolating the range in a dedicated + // block. + if ( !range.checkStartOfBlock() || !range.checkEndOfBlock() ) + { + // The resulting block will be a clone of the current one. + block = block.clone( false ); + + // Extract the range contents, moving it to the new block. + range.extractContents().appendTo( block ); + block.trim(); + + // Split the block. At this point, the range will be in the + // right position for our intents. + var splitInfo = range.splitBlock(); + + removePreviousBr = !splitInfo.wasStartOfBlock; + removeLastBr = !splitInfo.wasEndOfBlock; + + // Insert the new block into the DOM. + range.insertNode( block ); + } + } + else if ( !isLast ) + { + // LIs are returned as is, with all their children (due to the + // nested lists). But, the next node is the node right after + // the current range, which could be an <li> child (nested + // lists) or the next sibling <li>. + + this._.nextNode = ( block.equals( lastNode ) ? null : getNextSourceNode( range.getBoundaryNodes().endNode, 1, lastNode ) ); + } + } + + if ( removePreviousBr ) + { + var previousSibling = block.getPrevious(); + if ( previousSibling && previousSibling.type == CKEDITOR.NODE_ELEMENT ) + { + if ( previousSibling.getName() == 'br' ) + previousSibling.remove(); + else if ( previousSibling.getLast() && previousSibling.getLast().$.nodeName.toLowerCase() == 'br' ) + previousSibling.getLast().remove(); + } + } + + if ( removeLastBr ) + { + var lastChild = block.getLast(); + if ( lastChild && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.getName() == 'br' ) + { + // Take care not to remove the block expanding <br> in non-IE browsers. + if ( CKEDITOR.env.ie + || lastChild.getPrevious( bookmarkGuard ) + || lastChild.getNext( bookmarkGuard ) ) + lastChild.remove(); + } + } + + // Get a reference for the next element. This is important because the + // above block can be removed or changed, so we can rely on it for the + // next interation. + if ( !this._.nextNode ) + { + this._.nextNode = ( isLast || block.equals( lastNode ) ) ? null : + getNextSourceNode( block, 1, lastNode ); + } + + return block; + } + }; + + CKEDITOR.dom.range.prototype.createIterator = function() + { + return new iterator( this ); + }; +})(); diff --git a/_source/plugins/editingblock/plugin.js b/_source/plugins/editingblock/plugin.js new file mode 100644 index 0000000..7d7742f --- /dev/null +++ b/_source/plugins/editingblock/plugin.js @@ -0,0 +1,275 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The default editing block plugin, which holds the editing area + * and source view. + */ + +(function() +{ + // This is a semaphore used to avoid recursive calls between + // the following data handling functions. + var isHandlingData; + + CKEDITOR.plugins.add( 'editingblock', + { + init : function( editor ) + { + if ( !editor.config.editingBlock ) + return; + + editor.on( 'themeSpace', function( event ) + { + if ( event.data.space == 'contents' ) + event.data.html += '<br>'; + }); + + editor.on( 'themeLoaded', function() + { + editor.fireOnce( 'editingBlockReady' ); + }); + + editor.on( 'uiReady', function() + { + editor.setMode( editor.config.startupMode ); + }); + + editor.on( 'afterSetData', function() + { + if ( !isHandlingData ) + { + function setData() + { + isHandlingData = true; + editor.getMode().loadData( editor.getData() ); + isHandlingData = false; + } + + if ( editor.mode ) + setData(); + else + { + editor.on( 'mode', function() + { + if ( editor.mode ) + { + setData(); + editor.removeListener( 'mode', arguments.callee ); + } + }); + } + } + }); + + editor.on( 'beforeGetData', function() + { + if ( !isHandlingData && editor.mode ) + { + isHandlingData = true; + editor.setData( editor.getMode().getData(), null, 1 ); + isHandlingData = false; + } + }); + + editor.on( 'getSnapshot', function( event ) + { + if ( editor.mode ) + event.data = editor.getMode().getSnapshotData(); + }); + + editor.on( 'loadSnapshot', function( event ) + { + if ( editor.mode ) + editor.getMode().loadSnapshotData( event.data ); + }); + + // For the first "mode" call, we'll also fire the "instanceReady" + // event. + editor.on( 'mode', function( event ) + { + // Do that once only. + event.removeListener(); + + // Redirect the focus into editor for webkit. (#5713) + CKEDITOR.env.webkit && editor.container.on( 'focus', function() + { + editor.focus(); + }); + + if ( editor.config.startupFocus ) + editor.focus(); + + // Fire instanceReady for both the editor and CKEDITOR, but + // defer this until the whole execution has completed + // to guarantee the editor is fully responsible. + setTimeout( function(){ + editor.fireOnce( 'instanceReady' ); + CKEDITOR.fire( 'instanceReady', null, editor ); + }, 0 ); + }); + + editor.on( 'destroy', function () + { + // -> currentMode.unload( holderElement ); + if ( this.mode ) + this._.modes[ this.mode ].unload( this.getThemeSpace( 'contents' ) ); + }); + } + }); + + /** + * The current editing mode. An editing mode is basically a viewport for + * editing or content viewing. By default the possible values for this + * property are "wysiwyg" and "source". + * @type String + * @example + * alert( CKEDITOR.instances.editor1.mode ); // "wysiwyg" (e.g.) + */ + CKEDITOR.editor.prototype.mode = ''; + + /** + * Registers an editing mode. This function is to be used mainly by plugins. + * @param {String} mode The mode name. + * @param {Object} modeEditor The mode editor definition. + * @example + */ + CKEDITOR.editor.prototype.addMode = function( mode, modeEditor ) + { + modeEditor.name = mode; + ( this._.modes || ( this._.modes = {} ) )[ mode ] = modeEditor; + }; + + /** + * Sets the current editing mode in this editor instance. + * @param {String} mode A registered mode name. + * @example + * // Switch to "source" view. + * CKEDITOR.instances.editor1.setMode( 'source' ); + */ + CKEDITOR.editor.prototype.setMode = function( mode ) + { + this.fire( 'beforeSetMode', { newMode : mode } ); + + var data, + holderElement = this.getThemeSpace( 'contents' ), + isDirty = this.checkDirty(); + + // Unload the previous mode. + if ( this.mode ) + { + if ( mode == this.mode ) + return; + + this.fire( 'beforeModeUnload' ); + + var currentMode = this.getMode(); + data = currentMode.getData(); + currentMode.unload( holderElement ); + this.mode = ''; + } + + holderElement.setHtml( '' ); + + // Load required mode. + var modeEditor = this.getMode( mode ); + if ( !modeEditor ) + throw '[CKEDITOR.editor.setMode] Unknown mode "' + mode + '".'; + + if ( !isDirty ) + { + this.on( 'mode', function() + { + this.resetDirty(); + this.removeListener( 'mode', arguments.callee ); + }); + } + + modeEditor.load( holderElement, ( typeof data ) != 'string' ? this.getData() : data); + }; + + /** + * Gets the current or any of the objects that represent the editing + * area modes. The two most common editing modes are "wysiwyg" and "source". + * @param {String} [mode] The mode to be retrieved. If not specified, the + * current one is returned. + */ + CKEDITOR.editor.prototype.getMode = function( mode ) + { + return this._.modes && this._.modes[ mode || this.mode ]; + }; + + /** + * Moves the selection focus to the editing are space in the editor. + */ + CKEDITOR.editor.prototype.focus = function() + { + this.forceNextSelectionCheck(); + var mode = this.getMode(); + if ( mode ) + mode.focus(); + }; +})(); + +/** + * The mode to load at the editor startup. It depends on the plugins + * loaded. By default, the "wysiwyg" and "source" modes are available. + * @type String + * @default 'wysiwyg' + * @example + * config.startupMode = 'source'; + */ +CKEDITOR.config.startupMode = 'wysiwyg'; + +/** + * Sets whether the editor should have the focus when the page loads. + * @name CKEDITOR.config.startupFocus + * @type Boolean + * @default false + * @example + * config.startupFocus = true; + */ + +/** + * Whether to render or not the editing block area in the editor interface. + * @type Boolean + * @default true + * @example + * config.editingBlock = false; + */ +CKEDITOR.config.editingBlock = true; + +/** + * Fired when a CKEDITOR instance is created, fully initialized and ready for interaction. + * @name CKEDITOR#instanceReady + * @event + * @param {CKEDITOR.editor} editor The editor instance that has been created. + */ + +/** + * Fired when the CKEDITOR instance is created, fully initialized and ready for interaction. + * @name CKEDITOR.editor#instanceReady + * @event + */ + +/** + * Fired before changing the editing mode. See also CKEDITOR.editor#beforeSetMode and CKEDITOR.editor#mode + * @name CKEDITOR.editor#beforeModeUnload + * @event + */ + + /** + * Fired before the editor mode is set. See also CKEDITOR.editor#mode and CKEDITOR.editor#beforeModeUnload + * @name CKEDITOR.editor#beforeSetMode + * @event + * @since 3.5.3 + * @param {String} newMode The name of the mode which is about to be set. + */ + +/** + * Fired after setting the editing mode. See also CKEDITOR.editor#beforeSetMode and CKEDITOR.editor#beforeModeUnload + * @name CKEDITOR.editor#mode + * @event + */ diff --git a/_source/plugins/elementspath/plugin.js b/_source/plugins/elementspath/plugin.js new file mode 100644 index 0000000..814e107 --- /dev/null +++ b/_source/plugins/elementspath/plugin.js @@ -0,0 +1,218 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "elementspath" plugin. It shows all elements in the DOM + * parent tree relative to the current selection in the editing area. + */ + +(function() +{ + var commands = + { + toolbarFocus : + { + editorFocus : false, + readOnly : 1, + exec : function( editor ) + { + var idBase = editor._.elementsPath.idBase; + var element = CKEDITOR.document.getById( idBase + '0' ); + + // Make the first button focus accessible for IE. (#3417) + // Adobe AIR instead need while of delay. + element && element.focus( CKEDITOR.env.ie || CKEDITOR.env.air ); + } + } + }; + + var emptyHtml = '<span class="cke_empty"> </span>'; + + CKEDITOR.plugins.add( 'elementspath', + { + requires : [ 'selection' ], + + init : function( editor ) + { + var spaceId = 'cke_path_' + editor.name; + var spaceElement; + var getSpaceElement = function() + { + if ( !spaceElement ) + spaceElement = CKEDITOR.document.getById( spaceId ); + return spaceElement; + }; + + var idBase = 'cke_elementspath_' + CKEDITOR.tools.getNextNumber() + '_'; + + editor._.elementsPath = { idBase : idBase, filters : [] }; + + editor.on( 'themeSpace', function( event ) + { + if ( event.data.space == 'bottom' ) + { + event.data.html += + '<span id="' + spaceId + '_label" class="cke_voice_label">' + editor.lang.elementsPath.eleLabel + '</span>' + + '<div id="' + spaceId + '" class="cke_path" role="group" aria-labelledby="' + spaceId + '_label">' + emptyHtml + '</div>'; + } + }); + + function onClick( elementIndex ) + { + editor.focus(); + var element = editor._.elementsPath.list[ elementIndex ]; + if ( element.is( 'body' ) ) + { + var range = new CKEDITOR.dom.range( editor.document ); + range.selectNodeContents( element ); + range.select(); + } + else + editor.getSelection().selectElement( element ); + } + + var onClickHanlder = CKEDITOR.tools.addFunction( onClick ); + + var onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev ) + { + var idBase = editor._.elementsPath.idBase, + element; + + ev = new CKEDITOR.dom.event( ev ); + + var rtl = editor.lang.dir == 'rtl'; + switch ( ev.getKeystroke() ) + { + case rtl ? 39 : 37 : // LEFT-ARROW + case 9 : // TAB + element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) ); + if ( !element ) + element = CKEDITOR.document.getById( idBase + '0' ); + element.focus(); + return false; + + case rtl ? 37 : 39 : // RIGHT-ARROW + case CKEDITOR.SHIFT + 9 : // SHIFT + TAB + element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) ); + if ( !element ) + element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) ); + element.focus(); + return false; + + case 27 : // ESC + editor.focus(); + return false; + + case 13 : // ENTER // Opera + case 32 : // SPACE + onClick( elementIndex ); + return false; + } + return true; + }); + + editor.on( 'selectionChange', function( ev ) + { + var env = CKEDITOR.env, + selection = ev.data.selection, + element = selection.getStartElement(), + html = [], + editor = ev.editor, + elementsList = editor._.elementsPath.list = [], + filters = editor._.elementsPath.filters; + + while ( element ) + { + var ignore = 0, + name; + + if ( element.data( 'cke-display-name' ) ) + name = element.data( 'cke-display-name' ); + else if ( element.data( 'cke-real-element-type' ) ) + name = element.data( 'cke-real-element-type' ); + else + name = element.getName(); + + for ( var i = 0; i < filters.length; i++ ) + { + var ret = filters[ i ]( element, name ); + if ( ret === false ) + { + ignore = 1; + break; + } + name = ret || name; + } + + if ( !ignore ) + { + var index = elementsList.push( element ) - 1; + + // Use this variable to add conditional stuff to the + // HTML (because we are doing it in reverse order... unshift). + var extra = ''; + + // Some browsers don't cancel key events in the keydown but in the + // keypress. + // TODO: Check if really needed for Gecko+Mac. + if ( env.opera || ( env.gecko && env.mac ) ) + extra += ' onkeypress="return false;"'; + + // With Firefox, we need to force the button to redraw, otherwise it + // will remain in the focus state. + if ( env.gecko ) + extra += ' onblur="this.style.cssText = this.style.cssText;"'; + + var label = editor.lang.elementsPath.eleTitle.replace( /%1/, name ); + html.unshift( + '<a' + + ' id="', idBase, index, '"' + + ' href="javascript:void(\'', name, '\')"' + + ' tabindex="-1"' + + ' title="', label, '"' + + ( ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) ? + ' onfocus="event.preventBubble();"' : '' ) + + ' hidefocus="true" ' + + ' onkeydown="return CKEDITOR.tools.callFunction(', onKeyDownHandler, ',', index, ', event );"' + + extra , + ' onclick="CKEDITOR.tools.callFunction('+ onClickHanlder, ',', index, '); return false;"', + ' role="button" aria-labelledby="' + idBase + index + '_label">', + name, + '<span id="', idBase, index, '_label" class="cke_label">' + label + '</span>', + '</a>' ); + + } + + if ( name == 'body' ) + break; + + element = element.getParent(); + } + + var space = getSpaceElement(); + space.setHtml( html.join('') + emptyHtml ); + editor.fire( 'elementsPathUpdate', { space : space } ); + }); + + function empty() + { + spaceElement && spaceElement.setHtml( emptyHtml ); + delete editor._.elementsPath.list; + } + + editor.on( 'readOnly', empty ); + editor.on( 'contentDomUnload', empty ); + + editor.addCommand( 'elementsPathFocus', commands.toolbarFocus ); + } + }); +})(); + +/** + * Fired when the contents of the elementsPath are changed + * @name CKEDITOR.editor#elementsPathUpdate + * @event + * @param {Object} eventData.space The elementsPath container + */ diff --git a/_source/plugins/enterkey/plugin.js b/_source/plugins/enterkey/plugin.js new file mode 100644 index 0000000..59a4f82 --- /dev/null +++ b/_source/plugins/enterkey/plugin.js @@ -0,0 +1,413 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + CKEDITOR.plugins.add( 'enterkey', + { + requires : [ 'keystrokes', 'indent' ], + + init : function( editor ) + { + editor.addCommand( 'enter', { + modes : { wysiwyg:1 }, + editorFocus : false, + exec : function( editor ){ enter( editor ); } + }); + + editor.addCommand( 'shiftEnter', { + modes : { wysiwyg:1 }, + editorFocus : false, + exec : function( editor ){ shiftEnter( editor ); } + }); + + var keystrokes = editor.keystrokeHandler.keystrokes; + keystrokes[ 13 ] = 'enter'; + keystrokes[ CKEDITOR.SHIFT + 13 ] = 'shiftEnter'; + } + }); + + CKEDITOR.plugins.enterkey = + { + enterBlock : function( editor, mode, range, forceMode ) + { + // Get the range for the current selection. + range = range || getRange( editor ); + + // We may not have valid ranges to work on, like when inside a + // contenteditable=false element. + if ( !range ) + return; + + var doc = range.document; + + var atBlockStart = range.checkStartOfBlock(), + atBlockEnd = range.checkEndOfBlock(), + path = new CKEDITOR.dom.elementPath( range.startContainer ), + block = path.block; + + // Exit the list when we're inside an empty list item block. (#5376) + if ( atBlockStart && atBlockEnd ) + { + if ( block && ( block.is( 'li' ) || block.getParent().is( 'li' ) ) ) + { + editor.execCommand( 'outdent' ); + return; + } + } + // Don't split <pre> if we're in the middle of it, act as shift enter key. + else if ( block && block.is( 'pre' ) ) + { + if ( !atBlockEnd ) + { + enterBr( editor, mode, range, forceMode ); + return; + } + } + // Don't split caption blocks. (#7944) + else if ( block && CKEDITOR.dtd.$captionBlock[ block.getName() ] ) + { + enterBr( editor, mode, range, forceMode ); + return; + } + + // Determine the block element to be used. + var blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ); + + // Split the range. + var splitInfo = range.splitBlock( blockTag ); + + if ( !splitInfo ) + return; + + // Get the current blocks. + var previousBlock = splitInfo.previousBlock, + nextBlock = splitInfo.nextBlock; + + var isStartOfBlock = splitInfo.wasStartOfBlock, + isEndOfBlock = splitInfo.wasEndOfBlock; + + var node; + + // If this is a block under a list item, split it as well. (#1647) + if ( nextBlock ) + { + node = nextBlock.getParent(); + if ( node.is( 'li' ) ) + { + nextBlock.breakParent( node ); + nextBlock.move( nextBlock.getNext(), 1 ); + } + } + else if ( previousBlock && ( node = previousBlock.getParent() ) && node.is( 'li' ) ) + { + previousBlock.breakParent( node ); + node = previousBlock.getNext(); + range.moveToElementEditStart( node ); + previousBlock.move( previousBlock.getPrevious() ); + } + + // If we have both the previous and next blocks, it means that the + // boundaries were on separated blocks, or none of them where on the + // block limits (start/end). + if ( !isStartOfBlock && !isEndOfBlock ) + { + // If the next block is an <li> with another list tree as the first + // child, we'll need to append a filler (<br>/NBSP) or the list item + // wouldn't be editable. (#1420) + if ( nextBlock.is( 'li' ) + && ( node = nextBlock.getFirst( CKEDITOR.dom.walker.invisible( true ) ) ) + && node.is && node.is( 'ul', 'ol' ) ) + ( CKEDITOR.env.ie ? doc.createText( '\xa0' ) : doc.createElement( 'br' ) ).insertBefore( node ); + + // Move the selection to the end block. + if ( nextBlock ) + range.moveToElementEditStart( nextBlock ); + } + else + { + var newBlock, + newBlockDir; + + if ( previousBlock ) + { + // Do not enter this block if it's a header tag, or we are in + // a Shift+Enter (#77). Create a new block element instead + // (later in the code). + if ( previousBlock.is( 'li' ) || + ! ( headerTagRegex.test( previousBlock.getName() ) || previousBlock.is( 'pre' ) ) ) + { + // Otherwise, duplicate the previous block. + newBlock = previousBlock.clone(); + } + } + else if ( nextBlock ) + newBlock = nextBlock.clone(); + + if ( !newBlock ) + { + // We have already created a new list item. (#6849) + if ( node && node.is( 'li' ) ) + newBlock = node; + else + { + newBlock = doc.createElement( blockTag ); + if ( previousBlock && ( newBlockDir = previousBlock.getDirection() ) ) + newBlock.setAttribute( 'dir', newBlockDir ); + } + } + // Force the enter block unless we're talking of a list item. + else if ( forceMode && !newBlock.is( 'li' ) ) + newBlock.renameNode( blockTag ); + + // Recreate the inline elements tree, which was available + // before hitting enter, so the same styles will be available in + // the new block. + var elementPath = splitInfo.elementPath; + if ( elementPath ) + { + for ( var i = 0, len = elementPath.elements.length ; i < len ; i++ ) + { + var element = elementPath.elements[ i ]; + + if ( element.equals( elementPath.block ) || element.equals( elementPath.blockLimit ) ) + break; + + if ( CKEDITOR.dtd.$removeEmpty[ element.getName() ] ) + { + element = element.clone(); + newBlock.moveChildren( element ); + newBlock.append( element ); + } + } + } + + if ( !CKEDITOR.env.ie ) + newBlock.appendBogus(); + + if ( !newBlock.getParent() ) + range.insertNode( newBlock ); + + // list item start number should not be duplicated (#7330), but we need + // to remove the attribute after it's onto the DOM tree because of old IEs (#7581). + newBlock.is( 'li' ) && newBlock.removeAttribute( 'value' ); + + // This is tricky, but to make the new block visible correctly + // we must select it. + // The previousBlock check has been included because it may be + // empty if we have fixed a block-less space (like ENTER into an + // empty table cell). + if ( CKEDITOR.env.ie && isStartOfBlock && ( !isEndOfBlock || !previousBlock.getChildCount() ) ) + { + // Move the selection to the new block. + range.moveToElementEditStart( isEndOfBlock ? previousBlock : newBlock ); + range.select(); + } + + // Move the selection to the new block. + range.moveToElementEditStart( isStartOfBlock && !isEndOfBlock ? nextBlock : newBlock ); + } + + if ( !CKEDITOR.env.ie ) + { + if ( nextBlock ) + { + // If we have split the block, adds a temporary span at the + // range position and scroll relatively to it. + var tmpNode = doc.createElement( 'span' ); + + // We need some content for Safari. + tmpNode.setHtml( ' ' ); + + range.insertNode( tmpNode ); + tmpNode.scrollIntoView(); + range.deleteContents(); + } + else + { + // We may use the above scroll logic for the new block case + // too, but it gives some weird result with Opera. + newBlock.scrollIntoView(); + } + } + + range.select(); + }, + + enterBr : function( editor, mode, range, forceMode ) + { + // Get the range for the current selection. + range = range || getRange( editor ); + + // We may not have valid ranges to work on, like when inside a + // contenteditable=false element. + if ( !range ) + return; + + var doc = range.document; + + // Determine the block element to be used. + var blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ); + + var isEndOfBlock = range.checkEndOfBlock(); + + var elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() ); + + var startBlock = elementPath.block, + startBlockTag = startBlock && elementPath.block.getName(); + + var isPre = false; + + if ( !forceMode && startBlockTag == 'li' ) + { + enterBlock( editor, mode, range, forceMode ); + return; + } + + // If we are at the end of a header block. + if ( !forceMode && isEndOfBlock && headerTagRegex.test( startBlockTag ) ) + { + var newBlock, + newBlockDir; + + if ( ( newBlockDir = startBlock.getDirection() ) ) + { + newBlock = doc.createElement( 'div' ); + newBlock.setAttribute( 'dir', newBlockDir ); + newBlock.insertAfter( startBlock ); + range.setStart( newBlock, 0 ); + } + else + { + // Insert a <br> after the current paragraph. + doc.createElement( 'br' ).insertAfter( startBlock ); + + // A text node is required by Gecko only to make the cursor blink. + if ( CKEDITOR.env.gecko ) + doc.createText( '' ).insertAfter( startBlock ); + + // IE has different behaviors regarding position. + range.setStartAt( startBlock.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START ); + } + } + else + { + var lineBreak; + + isPre = ( startBlockTag == 'pre' ); + + // Gecko prefers <br> as line-break inside <pre> (#4711). + if ( isPre && !CKEDITOR.env.gecko ) + lineBreak = doc.createText( CKEDITOR.env.ie ? '\r' : '\n' ); + else + lineBreak = doc.createElement( 'br' ); + + range.deleteContents(); + range.insertNode( lineBreak ); + + // IE has different behavior regarding position. + if ( CKEDITOR.env.ie ) + range.setStartAt( lineBreak, CKEDITOR.POSITION_AFTER_END ); + else + { + // A text node is required by Gecko only to make the cursor blink. + // We need some text inside of it, so the bogus <br> is properly + // created. + doc.createText( '\ufeff' ).insertAfter( lineBreak ); + + // If we are at the end of a block, we must be sure the bogus node is available in that block. + if ( isEndOfBlock ) + lineBreak.getParent().appendBogus(); + + // Now we can remove the text node contents, so the caret doesn't + // stop on it. + lineBreak.getNext().$.nodeValue = ''; + + range.setStartAt( lineBreak.getNext(), CKEDITOR.POSITION_AFTER_START ); + + // Scroll into view, for non IE. + var dummy = null; + + // BR is not positioned in Opera and Webkit. + if ( !CKEDITOR.env.gecko ) + { + dummy = doc.createElement( 'span' ); + // We need have some contents for Webkit to position it + // under parent node. ( #3681) + dummy.setHtml(' '); + } + else + dummy = doc.createElement( 'br' ); + + dummy.insertBefore( lineBreak.getNext() ); + dummy.scrollIntoView(); + dummy.remove(); + } + } + + // This collapse guarantees the cursor will be blinking. + range.collapse( true ); + + range.select( isPre ); + } + }; + + var plugin = CKEDITOR.plugins.enterkey, + enterBr = plugin.enterBr, + enterBlock = plugin.enterBlock, + headerTagRegex = /^h[1-6]$/; + + function shiftEnter( editor ) + { + // Only effective within document. + if ( editor.mode != 'wysiwyg' ) + return false; + + // On SHIFT+ENTER: + // 1. We want to enforce the mode to be respected, instead + // of cloning the current block. (#77) + return enter( editor, editor.config.shiftEnterMode, 1 ); + } + + function enter( editor, mode, forceMode ) + { + forceMode = editor.config.forceEnterMode || forceMode; + + // Only effective within document. + if ( editor.mode != 'wysiwyg' ) + return false; + + if ( !mode ) + mode = editor.config.enterMode; + + // Use setTimout so the keys get cancelled immediatelly. + setTimeout( function() + { + editor.fire( 'saveSnapshot' ); // Save undo step. + if ( mode == CKEDITOR.ENTER_BR ) + enterBr( editor, mode, null, forceMode ); + else + enterBlock( editor, mode, null, forceMode ); + + }, 0 ); + + return true; + } + + function getRange( editor ) + { + // Get the selection ranges. + var ranges = editor.getSelection().getRanges( true ); + + // Delete the contents of all ranges except the first one. + for ( var i = ranges.length - 1 ; i > 0 ; i-- ) + { + ranges[ i ].deleteContents(); + } + + // Return the first range. + return ranges[ 0 ]; + } +})(); diff --git a/_source/plugins/entities/plugin.js b/_source/plugins/entities/plugin.js new file mode 100644 index 0000000..8dac27f --- /dev/null +++ b/_source/plugins/entities/plugin.js @@ -0,0 +1,250 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + // Base HTML entities. + var htmlbase = 'nbsp,gt,lt,amp'; + + var entities = + // Latin-1 Entities + 'quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' + + 'not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,' + + 'cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,' + + + // Symbols + 'fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,' + + 'alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,' + + 'forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,' + + 'radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,' + + 'equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,' + + 'rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,' + + + // Other Special Characters + 'circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,' + + 'rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,' + + 'euro'; + + // Latin Letters Entities + var latin = + 'Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,' + + 'Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,' + + 'Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,' + + 'agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,' + + 'ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,' + + 'otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,' + + 'OElig,oelig,Scaron,scaron,Yuml'; + + // Greek Letters Entities. + var greek = + 'Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,' + + 'Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,' + + 'beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,' + + 'omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,' + + 'upsih,piv'; + + /** + * Create a mapping table between one character and it's entity form from a list of entity names. + * @param reverse {Boolean} Whether create a reverse map from the entity string form to actual character. + */ + function buildTable( entities, reverse ) + { + var table = {}, + regex = []; + + // Entities that the browsers DOM don't transform to the final char + // automatically. + var specialTable = + { + nbsp : '\u00A0', // IE | FF + shy : '\u00AD', // IE + gt : '\u003E', // IE | FF | -- | Opera + lt : '\u003C', // IE | FF | Safari | Opera + amp : '\u0026' // ALL + }; + + entities = entities.replace( /\b(nbsp|shy|gt|lt|amp)(?:,|$)/g, function( match, entity ) + { + var org = reverse ? '&' + entity + ';' : specialTable[ entity ], + result = reverse ? specialTable[ entity ] : '&' + entity + ';'; + + table[ org ] = result; + regex.push( org ); + return ''; + }); + + if ( !reverse && entities ) + { + // Transforms the entities string into an array. + entities = entities.split( ',' ); + + // Put all entities inside a DOM element, transforming them to their + // final chars. + var div = document.createElement( 'div' ), + chars; + div.innerHTML = '&' + entities.join( ';&' ) + ';'; + chars = div.innerHTML; + div = null; + + // Add all chars to the table. + for ( var i = 0 ; i < chars.length ; i++ ) + { + var charAt = chars.charAt( i ); + table[ charAt ] = '&' + entities[ i ] + ';'; + regex.push( charAt ); + } + } + + table.regex = regex.join( reverse ? '|' : '' ); + + return table; + } + + CKEDITOR.plugins.add( 'entities', + { + afterInit : function( editor ) + { + var config = editor.config; + + var dataProcessor = editor.dataProcessor, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( htmlFilter ) + { + // Mandatory HTML base entities. + var selectedEntities = ''; + + if ( config.basicEntities !== false ) + selectedEntities += htmlbase; + + if ( config.entities ) + { + selectedEntities += ',' + entities; + if ( config.entities_latin ) + selectedEntities += ',' + latin; + + if ( config.entities_greek ) + selectedEntities += ',' + greek; + + if ( config.entities_additional ) + selectedEntities += ',' + config.entities_additional; + } + + var entitiesTable = buildTable( selectedEntities ); + + // Create the Regex used to find entities in the text, leave it matches nothing if entities are empty. + var entitiesRegex = entitiesTable.regex ? '[' + entitiesTable.regex + ']' : 'a^'; + delete entitiesTable.regex; + + if ( config.entities && config.entities_processNumerical ) + entitiesRegex = '[^ -~]|' + entitiesRegex ; + + entitiesRegex = new RegExp( entitiesRegex, 'g' ); + + function getEntity( character ) + { + return config.entities_processNumerical == 'force' || !entitiesTable[ character ] ? + '&#' + character.charCodeAt(0) + ';' + : entitiesTable[ character ]; + } + + // Decode entities that the browsers has transformed + // at first place. + var baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ) , true ), + baseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' ); + + function getChar( character ) + { + return baseEntitiesTable[ character ]; + } + + htmlFilter.addRules( + { + text : function( text ) + { + return text.replace( baseEntitiesRegex, getChar ) + .replace( entitiesRegex, getEntity ); + } + }); + } + } + }); +})(); + +/** + * Whether to escape HTML preserved entities in text, including: + * <ul> + * <li>nbsp</li> + * <li>gt</li> + * <li>lt</li> + * <li>amp</li> + * </ul> + * <strong>Note:</strong> It should not be subjected to change unless you're outputting non-HTML data format like BBCode. + * @type Boolean + * @default true + * @example + * config.basicEntities = false; + */ +CKEDITOR.config.basicEntities = true; + +/** + * Whether to use HTML entities in the output. + * @name CKEDITOR.config.entities + * @type Boolean + * @default true + * @example + * config.entities = false; + */ +CKEDITOR.config.entities = true; + +/** + * Whether to convert some Latin characters (Latin alphabet No. 1, ISO 8859-1) + * to HTML entities. The list of entities can be found at the + * <a href="http://www.w3.org/TR/html4/sgml/entities.html#h-24.2.1">W3C HTML 4.01 Specification, section 24.2.1</a>. + * @name CKEDITOR.config.entities_latin + * @type Boolean + * @default true + * @example + * config.entities_latin = false; + */ +CKEDITOR.config.entities_latin = true; + +/** + * Whether to convert some symbols, mathematical symbols, and Greek letters to + * HTML entities. This may be more relevant for users typing text written in Greek. + * The list of entities can be found at the + * <a href="http://www.w3.org/TR/html4/sgml/entities.html#h-24.3.1">W3C HTML 4.01 Specification, section 24.3.1</a>. + * @name CKEDITOR.config.entities_greek + * @type Boolean + * @default true + * @example + * config.entities_greek = false; + */ +CKEDITOR.config.entities_greek = true; + +/** + * Whether to convert all remaining characters, not comprised in the ASCII + * character table, to their relative decimal numeric representation of HTML entity. + * When specified as the value 'force', it will simply convert all entities into the above form. + * For example, the phrase "This is Chinese: 汉语." is outputted + * as "This is Chinese: &#27721;&#35821;." + * @name CKEDITOR.config.entities_processNumerical + * @type Boolean|String + * @default false + * @example + * config.entities_processNumerical = true; + * config.entities_processNumerical = 'force'; //Convert from " " into " "; + */ + +/** + * An additional list of entities to be used. It's a string containing each + * entry separated by a comma. Entities names or number must be used, exclusing + * the "&" preffix and the ";" termination. + * @name CKEDITOR.config.entities_additional + * @default '#39' // The single quote (') character. + * @type String + * @example + */ +CKEDITOR.config.entities_additional = '#39'; diff --git a/_source/plugins/fakeobjects/plugin.js b/_source/plugins/fakeobjects/plugin.js new file mode 100644 index 0000000..d4ebce5 --- /dev/null +++ b/_source/plugins/fakeobjects/plugin.js @@ -0,0 +1,175 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var cssStyle = CKEDITOR.htmlParser.cssStyle, + cssLength = CKEDITOR.tools.cssLength; + + var cssLengthRegex = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i; + + /* + * Replacing the former CSS length value with the later one, with + * adjustment to the length unit. + */ + function replaceCssLength( length1, length2 ) + { + var parts1 = cssLengthRegex.exec( length1 ), + parts2 = cssLengthRegex.exec( length2 ); + + // Omit pixel length unit when necessary, + // e.g. replaceCssLength( 10, '20px' ) -> 20 + if ( parts1 ) + { + if ( !parts1[ 2 ] && parts2[ 2 ] == 'px' ) + return parts2[ 1 ]; + if ( parts1[ 2 ] == 'px' && !parts2[ 2 ] ) + return parts2[ 1 ] + 'px'; + } + + return length2; + } + + var htmlFilterRules = + { + elements : + { + $ : function( element ) + { + var attributes = element.attributes, + realHtml = attributes && attributes[ 'data-cke-realelement' ], + realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ), + realElement = realFragment && realFragment.children[ 0 ]; + + // Width/height in the fake object are subjected to clone into the real element. + if ( realElement && element.attributes[ 'data-cke-resizable' ] ) + { + var styles = new cssStyle( element ).rules, + realAttrs = realElement.attributes, + width = styles.width, + height = styles.height; + + width && ( realAttrs.width = replaceCssLength( realAttrs.width, width ) ); + height && ( realAttrs.height = replaceCssLength( realAttrs.height, height ) ); + } + + return realElement; + } + } + }; + + CKEDITOR.plugins.add( 'fakeobjects', + { + requires : [ 'htmlwriter' ], + + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( htmlFilter ) + htmlFilter.addRules( htmlFilterRules ); + } + }); + + CKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable ) + { + var lang = this.lang.fakeobjects, + label = lang[ realElementType ] || lang.unknown; + + var attributes = + { + 'class' : className, + src : CKEDITOR.getUrl( 'images/spacer.gif' ), + 'data-cke-realelement' : encodeURIComponent( realElement.getOuterHtml() ), + 'data-cke-real-node-type' : realElement.type, + alt : label, + title : label, + align : realElement.getAttribute( 'align' ) || '' + }; + + if ( realElementType ) + attributes[ 'data-cke-real-element-type' ] = realElementType; + + if ( isResizable ) + { + attributes[ 'data-cke-resizable' ] = isResizable; + + var fakeStyle = new cssStyle(); + + var width = realElement.getAttribute( 'width' ), + height = realElement.getAttribute( 'height' ); + + width && ( fakeStyle.rules.width = cssLength( width ) ); + height && ( fakeStyle.rules.height = cssLength( height ) ); + fakeStyle.populate( attributes ); + } + + return this.document.createElement( 'img', { attributes : attributes } ); + }; + + CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable ) + { + var lang = this.lang.fakeobjects, + label = lang[ realElementType ] || lang.unknown, + html; + + var writer = new CKEDITOR.htmlParser.basicWriter(); + realElement.writeHtml( writer ); + html = writer.getHtml(); + + var attributes = + { + 'class' : className, + src : CKEDITOR.getUrl( 'images/spacer.gif' ), + 'data-cke-realelement' : encodeURIComponent( html ), + 'data-cke-real-node-type' : realElement.type, + alt : label, + title : label, + align : realElement.attributes.align || '' + }; + + if ( realElementType ) + attributes[ 'data-cke-real-element-type' ] = realElementType; + + if ( isResizable ) + { + attributes[ 'data-cke-resizable' ] = isResizable; + var realAttrs = realElement.attributes, + fakeStyle = new cssStyle(); + + var width = realAttrs.width, + height = realAttrs.height; + + width != undefined && ( fakeStyle.rules.width = cssLength( width ) ); + height != undefined && ( fakeStyle.rules.height = cssLength ( height ) ); + fakeStyle.populate( attributes ); + } + + return new CKEDITOR.htmlParser.element( 'img', attributes ); + }; + + CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement ) + { + if ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT ) + return null; + + var element = CKEDITOR.dom.element.createFromHtml( + decodeURIComponent( fakeElement.data( 'cke-realelement' ) ), + this.document ); + + if ( fakeElement.data( 'cke-resizable') ) + { + var width = fakeElement.getStyle( 'width' ), + height = fakeElement.getStyle( 'height' ); + + width && element.setAttribute( 'width', replaceCssLength( element.getAttribute( 'width' ), width ) ); + height && element.setAttribute( 'height', replaceCssLength( element.getAttribute( 'height' ), height ) ); + } + + return element; + }; + +})(); diff --git a/_source/plugins/filebrowser/plugin.js b/_source/plugins/filebrowser/plugin.js new file mode 100644 index 0000000..799d68f --- /dev/null +++ b/_source/plugins/filebrowser/plugin.js @@ -0,0 +1,524 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "filebrowser" plugin, it adds support for file uploads and + * browsing. + * + * When file is selected inside of the file browser or uploaded, its url is + * inserted automatically to a field, which is described in the 'filebrowser' + * attribute. To specify field that should be updated, pass the tab id and + * element id, separated with a colon. + * + * Example 1: (Browse) + * + * <pre> + * { + * type : 'button', + * id : 'browse', + * filebrowser : 'tabId:elementId', + * label : editor.lang.common.browseServer + * } + * </pre> + * + * If you set the 'filebrowser' attribute on any element other than + * 'fileButton', the 'Browse' action will be triggered. + * + * Example 2: (Quick Upload) + * + * <pre> + * { + * type : 'fileButton', + * id : 'uploadButton', + * filebrowser : 'tabId:elementId', + * label : editor.lang.common.uploadSubmit, + * 'for' : [ 'upload', 'upload' ] + * } + * </pre> + * + * If you set the 'filebrowser' attribute on a fileButton element, the + * 'QuickUpload' action will be executed. + * + * Filebrowser plugin also supports more advanced configuration (through + * javascript object). + * + * The following settings are supported: + * + * <pre> + * [action] - Browse or QuickUpload + * [target] - field to update, tabId:elementId + * [params] - additional arguments to be passed to the server connector (optional) + * [onSelect] - function to execute when file is selected/uploaded (optional) + * [url] - the URL to be called (optional) + * </pre> + * + * Example 3: (Quick Upload) + * + * <pre> + * { + * type : 'fileButton', + * label : editor.lang.common.uploadSubmit, + * id : 'buttonId', + * filebrowser : + * { + * action : 'QuickUpload', //required + * target : 'tab1:elementId', //required + * params : //optional + * { + * type : 'Files', + * currentFolder : '/folder/' + * }, + * onSelect : function( fileUrl, errorMessage ) //optional + * { + * // Do not call the built-in selectFuntion + * // return false; + * } + * }, + * 'for' : [ 'tab1', 'myFile' ] + * } + * </pre> + * + * Suppose we have a file element with id 'myFile', text field with id + * 'elementId' and a fileButton. If filebowser.url is not specified explicitly, + * form action will be set to 'filebrowser[DialogName]UploadUrl' or, if not + * specified, to 'filebrowserUploadUrl'. Additional parameters from 'params' + * object will be added to the query string. It is possible to create your own + * uploadHandler and cancel the built-in updateTargetElement command. + * + * Example 4: (Browse) + * + * <pre> + * { + * type : 'button', + * id : 'buttonId', + * label : editor.lang.common.browseServer, + * filebrowser : + * { + * action : 'Browse', + * url : '/ckfinder/ckfinder.html&type=Images', + * target : 'tab1:elementId' + * } + * } + * </pre> + * + * In this example, after pressing a button, file browser will be opened in a + * popup. If we don't specify filebrowser.url attribute, + * 'filebrowser[DialogName]BrowseUrl' or 'filebrowserBrowseUrl' will be used. + * After selecting a file in a file browser, an element with id 'elementId' will + * be updated. Just like in the third example, a custom 'onSelect' function may be + * defined. + */ +( function() +{ + /* + * Adds (additional) arguments to given url. + * + * @param {String} + * url The url. + * @param {Object} + * params Additional parameters. + */ + function addQueryString( url, params ) + { + var queryString = []; + + if ( !params ) + return url; + else + { + for ( var i in params ) + queryString.push( i + "=" + encodeURIComponent( params[ i ] ) ); + } + + return url + ( ( url.indexOf( "?" ) != -1 ) ? "&" : "?" ) + queryString.join( "&" ); + } + + /* + * Make a string's first character uppercase. + * + * @param {String} + * str String. + */ + function ucFirst( str ) + { + str += ''; + var f = str.charAt( 0 ).toUpperCase(); + return f + str.substr( 1 ); + } + + /* + * The onlick function assigned to the 'Browse Server' button. Opens the + * file browser and updates target field when file is selected. + * + * @param {CKEDITOR.event} + * evt The event object. + */ + function browseServer( evt ) + { + var dialog = this.getDialog(); + var editor = dialog.getParentEditor(); + + editor._.filebrowserSe = this; + + var width = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowWidth' ] + || editor.config.filebrowserWindowWidth || '80%'; + var height = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowHeight' ] + || editor.config.filebrowserWindowHeight || '70%'; + + var params = this.filebrowser.params || {}; + params.CKEditor = editor.name; + params.CKEditorFuncNum = editor._.filebrowserFn; + if ( !params.langCode ) + params.langCode = editor.langCode; + + var url = addQueryString( this.filebrowser.url, params ); + editor.popup( url, width, height, editor.config.fileBrowserWindowFeatures ); + } + + /* + * The onlick function assigned to the 'Upload' button. Makes the final + * decision whether form is really submitted and updates target field when + * file is uploaded. + * + * @param {CKEDITOR.event} + * evt The event object. + */ + function uploadFile( evt ) + { + var dialog = this.getDialog(); + var editor = dialog.getParentEditor(); + + editor._.filebrowserSe = this; + + // If user didn't select the file, stop the upload. + if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement().$.value ) + return false; + + if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getAction() ) + return false; + + return true; + } + + /* + * Setups the file element. + * + * @param {CKEDITOR.ui.dialog.file} + * fileInput The file element used during file upload. + * @param {Object} + * filebrowser Object containing filebrowser settings assigned to + * the fileButton associated with this file element. + */ + function setupFileElement( editor, fileInput, filebrowser ) + { + var params = filebrowser.params || {}; + params.CKEditor = editor.name; + params.CKEditorFuncNum = editor._.filebrowserFn; + if ( !params.langCode ) + params.langCode = editor.langCode; + + fileInput.action = addQueryString( filebrowser.url, params ); + fileInput.filebrowser = filebrowser; + } + + /* + * Traverse through the content definition and attach filebrowser to + * elements with 'filebrowser' attribute. + * + * @param String + * dialogName Dialog name. + * @param {CKEDITOR.dialog.definitionObject} + * definition Dialog definition. + * @param {Array} + * elements Array of {@link CKEDITOR.dialog.definition.content} + * objects. + */ + function attachFileBrowser( editor, dialogName, definition, elements ) + { + var element, fileInput; + + for ( var i in elements ) + { + element = elements[ i ]; + + if ( element.type == 'hbox' || element.type == 'vbox' ) + attachFileBrowser( editor, dialogName, definition, element.children ); + + if ( !element.filebrowser ) + continue; + + if ( typeof element.filebrowser == 'string' ) + { + var fb = + { + action : ( element.type == 'fileButton' ) ? 'QuickUpload' : 'Browse', + target : element.filebrowser + }; + element.filebrowser = fb; + } + + if ( element.filebrowser.action == 'Browse' ) + { + var url = element.filebrowser.url; + if ( url === undefined ) + { + url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'BrowseUrl' ]; + if ( url === undefined ) + url = editor.config.filebrowserBrowseUrl; + } + + if ( url ) + { + element.onClick = browseServer; + element.filebrowser.url = url; + element.hidden = false; + } + } + else if ( element.filebrowser.action == 'QuickUpload' && element[ 'for' ] ) + { + url = element.filebrowser.url; + if ( url === undefined ) + { + url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'UploadUrl' ]; + if ( url === undefined ) + url = editor.config.filebrowserUploadUrl; + } + + if ( url ) + { + var onClick = element.onClick; + element.onClick = function( evt ) + { + // "element" here means the definition object, so we need to find the correct + // button to scope the event call + var sender = evt.sender; + if ( onClick && onClick.call( sender, evt ) === false ) + return false; + + return uploadFile.call( sender, evt ); + }; + + element.filebrowser.url = url; + element.hidden = false; + setupFileElement( editor, definition.getContents( element[ 'for' ][ 0 ] ).get( element[ 'for' ][ 1 ] ), element.filebrowser ); + } + } + } + } + + /* + * Updates the target element with the url of uploaded/selected file. + * + * @param {String} + * url The url of a file. + */ + function updateTargetElement( url, sourceElement ) + { + var dialog = sourceElement.getDialog(); + var targetElement = sourceElement.filebrowser.target || null; + url = url.replace( /#/g, '%23' ); + + // If there is a reference to targetElement, update it. + if ( targetElement ) + { + var target = targetElement.split( ':' ); + var element = dialog.getContentElement( target[ 0 ], target[ 1 ] ); + if ( element ) + { + element.setValue( url ); + dialog.selectPage( target[ 0 ] ); + } + } + } + + /* + * Returns true if filebrowser is configured in one of the elements. + * + * @param {CKEDITOR.dialog.definitionObject} + * definition Dialog definition. + * @param String + * tabId The tab id where element(s) can be found. + * @param String + * elementId The element id (or ids, separated with a semicolon) to check. + */ + function isConfigured( definition, tabId, elementId ) + { + if ( elementId.indexOf( ";" ) !== -1 ) + { + var ids = elementId.split( ";" ); + for ( var i = 0 ; i < ids.length ; i++ ) + { + if ( isConfigured( definition, tabId, ids[i] ) ) + return true; + } + return false; + } + + var elementFileBrowser = definition.getContents( tabId ).get( elementId ).filebrowser; + return ( elementFileBrowser && elementFileBrowser.url ); + } + + function setUrl( fileUrl, data ) + { + var dialog = this._.filebrowserSe.getDialog(), + targetInput = this._.filebrowserSe[ 'for' ], + onSelect = this._.filebrowserSe.filebrowser.onSelect; + + if ( targetInput ) + dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).reset(); + + if ( typeof data == 'function' && data.call( this._.filebrowserSe ) === false ) + return; + + if ( onSelect && onSelect.call( this._.filebrowserSe, fileUrl, data ) === false ) + return; + + // The "data" argument may be used to pass the error message to the editor. + if ( typeof data == 'string' && data ) + alert( data ); + + if ( fileUrl ) + updateTargetElement( fileUrl, this._.filebrowserSe ); + } + + CKEDITOR.plugins.add( 'filebrowser', + { + init : function( editor, pluginPath ) + { + editor._.filebrowserFn = CKEDITOR.tools.addFunction( setUrl, editor ); + editor.on( 'destroy', function () { CKEDITOR.tools.removeFunction( this._.filebrowserFn ); } ); + } + } ); + + CKEDITOR.on( 'dialogDefinition', function( evt ) + { + var definition = evt.data.definition, + element; + // Associate filebrowser to elements with 'filebrowser' attribute. + for ( var i in definition.contents ) + { + if ( ( element = definition.contents[ i ] ) ) + { + attachFileBrowser( evt.editor, evt.data.name, definition, element.elements ); + if ( element.hidden && element.filebrowser ) + { + element.hidden = !isConfigured( definition, element[ 'id' ], element.filebrowser ); + } + } + } + } ); + +} )(); + +/** + * The location of an external file browser, that should be launched when "Browse Server" button is pressed. + * If configured, the "Browse Server" button will appear in Link, Image and Flash dialogs. + * @see The <a href="http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)">File Browser/Uploader</a> documentation. + * @name CKEDITOR.config.filebrowserBrowseUrl + * @since 3.0 + * @type String + * @default '' (empty string = disabled) + * @example + * config.filebrowserBrowseUrl = '/browser/browse.php'; + */ + +/** + * The location of a script that handles file uploads. + * If set, the "Upload" tab will appear in "Link", "Image" and "Flash" dialogs. + * @name CKEDITOR.config.filebrowserUploadUrl + * @see The <a href="http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)">File Browser/Uploader</a> documentation. + * @since 3.0 + * @type String + * @default '' (empty string = disabled) + * @example + * config.filebrowserUploadUrl = '/uploader/upload.php'; + */ + +/** + * The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Image dialog. + * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserBrowseUrl}. + * @name CKEDITOR.config.filebrowserImageBrowseUrl + * @since 3.0 + * @type String + * @default '' (empty string = disabled) + * @example + * config.filebrowserImageBrowseUrl = '/browser/browse.php?type=Images'; + */ + +/** + * The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Flash dialog. + * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserBrowseUrl}. + * @name CKEDITOR.config.filebrowserFlashBrowseUrl + * @since 3.0 + * @type String + * @default '' (empty string = disabled) + * @example + * config.filebrowserFlashBrowseUrl = '/browser/browse.php?type=Flash'; + */ + +/** + * The location of a script that handles file uploads in the Image dialog. + * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserUploadUrl}. + * @name CKEDITOR.config.filebrowserImageUploadUrl + * @since 3.0 + * @type String + * @default '' (empty string = disabled) + * @example + * config.filebrowserImageUploadUrl = '/uploader/upload.php?type=Images'; + */ + +/** + * The location of a script that handles file uploads in the Flash dialog. + * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserUploadUrl}. + * @name CKEDITOR.config.filebrowserFlashUploadUrl + * @since 3.0 + * @type String + * @default '' (empty string = disabled) + * @example + * config.filebrowserFlashUploadUrl = '/uploader/upload.php?type=Flash'; + */ + +/** + * The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Link tab of Image dialog. + * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserBrowseUrl}. + * @name CKEDITOR.config.filebrowserImageBrowseLinkUrl + * @since 3.2 + * @type String + * @default '' (empty string = disabled) + * @example + * config.filebrowserImageBrowseLinkUrl = '/browser/browse.php'; + */ + +/** + * The "features" to use in the file browser popup window. + * @name CKEDITOR.config.filebrowserWindowFeatures + * @since 3.4.1 + * @type String + * @default 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes' + * @example + * config.filebrowserWindowFeatures = 'resizable=yes,scrollbars=no'; + */ + +/** + * The width of the file browser popup window. It can be a number or a percent string. + * @name CKEDITOR.config.filebrowserWindowWidth + * @type Number|String + * @default '80%' + * @example + * config.filebrowserWindowWidth = 750; + * @example + * config.filebrowserWindowWidth = '50%'; + */ + +/** + * The height of the file browser popup window. It can be a number or a percent string. + * @name CKEDITOR.config.filebrowserWindowHeight + * @type Number|String + * @default '70%' + * @example + * config.filebrowserWindowHeight = 580; + * @example + * config.filebrowserWindowHeight = '50%'; + */ diff --git a/_source/plugins/find/dialogs/find.js b/_source/plugins/find/dialogs/find.js new file mode 100644 index 0000000..6711fe5 --- /dev/null +++ b/_source/plugins/find/dialogs/find.js @@ -0,0 +1,903 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var isReplace; + + function findEvaluator( node ) + { + return node.type == CKEDITOR.NODE_TEXT && node.getLength() > 0 && ( !isReplace || !node.isReadOnly() ); + } + + /** + * Elements which break characters been considered as sequence. + */ + function nonCharactersBoundary( node ) + { + return !( node.type == CKEDITOR.NODE_ELEMENT && node.isBlockBoundary( + CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$empty, CKEDITOR.dtd.$nonEditable ) ) ); + } + + /** + * Get the cursor object which represent both current character and it's dom + * position thing. + */ + var cursorStep = function() + { + return { + textNode : this.textNode, + offset : this.offset, + character : this.textNode ? + this.textNode.getText().charAt( this.offset ) : null, + hitMatchBoundary : this._.matchBoundary + }; + }; + + var pages = [ 'find', 'replace' ], + fieldsMapping = [ + [ 'txtFindFind', 'txtFindReplace' ], + [ 'txtFindCaseChk', 'txtReplaceCaseChk' ], + [ 'txtFindWordChk', 'txtReplaceWordChk' ], + [ 'txtFindCyclic', 'txtReplaceCyclic' ] ]; + + /** + * Synchronize corresponding filed values between 'replace' and 'find' pages. + * @param {String} currentPageId The page id which receive values. + */ + function syncFieldsBetweenTabs( currentPageId ) + { + var sourceIndex, targetIndex, + sourceField, targetField; + + sourceIndex = currentPageId === 'find' ? 1 : 0; + targetIndex = 1 - sourceIndex; + var i, l = fieldsMapping.length; + for ( i = 0 ; i < l ; i++ ) + { + sourceField = this.getContentElement( pages[ sourceIndex ], + fieldsMapping[ i ][ sourceIndex ] ); + targetField = this.getContentElement( pages[ targetIndex ], + fieldsMapping[ i ][ targetIndex ] ); + + targetField.setValue( sourceField.getValue() ); + } + } + + var findDialog = function( editor, startupPage ) + { + // Style object for highlights: (#5018) + // 1. Defined as full match style to avoid compromising ordinary text color styles. + // 2. Must be apply onto inner-most text to avoid conflicting with ordinary text color styles visually. + var highlightStyle = new CKEDITOR.style( CKEDITOR.tools.extend( { fullMatch : true, childRule : function(){ return 0; } }, + editor.config.find_highlight ) ); + + /** + * Iterator which walk through the specified range char by char. By + * default the walking will not stop at the character boundaries, until + * the end of the range is encountered. + * @param { CKEDITOR.dom.range } range + * @param {Boolean} matchWord Whether the walking will stop at character boundary. + */ + var characterWalker = function( range , matchWord ) + { + var self = this; + var walker = + new CKEDITOR.dom.walker( range ); + walker.guard = matchWord ? nonCharactersBoundary : function( node ) + { + !nonCharactersBoundary( node ) && ( self._.matchBoundary = true ); + }; + walker[ 'evaluator' ] = findEvaluator; + walker.breakOnFalse = 1; + + if ( range.startContainer.type == CKEDITOR.NODE_TEXT ) + { + this.textNode = range.startContainer; + this.offset = range.startOffset - 1; + } + + this._ = { + matchWord : matchWord, + walker : walker, + matchBoundary : false + }; + }; + + characterWalker.prototype = { + next : function() + { + return this.move(); + }, + + back : function() + { + return this.move( true ); + }, + + move : function( rtl ) + { + var currentTextNode = this.textNode; + // Already at the end of document, no more character available. + if ( currentTextNode === null ) + return cursorStep.call( this ); + + this._.matchBoundary = false; + + // There are more characters in the text node, step forward. + if ( currentTextNode + && rtl + && this.offset > 0 ) + { + this.offset--; + return cursorStep.call( this ); + } + else if ( currentTextNode + && this.offset < currentTextNode.getLength() - 1 ) + { + this.offset++; + return cursorStep.call( this ); + } + else + { + currentTextNode = null; + // At the end of the text node, walking foward for the next. + while ( !currentTextNode ) + { + currentTextNode = + this._.walker[ rtl ? 'previous' : 'next' ].call( this._.walker ); + + // Stop searching if we're need full word match OR + // already reach document end. + if ( this._.matchWord && !currentTextNode + || this._.walker._.end ) + break; + } + // Found a fresh text node. + this.textNode = currentTextNode; + if ( currentTextNode ) + this.offset = rtl ? currentTextNode.getLength() - 1 : 0; + else + this.offset = 0; + } + + return cursorStep.call( this ); + } + + }; + + /** + * A range of cursors which represent a trunk of characters which try to + * match, it has the same length as the pattern string. + */ + var characterRange = function( characterWalker, rangeLength ) + { + this._ = { + walker : characterWalker, + cursors : [], + rangeLength : rangeLength, + highlightRange : null, + isMatched : 0 + }; + }; + + characterRange.prototype = { + /** + * Translate this range to {@link CKEDITOR.dom.range} + */ + toDomRange : function() + { + var range = new CKEDITOR.dom.range( editor.document ); + var cursors = this._.cursors; + if ( cursors.length < 1 ) + { + var textNode = this._.walker.textNode; + if ( textNode ) + range.setStartAfter( textNode ); + else + return null; + } + else + { + var first = cursors[0], + last = cursors[ cursors.length - 1 ]; + + range.setStart( first.textNode, first.offset ); + range.setEnd( last.textNode, last.offset + 1 ); + } + + return range; + }, + /** + * Reflect the latest changes from dom range. + */ + updateFromDomRange : function( domRange ) + { + var cursor, + walker = new characterWalker( domRange ); + this._.cursors = []; + do + { + cursor = walker.next(); + if ( cursor.character ) + this._.cursors.push( cursor ); + } + while ( cursor.character ); + this._.rangeLength = this._.cursors.length; + }, + + setMatched : function() + { + this._.isMatched = true; + }, + + clearMatched : function() + { + this._.isMatched = false; + }, + + isMatched : function() + { + return this._.isMatched; + }, + + /** + * Hightlight the current matched chunk of text. + */ + highlight : function() + { + // Do not apply if nothing is found. + if ( this._.cursors.length < 1 ) + return; + + // Remove the previous highlight if there's one. + if ( this._.highlightRange ) + this.removeHighlight(); + + // Apply the highlight. + var range = this.toDomRange(), + bookmark = range.createBookmark(); + highlightStyle.applyToRange( range ); + range.moveToBookmark( bookmark ); + this._.highlightRange = range; + + // Scroll the editor to the highlighted area. + var element = range.startContainer; + if ( element.type != CKEDITOR.NODE_ELEMENT ) + element = element.getParent(); + element.scrollIntoView(); + + // Update the character cursors. + this.updateFromDomRange( range ); + }, + + /** + * Remove highlighted find result. + */ + removeHighlight : function() + { + if ( !this._.highlightRange ) + return; + + var bookmark = this._.highlightRange.createBookmark(); + highlightStyle.removeFromRange( this._.highlightRange ); + this._.highlightRange.moveToBookmark( bookmark ); + this.updateFromDomRange( this._.highlightRange ); + this._.highlightRange = null; + }, + + isReadOnly : function() + { + if ( !this._.highlightRange ) + return 0; + + return this._.highlightRange.startContainer.isReadOnly(); + }, + + moveBack : function() + { + var retval = this._.walker.back(), + cursors = this._.cursors; + + if ( retval.hitMatchBoundary ) + this._.cursors = cursors = []; + + cursors.unshift( retval ); + if ( cursors.length > this._.rangeLength ) + cursors.pop(); + + return retval; + }, + + moveNext : function() + { + var retval = this._.walker.next(), + cursors = this._.cursors; + + // Clear the cursors queue if we've crossed a match boundary. + if ( retval.hitMatchBoundary ) + this._.cursors = cursors = []; + + cursors.push( retval ); + if ( cursors.length > this._.rangeLength ) + cursors.shift(); + + return retval; + }, + + getEndCharacter : function() + { + var cursors = this._.cursors; + if ( cursors.length < 1 ) + return null; + + return cursors[ cursors.length - 1 ].character; + }, + + getNextCharacterRange : function( maxLength ) + { + var lastCursor, + nextRangeWalker, + cursors = this._.cursors; + + if ( ( lastCursor = cursors[ cursors.length - 1 ] ) && lastCursor.textNode ) + nextRangeWalker = new characterWalker( getRangeAfterCursor( lastCursor ) ); + // In case it's an empty range (no cursors), figure out next range from walker (#4951). + else + nextRangeWalker = this._.walker; + + return new characterRange( nextRangeWalker, maxLength ); + }, + + getCursors : function() + { + return this._.cursors; + } + }; + + + // The remaining document range after the character cursor. + function getRangeAfterCursor( cursor , inclusive ) + { + var range = new CKEDITOR.dom.range(); + range.setStart( cursor.textNode, + ( inclusive ? cursor.offset : cursor.offset + 1 ) ); + range.setEndAt( editor.document.getBody(), + CKEDITOR.POSITION_BEFORE_END ); + return range; + } + + // The document range before the character cursor. + function getRangeBeforeCursor( cursor ) + { + var range = new CKEDITOR.dom.range(); + range.setStartAt( editor.document.getBody(), + CKEDITOR.POSITION_AFTER_START ); + range.setEnd( cursor.textNode, cursor.offset ); + return range; + } + + var KMP_NOMATCH = 0, + KMP_ADVANCED = 1, + KMP_MATCHED = 2; + /** + * Examination the occurrence of a word which implement KMP algorithm. + */ + var kmpMatcher = function( pattern, ignoreCase ) + { + var overlap = [ -1 ]; + if ( ignoreCase ) + pattern = pattern.toLowerCase(); + for ( var i = 0 ; i < pattern.length ; i++ ) + { + overlap.push( overlap[i] + 1 ); + while ( overlap[ i + 1 ] > 0 + && pattern.charAt( i ) != pattern + .charAt( overlap[ i + 1 ] - 1 ) ) + overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1; + } + + this._ = { + overlap : overlap, + state : 0, + ignoreCase : !!ignoreCase, + pattern : pattern + }; + }; + + kmpMatcher.prototype = + { + feedCharacter : function( c ) + { + if ( this._.ignoreCase ) + c = c.toLowerCase(); + + while ( true ) + { + if ( c == this._.pattern.charAt( this._.state ) ) + { + this._.state++; + if ( this._.state == this._.pattern.length ) + { + this._.state = 0; + return KMP_MATCHED; + } + return KMP_ADVANCED; + } + else if ( !this._.state ) + return KMP_NOMATCH; + else + this._.state = this._.overlap[ this._.state ]; + } + + return null; + }, + + reset : function() + { + this._.state = 0; + } + }; + + var wordSeparatorRegex = + /[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/; + + var isWordSeparator = function( c ) + { + if ( !c ) + return true; + var code = c.charCodeAt( 0 ); + return ( code >= 9 && code <= 0xd ) + || ( code >= 0x2000 && code <= 0x200a ) + || wordSeparatorRegex.test( c ); + }; + + var finder = { + searchRange : null, + matchRange : null, + find : function( pattern, matchCase, matchWord, matchCyclic, highlightMatched, cyclicRerun ) + { + if ( !this.matchRange ) + this.matchRange = + new characterRange( + new characterWalker( this.searchRange ), + pattern.length ); + else + { + this.matchRange.removeHighlight(); + this.matchRange = this.matchRange.getNextCharacterRange( pattern.length ); + } + + var matcher = new kmpMatcher( pattern, !matchCase ), + matchState = KMP_NOMATCH, + character = '%'; + + while ( character !== null ) + { + this.matchRange.moveNext(); + while ( ( character = this.matchRange.getEndCharacter() ) ) + { + matchState = matcher.feedCharacter( character ); + if ( matchState == KMP_MATCHED ) + break; + if ( this.matchRange.moveNext().hitMatchBoundary ) + matcher.reset(); + } + + if ( matchState == KMP_MATCHED ) + { + if ( matchWord ) + { + var cursors = this.matchRange.getCursors(), + tail = cursors[ cursors.length - 1 ], + head = cursors[ 0 ]; + + var headWalker = new characterWalker( getRangeBeforeCursor( head ), true ), + tailWalker = new characterWalker( getRangeAfterCursor( tail ), true ); + + if ( ! ( isWordSeparator( headWalker.back().character ) + && isWordSeparator( tailWalker.next().character ) ) ) + continue; + } + this.matchRange.setMatched(); + if ( highlightMatched !== false ) + this.matchRange.highlight(); + return true; + } + } + + this.matchRange.clearMatched(); + this.matchRange.removeHighlight(); + // Clear current session and restart with the default search + // range. + // Re-run the finding once for cyclic.(#3517) + if ( matchCyclic && !cyclicRerun ) + { + this.searchRange = getSearchRange( 1 ); + this.matchRange = null; + return arguments.callee.apply( this, + Array.prototype.slice.call( arguments ).concat( [ true ] ) ); + } + + return false; + }, + + /** + * Record how much replacement occurred toward one replacing. + */ + replaceCounter : 0, + + replace : function( dialog, pattern, newString, matchCase, matchWord, + matchCyclic , isReplaceAll ) + { + isReplace = 1; + + // Successiveness of current replace/find. + var result = 0; + + // 1. Perform the replace when there's already a match here. + // 2. Otherwise perform the find but don't replace it immediately. + if ( this.matchRange && this.matchRange.isMatched() + && !this.matchRange._.isReplaced && !this.matchRange.isReadOnly() ) + { + // Turn off highlight for a while when saving snapshots. + this.matchRange.removeHighlight(); + var domRange = this.matchRange.toDomRange(); + var text = editor.document.createText( newString ); + if ( !isReplaceAll ) + { + // Save undo snaps before and after the replacement. + var selection = editor.getSelection(); + selection.selectRanges( [ domRange ] ); + editor.fire( 'saveSnapshot' ); + } + domRange.deleteContents(); + domRange.insertNode( text ); + if ( !isReplaceAll ) + { + selection.selectRanges( [ domRange ] ); + editor.fire( 'saveSnapshot' ); + } + this.matchRange.updateFromDomRange( domRange ); + if ( !isReplaceAll ) + this.matchRange.highlight(); + this.matchRange._.isReplaced = true; + this.replaceCounter++; + result = 1; + } + else + result = this.find( pattern, matchCase, matchWord, matchCyclic, !isReplaceAll ); + + isReplace = 0; + + return result; + } + }; + + /** + * The range in which find/replace happened, receive from user + * selection prior. + */ + function getSearchRange( isDefault ) + { + var searchRange, + sel = editor.getSelection(), + body = editor.document.getBody(); + if ( sel && !isDefault ) + { + searchRange = sel.getRanges()[ 0 ].clone(); + searchRange.collapse( true ); + } + else + { + searchRange = new CKEDITOR.dom.range(); + searchRange.setStartAt( body, CKEDITOR.POSITION_AFTER_START ); + } + searchRange.setEndAt( body, CKEDITOR.POSITION_BEFORE_END ); + return searchRange; + } + + var lang = editor.lang.findAndReplace; + return { + title : lang.title, + resizable : CKEDITOR.DIALOG_RESIZE_NONE, + minWidth : 350, + minHeight : 170, + buttons : [ CKEDITOR.dialog.cancelButton ], // Cancel button only. + contents : [ + { + id : 'find', + label : lang.find, + title : lang.find, + accessKey : '', + elements : [ + { + type : 'hbox', + widths : [ '230px', '90px' ], + children : + [ + { + type : 'text', + id : 'txtFindFind', + label : lang.findWhat, + isChanged : false, + labelLayout : 'horizontal', + accessKey : 'F' + }, + { + type : 'button', + id : 'btnFind', + align : 'left', + style : 'width:100%', + label : lang.find, + onClick : function() + { + var dialog = this.getDialog(); + if ( !finder.find( dialog.getValueOf( 'find', 'txtFindFind' ), + dialog.getValueOf( 'find', 'txtFindCaseChk' ), + dialog.getValueOf( 'find', 'txtFindWordChk' ), + dialog.getValueOf( 'find', 'txtFindCyclic' ) ) ) + alert( lang + .notFoundMsg ); + } + } + ] + }, + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'checkbox', + id : 'txtFindCaseChk', + isChanged : false, + style : 'margin-top:28px', + label : lang.matchCase + }, + { + type : 'checkbox', + id : 'txtFindWordChk', + isChanged : false, + label : lang.matchWord + }, + { + type : 'checkbox', + id : 'txtFindCyclic', + isChanged : false, + 'default' : true, + label : lang.matchCyclic + } + ] + } + ] + }, + { + id : 'replace', + label : lang.replace, + accessKey : 'M', + elements : [ + { + type : 'hbox', + widths : [ '230px', '90px' ], + children : + [ + { + type : 'text', + id : 'txtFindReplace', + label : lang.findWhat, + isChanged : false, + labelLayout : 'horizontal', + accessKey : 'F' + }, + { + type : 'button', + id : 'btnFindReplace', + align : 'left', + style : 'width:100%', + label : lang.replace, + onClick : function() + { + var dialog = this.getDialog(); + if ( !finder.replace( dialog, + dialog.getValueOf( 'replace', 'txtFindReplace' ), + dialog.getValueOf( 'replace', 'txtReplace' ), + dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ), + dialog.getValueOf( 'replace', 'txtReplaceWordChk' ), + dialog.getValueOf( 'replace', 'txtReplaceCyclic' ) ) ) + alert( lang + .notFoundMsg ); + } + } + ] + }, + { + type : 'hbox', + widths : [ '230px', '90px' ], + children : + [ + { + type : 'text', + id : 'txtReplace', + label : lang.replaceWith, + isChanged : false, + labelLayout : 'horizontal', + accessKey : 'R' + }, + { + type : 'button', + id : 'btnReplaceAll', + align : 'left', + style : 'width:100%', + label : lang.replaceAll, + isChanged : false, + onClick : function() + { + var dialog = this.getDialog(); + var replaceNums; + + finder.replaceCounter = 0; + + // Scope to full document. + finder.searchRange = getSearchRange( 1 ); + if ( finder.matchRange ) + { + finder.matchRange.removeHighlight(); + finder.matchRange = null; + } + editor.fire( 'saveSnapshot' ); + while ( finder.replace( dialog, + dialog.getValueOf( 'replace', 'txtFindReplace' ), + dialog.getValueOf( 'replace', 'txtReplace' ), + dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ), + dialog.getValueOf( 'replace', 'txtReplaceWordChk' ), + false, true ) ) + { /*jsl:pass*/ } + + if ( finder.replaceCounter ) + { + alert( lang.replaceSuccessMsg.replace( /%1/, finder.replaceCounter ) ); + editor.fire( 'saveSnapshot' ); + } + else + alert( lang.notFoundMsg ); + } + } + ] + }, + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'checkbox', + id : 'txtReplaceCaseChk', + isChanged : false, + label : lang + .matchCase + }, + { + type : 'checkbox', + id : 'txtReplaceWordChk', + isChanged : false, + label : lang + .matchWord + }, + { + type : 'checkbox', + id : 'txtReplaceCyclic', + isChanged : false, + 'default' : true, + label : lang + .matchCyclic + } + ] + } + ] + } + ], + onLoad : function() + { + var dialog = this; + + // Keep track of the current pattern field in use. + var patternField, wholeWordChkField; + + // Ignore initial page select on dialog show + var isUserSelect = 0; + this.on( 'hide', function() + { + isUserSelect = 0; + }); + this.on( 'show', function() + { + isUserSelect = 1; + }); + + this.selectPage = CKEDITOR.tools.override( this.selectPage, function( originalFunc ) + { + return function( pageId ) + { + originalFunc.call( dialog, pageId ); + + var currPage = dialog._.tabs[ pageId ]; + var patternFieldInput, patternFieldId, wholeWordChkFieldId; + patternFieldId = pageId === 'find' ? 'txtFindFind' : 'txtFindReplace'; + wholeWordChkFieldId = pageId === 'find' ? 'txtFindWordChk' : 'txtReplaceWordChk'; + + patternField = dialog.getContentElement( pageId, + patternFieldId ); + wholeWordChkField = dialog.getContentElement( pageId, + wholeWordChkFieldId ); + + // Prepare for check pattern text filed 'keyup' event + if ( !currPage.initialized ) + { + patternFieldInput = CKEDITOR.document + .getById( patternField._.inputId ); + currPage.initialized = true; + } + + // Synchronize fields on tab switch. + if ( isUserSelect ) + syncFieldsBetweenTabs.call( this, pageId ); + }; + } ); + + }, + onShow : function() + { + // Establish initial searching start position. + finder.searchRange = getSearchRange(); + + // Fill in the find field with selected text. + var selectedText = this.getParentEditor().getSelection().getSelectedText(), + patternFieldId = ( startupPage == 'find' ? 'txtFindFind' : 'txtFindReplace' ); + + var field = this.getContentElement( startupPage, patternFieldId ); + field.setValue( selectedText ); + field.select(); + + this.selectPage( startupPage ); + + this[ ( startupPage == 'find' && this._.editor.readOnly? 'hide' : 'show' ) + 'Page' ]( 'replace'); + }, + onHide : function() + { + var range; + if ( finder.matchRange && finder.matchRange.isMatched() ) + { + finder.matchRange.removeHighlight(); + editor.focus(); + + range = finder.matchRange.toDomRange(); + if ( range ) + editor.getSelection().selectRanges( [ range ] ); + } + + // Clear current session before dialog close + delete finder.matchRange; + }, + onFocus : function() + { + if ( startupPage == 'replace' ) + return this.getContentElement( 'replace', 'txtFindReplace' ); + else + return this.getContentElement( 'find', 'txtFindFind' ); + } + }; + }; + + CKEDITOR.dialog.add( 'find', function( editor ) + { + return findDialog( editor, 'find' ); + }); + + CKEDITOR.dialog.add( 'replace', function( editor ) + { + return findDialog( editor, 'replace' ); + }); +})(); diff --git a/_source/plugins/find/plugin.js b/_source/plugins/find/plugin.js new file mode 100644 index 0000000..721fb5e --- /dev/null +++ b/_source/plugins/find/plugin.js @@ -0,0 +1,47 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'find', +{ + init : function( editor ) + { + var forms = CKEDITOR.plugins.find; + editor.ui.addButton( 'Find', + { + label : editor.lang.findAndReplace.find, + command : 'find' + }); + var findCommand = editor.addCommand( 'find', new CKEDITOR.dialogCommand( 'find' ) ); + findCommand.canUndo = false; + findCommand.readOnly = 1; + + editor.ui.addButton( 'Replace', + { + label : editor.lang.findAndReplace.replace, + command : 'replace' + }); + var replaceCommand = editor.addCommand( 'replace', new CKEDITOR.dialogCommand( 'replace' ) ); + replaceCommand.canUndo = false; + + CKEDITOR.dialog.add( 'find', this.path + 'dialogs/find.js' ); + CKEDITOR.dialog.add( 'replace', this.path + 'dialogs/find.js' ); + }, + + requires : [ 'styles' ] +} ); + +/** + * Defines the style to be used to highlight results with the find dialog. + * @type Object + * @default { element : 'span', styles : { 'background-color' : '#004', 'color' : '#fff' } } + * @example + * // Highlight search results with blue on yellow. + * config.find_highlight = + * { + * element : 'span', + * styles : { 'background-color' : '#ff0', 'color' : '#00f' } + * }; + */ +CKEDITOR.config.find_highlight = { element : 'span', styles : { 'background-color' : '#004', 'color' : '#fff' } }; diff --git a/_source/plugins/flash/dialogs/flash.js b/_source/plugins/flash/dialogs/flash.js new file mode 100644 index 0000000..8cdf10e --- /dev/null +++ b/_source/plugins/flash/dialogs/flash.js @@ -0,0 +1,673 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + /* + * It is possible to set things in three different places. + * 1. As attributes in the object tag. + * 2. As param tags under the object tag. + * 3. As attributes in the embed tag. + * It is possible for a single attribute to be present in more than one place. + * So let's define a mapping between a sementic attribute and its syntactic + * equivalents. + * Then we'll set and retrieve attribute values according to the mapping, + * instead of having to check and set each syntactic attribute every time. + * + * Reference: http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_12701 + */ + var ATTRTYPE_OBJECT = 1, + ATTRTYPE_PARAM = 2, + ATTRTYPE_EMBED = 4; + + var attributesMap = + { + id : [ { type : ATTRTYPE_OBJECT, name : 'id' } ], + classid : [ { type : ATTRTYPE_OBJECT, name : 'classid' } ], + codebase : [ { type : ATTRTYPE_OBJECT, name : 'codebase'} ], + pluginspage : [ { type : ATTRTYPE_EMBED, name : 'pluginspage' } ], + src : [ { type : ATTRTYPE_PARAM, name : 'movie' }, { type : ATTRTYPE_EMBED, name : 'src' }, { type : ATTRTYPE_OBJECT, name : 'data' } ], + name : [ { type : ATTRTYPE_EMBED, name : 'name' } ], + align : [ { type : ATTRTYPE_OBJECT, name : 'align' } ], + title : [ { type : ATTRTYPE_OBJECT, name : 'title' }, { type : ATTRTYPE_EMBED, name : 'title' } ], + 'class' : [ { type : ATTRTYPE_OBJECT, name : 'class' }, { type : ATTRTYPE_EMBED, name : 'class'} ], + width : [ { type : ATTRTYPE_OBJECT, name : 'width' }, { type : ATTRTYPE_EMBED, name : 'width' } ], + height : [ { type : ATTRTYPE_OBJECT, name : 'height' }, { type : ATTRTYPE_EMBED, name : 'height' } ], + hSpace : [ { type : ATTRTYPE_OBJECT, name : 'hSpace' }, { type : ATTRTYPE_EMBED, name : 'hSpace' } ], + vSpace : [ { type : ATTRTYPE_OBJECT, name : 'vSpace' }, { type : ATTRTYPE_EMBED, name : 'vSpace' } ], + style : [ { type : ATTRTYPE_OBJECT, name : 'style' }, { type : ATTRTYPE_EMBED, name : 'style' } ], + type : [ { type : ATTRTYPE_EMBED, name : 'type' } ] + }; + + var names = [ 'play', 'loop', 'menu', 'quality', 'scale', 'salign', 'wmode', 'bgcolor', 'base', 'flashvars', 'allowScriptAccess', + 'allowFullScreen' ]; + for ( var i = 0 ; i < names.length ; i++ ) + attributesMap[ names[i] ] = [ { type : ATTRTYPE_EMBED, name : names[i] }, { type : ATTRTYPE_PARAM, name : names[i] } ]; + names = [ 'allowFullScreen', 'play', 'loop', 'menu' ]; + for ( i = 0 ; i < names.length ; i++ ) + attributesMap[ names[i] ][0]['default'] = attributesMap[ names[i] ][1]['default'] = true; + + var defaultToPixel = CKEDITOR.tools.cssLength; + + function loadValue( objectNode, embedNode, paramMap ) + { + var attributes = attributesMap[ this.id ]; + if ( !attributes ) + return; + + var isCheckbox = ( this instanceof CKEDITOR.ui.dialog.checkbox ); + for ( var i = 0 ; i < attributes.length ; i++ ) + { + var attrDef = attributes[ i ]; + switch ( attrDef.type ) + { + case ATTRTYPE_OBJECT: + if ( !objectNode ) + continue; + if ( objectNode.getAttribute( attrDef.name ) !== null ) + { + var value = objectNode.getAttribute( attrDef.name ); + if ( isCheckbox ) + this.setValue( value.toLowerCase() == 'true' ); + else + this.setValue( value ); + return; + } + else if ( isCheckbox ) + this.setValue( !!attrDef[ 'default' ] ); + break; + case ATTRTYPE_PARAM: + if ( !objectNode ) + continue; + if ( attrDef.name in paramMap ) + { + value = paramMap[ attrDef.name ]; + if ( isCheckbox ) + this.setValue( value.toLowerCase() == 'true' ); + else + this.setValue( value ); + return; + } + else if ( isCheckbox ) + this.setValue( !!attrDef[ 'default' ] ); + break; + case ATTRTYPE_EMBED: + if ( !embedNode ) + continue; + if ( embedNode.getAttribute( attrDef.name ) ) + { + value = embedNode.getAttribute( attrDef.name ); + if ( isCheckbox ) + this.setValue( value.toLowerCase() == 'true' ); + else + this.setValue( value ); + return; + } + else if ( isCheckbox ) + this.setValue( !!attrDef[ 'default' ] ); + } + } + } + + function commitValue( objectNode, embedNode, paramMap ) + { + var attributes = attributesMap[ this.id ]; + if ( !attributes ) + return; + + var isRemove = ( this.getValue() === '' ), + isCheckbox = ( this instanceof CKEDITOR.ui.dialog.checkbox ); + + for ( var i = 0 ; i < attributes.length ; i++ ) + { + var attrDef = attributes[i]; + switch ( attrDef.type ) + { + case ATTRTYPE_OBJECT: + // Avoid applying the data attribute when not needed (#7733) + if ( !objectNode || ( attrDef.name == 'data' && embedNode && !objectNode.hasAttribute( 'data' ) ) ) + continue; + var value = this.getValue(); + if ( isRemove || isCheckbox && value === attrDef[ 'default' ] ) + objectNode.removeAttribute( attrDef.name ); + else + objectNode.setAttribute( attrDef.name, value ); + break; + case ATTRTYPE_PARAM: + if ( !objectNode ) + continue; + value = this.getValue(); + if ( isRemove || isCheckbox && value === attrDef[ 'default' ] ) + { + if ( attrDef.name in paramMap ) + paramMap[ attrDef.name ].remove(); + } + else + { + if ( attrDef.name in paramMap ) + paramMap[ attrDef.name ].setAttribute( 'value', value ); + else + { + var param = CKEDITOR.dom.element.createFromHtml( '<cke:param></cke:param>', objectNode.getDocument() ); + param.setAttributes( { name : attrDef.name, value : value } ); + if ( objectNode.getChildCount() < 1 ) + param.appendTo( objectNode ); + else + param.insertBefore( objectNode.getFirst() ); + } + } + break; + case ATTRTYPE_EMBED: + if ( !embedNode ) + continue; + value = this.getValue(); + if ( isRemove || isCheckbox && value === attrDef[ 'default' ]) + embedNode.removeAttribute( attrDef.name ); + else + embedNode.setAttribute( attrDef.name, value ); + } + } + } + + CKEDITOR.dialog.add( 'flash', function( editor ) + { + var makeObjectTag = !editor.config.flashEmbedTagOnly, + makeEmbedTag = editor.config.flashAddEmbedTag || editor.config.flashEmbedTagOnly; + + var previewPreloader, + previewAreaHtml = '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.common.preview ) +'<br>' + + '<div id="cke_FlashPreviewLoader' + CKEDITOR.tools.getNextNumber() + '" style="display:none"><div class="loading"> </div></div>' + + '<div id="cke_FlashPreviewBox' + CKEDITOR.tools.getNextNumber() + '" class="FlashPreviewBox"></div></div>'; + + return { + title : editor.lang.flash.title, + minWidth : 420, + minHeight : 310, + onShow : function() + { + // Clear previously saved elements. + this.fakeImage = this.objectNode = this.embedNode = null; + previewPreloader = new CKEDITOR.dom.element( 'embed', editor.document ); + + // Try to detect any embed or object tag that has Flash parameters. + var fakeImage = this.getSelectedElement(); + if ( fakeImage && fakeImage.data( 'cke-real-element-type' ) && fakeImage.data( 'cke-real-element-type' ) == 'flash' ) + { + this.fakeImage = fakeImage; + + var realElement = editor.restoreRealElement( fakeImage ), + objectNode = null, embedNode = null, paramMap = {}; + if ( realElement.getName() == 'cke:object' ) + { + objectNode = realElement; + var embedList = objectNode.getElementsByTag( 'embed', 'cke' ); + if ( embedList.count() > 0 ) + embedNode = embedList.getItem( 0 ); + var paramList = objectNode.getElementsByTag( 'param', 'cke' ); + for ( var i = 0, length = paramList.count() ; i < length ; i++ ) + { + var item = paramList.getItem( i ), + name = item.getAttribute( 'name' ), + value = item.getAttribute( 'value' ); + paramMap[ name ] = value; + } + } + else if ( realElement.getName() == 'cke:embed' ) + embedNode = realElement; + + this.objectNode = objectNode; + this.embedNode = embedNode; + + this.setupContent( objectNode, embedNode, paramMap, fakeImage ); + } + }, + onOk : function() + { + // If there's no selected object or embed, create one. Otherwise, reuse the + // selected object and embed nodes. + var objectNode = null, + embedNode = null, + paramMap = null; + if ( !this.fakeImage ) + { + if ( makeObjectTag ) + { + objectNode = CKEDITOR.dom.element.createFromHtml( '<cke:object></cke:object>', editor.document ); + var attributes = { + classid : 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000', + codebase : 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0' + }; + objectNode.setAttributes( attributes ); + } + if ( makeEmbedTag ) + { + embedNode = CKEDITOR.dom.element.createFromHtml( '<cke:embed></cke:embed>', editor.document ); + embedNode.setAttributes( + { + type : 'application/x-shockwave-flash', + pluginspage : 'http://www.macromedia.com/go/getflashplayer' + } ); + if ( objectNode ) + embedNode.appendTo( objectNode ); + } + } + else + { + objectNode = this.objectNode; + embedNode = this.embedNode; + } + + // Produce the paramMap if there's an object tag. + if ( objectNode ) + { + paramMap = {}; + var paramList = objectNode.getElementsByTag( 'param', 'cke' ); + for ( var i = 0, length = paramList.count() ; i < length ; i++ ) + paramMap[ paramList.getItem( i ).getAttribute( 'name' ) ] = paramList.getItem( i ); + } + + // A subset of the specified attributes/styles + // should also be applied on the fake element to + // have better visual effect. (#5240) + var extraStyles = {}, extraAttributes = {}; + this.commitContent( objectNode, embedNode, paramMap, extraStyles, extraAttributes ); + + // Refresh the fake image. + var newFakeImage = editor.createFakeElement( objectNode || embedNode, 'cke_flash', 'flash', true ); + newFakeImage.setAttributes( extraAttributes ); + newFakeImage.setStyles( extraStyles ); + if ( this.fakeImage ) + { + newFakeImage.replace( this.fakeImage ); + editor.getSelection().selectElement( newFakeImage ); + } + else + editor.insertElement( newFakeImage ); + }, + + onHide : function() + { + if ( this.preview ) + this.preview.setHtml(''); + }, + + contents : [ + { + id : 'info', + label : editor.lang.common.generalTab, + accessKey : 'I', + elements : + [ + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'hbox', + widths : [ '280px', '110px' ], + align : 'right', + children : + [ + { + id : 'src', + type : 'text', + label : editor.lang.common.url, + required : true, + validate : CKEDITOR.dialog.validate.notEmpty( editor.lang.flash.validateSrc ), + setup : loadValue, + commit : commitValue, + onLoad : function() + { + var dialog = this.getDialog(), + updatePreview = function( src ){ + // Query the preloader to figure out the url impacted by based href. + previewPreloader.setAttribute( 'src', src ); + dialog.preview.setHtml( '<embed height="100%" width="100%" src="' + + CKEDITOR.tools.htmlEncode( previewPreloader.getAttribute( 'src' ) ) + + '" type="application/x-shockwave-flash"></embed>' ); + }; + // Preview element + dialog.preview = dialog.getContentElement( 'info', 'preview' ).getElement().getChild( 3 ); + + // Sync on inital value loaded. + this.on( 'change', function( evt ){ + + if ( evt.data && evt.data.value ) + updatePreview( evt.data.value ); + } ); + // Sync when input value changed. + this.getInputElement().on( 'change', function( evt ){ + + updatePreview( this.getValue() ); + }, this ); + } + }, + { + type : 'button', + id : 'browse', + filebrowser : 'info:src', + hidden : true, + // v-align with the 'src' field. + // TODO: We need something better than a fixed size here. + style : 'display:inline-block;margin-top:10px;', + label : editor.lang.common.browseServer + } + ] + } + ] + }, + { + type : 'hbox', + widths : [ '25%', '25%', '25%', '25%', '25%' ], + children : + [ + { + type : 'text', + id : 'width', + style : 'width:95px', + label : editor.lang.common.width, + validate : CKEDITOR.dialog.validate.htmlLength( editor.lang.common.invalidHtmlLength.replace( '%1', editor.lang.common.width ) ), + setup : loadValue, + commit : commitValue + }, + { + type : 'text', + id : 'height', + style : 'width:95px', + label : editor.lang.common.height, + validate : CKEDITOR.dialog.validate.htmlLength( editor.lang.common.invalidHtmlLength.replace( '%1', editor.lang.common.height ) ), + setup : loadValue, + commit : commitValue + }, + { + type : 'text', + id : 'hSpace', + style : 'width:95px', + label : editor.lang.flash.hSpace, + validate : CKEDITOR.dialog.validate.integer( editor.lang.flash.validateHSpace ), + setup : loadValue, + commit : commitValue + }, + { + type : 'text', + id : 'vSpace', + style : 'width:95px', + label : editor.lang.flash.vSpace, + validate : CKEDITOR.dialog.validate.integer( editor.lang.flash.validateVSpace ), + setup : loadValue, + commit : commitValue + } + ] + }, + + { + type : 'vbox', + children : + [ + { + type : 'html', + id : 'preview', + style : 'width:95%;', + html : previewAreaHtml + } + ] + } + ] + }, + { + id : 'Upload', + hidden : true, + filebrowser : 'uploadButton', + label : editor.lang.common.upload, + elements : + [ + { + type : 'file', + id : 'upload', + label : editor.lang.common.upload, + size : 38 + }, + { + type : 'fileButton', + id : 'uploadButton', + label : editor.lang.common.uploadSubmit, + filebrowser : 'info:src', + 'for' : [ 'Upload', 'upload' ] + } + ] + }, + { + id : 'properties', + label : editor.lang.flash.propertiesTab, + elements : + [ + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + id : 'scale', + type : 'select', + label : editor.lang.flash.scale, + 'default' : '', + style : 'width : 100%;', + items : + [ + [ editor.lang.common.notSet , ''], + [ editor.lang.flash.scaleAll, 'showall' ], + [ editor.lang.flash.scaleNoBorder, 'noborder' ], + [ editor.lang.flash.scaleFit, 'exactfit' ] + ], + setup : loadValue, + commit : commitValue + }, + { + id : 'allowScriptAccess', + type : 'select', + label : editor.lang.flash.access, + 'default' : '', + style : 'width : 100%;', + items : + [ + [ editor.lang.common.notSet , ''], + [ editor.lang.flash.accessAlways, 'always' ], + [ editor.lang.flash.accessSameDomain, 'samedomain' ], + [ editor.lang.flash.accessNever, 'never' ] + ], + setup : loadValue, + commit : commitValue + } + ] + }, + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + id : 'wmode', + type : 'select', + label : editor.lang.flash.windowMode, + 'default' : '', + style : 'width : 100%;', + items : + [ + [ editor.lang.common.notSet , '' ], + [ editor.lang.flash.windowModeWindow, 'window' ], + [ editor.lang.flash.windowModeOpaque, 'opaque' ], + [ editor.lang.flash.windowModeTransparent, 'transparent' ] + ], + setup : loadValue, + commit : commitValue + }, + { + id : 'quality', + type : 'select', + label : editor.lang.flash.quality, + 'default' : 'high', + style : 'width : 100%;', + items : + [ + [ editor.lang.common.notSet , '' ], + [ editor.lang.flash.qualityBest, 'best' ], + [ editor.lang.flash.qualityHigh, 'high' ], + [ editor.lang.flash.qualityAutoHigh, 'autohigh' ], + [ editor.lang.flash.qualityMedium, 'medium' ], + [ editor.lang.flash.qualityAutoLow, 'autolow' ], + [ editor.lang.flash.qualityLow, 'low' ] + ], + setup : loadValue, + commit : commitValue + } + ] + }, + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + id : 'align', + type : 'select', + label : editor.lang.common.align, + 'default' : '', + style : 'width : 100%;', + items : + [ + [ editor.lang.common.notSet , ''], + [ editor.lang.common.alignLeft , 'left'], + [ editor.lang.flash.alignAbsBottom , 'absBottom'], + [ editor.lang.flash.alignAbsMiddle , 'absMiddle'], + [ editor.lang.flash.alignBaseline , 'baseline'], + [ editor.lang.common.alignBottom , 'bottom'], + [ editor.lang.common.alignMiddle , 'middle'], + [ editor.lang.common.alignRight , 'right'], + [ editor.lang.flash.alignTextTop , 'textTop'], + [ editor.lang.common.alignTop , 'top'] + ], + setup : loadValue, + commit : function( objectNode, embedNode, paramMap, extraStyles, extraAttributes ) + { + var value = this.getValue(); + commitValue.apply( this, arguments ); + value && ( extraAttributes.align = value ); + } + }, + { + type : 'html', + html : '<div></div>' + } + ] + }, + { + type : 'fieldset', + label : CKEDITOR.tools.htmlEncode( editor.lang.flash.flashvars ), + children : + [ + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'checkbox', + id : 'menu', + label : editor.lang.flash.chkMenu, + 'default' : true, + setup : loadValue, + commit : commitValue + }, + { + type : 'checkbox', + id : 'play', + label : editor.lang.flash.chkPlay, + 'default' : true, + setup : loadValue, + commit : commitValue + }, + { + type : 'checkbox', + id : 'loop', + label : editor.lang.flash.chkLoop, + 'default' : true, + setup : loadValue, + commit : commitValue + }, + { + type : 'checkbox', + id : 'allowFullScreen', + label : editor.lang.flash.chkFull, + 'default' : true, + setup : loadValue, + commit : commitValue + } + ] + } + ] + } + ] + }, + { + id : 'advanced', + label : editor.lang.common.advancedTab, + elements : + [ + { + type : 'hbox', + widths : [ '45%', '55%' ], + children : + [ + { + type : 'text', + id : 'id', + label : editor.lang.common.id, + setup : loadValue, + commit : commitValue + }, + { + type : 'text', + id : 'title', + label : editor.lang.common.advisoryTitle, + setup : loadValue, + commit : commitValue + } + ] + }, + { + type : 'hbox', + widths : [ '45%', '55%' ], + children : + [ + { + type : 'text', + id : 'bgcolor', + label : editor.lang.flash.bgcolor, + setup : loadValue, + commit : commitValue + }, + { + type : 'text', + id : 'class', + label : editor.lang.common.cssClass, + setup : loadValue, + commit : commitValue + } + ] + }, + { + type : 'text', + id : 'style', + label : editor.lang.common.cssStyle, + setup : loadValue, + commit : commitValue + } + ] + } + ] + }; + } ); +})(); diff --git a/_source/plugins/flash/images/placeholder.png b/_source/plugins/flash/images/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc6caa7a6abca57d3f1e1376fbd5067d5cd66d0 GIT binary patch literal 256 zcmV+b0ssDqP)<h;3K|Lk000e1NJLTq0027x000{Z0{{R3^;ZYC0000pP)t-s|1&fH z0093YBL5K)|3pOph=~8Hs{h^H|95x)|NsB)?*F^H|CyQpRaO6KY5&a3|7K?7O*3i$ z004+dL_t(|UhS1h3d1lA05y`=to{FMYthhL3R!xL=OW8^BpD2rg}W?5y$g?VySw5@ zHQR&&rG*^8rux|zhTrb&VRu!<+Q~qwO1|Vy#7J~Ec>4p_Nnh8Sn%0^H2yKmXs_)2F ztJy_}S7x3Wy+9bua($h3aU$x8vL^9#zi)q&hjjO!f8h;)*e}{WeFK#M0000<MNUMn GLSTaQZFZ3W literal 0 HcmV?d00001 diff --git a/_source/plugins/flash/plugin.js b/_source/plugins/flash/plugin.js new file mode 100644 index 0000000..97f8a12 --- /dev/null +++ b/_source/plugins/flash/plugin.js @@ -0,0 +1,154 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var flashFilenameRegex = /\.swf(?:$|\?)/i; + + function isFlashEmbed( element ) + { + var attributes = element.attributes; + + return ( attributes.type == 'application/x-shockwave-flash' || flashFilenameRegex.test( attributes.src || '' ) ); + } + + function createFakeElement( editor, realElement ) + { + return editor.createFakeParserElement( realElement, 'cke_flash', 'flash', true ); + } + + CKEDITOR.plugins.add( 'flash', + { + init : function( editor ) + { + editor.addCommand( 'flash', new CKEDITOR.dialogCommand( 'flash' ) ); + editor.ui.addButton( 'Flash', + { + label : editor.lang.common.flash, + command : 'flash' + }); + CKEDITOR.dialog.add( 'flash', this.path + 'dialogs/flash.js' ); + + editor.addCss( + 'img.cke_flash' + + '{' + + 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.png' ) + ');' + + 'background-position: center center;' + + 'background-repeat: no-repeat;' + + 'border: 1px solid #a9a9a9;' + + 'width: 80px;' + + 'height: 80px;' + + '}' + ); + + // If the "menu" plugin is loaded, register the menu items. + if ( editor.addMenuItems ) + { + editor.addMenuItems( + { + flash : + { + label : editor.lang.flash.properties, + command : 'flash', + group : 'flash' + } + }); + } + + editor.on( 'doubleclick', function( evt ) + { + var element = evt.data.element; + + if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'flash' ) + evt.data.dialog = 'flash'; + }); + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( element && element.is( 'img' ) && !element.isReadOnly() + && element.data( 'cke-real-element-type' ) == 'flash' ) + return { flash : CKEDITOR.TRISTATE_OFF }; + }); + } + }, + + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter; + + if ( dataFilter ) + { + dataFilter.addRules( + { + elements : + { + 'cke:object' : function( element ) + { + var attributes = element.attributes, + classId = attributes.classid && String( attributes.classid ).toLowerCase(); + + if ( !classId && !isFlashEmbed( element ) ) + { + // Look for the inner <embed> + for ( var i = 0 ; i < element.children.length ; i++ ) + { + if ( element.children[ i ].name == 'cke:embed' ) + { + if ( !isFlashEmbed( element.children[ i ] ) ) + return null; + + return createFakeElement( editor, element ); + } + } + return null; + } + + return createFakeElement( editor, element ); + }, + + 'cke:embed' : function( element ) + { + if ( !isFlashEmbed( element ) ) + return null; + + return createFakeElement( editor, element ); + } + } + }, + 5); + } + }, + + requires : [ 'fakeobjects' ] + }); +})(); + +CKEDITOR.tools.extend( CKEDITOR.config, +{ + /** + * Save as EMBED tag only. This tag is unrecommended. + * @type Boolean + * @default false + */ + flashEmbedTagOnly : false, + + /** + * Add EMBED tag as alternative: <object><embed></embed></object> + * @type Boolean + * @default false + */ + flashAddEmbedTag : true, + + /** + * Use embedTagOnly and addEmbedTag values on edit. + * @type Boolean + * @default false + */ + flashConvertOnEdit : false +} ); diff --git a/_source/plugins/floatpanel/plugin.js b/_source/plugins/floatpanel/plugin.js new file mode 100644 index 0000000..5569e5e --- /dev/null +++ b/_source/plugins/floatpanel/plugin.js @@ -0,0 +1,428 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'floatpanel', +{ + requires : [ 'panel' ] +}); + +(function() +{ + var panels = {}; + var isShowing = false; + + function getPanel( editor, doc, parentElement, definition, level ) + { + // Generates the panel key: docId-eleId-skinName-langDir[-uiColor][-CSSs][-level] + var key = CKEDITOR.tools.genKey( doc.getUniqueId(), parentElement.getUniqueId(), editor.skinName, editor.lang.dir, + editor.uiColor || '', definition.css || '', level || '' ); + + var panel = panels[ key ]; + + if ( !panel ) + { + panel = panels[ key ] = new CKEDITOR.ui.panel( doc, definition ); + panel.element = parentElement.append( CKEDITOR.dom.element.createFromHtml( panel.renderHtml( editor ), doc ) ); + + panel.element.setStyles( + { + display : 'none', + position : 'absolute' + }); + } + + return panel; + } + + CKEDITOR.ui.floatPanel = CKEDITOR.tools.createClass( + { + $ : function( editor, parentElement, definition, level ) + { + definition.forceIFrame = 1; + + var doc = parentElement.getDocument(), + panel = getPanel( editor, doc, parentElement, definition, level || 0 ), + element = panel.element, + iframe = element.getFirst().getFirst(); + + this.element = element; + + this._ = + { + editor : editor, + // The panel that will be floating. + panel : panel, + parentElement : parentElement, + definition : definition, + document : doc, + iframe : iframe, + children : [], + dir : editor.lang.dir + }; + + editor.on( 'mode', function(){ this.hide(); }, this ); + }, + + proto : + { + addBlock : function( name, block ) + { + return this._.panel.addBlock( name, block ); + }, + + addListBlock : function( name, multiSelect ) + { + return this._.panel.addListBlock( name, multiSelect ); + }, + + getBlock : function( name ) + { + return this._.panel.getBlock( name ); + }, + + /* + corner (LTR): + 1 = top-left + 2 = top-right + 3 = bottom-right + 4 = bottom-left + + corner (RTL): + 1 = top-right + 2 = top-left + 3 = bottom-left + 4 = bottom-right + */ + showBlock : function( name, offsetParent, corner, offsetX, offsetY ) + { + var panel = this._.panel, + block = panel.showBlock( name ); + + this.allowBlur( false ); + isShowing = 1; + + // Record from where the focus is when open panel. + this._.returnFocus = this._.editor.focusManager.hasFocus ? this._.editor : new CKEDITOR.dom.element( CKEDITOR.document.$.activeElement ); + + + var element = this.element, + iframe = this._.iframe, + definition = this._.definition, + position = offsetParent.getDocumentPosition( element.getDocument() ), + rtl = this._.dir == 'rtl'; + + var left = position.x + ( offsetX || 0 ), + top = position.y + ( offsetY || 0 ); + + // Floating panels are off by (-1px, 0px) in RTL mode. (#3438) + if ( rtl && ( corner == 1 || corner == 4 ) ) + left += offsetParent.$.offsetWidth; + else if ( !rtl && ( corner == 2 || corner == 3 ) ) + left += offsetParent.$.offsetWidth - 1; + + if ( corner == 3 || corner == 4 ) + top += offsetParent.$.offsetHeight - 1; + + // Memorize offsetParent by it's ID. + this._.panel._.offsetParentId = offsetParent.getId(); + + element.setStyles( + { + top : top + 'px', + left: 0, + display : '' + }); + + // Don't use display or visibility style because we need to + // calculate the rendering layout later and focus the element. + element.setOpacity( 0 ); + + // To allow the context menu to decrease back their width + element.getFirst().removeStyle( 'width' ); + + // Configure the IFrame blur event. Do that only once. + if ( !this._.blurSet ) + { + // Non IE prefer the event into a window object. + var focused = CKEDITOR.env.ie ? iframe : new CKEDITOR.dom.window( iframe.$.contentWindow ); + + // With addEventListener compatible browsers, we must + // useCapture when registering the focus/blur events to + // guarantee they will be firing in all situations. (#3068, #3222 ) + CKEDITOR.event.useCapture = true; + + focused.on( 'blur', function( ev ) + { + if ( !this.allowBlur() ) + return; + + // As we are using capture to register the listener, + // the blur event may get fired even when focusing + // inside the window itself, so we must ensure the + // target is out of it. + var target = ev.data.getTarget() ; + if ( target.getName && target.getName() != 'iframe' ) + return; + + if ( this.visible && !this._.activeChild && !isShowing ) + { + // Panel close is caused by user's navigating away the focus, e.g. click outside the panel. + // DO NOT restore focus in this case. + delete this._.returnFocus; + this.hide(); + } + }, + this ); + + focused.on( 'focus', function() + { + this._.focused = true; + this.hideChild(); + this.allowBlur( true ); + }, + this ); + + CKEDITOR.event.useCapture = false; + + this._.blurSet = 1; + } + + panel.onEscape = CKEDITOR.tools.bind( function( keystroke ) + { + if ( this.onEscape && this.onEscape( keystroke ) === false ) + return false; + }, + this ); + + CKEDITOR.tools.setTimeout( function() + { + if ( rtl ) + left -= element.$.offsetWidth; + + var panelLoad = CKEDITOR.tools.bind( function () + { + var target = element.getFirst(); + + if ( block.autoSize ) + { + // We must adjust first the width or IE6 could include extra lines in the height computation + var widthNode = block.element.$; + + if ( CKEDITOR.env.gecko || CKEDITOR.env.opera ) + widthNode = widthNode.parentNode; + + if ( CKEDITOR.env.ie ) + widthNode = widthNode.document.body; + + var width = widthNode.scrollWidth; + // Account for extra height needed due to IE quirks box model bug: + // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug + // (#3426) + if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && width > 0 ) + width += ( target.$.offsetWidth || 0 ) - ( target.$.clientWidth || 0 ) + 3; + // A little extra at the end. + // If not present, IE6 might break into the next line, but also it looks better this way + width += 4 ; + + target.setStyle( 'width', width + 'px' ); + + // IE doesn't compute the scrollWidth if a filter is applied previously + block.element.addClass( 'cke_frameLoaded' ); + + var height = block.element.$.scrollHeight; + + // Account for extra height needed due to IE quirks box model bug: + // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug + // (#3426) + if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && height > 0 ) + height += ( target.$.offsetHeight || 0 ) - ( target.$.clientHeight || 0 ) + 3; + + target.setStyle( 'height', height + 'px' ); + + // Fix IE < 8 visibility. + panel._.currentBlock.element.setStyle( 'display', 'none' ).removeStyle( 'display' ); + } + else + target.removeStyle( 'height' ); + + var panelElement = panel.element, + panelWindow = panelElement.getWindow(), + windowScroll = panelWindow.getScrollPosition(), + viewportSize = panelWindow.getViewPaneSize(), + panelSize = + { + 'height' : panelElement.$.offsetHeight, + 'width' : panelElement.$.offsetWidth + }; + + // If the menu is horizontal off, shift it toward + // the opposite language direction. + if ( rtl ? left < 0 : left + panelSize.width > viewportSize.width + windowScroll.x ) + left += ( panelSize.width * ( rtl ? 1 : -1 ) ); + + // Vertical off screen is simpler. + if ( top + panelSize.height > viewportSize.height + windowScroll.y ) + top -= panelSize.height; + + // If IE is in RTL, we have troubles with absolute + // position and horizontal scrolls. Here we have a + // series of hacks to workaround it. (#6146) + if ( CKEDITOR.env.ie ) + { + var offsetParent = new CKEDITOR.dom.element( element.$.offsetParent ), + scrollParent = offsetParent; + + // Quirks returns <body>, but standards returns <html>. + if ( scrollParent.getName() == 'html' ) + scrollParent = scrollParent.getDocument().getBody(); + + if ( scrollParent.getComputedStyle( 'direction' ) == 'rtl' ) + { + // For IE8, there is not much logic on this, but it works. + if ( CKEDITOR.env.ie8Compat ) + left -= element.getDocument().getDocumentElement().$.scrollLeft * 2; + else + left -= ( offsetParent.$.scrollWidth - offsetParent.$.clientWidth ); + } + } + + // Trigger the onHide event of the previously active panel to prevent + // incorrect styles from being applied (#6170) + var innerElement = element.getFirst(), + activePanel; + if ( ( activePanel = innerElement.getCustomData( 'activePanel' ) ) ) + activePanel.onHide && activePanel.onHide.call( this, 1 ); + innerElement.setCustomData( 'activePanel', this ); + + element.setStyles( + { + top : top + 'px', + left : left + 'px' + } ); + element.setOpacity( 1 ); + } , this ); + + panel.isLoaded ? panelLoad() : panel.onLoad = panelLoad; + + // Set the panel frame focus, so the blur event gets fired. + CKEDITOR.tools.setTimeout( function() + { + iframe.$.contentWindow.focus(); + // We need this get fired manually because of unfired focus() function. + this.allowBlur( true ); + }, 0, this); + }, CKEDITOR.env.air ? 200 : 0, this); + this.visible = 1; + + if ( this.onShow ) + this.onShow.call( this ); + + isShowing = 0; + }, + + hide : function( returnFocus ) + { + if ( this.visible && ( !this.onHide || this.onHide.call( this ) !== true ) ) + { + this.hideChild(); + // Blur previously focused element. (#6671) + CKEDITOR.env.gecko && this._.iframe.getFrameDocument().$.activeElement.blur(); + this.element.setStyle( 'display', 'none' ); + this.visible = 0; + this.element.getFirst().removeCustomData( 'activePanel' ); + + // Return focus properly. (#6247) + var focusReturn = returnFocus !== false && this._.returnFocus; + if ( focusReturn ) + { + // Webkit requires focus moved out panel iframe first. + if ( CKEDITOR.env.webkit && focusReturn.type ) + focusReturn.getWindow().$.focus(); + + focusReturn.focus(); + } + } + }, + + allowBlur : function( allow ) // Prevent editor from hiding the panel. #3222. + { + var panel = this._.panel; + if ( allow != undefined ) + panel.allowBlur = allow; + + return panel.allowBlur; + }, + + showAsChild : function( panel, blockName, offsetParent, corner, offsetX, offsetY ) + { + // Skip reshowing of child which is already visible. + if ( this._.activeChild == panel && panel._.panel._.offsetParentId == offsetParent.getId() ) + return; + + this.hideChild(); + + panel.onHide = CKEDITOR.tools.bind( function() + { + // Use a timeout, so we give time for this menu to get + // potentially focused. + CKEDITOR.tools.setTimeout( function() + { + if ( !this._.focused ) + this.hide(); + }, + 0, this ); + }, + this ); + + this._.activeChild = panel; + this._.focused = false; + + panel.showBlock( blockName, offsetParent, corner, offsetX, offsetY ); + + /* #3767 IE: Second level menu may not have borders */ + if ( CKEDITOR.env.ie7Compat || ( CKEDITOR.env.ie8 && CKEDITOR.env.ie6Compat ) ) + { + setTimeout(function() + { + panel.element.getChild( 0 ).$.style.cssText += ''; + }, 100); + } + }, + + hideChild : function() + { + var activeChild = this._.activeChild; + + if ( activeChild ) + { + delete activeChild.onHide; + // Sub panels don't manage focus. (#7881) + delete activeChild._.returnFocus; + delete this._.activeChild; + activeChild.hide(); + } + } + } + }); + + CKEDITOR.on( 'instanceDestroyed', function() + { + var isLastInstance = CKEDITOR.tools.isEmpty( CKEDITOR.instances ); + + for ( var i in panels ) + { + var panel = panels[ i ]; + // Safe to destroy it since there're no more instances.(#4241) + if ( isLastInstance ) + panel.destroy(); + // Panel might be used by other instances, just hide them.(#4552) + else + panel.element.hide(); + } + // Remove the registration. + isLastInstance && ( panels = {} ); + + } ); +})(); diff --git a/_source/plugins/font/plugin.js b/_source/plugins/font/plugin.js new file mode 100644 index 0000000..6a1efee --- /dev/null +++ b/_source/plugins/font/plugin.js @@ -0,0 +1,234 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + function addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition ) + { + var config = editor.config; + + // Gets the list of fonts from the settings. + var names = entries.split( ';' ), + values = []; + + // Create style objects for all fonts. + var styles = {}; + for ( var i = 0 ; i < names.length ; i++ ) + { + var parts = names[ i ]; + + if ( parts ) + { + parts = parts.split( '/' ); + + var vars = {}, + name = names[ i ] = parts[ 0 ]; + + vars[ styleType ] = values[ i ] = parts[ 1 ] || name; + + styles[ name ] = new CKEDITOR.style( styleDefinition, vars ); + styles[ name ]._.definition.name = name; + } + else + names.splice( i--, 1 ); + } + + editor.ui.addRichCombo( comboName, + { + label : lang.label, + title : lang.panelTitle, + className : 'cke_' + ( styleType == 'size' ? 'fontSize' : 'font' ), + panel : + { + css : editor.skin.editor.css.concat( config.contentsCss ), + multiSelect : false, + attributes : { 'aria-label' : lang.panelTitle } + }, + + init : function() + { + this.startGroup( lang.panelTitle ); + + for ( var i = 0 ; i < names.length ; i++ ) + { + var name = names[ i ]; + + // Add the tag entry to the panel list. + this.add( name, styles[ name ].buildPreview(), name ); + } + }, + + onClick : function( value ) + { + editor.focus(); + editor.fire( 'saveSnapshot' ); + + var style = styles[ value ]; + + if ( this.getValue() == value ) + style.remove( editor.document ); + else + style.apply( editor.document ); + + editor.fire( 'saveSnapshot' ); + }, + + onRender : function() + { + editor.on( 'selectionChange', function( ev ) + { + var currentValue = this.getValue(); + + var elementPath = ev.data.path, + elements = elementPath.elements; + + // For each element into the elements path. + for ( var i = 0, element ; i < elements.length ; i++ ) + { + element = elements[i]; + + // Check if the element is removable by any of + // the styles. + for ( var value in styles ) + { + if ( styles[ value ].checkElementRemovable( element, true ) ) + { + if ( value != currentValue ) + this.setValue( value ); + return; + } + } + } + + // If no styles match, just empty it. + this.setValue( '', defaultLabel ); + }, + this); + } + }); + } + + CKEDITOR.plugins.add( 'font', + { + requires : [ 'richcombo', 'styles' ], + + init : function( editor ) + { + var config = editor.config; + + addCombo( editor, 'Font', 'family', editor.lang.font, config.font_names, config.font_defaultLabel, config.font_style ); + addCombo( editor, 'FontSize', 'size', editor.lang.fontSize, config.fontSize_sizes, config.fontSize_defaultLabel, config.fontSize_style ); + } + }); +})(); + +/** + * The list of fonts names to be displayed in the Font combo in the toolbar. + * Entries are separated by semi-colons (;), while it's possible to have more + * than one font for each entry, in the HTML way (separated by comma). + * + * A display name may be optionally defined by prefixing the entries with the + * name and the slash character. For example, "Arial/Arial, Helvetica, sans-serif" + * will be displayed as "Arial" in the list, but will be outputted as + * "Arial, Helvetica, sans-serif". + * @type String + * @example + * config.font_names = + * 'Arial/Arial, Helvetica, sans-serif;' + + * 'Times New Roman/Times New Roman, Times, serif;' + + * 'Verdana'; + * @example + * config.font_names = 'Arial;Times New Roman;Verdana'; + */ +CKEDITOR.config.font_names = + 'Arial/Arial, Helvetica, sans-serif;' + + 'Comic Sans MS/Comic Sans MS, cursive;' + + 'Courier New/Courier New, Courier, monospace;' + + 'Georgia/Georgia, serif;' + + 'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' + + 'Tahoma/Tahoma, Geneva, sans-serif;' + + 'Times New Roman/Times New Roman, Times, serif;' + + 'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' + + 'Verdana/Verdana, Geneva, sans-serif'; + +/** + * The text to be displayed in the Font combo is none of the available values + * matches the current cursor position or text selection. + * @type String + * @example + * // If the default site font is Arial, we may making it more explicit to the end user. + * config.font_defaultLabel = 'Arial'; + */ +CKEDITOR.config.font_defaultLabel = ''; + +/** + * The style definition to be used to apply the font in the text. + * @type Object + * @example + * // This is actually the default value for it. + * config.font_style = + * { + * element : 'span', + * styles : { 'font-family' : '#(family)' }, + * overrides : [ { element : 'font', attributes : { 'face' : null } } ] + * }; + */ +CKEDITOR.config.font_style = + { + element : 'span', + styles : { 'font-family' : '#(family)' }, + overrides : [ { element : 'font', attributes : { 'face' : null } } ] + }; + +/** + * The list of fonts size to be displayed in the Font Size combo in the + * toolbar. Entries are separated by semi-colons (;). + * + * Any kind of "CSS like" size can be used, like "12px", "2.3em", "130%", + * "larger" or "x-small". + * + * A display name may be optionally defined by prefixing the entries with the + * name and the slash character. For example, "Bigger Font/14px" will be + * displayed as "Bigger Font" in the list, but will be outputted as "14px". + * @type String + * @default '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px' + * @example + * config.fontSize_sizes = '16/16px;24/24px;48/48px;'; + * @example + * config.fontSize_sizes = '12px;2.3em;130%;larger;x-small'; + * @example + * config.fontSize_sizes = '12 Pixels/12px;Big/2.3em;30 Percent More/130%;Bigger/larger;Very Small/x-small'; + */ +CKEDITOR.config.fontSize_sizes = + '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px'; + +/** + * The text to be displayed in the Font Size combo is none of the available + * values matches the current cursor position or text selection. + * @type String + * @example + * // If the default site font size is 12px, we may making it more explicit to the end user. + * config.fontSize_defaultLabel = '12px'; + */ +CKEDITOR.config.fontSize_defaultLabel = ''; + +/** + * The style definition to be used to apply the font size in the text. + * @type Object + * @example + * // This is actually the default value for it. + * config.fontSize_style = + * { + * element : 'span', + * styles : { 'font-size' : '#(size)' }, + * overrides : [ { element : 'font', attributes : { 'size' : null } } ] + * }; + */ +CKEDITOR.config.fontSize_style = + { + element : 'span', + styles : { 'font-size' : '#(size)' }, + overrides : [ { element : 'font', attributes : { 'size' : null } } ] + }; diff --git a/_source/plugins/format/plugin.js b/_source/plugins/format/plugin.js new file mode 100644 index 0000000..8e96529 --- /dev/null +++ b/_source/plugins/format/plugin.js @@ -0,0 +1,197 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'format', +{ + requires : [ 'richcombo', 'styles' ], + + init : function( editor ) + { + var config = editor.config, + lang = editor.lang.format; + + // Gets the list of tags from the settings. + var tags = config.format_tags.split( ';' ); + + // Create style objects for all defined styles. + var styles = {}; + for ( var i = 0 ; i < tags.length ; i++ ) + { + var tag = tags[ i ]; + styles[ tag ] = new CKEDITOR.style( config[ 'format_' + tag ] ); + styles[ tag ]._.enterMode = editor.config.enterMode; + } + + editor.ui.addRichCombo( 'Format', + { + label : lang.label, + title : lang.panelTitle, + className : 'cke_format', + panel : + { + css : editor.skin.editor.css.concat( config.contentsCss ), + multiSelect : false, + attributes : { 'aria-label' : lang.panelTitle } + }, + + init : function() + { + this.startGroup( lang.panelTitle ); + + for ( var tag in styles ) + { + var label = lang[ 'tag_' + tag ]; + + // Add the tag entry to the panel list. + this.add( tag, styles[tag].buildPreview( label ), label ); + } + }, + + onClick : function( value ) + { + editor.focus(); + editor.fire( 'saveSnapshot' ); + + var style = styles[ value ], + elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() ); + + style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document ); + + // Save the undo snapshot after all changes are affected. (#4899) + setTimeout( function() + { + editor.fire( 'saveSnapshot' ); + }, 0 ); + }, + + onRender : function() + { + editor.on( 'selectionChange', function( ev ) + { + var currentTag = this.getValue(); + + var elementPath = ev.data.path; + + for ( var tag in styles ) + { + if ( styles[ tag ].checkActive( elementPath ) ) + { + if ( tag != currentTag ) + this.setValue( tag, editor.lang.format[ 'tag_' + tag ] ); + return; + } + } + + // If no styles match, just empty it. + this.setValue( '' ); + }, + this); + } + }); + } +}); + +/** + * A list of semi colon separated style names (by default tags) representing + * the style definition for each entry to be displayed in the Format combo in + * the toolbar. Each entry must have its relative definition configuration in a + * setting named "format_(tagName)". For example, the "p" entry has its + * definition taken from config.format_p. + * @type String + * @default 'p;h1;h2;h3;h4;h5;h6;pre;address;div' + * @example + * config.format_tags = 'p;h2;h3;pre' + */ +CKEDITOR.config.format_tags = 'p;h1;h2;h3;h4;h5;h6;pre;address;div'; + +/** + * The style definition to be used to apply the "Normal" format. + * @type Object + * @default { element : 'p' } + * @example + * config.format_p = { element : 'p', attributes : { 'class' : 'normalPara' } }; + */ +CKEDITOR.config.format_p = { element : 'p' }; + +/** + * The style definition to be used to apply the "Normal (DIV)" format. + * @type Object + * @default { element : 'div' } + * @example + * config.format_div = { element : 'div', attributes : { 'class' : 'normalDiv' } }; + */ +CKEDITOR.config.format_div = { element : 'div' }; + +/** + * The style definition to be used to apply the "Formatted" format. + * @type Object + * @default { element : 'pre' } + * @example + * config.format_pre = { element : 'pre', attributes : { 'class' : 'code' } }; + */ +CKEDITOR.config.format_pre = { element : 'pre' }; + +/** + * The style definition to be used to apply the "Address" format. + * @type Object + * @default { element : 'address' } + * @example + * config.format_address = { element : 'address', attributes : { 'class' : 'styledAddress' } }; + */ +CKEDITOR.config.format_address = { element : 'address' }; + +/** + * The style definition to be used to apply the "Heading 1" format. + * @type Object + * @default { element : 'h1' } + * @example + * config.format_h1 = { element : 'h1', attributes : { 'class' : 'contentTitle1' } }; + */ +CKEDITOR.config.format_h1 = { element : 'h1' }; + +/** + * The style definition to be used to apply the "Heading 1" format. + * @type Object + * @default { element : 'h2' } + * @example + * config.format_h2 = { element : 'h2', attributes : { 'class' : 'contentTitle2' } }; + */ +CKEDITOR.config.format_h2 = { element : 'h2' }; + +/** + * The style definition to be used to apply the "Heading 1" format. + * @type Object + * @default { element : 'h3' } + * @example + * config.format_h3 = { element : 'h3', attributes : { 'class' : 'contentTitle3' } }; + */ +CKEDITOR.config.format_h3 = { element : 'h3' }; + +/** + * The style definition to be used to apply the "Heading 1" format. + * @type Object + * @default { element : 'h4' } + * @example + * config.format_h4 = { element : 'h4', attributes : { 'class' : 'contentTitle4' } }; + */ +CKEDITOR.config.format_h4 = { element : 'h4' }; + +/** + * The style definition to be used to apply the "Heading 1" format. + * @type Object + * @default { element : 'h5' } + * @example + * config.format_h5 = { element : 'h5', attributes : { 'class' : 'contentTitle5' } }; + */ +CKEDITOR.config.format_h5 = { element : 'h5' }; + +/** + * The style definition to be used to apply the "Heading 1" format. + * @type Object + * @default { element : 'h6' } + * @example + * config.format_h6 = { element : 'h6', attributes : { 'class' : 'contentTitle6' } }; + */ +CKEDITOR.config.format_h6 = { element : 'h6' }; diff --git a/_source/plugins/forms/dialogs/button.js b/_source/plugins/forms/dialogs/button.js new file mode 100644 index 0000000..730864f --- /dev/null +++ b/_source/plugins/forms/dialogs/button.js @@ -0,0 +1,118 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add( 'button', function( editor ) +{ + function commitAttributes( element ) + { + var val = this.getValue(); + if ( val ) + { + element.attributes[ this.id ] = val; + if ( this.id == 'name' ) + element.attributes[ 'data-cke-saved-name' ] = val; + } + else + { + delete element.attributes[ this.id ]; + if ( this.id == 'name' ) + delete element.attributes[ 'data-cke-saved-name' ]; + } + } + + return { + title : editor.lang.button.title, + minWidth : 350, + minHeight : 150, + onShow : function() + { + delete this.button; + var element = this.getParentEditor().getSelection().getSelectedElement(); + if ( element && element.is( 'input' ) ) + { + var type = element.getAttribute( 'type' ); + if ( type in { button:1, reset:1, submit:1 } ) + { + this.button = element; + this.setupContent( element ); + } + } + }, + onOk : function() + { + var editor = this.getParentEditor(), + element = this.button, + isInsertMode = !element; + + var fake = element ? CKEDITOR.htmlParser.fragment.fromHtml( element.getOuterHtml() ).children[ 0 ] + : new CKEDITOR.htmlParser.element( 'input' ); + this.commitContent( fake ); + + var writer = new CKEDITOR.htmlParser.basicWriter(); + fake.writeHtml( writer ); + var newElement = CKEDITOR.dom.element.createFromHtml( writer.getHtml(), editor.document ); + + if ( isInsertMode ) + editor.insertElement( newElement ); + else + { + newElement.replace( element ); + editor.getSelection().selectElement( newElement ); + } + }, + contents : [ + { + id : 'info', + label : editor.lang.button.title, + title : editor.lang.button.title, + elements : [ + { + id : 'name', + type : 'text', + label : editor.lang.common.name, + 'default' : '', + setup : function( element ) + { + this.setValue( + element.data( 'cke-saved-name' ) || + element.getAttribute( 'name' ) || + '' ); + }, + commit : commitAttributes + }, + { + id : 'value', + type : 'text', + label : editor.lang.button.text, + accessKey : 'V', + 'default' : '', + setup : function( element ) + { + this.setValue( element.getAttribute( 'value' ) || '' ); + }, + commit : commitAttributes + }, + { + id : 'type', + type : 'select', + label : editor.lang.button.type, + 'default' : 'button', + accessKey : 'T', + items : + [ + [ editor.lang.button.typeBtn, 'button' ], + [ editor.lang.button.typeSbm, 'submit' ], + [ editor.lang.button.typeRst, 'reset' ] + ], + setup : function( element ) + { + this.setValue( element.getAttribute( 'type' ) || '' ); + }, + commit : commitAttributes + } + ] + } + ] + }; +}); diff --git a/_source/plugins/forms/dialogs/checkbox.js b/_source/plugins/forms/dialogs/checkbox.js new file mode 100644 index 0000000..8c6e4d2 --- /dev/null +++ b/_source/plugins/forms/dialogs/checkbox.js @@ -0,0 +1,153 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add( 'checkbox', function( editor ) +{ + return { + title : editor.lang.checkboxAndRadio.checkboxTitle, + minWidth : 350, + minHeight : 140, + onShow : function() + { + delete this.checkbox; + + var element = this.getParentEditor().getSelection().getSelectedElement(); + + if ( element && element.getAttribute( 'type' ) == 'checkbox' ) + { + this.checkbox = element; + this.setupContent( element ); + } + }, + onOk : function() + { + var editor, + element = this.checkbox, + isInsertMode = !element; + + if ( isInsertMode ) + { + editor = this.getParentEditor(); + element = editor.document.createElement( 'input' ); + element.setAttribute( 'type', 'checkbox' ); + editor.insertElement( element ); + } + this.commitContent( { element : element } ); + }, + contents : [ + { + id : 'info', + label : editor.lang.checkboxAndRadio.checkboxTitle, + title : editor.lang.checkboxAndRadio.checkboxTitle, + startupFocus : 'txtName', + elements : [ + { + id : 'txtName', + type : 'text', + label : editor.lang.common.name, + 'default' : '', + accessKey : 'N', + setup : function( element ) + { + this.setValue( + element.data( 'cke-saved-name' ) || + element.getAttribute( 'name' ) || + '' ); + }, + commit : function( data ) + { + var element = data.element; + + // IE failed to update 'name' property on input elements, protect it now. + if ( this.getValue() ) + element.data( 'cke-saved-name', this.getValue() ); + else + { + element.data( 'cke-saved-name', false ); + element.removeAttribute( 'name' ); + } + } + }, + { + id : 'txtValue', + type : 'text', + label : editor.lang.checkboxAndRadio.value, + 'default' : '', + accessKey : 'V', + setup : function( element ) + { + var value = element.getAttribute( 'value' ); + // IE Return 'on' as default attr value. + this.setValue( CKEDITOR.env.ie && value == 'on' ? '' : value ); + }, + commit : function( data ) + { + var element = data.element, + value = this.getValue(); + + if ( value && !( CKEDITOR.env.ie && value == 'on' ) ) + element.setAttribute( 'value', value ); + else + { + if ( CKEDITOR.env.ie ) + { + // Remove attribute 'value' of checkbox (#4721). + var checkbox = new CKEDITOR.dom.element( 'input', element.getDocument() ); + element.copyAttributes( checkbox, { value: 1 } ); + checkbox.replace( element ); + editor.getSelection().selectElement( checkbox ); + data.element = checkbox; + } + else + element.removeAttribute( 'value' ); + } + } + }, + { + id : 'cmbSelected', + type : 'checkbox', + label : editor.lang.checkboxAndRadio.selected, + 'default' : '', + accessKey : 'S', + value : "checked", + setup : function( element ) + { + this.setValue( element.getAttribute( 'checked' ) ); + }, + commit : function( data ) + { + var element = data.element; + + if ( CKEDITOR.env.ie ) + { + var isElementChecked = !!element.getAttribute( 'checked' ), + isChecked = !!this.getValue(); + + if ( isElementChecked != isChecked ) + { + var replace = CKEDITOR.dom.element.createFromHtml( '<input type="checkbox"' + + ( isChecked ? ' checked="checked"' : '' ) + + '/>', editor.document ); + + element.copyAttributes( replace, { type : 1, checked : 1 } ); + replace.replace( element ); + editor.getSelection().selectElement( replace ); + data.element = replace; + } + } + else + { + var value = this.getValue(); + if ( value ) + element.setAttribute( 'checked', 'checked' ); + else + element.removeAttribute( 'checked' ); + } + } + } + ] + } + ] + }; +}); diff --git a/_source/plugins/forms/dialogs/form.js b/_source/plugins/forms/dialogs/form.js new file mode 100644 index 0000000..975ebdd --- /dev/null +++ b/_source/plugins/forms/dialogs/form.js @@ -0,0 +1,177 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add( 'form', function( editor ) +{ + var autoAttributes = + { + action : 1, + id : 1, + method : 1, + enctype : 1, + target : 1 + }; + + return { + title : editor.lang.form.title, + minWidth : 350, + minHeight : 200, + onShow : function() + { + delete this.form; + + var element = this.getParentEditor().getSelection().getStartElement(); + var form = element && element.getAscendant( 'form', true ); + if ( form ) + { + this.form = form; + this.setupContent( form ); + } + }, + onOk : function() + { + var editor, + element = this.form, + isInsertMode = !element; + + if ( isInsertMode ) + { + editor = this.getParentEditor(); + element = editor.document.createElement( 'form' ); + !CKEDITOR.env.ie && element.append( editor.document.createElement( 'br' ) ); + } + + if ( isInsertMode ) + editor.insertElement( element ); + this.commitContent( element ); + }, + onLoad : function() + { + function autoSetup( element ) + { + this.setValue( element.getAttribute( this.id ) || '' ); + } + + function autoCommit( element ) + { + if ( this.getValue() ) + element.setAttribute( this.id, this.getValue() ); + else + element.removeAttribute( this.id ); + } + + this.foreach( function( contentObj ) + { + if ( autoAttributes[ contentObj.id ] ) + { + contentObj.setup = autoSetup; + contentObj.commit = autoCommit; + } + } ); + }, + contents : [ + { + id : 'info', + label : editor.lang.form.title, + title : editor.lang.form.title, + elements : [ + { + id : 'txtName', + type : 'text', + label : editor.lang.common.name, + 'default' : '', + accessKey : 'N', + setup : function( element ) + { + this.setValue( element.data( 'cke-saved-name' ) || + element.getAttribute( 'name' ) || + '' ); + }, + commit : function( element ) + { + if ( this.getValue() ) + element.data( 'cke-saved-name', this.getValue() ); + else + { + element.data( 'cke-saved-name', false ); + element.removeAttribute( 'name' ); + } + } + }, + { + id : 'action', + type : 'text', + label : editor.lang.form.action, + 'default' : '', + accessKey : 'T' + }, + { + type : 'hbox', + widths : [ '45%', '55%' ], + children : + [ + { + id : 'id', + type : 'text', + label : editor.lang.common.id, + 'default' : '', + accessKey : 'I' + }, + { + id : 'enctype', + type : 'select', + label : editor.lang.form.encoding, + style : 'width:100%', + accessKey : 'E', + 'default' : '', + items : + [ + [ '' ], + [ 'text/plain' ], + [ 'multipart/form-data' ], + [ 'application/x-www-form-urlencoded' ] + ] + } + ] + }, + { + type : 'hbox', + widths : [ '45%', '55%' ], + children : + [ + { + id : 'target', + type : 'select', + label : editor.lang.common.target, + style : 'width:100%', + accessKey : 'M', + 'default' : '', + items : + [ + [ editor.lang.common.notSet, '' ], + [ editor.lang.common.targetNew, '_blank' ], + [ editor.lang.common.targetTop, '_top' ], + [ editor.lang.common.targetSelf, '_self' ], + [ editor.lang.common.targetParent, '_parent' ] + ] + }, + { + id : 'method', + type : 'select', + label : editor.lang.form.method, + accessKey : 'M', + 'default' : 'GET', + items : + [ + [ 'GET', 'get' ], + [ 'POST', 'post' ] + ] + } + ] + } + ] + } + ] + }; +}); diff --git a/_source/plugins/forms/dialogs/hiddenfield.js b/_source/plugins/forms/dialogs/hiddenfield.js new file mode 100644 index 0000000..ce63239 --- /dev/null +++ b/_source/plugins/forms/dialogs/hiddenfield.js @@ -0,0 +1,100 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add( 'hiddenfield', function( editor ) +{ + return { + title : editor.lang.hidden.title, + hiddenField : null, + minWidth : 350, + minHeight : 110, + onShow : function() + { + delete this.hiddenField; + + var editor = this.getParentEditor(), + selection = editor.getSelection(), + element = selection.getSelectedElement(); + + if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'hiddenfield' ) + { + this.hiddenField = element; + element = editor.restoreRealElement( this.hiddenField ); + this.setupContent( element ); + selection.selectElement( this.hiddenField ); + } + }, + onOk : function() + { + var name = this.getValueOf( 'info', '_cke_saved_name' ), + value = this.getValueOf( 'info', 'value' ), + editor = this.getParentEditor(), + element = CKEDITOR.env.ie && !( CKEDITOR.document.$.documentMode >= 8 ) ? + editor.document.createElement( '<input name="' + CKEDITOR.tools.htmlEncode( name ) + '">' ) + : editor.document.createElement( 'input' ); + + element.setAttribute( 'type', 'hidden' ); + this.commitContent( element ); + var fakeElement = editor.createFakeElement( element, 'cke_hidden', 'hiddenfield' ); + if ( !this.hiddenField ) + editor.insertElement( fakeElement ); + else + { + fakeElement.replace( this.hiddenField ); + editor.getSelection().selectElement( fakeElement ); + } + return true; + }, + contents : [ + { + id : 'info', + label : editor.lang.hidden.title, + title : editor.lang.hidden.title, + elements : [ + { + id : '_cke_saved_name', + type : 'text', + label : editor.lang.hidden.name, + 'default' : '', + accessKey : 'N', + setup : function( element ) + { + this.setValue( + element.data( 'cke-saved-name' ) || + element.getAttribute( 'name' ) || + '' ); + }, + commit : function( element ) + { + if ( this.getValue() ) + element.setAttribute( 'name', this.getValue() ); + else + { + element.removeAttribute( 'name' ); + } + } + }, + { + id : 'value', + type : 'text', + label : editor.lang.hidden.value, + 'default' : '', + accessKey : 'V', + setup : function( element ) + { + this.setValue( element.getAttribute( 'value' ) || '' ); + }, + commit : function( element ) + { + if ( this.getValue() ) + element.setAttribute( 'value', this.getValue() ); + else + element.removeAttribute( 'value' ); + } + } + ] + } + ] + }; +}); diff --git a/_source/plugins/forms/dialogs/radio.js b/_source/plugins/forms/dialogs/radio.js new file mode 100644 index 0000000..5b154aa --- /dev/null +++ b/_source/plugins/forms/dialogs/radio.js @@ -0,0 +1,135 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add( 'radio', function( editor ) +{ + return { + title : editor.lang.checkboxAndRadio.radioTitle, + minWidth : 350, + minHeight : 140, + onShow : function() + { + delete this.radioButton; + + var element = this.getParentEditor().getSelection().getSelectedElement(); + if ( element && element.getName() == 'input' && element.getAttribute( 'type' ) == 'radio' ) + { + this.radioButton = element; + this.setupContent( element ); + } + }, + onOk : function() + { + var editor, + element = this.radioButton, + isInsertMode = !element; + + if ( isInsertMode ) + { + editor = this.getParentEditor(); + element = editor.document.createElement( 'input' ); + element.setAttribute( 'type', 'radio' ); + } + + if ( isInsertMode ) + editor.insertElement( element ); + this.commitContent( { element : element } ); + }, + contents : [ + { + id : 'info', + label : editor.lang.checkboxAndRadio.radioTitle, + title : editor.lang.checkboxAndRadio.radioTitle, + elements : [ + { + id : 'name', + type : 'text', + label : editor.lang.common.name, + 'default' : '', + accessKey : 'N', + setup : function( element ) + { + this.setValue( + element.data( 'cke-saved-name' ) || + element.getAttribute( 'name' ) || + '' ); + }, + commit : function( data ) + { + var element = data.element; + + if ( this.getValue() ) + element.data( 'cke-saved-name', this.getValue() ); + else + { + element.data( 'cke-saved-name', false ); + element.removeAttribute( 'name' ); + } + } + }, + { + id : 'value', + type : 'text', + label : editor.lang.checkboxAndRadio.value, + 'default' : '', + accessKey : 'V', + setup : function( element ) + { + this.setValue( element.getAttribute( 'value' ) || '' ); + }, + commit : function( data ) + { + var element = data.element; + + if ( this.getValue() ) + element.setAttribute( 'value', this.getValue() ); + else + element.removeAttribute( 'value' ); + } + }, + { + id : 'checked', + type : 'checkbox', + label : editor.lang.checkboxAndRadio.selected, + 'default' : '', + accessKey : 'S', + value : "checked", + setup : function( element ) + { + this.setValue( element.getAttribute( 'checked' ) ); + }, + commit : function( data ) + { + var element = data.element; + + if ( !( CKEDITOR.env.ie || CKEDITOR.env.opera ) ) + { + if ( this.getValue() ) + element.setAttribute( 'checked', 'checked' ); + else + element.removeAttribute( 'checked' ); + } + else + { + var isElementChecked = element.getAttribute( 'checked' ); + var isChecked = !!this.getValue(); + + if ( isElementChecked != isChecked ) + { + var replace = CKEDITOR.dom.element.createFromHtml( '<input type="radio"' + + ( isChecked ? ' checked="checked"' : '' ) + + '></input>', editor.document ); + element.copyAttributes( replace, { type : 1, checked : 1 } ); + replace.replace( element ); + editor.getSelection().selectElement( replace ); + data.element = replace; + } + } + } + } + ] + } + ] + }; +}); diff --git a/_source/plugins/forms/dialogs/select.js b/_source/plugins/forms/dialogs/select.js new file mode 100644 index 0000000..aee101b --- /dev/null +++ b/_source/plugins/forms/dialogs/select.js @@ -0,0 +1,558 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add( 'select', function( editor ) +{ + // Add a new option to a SELECT object (combo or list). + function addOption( combo, optionText, optionValue, documentObject, index ) + { + combo = getSelect( combo ); + var oOption; + if ( documentObject ) + oOption = documentObject.createElement( "OPTION" ); + else + oOption = document.createElement( "OPTION" ); + + if ( combo && oOption && oOption.getName() == 'option' ) + { + if ( CKEDITOR.env.ie ) { + if ( !isNaN( parseInt( index, 10) ) ) + combo.$.options.add( oOption.$, index ); + else + combo.$.options.add( oOption.$ ); + + oOption.$.innerHTML = optionText.length > 0 ? optionText : ''; + oOption.$.value = optionValue; + } + else + { + if ( index !== null && index < combo.getChildCount() ) + combo.getChild( index < 0 ? 0 : index ).insertBeforeMe( oOption ); + else + combo.append( oOption ); + + oOption.setText( optionText.length > 0 ? optionText : '' ); + oOption.setValue( optionValue ); + } + } + else + return false; + + return oOption; + } + // Remove all selected options from a SELECT object. + function removeSelectedOptions( combo ) + { + combo = getSelect( combo ); + + // Save the selected index + var iSelectedIndex = getSelectedIndex( combo ); + + // Remove all selected options. + for ( var i = combo.getChildren().count() - 1 ; i >= 0 ; i-- ) + { + if ( combo.getChild( i ).$.selected ) + combo.getChild( i ).remove(); + } + + // Reset the selection based on the original selected index. + setSelectedIndex( combo, iSelectedIndex ); + } + //Modify option from a SELECT object. + function modifyOption( combo, index, title, value ) + { + combo = getSelect( combo ); + if ( index < 0 ) + return false; + var child = combo.getChild( index ); + child.setText( title ); + child.setValue( value ); + return child; + } + function removeAllOptions( combo ) + { + combo = getSelect( combo ); + while ( combo.getChild( 0 ) && combo.getChild( 0 ).remove() ) + { /*jsl:pass*/ } + } + // Moves the selected option by a number of steps (also negative). + function changeOptionPosition( combo, steps, documentObject ) + { + combo = getSelect( combo ); + var iActualIndex = getSelectedIndex( combo ); + if ( iActualIndex < 0 ) + return false; + + var iFinalIndex = iActualIndex + steps; + iFinalIndex = ( iFinalIndex < 0 ) ? 0 : iFinalIndex; + iFinalIndex = ( iFinalIndex >= combo.getChildCount() ) ? combo.getChildCount() - 1 : iFinalIndex; + + if ( iActualIndex == iFinalIndex ) + return false; + + var oOption = combo.getChild( iActualIndex ), + sText = oOption.getText(), + sValue = oOption.getValue(); + + oOption.remove(); + + oOption = addOption( combo, sText, sValue, ( !documentObject ) ? null : documentObject, iFinalIndex ); + setSelectedIndex( combo, iFinalIndex ); + return oOption; + } + function getSelectedIndex( combo ) + { + combo = getSelect( combo ); + return combo ? combo.$.selectedIndex : -1; + } + function setSelectedIndex( combo, index ) + { + combo = getSelect( combo ); + if ( index < 0 ) + return null; + var count = combo.getChildren().count(); + combo.$.selectedIndex = ( index >= count ) ? ( count - 1 ) : index; + return combo; + } + function getOptions( combo ) + { + combo = getSelect( combo ); + return combo ? combo.getChildren() : false; + } + function getSelect( obj ) + { + if ( obj && obj.domId && obj.getInputElement().$ ) // Dialog element. + return obj.getInputElement(); + else if ( obj && obj.$ ) + return obj; + return false; + } + + return { + title : editor.lang.select.title, + minWidth : CKEDITOR.env.ie ? 460 : 395, + minHeight : CKEDITOR.env.ie ? 320 : 300, + onShow : function() + { + delete this.selectBox; + this.setupContent( 'clear' ); + var element = this.getParentEditor().getSelection().getSelectedElement(); + if ( element && element.getName() == "select" ) + { + this.selectBox = element; + this.setupContent( element.getName(), element ); + + // Load Options into dialog. + var objOptions = getOptions( element ); + for ( var i = 0 ; i < objOptions.count() ; i++ ) + this.setupContent( 'option', objOptions.getItem( i ) ); + } + }, + onOk : function() + { + var editor = this.getParentEditor(), + element = this.selectBox, + isInsertMode = !element; + + if ( isInsertMode ) + element = editor.document.createElement( 'select' ); + this.commitContent( element ); + + if ( isInsertMode ) + { + editor.insertElement( element ); + if ( CKEDITOR.env.ie ) + { + var sel = editor.getSelection(), + bms = sel.createBookmarks(); + setTimeout(function() + { + sel.selectBookmarks( bms ); + }, 0 ); + } + } + }, + contents : [ + { + id : 'info', + label : editor.lang.select.selectInfo, + title : editor.lang.select.selectInfo, + accessKey : '', + elements : [ + { + id : 'txtName', + type : 'text', + widths : [ '25%','75%' ], + labelLayout : 'horizontal', + label : editor.lang.common.name, + 'default' : '', + accessKey : 'N', + style : 'width:350px', + setup : function( name, element ) + { + if ( name == 'clear' ) + this.setValue( this[ 'default' ] || '' ); + else if ( name == 'select' ) + { + this.setValue( + element.data( 'cke-saved-name' ) || + element.getAttribute( 'name' ) || + '' ); + } + }, + commit : function( element ) + { + if ( this.getValue() ) + element.data( 'cke-saved-name', this.getValue() ); + else + { + element.data( 'cke-saved-name', false ); + element.removeAttribute( 'name' ); + } + } + }, + { + id : 'txtValue', + type : 'text', + widths : [ '25%','75%' ], + labelLayout : 'horizontal', + label : editor.lang.select.value, + style : 'width:350px', + 'default' : '', + className : 'cke_disabled', + onLoad : function() + { + this.getInputElement().setAttribute( 'readOnly', true ); + }, + setup : function( name, element ) + { + if ( name == 'clear' ) + this.setValue( '' ); + else if ( name == 'option' && element.getAttribute( 'selected' ) ) + this.setValue( element.$.value ); + } + }, + { + type : 'hbox', + widths : [ '175px', '170px' ], + children : + [ + { + id : 'txtSize', + type : 'text', + labelLayout : 'horizontal', + label : editor.lang.select.size, + 'default' : '', + accessKey : 'S', + style : 'width:175px', + validate: function() + { + var func = CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed ); + return ( ( this.getValue() === '' ) || func.apply( this ) ); + }, + setup : function( name, element ) + { + if ( name == 'select' ) + this.setValue( element.getAttribute( 'size' ) || '' ); + if ( CKEDITOR.env.webkit ) + this.getInputElement().setStyle( 'width', '86px' ); + }, + commit : function( element ) + { + if ( this.getValue() ) + element.setAttribute( 'size', this.getValue() ); + else + element.removeAttribute( 'size' ); + } + }, + { + type : 'html', + html : '<span>' + CKEDITOR.tools.htmlEncode( editor.lang.select.lines ) + '</span>' + } + ] + }, + { + type : 'html', + html : '<span>' + CKEDITOR.tools.htmlEncode( editor.lang.select.opAvail ) + '</span>' + }, + { + type : 'hbox', + widths : [ '115px', '115px' ,'100px' ], + children : + [ + { + type : 'vbox', + children : + [ + { + id : 'txtOptName', + type : 'text', + label : editor.lang.select.opText, + style : 'width:115px', + setup : function( name, element ) + { + if ( name == 'clear' ) + this.setValue( "" ); + } + }, + { + type : 'select', + id : 'cmbName', + label : '', + title : '', + size : 5, + style : 'width:115px;height:75px', + items : [], + onChange : function() + { + var dialog = this.getDialog(), + values = dialog.getContentElement( 'info', 'cmbValue' ), + optName = dialog.getContentElement( 'info', 'txtOptName' ), + optValue = dialog.getContentElement( 'info', 'txtOptValue' ), + iIndex = getSelectedIndex( this ); + + setSelectedIndex( values, iIndex ); + optName.setValue( this.getValue() ); + optValue.setValue( values.getValue() ); + }, + setup : function( name, element ) + { + if ( name == 'clear' ) + removeAllOptions( this ); + else if ( name == 'option' ) + addOption( this, element.getText(), element.getText(), + this.getDialog().getParentEditor().document ); + }, + commit : function( element ) + { + var dialog = this.getDialog(), + optionsNames = getOptions( this ), + optionsValues = getOptions( dialog.getContentElement( 'info', 'cmbValue' ) ), + selectValue = dialog.getContentElement( 'info', 'txtValue' ).getValue(); + + removeAllOptions( element ); + + for ( var i = 0 ; i < optionsNames.count() ; i++ ) + { + var oOption = addOption( element, optionsNames.getItem( i ).getValue(), + optionsValues.getItem( i ).getValue(), dialog.getParentEditor().document ); + if ( optionsValues.getItem( i ).getValue() == selectValue ) + { + oOption.setAttribute( 'selected', 'selected' ); + oOption.selected = true; + } + } + } + } + ] + }, + { + type : 'vbox', + children : + [ + { + id : 'txtOptValue', + type : 'text', + label : editor.lang.select.opValue, + style : 'width:115px', + setup : function( name, element ) + { + if ( name == 'clear' ) + this.setValue( "" ); + } + }, + { + type : 'select', + id : 'cmbValue', + label : '', + size : 5, + style : 'width:115px;height:75px', + items : [], + onChange : function() + { + var dialog = this.getDialog(), + names = dialog.getContentElement( 'info', 'cmbName' ), + optName = dialog.getContentElement( 'info', 'txtOptName' ), + optValue = dialog.getContentElement( 'info', 'txtOptValue' ), + iIndex = getSelectedIndex( this ); + + setSelectedIndex( names, iIndex ); + optName.setValue( names.getValue() ); + optValue.setValue( this.getValue() ); + }, + setup : function( name, element ) + { + if ( name == 'clear' ) + removeAllOptions( this ); + else if ( name == 'option' ) + { + var oValue = element.getValue(); + addOption( this, oValue, oValue, + this.getDialog().getParentEditor().document ); + if ( element.getAttribute( 'selected' ) == 'selected' ) + this.getDialog().getContentElement( 'info', 'txtValue' ).setValue( oValue ); + } + } + } + ] + }, + { + type : 'vbox', + padding : 5, + children : + [ + { + type : 'button', + id : 'btnAdd', + style : '', + label : editor.lang.select.btnAdd, + title : editor.lang.select.btnAdd, + style : 'width:100%;', + onClick : function() + { + //Add new option. + var dialog = this.getDialog(), + parentEditor = dialog.getParentEditor(), + optName = dialog.getContentElement( 'info', 'txtOptName' ), + optValue = dialog.getContentElement( 'info', 'txtOptValue' ), + names = dialog.getContentElement( 'info', 'cmbName' ), + values = dialog.getContentElement( 'info', 'cmbValue' ); + + addOption(names, optName.getValue(), optName.getValue(), dialog.getParentEditor().document ); + addOption(values, optValue.getValue(), optValue.getValue(), dialog.getParentEditor().document ); + + optName.setValue( "" ); + optValue.setValue( "" ); + } + }, + { + type : 'button', + id : 'btnModify', + label : editor.lang.select.btnModify, + title : editor.lang.select.btnModify, + style : 'width:100%;', + onClick : function() + { + //Modify selected option. + var dialog = this.getDialog(), + optName = dialog.getContentElement( 'info', 'txtOptName' ), + optValue = dialog.getContentElement( 'info', 'txtOptValue' ), + names = dialog.getContentElement( 'info', 'cmbName' ), + values = dialog.getContentElement( 'info', 'cmbValue' ), + iIndex = getSelectedIndex( names ); + + if ( iIndex >= 0 ) + { + modifyOption( names, iIndex, optName.getValue(), optName.getValue() ); + modifyOption( values, iIndex, optValue.getValue(), optValue.getValue() ); + } + } + }, + { + type : 'button', + id : 'btnUp', + style : 'width:100%;', + label : editor.lang.select.btnUp, + title : editor.lang.select.btnUp, + onClick : function() + { + //Move up. + var dialog = this.getDialog(), + names = dialog.getContentElement( 'info', 'cmbName' ), + values = dialog.getContentElement( 'info', 'cmbValue' ); + + changeOptionPosition( names, -1, dialog.getParentEditor().document ); + changeOptionPosition( values, -1, dialog.getParentEditor().document ); + } + }, + { + type : 'button', + id : 'btnDown', + style : 'width:100%;', + label : editor.lang.select.btnDown, + title : editor.lang.select.btnDown, + onClick : function() + { + //Move down. + var dialog = this.getDialog(), + names = dialog.getContentElement( 'info', 'cmbName' ), + values = dialog.getContentElement( 'info', 'cmbValue' ); + + changeOptionPosition( names, 1, dialog.getParentEditor().document ); + changeOptionPosition( values, 1, dialog.getParentEditor().document ); + } + } + ] + } + ] + }, + { + type : 'hbox', + widths : [ '40%', '20%', '40%' ], + children : + [ + { + type : 'button', + id : 'btnSetValue', + label : editor.lang.select.btnSetValue, + title : editor.lang.select.btnSetValue, + onClick : function() + { + //Set as default value. + var dialog = this.getDialog(), + values = dialog.getContentElement( 'info', 'cmbValue' ), + txtValue = dialog.getContentElement( 'info', 'txtValue' ); + txtValue.setValue( values.getValue() ); + } + }, + { + type : 'button', + id : 'btnDelete', + label : editor.lang.select.btnDelete, + title : editor.lang.select.btnDelete, + onClick : function() + { + // Delete option. + var dialog = this.getDialog(), + names = dialog.getContentElement( 'info', 'cmbName' ), + values = dialog.getContentElement( 'info', 'cmbValue' ), + optName = dialog.getContentElement( 'info', 'txtOptName' ), + optValue = dialog.getContentElement( 'info', 'txtOptValue' ); + + removeSelectedOptions( names ); + removeSelectedOptions( values ); + + optName.setValue( "" ); + optValue.setValue( "" ); + } + }, + { + id : 'chkMulti', + type : 'checkbox', + label : editor.lang.select.chkMulti, + 'default' : '', + accessKey : 'M', + value : "checked", + setup : function( name, element ) + { + if ( name == 'select' ) + this.setValue( element.getAttribute( 'multiple' ) ); + if ( CKEDITOR.env.webkit ) + this.getElement().getParent().setStyle( 'vertical-align', 'middle' ); + }, + commit : function( element ) + { + if ( this.getValue() ) + element.setAttribute( 'multiple', this.getValue() ); + else + element.removeAttribute( 'multiple' ); + } + } + ] + } + ] + } + ] + }; +}); diff --git a/_source/plugins/forms/dialogs/textarea.js b/_source/plugins/forms/dialogs/textarea.js new file mode 100644 index 0000000..df29235 --- /dev/null +++ b/_source/plugins/forms/dialogs/textarea.js @@ -0,0 +1,114 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add( 'textarea', function( editor ) +{ + return { + title : editor.lang.textarea.title, + minWidth : 350, + minHeight : 150, + onShow : function() + { + delete this.textarea; + + var element = this.getParentEditor().getSelection().getSelectedElement(); + if ( element && element.getName() == "textarea" ) + { + this.textarea = element; + this.setupContent( element ); + } + }, + onOk : function() + { + var editor, + element = this.textarea, + isInsertMode = !element; + + if ( isInsertMode ) + { + editor = this.getParentEditor(); + element = editor.document.createElement( 'textarea' ); + } + this.commitContent( element ); + + if ( isInsertMode ) + editor.insertElement( element ); + }, + contents : [ + { + id : 'info', + label : editor.lang.textarea.title, + title : editor.lang.textarea.title, + elements : [ + { + id : '_cke_saved_name', + type : 'text', + label : editor.lang.common.name, + 'default' : '', + accessKey : 'N', + setup : function( element ) + { + this.setValue( + element.data( 'cke-saved-name' ) || + element.getAttribute( 'name' ) || + '' ); + }, + commit : function( element ) + { + if ( this.getValue() ) + element.data( 'cke-saved-name', this.getValue() ); + else + { + element.data( 'cke-saved-name', false ); + element.removeAttribute( 'name' ); + } + } + }, + { + id : 'cols', + type : 'text', + label : editor.lang.textarea.cols, + 'default' : '', + accessKey : 'C', + style : 'width:50px', + validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed ), + setup : function( element ) + { + var value = element.hasAttribute( 'cols' ) && element.getAttribute( 'cols' ); + this.setValue( value || '' ); + }, + commit : function( element ) + { + if ( this.getValue() ) + element.setAttribute( 'cols', this.getValue() ); + else + element.removeAttribute( 'cols' ); + } + }, + { + id : 'rows', + type : 'text', + label : editor.lang.textarea.rows, + 'default' : '', + accessKey : 'R', + style : 'width:50px', + validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed ), + setup : function( element ) + { + var value = element.hasAttribute( 'rows' ) && element.getAttribute( 'rows' ); + this.setValue( value || '' ); + }, + commit : function( element ) + { + if ( this.getValue() ) + element.setAttribute( 'rows', this.getValue() ); + else + element.removeAttribute( 'rows' ); + } + } + ] + } + ] + }; +}); diff --git a/_source/plugins/forms/dialogs/textfield.js b/_source/plugins/forms/dialogs/textfield.js new file mode 100644 index 0000000..cc250de --- /dev/null +++ b/_source/plugins/forms/dialogs/textfield.js @@ -0,0 +1,199 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add( 'textfield', function( editor ) +{ + var autoAttributes = + { + value : 1, + size : 1, + maxLength : 1 + }; + + var acceptedTypes = + { + text : 1, + password : 1 + }; + + return { + title : editor.lang.textfield.title, + minWidth : 350, + minHeight : 150, + onShow : function() + { + delete this.textField; + + var element = this.getParentEditor().getSelection().getSelectedElement(); + if ( element && element.getName() == "input" && + ( acceptedTypes[ element.getAttribute( 'type' ) ] || !element.getAttribute( 'type' ) ) ) + { + this.textField = element; + this.setupContent( element ); + } + }, + onOk : function() + { + var editor, + element = this.textField, + isInsertMode = !element; + + if ( isInsertMode ) + { + editor = this.getParentEditor(); + element = editor.document.createElement( 'input' ); + element.setAttribute( 'type', 'text' ); + } + + if ( isInsertMode ) + editor.insertElement( element ); + this.commitContent( { element : element } ); + }, + onLoad : function() + { + var autoSetup = function( element ) + { + var value = element.hasAttribute( this.id ) && element.getAttribute( this.id ); + this.setValue( value || '' ); + }; + + var autoCommit = function( data ) + { + var element = data.element; + var value = this.getValue(); + + if ( value ) + element.setAttribute( this.id, value ); + else + element.removeAttribute( this.id ); + }; + + this.foreach( function( contentObj ) + { + if ( autoAttributes[ contentObj.id ] ) + { + contentObj.setup = autoSetup; + contentObj.commit = autoCommit; + } + } ); + }, + contents : [ + { + id : 'info', + label : editor.lang.textfield.title, + title : editor.lang.textfield.title, + elements : [ + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + id : '_cke_saved_name', + type : 'text', + label : editor.lang.textfield.name, + 'default' : '', + accessKey : 'N', + setup : function( element ) + { + this.setValue( + element.data( 'cke-saved-name' ) || + element.getAttribute( 'name' ) || + '' ); + }, + commit : function( data ) + { + var element = data.element; + + if ( this.getValue() ) + element.data( 'cke-saved-name', this.getValue() ); + else + { + element.data( 'cke-saved-name', false ); + element.removeAttribute( 'name' ); + } + } + }, + { + id : 'value', + type : 'text', + label : editor.lang.textfield.value, + 'default' : '', + accessKey : 'V' + } + ] + }, + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + id : 'size', + type : 'text', + label : editor.lang.textfield.charWidth, + 'default' : '', + accessKey : 'C', + style : 'width:50px', + validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed ) + }, + { + id : 'maxLength', + type : 'text', + label : editor.lang.textfield.maxChars, + 'default' : '', + accessKey : 'M', + style : 'width:50px', + validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed ) + } + ], + onLoad : function() + { + // Repaint the style for IE7 (#6068) + if ( CKEDITOR.env.ie7Compat ) + this.getElement().setStyle( 'zoom', '100%' ); + } + }, + { + id : 'type', + type : 'select', + label : editor.lang.textfield.type, + 'default' : 'text', + accessKey : 'M', + items : + [ + [ editor.lang.textfield.typeText, 'text' ], + [ editor.lang.textfield.typePass, 'password' ] + ], + setup : function( element ) + { + this.setValue( element.getAttribute( 'type' ) ); + }, + commit : function( data ) + { + var element = data.element; + + if ( CKEDITOR.env.ie ) + { + var elementType = element.getAttribute( 'type' ); + var myType = this.getValue(); + + if ( elementType != myType ) + { + var replace = CKEDITOR.dom.element.createFromHtml( '<input type="' + myType + '"></input>', editor.document ); + element.copyAttributes( replace, { type : 1 } ); + replace.replace( element ); + editor.getSelection().selectElement( replace ); + data.element = replace; + } + } + else + element.setAttribute( 'type', this.getValue() ); + } + } + ] + } + ] + }; +}); diff --git a/_source/plugins/forms/images/hiddenfield.gif b/_source/plugins/forms/images/hiddenfield.gif new file mode 100644 index 0000000000000000000000000000000000000000..953f643b60032c36ac92590950577c336f133512 GIT binary patch literal 105 zcmZ?wbhEHb6lM@&n8?8JABg_{Z)j*>U|`SzVg`^n1Cx_W&+?fM`5zlEy44+e;LbT+ zkH8h7N-kQ@I;_|<mfqfeZR_h9DLc;ZID7hMoK>Q}>&=&Wsxvt_U!{00zr0#2QD@sN HCI)K&$9F25 literal 0 HcmV?d00001 diff --git a/_source/plugins/forms/plugin.js b/_source/plugins/forms/plugin.js new file mode 100644 index 0000000..5caac87 --- /dev/null +++ b/_source/plugins/forms/plugin.js @@ -0,0 +1,288 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Forms Plugin + */ + +CKEDITOR.plugins.add( 'forms', +{ + init : function( editor ) + { + var lang = editor.lang; + + editor.addCss( + 'form' + + '{' + + 'border: 1px dotted #FF0000;' + + 'padding: 2px;' + + '}\n' ); + + editor.addCss( + 'img.cke_hidden' + + '{' + + 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/hiddenfield.gif' ) + ');' + + 'background-position: center center;' + + 'background-repeat: no-repeat;' + + 'border: 1px solid #a9a9a9;' + + 'width: 16px !important;' + + 'height: 16px !important;' + + '}' ); + + // All buttons use the same code to register. So, to avoid + // duplications, let's use this tool function. + var addButtonCommand = function( buttonName, commandName, dialogFile ) + { + editor.addCommand( commandName, new CKEDITOR.dialogCommand( commandName ) ); + + editor.ui.addButton( buttonName, + { + label : lang.common[ buttonName.charAt(0).toLowerCase() + buttonName.slice(1) ], + command : commandName + }); + CKEDITOR.dialog.add( commandName, dialogFile ); + }; + + var dialogPath = this.path + 'dialogs/'; + addButtonCommand( 'Form', 'form', dialogPath + 'form.js' ); + addButtonCommand( 'Checkbox', 'checkbox', dialogPath + 'checkbox.js' ); + addButtonCommand( 'Radio', 'radio', dialogPath + 'radio.js' ); + addButtonCommand( 'TextField', 'textfield', dialogPath + 'textfield.js' ); + addButtonCommand( 'Textarea', 'textarea', dialogPath + 'textarea.js' ); + addButtonCommand( 'Select', 'select', dialogPath + 'select.js' ); + addButtonCommand( 'Button', 'button', dialogPath + 'button.js' ); + addButtonCommand( 'ImageButton', 'imagebutton', CKEDITOR.plugins.getPath('image') + 'dialogs/image.js' ); + addButtonCommand( 'HiddenField', 'hiddenfield', dialogPath + 'hiddenfield.js' ); + + // If the "menu" plugin is loaded, register the menu items. + if ( editor.addMenuItems ) + { + editor.addMenuItems( + { + form : + { + label : lang.form.menu, + command : 'form', + group : 'form' + }, + + checkbox : + { + label : lang.checkboxAndRadio.checkboxTitle, + command : 'checkbox', + group : 'checkbox' + }, + + radio : + { + label : lang.checkboxAndRadio.radioTitle, + command : 'radio', + group : 'radio' + }, + + textfield : + { + label : lang.textfield.title, + command : 'textfield', + group : 'textfield' + }, + + hiddenfield : + { + label : lang.hidden.title, + command : 'hiddenfield', + group : 'hiddenfield' + }, + + imagebutton : + { + label : lang.image.titleButton, + command : 'imagebutton', + group : 'imagebutton' + }, + + button : + { + label : lang.button.title, + command : 'button', + group : 'button' + }, + + select : + { + label : lang.select.title, + command : 'select', + group : 'select' + }, + + textarea : + { + label : lang.textarea.title, + command : 'textarea', + group : 'textarea' + } + }); + } + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element ) + { + if ( element && element.hasAscendant( 'form', true ) && !element.isReadOnly() ) + return { form : CKEDITOR.TRISTATE_OFF }; + }); + + editor.contextMenu.addListener( function( element ) + { + if ( element && !element.isReadOnly() ) + { + var name = element.getName(); + + if ( name == 'select' ) + return { select : CKEDITOR.TRISTATE_OFF }; + + if ( name == 'textarea' ) + return { textarea : CKEDITOR.TRISTATE_OFF }; + + if ( name == 'input' ) + { + switch( element.getAttribute( 'type' ) ) + { + case 'button' : + case 'submit' : + case 'reset' : + return { button : CKEDITOR.TRISTATE_OFF }; + + case 'checkbox' : + return { checkbox : CKEDITOR.TRISTATE_OFF }; + + case 'radio' : + return { radio : CKEDITOR.TRISTATE_OFF }; + + case 'image' : + return { imagebutton : CKEDITOR.TRISTATE_OFF }; + + default : + return { textfield : CKEDITOR.TRISTATE_OFF }; + } + } + + if ( name == 'img' && element.data( 'cke-real-element-type' ) == 'hiddenfield' ) + return { hiddenfield : CKEDITOR.TRISTATE_OFF }; + } + }); + } + + editor.on( 'doubleclick', function( evt ) + { + var element = evt.data.element; + + if ( element.is( 'form' ) ) + evt.data.dialog = 'form'; + else if ( element.is( 'select' ) ) + evt.data.dialog = 'select'; + else if ( element.is( 'textarea' ) ) + evt.data.dialog = 'textarea'; + else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'hiddenfield' ) + evt.data.dialog = 'hiddenfield'; + else if ( element.is( 'input' ) ) + { + switch ( element.getAttribute( 'type' ) ) + { + case 'button' : + case 'submit' : + case 'reset' : + evt.data.dialog = 'button'; + break; + case 'checkbox' : + evt.data.dialog = 'checkbox'; + break; + case 'radio' : + evt.data.dialog = 'radio'; + break; + case 'image' : + evt.data.dialog = 'imagebutton'; + break; + default : + evt.data.dialog = 'textfield'; + break; + } + } + }); + }, + + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + htmlFilter = dataProcessor && dataProcessor.htmlFilter, + dataFilter = dataProcessor && dataProcessor.dataFilter; + + // Cleanup certain IE form elements default values. + if ( CKEDITOR.env.ie ) + { + htmlFilter && htmlFilter.addRules( + { + elements : + { + input : function( input ) + { + var attrs = input.attributes, + type = attrs.type; + // Old IEs don't provide type for Text inputs #5522 + if ( !type ) + attrs.type = 'text'; + if ( type == 'checkbox' || type == 'radio' ) + attrs.value == 'on' && delete attrs.value; + } + } + } ); + } + + if ( dataFilter ) + { + dataFilter.addRules( + { + elements : + { + input : function( element ) + { + if ( element.attributes.type == 'hidden' ) + return editor.createFakeParserElement( element, 'cke_hidden', 'hiddenfield' ); + } + } + } ); + } + }, + requires : [ 'image', 'fakeobjects' ] +} ); + +if ( CKEDITOR.env.ie ) +{ + CKEDITOR.dom.element.prototype.hasAttribute = CKEDITOR.tools.override( CKEDITOR.dom.element.prototype.hasAttribute, + function( original ) + { + return function( name ) + { + var $attr = this.$.attributes.getNamedItem( name ); + + if ( this.getName() == 'input' ) + { + switch ( name ) + { + case 'class' : + return this.$.className.length > 0; + case 'checked' : + return !!this.$.checked; + case 'value' : + var type = this.getAttribute( 'type' ); + return type == 'checkbox' || type == 'radio' ? this.$.value != 'on' : this.$.value; + } + } + + return original.apply( this, arguments ); + }; + }); +} diff --git a/_source/plugins/horizontalrule/plugin.js b/_source/plugins/horizontalrule/plugin.js new file mode 100644 index 0000000..3eac319 --- /dev/null +++ b/_source/plugins/horizontalrule/plugin.js @@ -0,0 +1,48 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Horizontal Rule plugin. + */ + +(function() +{ + var horizontalruleCmd = + { + canUndo : false, // The undo snapshot will be handled by 'insertElement'. + exec : function( editor ) + { + var hr = editor.document.createElement( 'hr' ), + range = new CKEDITOR.dom.range( editor.document ); + + editor.insertElement( hr ); + + // If there's nothing or a non-editable block followed by, establish a new paragraph + // to make sure cursor is not trapped. + range.moveToPosition( hr, CKEDITOR.POSITION_AFTER_END ); + var next = hr.getNext(); + if ( !next || next.type == CKEDITOR.NODE_ELEMENT && !next.isEditable() ) + range.fixBlock( true, editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ); + + range.select(); + } + }; + + var pluginName = 'horizontalrule'; + + // Register a plugin named "horizontalrule". + CKEDITOR.plugins.add( pluginName, + { + init : function( editor ) + { + editor.addCommand( pluginName, horizontalruleCmd ); + editor.ui.addButton( 'HorizontalRule', + { + label : editor.lang.horizontalrule, + command : pluginName + }); + } + }); +})(); diff --git a/_source/plugins/htmldataprocessor/plugin.js b/_source/plugins/htmldataprocessor/plugin.js new file mode 100644 index 0000000..ad6fa47 --- /dev/null +++ b/_source/plugins/htmldataprocessor/plugin.js @@ -0,0 +1,595 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + // Regex to scan for at the end of blocks, which are actually placeholders. + // Safari transforms the to \xa0. (#4172) + var tailNbspRegex = /^[\t\r\n ]*(?: |\xa0)$/; + + var protectedSourceMarker = '{cke_protected}'; + + // Return the last non-space child node of the block (#4344). + function lastNoneSpaceChild( block ) + { + var lastIndex = block.children.length, + last = block.children[ lastIndex - 1 ]; + while ( last && last.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim( last.value ) ) + last = block.children[ --lastIndex ]; + return last; + } + + function trimFillers( block, fromSource ) + { + // If the current node is a block, and if we're converting from source or + // we're not in IE then search for and remove any tailing BR node. + // + // Also, any at the end of blocks are fillers, remove them as well. + // (#2886) + var children = block.children, lastChild = lastNoneSpaceChild( block ); + if ( lastChild ) + { + if ( ( fromSource || !CKEDITOR.env.ie ) && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br' ) + children.pop(); + if ( lastChild.type == CKEDITOR.NODE_TEXT && tailNbspRegex.test( lastChild.value ) ) + children.pop(); + } + } + + function blockNeedsExtension( block, fromSource, extendEmptyBlock ) + { + if( !fromSource && ( !extendEmptyBlock || + typeof extendEmptyBlock == 'function' && ( extendEmptyBlock( block ) === false ) ) ) + return false; + + // 1. For IE version >=8, empty blocks are displayed correctly themself in wysiwiyg; + // 2. For the rest, at least table cell and list item need no filler space. + // (#6248) + if ( fromSource && CKEDITOR.env.ie && + ( document.documentMode > 7 + || block.name in CKEDITOR.dtd.tr + || block.name in CKEDITOR.dtd.$listItem ) ) + return false; + + var lastChild = lastNoneSpaceChild( block ); + + return !lastChild || lastChild && + ( lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br' + // Some of the controls in form needs extension too, + // to move cursor at the end of the form. (#4791) + || block.name == 'form' && lastChild.name == 'input' ); + } + + function getBlockExtension( isOutput, emptyBlockFiller ) + { + return function( node ) + { + trimFillers( node, !isOutput ); + + if ( blockNeedsExtension( node, !isOutput, emptyBlockFiller ) ) + { + if ( isOutput || CKEDITOR.env.ie ) + node.add( new CKEDITOR.htmlParser.text( '\xa0' ) ); + else + node.add( new CKEDITOR.htmlParser.element( 'br', {} ) ); + } + }; + } + + var dtd = CKEDITOR.dtd; + + // Define orders of table elements. + var tableOrder = [ 'caption', 'colgroup', 'col', 'thead', 'tfoot', 'tbody' ]; + + // Find out the list of block-like tags that can contain <br>. + var blockLikeTags = CKEDITOR.tools.extend( {}, dtd.$block, dtd.$listItem, dtd.$tableContent ); + for ( var i in blockLikeTags ) + { + if ( ! ( 'br' in dtd[i] ) ) + delete blockLikeTags[i]; + } + // We just avoid filler in <pre> right now. + // TODO: Support filler for <pre>, line break is also occupy line height. + delete blockLikeTags.pre; + var defaultDataFilterRules = + { + elements : {}, + attributeNames : + [ + // Event attributes (onXYZ) must not be directly set. They can become + // active in the editing area (IE|WebKit). + [ ( /^on/ ), 'data-cke-pa-on' ] + ] + }; + + var defaultDataBlockFilterRules = { elements : {} }; + + for ( i in blockLikeTags ) + defaultDataBlockFilterRules.elements[ i ] = getBlockExtension(); + + var defaultHtmlFilterRules = + { + elementNames : + [ + // Remove the "cke:" namespace prefix. + [ ( /^cke:/ ), '' ], + + // Ignore <?xml:namespace> tags. + [ ( /^\?xml:namespace$/ ), '' ] + ], + + attributeNames : + [ + // Attributes saved for changes and protected attributes. + [ ( /^data-cke-(saved|pa)-/ ), '' ], + + // All "data-cke-" attributes are to be ignored. + [ ( /^data-cke-.*/ ), '' ], + + [ 'hidefocus', '' ] + ], + + elements : + { + $ : function( element ) + { + var attribs = element.attributes; + + if ( attribs ) + { + // Elements marked as temporary are to be ignored. + if ( attribs[ 'data-cke-temp' ] ) + return false; + + // Remove duplicated attributes - #3789. + var attributeNames = [ 'name', 'href', 'src' ], + savedAttributeName; + for ( var i = 0 ; i < attributeNames.length ; i++ ) + { + savedAttributeName = 'data-cke-saved-' + attributeNames[ i ]; + savedAttributeName in attribs && ( delete attribs[ attributeNames[ i ] ] ); + } + } + + return element; + }, + + // The contents of table should be in correct order (#4809). + table : function( element ) + { + var children = element.children; + children.sort( function ( node1, node2 ) + { + return node1.type == CKEDITOR.NODE_ELEMENT && node2.type == node1.type ? + CKEDITOR.tools.indexOf( tableOrder, node1.name ) > CKEDITOR.tools.indexOf( tableOrder, node2.name ) ? 1 : -1 : 0; + } ); + }, + + embed : function( element ) + { + var parent = element.parent; + + // If the <embed> is child of a <object>, copy the width + // and height attributes from it. + if ( parent && parent.name == 'object' ) + { + var parentWidth = parent.attributes.width, + parentHeight = parent.attributes.height; + parentWidth && ( element.attributes.width = parentWidth ); + parentHeight && ( element.attributes.height = parentHeight ); + } + }, + // Restore param elements into self-closing. + param : function( param ) + { + param.children = []; + param.isEmpty = true; + return param; + }, + + // Remove empty link but not empty anchor.(#3829) + a : function( element ) + { + if ( !( element.children.length || + element.attributes.name || + element.attributes[ 'data-cke-saved-name' ] ) ) + { + return false; + } + }, + + // Remove dummy span in webkit. + span: function( element ) + { + if ( element.attributes[ 'class' ] == 'Apple-style-span' ) + delete element.name; + }, + + // Empty <pre> in IE is reported with filler node ( ). + pre : function( element ) { CKEDITOR.env.ie && trimFillers( element ); }, + + html : function( element ) + { + delete element.attributes.contenteditable; + delete element.attributes[ 'class' ]; + }, + + body : function( element ) + { + delete element.attributes.spellcheck; + delete element.attributes.contenteditable; + }, + + style : function( element ) + { + var child = element.children[ 0 ]; + child && child.value && ( child.value = CKEDITOR.tools.trim( child.value )); + + if ( !element.attributes.type ) + element.attributes.type = 'text/css'; + }, + + title : function( element ) + { + var titleText = element.children[ 0 ]; + titleText && ( titleText.value = element.attributes[ 'data-cke-title' ] || '' ); + } + }, + + attributes : + { + 'class' : function( value, element ) + { + // Remove all class names starting with "cke_". + return CKEDITOR.tools.ltrim( value.replace( /(?:^|\s+)cke_[^\s]*/g, '' ) ) || false; + } + } + }; + + if ( CKEDITOR.env.ie ) + { + // IE outputs style attribute in capital letters. We should convert + // them back to lower case, while not hurting the values (#5930) + defaultHtmlFilterRules.attributes.style = function( value, element ) + { + return value.replace( /(^|;)([^\:]+)/g, function( match ) + { + return match.toLowerCase(); + }); + }; + } + + function protectReadOnly( element ) + { + var attrs = element.attributes; + + // We should flag that the element was locked by our code so + // it'll be editable by the editor functions (#6046). + if ( attrs.contenteditable != "false" ) + attrs[ 'data-cke-editable' ] = attrs.contenteditable ? 'true' : 1; + + attrs.contenteditable = "false"; + } + function unprotectReadyOnly( element ) + { + var attrs = element.attributes; + switch( attrs[ 'data-cke-editable' ] ) + { + case 'true': attrs.contenteditable = 'true'; break; + case '1': delete attrs.contenteditable; break; + } + } + // Disable form elements editing mode provided by some browers. (#5746) + for ( i in { input : 1, textarea : 1 } ) + { + defaultDataFilterRules.elements[ i ] = protectReadOnly; + defaultHtmlFilterRules.elements[ i ] = unprotectReadyOnly; + } + + var protectElementRegex = /<(a|area|img|input)\b([^>]*)>/gi, + protectAttributeRegex = /\b(href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi; + + var protectElementsRegex = /(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, + encodedElementsRegex = /<cke:encoded>([^<]*)<\/cke:encoded>/gi; + + var protectElementNamesRegex = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi, + unprotectElementNamesRegex = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi; + + var protectSelfClosingRegex = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi; + + function protectAttributes( html ) + { + return html.replace( protectElementRegex, function( element, tag, attributes ) + { + return '<' + tag + attributes.replace( protectAttributeRegex, function( fullAttr, attrName ) + { + // We should not rewrite the existed protected attributes, e.g. clipboard content from editor. (#5218) + if ( attributes.indexOf( 'data-cke-saved-' + attrName ) == -1 ) + return ' data-cke-saved-' + fullAttr + ' ' + fullAttr; + + return fullAttr; + }) + '>'; + }); + } + + function protectElements( html ) + { + return html.replace( protectElementsRegex, function( match ) + { + return '<cke:encoded>' + encodeURIComponent( match ) + '</cke:encoded>'; + }); + } + + function unprotectElements( html ) + { + return html.replace( encodedElementsRegex, function( match, encoded ) + { + return decodeURIComponent( encoded ); + }); + } + + function protectElementsNames( html ) + { + return html.replace( protectElementNamesRegex, '$1cke:$2'); + } + + function unprotectElementNames( html ) + { + return html.replace( unprotectElementNamesRegex, '$1$2' ); + } + + function protectSelfClosingElements( html ) + { + return html.replace( protectSelfClosingRegex, '<cke:$1$2></cke:$1>' ); + } + + function protectPreFormatted( html ) + { + return html.replace( /(<pre\b[^>]*>)(\r\n|\n)/g, '$1$2$2' ); + } + + function protectRealComments( html ) + { + return html.replace( /<!--(?!{cke_protected})[\s\S]+?-->/g, function( match ) + { + return '<!--' + protectedSourceMarker + + '{C}' + + encodeURIComponent( match ).replace( /--/g, '%2D%2D' ) + + '-->'; + }); + } + + function unprotectRealComments( html ) + { + return html.replace( /<!--\{cke_protected\}\{C\}([\s\S]+?)-->/g, function( match, data ) + { + return decodeURIComponent( data ); + }); + } + + function unprotectSource( html, editor ) + { + var store = editor._.dataStore; + + return html.replace( /<!--\{cke_protected\}([\s\S]+?)-->/g, function( match, data ) + { + return decodeURIComponent( data ); + }).replace( /\{cke_protected_(\d+)\}/g, function( match, id ) + { + return store && store[ id ] || ''; + }); + } + + function protectSource( data, editor ) + { + var protectedHtml = [], + protectRegexes = editor.config.protectedSource, + store = editor._.dataStore || ( editor._.dataStore = { id : 1 } ), + tempRegex = /<\!--\{cke_temp(comment)?\}(\d*?)-->/g; + + var regexes = + [ + // Script tags will also be forced to be protected, otherwise + // IE will execute them. + ( /<script[\s\S]*?<\/script>/gi ), + + // <noscript> tags (get lost in IE and messed up in FF). + /<noscript[\s\S]*?<\/noscript>/gi + ] + .concat( protectRegexes ); + + // First of any other protection, we must protect all comments + // to avoid loosing them (of course, IE related). + // Note that we use a different tag for comments, as we need to + // transform them when applying filters. + data = data.replace( (/<!--[\s\S]*?-->/g), function( match ) + { + return '<!--{cke_tempcomment}' + ( protectedHtml.push( match ) - 1 ) + '-->'; + }); + + for ( var i = 0 ; i < regexes.length ; i++ ) + { + data = data.replace( regexes[i], function( match ) + { + match = match.replace( tempRegex, // There could be protected source inside another one. (#3869). + function( $, isComment, id ) + { + return protectedHtml[ id ]; + } + ); + + // Avoid protecting over protected, e.g. /\{.*?\}/ + return ( /cke_temp(comment)?/ ).test( match ) ? match + : '<!--{cke_temp}' + ( protectedHtml.push( match ) - 1 ) + '-->'; + }); + } + data = data.replace( tempRegex, function( $, isComment, id ) + { + return '<!--' + protectedSourceMarker + + ( isComment ? '{C}' : '' ) + + encodeURIComponent( protectedHtml[ id ] ).replace( /--/g, '%2D%2D' ) + + '-->'; + } + ); + + // Different protection pattern is used for those that + // live in attributes to avoid from being HTML encoded. + return data.replace( /(['"]).*?\1/g, function ( match ) + { + return match.replace( /<!--\{cke_protected\}([\s\S]+?)-->/g, function( match, data ) + { + store[ store.id ] = decodeURIComponent( data ); + return '{cke_protected_'+ ( store.id++ ) + '}'; + }); + }); + } + + CKEDITOR.plugins.add( 'htmldataprocessor', + { + requires : [ 'htmlwriter' ], + + init : function( editor ) + { + var dataProcessor = editor.dataProcessor = new CKEDITOR.htmlDataProcessor( editor ); + + dataProcessor.writer.forceSimpleAmpersand = editor.config.forceSimpleAmpersand; + + dataProcessor.dataFilter.addRules( defaultDataFilterRules ); + dataProcessor.dataFilter.addRules( defaultDataBlockFilterRules ); + dataProcessor.htmlFilter.addRules( defaultHtmlFilterRules ); + + var defaultHtmlBlockFilterRules = { elements : {} }; + for ( i in blockLikeTags ) + defaultHtmlBlockFilterRules.elements[ i ] = getBlockExtension( true, editor.config.fillEmptyBlocks ); + + dataProcessor.htmlFilter.addRules( defaultHtmlBlockFilterRules ); + }, + + onLoad : function() + { + ! ( 'fillEmptyBlocks' in CKEDITOR.config ) && ( CKEDITOR.config.fillEmptyBlocks = 1 ); + } + }); + + CKEDITOR.htmlDataProcessor = function( editor ) + { + this.editor = editor; + + this.writer = new CKEDITOR.htmlWriter(); + this.dataFilter = new CKEDITOR.htmlParser.filter(); + this.htmlFilter = new CKEDITOR.htmlParser.filter(); + }; + + CKEDITOR.htmlDataProcessor.prototype = + { + toHtml : function( data, fixForBody ) + { + // The source data is already HTML, but we need to clean + // it up and apply the filter. + + data = protectSource( data, this.editor ); + + // Before anything, we must protect the URL attributes as the + // browser may changing them when setting the innerHTML later in + // the code. + data = protectAttributes( data ); + + // Protect elements than can't be set inside a DIV. E.g. IE removes + // style tags from innerHTML. (#3710) + data = protectElements( data ); + + // Certain elements has problem to go through DOM operation, protect + // them by prefixing 'cke' namespace. (#3591) + data = protectElementsNames( data ); + + // All none-IE browsers ignore self-closed custom elements, + // protecting them into open-close. (#3591) + data = protectSelfClosingElements( data ); + + // Compensate one leading line break after <pre> open as browsers + // eat it up. (#5789) + data = protectPreFormatted( data ); + + // Call the browser to help us fixing a possibly invalid HTML + // structure. + var div = new CKEDITOR.dom.element( 'div' ); + // Add fake character to workaround IE comments bug. (#3801) + div.setHtml( 'a' + data ); + data = div.getHtml().substr( 1 ); + + // Unprotect "some" of the protected elements at this point. + data = unprotectElementNames( data ); + + data = unprotectElements( data ); + + // Restore the comments that have been protected, in this way they + // can be properly filtered. + data = unprotectRealComments( data ); + + // Now use our parser to make further fixes to the structure, as + // well as apply the filter. + var fragment = CKEDITOR.htmlParser.fragment.fromHtml( data, fixForBody ), + writer = new CKEDITOR.htmlParser.basicWriter(); + + fragment.writeHtml( writer, this.dataFilter ); + data = writer.getHtml( true ); + + // Protect the real comments again. + data = protectRealComments( data ); + + return data; + }, + + toDataFormat : function( html, fixForBody ) + { + var writer = this.writer, + fragment = CKEDITOR.htmlParser.fragment.fromHtml( html, fixForBody ); + + writer.reset(); + + fragment.writeHtml( writer, this.htmlFilter ); + + var data = writer.getHtml( true ); + + // Restore those non-HTML protected source. (#4475,#4880) + data = unprotectRealComments( data ); + data = unprotectSource( data, this.editor ); + + return data; + } + }; +})(); + +/** + * Whether to force using "&" instead of "&amp;" in elements attributes + * values, it's not recommended to change this setting for compliance with the + * W3C XHTML 1.0 standards (<a href="http://www.w3.org/TR/xhtml1/#C_12">C.12, XHTML 1.0</a>). + * @name CKEDITOR.config.forceSimpleAmpersand + * @name CKEDITOR.config.forceSimpleAmpersand + * @type Boolean + * @default false + * @example + * config.forceSimpleAmpersand = false; + */ + +/** + * Whether a filler text (non-breaking space entity - ) will be inserted into empty block elements in HTML output, + * this is used to render block elements properly with line-height; When a function is instead specified, + * it'll be passed a {@link CKEDITOR.htmlParser.element} to decide whether adding the filler text + * by expecting a boolean return value. + * @name CKEDITOR.config.fillEmptyBlocks + * @since 3.5 + * @type Boolean + * @default true + * @example + * config.fillEmptyBlocks = false; // Prevent filler nodes in all empty blocks. + * + * // Prevent filler node only in float cleaners. + * config.fillEmptyBlocks = function( element ) + * { + * if ( element.attributes[ 'class' ].indexOf ( 'clear-both' ) != -1 ) + * return false; + * } + */ diff --git a/_source/plugins/htmlwriter/plugin.js b/_source/plugins/htmlwriter/plugin.js new file mode 100644 index 0000000..d06a125 --- /dev/null +++ b/_source/plugins/htmlwriter/plugin.js @@ -0,0 +1,319 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'htmlwriter' ); + +/** + * Class used to write HTML data. + * @constructor + * @example + * var writer = new CKEDITOR.htmlWriter(); + * writer.openTag( 'p' ); + * writer.attribute( 'class', 'MyClass' ); + * writer.openTagClose( 'p' ); + * writer.text( 'Hello' ); + * writer.closeTag( 'p' ); + * alert( writer.getHtml() ); "<p class="MyClass">Hello</p>" + */ +CKEDITOR.htmlWriter = CKEDITOR.tools.createClass( +{ + base : CKEDITOR.htmlParser.basicWriter, + + $ : function() + { + // Call the base contructor. + this.base(); + + /** + * The characters to be used for each identation step. + * @type String + * @default "\t" (tab) + * @example + * // Use two spaces for indentation. + * editorInstance.dataProcessor.writer.indentationChars = ' '; + */ + this.indentationChars = '\t'; + + /** + * The characters to be used to close "self-closing" elements, like "br" or + * "img". + * @type String + * @default " />" + * @example + * // Use HTML4 notation for self-closing elements. + * editorInstance.dataProcessor.writer.selfClosingEnd = '>'; + */ + this.selfClosingEnd = ' />'; + + /** + * The characters to be used for line breaks. + * @type String + * @default "\n" (LF) + * @example + * // Use CRLF for line breaks. + * editorInstance.dataProcessor.writer.lineBreakChars = '\r\n'; + */ + this.lineBreakChars = '\n'; + + this.forceSimpleAmpersand = 0; + + this.sortAttributes = 1; + + this._.indent = 0; + this._.indentation = ''; + // Indicate preformatted block context status. (#5789) + this._.inPre = 0; + this._.rules = {}; + + var dtd = CKEDITOR.dtd; + + for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) + { + this.setRules( e, + { + indent : 1, + breakBeforeOpen : 1, + breakAfterOpen : 1, + breakBeforeClose : !dtd[ e ][ '#' ], + breakAfterClose : 1 + }); + } + + this.setRules( 'br', + { + breakAfterOpen : 1 + }); + + this.setRules( 'title', + { + indent : 0, + breakAfterOpen : 0 + }); + + this.setRules( 'style', + { + indent : 0, + breakBeforeClose : 1 + }); + + // Disable indentation on <pre>. + this.setRules( 'pre', + { + indent : 0 + }); + }, + + proto : + { + /** + * Writes the tag opening part for a opener tag. + * @param {String} tagName The element name for this tag. + * @param {Object} attributes The attributes defined for this tag. The + * attributes could be used to inspect the tag. + * @example + * // Writes "<p". + * writer.openTag( 'p', { class : 'MyClass', id : 'MyId' } ); + */ + openTag : function( tagName, attributes ) + { + var rules = this._.rules[ tagName ]; + + if ( this._.indent ) + this.indentation(); + // Do not break if indenting. + else if ( rules && rules.breakBeforeOpen ) + { + this.lineBreak(); + this.indentation(); + } + + this._.output.push( '<', tagName ); + }, + + /** + * Writes the tag closing part for a opener tag. + * @param {String} tagName The element name for this tag. + * @param {Boolean} isSelfClose Indicates that this is a self-closing tag, + * like "br" or "img". + * @example + * // Writes ">". + * writer.openTagClose( 'p', false ); + * @example + * // Writes " />". + * writer.openTagClose( 'br', true ); + */ + openTagClose : function( tagName, isSelfClose ) + { + var rules = this._.rules[ tagName ]; + + if ( isSelfClose ) + this._.output.push( this.selfClosingEnd ); + else + { + this._.output.push( '>' ); + + if ( rules && rules.indent ) + this._.indentation += this.indentationChars; + } + + if ( rules && rules.breakAfterOpen ) + this.lineBreak(); + tagName == 'pre' && ( this._.inPre = 1 ); + }, + + /** + * Writes an attribute. This function should be called after opening the + * tag with {@link #openTagClose}. + * @param {String} attName The attribute name. + * @param {String} attValue The attribute value. + * @example + * // Writes ' class="MyClass"'. + * writer.attribute( 'class', 'MyClass' ); + */ + attribute : function( attName, attValue ) + { + + if ( typeof attValue == 'string' ) + { + this.forceSimpleAmpersand && ( attValue = attValue.replace( /&/g, '&' ) ); + // Browsers don't always escape special character in attribute values. (#4683, #4719). + attValue = CKEDITOR.tools.htmlEncodeAttr( attValue ); + } + + this._.output.push( ' ', attName, '="', attValue, '"' ); + }, + + /** + * Writes a closer tag. + * @param {String} tagName The element name for this tag. + * @example + * // Writes "</p>". + * writer.closeTag( 'p' ); + */ + closeTag : function( tagName ) + { + var rules = this._.rules[ tagName ]; + + if ( rules && rules.indent ) + this._.indentation = this._.indentation.substr( this.indentationChars.length ); + + if ( this._.indent ) + this.indentation(); + // Do not break if indenting. + else if ( rules && rules.breakBeforeClose ) + { + this.lineBreak(); + this.indentation(); + } + + this._.output.push( '</', tagName, '>' ); + tagName == 'pre' && ( this._.inPre = 0 ); + + if ( rules && rules.breakAfterClose ) + this.lineBreak(); + }, + + /** + * Writes text. + * @param {String} text The text value + * @example + * // Writes "Hello Word". + * writer.text( 'Hello Word' ); + */ + text : function( text ) + { + if ( this._.indent ) + { + this.indentation(); + !this._.inPre && ( text = CKEDITOR.tools.ltrim( text ) ); + } + + this._.output.push( text ); + }, + + /** + * Writes a comment. + * @param {String} comment The comment text. + * @example + * // Writes "<!-- My comment -->". + * writer.comment( ' My comment ' ); + */ + comment : function( comment ) + { + if ( this._.indent ) + this.indentation(); + + this._.output.push( '<!--', comment, '-->' ); + }, + + /** + * Writes a line break. It uses the {@link #lineBreakChars} property for it. + * @example + * // Writes "\n" (e.g.). + * writer.lineBreak(); + */ + lineBreak : function() + { + if ( !this._.inPre && this._.output.length > 0 ) + this._.output.push( this.lineBreakChars ); + this._.indent = 1; + }, + + /** + * Writes the current indentation chars. It uses the + * {@link #indentationChars} property, repeating it for the current + * indentation steps. + * @example + * // Writes "\t" (e.g.). + * writer.indentation(); + */ + indentation : function() + { + if( !this._.inPre ) + this._.output.push( this._.indentation ); + this._.indent = 0; + }, + + /** + * Sets formatting rules for a give element. The possible rules are: + * <ul> + * <li><b>indent</b>: indent the element contents.</li> + * <li><b>breakBeforeOpen</b>: break line before the opener tag for this element.</li> + * <li><b>breakAfterOpen</b>: break line after the opener tag for this element.</li> + * <li><b>breakBeforeClose</b>: break line before the closer tag for this element.</li> + * <li><b>breakAfterClose</b>: break line after the closer tag for this element.</li> + * </ul> + * + * All rules default to "false". Each call to the function overrides + * already present rules, leaving the undefined untouched. + * + * By default, all elements available in the {@link CKEDITOR.dtd.$block), + * {@link CKEDITOR.dtd.$listItem} and {@link CKEDITOR.dtd.$tableContent} + * lists have all the above rules set to "true". Additionaly, the "br" + * element has the "breakAfterOpen" set to "true". + * @param {String} tagName The element name to which set the rules. + * @param {Object} rules An object containing the element rules. + * @example + * // Break line before and after "img" tags. + * writer.setRules( 'img', + * { + * breakBeforeOpen : true + * breakAfterOpen : true + * }); + * @example + * // Reset the rules for the "h1" tag. + * writer.setRules( 'h1', {} ); + */ + setRules : function( tagName, rules ) + { + var currentRules = this._.rules[ tagName ]; + + if ( currentRules ) + CKEDITOR.tools.extend( currentRules, rules, true ); + else + this._.rules[ tagName ] = rules; + } + } +}); diff --git a/_source/plugins/iframe/dialogs/iframe.js b/_source/plugins/iframe/dialogs/iframe.js new file mode 100644 index 0000000..769b6af --- /dev/null +++ b/_source/plugins/iframe/dialogs/iframe.js @@ -0,0 +1,229 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + // Map 'true' and 'false' values to match W3C's specifications + // http://www.w3.org/TR/REC-html40/present/frames.html#h-16.5 + var checkboxValues = + { + scrolling : { 'true' : 'yes', 'false' : 'no' }, + frameborder : { 'true' : '1', 'false' : '0' } + }; + + function loadValue( iframeNode ) + { + var isCheckbox = this instanceof CKEDITOR.ui.dialog.checkbox; + if ( iframeNode.hasAttribute( this.id ) ) + { + var value = iframeNode.getAttribute( this.id ); + if ( isCheckbox ) + this.setValue( checkboxValues[ this.id ][ 'true' ] == value.toLowerCase() ); + else + this.setValue( value ); + } + } + + function commitValue( iframeNode ) + { + var isRemove = this.getValue() === '', + isCheckbox = this instanceof CKEDITOR.ui.dialog.checkbox, + value = this.getValue(); + if ( isRemove ) + iframeNode.removeAttribute( this.att || this.id ); + else if ( isCheckbox ) + iframeNode.setAttribute( this.id, checkboxValues[ this.id ][ value ] ); + else + iframeNode.setAttribute( this.att || this.id, value ); + } + + CKEDITOR.dialog.add( 'iframe', function( editor ) + { + var iframeLang = editor.lang.iframe, + commonLang = editor.lang.common, + dialogadvtab = editor.plugins.dialogadvtab; + return { + title : iframeLang.title, + minWidth : 350, + minHeight : 260, + onShow : function() + { + // Clear previously saved elements. + this.fakeImage = this.iframeNode = null; + + var fakeImage = this.getSelectedElement(); + if ( fakeImage && fakeImage.data( 'cke-real-element-type' ) && fakeImage.data( 'cke-real-element-type' ) == 'iframe' ) + { + this.fakeImage = fakeImage; + + var iframeNode = editor.restoreRealElement( fakeImage ); + this.iframeNode = iframeNode; + + this.setupContent( iframeNode ); + } + }, + onOk : function() + { + var iframeNode; + if ( !this.fakeImage ) + iframeNode = new CKEDITOR.dom.element( 'iframe' ); + else + iframeNode = this.iframeNode; + + // A subset of the specified attributes/styles + // should also be applied on the fake element to + // have better visual effect. (#5240) + var extraStyles = {}, extraAttributes = {}; + this.commitContent( iframeNode, extraStyles, extraAttributes ); + + // Refresh the fake image. + var newFakeImage = editor.createFakeElement( iframeNode, 'cke_iframe', 'iframe', true ); + newFakeImage.setAttributes( extraAttributes ); + newFakeImage.setStyles( extraStyles ); + if ( this.fakeImage ) + { + newFakeImage.replace( this.fakeImage ); + editor.getSelection().selectElement( newFakeImage ); + } + else + editor.insertElement( newFakeImage ); + }, + contents : [ + { + id : 'info', + label : commonLang.generalTab, + accessKey : 'I', + elements : + [ + { + type : 'vbox', + padding : 0, + children : + [ + { + id : 'src', + type : 'text', + label : commonLang.url, + required : true, + validate : CKEDITOR.dialog.validate.notEmpty( iframeLang.noUrl ), + setup : loadValue, + commit : commitValue + } + ] + }, + { + type : 'hbox', + children : + [ + { + id : 'width', + type : 'text', + style : 'width:100%', + labelLayout : 'vertical', + label : commonLang.width, + validate : CKEDITOR.dialog.validate.htmlLength( commonLang.invalidHtmlLength.replace( '%1', commonLang.width ) ), + setup : loadValue, + commit : commitValue + }, + { + id : 'height', + type : 'text', + style : 'width:100%', + labelLayout : 'vertical', + label : commonLang.height, + validate : CKEDITOR.dialog.validate.htmlLength( commonLang.invalidHtmlLength.replace( '%1', commonLang.height ) ), + setup : loadValue, + commit : commitValue + }, + { + id : 'align', + type : 'select', + 'default' : '', + items : + [ + [ commonLang.notSet , '' ], + [ commonLang.alignLeft , 'left' ], + [ commonLang.alignRight , 'right' ], + [ commonLang.alignTop , 'top' ], + [ commonLang.alignMiddle , 'middle' ], + [ commonLang.alignBottom , 'bottom' ] + ], + style : 'width:100%', + labelLayout : 'vertical', + label : commonLang.align, + setup : function( iframeNode, fakeImage ) + { + loadValue.apply( this, arguments ); + if ( fakeImage ) + { + var fakeImageAlign = fakeImage.getAttribute( 'align' ); + this.setValue( fakeImageAlign && fakeImageAlign.toLowerCase() || '' ); + } + }, + commit : function( iframeNode, extraStyles, extraAttributes ) + { + commitValue.apply( this, arguments ); + if ( this.getValue() ) + extraAttributes.align = this.getValue(); + } + } + ] + }, + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + id : 'scrolling', + type : 'checkbox', + label : iframeLang.scrolling, + setup : loadValue, + commit : commitValue + }, + { + id : 'frameborder', + type : 'checkbox', + label : iframeLang.border, + setup : loadValue, + commit : commitValue + } + ] + }, + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + id : 'name', + type : 'text', + label : commonLang.name, + setup : loadValue, + commit : commitValue + }, + { + id : 'title', + type : 'text', + label : commonLang.advisoryTitle, + setup : loadValue, + commit : commitValue + } + ] + }, + { + id : 'longdesc', + type : 'text', + label : commonLang.longDescr, + setup : loadValue, + commit : commitValue + } + ] + }, + dialogadvtab && dialogadvtab.createAdvancedTab( editor, { id:1, classes:1, styles:1 }) + ] + }; + }); +})(); diff --git a/_source/plugins/iframe/images/placeholder.png b/_source/plugins/iframe/images/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..b40c7b20fc2984e0c9bf8dac94ab1873ab17dc4d GIT binary patch literal 449 zcmV;y0Y3hTP)<h;3K|Lk000e1NJLTq0027x000{Z0ssI2P3vIN00009a7bBm000XU z000XU0RWnu7ytkOAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-M@d9MRCwC#meFm4Fc3hWt1jRboDs|jtUyMH<O#wEFhUq1tl$yi6+8lr;C^rd zLK9Vrno6iX`NJH-ew-i1B<B+Bra7k)kP>?dr9RkOWa3Pmi8JwkBOXVT;&=oo3Y1z} zQ9MqDuslBBjZrdvFPW|b2th8}_Q7aM-HrB2jkP8vX}8-pISj-|T}wU$LZB=G;aiV0 zp?HthPp3!;Yu{<bILefBIf16Z80pVp4BiW|G4J$vl4P@9bMkPYs<>PhVr#LM(}@`G zpv#gN={mfZMR+*HB;K!CF|XH@JfEdM)wt`3Q8b-ASrc1}F|;jOQ&m5U_ZBOfhO(q> zMcKYbYldNYJ?}-Eb(x=N`d7Q#^@=gnH8J8n)-Fz072|mK{Y|VJB{o*fd&u|mW<DS1 re_kfe#F;n~zZ9Q1hf=%Yb?$2b_qff(j7>UT00000NkvXXu0mjfm%_Ew literal 0 HcmV?d00001 diff --git a/_source/plugins/iframe/plugin.js b/_source/plugins/iframe/plugin.js new file mode 100644 index 0000000..6c21a32 --- /dev/null +++ b/_source/plugins/iframe/plugin.js @@ -0,0 +1,87 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + CKEDITOR.plugins.add( 'iframe', + { + requires : [ 'dialog', 'fakeobjects' ], + init : function( editor ) + { + var pluginName = 'iframe', + lang = editor.lang.iframe; + + CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/iframe.js' ); + editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName ) ); + + editor.addCss( + 'img.cke_iframe' + + '{' + + 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.png' ) + ');' + + 'background-position: center center;' + + 'background-repeat: no-repeat;' + + 'border: 1px solid #a9a9a9;' + + 'width: 80px;' + + 'height: 80px;' + + '}' + ); + + editor.ui.addButton( 'Iframe', + { + label : lang.toolbar, + command : pluginName + }); + + editor.on( 'doubleclick', function( evt ) + { + var element = evt.data.element; + if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'iframe' ) + evt.data.dialog = 'iframe'; + }); + + if ( editor.addMenuItems ) + { + editor.addMenuItems( + { + iframe : + { + label : lang.title, + command : 'iframe', + group : 'image' + } + }); + } + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( element && element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'iframe' ) + return { iframe : CKEDITOR.TRISTATE_OFF }; + }); + } + }, + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter; + + if ( dataFilter ) + { + dataFilter.addRules( + { + elements : + { + iframe : function( element ) + { + return editor.createFakeParserElement( element, 'cke_iframe', 'iframe', true ); + } + } + }); + } + } + }); +})(); diff --git a/_source/plugins/iframedialog/plugin.js b/_source/plugins/iframedialog/plugin.js new file mode 100644 index 0000000..870ec1c --- /dev/null +++ b/_source/plugins/iframedialog/plugin.js @@ -0,0 +1,188 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Plugin for making iframe based dialogs. + */ + +CKEDITOR.plugins.add( 'iframedialog', +{ + requires : [ 'dialog' ], + onLoad : function() + { + /** + * An iframe base dialog. + * @param {String} name Name of the dialog + * @param {String} title Title of the dialog + * @param {Number} minWidth Minimum width of the dialog + * @param {Number} minHeight Minimum height of the dialog + * @param {Function} [onContentLoad] Function called when the iframe has been loaded. + * If it isn't specified, the inner frame is notified of the dialog events ('load', + * 'resize', 'ok' and 'cancel') on a function called 'onDialogEvent' + * @param {Object} [userDefinition] Additional properties for the dialog definition + * @example + */ + CKEDITOR.dialog.addIframe = function( name, title, src, minWidth, minHeight, onContentLoad, userDefinition ) + { + var element = + { + type : 'iframe', + src : src, + width : '100%', + height : '100%' + }; + + if ( typeof( onContentLoad ) == 'function' ) + element.onContentLoad = onContentLoad; + else + element.onContentLoad = function() + { + var element = this.getElement(), + childWindow = element.$.contentWindow; + + // If the inner frame has defined a "onDialogEvent" function, setup listeners + if ( childWindow.onDialogEvent ) + { + var dialog = this.getDialog(), + notifyEvent = function(e) + { + return childWindow.onDialogEvent(e); + }; + + dialog.on( 'ok', notifyEvent ); + dialog.on( 'cancel', notifyEvent ); + dialog.on( 'resize', notifyEvent ); + + // Clear listeners + dialog.on( 'hide', function(e) + { + dialog.removeListener( 'ok', notifyEvent ); + dialog.removeListener( 'cancel', notifyEvent ); + dialog.removeListener( 'resize', notifyEvent ); + + e.removeListener(); + } ); + + // Notify child iframe of load: + childWindow.onDialogEvent( { + name : 'load', + sender : this, + editor : dialog._.editor + } ); + } + }; + + var definition = + { + title : title, + minWidth : minWidth, + minHeight : minHeight, + contents : + [ + { + id : 'iframe', + label : title, + expand : true, + elements : [ element ] + } + ] + }; + + for ( var i in userDefinition ) + definition[i] = userDefinition[i]; + + this.add( name, function(){ return definition; } ); + }; + + (function() + { + /** + * An iframe element. + * @extends CKEDITOR.ui.dialog.uiElement + * @example + * @constructor + * @param {CKEDITOR.dialog} dialog + * Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * <ul> + * <li><strong>src</strong> (Required) The src field of the iframe. </li> + * <li><strong>width</strong> (Required) The iframe's width.</li> + * <li><strong>height</strong> (Required) The iframe's height.</li> + * <li><strong>onContentLoad</strong> (Optional) A function to be executed + * after the iframe's contents has finished loading.</li> + * </ul> + * @param {Array} htmlList + * List of HTML code to output to. + */ + var iframeElement = function( dialog, elementDefinition, htmlList ) + { + if ( arguments.length < 3 ) + return; + + var _ = ( this._ || ( this._ = {} ) ), + contentLoad = elementDefinition.onContentLoad && CKEDITOR.tools.bind( elementDefinition.onContentLoad, this ), + cssWidth = CKEDITOR.tools.cssLength( elementDefinition.width ), + cssHeight = CKEDITOR.tools.cssLength( elementDefinition.height ); + _.frameId = CKEDITOR.tools.getNextId() + '_iframe'; + + // IE BUG: Parent container does not resize to contain the iframe automatically. + dialog.on( 'load', function() + { + var iframe = CKEDITOR.document.getById( _.frameId ), + parentContainer = iframe.getParent(); + + parentContainer.setStyles( + { + width : cssWidth, + height : cssHeight + } ); + } ); + + var attributes = + { + src : '%2', + id : _.frameId, + frameborder : 0, + allowtransparency : true + }; + var myHtml = []; + + if ( typeof( elementDefinition.onContentLoad ) == 'function' ) + attributes.onload = 'CKEDITOR.tools.callFunction(%1);'; + + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtml, 'iframe', + { + width : cssWidth, + height : cssHeight + }, attributes, '' ); + + // Put a placeholder for the first time. + htmlList.push( '<div style="width:' + cssWidth + ';height:' + cssHeight + ';" id="' + this.domId + '"></div>' ); + + // Iframe elements should be refreshed whenever it is shown. + myHtml = myHtml.join( '' ); + dialog.on( 'show', function() + { + var iframe = CKEDITOR.document.getById( _.frameId ), + parentContainer = iframe.getParent(), + callIndex = CKEDITOR.tools.addFunction( contentLoad ), + html = myHtml.replace( '%1', callIndex ).replace( '%2', CKEDITOR.tools.htmlEncode( elementDefinition.src ) ); + parentContainer.setHtml( html ); + } ); + }; + + iframeElement.prototype = new CKEDITOR.ui.dialog.uiElement; + + CKEDITOR.dialog.addUIElement( 'iframe', + { + build : function( dialog, elementDefinition, output ) + { + return new iframeElement( dialog, elementDefinition, output ); + } + } ); + })(); + } +} ); diff --git a/_source/plugins/image/dialogs/image.js b/_source/plugins/image/dialogs/image.js new file mode 100644 index 0000000..e793a89 --- /dev/null +++ b/_source/plugins/image/dialogs/image.js @@ -0,0 +1,1406 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var imageDialog = function( editor, dialogType ) + { + // Load image preview. + var IMAGE = 1, + LINK = 2, + PREVIEW = 4, + CLEANUP = 8, + regexGetSize = /^\s*(\d+)((px)|\%)?\s*$/i, + regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i, + pxLengthRegex = /^\d+px$/; + + var onSizeChange = function() + { + var value = this.getValue(), // This = input element. + dialog = this.getDialog(), + aMatch = value.match( regexGetSize ); // Check value + if ( aMatch ) + { + if ( aMatch[2] == '%' ) // % is allowed - > unlock ratio. + switchLockRatio( dialog, false ); // Unlock. + value = aMatch[1]; + } + + // Only if ratio is locked + if ( dialog.lockRatio ) + { + var oImageOriginal = dialog.originalElement; + if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' ) + { + if ( this.id == 'txtHeight' ) + { + if ( value && value != '0' ) + value = Math.round( oImageOriginal.$.width * ( value / oImageOriginal.$.height ) ); + if ( !isNaN( value ) ) + dialog.setValueOf( 'info', 'txtWidth', value ); + } + else //this.id = txtWidth. + { + if ( value && value != '0' ) + value = Math.round( oImageOriginal.$.height * ( value / oImageOriginal.$.width ) ); + if ( !isNaN( value ) ) + dialog.setValueOf( 'info', 'txtHeight', value ); + } + } + } + updatePreview( dialog ); + }; + + var updatePreview = function( dialog ) + { + //Don't load before onShow. + if ( !dialog.originalElement || !dialog.preview ) + return 1; + + // Read attributes and update imagePreview; + dialog.commitContent( PREVIEW, dialog.preview ); + return 0; + }; + + // Custom commit dialog logic, where we're intended to give inline style + // field (txtdlgGenStyle) higher priority to avoid overwriting styles contribute + // by other fields. + function commitContent() + { + var args = arguments; + var inlineStyleField = this.getContentElement( 'advanced', 'txtdlgGenStyle' ); + inlineStyleField && inlineStyleField.commit.apply( inlineStyleField, args ); + + this.foreach( function( widget ) + { + if ( widget.commit && widget.id != 'txtdlgGenStyle' ) + widget.commit.apply( widget, args ); + }); + } + + // Avoid recursions. + var incommit; + + // Synchronous field values to other impacted fields is required, e.g. border + // size change should alter inline-style text as well. + function commitInternally( targetFields ) + { + if ( incommit ) + return; + + incommit = 1; + + var dialog = this.getDialog(), + element = dialog.imageElement; + if ( element ) + { + // Commit this field and broadcast to target fields. + this.commit( IMAGE, element ); + + targetFields = [].concat( targetFields ); + var length = targetFields.length, + field; + for ( var i = 0; i < length; i++ ) + { + field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) ); + // May cause recursion. + field && field.setup( IMAGE, element ); + } + } + + incommit = 0; + } + + var switchLockRatio = function( dialog, value ) + { + if ( !dialog.getContentElement( 'info', 'ratioLock' ) ) + return null; + + var oImageOriginal = dialog.originalElement; + + // Dialog may already closed. (#5505) + if( !oImageOriginal ) + return null; + + // Check image ratio and original image ratio, but respecting user's preference. + if ( value == 'check' ) + { + if ( !dialog.userlockRatio && oImageOriginal.getCustomData( 'isReady' ) == 'true' ) + { + var width = dialog.getValueOf( 'info', 'txtWidth' ), + height = dialog.getValueOf( 'info', 'txtHeight' ), + originalRatio = oImageOriginal.$.width * 1000 / oImageOriginal.$.height, + thisRatio = width * 1000 / height; + dialog.lockRatio = false; // Default: unlock ratio + + if ( !width && !height ) + dialog.lockRatio = true; + else if ( !isNaN( originalRatio ) && !isNaN( thisRatio ) ) + { + if ( Math.round( originalRatio ) == Math.round( thisRatio ) ) + dialog.lockRatio = true; + } + } + } + else if ( value != undefined ) + dialog.lockRatio = value; + else + { + dialog.userlockRatio = 1; + dialog.lockRatio = !dialog.lockRatio; + } + + var ratioButton = CKEDITOR.document.getById( btnLockSizesId ); + if ( dialog.lockRatio ) + ratioButton.removeClass( 'cke_btn_unlocked' ); + else + ratioButton.addClass( 'cke_btn_unlocked' ); + + ratioButton.setAttribute( 'aria-checked', dialog.lockRatio ); + + // Ratio button hc presentation - WHITE SQUARE / BLACK SQUARE + if ( CKEDITOR.env.hc ) + { + var icon = ratioButton.getChild( 0 ); + icon.setHtml( dialog.lockRatio ? CKEDITOR.env.ie ? '\u25A0': '\u25A3' : CKEDITOR.env.ie ? '\u25A1' : '\u25A2' ); + } + + return dialog.lockRatio; + }; + + var resetSize = function( dialog ) + { + var oImageOriginal = dialog.originalElement; + if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' ) + { + var widthField = dialog.getContentElement( 'info', 'txtWidth' ), + heightField = dialog.getContentElement( 'info', 'txtHeight' ); + widthField && widthField.setValue( oImageOriginal.$.width ); + heightField && heightField.setValue( oImageOriginal.$.height ); + } + updatePreview( dialog ); + }; + + var setupDimension = function( type, element ) + { + if ( type != IMAGE ) + return; + + function checkDimension( size, defaultValue ) + { + var aMatch = size.match( regexGetSize ); + if ( aMatch ) + { + if ( aMatch[2] == '%' ) // % is allowed. + { + aMatch[1] += '%'; + switchLockRatio( dialog, false ); // Unlock ratio + } + return aMatch[1]; + } + return defaultValue; + } + + var dialog = this.getDialog(), + value = '', + dimension = this.id == 'txtWidth' ? 'width' : 'height', + size = element.getAttribute( dimension ); + + if ( size ) + value = checkDimension( size, value ); + value = checkDimension( element.getStyle( dimension ), value ); + + this.setValue( value ); + }; + + var previewPreloader; + + var onImgLoadEvent = function() + { + // Image is ready. + var original = this.originalElement; + original.setCustomData( 'isReady', 'true' ); + original.removeListener( 'load', onImgLoadEvent ); + original.removeListener( 'error', onImgLoadErrorEvent ); + original.removeListener( 'abort', onImgLoadErrorEvent ); + + // Hide loader + CKEDITOR.document.getById( imagePreviewLoaderId ).setStyle( 'display', 'none' ); + + // New image -> new domensions + if ( !this.dontResetSize ) + resetSize( this ); + + if ( this.firstLoad ) + CKEDITOR.tools.setTimeout( function(){ switchLockRatio( this, 'check' ); }, 0, this ); + + this.firstLoad = false; + this.dontResetSize = false; + }; + + var onImgLoadErrorEvent = function() + { + // Error. Image is not loaded. + var original = this.originalElement; + original.removeListener( 'load', onImgLoadEvent ); + original.removeListener( 'error', onImgLoadErrorEvent ); + original.removeListener( 'abort', onImgLoadErrorEvent ); + + // Set Error image. + var noimage = CKEDITOR.getUrl( editor.skinPath + 'images/noimage.png' ); + + if ( this.preview ) + this.preview.setAttribute( 'src', noimage ); + + // Hide loader + CKEDITOR.document.getById( imagePreviewLoaderId ).setStyle( 'display', 'none' ); + switchLockRatio( this, false ); // Unlock. + }; + + var numbering = function( id ) + { + return CKEDITOR.tools.getNextId() + '_' + id; + }, + btnLockSizesId = numbering( 'btnLockSizes' ), + btnResetSizeId = numbering( 'btnResetSize' ), + imagePreviewLoaderId = numbering( 'ImagePreviewLoader' ), + imagePreviewBoxId = numbering( 'ImagePreviewBox' ), + previewLinkId = numbering( 'previewLink' ), + previewImageId = numbering( 'previewImage' ); + + return { + title : editor.lang.image[ dialogType == 'image' ? 'title' : 'titleButton' ], + minWidth : 420, + minHeight : 360, + onShow : function() + { + this.imageElement = false; + this.linkElement = false; + + // Default: create a new element. + this.imageEditMode = false; + this.linkEditMode = false; + + this.lockRatio = true; + this.userlockRatio = 0; + this.dontResetSize = false; + this.firstLoad = true; + this.addLink = false; + + var editor = this.getParentEditor(), + sel = this.getParentEditor().getSelection(), + element = sel.getSelectedElement(), + link = element && element.getAscendant( 'a' ); + + //Hide loader. + CKEDITOR.document.getById( imagePreviewLoaderId ).setStyle( 'display', 'none' ); + // Create the preview before setup the dialog contents. + previewPreloader = new CKEDITOR.dom.element( 'img', editor.document ); + this.preview = CKEDITOR.document.getById( previewImageId ); + + // Copy of the image + this.originalElement = editor.document.createElement( 'img' ); + this.originalElement.setAttribute( 'alt', '' ); + this.originalElement.setCustomData( 'isReady', 'false' ); + + if ( link ) + { + this.linkElement = link; + this.linkEditMode = true; + + // Look for Image element. + var linkChildren = link.getChildren(); + if ( linkChildren.count() == 1 ) // 1 child. + { + var childTagName = linkChildren.getItem( 0 ).getName(); + if ( childTagName == 'img' || childTagName == 'input' ) + { + this.imageElement = linkChildren.getItem( 0 ); + if ( this.imageElement.getName() == 'img' ) + this.imageEditMode = 'img'; + else if ( this.imageElement.getName() == 'input' ) + this.imageEditMode = 'input'; + } + } + // Fill out all fields. + if ( dialogType == 'image' ) + this.setupContent( LINK, link ); + } + + if ( element && element.getName() == 'img' && !element.data( 'cke-realelement' ) + || element && element.getName() == 'input' && element.getAttribute( 'type' ) == 'image' ) + { + this.imageEditMode = element.getName(); + this.imageElement = element; + } + + if ( this.imageEditMode ) + { + // Use the original element as a buffer from since we don't want + // temporary changes to be committed, e.g. if the dialog is canceled. + this.cleanImageElement = this.imageElement; + this.imageElement = this.cleanImageElement.clone( true, true ); + + // Fill out all fields. + this.setupContent( IMAGE, this.imageElement ); + } + else + this.imageElement = editor.document.createElement( 'img' ); + + // Refresh LockRatio button + switchLockRatio ( this, true ); + + // Dont show preview if no URL given. + if ( !CKEDITOR.tools.trim( this.getValueOf( 'info', 'txtUrl' ) ) ) + { + this.preview.removeAttribute( 'src' ); + this.preview.setStyle( 'display', 'none' ); + } + }, + onOk : function() + { + // Edit existing Image. + if ( this.imageEditMode ) + { + var imgTagName = this.imageEditMode; + + // Image dialog and Input element. + if ( dialogType == 'image' && imgTagName == 'input' && confirm( editor.lang.image.button2Img ) ) + { + // Replace INPUT-> IMG + imgTagName = 'img'; + this.imageElement = editor.document.createElement( 'img' ); + this.imageElement.setAttribute( 'alt', '' ); + editor.insertElement( this.imageElement ); + } + // ImageButton dialog and Image element. + else if ( dialogType != 'image' && imgTagName == 'img' && confirm( editor.lang.image.img2Button )) + { + // Replace IMG -> INPUT + imgTagName = 'input'; + this.imageElement = editor.document.createElement( 'input' ); + this.imageElement.setAttributes( + { + type : 'image', + alt : '' + } + ); + editor.insertElement( this.imageElement ); + } + else + { + // Restore the original element before all commits. + this.imageElement = this.cleanImageElement; + delete this.cleanImageElement; + } + } + else // Create a new image. + { + // Image dialog -> create IMG element. + if ( dialogType == 'image' ) + this.imageElement = editor.document.createElement( 'img' ); + else + { + this.imageElement = editor.document.createElement( 'input' ); + this.imageElement.setAttribute ( 'type' ,'image' ); + } + this.imageElement.setAttribute( 'alt', '' ); + } + + // Create a new link. + if ( !this.linkEditMode ) + this.linkElement = editor.document.createElement( 'a' ); + + // Set attributes. + this.commitContent( IMAGE, this.imageElement ); + this.commitContent( LINK, this.linkElement ); + + // Remove empty style attribute. + if ( !this.imageElement.getAttribute( 'style' ) ) + this.imageElement.removeAttribute( 'style' ); + + // Insert a new Image. + if ( !this.imageEditMode ) + { + if ( this.addLink ) + { + //Insert a new Link. + if ( !this.linkEditMode ) + { + editor.insertElement( this.linkElement ); + this.linkElement.append( this.imageElement, false ); + } + else //Link already exists, image not. + editor.insertElement( this.imageElement ); + } + else + editor.insertElement( this.imageElement ); + } + else // Image already exists. + { + //Add a new link element. + if ( !this.linkEditMode && this.addLink ) + { + editor.insertElement( this.linkElement ); + this.imageElement.appendTo( this.linkElement ); + } + //Remove Link, Image exists. + else if ( this.linkEditMode && !this.addLink ) + { + editor.getSelection().selectElement( this.linkElement ); + editor.insertElement( this.imageElement ); + } + } + }, + onLoad : function() + { + if ( dialogType != 'image' ) + this.hidePage( 'Link' ); //Hide Link tab. + var doc = this._.element.getDocument(); + + if ( this.getContentElement( 'info', 'ratioLock' ) ) + { + this.addFocusable( doc.getById( btnResetSizeId ), 5 ); + this.addFocusable( doc.getById( btnLockSizesId ), 5 ); + } + + this.commitContent = commitContent; + }, + onHide : function() + { + if ( this.preview ) + this.commitContent( CLEANUP, this.preview ); + + if ( this.originalElement ) + { + this.originalElement.removeListener( 'load', onImgLoadEvent ); + this.originalElement.removeListener( 'error', onImgLoadErrorEvent ); + this.originalElement.removeListener( 'abort', onImgLoadErrorEvent ); + this.originalElement.remove(); + this.originalElement = false; // Dialog is closed. + } + + delete this.imageElement; + }, + contents : [ + { + id : 'info', + label : editor.lang.image.infoTab, + accessKey : 'I', + elements : + [ + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'hbox', + widths : [ '280px', '110px' ], + align : 'right', + children : + [ + { + id : 'txtUrl', + type : 'text', + label : editor.lang.common.url, + required: true, + onChange : function() + { + var dialog = this.getDialog(), + newUrl = this.getValue(); + + //Update original image + if ( newUrl.length > 0 ) //Prevent from load before onShow + { + dialog = this.getDialog(); + var original = dialog.originalElement; + + dialog.preview.removeStyle( 'display' ); + + original.setCustomData( 'isReady', 'false' ); + // Show loader + var loader = CKEDITOR.document.getById( imagePreviewLoaderId ); + if ( loader ) + loader.setStyle( 'display', '' ); + + original.on( 'load', onImgLoadEvent, dialog ); + original.on( 'error', onImgLoadErrorEvent, dialog ); + original.on( 'abort', onImgLoadErrorEvent, dialog ); + original.setAttribute( 'src', newUrl ); + + // Query the preloader to figure out the url impacted by based href. + previewPreloader.setAttribute( 'src', newUrl ); + dialog.preview.setAttribute( 'src', previewPreloader.$.src ); + updatePreview( dialog ); + } + // Dont show preview if no URL given. + else if ( dialog.preview ) + { + dialog.preview.removeAttribute( 'src' ); + dialog.preview.setStyle( 'display', 'none' ); + } + }, + setup : function( type, element ) + { + if ( type == IMAGE ) + { + var url = element.data( 'cke-saved-src' ) || element.getAttribute( 'src' ); + var field = this; + + this.getDialog().dontResetSize = true; + + field.setValue( url ); // And call this.onChange() + // Manually set the initial value.(#4191) + field.setInitValue(); + } + }, + commit : function( type, element ) + { + if ( type == IMAGE && ( this.getValue() || this.isChanged() ) ) + { + element.data( 'cke-saved-src', this.getValue() ); + element.setAttribute( 'src', this.getValue() ); + } + else if ( type == CLEANUP ) + { + element.setAttribute( 'src', '' ); // If removeAttribute doesn't work. + element.removeAttribute( 'src' ); + } + }, + validate : CKEDITOR.dialog.validate.notEmpty( editor.lang.image.urlMissing ) + }, + { + type : 'button', + id : 'browse', + // v-align with the 'txtUrl' field. + // TODO: We need something better than a fixed size here. + style : 'display:inline-block;margin-top:10px;', + align : 'center', + label : editor.lang.common.browseServer, + hidden : true, + filebrowser : 'info:txtUrl' + } + ] + } + ] + }, + { + id : 'txtAlt', + type : 'text', + label : editor.lang.image.alt, + accessKey : 'T', + 'default' : '', + onChange : function() + { + updatePreview( this.getDialog() ); + }, + setup : function( type, element ) + { + if ( type == IMAGE ) + this.setValue( element.getAttribute( 'alt' ) ); + }, + commit : function( type, element ) + { + if ( type == IMAGE ) + { + if ( this.getValue() || this.isChanged() ) + element.setAttribute( 'alt', this.getValue() ); + } + else if ( type == PREVIEW ) + { + element.setAttribute( 'alt', this.getValue() ); + } + else if ( type == CLEANUP ) + { + element.removeAttribute( 'alt' ); + } + } + }, + { + type : 'hbox', + children : + [ + { + id : 'basic', + type : 'vbox', + children : + [ + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + type : 'vbox', + padding : 1, + children : + [ + { + type : 'text', + width: '40px', + id : 'txtWidth', + label : editor.lang.common.width, + onKeyUp : onSizeChange, + onChange : function() + { + commitInternally.call( this, 'advanced:txtdlgGenStyle' ); + }, + validate : function() + { + var aMatch = this.getValue().match( regexGetSizeOrEmpty ), + isValid = !!( aMatch && parseInt( aMatch[1], 10 ) !== 0 ); + if ( !isValid ) + alert( editor.lang.common.invalidWidth ); + return isValid; + }, + setup : setupDimension, + commit : function( type, element, internalCommit ) + { + var value = this.getValue(); + if ( type == IMAGE ) + { + if ( value ) + element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) ); + else + element.removeStyle( 'width' ); + + !internalCommit && element.removeAttribute( 'width' ); + } + else if ( type == PREVIEW ) + { + var aMatch = value.match( regexGetSize ); + if ( !aMatch ) + { + var oImageOriginal = this.getDialog().originalElement; + if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' ) + element.setStyle( 'width', oImageOriginal.$.width + 'px'); + } + else + element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) ); + } + else if ( type == CLEANUP ) + { + element.removeAttribute( 'width' ); + element.removeStyle( 'width' ); + } + } + }, + { + type : 'text', + id : 'txtHeight', + width: '40px', + label : editor.lang.common.height, + onKeyUp : onSizeChange, + onChange : function() + { + commitInternally.call( this, 'advanced:txtdlgGenStyle' ); + }, + validate : function() + { + var aMatch = this.getValue().match( regexGetSizeOrEmpty ), + isValid = !!( aMatch && parseInt( aMatch[1], 10 ) !== 0 ); + if ( !isValid ) + alert( editor.lang.common.invalidHeight ); + return isValid; + }, + setup : setupDimension, + commit : function( type, element, internalCommit ) + { + var value = this.getValue(); + if ( type == IMAGE ) + { + if ( value ) + element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) ); + else + element.removeStyle( 'height' ); + + !internalCommit && element.removeAttribute( 'height' ); + } + else if ( type == PREVIEW ) + { + var aMatch = value.match( regexGetSize ); + if ( !aMatch ) + { + var oImageOriginal = this.getDialog().originalElement; + if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' ) + element.setStyle( 'height', oImageOriginal.$.height + 'px' ); + } + else + element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) ); + } + else if ( type == CLEANUP ) + { + element.removeAttribute( 'height' ); + element.removeStyle( 'height' ); + } + } + } + ] + }, + { + id : 'ratioLock', + type : 'html', + style : 'margin-top:30px;width:40px;height:40px;', + onLoad : function() + { + // Activate Reset button + var resetButton = CKEDITOR.document.getById( btnResetSizeId ), + ratioButton = CKEDITOR.document.getById( btnLockSizesId ); + if ( resetButton ) + { + resetButton.on( 'click', function( evt ) + { + resetSize( this ); + evt.data && evt.data.preventDefault(); + }, this.getDialog() ); + resetButton.on( 'mouseover', function() + { + this.addClass( 'cke_btn_over' ); + }, resetButton ); + resetButton.on( 'mouseout', function() + { + this.removeClass( 'cke_btn_over' ); + }, resetButton ); + } + // Activate (Un)LockRatio button + if ( ratioButton ) + { + ratioButton.on( 'click', function(evt) + { + var locked = switchLockRatio( this ), + oImageOriginal = this.originalElement, + width = this.getValueOf( 'info', 'txtWidth' ); + + if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' && width ) + { + var height = oImageOriginal.$.height / oImageOriginal.$.width * width; + if ( !isNaN( height ) ) + { + this.setValueOf( 'info', 'txtHeight', Math.round( height ) ); + updatePreview( this ); + } + } + evt.data && evt.data.preventDefault(); + }, this.getDialog() ); + ratioButton.on( 'mouseover', function() + { + this.addClass( 'cke_btn_over' ); + }, ratioButton ); + ratioButton.on( 'mouseout', function() + { + this.removeClass( 'cke_btn_over' ); + }, ratioButton ); + } + }, + html : '<div>'+ + '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.lockRatio + + '" class="cke_btn_locked" id="' + btnLockSizesId + '" role="checkbox"><span class="cke_icon"></span><span class="cke_label">' + editor.lang.image.lockRatio + '</span></a>' + + '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.resetSize + + '" class="cke_btn_reset" id="' + btnResetSizeId + '" role="button"><span class="cke_label">' + editor.lang.image.resetSize + '</span></a>'+ + '</div>' + } + ] + }, + { + type : 'vbox', + padding : 1, + children : + [ + { + type : 'text', + id : 'txtBorder', + width: '60px', + label : editor.lang.image.border, + 'default' : '', + onKeyUp : function() + { + updatePreview( this.getDialog() ); + }, + onChange : function() + { + commitInternally.call( this, 'advanced:txtdlgGenStyle' ); + }, + validate : CKEDITOR.dialog.validate.integer( editor.lang.image.validateBorder ), + setup : function( type, element ) + { + if ( type == IMAGE ) + { + var value, + borderStyle = element.getStyle( 'border-width' ); + borderStyle = borderStyle && borderStyle.match( /^(\d+px)(?: \1 \1 \1)?$/ ); + value = borderStyle && parseInt( borderStyle[ 1 ], 10 ); + isNaN ( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'border' ) ); + this.setValue( value ); + } + }, + commit : function( type, element, internalCommit ) + { + var value = parseInt( this.getValue(), 10 ); + if ( type == IMAGE || type == PREVIEW ) + { + if ( !isNaN( value ) ) + { + element.setStyle( 'border-width', CKEDITOR.tools.cssLength( value ) ); + element.setStyle( 'border-style', 'solid' ); + } + else if ( !value && this.isChanged() ) + { + element.removeStyle( 'border-width' ); + element.removeStyle( 'border-style' ); + element.removeStyle( 'border-color' ); + } + + if ( !internalCommit && type == IMAGE ) + element.removeAttribute( 'border' ); + } + else if ( type == CLEANUP ) + { + element.removeAttribute( 'border' ); + element.removeStyle( 'border-width' ); + element.removeStyle( 'border-style' ); + element.removeStyle( 'border-color' ); + } + } + }, + { + type : 'text', + id : 'txtHSpace', + width: '60px', + label : editor.lang.image.hSpace, + 'default' : '', + onKeyUp : function() + { + updatePreview( this.getDialog() ); + }, + onChange : function() + { + commitInternally.call( this, 'advanced:txtdlgGenStyle' ); + }, + validate : CKEDITOR.dialog.validate.integer( editor.lang.image.validateHSpace ), + setup : function( type, element ) + { + if ( type == IMAGE ) + { + var value, + marginLeftPx, + marginRightPx, + marginLeftStyle = element.getStyle( 'margin-left' ), + marginRightStyle = element.getStyle( 'margin-right' ); + + marginLeftStyle = marginLeftStyle && marginLeftStyle.match( pxLengthRegex ); + marginRightStyle = marginRightStyle && marginRightStyle.match( pxLengthRegex ); + marginLeftPx = parseInt( marginLeftStyle, 10 ); + marginRightPx = parseInt( marginRightStyle, 10 ); + + value = ( marginLeftPx == marginRightPx ) && marginLeftPx; + isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'hspace' ) ); + + this.setValue( value ); + } + }, + commit : function( type, element, internalCommit ) + { + var value = parseInt( this.getValue(), 10 ); + if ( type == IMAGE || type == PREVIEW ) + { + if ( !isNaN( value ) ) + { + element.setStyle( 'margin-left', CKEDITOR.tools.cssLength( value ) ); + element.setStyle( 'margin-right', CKEDITOR.tools.cssLength( value ) ); + } + else if ( !value && this.isChanged( ) ) + { + element.removeStyle( 'margin-left' ); + element.removeStyle( 'margin-right' ); + } + + if ( !internalCommit && type == IMAGE ) + element.removeAttribute( 'hspace' ); + } + else if ( type == CLEANUP ) + { + element.removeAttribute( 'hspace' ); + element.removeStyle( 'margin-left' ); + element.removeStyle( 'margin-right' ); + } + } + }, + { + type : 'text', + id : 'txtVSpace', + width : '60px', + label : editor.lang.image.vSpace, + 'default' : '', + onKeyUp : function() + { + updatePreview( this.getDialog() ); + }, + onChange : function() + { + commitInternally.call( this, 'advanced:txtdlgGenStyle' ); + }, + validate : CKEDITOR.dialog.validate.integer( editor.lang.image.validateVSpace ), + setup : function( type, element ) + { + if ( type == IMAGE ) + { + var value, + marginTopPx, + marginBottomPx, + marginTopStyle = element.getStyle( 'margin-top' ), + marginBottomStyle = element.getStyle( 'margin-bottom' ); + + marginTopStyle = marginTopStyle && marginTopStyle.match( pxLengthRegex ); + marginBottomStyle = marginBottomStyle && marginBottomStyle.match( pxLengthRegex ); + marginTopPx = parseInt( marginTopStyle, 10 ); + marginBottomPx = parseInt( marginBottomStyle, 10 ); + + value = ( marginTopPx == marginBottomPx ) && marginTopPx; + isNaN ( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'vspace' ) ); + this.setValue( value ); + } + }, + commit : function( type, element, internalCommit ) + { + var value = parseInt( this.getValue(), 10 ); + if ( type == IMAGE || type == PREVIEW ) + { + if ( !isNaN( value ) ) + { + element.setStyle( 'margin-top', CKEDITOR.tools.cssLength( value ) ); + element.setStyle( 'margin-bottom', CKEDITOR.tools.cssLength( value ) ); + } + else if ( !value && this.isChanged( ) ) + { + element.removeStyle( 'margin-top' ); + element.removeStyle( 'margin-bottom' ); + } + + if ( !internalCommit && type == IMAGE ) + element.removeAttribute( 'vspace' ); + } + else if ( type == CLEANUP ) + { + element.removeAttribute( 'vspace' ); + element.removeStyle( 'margin-top' ); + element.removeStyle( 'margin-bottom' ); + } + } + }, + { + id : 'cmbAlign', + type : 'select', + widths : [ '35%','65%' ], + style : 'width:90px', + label : editor.lang.common.align, + 'default' : '', + items : + [ + [ editor.lang.common.notSet , ''], + [ editor.lang.common.alignLeft , 'left'], + [ editor.lang.common.alignRight , 'right'] + // Backward compatible with v2 on setup when specified as attribute value, + // while these values are no more available as select options. + // [ editor.lang.image.alignAbsBottom , 'absBottom'], + // [ editor.lang.image.alignAbsMiddle , 'absMiddle'], + // [ editor.lang.image.alignBaseline , 'baseline'], + // [ editor.lang.image.alignTextTop , 'text-top'], + // [ editor.lang.image.alignBottom , 'bottom'], + // [ editor.lang.image.alignMiddle , 'middle'], + // [ editor.lang.image.alignTop , 'top'] + ], + onChange : function() + { + updatePreview( this.getDialog() ); + commitInternally.call( this, 'advanced:txtdlgGenStyle' ); + }, + setup : function( type, element ) + { + if ( type == IMAGE ) + { + var value = element.getStyle( 'float' ); + switch( value ) + { + // Ignore those unrelated values. + case 'inherit': + case 'none': + value = ''; + } + + !value && ( value = ( element.getAttribute( 'align' ) || '' ).toLowerCase() ); + this.setValue( value ); + } + }, + commit : function( type, element, internalCommit ) + { + var value = this.getValue(); + if ( type == IMAGE || type == PREVIEW ) + { + if ( value ) + element.setStyle( 'float', value ); + else + element.removeStyle( 'float' ); + + if ( !internalCommit && type == IMAGE ) + { + value = ( element.getAttribute( 'align' ) || '' ).toLowerCase(); + switch( value ) + { + // we should remove it only if it matches "left" or "right", + // otherwise leave it intact. + case 'left': + case 'right': + element.removeAttribute( 'align' ); + } + } + } + else if ( type == CLEANUP ) + element.removeStyle( 'float' ); + + } + } + ] + } + ] + }, + { + type : 'vbox', + height : '250px', + children : + [ + { + type : 'html', + id : 'htmlPreview', + style : 'width:95%;', + html : '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.common.preview ) +'<br>'+ + '<div id="' + imagePreviewLoaderId + '" class="ImagePreviewLoader" style="display:none"><div class="loading"> </div></div>'+ + '<div id="' + imagePreviewBoxId + '" class="ImagePreviewBox"><table><tr><td>'+ + '<a href="javascript:void(0)" target="_blank" onclick="return false;" id="' + previewLinkId + '">'+ + '<img id="' + previewImageId + '" alt="" /></a>' + + ( editor.config.image_previewText || + 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. '+ + 'Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, '+ + 'nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.' ) + + '</td></tr></table></div></div>' + } + ] + } + ] + } + ] + }, + { + id : 'Link', + label : editor.lang.link.title, + padding : 0, + elements : + [ + { + id : 'txtUrl', + type : 'text', + label : editor.lang.common.url, + style : 'width: 100%', + 'default' : '', + setup : function( type, element ) + { + if ( type == LINK ) + { + var href = element.data( 'cke-saved-href' ); + if ( !href ) + href = element.getAttribute( 'href' ); + this.setValue( href ); + } + }, + commit : function( type, element ) + { + if ( type == LINK ) + { + if ( this.getValue() || this.isChanged() ) + { + var url = decodeURI( this.getValue() ); + element.data( 'cke-saved-href', url ); + element.setAttribute( 'href', url ); + + if ( this.getValue() || !editor.config.image_removeLinkByEmptyURL ) + this.getDialog().addLink = true; + } + } + } + }, + { + type : 'button', + id : 'browse', + filebrowser : + { + action : 'Browse', + target: 'Link:txtUrl', + url: editor.config.filebrowserImageBrowseLinkUrl + }, + style : 'float:right', + hidden : true, + label : editor.lang.common.browseServer + }, + { + id : 'cmbTarget', + type : 'select', + label : editor.lang.common.target, + 'default' : '', + items : + [ + [ editor.lang.common.notSet , ''], + [ editor.lang.common.targetNew , '_blank'], + [ editor.lang.common.targetTop , '_top'], + [ editor.lang.common.targetSelf , '_self'], + [ editor.lang.common.targetParent , '_parent'] + ], + setup : function( type, element ) + { + if ( type == LINK ) + this.setValue( element.getAttribute( 'target' ) || '' ); + }, + commit : function( type, element ) + { + if ( type == LINK ) + { + if ( this.getValue() || this.isChanged() ) + element.setAttribute( 'target', this.getValue() ); + } + } + } + ] + }, + { + id : 'Upload', + hidden : true, + filebrowser : 'uploadButton', + label : editor.lang.image.upload, + elements : + [ + { + type : 'file', + id : 'upload', + label : editor.lang.image.btnUpload, + style: 'height:40px', + size : 38 + }, + { + type : 'fileButton', + id : 'uploadButton', + filebrowser : 'info:txtUrl', + label : editor.lang.image.btnUpload, + 'for' : [ 'Upload', 'upload' ] + } + ] + }, + { + id : 'advanced', + label : editor.lang.common.advancedTab, + elements : + [ + { + type : 'hbox', + widths : [ '50%', '25%', '25%' ], + children : + [ + { + type : 'text', + id : 'linkId', + label : editor.lang.common.id, + setup : function( type, element ) + { + if ( type == IMAGE ) + this.setValue( element.getAttribute( 'id' ) ); + }, + commit : function( type, element ) + { + if ( type == IMAGE ) + { + if ( this.getValue() || this.isChanged() ) + element.setAttribute( 'id', this.getValue() ); + } + } + }, + { + id : 'cmbLangDir', + type : 'select', + style : 'width : 100px;', + label : editor.lang.common.langDir, + 'default' : '', + items : + [ + [ editor.lang.common.notSet, '' ], + [ editor.lang.common.langDirLtr, 'ltr' ], + [ editor.lang.common.langDirRtl, 'rtl' ] + ], + setup : function( type, element ) + { + if ( type == IMAGE ) + this.setValue( element.getAttribute( 'dir' ) ); + }, + commit : function( type, element ) + { + if ( type == IMAGE ) + { + if ( this.getValue() || this.isChanged() ) + element.setAttribute( 'dir', this.getValue() ); + } + } + }, + { + type : 'text', + id : 'txtLangCode', + label : editor.lang.common.langCode, + 'default' : '', + setup : function( type, element ) + { + if ( type == IMAGE ) + this.setValue( element.getAttribute( 'lang' ) ); + }, + commit : function( type, element ) + { + if ( type == IMAGE ) + { + if ( this.getValue() || this.isChanged() ) + element.setAttribute( 'lang', this.getValue() ); + } + } + } + ] + }, + { + type : 'text', + id : 'txtGenLongDescr', + label : editor.lang.common.longDescr, + setup : function( type, element ) + { + if ( type == IMAGE ) + this.setValue( element.getAttribute( 'longDesc' ) ); + }, + commit : function( type, element ) + { + if ( type == IMAGE ) + { + if ( this.getValue() || this.isChanged() ) + element.setAttribute( 'longDesc', this.getValue() ); + } + } + }, + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + type : 'text', + id : 'txtGenClass', + label : editor.lang.common.cssClass, + 'default' : '', + setup : function( type, element ) + { + if ( type == IMAGE ) + this.setValue( element.getAttribute( 'class' ) ); + }, + commit : function( type, element ) + { + if ( type == IMAGE ) + { + if ( this.getValue() || this.isChanged() ) + element.setAttribute( 'class', this.getValue() ); + } + } + }, + { + type : 'text', + id : 'txtGenTitle', + label : editor.lang.common.advisoryTitle, + 'default' : '', + onChange : function() + { + updatePreview( this.getDialog() ); + }, + setup : function( type, element ) + { + if ( type == IMAGE ) + this.setValue( element.getAttribute( 'title' ) ); + }, + commit : function( type, element ) + { + if ( type == IMAGE ) + { + if ( this.getValue() || this.isChanged() ) + element.setAttribute( 'title', this.getValue() ); + } + else if ( type == PREVIEW ) + { + element.setAttribute( 'title', this.getValue() ); + } + else if ( type == CLEANUP ) + { + element.removeAttribute( 'title' ); + } + } + } + ] + }, + { + type : 'text', + id : 'txtdlgGenStyle', + label : editor.lang.common.cssStyle, + 'default' : '', + setup : function( type, element ) + { + if ( type == IMAGE ) + { + var genStyle = element.getAttribute( 'style' ); + if ( !genStyle && element.$.style.cssText ) + genStyle = element.$.style.cssText; + this.setValue( genStyle ); + + var height = element.$.style.height, + width = element.$.style.width, + aMatchH = ( height ? height : '' ).match( regexGetSize ), + aMatchW = ( width ? width : '').match( regexGetSize ); + + this.attributesInStyle = + { + height : !!aMatchH, + width : !!aMatchW + }; + } + }, + onChange : function () + { + commitInternally.call( this, + [ 'info:cmbFloat', 'info:cmbAlign', + 'info:txtVSpace', 'info:txtHSpace', + 'info:txtBorder', + 'info:txtWidth', 'info:txtHeight' ] ); + updatePreview( this ); + }, + commit : function( type, element ) + { + if ( type == IMAGE && ( this.getValue() || this.isChanged() ) ) + { + element.setAttribute( 'style', this.getValue() ); + } + } + } + ] + } + ] + }; + }; + + CKEDITOR.dialog.add( 'image', function( editor ) + { + return imageDialog( editor, 'image' ); + }); + + CKEDITOR.dialog.add( 'imagebutton', function( editor ) + { + return imageDialog( editor, 'imagebutton' ); + }); +})(); diff --git a/_source/plugins/image/plugin.js b/_source/plugins/image/plugin.js new file mode 100644 index 0000000..7285b0f --- /dev/null +++ b/_source/plugins/image/plugin.js @@ -0,0 +1,81 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Image plugin + */ + +CKEDITOR.plugins.add( 'image', +{ + init : function( editor ) + { + var pluginName = 'image'; + + // Register the dialog. + CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/image.js' ); + + // Register the command. + editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName ) ); + + // Register the toolbar button. + editor.ui.addButton( 'Image', + { + label : editor.lang.common.image, + command : pluginName + }); + + editor.on( 'doubleclick', function( evt ) + { + var element = evt.data.element; + + if ( element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() ) + evt.data.dialog = 'image'; + }); + + // If the "menu" plugin is loaded, register the menu items. + if ( editor.addMenuItems ) + { + editor.addMenuItems( + { + image : + { + label : editor.lang.image.menu, + command : 'image', + group : 'image' + } + }); + } + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || !element.is( 'img' ) || element.data( 'cke-realelement' ) || element.isReadOnly() ) + return null; + + return { image : CKEDITOR.TRISTATE_OFF }; + }); + } + } +} ); + +/** + * Whether to remove links when emptying the link URL field in the image dialog. + * @type Boolean + * @default true + * @example + * config.image_removeLinkByEmptyURL = false; + */ +CKEDITOR.config.image_removeLinkByEmptyURL = true; + +/** + * Padding text to set off the image in preview area. + * @name CKEDITOR.config.image_previewText + * @type String + * @default "Lorem ipsum dolor..." placehoder text. + * @example + * config.image_previewText = CKEDITOR.tools.repeat( '___ ', 100 ); + */ diff --git a/_source/plugins/indent/plugin.js b/_source/plugins/indent/plugin.js new file mode 100644 index 0000000..330af61 --- /dev/null +++ b/_source/plugins/indent/plugin.js @@ -0,0 +1,461 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Increse and decrease indent commands. + */ + +(function() +{ + var listNodeNames = { ol : 1, ul : 1 }, + isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ), + isNotBookmark = CKEDITOR.dom.walker.bookmark( false, true ); + + function onSelectionChange( evt ) + { + if ( evt.editor.readOnly ) + return null; + + var editor = evt.editor, + elementPath = evt.data.path, + list = elementPath && elementPath.contains( listNodeNames ), + firstBlock = elementPath.block || elementPath.blockLimit; + + if ( list ) + return this.setState( CKEDITOR.TRISTATE_OFF ); + + if ( !this.useIndentClasses && this.name == 'indent' ) + return this.setState( CKEDITOR.TRISTATE_OFF ); + + if ( !firstBlock ) + return this.setState( CKEDITOR.TRISTATE_DISABLED ); + + if ( this.useIndentClasses ) + { + var indentClass = firstBlock.$.className.match( this.classNameRegex ), + indentStep = 0; + if ( indentClass ) + { + indentClass = indentClass[1]; + indentStep = this.indentClassMap[ indentClass ]; + } + if ( ( this.name == 'outdent' && !indentStep ) || + ( this.name == 'indent' && indentStep == editor.config.indentClasses.length ) ) + return this.setState( CKEDITOR.TRISTATE_DISABLED ); + return this.setState( CKEDITOR.TRISTATE_OFF ); + } + else + { + var indent = parseInt( firstBlock.getStyle( getIndentCssProperty( firstBlock ) ), 10 ); + if ( isNaN( indent ) ) + indent = 0; + if ( indent <= 0 ) + return this.setState( CKEDITOR.TRISTATE_DISABLED ); + return this.setState( CKEDITOR.TRISTATE_OFF ); + } + } + + function indentCommand( editor, name ) + { + this.name = name; + this.useIndentClasses = editor.config.indentClasses && editor.config.indentClasses.length > 0; + if ( this.useIndentClasses ) + { + this.classNameRegex = new RegExp( '(?:^|\\s+)(' + editor.config.indentClasses.join( '|' ) + ')(?=$|\\s)' ); + this.indentClassMap = {}; + for ( var i = 0 ; i < editor.config.indentClasses.length ; i++ ) + this.indentClassMap[ editor.config.indentClasses[i] ] = i + 1; + } + + this.startDisabled = name == 'outdent'; + } + + // Returns the CSS property to be used for identing a given element. + function getIndentCssProperty( element, dir ) + { + return ( dir || element.getComputedStyle( 'direction' ) ) == 'ltr' ? 'margin-left' : 'margin-right'; + } + + function isListItem( node ) + { + return node.type = CKEDITOR.NODE_ELEMENT && node.is( 'li' ); + } + + indentCommand.prototype = { + exec : function( editor ) + { + var self = this, database = {}; + + function indentList( listNode ) + { + // Our starting and ending points of the range might be inside some blocks under a list item... + // So before playing with the iterator, we need to expand the block to include the list items. + var startContainer = range.startContainer, + endContainer = range.endContainer; + while ( startContainer && !startContainer.getParent().equals( listNode ) ) + startContainer = startContainer.getParent(); + while ( endContainer && !endContainer.getParent().equals( listNode ) ) + endContainer = endContainer.getParent(); + + if ( !startContainer || !endContainer ) + return; + + // Now we can iterate over the individual items on the same tree depth. + var block = startContainer, + itemsToMove = [], + stopFlag = false; + while ( !stopFlag ) + { + if ( block.equals( endContainer ) ) + stopFlag = true; + itemsToMove.push( block ); + block = block.getNext(); + } + if ( itemsToMove.length < 1 ) + return; + + // Do indent or outdent operations on the array model of the list, not the + // list's DOM tree itself. The array model demands that it knows as much as + // possible about the surrounding lists, we need to feed it the further + // ancestor node that is still a list. + var listParents = listNode.getParents( true ); + for ( var i = 0 ; i < listParents.length ; i++ ) + { + if ( listParents[i].getName && listNodeNames[ listParents[i].getName() ] ) + { + listNode = listParents[i]; + break; + } + } + var indentOffset = self.name == 'indent' ? 1 : -1, + startItem = itemsToMove[0], + lastItem = itemsToMove[ itemsToMove.length - 1 ]; + + // Convert the list DOM tree into a one dimensional array. + var listArray = CKEDITOR.plugins.list.listToArray( listNode, database ); + + // Apply indenting or outdenting on the array. + var baseIndent = listArray[ lastItem.getCustomData( 'listarray_index' ) ].indent; + for ( i = startItem.getCustomData( 'listarray_index' ); i <= lastItem.getCustomData( 'listarray_index' ); i++ ) + { + listArray[ i ].indent += indentOffset; + // Make sure the newly created sublist get a brand-new element of the same type. (#5372) + var listRoot = listArray[ i ].parent; + listArray[ i ].parent = new CKEDITOR.dom.element( listRoot.getName(), listRoot.getDocument() ); + } + + for ( i = lastItem.getCustomData( 'listarray_index' ) + 1 ; + i < listArray.length && listArray[i].indent > baseIndent ; i++ ) + listArray[i].indent += indentOffset; + + // Convert the array back to a DOM forest (yes we might have a few subtrees now). + // And replace the old list with the new forest. + var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, listNode.getDirection() ); + + // Avoid nested <li> after outdent even they're visually same, + // recording them for later refactoring.(#3982) + if ( self.name == 'outdent' ) + { + var parentLiElement; + if ( ( parentLiElement = listNode.getParent() ) && parentLiElement.is( 'li' ) ) + { + var children = newList.listNode.getChildren(), + pendingLis = [], + count = children.count(), + child; + + for ( i = count - 1 ; i >= 0 ; i-- ) + { + if ( ( child = children.getItem( i ) ) && child.is && child.is( 'li' ) ) + pendingLis.push( child ); + } + } + } + + if ( newList ) + newList.listNode.replace( listNode ); + + // Move the nested <li> to be appeared after the parent. + if ( pendingLis && pendingLis.length ) + { + for ( i = 0; i < pendingLis.length ; i++ ) + { + var li = pendingLis[ i ], + followingList = li; + + // Nest preceding <ul>/<ol> inside current <li> if any. + while ( ( followingList = followingList.getNext() ) && + followingList.is && + followingList.getName() in listNodeNames ) + { + // IE requires a filler NBSP for nested list inside empty list item, + // otherwise the list item will be inaccessiable. (#4476) + if ( CKEDITOR.env.ie && !li.getFirst( function( node ){ return isNotWhitespaces( node ) && isNotBookmark( node ); } ) ) + li.append( range.document.createText( '\u00a0' ) ); + + li.append( followingList ); + } + + li.insertAfter( parentLiElement ); + } + } + } + + function indentBlock() + { + var iterator = range.createIterator(), + enterMode = editor.config.enterMode; + iterator.enforceRealBlocks = true; + iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; + var block; + while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) + indentElement( block ); + } + + function indentElement( element, dir ) + { + if ( element.getCustomData( 'indent_processed' ) ) + return false; + + if ( self.useIndentClasses ) + { + // Transform current class name to indent step index. + var indentClass = element.$.className.match( self.classNameRegex ), + indentStep = 0; + if ( indentClass ) + { + indentClass = indentClass[1]; + indentStep = self.indentClassMap[ indentClass ]; + } + + // Operate on indent step index, transform indent step index back to class + // name. + if ( self.name == 'outdent' ) + indentStep--; + else + indentStep++; + + if ( indentStep < 0 ) + return false; + + indentStep = Math.min( indentStep, editor.config.indentClasses.length ); + indentStep = Math.max( indentStep, 0 ); + element.$.className = CKEDITOR.tools.ltrim( element.$.className.replace( self.classNameRegex, '' ) ); + if ( indentStep > 0 ) + element.addClass( editor.config.indentClasses[ indentStep - 1 ] ); + } + else + { + var indentCssProperty = getIndentCssProperty( element, dir ), + currentOffset = parseInt( element.getStyle( indentCssProperty ), 10 ); + if ( isNaN( currentOffset ) ) + currentOffset = 0; + var indentOffset = editor.config.indentOffset || 40; + currentOffset += ( self.name == 'indent' ? 1 : -1 ) * indentOffset; + + if ( currentOffset < 0 ) + return false; + + currentOffset = Math.max( currentOffset, 0 ); + currentOffset = Math.ceil( currentOffset / indentOffset ) * indentOffset; + element.setStyle( indentCssProperty, currentOffset ? currentOffset + ( editor.config.indentUnit || 'px' ) : '' ); + if ( element.getAttribute( 'style' ) === '' ) + element.removeAttribute( 'style' ); + } + + CKEDITOR.dom.element.setMarker( database, element, 'indent_processed', 1 ); + return true; + } + + var selection = editor.getSelection(), + bookmarks = selection.createBookmarks( 1 ), + ranges = selection && selection.getRanges( 1 ), + range; + + + var iterator = ranges.createIterator(); + while ( ( range = iterator.getNextRange() ) ) + { + var rangeRoot = range.getCommonAncestor(), + nearestListBlock = rangeRoot; + + while ( nearestListBlock && !( nearestListBlock.type == CKEDITOR.NODE_ELEMENT && + listNodeNames[ nearestListBlock.getName() ] ) ) + nearestListBlock = nearestListBlock.getParent(); + + // Avoid having selection enclose the entire list. (#6138) + // [<ul><li>...</li></ul>] =><ul><li>[...]</li></ul> + if ( !nearestListBlock ) + { + var selectedNode = range.getEnclosedNode(); + if ( selectedNode + && selectedNode.type == CKEDITOR.NODE_ELEMENT + && selectedNode.getName() in listNodeNames) + { + range.setStartAt( selectedNode, CKEDITOR.POSITION_AFTER_START ); + range.setEndAt( selectedNode, CKEDITOR.POSITION_BEFORE_END ); + nearestListBlock = selectedNode; + } + } + + // Avoid selection anchors under list root. + // <ul>[<li>...</li>]</ul> => <ul><li>[...]</li></ul> + if ( nearestListBlock && range.startContainer.type == CKEDITOR.NODE_ELEMENT + && range.startContainer.getName() in listNodeNames ) + { + var walker = new CKEDITOR.dom.walker( range ); + walker.evaluator = isListItem; + range.startContainer = walker.next(); + } + + if ( nearestListBlock && range.endContainer.type == CKEDITOR.NODE_ELEMENT + && range.endContainer.getName() in listNodeNames ) + { + walker = new CKEDITOR.dom.walker( range ); + walker.evaluator = isListItem; + range.endContainer = walker.previous(); + } + + if ( nearestListBlock ) + { + var firstListItem = nearestListBlock.getFirst( isListItem ), + hasMultipleItems = !!firstListItem.getNext( isListItem ), + rangeStart = range.startContainer, + indentWholeList = firstListItem.equals( rangeStart ) || firstListItem.contains( rangeStart ); + + // Indent the entire list if cursor is inside the first list item. (#3893) + // Only do that for indenting or when using indent classes or when there is something to outdent. (#6141) + if ( !( indentWholeList && + ( self.name == 'indent' || self.useIndentClasses || parseInt( nearestListBlock.getStyle( getIndentCssProperty( nearestListBlock ) ), 10 ) ) && + indentElement( nearestListBlock, !hasMultipleItems && firstListItem.getDirection() ) ) ) + indentList( nearestListBlock ); + } + else + indentBlock(); + } + + // Clean up the markers. + CKEDITOR.dom.element.clearAllMarkers( database ); + + editor.forceNextSelectionCheck(); + selection.selectBookmarks( bookmarks ); + } + }; + + CKEDITOR.plugins.add( 'indent', + { + init : function( editor ) + { + // Register commands. + var indent = editor.addCommand( 'indent', new indentCommand( editor, 'indent' ) ), + outdent = editor.addCommand( 'outdent', new indentCommand( editor, 'outdent' ) ); + + // Register the toolbar buttons. + editor.ui.addButton( 'Indent', + { + label : editor.lang.indent, + command : 'indent' + }); + editor.ui.addButton( 'Outdent', + { + label : editor.lang.outdent, + command : 'outdent' + }); + + // Register the state changing handlers. + editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, indent ) ); + editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, outdent ) ); + + // [IE6/7] Raw lists are using margin instead of padding for visual indentation in wysiwyg mode. (#3893) + if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ) + { + editor.addCss( + "ul,ol" + + "{" + + " margin-left: 0px;" + + " padding-left: 40px;" + + "}" ); + } + + // Register dirChanged listener. + editor.on( 'dirChanged', function( e ) + { + var range = new CKEDITOR.dom.range( editor.document ); + range.setStartBefore( e.data.node ); + range.setEndAfter( e.data.node ); + + var walker = new CKEDITOR.dom.walker( range ), + node; + + while ( ( node = walker.next() ) ) + { + if ( node.type == CKEDITOR.NODE_ELEMENT ) + { + // A child with the defined dir is to be ignored. + if ( !node.equals( e.data.node ) && node.getDirection() ) + { + range.setStartAfter( node ); + walker = new CKEDITOR.dom.walker( range ); + continue; + } + + // Switch alignment classes. + var classes = editor.config.indentClasses; + if ( classes ) + { + var suffix = ( e.data.dir == 'ltr' ) ? [ '_rtl', '' ] : [ '', '_rtl' ]; + for ( var i = 0; i < classes.length; i++ ) + { + if ( node.hasClass( classes[ i ] + suffix[ 0 ] ) ) + { + node.removeClass( classes[ i ] + suffix[ 0 ] ); + node.addClass( classes[ i ] + suffix[ 1 ] ); + } + } + } + + // Switch the margins. + var marginLeft = node.getStyle( 'margin-right' ), + marginRight = node.getStyle( 'margin-left' ); + + marginLeft ? node.setStyle( 'margin-left', marginLeft ) : node.removeStyle( 'margin-left' ); + marginRight ? node.setStyle( 'margin-right', marginRight ) : node.removeStyle( 'margin-right' ); + } + } + }); + }, + + requires : [ 'domiterator', 'list' ] + } ); +})(); + +/** + * Size of each indentation step + * @name CKEDITOR.config.indentOffset + * @type Number + * @default 40 + * @example + * config.indentOffset = 4; + */ + + /** + * Unit for the indentation style + * @name CKEDITOR.config.indentUnit + * @type String + * @default 'px' + * @example + * config.indentUnit = 'em'; + */ + + /** + * List of classes to use for indenting the contents. If it's null, no classes will be used + * and instead the {@link #indentUnit} and {@link #indentOffset} properties will be used. + * @name CKEDITOR.config.indentClasses + * @type Array + * @default null + * @example + * // Use the classes 'Indent1', 'Indent2', 'Indent3' + * config.indentClasses = ['Indent1', 'Indent2', 'Indent3']; + */ diff --git a/_source/plugins/justify/plugin.js b/_source/plugins/justify/plugin.js new file mode 100644 index 0000000..82c1fcc --- /dev/null +++ b/_source/plugins/justify/plugin.js @@ -0,0 +1,253 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Justify commands. + */ + +(function() +{ + function getState( editor, path ) + { + var firstBlock = path.block || path.blockLimit; + + if ( !firstBlock || firstBlock.getName() == 'body' ) + return CKEDITOR.TRISTATE_OFF; + + return ( getAlignment( firstBlock, editor.config.useComputedState ) == this.value ) ? + CKEDITOR.TRISTATE_ON : + CKEDITOR.TRISTATE_OFF; + } + + function getAlignment( element, useComputedState ) + { + useComputedState = useComputedState === undefined || useComputedState; + + var align; + if ( useComputedState ) + align = element.getComputedStyle( 'text-align' ); + else + { + while ( !element.hasAttribute || !( element.hasAttribute( 'align' ) || element.getStyle( 'text-align' ) ) ) + { + var parent = element.getParent(); + if ( !parent ) + break; + element = parent; + } + align = element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || ''; + } + + align && ( align = align.replace( /-moz-|-webkit-|start|auto/i, '' ) ); + + !align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' ); + + return align; + } + + function onSelectionChange( evt ) + { + if ( evt.editor.readOnly ) + return; + + var command = evt.editor.getCommand( this.name ); + command.state = getState.call( this, evt.editor, evt.data.path ); + command.fire( 'state' ); + } + + function justifyCommand( editor, name, value ) + { + this.name = name; + this.value = value; + + var classes = editor.config.justifyClasses; + if ( classes ) + { + switch ( value ) + { + case 'left' : + this.cssClassName = classes[0]; + break; + case 'center' : + this.cssClassName = classes[1]; + break; + case 'right' : + this.cssClassName = classes[2]; + break; + case 'justify' : + this.cssClassName = classes[3]; + break; + } + + this.cssClassRegex = new RegExp( '(?:^|\\s+)(?:' + classes.join( '|' ) + ')(?=$|\\s)' ); + } + } + + function onDirChanged( e ) + { + var editor = e.editor; + + var range = new CKEDITOR.dom.range( editor.document ); + range.setStartBefore( e.data.node ); + range.setEndAfter( e.data.node ); + + var walker = new CKEDITOR.dom.walker( range ), + node; + + while ( ( node = walker.next() ) ) + { + if ( node.type == CKEDITOR.NODE_ELEMENT ) + { + // A child with the defined dir is to be ignored. + if ( !node.equals( e.data.node ) && node.getDirection() ) + { + range.setStartAfter( node ); + walker = new CKEDITOR.dom.walker( range ); + continue; + } + + // Switch the alignment. + var classes = editor.config.justifyClasses; + if ( classes ) + { + // The left align class. + if ( node.hasClass( classes[ 0 ] ) ) + { + node.removeClass( classes[ 0 ] ); + node.addClass( classes[ 2 ] ); + } + // The right align class. + else if ( node.hasClass( classes[ 2 ] ) ) + { + node.removeClass( classes[ 2 ] ); + node.addClass( classes[ 0 ] ); + } + } + + // Always switch CSS margins. + var style = 'text-align'; + var align = node.getStyle( style ); + + if ( align == 'left' ) + node.setStyle( style, 'right' ); + else if ( align == 'right' ) + node.setStyle( style, 'left' ); + } + } + } + + justifyCommand.prototype = { + exec : function( editor ) + { + var selection = editor.getSelection(), + enterMode = editor.config.enterMode; + + if ( !selection ) + return; + + var bookmarks = selection.createBookmarks(), + ranges = selection.getRanges( true ); + + var cssClassName = this.cssClassName, + iterator, + block; + + var useComputedState = editor.config.useComputedState; + useComputedState = useComputedState === undefined || useComputedState; + + for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) + { + iterator = ranges[ i ].createIterator(); + iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; + + while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) + { + block.removeAttribute( 'align' ); + block.removeStyle( 'text-align' ); + + // Remove any of the alignment classes from the className. + var className = cssClassName && ( block.$.className = + CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) ); + + var apply = + ( this.state == CKEDITOR.TRISTATE_OFF ) && + ( !useComputedState || ( getAlignment( block, true ) != this.value ) ); + + if ( cssClassName ) + { + // Append the desired class name. + if ( apply ) + block.addClass( cssClassName ); + else if ( !className ) + block.removeAttribute( 'class' ); + } + else if ( apply ) + block.setStyle( 'text-align', this.value ); + } + + } + + editor.focus(); + editor.forceNextSelectionCheck(); + selection.selectBookmarks( bookmarks ); + } + }; + + CKEDITOR.plugins.add( 'justify', + { + init : function( editor ) + { + var left = new justifyCommand( editor, 'justifyleft', 'left' ), + center = new justifyCommand( editor, 'justifycenter', 'center' ), + right = new justifyCommand( editor, 'justifyright', 'right' ), + justify = new justifyCommand( editor, 'justifyblock', 'justify' ); + + editor.addCommand( 'justifyleft', left ); + editor.addCommand( 'justifycenter', center ); + editor.addCommand( 'justifyright', right ); + editor.addCommand( 'justifyblock', justify ); + + editor.ui.addButton( 'JustifyLeft', + { + label : editor.lang.justify.left, + command : 'justifyleft' + } ); + editor.ui.addButton( 'JustifyCenter', + { + label : editor.lang.justify.center, + command : 'justifycenter' + } ); + editor.ui.addButton( 'JustifyRight', + { + label : editor.lang.justify.right, + command : 'justifyright' + } ); + editor.ui.addButton( 'JustifyBlock', + { + label : editor.lang.justify.block, + command : 'justifyblock' + } ); + + editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, left ) ); + editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, right ) ); + editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, center ) ); + editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, justify ) ); + editor.on( 'dirChanged', onDirChanged ); + }, + + requires : [ 'domiterator' ] + }); +})(); + + /** + * List of classes to use for aligning the contents. If it's null, no classes will be used + * and instead the corresponding CSS values will be used. The array should contain 4 members, in the following order: left, center, right, justify. + * @name CKEDITOR.config.justifyClasses + * @type Array + * @default null + * @example + * // Use the classes 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' + * config.justifyClasses = [ 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' ]; + */ diff --git a/_source/plugins/keystrokes/plugin.js b/_source/plugins/keystrokes/plugin.js new file mode 100644 index 0000000..b49a893 --- /dev/null +++ b/_source/plugins/keystrokes/plugin.js @@ -0,0 +1,225 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +// Register a plugin named "sample". +CKEDITOR.plugins.add( 'keystrokes', +{ + beforeInit : function( editor ) + { + /** + * Controls keystrokes typing in this editor instance. + * @name CKEDITOR.editor.prototype.keystrokeHandler + * @type CKEDITOR.keystrokeHandler + * @example + */ + editor.keystrokeHandler = new CKEDITOR.keystrokeHandler( editor ); + + editor.specialKeys = {}; + }, + + init : function( editor ) + { + var keystrokesConfig = editor.config.keystrokes, + blockedConfig = editor.config.blockedKeystrokes; + + var keystrokes = editor.keystrokeHandler.keystrokes, + blockedKeystrokes = editor.keystrokeHandler.blockedKeystrokes; + + for ( var i = 0 ; i < keystrokesConfig.length ; i++ ) + keystrokes[ keystrokesConfig[i][0] ] = keystrokesConfig[i][1]; + + for ( i = 0 ; i < blockedConfig.length ; i++ ) + blockedKeystrokes[ blockedConfig[i] ] = 1; + } +}); + +/** + * Controls keystrokes typing in an editor instance. + * @constructor + * @param {CKEDITOR.editor} editor The editor instance. + * @example + */ +CKEDITOR.keystrokeHandler = function( editor ) +{ + if ( editor.keystrokeHandler ) + return editor.keystrokeHandler; + + /** + * List of keystrokes associated to commands. Each entry points to the + * command to be executed. + * @type Object + * @example + */ + this.keystrokes = {}; + + /** + * List of keystrokes that should be blocked if not defined at + * {@link keystrokes}. In this way it is possible to block the default + * browser behavior for those keystrokes. + * @type Object + * @example + */ + this.blockedKeystrokes = {}; + + this._ = + { + editor : editor + }; + + return this; +}; + +(function() +{ + var cancel; + + var onKeyDown = function( event ) + { + // The DOM event object is passed by the "data" property. + event = event.data; + + var keyCombination = event.getKeystroke(); + var command = this.keystrokes[ keyCombination ]; + var editor = this._.editor; + + cancel = ( editor.fire( 'key', { keyCode : keyCombination } ) === true ); + + if ( !cancel ) + { + if ( command ) + { + var data = { from : 'keystrokeHandler' }; + cancel = ( editor.execCommand( command, data ) !== false ); + } + + if ( !cancel ) + { + var handler = editor.specialKeys[ keyCombination ]; + cancel = ( handler && handler( editor ) === true ); + + if ( !cancel ) + cancel = !!this.blockedKeystrokes[ keyCombination ]; + } + } + + if ( cancel ) + event.preventDefault( true ); + + return !cancel; + }; + + var onKeyPress = function( event ) + { + if ( cancel ) + { + cancel = false; + event.data.preventDefault( true ); + } + }; + + CKEDITOR.keystrokeHandler.prototype = + { + /** + * Attaches this keystroke handle to a DOM object. Keystrokes typed + ** over this object will get handled by this keystrokeHandler. + * @param {CKEDITOR.dom.domObject} domObject The DOM object to attach + * to. + * @example + */ + attach : function( domObject ) + { + // For most browsers, it is enough to listen to the keydown event + // only. + domObject.on( 'keydown', onKeyDown, this ); + + // Some browsers instead, don't cancel key events in the keydown, but in the + // keypress. So we must do a longer trip in those cases. + if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) ) + domObject.on( 'keypress', onKeyPress, this ); + } + }; +})(); + +/** + * A list of keystrokes to be blocked if not defined in the {@link CKEDITOR.config.keystrokes} + * setting. In this way it is possible to block the default browser behavior + * for those keystrokes. + * @type Array + * @default (see example) + * @example + * // This is actually the default value. + * config.blockedKeystrokes = + * [ + * CKEDITOR.CTRL + 66 /*B*/, + * CKEDITOR.CTRL + 73 /*I*/, + * CKEDITOR.CTRL + 85 /*U*/ + * ]; + */ +CKEDITOR.config.blockedKeystrokes = +[ + CKEDITOR.CTRL + 66 /*B*/, + CKEDITOR.CTRL + 73 /*I*/, + CKEDITOR.CTRL + 85 /*U*/ +]; + +/** + * A list associating keystrokes to editor commands. Each element in the list + * is an array where the first item is the keystroke, and the second is the + * name of the command to be executed. + * @type Array + * @default (see example) + * @example + * // This is actually the default value. + * config.keystrokes = + * [ + * [ CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ], + * [ CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ], + * + * [ CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ], + * + * [ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ], + * [ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ], + * [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ], + * + * [ CKEDITOR.CTRL + 76 /*L*/, 'link' ], + * + * [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ], + * [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ], + * [ CKEDITOR.CTRL + 85 /*U*/, 'underline' ], + * + * [ CKEDITOR.ALT + 109 /*-*/, 'toolbarCollapse' ] + * ]; + */ +CKEDITOR.config.keystrokes = +[ + [ CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ], + [ CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ], + + [ CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ], + [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ], + + [ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ], + [ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ], + [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ], + + [ CKEDITOR.CTRL + 76 /*L*/, 'link' ], + + [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ], + [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ], + [ CKEDITOR.CTRL + 85 /*U*/, 'underline' ], + + [ CKEDITOR.ALT + ( CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109 ) /*-*/, 'toolbarCollapse' ], + [ CKEDITOR.ALT + 48 /*0*/, 'a11yHelp' ] +]; + +/** + * Fired when any keyboard key (or combination) is pressed into the editing area. + * @name CKEDITOR.editor#key + * @event + * @param {Number} data.keyCode A number representing the key code (or + * combination). It is the sum of the current key code and the + * {@link CKEDITOR.CTRL}, {@link CKEDITOR.SHIFT} and {@link CKEDITOR.ALT} + * constants, if those are pressed. + */ diff --git a/_source/plugins/link/dialogs/anchor.js b/_source/plugins/link/dialogs/anchor.js new file mode 100644 index 0000000..1fbcc2a --- /dev/null +++ b/_source/plugins/link/dialogs/anchor.js @@ -0,0 +1,144 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'anchor', function( editor ) +{ + // Function called in onShow to load selected element. + var loadElements = function( element ) + { + this._.selectedElement = element; + + var attributeValue = element.data( 'cke-saved-name' ); + this.setValueOf( 'info','txtName', attributeValue || '' ); + }; + + function createFakeAnchor( editor, anchor ) + { + return editor.createFakeElement( anchor, 'cke_anchor', 'anchor' ); + } + + return { + title : editor.lang.anchor.title, + minWidth : 300, + minHeight : 60, + onOk : function() + { + var name = this.getValueOf( 'info', 'txtName' ); + var attributes = + { + name : name, + 'data-cke-saved-name' : name + }; + + if ( this._.selectedElement ) + { + if ( this._.selectedElement.data( 'cke-realelement' ) ) + { + var newFake = createFakeAnchor( editor, editor.document.createElement( 'a', { attributes: attributes } ) ); + newFake.replace( this._.selectedElement ); + } + else + this._.selectedElement.setAttributes( attributes ); + } + else + { + var sel = editor.getSelection(), + range = sel && sel.getRanges()[ 0 ]; + + // Empty anchor + if ( range.collapsed ) + { + if ( CKEDITOR.plugins.link.synAnchorSelector ) + attributes[ 'class' ] = 'cke_anchor_empty'; + + if ( CKEDITOR.plugins.link.emptyAnchorFix ) + { + attributes[ 'contenteditable' ] = 'false'; + attributes[ 'data-cke-editable' ] = 1; + } + + var anchor = editor.document.createElement( 'a', { attributes: attributes } ); + + // Transform the anchor into a fake element for browsers that need it. + if ( CKEDITOR.plugins.link.fakeAnchor ) + anchor = createFakeAnchor( editor, anchor ); + + range.insertNode( anchor ); + } + else + { + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) + attributes['class'] = 'cke_anchor'; + + // Apply style. + var style = new CKEDITOR.style( { element : 'a', attributes : attributes } ); + style.type = CKEDITOR.STYLE_INLINE; + style.apply( editor.document ); + } + } + }, + + onHide : function() + { + delete this._.selectedElement; + }, + + onShow : function() + { + var selection = editor.getSelection(), + fullySelected = selection.getSelectedElement(), + partialSelected; + + // Detect the anchor under selection. + if ( fullySelected ) + { + if ( CKEDITOR.plugins.link.fakeAnchor ) + { + var realElement = CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, fullySelected ); + realElement && loadElements.call( this, realElement ); + this._.selectedElement = fullySelected; + } + else if ( fullySelected.is( 'a' ) && fullySelected.hasAttribute( 'name' ) ) + loadElements.call( this, fullySelected ); + } + else + { + partialSelected = CKEDITOR.plugins.link.getSelectedLink( editor ); + if ( partialSelected ) + { + loadElements.call( this, partialSelected ); + selection.selectElement( partialSelected ); + } + } + + this.getContentElement( 'info', 'txtName' ).focus(); + }, + contents : [ + { + id : 'info', + label : editor.lang.anchor.title, + accessKey : 'I', + elements : + [ + { + type : 'text', + id : 'txtName', + label : editor.lang.anchor.name, + required: true, + validate : function() + { + if ( !this.getValue() ) + { + alert( editor.lang.anchor.errorName ); + return false; + } + return true; + } + } + ] + } + ] + }; +} ); diff --git a/_source/plugins/link/dialogs/link.js b/_source/plugins/link/dialogs/link.js new file mode 100644 index 0000000..51f5623 --- /dev/null +++ b/_source/plugins/link/dialogs/link.js @@ -0,0 +1,1424 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'link', function( editor ) +{ + var plugin = CKEDITOR.plugins.link; + // Handles the event when the "Target" selection box is changed. + var targetChanged = function() + { + var dialog = this.getDialog(), + popupFeatures = dialog.getContentElement( 'target', 'popupFeatures' ), + targetName = dialog.getContentElement( 'target', 'linkTargetName' ), + value = this.getValue(); + + if ( !popupFeatures || !targetName ) + return; + + popupFeatures = popupFeatures.getElement(); + popupFeatures.hide(); + targetName.setValue( '' ); + + switch ( value ) + { + case 'frame' : + targetName.setLabel( editor.lang.link.targetFrameName ); + targetName.getElement().show(); + break; + case 'popup' : + popupFeatures.show(); + targetName.setLabel( editor.lang.link.targetPopupName ); + targetName.getElement().show(); + break; + default : + targetName.setValue( value ); + targetName.getElement().hide(); + break; + } + + }; + + // Handles the event when the "Type" selection box is changed. + var linkTypeChanged = function() + { + var dialog = this.getDialog(), + partIds = [ 'urlOptions', 'anchorOptions', 'emailOptions' ], + typeValue = this.getValue(), + uploadTab = dialog.definition.getContents( 'upload' ), + uploadInitiallyHidden = uploadTab && uploadTab.hidden; + + if ( typeValue == 'url' ) + { + if ( editor.config.linkShowTargetTab ) + dialog.showPage( 'target' ); + if ( !uploadInitiallyHidden ) + dialog.showPage( 'upload' ); + } + else + { + dialog.hidePage( 'target' ); + if ( !uploadInitiallyHidden ) + dialog.hidePage( 'upload' ); + } + + for ( var i = 0 ; i < partIds.length ; i++ ) + { + var element = dialog.getContentElement( 'info', partIds[i] ); + if ( !element ) + continue; + + element = element.getElement().getParent().getParent(); + if ( partIds[i] == typeValue + 'Options' ) + element.show(); + else + element.hide(); + } + + dialog.layout(); + }; + + // Loads the parameters in a selected link to the link dialog fields. + var javascriptProtocolRegex = /^javascript:/, + emailRegex = /^mailto:([^?]+)(?:\?(.+))?$/, + emailSubjectRegex = /subject=([^;?:@&=$,\/]*)/, + emailBodyRegex = /body=([^;?:@&=$,\/]*)/, + anchorRegex = /^#(.*)$/, + urlRegex = /^((?:http|https|ftp|news):\/\/)?(.*)$/, + selectableTargets = /^(_(?:self|top|parent|blank))$/, + encodedEmailLinkRegex = /^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/, + functionCallProtectedEmailLinkRegex = /^javascript:([^(]+)\(([^)]+)\)$/; + + var popupRegex = + /\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/; + var popupFeaturesRegex = /(?:^|,)([^=]+)=(\d+|yes|no)/gi; + + var parseLink = function( editor, element ) + { + var href = ( element && ( element.data( 'cke-saved-href' ) || element.getAttribute( 'href' ) ) ) || '', + javascriptMatch, + emailMatch, + anchorMatch, + urlMatch, + retval = {}; + + if ( ( javascriptMatch = href.match( javascriptProtocolRegex ) ) ) + { + if ( emailProtection == 'encode' ) + { + href = href.replace( encodedEmailLinkRegex, + function ( match, protectedAddress, rest ) + { + return 'mailto:' + + String.fromCharCode.apply( String, protectedAddress.split( ',' ) ) + + ( rest && unescapeSingleQuote( rest ) ); + }); + } + // Protected email link as function call. + else if ( emailProtection ) + { + href.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs ) + { + if ( funcName == compiledProtectionFunction.name ) + { + retval.type = 'email'; + var email = retval.email = {}; + + var paramRegex = /[^,\s]+/g, + paramQuoteRegex = /(^')|('$)/g, + paramsMatch = funcArgs.match( paramRegex ), + paramsMatchLength = paramsMatch.length, + paramName, + paramVal; + + for ( var i = 0; i < paramsMatchLength; i++ ) + { + paramVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) ); + paramName = compiledProtectionFunction.params[ i ].toLowerCase(); + email[ paramName ] = paramVal; + } + email.address = [ email.name, email.domain ].join( '@' ); + } + } ); + } + } + + if ( !retval.type ) + { + if ( ( anchorMatch = href.match( anchorRegex ) ) ) + { + retval.type = 'anchor'; + retval.anchor = {}; + retval.anchor.name = retval.anchor.id = anchorMatch[1]; + } + // Protected email link as encoded string. + else if ( ( emailMatch = href.match( emailRegex ) ) ) + { + var subjectMatch = href.match( emailSubjectRegex ), + bodyMatch = href.match( emailBodyRegex ); + + retval.type = 'email'; + var email = ( retval.email = {} ); + email.address = emailMatch[ 1 ]; + subjectMatch && ( email.subject = decodeURIComponent( subjectMatch[ 1 ] ) ); + bodyMatch && ( email.body = decodeURIComponent( bodyMatch[ 1 ] ) ); + } + // urlRegex matches empty strings, so need to check for href as well. + else if ( href && ( urlMatch = href.match( urlRegex ) ) ) + { + retval.type = 'url'; + retval.url = {}; + retval.url.protocol = urlMatch[1]; + retval.url.url = urlMatch[2]; + } + else + retval.type = 'url'; + } + + // Load target and popup settings. + if ( element ) + { + var target = element.getAttribute( 'target' ); + retval.target = {}; + retval.adv = {}; + + // IE BUG: target attribute is an empty string instead of null in IE if it's not set. + if ( !target ) + { + var onclick = element.data( 'cke-pa-onclick' ) || element.getAttribute( 'onclick' ), + onclickMatch = onclick && onclick.match( popupRegex ); + if ( onclickMatch ) + { + retval.target.type = 'popup'; + retval.target.name = onclickMatch[1]; + + var featureMatch; + while ( ( featureMatch = popupFeaturesRegex.exec( onclickMatch[2] ) ) ) + { + // Some values should remain numbers (#7300) + if ( ( featureMatch[2] == 'yes' || featureMatch[2] == '1' ) && !( featureMatch[1] in { height:1, width:1, top:1, left:1 } ) ) + retval.target[ featureMatch[1] ] = true; + else if ( isFinite( featureMatch[2] ) ) + retval.target[ featureMatch[1] ] = featureMatch[2]; + } + } + } + else + { + var targetMatch = target.match( selectableTargets ); + if ( targetMatch ) + retval.target.type = retval.target.name = target; + else + { + retval.target.type = 'frame'; + retval.target.name = target; + } + } + + var me = this; + var advAttr = function( inputName, attrName ) + { + var value = element.getAttribute( attrName ); + if ( value !== null ) + retval.adv[ inputName ] = value || ''; + }; + advAttr( 'advId', 'id' ); + advAttr( 'advLangDir', 'dir' ); + advAttr( 'advAccessKey', 'accessKey' ); + + retval.adv.advName = + element.data( 'cke-saved-name' ) + || element.getAttribute( 'name' ) + || ''; + advAttr( 'advLangCode', 'lang' ); + advAttr( 'advTabIndex', 'tabindex' ); + advAttr( 'advTitle', 'title' ); + advAttr( 'advContentType', 'type' ); + CKEDITOR.plugins.link.synAnchorSelector ? + retval.adv.advCSSClasses = getLinkClass( element ) + : advAttr( 'advCSSClasses', 'class' ); + advAttr( 'advCharset', 'charset' ); + advAttr( 'advStyles', 'style' ); + advAttr( 'advRel', 'rel' ); + } + + // Find out whether we have any anchors in the editor. + var anchors = retval.anchors = [], + item; + + // For some browsers we set contenteditable="false" on anchors, making document.anchors not to include them, so we must traverse the links manually (#7893). + if ( CKEDITOR.plugins.link.emptyAnchorFix ) + { + var links = editor.document.getElementsByTag( 'a' ); + for ( i = 0, count = links.count(); i < count; i++ ) + { + item = links.getItem( i ); + if ( item.data( 'cke-saved-name' ) || item.hasAttribute( 'name' ) ) + anchors.push( { name : item.data( 'cke-saved-name' ) || item.getAttribute( 'name' ), id : item.getAttribute( 'id' ) } ); + } + } + else + { + var anchorList = new CKEDITOR.dom.nodeList( editor.document.$.anchors ); + for ( var i = 0, count = anchorList.count(); i < count; i++ ) + { + item = anchorList.getItem( i ); + anchors[ i ] = { name : item.getAttribute( 'name' ), id : item.getAttribute( 'id' ) }; + } + } + + if ( CKEDITOR.plugins.link.fakeAnchor ) + { + var imgs = editor.document.getElementsByTag( 'img' ); + for ( i = 0, count = imgs.count(); i < count; i++ ) + { + if ( ( item = CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, imgs.getItem( i ) ) ) ) + anchors.push( { name : item.getAttribute( 'name' ), id : item.getAttribute( 'id' ) } ); + } + } + + // Record down the selected element in the dialog. + this._.selectedElement = element; + return retval; + }; + + var setupParams = function( page, data ) + { + if ( data[page] ) + this.setValue( data[page][this.id] || '' ); + }; + + var setupPopupParams = function( data ) + { + return setupParams.call( this, 'target', data ); + }; + + var setupAdvParams = function( data ) + { + return setupParams.call( this, 'adv', data ); + }; + + var commitParams = function( page, data ) + { + if ( !data[page] ) + data[page] = {}; + + data[page][this.id] = this.getValue() || ''; + }; + + var commitPopupParams = function( data ) + { + return commitParams.call( this, 'target', data ); + }; + + var commitAdvParams = function( data ) + { + return commitParams.call( this, 'adv', data ); + }; + + function unescapeSingleQuote( str ) + { + return str.replace( /\\'/g, '\'' ); + } + + function escapeSingleQuote( str ) + { + return str.replace( /'/g, '\\$&' ); + } + + var emailProtection = editor.config.emailProtection || ''; + + // Compile the protection function pattern. + if ( emailProtection && emailProtection != 'encode' ) + { + var compiledProtectionFunction = {}; + + emailProtection.replace( /^([^(]+)\(([^)]+)\)$/, function( match, funcName, params ) + { + compiledProtectionFunction.name = funcName; + compiledProtectionFunction.params = []; + params.replace( /[^,\s]+/g, function( param ) + { + compiledProtectionFunction.params.push( param ); + } ); + } ); + } + + function protectEmailLinkAsFunction( email ) + { + var retval, + name = compiledProtectionFunction.name, + params = compiledProtectionFunction.params, + paramName, + paramValue; + + retval = [ name, '(' ]; + for ( var i = 0; i < params.length; i++ ) + { + paramName = params[ i ].toLowerCase(); + paramValue = email[ paramName ]; + + i > 0 && retval.push( ',' ); + retval.push( '\'', + paramValue ? + escapeSingleQuote( encodeURIComponent( email[ paramName ] ) ) + : '', + '\''); + } + retval.push( ')' ); + return retval.join( '' ); + } + + function protectEmailAddressAsEncodedString( address ) + { + var charCode, + length = address.length, + encodedChars = []; + for ( var i = 0; i < length; i++ ) + { + charCode = address.charCodeAt( i ); + encodedChars.push( charCode ); + } + return 'String.fromCharCode(' + encodedChars.join( ',' ) + ')'; + } + + function getLinkClass( ele ) + { + var className = ele.getAttribute( 'class' ); + return className ? className.replace( /\s*(?:cke_anchor_empty|cke_anchor)(?:\s*$)?/g, '' ) : ''; + } + + var commonLang = editor.lang.common, + linkLang = editor.lang.link; + + return { + title : linkLang.title, + minWidth : 350, + minHeight : 230, + contents : [ + { + id : 'info', + label : linkLang.info, + title : linkLang.info, + elements : + [ + { + id : 'linkType', + type : 'select', + label : linkLang.type, + 'default' : 'url', + items : + [ + [ linkLang.toUrl, 'url' ], + [ linkLang.toAnchor, 'anchor' ], + [ linkLang.toEmail, 'email' ] + ], + onChange : linkTypeChanged, + setup : function( data ) + { + if ( data.type ) + this.setValue( data.type ); + }, + commit : function( data ) + { + data.type = this.getValue(); + } + }, + { + type : 'vbox', + id : 'urlOptions', + children : + [ + { + type : 'hbox', + widths : [ '25%', '75%' ], + children : + [ + { + id : 'protocol', + type : 'select', + label : commonLang.protocol, + 'default' : 'http://', + items : + [ + // Force 'ltr' for protocol names in BIDI. (#5433) + [ 'http://\u200E', 'http://' ], + [ 'https://\u200E', 'https://' ], + [ 'ftp://\u200E', 'ftp://' ], + [ 'news://\u200E', 'news://' ], + [ linkLang.other , '' ] + ], + setup : function( data ) + { + if ( data.url ) + this.setValue( data.url.protocol || '' ); + }, + commit : function( data ) + { + if ( !data.url ) + data.url = {}; + + data.url.protocol = this.getValue(); + } + }, + { + type : 'text', + id : 'url', + label : commonLang.url, + required: true, + onLoad : function () + { + this.allowOnChange = true; + }, + onKeyUp : function() + { + this.allowOnChange = false; + var protocolCmb = this.getDialog().getContentElement( 'info', 'protocol' ), + url = this.getValue(), + urlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/i, + urlOnChangeTestOther = /^((javascript:)|[#\/\.\?])/i; + + var protocol = urlOnChangeProtocol.exec( url ); + if ( protocol ) + { + this.setValue( url.substr( protocol[ 0 ].length ) ); + protocolCmb.setValue( protocol[ 0 ].toLowerCase() ); + } + else if ( urlOnChangeTestOther.test( url ) ) + protocolCmb.setValue( '' ); + + this.allowOnChange = true; + }, + onChange : function() + { + if ( this.allowOnChange ) // Dont't call on dialog load. + this.onKeyUp(); + }, + validate : function() + { + var dialog = this.getDialog(); + + if ( dialog.getContentElement( 'info', 'linkType' ) && + dialog.getValueOf( 'info', 'linkType' ) != 'url' ) + return true; + + if ( this.getDialog().fakeObj ) // Edit Anchor. + return true; + + var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noUrl ); + return func.apply( this ); + }, + setup : function( data ) + { + this.allowOnChange = false; + if ( data.url ) + this.setValue( data.url.url ); + this.allowOnChange = true; + + }, + commit : function( data ) + { + // IE will not trigger the onChange event if the mouse has been used + // to carry all the operations #4724 + this.onChange(); + + if ( !data.url ) + data.url = {}; + + data.url.url = this.getValue(); + this.allowOnChange = false; + } + } + ], + setup : function( data ) + { + if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) + this.getElement().show(); + } + }, + { + type : 'button', + id : 'browse', + hidden : 'true', + filebrowser : 'info:url', + label : commonLang.browseServer + } + ] + }, + { + type : 'vbox', + id : 'anchorOptions', + width : 260, + align : 'center', + padding : 0, + children : + [ + { + type : 'fieldset', + id : 'selectAnchorText', + label : linkLang.selectAnchor, + setup : function( data ) + { + if ( data.anchors.length > 0 ) + this.getElement().show(); + else + this.getElement().hide(); + }, + children : + [ + { + type : 'hbox', + id : 'selectAnchor', + children : + [ + { + type : 'select', + id : 'anchorName', + 'default' : '', + label : linkLang.anchorName, + style : 'width: 100%;', + items : + [ + [ '' ] + ], + setup : function( data ) + { + this.clear(); + this.add( '' ); + for ( var i = 0 ; i < data.anchors.length ; i++ ) + { + if ( data.anchors[i].name ) + this.add( data.anchors[i].name ); + } + + if ( data.anchor ) + this.setValue( data.anchor.name ); + + var linkType = this.getDialog().getContentElement( 'info', 'linkType' ); + if ( linkType && linkType.getValue() == 'email' ) + this.focus(); + }, + commit : function( data ) + { + if ( !data.anchor ) + data.anchor = {}; + + data.anchor.name = this.getValue(); + } + }, + { + type : 'select', + id : 'anchorId', + 'default' : '', + label : linkLang.anchorId, + style : 'width: 100%;', + items : + [ + [ '' ] + ], + setup : function( data ) + { + this.clear(); + this.add( '' ); + for ( var i = 0 ; i < data.anchors.length ; i++ ) + { + if ( data.anchors[i].id ) + this.add( data.anchors[i].id ); + } + + if ( data.anchor ) + this.setValue( data.anchor.id ); + }, + commit : function( data ) + { + if ( !data.anchor ) + data.anchor = {}; + + data.anchor.id = this.getValue(); + } + } + ], + setup : function( data ) + { + if ( data.anchors.length > 0 ) + this.getElement().show(); + else + this.getElement().hide(); + } + } + ] + }, + { + type : 'html', + id : 'noAnchors', + style : 'text-align: center;', + html : '<div role="label" tabIndex="-1">' + CKEDITOR.tools.htmlEncode( linkLang.noAnchors ) + '</div>', + // Focus the first element defined in above html. + focus : true, + setup : function( data ) + { + if ( data.anchors.length < 1 ) + this.getElement().show(); + else + this.getElement().hide(); + } + } + ], + setup : function( data ) + { + if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) + this.getElement().hide(); + } + }, + { + type : 'vbox', + id : 'emailOptions', + padding : 1, + children : + [ + { + type : 'text', + id : 'emailAddress', + label : linkLang.emailAddress, + required : true, + validate : function() + { + var dialog = this.getDialog(); + + if ( !dialog.getContentElement( 'info', 'linkType' ) || + dialog.getValueOf( 'info', 'linkType' ) != 'email' ) + return true; + + var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noEmail ); + return func.apply( this ); + }, + setup : function( data ) + { + if ( data.email ) + this.setValue( data.email.address ); + + var linkType = this.getDialog().getContentElement( 'info', 'linkType' ); + if ( linkType && linkType.getValue() == 'email' ) + this.select(); + }, + commit : function( data ) + { + if ( !data.email ) + data.email = {}; + + data.email.address = this.getValue(); + } + }, + { + type : 'text', + id : 'emailSubject', + label : linkLang.emailSubject, + setup : function( data ) + { + if ( data.email ) + this.setValue( data.email.subject ); + }, + commit : function( data ) + { + if ( !data.email ) + data.email = {}; + + data.email.subject = this.getValue(); + } + }, + { + type : 'textarea', + id : 'emailBody', + label : linkLang.emailBody, + rows : 3, + 'default' : '', + setup : function( data ) + { + if ( data.email ) + this.setValue( data.email.body ); + }, + commit : function( data ) + { + if ( !data.email ) + data.email = {}; + + data.email.body = this.getValue(); + } + } + ], + setup : function( data ) + { + if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) + this.getElement().hide(); + } + } + ] + }, + { + id : 'target', + label : linkLang.target, + title : linkLang.target, + elements : + [ + { + type : 'hbox', + widths : [ '50%', '50%' ], + children : + [ + { + type : 'select', + id : 'linkTargetType', + label : commonLang.target, + 'default' : 'notSet', + style : 'width : 100%;', + 'items' : + [ + [ commonLang.notSet, 'notSet' ], + [ linkLang.targetFrame, 'frame' ], + [ linkLang.targetPopup, 'popup' ], + [ commonLang.targetNew, '_blank' ], + [ commonLang.targetTop, '_top' ], + [ commonLang.targetSelf, '_self' ], + [ commonLang.targetParent, '_parent' ] + ], + onChange : targetChanged, + setup : function( data ) + { + if ( data.target ) + this.setValue( data.target.type || 'notSet' ); + targetChanged.call( this ); + }, + commit : function( data ) + { + if ( !data.target ) + data.target = {}; + + data.target.type = this.getValue(); + } + }, + { + type : 'text', + id : 'linkTargetName', + label : linkLang.targetFrameName, + 'default' : '', + setup : function( data ) + { + if ( data.target ) + this.setValue( data.target.name ); + }, + commit : function( data ) + { + if ( !data.target ) + data.target = {}; + + data.target.name = this.getValue().replace(/\W/gi, ''); + } + } + ] + }, + { + type : 'vbox', + width : '100%', + align : 'center', + padding : 2, + id : 'popupFeatures', + children : + [ + { + type : 'fieldset', + label : linkLang.popupFeatures, + children : + [ + { + type : 'hbox', + children : + [ + { + type : 'checkbox', + id : 'resizable', + label : linkLang.popupResizable, + setup : setupPopupParams, + commit : commitPopupParams + }, + { + type : 'checkbox', + id : 'status', + label : linkLang.popupStatusBar, + setup : setupPopupParams, + commit : commitPopupParams + + } + ] + }, + { + type : 'hbox', + children : + [ + { + type : 'checkbox', + id : 'location', + label : linkLang.popupLocationBar, + setup : setupPopupParams, + commit : commitPopupParams + + }, + { + type : 'checkbox', + id : 'toolbar', + label : linkLang.popupToolbar, + setup : setupPopupParams, + commit : commitPopupParams + + } + ] + }, + { + type : 'hbox', + children : + [ + { + type : 'checkbox', + id : 'menubar', + label : linkLang.popupMenuBar, + setup : setupPopupParams, + commit : commitPopupParams + + }, + { + type : 'checkbox', + id : 'fullscreen', + label : linkLang.popupFullScreen, + setup : setupPopupParams, + commit : commitPopupParams + + } + ] + }, + { + type : 'hbox', + children : + [ + { + type : 'checkbox', + id : 'scrollbars', + label : linkLang.popupScrollBars, + setup : setupPopupParams, + commit : commitPopupParams + + }, + { + type : 'checkbox', + id : 'dependent', + label : linkLang.popupDependent, + setup : setupPopupParams, + commit : commitPopupParams + + } + ] + }, + { + type : 'hbox', + children : + [ + { + type : 'text', + widths : [ '50%', '50%' ], + labelLayout : 'horizontal', + label : commonLang.width, + id : 'width', + setup : setupPopupParams, + commit : commitPopupParams + + }, + { + type : 'text', + labelLayout : 'horizontal', + widths : [ '50%', '50%' ], + label : linkLang.popupLeft, + id : 'left', + setup : setupPopupParams, + commit : commitPopupParams + + } + ] + }, + { + type : 'hbox', + children : + [ + { + type : 'text', + labelLayout : 'horizontal', + widths : [ '50%', '50%' ], + label : commonLang.height, + id : 'height', + setup : setupPopupParams, + commit : commitPopupParams + + }, + { + type : 'text', + labelLayout : 'horizontal', + label : linkLang.popupTop, + widths : [ '50%', '50%' ], + id : 'top', + setup : setupPopupParams, + commit : commitPopupParams + + } + ] + } + ] + } + ] + } + ] + }, + { + id : 'upload', + label : linkLang.upload, + title : linkLang.upload, + hidden : true, + filebrowser : 'uploadButton', + elements : + [ + { + type : 'file', + id : 'upload', + label : commonLang.upload, + style: 'height:40px', + size : 29 + }, + { + type : 'fileButton', + id : 'uploadButton', + label : commonLang.uploadSubmit, + filebrowser : 'info:url', + 'for' : [ 'upload', 'upload' ] + } + ] + }, + { + id : 'advanced', + label : linkLang.advanced, + title : linkLang.advanced, + elements : + [ + { + type : 'vbox', + padding : 1, + children : + [ + { + type : 'hbox', + widths : [ '45%', '35%', '20%' ], + children : + [ + { + type : 'text', + id : 'advId', + label : linkLang.id, + setup : setupAdvParams, + commit : commitAdvParams + }, + { + type : 'select', + id : 'advLangDir', + label : linkLang.langDir, + 'default' : '', + style : 'width:110px', + items : + [ + [ commonLang.notSet, '' ], + [ linkLang.langDirLTR, 'ltr' ], + [ linkLang.langDirRTL, 'rtl' ] + ], + setup : setupAdvParams, + commit : commitAdvParams + }, + { + type : 'text', + id : 'advAccessKey', + width : '80px', + label : linkLang.acccessKey, + maxLength : 1, + setup : setupAdvParams, + commit : commitAdvParams + + } + ] + }, + { + type : 'hbox', + widths : [ '45%', '35%', '20%' ], + children : + [ + { + type : 'text', + label : linkLang.name, + id : 'advName', + setup : setupAdvParams, + commit : commitAdvParams + + }, + { + type : 'text', + label : linkLang.langCode, + id : 'advLangCode', + width : '110px', + 'default' : '', + setup : setupAdvParams, + commit : commitAdvParams + + }, + { + type : 'text', + label : linkLang.tabIndex, + id : 'advTabIndex', + width : '80px', + maxLength : 5, + setup : setupAdvParams, + commit : commitAdvParams + + } + ] + } + ] + }, + { + type : 'vbox', + padding : 1, + children : + [ + { + type : 'hbox', + widths : [ '45%', '55%' ], + children : + [ + { + type : 'text', + label : linkLang.advisoryTitle, + 'default' : '', + id : 'advTitle', + setup : setupAdvParams, + commit : commitAdvParams + + }, + { + type : 'text', + label : linkLang.advisoryContentType, + 'default' : '', + id : 'advContentType', + setup : setupAdvParams, + commit : commitAdvParams + + } + ] + }, + { + type : 'hbox', + widths : [ '45%', '55%' ], + children : + [ + { + type : 'text', + label : linkLang.cssClasses, + 'default' : '', + id : 'advCSSClasses', + setup : setupAdvParams, + commit : commitAdvParams + + }, + { + type : 'text', + label : linkLang.charset, + 'default' : '', + id : 'advCharset', + setup : setupAdvParams, + commit : commitAdvParams + + } + ] + }, + { + type : 'hbox', + widths : [ '45%', '55%' ], + children : + [ + { + type : 'text', + label : linkLang.rel, + 'default' : '', + id : 'advRel', + setup : setupAdvParams, + commit : commitAdvParams + }, + { + type : 'text', + label : linkLang.styles, + 'default' : '', + id : 'advStyles', + setup : setupAdvParams, + commit : commitAdvParams + } + ] + } + ] + } + ] + } + ], + onShow : function() + { + var editor = this.getParentEditor(), + selection = editor.getSelection(), + element = null; + + // Fill in all the relevant fields if there's already one link selected. + if ( ( element = plugin.getSelectedLink( editor ) ) && element.hasAttribute( 'href' ) ) + selection.selectElement( element ); + else + element = null; + + this.setupContent( parseLink.apply( this, [ editor, element ] ) ); + }, + onOk : function() + { + var attributes = {}, + removeAttributes = [], + data = {}, + me = this, + editor = this.getParentEditor(); + + this.commitContent( data ); + + // Compose the URL. + switch ( data.type || 'url' ) + { + case 'url': + var protocol = ( data.url && data.url.protocol != undefined ) ? data.url.protocol : 'http://', + url = ( data.url && CKEDITOR.tools.trim( data.url.url ) ) || ''; + attributes[ 'data-cke-saved-href' ] = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url; + break; + case 'anchor': + var name = ( data.anchor && data.anchor.name ), + id = ( data.anchor && data.anchor.id ); + attributes[ 'data-cke-saved-href' ] = '#' + ( name || id || '' ); + break; + case 'email': + + var linkHref, + email = data.email, + address = email.address; + + switch( emailProtection ) + { + case '' : + case 'encode' : + { + var subject = encodeURIComponent( email.subject || '' ), + body = encodeURIComponent( email.body || '' ); + + // Build the e-mail parameters first. + var argList = []; + subject && argList.push( 'subject=' + subject ); + body && argList.push( 'body=' + body ); + argList = argList.length ? '?' + argList.join( '&' ) : ''; + + if ( emailProtection == 'encode' ) + { + linkHref = [ 'javascript:void(location.href=\'mailto:\'+', + protectEmailAddressAsEncodedString( address ) ]; + // parameters are optional. + argList && linkHref.push( '+\'', escapeSingleQuote( argList ), '\'' ); + + linkHref.push( ')' ); + } + else + linkHref = [ 'mailto:', address, argList ]; + + break; + } + default : + { + // Separating name and domain. + var nameAndDomain = address.split( '@', 2 ); + email.name = nameAndDomain[ 0 ]; + email.domain = nameAndDomain[ 1 ]; + + linkHref = [ 'javascript:', protectEmailLinkAsFunction( email ) ]; + } + } + + attributes[ 'data-cke-saved-href' ] = linkHref.join( '' ); + break; + } + + // Popups and target. + if ( data.target ) + { + if ( data.target.type == 'popup' ) + { + var onclickList = [ 'window.open(this.href, \'', + data.target.name || '', '\', \'' ]; + var featureList = [ 'resizable', 'status', 'location', 'toolbar', 'menubar', 'fullscreen', + 'scrollbars', 'dependent' ]; + var featureLength = featureList.length; + var addFeature = function( featureName ) + { + if ( data.target[ featureName ] ) + featureList.push( featureName + '=' + data.target[ featureName ] ); + }; + + for ( var i = 0 ; i < featureLength ; i++ ) + featureList[i] = featureList[i] + ( data.target[ featureList[i] ] ? '=yes' : '=no' ) ; + addFeature( 'width' ); + addFeature( 'left' ); + addFeature( 'height' ); + addFeature( 'top' ); + + onclickList.push( featureList.join( ',' ), '\'); return false;' ); + attributes[ 'data-cke-pa-onclick' ] = onclickList.join( '' ); + + // Add the "target" attribute. (#5074) + removeAttributes.push( 'target' ); + } + else + { + if ( data.target.type != 'notSet' && data.target.name ) + attributes.target = data.target.name; + else + removeAttributes.push( 'target' ); + + removeAttributes.push( 'data-cke-pa-onclick', 'onclick' ); + } + } + + // Advanced attributes. + if ( data.adv ) + { + var advAttr = function( inputName, attrName ) + { + var value = data.adv[ inputName ]; + if ( value ) + attributes[attrName] = value; + else + removeAttributes.push( attrName ); + }; + + advAttr( 'advId', 'id' ); + advAttr( 'advLangDir', 'dir' ); + advAttr( 'advAccessKey', 'accessKey' ); + + if ( data.adv[ 'advName' ] ) + attributes[ 'name' ] = attributes[ 'data-cke-saved-name' ] = data.adv[ 'advName' ]; + else + removeAttributes = removeAttributes.concat( [ 'data-cke-saved-name', 'name' ] ); + + advAttr( 'advLangCode', 'lang' ); + advAttr( 'advTabIndex', 'tabindex' ); + advAttr( 'advTitle', 'title' ); + advAttr( 'advContentType', 'type' ); + advAttr( 'advCSSClasses', 'class' ); + advAttr( 'advCharset', 'charset' ); + advAttr( 'advStyles', 'style' ); + advAttr( 'advRel', 'rel' ); + } + + + // Browser need the "href" fro copy/paste link to work. (#6641) + attributes.href = attributes[ 'data-cke-saved-href' ]; + + if ( !this._.selectedElement ) + { + // Create element if current selection is collapsed. + var selection = editor.getSelection(), + ranges = selection.getRanges( true ); + if ( ranges.length == 1 && ranges[0].collapsed ) + { + // Short mailto link text view (#5736). + var text = new CKEDITOR.dom.text( data.type == 'email' ? + data.email.address : attributes[ 'data-cke-saved-href' ], editor.document ); + ranges[0].insertNode( text ); + ranges[0].selectNodeContents( text ); + selection.selectRanges( ranges ); + } + + // Apply style. + var style = new CKEDITOR.style( { element : 'a', attributes : attributes } ); + style.type = CKEDITOR.STYLE_INLINE; // need to override... dunno why. + style.apply( editor.document ); + } + else + { + // We're only editing an existing link, so just overwrite the attributes. + var element = this._.selectedElement, + href = element.data( 'cke-saved-href' ), + textView = element.getHtml(); + + element.setAttributes( attributes ); + element.removeAttributes( removeAttributes ); + + if ( data.adv && data.adv.advName && CKEDITOR.plugins.link.synAnchorSelector ) + element.addClass( element.getChildCount() ? 'cke_anchor' : 'cke_anchor_empty' ); + + // Update text view when user changes protocol (#4612). + if ( href == textView || data.type == 'email' && textView.indexOf( '@' ) != -1 ) + { + // Short mailto link text view (#5736). + element.setHtml( data.type == 'email' ? + data.email.address : attributes[ 'data-cke-saved-href' ] ); + } + + delete this._.selectedElement; + } + }, + onLoad : function() + { + if ( !editor.config.linkShowAdvancedTab ) + this.hidePage( 'advanced' ); //Hide Advanded tab. + + if ( !editor.config.linkShowTargetTab ) + this.hidePage( 'target' ); //Hide Target tab. + + }, + // Inital focus on 'url' field if link is of type URL. + onFocus : function() + { + var linkType = this.getContentElement( 'info', 'linkType' ), + urlField; + if ( linkType && linkType.getValue() == 'url' ) + { + urlField = this.getContentElement( 'info', 'url' ); + urlField.select(); + } + } + }; +}); + +/** + * The e-mail address anti-spam protection option. The protection will be + * applied when creating or modifying e-mail links through the editor interface.<br> + * Two methods of protection can be choosed: + * <ol> <li>The e-mail parts (name, domain and any other query string) are + * assembled into a function call pattern. Such function must be + * provided by the developer in the pages that will use the contents. + * <li>Only the e-mail address is obfuscated into a special string that + * has no meaning for humans or spam bots, but which is properly + * rendered and accepted by the browser.</li></ol> + * Both approaches require JavaScript to be enabled. + * @name CKEDITOR.config.emailProtection + * @since 3.1 + * @type String + * @default '' (empty string = disabled) + * @example + * // href="mailto:tester@ckeditor.com?subject=subject&body=body" + * config.emailProtection = ''; + * @example + * // href="<a href=\"javascript:void(location.href=\'mailto:\'+String.fromCharCode(116,101,115,116,101,114,64,99,107,101,100,105,116,111,114,46,99,111,109)+\'?subject=subject&body=body\')\">e-mail</a>" + * config.emailProtection = 'encode'; + * @example + * // href="javascript:mt('tester','ckeditor.com','subject','body')" + * config.emailProtection = 'mt(NAME,DOMAIN,SUBJECT,BODY)'; + */ diff --git a/_source/plugins/link/images/anchor.gif b/_source/plugins/link/images/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..5aa797b2240a432d9f3f1d166ed5542eaf684937 GIT binary patch literal 184 zcmZ?wbhEHb6ky<I*v!c=ZQ8Vk28RFtXa4{H|IB}enKOaxGseaYXU+f_{~0iV;!hSv z1_n+B9gqyj3<j1|1JBG0j>gJ|Uu&?oD;%Ae!z@09(NL_hv#6<cM+(mwx7vpr4xgLw z>Slx0y!YR{?r|LJZgAju=f-$sQVWNL{+Tsz18#+~Ke%+zTWns()WcPwy8dQcr!JH# U&i)o#<isE;*~HKyEXZID0Ma=`?EnA( literal 0 HcmV?d00001 diff --git a/_source/plugins/link/plugin.js b/_source/plugins/link/plugin.js new file mode 100644 index 0000000..4442432 --- /dev/null +++ b/_source/plugins/link/plugin.js @@ -0,0 +1,374 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'link', +{ + init : function( editor ) + { + // Add the link and unlink buttons. + editor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link' ) ); + editor.addCommand( 'anchor', new CKEDITOR.dialogCommand( 'anchor' ) ); + editor.addCommand( 'unlink', new CKEDITOR.unlinkCommand() ); + editor.addCommand( 'removeAnchor', new CKEDITOR.removeAnchorCommand() ); + editor.ui.addButton( 'Link', + { + label : editor.lang.link.toolbar, + command : 'link' + } ); + editor.ui.addButton( 'Unlink', + { + label : editor.lang.unlink, + command : 'unlink' + } ); + editor.ui.addButton( 'Anchor', + { + label : editor.lang.anchor.toolbar, + command : 'anchor' + } ); + CKEDITOR.dialog.add( 'link', this.path + 'dialogs/link.js' ); + CKEDITOR.dialog.add( 'anchor', this.path + 'dialogs/anchor.js' ); + + // Add the CSS styles for anchor placeholders. + + var side = ( editor.lang.dir == 'rtl' ? 'right' : 'left' ); + var basicCss = + 'background:url(' + CKEDITOR.getUrl( this.path + 'images/anchor.gif' ) + ') no-repeat ' + side + ' center;' + + 'border:1px dotted #00f;'; + + editor.addCss( + 'a.cke_anchor,a.cke_anchor_empty' + + // IE6 breaks with the following selectors. + ( ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 ) ? '' : + ',a[name],a[data-cke-saved-name]' ) + + '{' + + basicCss + + 'padding-' + side + ':18px;' + + // Show the arrow cursor for the anchor image (FF at least). + 'cursor:auto;' + + '}' + + ( CKEDITOR.env.ie ? ( + 'a.cke_anchor_empty' + + '{' + + // Make empty anchor selectable on IE. + 'display:inline-block;' + + '}' + ) : '' ) + + 'img.cke_anchor' + + '{' + + basicCss + + 'width:16px;' + + 'min-height:15px;' + + // The default line-height on IE. + 'height:1.15em;' + + // Opera works better with "middle" (even if not perfect) + 'vertical-align:' + ( CKEDITOR.env.opera ? 'middle' : 'text-bottom' ) + ';' + + '}'); + + // Register selection change handler for the unlink button. + editor.on( 'selectionChange', function( evt ) + { + if ( editor.readOnly ) + return; + + /* + * Despite our initial hope, document.queryCommandEnabled() does not work + * for this in Firefox. So we must detect the state by element paths. + */ + var command = editor.getCommand( 'unlink' ), + element = evt.data.path.lastElement && evt.data.path.lastElement.getAscendant( 'a', true ); + if ( element && element.getName() == 'a' && element.getAttribute( 'href' ) && element.getChildCount() ) + command.setState( CKEDITOR.TRISTATE_OFF ); + else + command.setState( CKEDITOR.TRISTATE_DISABLED ); + } ); + + editor.on( 'doubleclick', function( evt ) + { + var element = CKEDITOR.plugins.link.getSelectedLink( editor ) || evt.data.element; + + if ( !element.isReadOnly() ) + { + if ( element.is( 'a' ) ) + { + evt.data.dialog = ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) ? 'anchor' : 'link'; + editor.getSelection().selectElement( element ); + } + else if ( CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ) ) + evt.data.dialog = 'anchor'; + } + }); + + // If the "menu" plugin is loaded, register the menu items. + if ( editor.addMenuItems ) + { + editor.addMenuItems( + { + anchor : + { + label : editor.lang.anchor.menu, + command : 'anchor', + group : 'anchor', + order : 1 + }, + + removeAnchor : + { + label : editor.lang.anchor.remove, + command : 'removeAnchor', + group : 'anchor', + order : 5 + }, + + link : + { + label : editor.lang.link.menu, + command : 'link', + group : 'link', + order : 1 + }, + + unlink : + { + label : editor.lang.unlink, + command : 'unlink', + group : 'link', + order : 5 + } + }); + } + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || element.isReadOnly() ) + return null; + + var anchor = CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ); + + if ( !anchor && !( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) + return null; + + var menu = {}; + + if ( anchor.getAttribute( 'href' ) && anchor.getChildCount() ) + menu = { link : CKEDITOR.TRISTATE_OFF, unlink : CKEDITOR.TRISTATE_OFF }; + + if ( anchor && anchor.hasAttribute( 'name' ) ) + menu.anchor = menu.removeAnchor = CKEDITOR.TRISTATE_OFF; + + return menu; + }); + } + }, + + afterInit : function( editor ) + { + // Register a filter to displaying placeholders after mode change. + + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter, + htmlFilter = dataProcessor && dataProcessor.htmlFilter, + pathFilters = editor._.elementsPath && editor._.elementsPath.filters; + + if ( dataFilter ) + { + dataFilter.addRules( + { + elements : + { + a : function( element ) + { + var attributes = element.attributes; + if ( !attributes.name ) + return null; + + var isEmpty = !element.children.length; + + if ( CKEDITOR.plugins.link.synAnchorSelector ) + { + // IE needs a specific class name to be applied + // to the anchors, for appropriate styling. + var ieClass = isEmpty ? 'cke_anchor_empty' : 'cke_anchor'; + var cls = attributes[ 'class' ]; + if ( attributes.name && ( !cls || cls.indexOf( ieClass ) < 0 ) ) + attributes[ 'class' ] = ( cls || '' ) + ' ' + ieClass; + + if ( isEmpty && CKEDITOR.plugins.link.emptyAnchorFix ) + { + attributes.contenteditable = 'false'; + attributes[ 'data-cke-editable' ] = 1; + } + } + else if ( CKEDITOR.plugins.link.fakeAnchor && isEmpty ) + return editor.createFakeParserElement( element, 'cke_anchor', 'anchor' ); + + return null; + } + } + }); + } + + if ( CKEDITOR.plugins.link.emptyAnchorFix && htmlFilter ) + { + htmlFilter.addRules( + { + elements : + { + a : function( element ) + { + delete element.attributes.contenteditable; + } + } + }); + } + + if ( pathFilters ) + { + pathFilters.push( function( element, name ) + { + if ( name == 'a' ) + { + if ( CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ) || + ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) ) + { + return 'anchor'; + } + } + }); + } + }, + + requires : [ 'fakeobjects' ] +} ); + +CKEDITOR.plugins.link = +{ + /** + * Get the surrounding link element of current selection. + * @param editor + * @example CKEDITOR.plugins.link.getSelectedLink( editor ); + * @since 3.2.1 + * The following selection will all return the link element. + * <pre> + * <a href="#">li^nk</a> + * <a href="#">[link]</a> + * text[<a href="#">link]</a> + * <a href="#">li[nk</a>] + * [<b><a href="#">li]nk</a></b>] + * [<a href="#"><b>li]nk</b></a> + * </pre> + */ + getSelectedLink : function( editor ) + { + try + { + var selection = editor.getSelection(); + if ( selection.getType() == CKEDITOR.SELECTION_ELEMENT ) + { + var selectedElement = selection.getSelectedElement(); + if ( selectedElement.is( 'a' ) ) + return selectedElement; + } + + var range = selection.getRanges( true )[ 0 ]; + range.shrink( CKEDITOR.SHRINK_TEXT ); + var root = range.getCommonAncestor(); + return root.getAscendant( 'a', true ); + } + catch( e ) { return null; } + }, + + // Opera and WebKit don't make it possible to select empty anchors. Fake + // elements must be used for them. + fakeAnchor : CKEDITOR.env.opera || CKEDITOR.env.webkit, + + // For browsers that don't support CSS3 a[name]:empty(), note IE9 is included because of #7783. + synAnchorSelector : CKEDITOR.env.ie, + + // For browsers that have editing issue with empty anchor. + emptyAnchorFix : CKEDITOR.env.ie && CKEDITOR.env.version < 8, + + tryRestoreFakeAnchor : function( editor, element ) + { + if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'anchor' ) + { + var link = editor.restoreRealElement( element ); + if ( link.data( 'cke-saved-name' ) ) + return link; + } + } +}; + +CKEDITOR.unlinkCommand = function(){}; +CKEDITOR.unlinkCommand.prototype = +{ + /** @ignore */ + exec : function( editor ) + { + /* + * execCommand( 'unlink', ... ) in Firefox leaves behind <span> tags at where + * the <a> was, so again we have to remove the link ourselves. (See #430) + * + * TODO: Use the style system when it's complete. Let's use execCommand() + * as a stopgap solution for now. + */ + var selection = editor.getSelection(), + bookmarks = selection.createBookmarks(), + ranges = selection.getRanges(), + rangeRoot, + element; + + for ( var i = 0 ; i < ranges.length ; i++ ) + { + rangeRoot = ranges[i].getCommonAncestor( true ); + element = rangeRoot.getAscendant( 'a', true ); + if ( !element ) + continue; + ranges[i].selectNodeContents( element ); + } + + selection.selectRanges( ranges ); + editor.document.$.execCommand( 'unlink', false, null ); + selection.selectBookmarks( bookmarks ); + }, + + startDisabled : true +}; + +CKEDITOR.removeAnchorCommand = function(){}; +CKEDITOR.removeAnchorCommand.prototype = +{ + /** @ignore */ + exec : function( editor ) + { + var sel = editor.getSelection(), + bms = sel.createBookmarks(), + anchor; + if ( sel && ( anchor = sel.getSelectedElement() ) && ( CKEDITOR.plugins.link.fakeAnchor && !anchor.getChildCount() ? CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, anchor ) : anchor.is( 'a' ) ) ) + anchor.remove( 1 ); + else + { + if ( ( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) + { + if ( anchor.hasAttribute( 'href' ) ) + { + anchor.removeAttributes( { name : 1, 'data-cke-saved-name' : 1 } ); + anchor.removeClass( 'cke_anchor' ); + } + else + anchor.remove( 1 ); + } + } + sel.selectBookmarks( bms ); + } +}; + +CKEDITOR.tools.extend( CKEDITOR.config, +{ + linkShowAdvancedTab : true, + linkShowTargetTab : true +} ); diff --git a/_source/plugins/list/plugin.js b/_source/plugins/list/plugin.js new file mode 100644 index 0000000..bc28e51 --- /dev/null +++ b/_source/plugins/list/plugin.js @@ -0,0 +1,734 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Insert and remove numbered and bulleted lists. + */ + +(function() +{ + var listNodeNames = { ol : 1, ul : 1 }, + emptyTextRegex = /^[\n\r\t ]*$/; + + var whitespaces = CKEDITOR.dom.walker.whitespaces(), + bookmarks = CKEDITOR.dom.walker.bookmark(), + nonEmpty = function( node ){ return !( whitespaces( node ) || bookmarks( node ) ); }; + + CKEDITOR.plugins.list = { + /* + * Convert a DOM list tree into a data structure that is easier to + * manipulate. This operation should be non-intrusive in the sense that it + * does not change the DOM tree, with the exception that it may add some + * markers to the list item nodes when database is specified. + */ + listToArray : function( listNode, database, baseArray, baseIndentLevel, grandparentNode ) + { + if ( !listNodeNames[ listNode.getName() ] ) + return []; + + if ( !baseIndentLevel ) + baseIndentLevel = 0; + if ( !baseArray ) + baseArray = []; + + // Iterate over all list items to and look for inner lists. + for ( var i = 0, count = listNode.getChildCount() ; i < count ; i++ ) + { + var listItem = listNode.getChild( i ); + + // Fixing malformed nested lists by moving it into a previous list item. (#6236) + if( listItem.type == CKEDITOR.NODE_ELEMENT && listItem.getName() in CKEDITOR.dtd.$list ) + CKEDITOR.plugins.list.listToArray( listItem, database, baseArray, baseIndentLevel + 1 ); + + // It may be a text node or some funny stuff. + if ( listItem.$.nodeName.toLowerCase() != 'li' ) + continue; + + var itemObj = { 'parent' : listNode, indent : baseIndentLevel, element : listItem, contents : [] }; + if ( !grandparentNode ) + { + itemObj.grandparent = listNode.getParent(); + if ( itemObj.grandparent && itemObj.grandparent.$.nodeName.toLowerCase() == 'li' ) + itemObj.grandparent = itemObj.grandparent.getParent(); + } + else + itemObj.grandparent = grandparentNode; + + if ( database ) + CKEDITOR.dom.element.setMarker( database, listItem, 'listarray_index', baseArray.length ); + baseArray.push( itemObj ); + + for ( var j = 0, itemChildCount = listItem.getChildCount(), child; j < itemChildCount ; j++ ) + { + child = listItem.getChild( j ); + if ( child.type == CKEDITOR.NODE_ELEMENT && listNodeNames[ child.getName() ] ) + // Note the recursion here, it pushes inner list items with + // +1 indentation in the correct order. + CKEDITOR.plugins.list.listToArray( child, database, baseArray, baseIndentLevel + 1, itemObj.grandparent ); + else + itemObj.contents.push( child ); + } + } + return baseArray; + }, + + // Convert our internal representation of a list back to a DOM forest. + arrayToList : function( listArray, database, baseIndex, paragraphMode, dir ) + { + if ( !baseIndex ) + baseIndex = 0; + if ( !listArray || listArray.length < baseIndex + 1 ) + return null; + var doc = listArray[ baseIndex ].parent.getDocument(), + retval = new CKEDITOR.dom.documentFragment( doc ), + rootNode = null, + currentIndex = baseIndex, + indentLevel = Math.max( listArray[ baseIndex ].indent, 0 ), + currentListItem = null, + orgDir, + paragraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); + while ( 1 ) + { + var item = listArray[ currentIndex ]; + + orgDir = item.element.getDirection( 1 ); + + if ( item.indent == indentLevel ) + { + if ( !rootNode || listArray[ currentIndex ].parent.getName() != rootNode.getName() ) + { + rootNode = listArray[ currentIndex ].parent.clone( false, 1 ); + dir && rootNode.setAttribute( 'dir', dir ); + retval.append( rootNode ); + } + currentListItem = rootNode.append( item.element.clone( 0, 1 ) ); + + if ( orgDir != rootNode.getDirection( 1 ) ) + currentListItem.setAttribute( 'dir', orgDir ); + else + currentListItem.removeAttribute( 'dir' ); + + for ( var i = 0 ; i < item.contents.length ; i++ ) + currentListItem.append( item.contents[i].clone( 1, 1 ) ); + currentIndex++; + } + else if ( item.indent == Math.max( indentLevel, 0 ) + 1 ) + { + // Maintain original direction (#6861). + var currDir = listArray[ currentIndex - 1 ].element.getDirection( 1 ), + listData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode, + currDir != orgDir ? orgDir: null ); + + // If the next block is an <li> with another list tree as the first + // child, we'll need to append a filler (<br>/NBSP) or the list item + // wouldn't be editable. (#6724) + if ( !currentListItem.getChildCount() && CKEDITOR.env.ie && !( doc.$.documentMode > 7 )) + currentListItem.append( doc.createText( '\xa0' ) ); + currentListItem.append( listData.listNode ); + currentIndex = listData.nextIndex; + } + else if ( item.indent == -1 && !baseIndex && item.grandparent ) + { + if ( listNodeNames[ item.grandparent.getName() ] ) + currentListItem = item.element.clone( false, true ); + else + { + // Create completely new blocks here. + if ( dir || item.element.hasAttributes() || paragraphMode != CKEDITOR.ENTER_BR ) + { + currentListItem = doc.createElement( paragraphName ); + item.element.copyAttributes( currentListItem, { type:1, value:1 } ); + + // There might be a case where there are no attributes in the element after all + // (i.e. when "type" or "value" are the only attributes set). In this case, if enterMode = BR, + // the current item should be a fragment. + if ( !dir && paragraphMode == CKEDITOR.ENTER_BR && !currentListItem.hasAttributes() ) + currentListItem = new CKEDITOR.dom.documentFragment( doc ); + } + else + currentListItem = new CKEDITOR.dom.documentFragment( doc ); + } + + if ( currentListItem.type == CKEDITOR.NODE_ELEMENT ) + { + if ( item.grandparent.getDirection( 1 ) != orgDir ) + currentListItem.setAttribute( 'dir', orgDir ); + else + currentListItem.removeAttribute( 'dir' ); + } + + for ( i = 0 ; i < item.contents.length ; i++ ) + currentListItem.append( item.contents[i].clone( 1, 1 ) ); + + if ( currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT + && currentIndex != listArray.length - 1 ) + { + var last = currentListItem.getLast(); + if ( last && last.type == CKEDITOR.NODE_ELEMENT + && last.getAttribute( 'type' ) == '_moz' ) + { + last.remove(); + } + + if ( !( last = currentListItem.getLast( nonEmpty ) + && last.type == CKEDITOR.NODE_ELEMENT + && last.getName() in CKEDITOR.dtd.$block ) ) + { + currentListItem.append( doc.createElement( 'br' ) ); + } + } + + if ( currentListItem.type == CKEDITOR.NODE_ELEMENT && + currentListItem.getName() == paragraphName && + currentListItem.$.firstChild ) + { + currentListItem.trim(); + var firstChild = currentListItem.getFirst(); + if ( firstChild.type == CKEDITOR.NODE_ELEMENT && firstChild.isBlockBoundary() ) + { + var tmp = new CKEDITOR.dom.documentFragment( doc ); + currentListItem.moveChildren( tmp ); + currentListItem = tmp; + } + } + + var currentListItemName = currentListItem.$.nodeName.toLowerCase(); + if ( !CKEDITOR.env.ie && ( currentListItemName == 'div' || currentListItemName == 'p' ) ) + currentListItem.appendBogus(); + retval.append( currentListItem ); + rootNode = null; + currentIndex++; + } + else + return null; + + if ( listArray.length <= currentIndex || Math.max( listArray[ currentIndex ].indent, 0 ) < indentLevel ) + break; + } + + // Clear marker attributes for the new list tree made of cloned nodes, if any. + if ( database ) + { + var currentNode = retval.getFirst(); + while ( currentNode ) + { + if ( currentNode.type == CKEDITOR.NODE_ELEMENT ) + CKEDITOR.dom.element.clearMarkers( database, currentNode ); + currentNode = currentNode.getNextSourceNode(); + } + } + + return { listNode : retval, nextIndex : currentIndex }; + } + }; + + function onSelectionChange( evt ) + { + if ( evt.editor.readOnly ) + return null; + + var path = evt.data.path, + blockLimit = path.blockLimit, + elements = path.elements, + element, + i; + + // Grouping should only happen under blockLimit.(#3940). + for ( i = 0 ; i < elements.length && ( element = elements[ i ] ) + && !element.equals( blockLimit ); i++ ) + { + if ( listNodeNames[ elements[ i ].getName() ] ) + return this.setState( this.type == elements[ i ].getName() ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); + } + + return this.setState( CKEDITOR.TRISTATE_OFF ); + } + + function changeListType( editor, groupObj, database, listsCreated ) + { + // This case is easy... + // 1. Convert the whole list into a one-dimensional array. + // 2. Change the list type by modifying the array. + // 3. Recreate the whole list by converting the array to a list. + // 4. Replace the original list with the recreated list. + var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ), + selectedListItems = []; + + for ( var i = 0 ; i < groupObj.contents.length ; i++ ) + { + var itemNode = groupObj.contents[i]; + itemNode = itemNode.getAscendant( 'li', true ); + if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) ) + continue; + selectedListItems.push( itemNode ); + CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true ); + } + + var root = groupObj.root, + fakeParent = root.getDocument().createElement( this.type ); + // Copy all attributes, except from 'start' and 'type'. + root.copyAttributes( fakeParent, { start : 1, type : 1 } ); + // The list-style-type property should be ignored. + fakeParent.removeStyle( 'list-style-type' ); + + for ( i = 0 ; i < selectedListItems.length ; i++ ) + { + var listIndex = selectedListItems[i].getCustomData( 'listarray_index' ); + listArray[listIndex].parent = fakeParent; + } + var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode ); + var child, length = newList.listNode.getChildCount(); + for ( i = 0 ; i < length && ( child = newList.listNode.getChild( i ) ) ; i++ ) + { + if ( child.getName() == this.type ) + listsCreated.push( child ); + } + newList.listNode.replace( groupObj.root ); + } + + var headerTagRegex = /^h[1-6]$/; + + function createList( editor, groupObj, listsCreated ) + { + var contents = groupObj.contents, + doc = groupObj.root.getDocument(), + listContents = []; + + // It is possible to have the contents returned by DomRangeIterator to be the same as the root. + // e.g. when we're running into table cells. + // In such a case, enclose the childNodes of contents[0] into a <div>. + if ( contents.length == 1 && contents[0].equals( groupObj.root ) ) + { + var divBlock = doc.createElement( 'div' ); + contents[0].moveChildren && contents[0].moveChildren( divBlock ); + contents[0].append( divBlock ); + contents[0] = divBlock; + } + + // Calculate the common parent node of all content blocks. + var commonParent = groupObj.contents[0].getParent(); + for ( var i = 0 ; i < contents.length ; i++ ) + commonParent = commonParent.getCommonAncestor( contents[i].getParent() ); + + var useComputedState = editor.config.useComputedState, + listDir, explicitDirection; + + useComputedState = useComputedState === undefined || useComputedState; + + // We want to insert things that are in the same tree level only, so calculate the contents again + // by expanding the selected blocks to the same tree level. + for ( i = 0 ; i < contents.length ; i++ ) + { + var contentNode = contents[i], + parentNode; + while ( ( parentNode = contentNode.getParent() ) ) + { + if ( parentNode.equals( commonParent ) ) + { + listContents.push( contentNode ); + + // Determine the lists's direction. + if ( !explicitDirection && contentNode.getDirection() ) + explicitDirection = 1; + + var itemDir = contentNode.getDirection( useComputedState ); + + if ( listDir !== null ) + { + // If at least one LI have a different direction than current listDir, we can't have listDir. + if ( listDir && listDir != itemDir ) + listDir = null; + else + listDir = itemDir; + } + + break; + } + contentNode = parentNode; + } + } + + if ( listContents.length < 1 ) + return; + + // Insert the list to the DOM tree. + var insertAnchor = listContents[ listContents.length - 1 ].getNext(), + listNode = doc.createElement( this.type ); + + listsCreated.push( listNode ); + + var contentBlock, listItem; + + while ( listContents.length ) + { + contentBlock = listContents.shift(); + listItem = doc.createElement( 'li' ); + + // Preserve preformat block and heading structure when converting to list item. (#5335) (#5271) + if ( contentBlock.is( 'pre' ) || headerTagRegex.test( contentBlock.getName() ) ) + contentBlock.appendTo( listItem ); + else + { + contentBlock.copyAttributes( listItem ); + // Remove direction attribute after it was merged into list root. (#7657) + if ( listDir && contentBlock.getDirection() ) + { + listItem.removeStyle( 'direction' ); + listItem.removeAttribute( 'dir' ); + } + contentBlock.moveChildren( listItem ); + contentBlock.remove(); + } + + listItem.appendTo( listNode ); + } + + // Apply list root dir only if it has been explicitly declared. + if ( listDir && explicitDirection ) + listNode.setAttribute( 'dir', listDir ); + + if ( insertAnchor ) + listNode.insertBefore( insertAnchor ); + else + listNode.appendTo( commonParent ); + } + + function removeList( editor, groupObj, database ) + { + // This is very much like the change list type operation. + // Except that we're changing the selected items' indent to -1 in the list array. + var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ), + selectedListItems = []; + + for ( var i = 0 ; i < groupObj.contents.length ; i++ ) + { + var itemNode = groupObj.contents[i]; + itemNode = itemNode.getAscendant( 'li', true ); + if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) ) + continue; + selectedListItems.push( itemNode ); + CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true ); + } + + var lastListIndex = null; + for ( i = 0 ; i < selectedListItems.length ; i++ ) + { + var listIndex = selectedListItems[i].getCustomData( 'listarray_index' ); + listArray[listIndex].indent = -1; + lastListIndex = listIndex; + } + + // After cutting parts of the list out with indent=-1, we still have to maintain the array list + // model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the + // list cannot be converted back to a real DOM list. + for ( i = lastListIndex + 1 ; i < listArray.length ; i++ ) + { + if ( listArray[i].indent > listArray[i-1].indent + 1 ) + { + var indentOffset = listArray[i-1].indent + 1 - listArray[i].indent; + var oldIndent = listArray[i].indent; + while ( listArray[i] && listArray[i].indent >= oldIndent ) + { + listArray[i].indent += indentOffset; + i++; + } + i--; + } + } + + var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, + groupObj.root.getAttribute( 'dir' ) ); + + // Compensate <br> before/after the list node if the surrounds are non-blocks.(#3836) + var docFragment = newList.listNode, boundaryNode, siblingNode; + function compensateBrs( isStart ) + { + if ( ( boundaryNode = docFragment[ isStart ? 'getFirst' : 'getLast' ]() ) + && !( boundaryNode.is && boundaryNode.isBlockBoundary() ) + && ( siblingNode = groupObj.root[ isStart ? 'getPrevious' : 'getNext' ] + ( CKEDITOR.dom.walker.whitespaces( true ) ) ) + && !( siblingNode.is && siblingNode.isBlockBoundary( { br : 1 } ) ) ) + editor.document.createElement( 'br' )[ isStart ? 'insertBefore' : 'insertAfter' ]( boundaryNode ); + } + compensateBrs( true ); + compensateBrs(); + + docFragment.replace( groupObj.root ); + } + + function listCommand( name, type ) + { + this.name = name; + this.type = type; + } + + listCommand.prototype = { + exec : function( editor ) + { + var doc = editor.document, + config = editor.config, + selection = editor.getSelection(), + ranges = selection && selection.getRanges( true ); + + // There should be at least one selected range. + if ( !ranges || ranges.length < 1 ) + return; + + // Midas lists rule #1 says we can create a list even in an empty document. + // But DOM iterator wouldn't run if the document is really empty. + // So create a paragraph if the document is empty and we're going to create a list. + if ( this.state == CKEDITOR.TRISTATE_OFF ) + { + var body = doc.getBody(); + if ( !body.getFirst( nonEmpty ) ) + { + config.enterMode == CKEDITOR.ENTER_BR ? + body.appendBogus() : + ranges[ 0 ].fixBlock( 1, config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); + + selection.selectRanges( ranges ); + } + // Maybe a single range there enclosing the whole list, + // turn on the list state manually(#4129). + else + { + var range = ranges.length == 1 && ranges[ 0 ], + enclosedNode = range && range.getEnclosedNode(); + if ( enclosedNode && enclosedNode.is + && this.type == enclosedNode.getName() ) + this.setState( CKEDITOR.TRISTATE_ON ); + } + } + + var bookmarks = selection.createBookmarks( true ); + + // Group the blocks up because there are many cases where multiple lists have to be created, + // or multiple lists have to be cancelled. + var listGroups = [], + database = {}, + rangeIterator = ranges.createIterator(), + index = 0; + + while ( ( range = rangeIterator.getNextRange() ) && ++index ) + { + var boundaryNodes = range.getBoundaryNodes(), + startNode = boundaryNodes.startNode, + endNode = boundaryNodes.endNode; + + if ( startNode.type == CKEDITOR.NODE_ELEMENT && startNode.getName() == 'td' ) + range.setStartAt( boundaryNodes.startNode, CKEDITOR.POSITION_AFTER_START ); + + if ( endNode.type == CKEDITOR.NODE_ELEMENT && endNode.getName() == 'td' ) + range.setEndAt( boundaryNodes.endNode, CKEDITOR.POSITION_BEFORE_END ); + + var iterator = range.createIterator(), + block; + + iterator.forceBrBreak = ( this.state == CKEDITOR.TRISTATE_OFF ); + + while ( ( block = iterator.getNextParagraph() ) ) + { + // Avoid duplicate blocks get processed across ranges. + if( block.getCustomData( 'list_block' ) ) + continue; + else + CKEDITOR.dom.element.setMarker( database, block, 'list_block', 1 ); + + var path = new CKEDITOR.dom.elementPath( block ), + pathElements = path.elements, + pathElementsCount = pathElements.length, + listNode = null, + processedFlag = 0, + blockLimit = path.blockLimit, + element; + + // First, try to group by a list ancestor. + for ( var i = pathElementsCount - 1; i >= 0 && ( element = pathElements[ i ] ); i-- ) + { + if ( listNodeNames[ element.getName() ] + && blockLimit.contains( element ) ) // Don't leak outside block limit (#3940). + { + // If we've encountered a list inside a block limit + // The last group object of the block limit element should + // no longer be valid. Since paragraphs after the list + // should belong to a different group of paragraphs before + // the list. (Bug #1309) + blockLimit.removeCustomData( 'list_group_object_' + index ); + + var groupObj = element.getCustomData( 'list_group_object' ); + if ( groupObj ) + groupObj.contents.push( block ); + else + { + groupObj = { root : element, contents : [ block ] }; + listGroups.push( groupObj ); + CKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj ); + } + processedFlag = 1; + break; + } + } + + if ( processedFlag ) + continue; + + // No list ancestor? Group by block limit, but don't mix contents from different ranges. + var root = blockLimit; + if ( root.getCustomData( 'list_group_object_' + index ) ) + root.getCustomData( 'list_group_object_' + index ).contents.push( block ); + else + { + groupObj = { root : root, contents : [ block ] }; + CKEDITOR.dom.element.setMarker( database, root, 'list_group_object_' + index, groupObj ); + listGroups.push( groupObj ); + } + } + } + + // Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element. + // We either have to build lists or remove lists, for removing a list does not makes sense when we are looking + // at the group that's not rooted at lists. So we have three cases to handle. + var listsCreated = []; + while ( listGroups.length > 0 ) + { + groupObj = listGroups.shift(); + if ( this.state == CKEDITOR.TRISTATE_OFF ) + { + if ( listNodeNames[ groupObj.root.getName() ] ) + changeListType.call( this, editor, groupObj, database, listsCreated ); + else + createList.call( this, editor, groupObj, listsCreated ); + } + else if ( this.state == CKEDITOR.TRISTATE_ON && listNodeNames[ groupObj.root.getName() ] ) + removeList.call( this, editor, groupObj, database ); + } + + // For all new lists created, merge adjacent, same type lists. + for ( i = 0 ; i < listsCreated.length ; i++ ) + { + listNode = listsCreated[i]; + var mergeSibling, listCommand = this; + ( mergeSibling = function( rtl ){ + + var sibling = listNode[ rtl ? + 'getPrevious' : 'getNext' ]( CKEDITOR.dom.walker.whitespaces( true ) ); + if ( sibling && sibling.getName && + sibling.getName() == listCommand.type ) + { + sibling.remove(); + // Move children order by merge direction.(#3820) + sibling.moveChildren( listNode, rtl ); + } + } )(); + mergeSibling( 1 ); + } + + // Clean up, restore selection and update toolbar button states. + CKEDITOR.dom.element.clearAllMarkers( database ); + selection.selectBookmarks( bookmarks ); + editor.focus(); + } + }; + + var dtd = CKEDITOR.dtd; + var tailNbspRegex = /[\t\r\n ]*(?: |\xa0)$/; + + function indexOfFirstChildElement( element, tagNameList ) + { + var child, + children = element.children, + length = children.length; + + for ( var i = 0 ; i < length ; i++ ) + { + child = children[ i ]; + if ( child.name && ( child.name in tagNameList ) ) + return i; + } + + return length; + } + + function getExtendNestedListFilter( isHtmlFilter ) + { + // An element filter function that corrects nested list start in an empty + // list item for better displaying/outputting. (#3165) + return function( listItem ) + { + var children = listItem.children, + firstNestedListIndex = indexOfFirstChildElement( listItem, dtd.$list ), + firstNestedList = children[ firstNestedListIndex ], + nodeBefore = firstNestedList && firstNestedList.previous, + tailNbspmatch; + + if ( nodeBefore + && ( nodeBefore.name && nodeBefore.name == 'br' + || nodeBefore.value && ( tailNbspmatch = nodeBefore.value.match( tailNbspRegex ) ) ) ) + { + var fillerNode = nodeBefore; + + // Always use 'nbsp' as filler node if we found a nested list appear + // in front of a list item. + if ( !( tailNbspmatch && tailNbspmatch.index ) && fillerNode == children[ 0 ] ) + children[ 0 ] = ( isHtmlFilter || CKEDITOR.env.ie ) ? + new CKEDITOR.htmlParser.text( '\xa0' ) : + new CKEDITOR.htmlParser.element( 'br', {} ); + + // Otherwise the filler is not needed anymore. + else if ( fillerNode.name == 'br' ) + children.splice( firstNestedListIndex - 1, 1 ); + else + fillerNode.value = fillerNode.value.replace( tailNbspRegex, '' ); + } + + }; + } + + var defaultListDataFilterRules = { elements : {} }; + for ( var i in dtd.$listItem ) + defaultListDataFilterRules.elements[ i ] = getExtendNestedListFilter(); + + var defaultListHtmlFilterRules = { elements : {} }; + for ( i in dtd.$listItem ) + defaultListHtmlFilterRules.elements[ i ] = getExtendNestedListFilter( true ); + + CKEDITOR.plugins.add( 'list', + { + init : function( editor ) + { + // Register commands. + var numberedListCommand = editor.addCommand( 'numberedlist', new listCommand( 'numberedlist', 'ol' ) ), + bulletedListCommand = editor.addCommand( 'bulletedlist', new listCommand( 'bulletedlist', 'ul' ) ); + + // Register the toolbar button. + editor.ui.addButton( 'NumberedList', + { + label : editor.lang.numberedlist, + command : 'numberedlist' + } ); + editor.ui.addButton( 'BulletedList', + { + label : editor.lang.bulletedlist, + command : 'bulletedlist' + } ); + + // Register the state changing handlers. + editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, numberedListCommand ) ); + editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, bulletedListCommand ) ); + }, + + afterInit : function ( editor ) + { + var dataProcessor = editor.dataProcessor; + if ( dataProcessor ) + { + dataProcessor.dataFilter.addRules( defaultListDataFilterRules ); + dataProcessor.htmlFilter.addRules( defaultListHtmlFilterRules ); + } + }, + + requires : [ 'domiterator' ] + } ); +})(); diff --git a/_source/plugins/listblock/plugin.js b/_source/plugins/listblock/plugin.js new file mode 100644 index 0000000..e4898a5 --- /dev/null +++ b/_source/plugins/listblock/plugin.js @@ -0,0 +1,268 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'listblock', +{ + requires : [ 'panel' ], + + onLoad : function() + { + CKEDITOR.ui.panel.prototype.addListBlock = function( name, definition ) + { + return this.addBlock( name, new CKEDITOR.ui.listBlock( this.getHolderElement(), definition ) ); + }; + + CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass( + { + base : CKEDITOR.ui.panel.block, + + $ : function( blockHolder, blockDefinition ) + { + blockDefinition = blockDefinition || {}; + + var attribs = blockDefinition.attributes || ( blockDefinition.attributes = {} ); + ( this.multiSelect = !!blockDefinition.multiSelect ) && + ( attribs[ 'aria-multiselectable' ] = true ); + // Provide default role of 'listbox'. + !attribs.role && ( attribs.role = 'listbox' ); + + // Call the base contructor. + this.base.apply( this, arguments ); + + var keys = this.keys; + keys[ 40 ] = 'next'; // ARROW-DOWN + keys[ 9 ] = 'next'; // TAB + keys[ 38 ] = 'prev'; // ARROW-UP + keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB + keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE + CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041). + + this._.pendingHtml = []; + this._.items = {}; + this._.groups = {}; + }, + + _ : + { + close : function() + { + if ( this._.started ) + { + this._.pendingHtml.push( '</ul>' ); + delete this._.started; + } + }, + + getClick : function() + { + if ( !this._.click ) + { + this._.click = CKEDITOR.tools.addFunction( function( value ) + { + var marked = true; + + if ( this.multiSelect ) + marked = this.toggle( value ); + else + this.mark( value ); + + if ( this.onClick ) + this.onClick( value, marked ); + }, + this ); + } + return this._.click; + } + }, + + proto : + { + add : function( value, html, title ) + { + var pendingHtml = this._.pendingHtml, + id = CKEDITOR.tools.getNextId(); + + if ( !this._.started ) + { + pendingHtml.push( '<ul role="presentation" class=cke_panel_list>' ); + this._.started = 1; + this._.size = this._.size || 0; + } + + this._.items[ value ] = id; + + pendingHtml.push( + '<li id=', id, ' class=cke_panel_listItem role=presentation>' + + '<a id="', id, '_option" _cke_focus=1 hidefocus=true' + + ' title="', title || value, '"' + + ' href="javascript:void(\'', value, '\')" ' + + ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188 + '="CKEDITOR.tools.callFunction(', this._.getClick(), ',\'', value, '\'); return false;"', + ' role="option"' + + ' aria-posinset="' + ++this._.size + '">', + html || value, + '</a>' + + '</li>' ); + }, + + startGroup : function( title ) + { + this._.close(); + + var id = CKEDITOR.tools.getNextId(); + + this._.groups[ title ] = id; + + this._.pendingHtml.push( '<h1 role="presentation" id=', id, ' class=cke_panel_grouptitle>', title, '</h1>' ); + }, + + commit : function() + { + this._.close(); + this.element.appendHtml( this._.pendingHtml.join( '' ) ); + + var items = this._.items, + doc = this.element.getDocument(); + for ( var value in items ) + doc.getById( items[ value ] + '_option' ).setAttribute( 'aria-setsize', this._.size ); + delete this._.size; + + this._.pendingHtml = []; + }, + + toggle : function( value ) + { + var isMarked = this.isMarked( value ); + + if ( isMarked ) + this.unmark( value ); + else + this.mark( value ); + + return !isMarked; + }, + + hideGroup : function( groupTitle ) + { + var group = this.element.getDocument().getById( this._.groups[ groupTitle ] ), + list = group && group.getNext(); + + if ( group ) + { + group.setStyle( 'display', 'none' ); + + if ( list && list.getName() == 'ul' ) + list.setStyle( 'display', 'none' ); + } + }, + + hideItem : function( value ) + { + this.element.getDocument().getById( this._.items[ value ] ).setStyle( 'display', 'none' ); + }, + + showAll : function() + { + var items = this._.items, + groups = this._.groups, + doc = this.element.getDocument(); + + for ( var value in items ) + { + doc.getById( items[ value ] ).setStyle( 'display', '' ); + } + + for ( var title in groups ) + { + var group = doc.getById( groups[ title ] ), + list = group.getNext(); + + group.setStyle( 'display', '' ); + + if ( list && list.getName() == 'ul' ) + list.setStyle( 'display', '' ); + } + }, + + mark : function( value ) + { + if ( !this.multiSelect ) + this.unmarkAll(); + + var itemId = this._.items[ value ], + item = this.element.getDocument().getById( itemId ); + item.addClass( 'cke_selected' ); + + this.element.getDocument().getById( itemId + '_option' ).setAttribute( 'aria-selected', true ); + this.element.setAttribute( 'aria-activedescendant', itemId + '_option' ); + + this.onMark && this.onMark( item ); + }, + + unmark : function( value ) + { + var doc = this.element.getDocument(), + itemId = this._.items[ value ], + item = doc.getById( itemId ); + + item.removeClass( 'cke_selected' ); + doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' ); + + this.onUnmark && this.onUnmark( item ); + }, + + unmarkAll : function() + { + var items = this._.items, + doc = this.element.getDocument(); + + for ( var value in items ) + { + var itemId = items[ value ]; + + doc.getById( itemId ).removeClass( 'cke_selected' ); + doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' ); + } + + this.onUnmark && this.onUnmark(); + }, + + isMarked : function( value ) + { + return this.element.getDocument().getById( this._.items[ value ] ).hasClass( 'cke_selected' ); + }, + + focus : function( value ) + { + this._.focusIndex = -1; + + if ( value ) + { + var selected = this.element.getDocument().getById( this._.items[ value ] ).getFirst(); + + var links = this.element.getElementsByTag( 'a' ), + link, + i = -1; + + while ( ( link = links.getItem( ++i ) ) ) + { + if ( link.equals( selected ) ) + { + this._.focusIndex = i; + break; + } + } + + setTimeout( function() + { + selected.focus(); + }, + 0 ); + } + } + } + }); + } +}); diff --git a/_source/plugins/liststyle/dialogs/liststyle.js b/_source/plugins/liststyle/dialogs/liststyle.js new file mode 100644 index 0000000..6761022 --- /dev/null +++ b/_source/plugins/liststyle/dialogs/liststyle.js @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +(function() +{ + function getListElement( editor, listTag ) + { + var range; + try { range = editor.getSelection().getRanges()[ 0 ]; } + catch( e ) { return null; } + + range.shrink( CKEDITOR.SHRINK_TEXT ); + return range.getCommonAncestor().getAscendant( listTag, 1 ); + } + + var listItem = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' ); }; + + var mapListStyle = { + 'a' : 'lower-alpha', + 'A' : 'upper-alpha', + 'i' : 'lower-roman', + 'I' : 'upper-roman', + '1' : 'decimal', + 'disc' : 'disc', + 'circle': 'circle', + 'square' : 'square' + }; + + function listStyle( editor, startupPage ) + { + var lang = editor.lang.list; + if ( startupPage == 'bulletedListStyle' ) + { + return { + title : lang.bulletedTitle, + minWidth : 300, + minHeight : 50, + contents : + [ + { + id : 'info', + accessKey : 'I', + elements : + [ + { + type : 'select', + label : lang.type, + id : 'type', + align : 'center', + style : 'width:150px', + items : + [ + [ lang.notset, '' ], + [ lang.circle, 'circle' ], + [ lang.disc, 'disc' ], + [ lang.square, 'square' ] + ], + setup : function( element ) + { + var value = element.getStyle( 'list-style-type' ) + || mapListStyle[ element.getAttribute( 'type' ) ] + || element.getAttribute( 'type' ) + || ''; + + this.setValue( value ); + }, + commit : function( element ) + { + var value = this.getValue(); + if ( value ) + element.setStyle( 'list-style-type', value ); + else + element.removeStyle( 'list-style-type' ); + } + } + ] + } + ], + onShow: function() + { + var editor = this.getParentEditor(), + element = getListElement( editor, 'ul' ); + + element && this.setupContent( element ); + }, + onOk: function() + { + var editor = this.getParentEditor(), + element = getListElement( editor, 'ul' ); + + element && this.commitContent( element ); + } + }; + } + else if ( startupPage == 'numberedListStyle' ) + { + + var listStyleOptions = + [ + [ lang.notset, '' ], + [ lang.lowerRoman, 'lower-roman' ], + [ lang.upperRoman, 'upper-roman' ], + [ lang.lowerAlpha, 'lower-alpha' ], + [ lang.upperAlpha, 'upper-alpha' ], + [ lang.decimal, 'decimal' ] + ]; + + if ( !CKEDITOR.env.ie || CKEDITOR.env.version > 7 ) + { + listStyleOptions.concat( [ + [ lang.armenian, 'armenian' ], + [ lang.decimalLeadingZero, 'decimal-leading-zero' ], + [ lang.georgian, 'georgian' ], + [ lang.lowerGreek, 'lower-greek' ] + ]); + } + + return { + title : lang.numberedTitle, + minWidth : 300, + minHeight : 50, + contents : + [ + { + id : 'info', + accessKey : 'I', + elements : + [ + { + type : 'hbox', + widths : [ '25%', '75%' ], + children : + [ + { + label : lang.start, + type : 'text', + id : 'start', + validate : CKEDITOR.dialog.validate.integer( lang.validateStartNumber ), + setup : function( element ) + { + // List item start number dominates. + var value = element.getFirst( listItem ).getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1; + value && this.setValue( value ); + }, + commit : function( element ) + { + var firstItem = element.getFirst( listItem ); + var oldStart = firstItem.getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1; + + // Force start number on list root. + element.getFirst( listItem ).removeAttribute( 'value' ); + var val = parseInt( this.getValue(), 10 ); + if ( isNaN( val ) ) + element.removeAttribute( 'start' ); + else + element.setAttribute( 'start', val ); + + // Update consequent list item numbering. + var nextItem = firstItem, conseq = oldStart, startNumber = isNaN( val ) ? 1 : val; + while ( ( nextItem = nextItem.getNext( listItem ) ) && conseq++ ) + { + if ( nextItem.getAttribute( 'value' ) == conseq ) + nextItem.setAttribute( 'value', startNumber + conseq - oldStart ); + } + } + }, + { + type : 'select', + label : lang.type, + id : 'type', + style : 'width: 100%;', + items : listStyleOptions, + setup : function( element ) + { + var value = element.getStyle( 'list-style-type' ) + || mapListStyle[ element.getAttribute( 'type' ) ] + || element.getAttribute( 'type' ) + || ''; + + this.setValue( value ); + }, + commit : function( element ) + { + var value = this.getValue(); + if ( value ) + element.setStyle( 'list-style-type', value ); + else + element.removeStyle( 'list-style-type' ); + } + } + ] + } + ] + } + ], + onShow: function() + { + var editor = this.getParentEditor(), + element = getListElement( editor, 'ol' ); + + element && this.setupContent( element ); + }, + onOk: function() + { + var editor = this.getParentEditor(), + element = getListElement( editor, 'ol' ); + + element && this.commitContent( element ); + } + }; + } + } + + CKEDITOR.dialog.add( 'numberedListStyle', function( editor ) + { + return listStyle( editor, 'numberedListStyle' ); + }); + + CKEDITOR.dialog.add( 'bulletedListStyle', function( editor ) + { + return listStyle( editor, 'bulletedListStyle' ); + }); +})(); diff --git a/_source/plugins/liststyle/plugin.js b/_source/plugins/liststyle/plugin.js new file mode 100644 index 0000000..02f1837 --- /dev/null +++ b/_source/plugins/liststyle/plugin.js @@ -0,0 +1,66 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + CKEDITOR.plugins.liststyle = + { + requires : [ 'dialog' ], + init : function( editor ) + { + editor.addCommand( 'numberedListStyle', new CKEDITOR.dialogCommand( 'numberedListStyle' ) ); + CKEDITOR.dialog.add( 'numberedListStyle', this.path + 'dialogs/liststyle.js' ); + editor.addCommand( 'bulletedListStyle', new CKEDITOR.dialogCommand( 'bulletedListStyle' ) ); + CKEDITOR.dialog.add( 'bulletedListStyle', this.path + 'dialogs/liststyle.js' ); + + // If the "menu" plugin is loaded, register the menu items. + if ( editor.addMenuItems ) + { + //Register map group; + editor.addMenuGroup("list", 108); + + editor.addMenuItems( + { + numberedlist : + { + label : editor.lang.list.numberedTitle, + group : 'list', + command: 'numberedListStyle' + }, + bulletedlist : + { + label : editor.lang.list.bulletedTitle, + group : 'list', + command: 'bulletedListStyle' + } + }); + } + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || element.isReadOnly() ) + return null; + + while ( element ) + { + var name = element.getName(); + if ( name == 'ol' ) + return { numberedlist: CKEDITOR.TRISTATE_OFF }; + else if ( name == 'ul' ) + return { bulletedlist: CKEDITOR.TRISTATE_OFF }; + + element = element.getParent(); + } + return null; + }); + } + } + }; + + CKEDITOR.plugins.add( 'liststyle', CKEDITOR.plugins.liststyle ); +})(); diff --git a/_source/plugins/maximize/plugin.js b/_source/plugins/maximize/plugin.js new file mode 100644 index 0000000..4c04d14 --- /dev/null +++ b/_source/plugins/maximize/plugin.js @@ -0,0 +1,352 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + function protectFormStyles( formElement ) + { + if ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' ) + return []; + + var hijackRecord = [], + hijackNames = [ 'style', 'className' ]; + for ( var i = 0 ; i < hijackNames.length ; i++ ) + { + var name = hijackNames[i]; + var $node = formElement.$.elements.namedItem( name ); + if ( $node ) + { + var hijackNode = new CKEDITOR.dom.element( $node ); + hijackRecord.push( [ hijackNode, hijackNode.nextSibling ] ); + hijackNode.remove(); + } + } + + return hijackRecord; + } + + function restoreFormStyles( formElement, hijackRecord ) + { + if ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' ) + return; + + if ( hijackRecord.length > 0 ) + { + for ( var i = hijackRecord.length - 1 ; i >= 0 ; i-- ) + { + var node = hijackRecord[i][0]; + var sibling = hijackRecord[i][1]; + if ( sibling ) + node.insertBefore( sibling ); + else + node.appendTo( formElement ); + } + } + } + + function saveStyles( element, isInsideEditor ) + { + var data = protectFormStyles( element ); + var retval = {}; + + var $element = element.$; + + if ( !isInsideEditor ) + { + retval[ 'class' ] = $element.className || ''; + $element.className = ''; + } + + retval.inline = $element.style.cssText || ''; + if ( !isInsideEditor ) // Reset any external styles that might interfere. (#2474) + $element.style.cssText = 'position: static; overflow: visible'; + + restoreFormStyles( data ); + return retval; + } + + function restoreStyles( element, savedStyles ) + { + var data = protectFormStyles( element ); + var $element = element.$; + if ( 'class' in savedStyles ) + $element.className = savedStyles[ 'class' ]; + if ( 'inline' in savedStyles ) + $element.style.cssText = savedStyles.inline; + restoreFormStyles( data ); + } + + function refreshCursor( editor ) + { + // Refresh all editor instances on the page (#5724). + var all = CKEDITOR.instances; + for ( var i in all ) + { + var one = all[ i ]; + if ( one.mode == 'wysiwyg' && !one.readOnly ) + { + var body = one.document.getBody(); + // Refresh 'contentEditable' otherwise + // DOM lifting breaks design mode. (#5560) + body.setAttribute( 'contentEditable', false ); + body.setAttribute( 'contentEditable', true ); + } + } + + if ( editor.focusManager.hasFocus ) + { + editor.toolbox.focus(); + editor.focus(); + } + } + + /** + * Adding an iframe shim to this element, OR removing the existing one if already applied. + * Note: This will only affect IE version below 7. + */ + function createIframeShim( element ) + { + if ( !CKEDITOR.env.ie || CKEDITOR.env.version > 6 ) + return null; + + var shim = CKEDITOR.dom.element.createFromHtml( '<iframe frameborder="0" tabindex="-1"' + + ' src="javascript:' + + 'void((function(){' + + 'document.open();' + + ( CKEDITOR.env.isCustomDomain() ? 'document.domain=\'' + this.getDocument().$.domain + '\';' : '' ) + + 'document.close();' + + '})())"' + + ' style="display:block;position:absolute;z-index:-1;' + + 'progid:DXImageTransform.Microsoft.Alpha(opacity=0);' + + '"></iframe>' ); + return element.append( shim, true ); + } + + CKEDITOR.plugins.add( 'maximize', + { + init : function( editor ) + { + var lang = editor.lang; + var mainDocument = CKEDITOR.document, + mainWindow = mainDocument.getWindow(); + + // Saved selection and scroll position for the editing area. + var savedSelection, + savedScroll; + + // Saved scroll position for the outer window. + var outerScroll; + + var shim; + + // Saved resize handler function. + function resizeHandler() + { + var viewPaneSize = mainWindow.getViewPaneSize(); + shim && shim.setStyles( { width : viewPaneSize.width + 'px', height : viewPaneSize.height + 'px' } ); + editor.resize( viewPaneSize.width, viewPaneSize.height, null, true ); + } + + // Retain state after mode switches. + var savedState = CKEDITOR.TRISTATE_OFF; + + editor.addCommand( 'maximize', + { + modes : { wysiwyg : 1, source : 1 }, + readOnly : 1, + editorFocus : false, + exec : function() + { + var container = editor.container.getChild( 1 ); + var contents = editor.getThemeSpace( 'contents' ); + + // Save current selection and scroll position in editing area. + if ( editor.mode == 'wysiwyg' ) + { + var selection = editor.getSelection(); + savedSelection = selection && selection.getRanges(); + savedScroll = mainWindow.getScrollPosition(); + } + else + { + var $textarea = editor.textarea.$; + savedSelection = !CKEDITOR.env.ie && [ $textarea.selectionStart, $textarea.selectionEnd ]; + savedScroll = [ $textarea.scrollLeft, $textarea.scrollTop ]; + } + + if ( this.state == CKEDITOR.TRISTATE_OFF ) // Go fullscreen if the state is off. + { + // Add event handler for resizing. + mainWindow.on( 'resize', resizeHandler ); + + // Save the scroll bar position. + outerScroll = mainWindow.getScrollPosition(); + + // Save and reset the styles for the entire node tree. + var currentNode = editor.container; + while ( ( currentNode = currentNode.getParent() ) ) + { + currentNode.setCustomData( 'maximize_saved_styles', saveStyles( currentNode ) ); + currentNode.setStyle( 'z-index', editor.config.baseFloatZIndex - 1 ); + } + contents.setCustomData( 'maximize_saved_styles', saveStyles( contents, true ) ); + container.setCustomData( 'maximize_saved_styles', saveStyles( container, true ) ); + + // Hide scroll bars. + var styles = + { + overflow : CKEDITOR.env.webkit ? '' : 'hidden', // #6896 + width : 0, + height : 0 + }; + + mainDocument.getDocumentElement().setStyles( styles ); + !CKEDITOR.env.gecko && mainDocument.getDocumentElement().setStyle( 'position', 'fixed' ); + !( CKEDITOR.env.gecko && CKEDITOR.env.quirks ) && mainDocument.getBody().setStyles( styles ); + + // Scroll to the top left (IE needs some time for it - #4923). + CKEDITOR.env.ie ? + setTimeout( function() { mainWindow.$.scrollTo( 0, 0 ); }, 0 ) : + mainWindow.$.scrollTo( 0, 0 ); + + // Resize and move to top left. + // Special treatment for FF Quirks (#7284) + container.setStyle( 'position', CKEDITOR.env.gecko && CKEDITOR.env.quirks ? 'fixed' : 'absolute' ); + container.$.offsetLeft; // SAFARI BUG: See #2066. + container.setStyles( + { + 'z-index' : editor.config.baseFloatZIndex - 1, + left : '0px', + top : '0px' + } ); + + shim = createIframeShim( container ); // IE6 select element penetration when maximized. (#4459) + + // Add cke_maximized class before resize handle since that will change things sizes (#5580) + container.addClass( 'cke_maximized' ); + + resizeHandler(); + + // Still not top left? Fix it. (Bug #174) + var offset = container.getDocumentPosition(); + container.setStyles( + { + left : ( -1 * offset.x ) + 'px', + top : ( -1 * offset.y ) + 'px' + } ); + + // Fixing positioning editor chrome in Firefox break design mode. (#5149) + CKEDITOR.env.gecko && refreshCursor( editor ); + + } + else if ( this.state == CKEDITOR.TRISTATE_ON ) // Restore from fullscreen if the state is on. + { + // Remove event handler for resizing. + mainWindow.removeListener( 'resize', resizeHandler ); + + // Restore CSS styles for the entire node tree. + var editorElements = [ contents, container ]; + for ( var i = 0 ; i < editorElements.length ; i++ ) + { + restoreStyles( editorElements[i], editorElements[i].getCustomData( 'maximize_saved_styles' ) ); + editorElements[i].removeCustomData( 'maximize_saved_styles' ); + } + + currentNode = editor.container; + while ( ( currentNode = currentNode.getParent() ) ) + { + restoreStyles( currentNode, currentNode.getCustomData( 'maximize_saved_styles' ) ); + currentNode.removeCustomData( 'maximize_saved_styles' ); + } + + // Restore the window scroll position. + CKEDITOR.env.ie ? + setTimeout( function() { mainWindow.$.scrollTo( outerScroll.x, outerScroll.y ); }, 0 ) : + mainWindow.$.scrollTo( outerScroll.x, outerScroll.y ); + + // Remove cke_maximized class. + container.removeClass( 'cke_maximized' ); + + // Webkit requires a re-layout on editor chrome. (#6695) + if ( CKEDITOR.env.webkit ) + { + container.setStyle( 'display', 'inline' ); + setTimeout( function(){ container.setStyle( 'display', 'block' ); }, 0 ); + } + + if ( shim ) + { + shim.remove(); + shim = null; + } + + // Emit a resize event, because this time the size is modified in + // restoreStyles. + editor.fire( 'resize' ); + } + + this.toggleState(); + + // Toggle button label. + var button = this.uiItems[ 0 ]; + // Only try to change the button if it exists (#6166) + if( button ) + { + var label = ( this.state == CKEDITOR.TRISTATE_OFF ) + ? lang.maximize : lang.minimize; + var buttonNode = editor.element.getDocument().getById( button._.id ); + buttonNode.getChild( 1 ).setHtml( label ); + buttonNode.setAttribute( 'title', label ); + buttonNode.setAttribute( 'href', 'javascript:void("' + label + '");' ); + } + + // Restore selection and scroll position in editing area. + if ( editor.mode == 'wysiwyg' ) + { + if ( savedSelection ) + { + // Fixing positioning editor chrome in Firefox break design mode. (#5149) + CKEDITOR.env.gecko && refreshCursor( editor ); + + editor.getSelection().selectRanges(savedSelection); + var element = editor.getSelection().getStartElement(); + element && element.scrollIntoView( true ); + } + + else + mainWindow.$.scrollTo( savedScroll.x, savedScroll.y ); + } + else + { + if ( savedSelection ) + { + $textarea.selectionStart = savedSelection[0]; + $textarea.selectionEnd = savedSelection[1]; + } + $textarea.scrollLeft = savedScroll[0]; + $textarea.scrollTop = savedScroll[1]; + } + + savedSelection = savedScroll = null; + savedState = this.state; + }, + canUndo : false + } ); + + editor.ui.addButton( 'Maximize', + { + label : lang.maximize, + command : 'maximize' + } ); + + // Restore the command state after mode change, unless it has been changed to disabled (#6467) + editor.on( 'mode', function() + { + var command = editor.getCommand( 'maximize' ); + command.setState( command.state == CKEDITOR.TRISTATE_DISABLED ? CKEDITOR.TRISTATE_DISABLED : savedState ); + }, null, null, 100 ); + } + } ); +})(); diff --git a/_source/plugins/menu/plugin.js b/_source/plugins/menu/plugin.js new file mode 100644 index 0000000..0165d31 --- /dev/null +++ b/_source/plugins/menu/plugin.js @@ -0,0 +1,541 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'menu', +{ + beforeInit : function( editor ) + { + var groups = editor.config.menu_groups.split( ',' ), + groupsOrder = editor._.menuGroups = {}, + menuItems = editor._.menuItems = {}; + + for ( var i = 0 ; i < groups.length ; i++ ) + groupsOrder[ groups[ i ] ] = i + 1; + + /** + * Registers an item group to the editor context menu in order to make it + * possible to associate it with menu items later. + * @name CKEDITOR.editor.prototype.addMenuGroup + * @param {String} name Specify a group name. + * @param {Number} [order=100] Define the display sequence of this group + * inside the menu. A smaller value gets displayed first. + */ + editor.addMenuGroup = function( name, order ) + { + groupsOrder[ name ] = order || 100; + }; + + /** + * Adds an item from the specified definition to the editor context menu. + * @name CKEDITOR.editor.prototype.addMenuItem + * @param {String} name The menu item name. + * @param {CKEDITOR.menu.definition} definition The menu item definition. + */ + editor.addMenuItem = function( name, definition ) + { + if ( groupsOrder[ definition.group ] ) + menuItems[ name ] = new CKEDITOR.menuItem( this, name, definition ); + }; + + /** + * Adds one or more items from the specified definition array to the editor context menu. + * @name CKEDITOR.editor.prototype.addMenuItems + * @param {Array} definitions List of definitions for each menu item as if {@link CKEDITOR.editor.addMenuItem} is called. + */ + editor.addMenuItems = function( definitions ) + { + for ( var itemName in definitions ) + { + this.addMenuItem( itemName, definitions[ itemName ] ); + } + }; + + /** + * Retrieves a particular menu item definition from the editor context menu. + * @name CKEDITOR.editor.prototype.getMenuItem + * @param {String} name The name of the desired menu item. + * @return {CKEDITOR.menu.definition} + */ + editor.getMenuItem = function( name ) + { + return menuItems[ name ]; + }; + + /** + * Removes a particular menu item added before from the editor context menu. + * @name CKEDITOR.editor.prototype.removeMenuItem + * @param {String} name The name of the desired menu item. + * @since 3.6.1 + */ + editor.removeMenuItem = function( name ) + { + delete menuItems[ name ]; + }; + }, + + requires : [ 'floatpanel' ] +}); + +(function() +{ + CKEDITOR.menu = CKEDITOR.tools.createClass( + { + $ : function( editor, definition ) + { + definition = this._.definition = definition || {}; + this.id = CKEDITOR.tools.getNextId(); + + this.editor = editor; + this.items = []; + this._.listeners = []; + + this._.level = definition.level || 1; + + var panelDefinition = CKEDITOR.tools.extend( {}, definition.panel, + { + css : editor.skin.editor.css, + level : this._.level - 1, + block : {} + } ); + + var attrs = panelDefinition.block.attributes = ( panelDefinition.attributes || {} ); + // Provide default role of 'menu'. + !attrs.role && ( attrs.role = 'menu' ); + this._.panelDefinition = panelDefinition; + }, + + _ : + { + onShow : function() + { + var selection = this.editor.getSelection(); + + // Selection will be unavailable after menu shows up + // in IE, lock it now. + if ( CKEDITOR.env.ie ) + selection && selection.lock(); + + var element = selection && selection.getStartElement(), + listeners = this._.listeners, + includedItems = []; + + this.removeAll(); + // Call all listeners, filling the list of items to be displayed. + for ( var i = 0 ; i < listeners.length ; i++ ) + { + var listenerItems = listeners[ i ]( element, selection ); + + if ( listenerItems ) + { + for ( var itemName in listenerItems ) + { + var item = this.editor.getMenuItem( itemName ); + + if ( item && ( !item.command || this.editor.getCommand( item.command ).state ) ) + { + item.state = listenerItems[ itemName ]; + this.add( item ); + } + } + } + } + }, + + onClick : function( item ) + { + this.hide( false ); + + if ( item.onClick ) + item.onClick(); + else if ( item.command ) + this.editor.execCommand( item.command ); + }, + + onEscape : function( keystroke ) + { + var parent = this.parent; + // 1. If it's sub-menu, restore the last focused item + // of upper level menu. + // 2. In case of a top-menu, close it. + if ( parent ) + { + parent._.panel.hideChild(); + // Restore parent block item focus. + var parentBlock = parent._.panel._.panel._.currentBlock, + parentFocusIndex = parentBlock._.focusIndex; + parentBlock._.markItem( parentFocusIndex ); + } + else if ( keystroke == 27 ) + this.hide(); + + return false; + }, + + onHide : function() + { + if ( CKEDITOR.env.ie ) + { + var selection = this.editor.getSelection(); + selection && selection.unlock(); + } + + this.onHide && this.onHide(); + }, + + showSubMenu : function( index ) + { + var menu = this._.subMenu, + item = this.items[ index ], + subItemDefs = item.getItems && item.getItems(); + + // If this item has no subitems, we just hide the submenu, if + // available, and return back. + if ( !subItemDefs ) + { + this._.panel.hideChild(); + return; + } + + // Record parent menu focused item first (#3389). + var block = this._.panel.getBlock( this.id ); + block._.focusIndex = index; + + // Create the submenu, if not available, or clean the existing + // one. + if ( menu ) + menu.removeAll(); + else + { + menu = this._.subMenu = new CKEDITOR.menu( this.editor, + CKEDITOR.tools.extend( {}, this._.definition, { level : this._.level + 1 }, true ) ); + menu.parent = this; + menu._.onClick = CKEDITOR.tools.bind( this._.onClick, this ); + } + + // Add all submenu items to the menu. + for ( var subItemName in subItemDefs ) + { + var subItem = this.editor.getMenuItem( subItemName ); + if ( subItem ) + { + subItem.state = subItemDefs[ subItemName ]; + menu.add( subItem ); + } + } + + // Get the element representing the current item. + var element = this._.panel.getBlock( this.id ).element.getDocument().getById( this.id + String( index ) ); + + // Show the submenu. + menu.show( element, 2 ); + } + }, + + proto : + { + add : function( item ) + { + // Later we may sort the items, but Array#sort is not stable in + // some browsers, here we're forcing the original sequence with + // 'order' attribute if it hasn't been assigned. (#3868) + if ( !item.order ) + item.order = this.items.length; + + this.items.push( item ); + }, + + removeAll : function() + { + this.items = []; + }, + + show : function( offsetParent, corner, offsetX, offsetY ) + { + // Not for sub menu. + if ( !this.parent ) + { + this._.onShow(); + // Don't menu with zero items. + if ( ! this.items.length ) + return; + } + + corner = corner || ( this.editor.lang.dir == 'rtl' ? 2 : 1 ); + + var items = this.items, + editor = this.editor, + panel = this._.panel, + element = this._.element; + + // Create the floating panel for this menu. + if ( !panel ) + { + panel = this._.panel = new CKEDITOR.ui.floatPanel( this.editor, + CKEDITOR.document.getBody(), + this._.panelDefinition, + this._.level ); + + panel.onEscape = CKEDITOR.tools.bind( function( keystroke ) + { + if ( this._.onEscape( keystroke ) === false ) + return false; + }, + this ); + + panel.onHide = CKEDITOR.tools.bind( function() + { + this._.onHide && this._.onHide(); + }, + this ); + + // Create an autosize block inside the panel. + var block = panel.addBlock( this.id, this._.panelDefinition.block ); + block.autoSize = true; + + var keys = block.keys; + keys[ 40 ] = 'next'; // ARROW-DOWN + keys[ 9 ] = 'next'; // TAB + keys[ 38 ] = 'prev'; // ARROW-UP + keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB + keys[ ( editor.lang.dir == 'rtl' ? 37 : 39 ) ]= CKEDITOR.env.ie ? 'mouseup' : 'click'; // ARROW-RIGHT/ARROW-LEFT(rtl) + keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE + CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041). + + element = this._.element = block.element; + element.addClass( editor.skinClass ); + + var elementDoc = element.getDocument(); + elementDoc.getBody().setStyle( 'overflow', 'hidden' ); + elementDoc.getElementsByTag( 'html' ).getItem( 0 ).setStyle( 'overflow', 'hidden' ); + + this._.itemOverFn = CKEDITOR.tools.addFunction( function( index ) + { + clearTimeout( this._.showSubTimeout ); + this._.showSubTimeout = CKEDITOR.tools.setTimeout( this._.showSubMenu, editor.config.menu_subMenuDelay || 400, this, [ index ] ); + }, + this ); + + this._.itemOutFn = CKEDITOR.tools.addFunction( function( index ) + { + clearTimeout( this._.showSubTimeout ); + }, + this ); + + this._.itemClickFn = CKEDITOR.tools.addFunction( function( index ) + { + var item = this.items[ index ]; + + if ( item.state == CKEDITOR.TRISTATE_DISABLED ) + { + this.hide(); + return; + } + + if ( item.getItems ) + this._.showSubMenu( index ); + else + this._.onClick( item ); + }, + this ); + } + + // Put the items in the right order. + sortItems( items ); + + var chromeRoot = editor.container.getChild( 1 ), + mixedContentClass = chromeRoot.hasClass( 'cke_mixed_dir_content' ) ? ' cke_mixed_dir_content' : ''; + + // Build the HTML that composes the menu and its items. + var output = [ '<div class="cke_menu' + mixedContentClass + '" role="presentation">' ]; + + var length = items.length, + lastGroup = length && items[ 0 ].group; + + for ( var i = 0 ; i < length ; i++ ) + { + var item = items[ i ]; + if ( lastGroup != item.group ) + { + output.push( '<div class="cke_menuseparator" role="separator"></div>' ); + lastGroup = item.group; + } + + item.render( this, i, output ); + } + + output.push( '</div>' ); + + // Inject the HTML inside the panel. + element.setHtml( output.join( '' ) ); + + CKEDITOR.ui.fire( 'ready', this ); + + // Show the panel. + if ( this.parent ) + this.parent._.panel.showAsChild( panel, this.id, offsetParent, corner, offsetX, offsetY ); + else + panel.showBlock( this.id, offsetParent, corner, offsetX, offsetY ); + + editor.fire( 'menuShow', [ panel ] ); + }, + + addListener : function( listenerFn ) + { + this._.listeners.push( listenerFn ); + }, + + hide : function( returnFocus ) + { + this._.onHide && this._.onHide(); + this._.panel && this._.panel.hide( returnFocus ); + } + } + }); + + function sortItems( items ) + { + items.sort( function( itemA, itemB ) + { + if ( itemA.group < itemB.group ) + return -1; + else if ( itemA.group > itemB.group ) + return 1; + + return itemA.order < itemB.order ? -1 : + itemA.order > itemB.order ? 1 : + 0; + }); + } + CKEDITOR.menuItem = CKEDITOR.tools.createClass( + { + $ : function( editor, name, definition ) + { + CKEDITOR.tools.extend( this, definition, + // Defaults + { + order : 0, + className : 'cke_button_' + name + }); + + // Transform the group name into its order number. + this.group = editor._.menuGroups[ this.group ]; + + this.editor = editor; + this.name = name; + }, + + proto : + { + render : function( menu, index, output ) + { + var id = menu.id + String( index ), + state = ( typeof this.state == 'undefined' ) ? CKEDITOR.TRISTATE_OFF : this.state; + + var classes = ' cke_' + ( + state == CKEDITOR.TRISTATE_ON ? 'on' : + state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : + 'off' ); + + var htmlLabel = this.label; + + if ( this.className ) + classes += ' ' + this.className; + + var hasSubMenu = this.getItems; + + output.push( + '<span class="cke_menuitem' + ( this.icon && this.icon.indexOf( '.png' ) == -1 ? ' cke_noalphafix' : '' ) + '">' + + '<a id="', id, '"' + + ' class="', classes, '" href="javascript:void(\'', ( this.label || '' ).replace( "'", '' ), '\')"' + + ' title="', this.label, '"' + + ' tabindex="-1"' + + '_cke_focus=1' + + ' hidefocus="true"' + + ' role="menuitem"' + + ( hasSubMenu ? 'aria-haspopup="true"' : '' ) + + ( state == CKEDITOR.TRISTATE_DISABLED ? 'aria-disabled="true"' : '' ) + + ( state == CKEDITOR.TRISTATE_ON ? 'aria-pressed="true"' : '' ) ); + + // Some browsers don't cancel key events in the keydown but in the + // keypress. + // TODO: Check if really needed for Gecko+Mac. + if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) ) + { + output.push( + ' onkeypress="return false;"' ); + } + + // With Firefox, we need to force the button to redraw, otherwise it + // will remain in the focus state. + if ( CKEDITOR.env.gecko ) + { + output.push( + ' onblur="this.style.cssText = this.style.cssText;"' ); + } + + var offset = ( this.iconOffset || 0 ) * -16; + output.push( +// ' onkeydown="return CKEDITOR.ui.button._.keydown(', index, ', event);"' + + ' onmouseover="CKEDITOR.tools.callFunction(', menu._.itemOverFn, ',', index, ');"' + + ' onmouseout="CKEDITOR.tools.callFunction(', menu._.itemOutFn, ',', index, ');" ' + + ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188 + '="CKEDITOR.tools.callFunction(', menu._.itemClickFn, ',', index, '); return false;"' + + '>' + + '<span class="cke_icon_wrapper"><span class="cke_icon"' + + ( this.icon ? ' style="background-image:url(' + CKEDITOR.getUrl( this.icon ) + ');background-position:0 ' + offset + 'px;"' + : '' ) + + '></span></span>' + + '<span class="cke_label">' ); + + if ( hasSubMenu ) + { + output.push( + '<span class="cke_menuarrow">', + '<span>&#', + ( this.editor.lang.dir == 'rtl' ? + '9668' : // BLACK LEFT-POINTING POINTER + '9658' ), // BLACK RIGHT-POINTING POINTER + ';</span>', + '</span>' ); + } + + output.push( + htmlLabel, + '</span>' + + '</a>' + + '</span>' ); + } + } + }); + +})(); + + +/** + * The amount of time, in milliseconds, the editor waits before displaying submenu + * options when moving the mouse over options that contain submenus, like the + * "Cell Properties" entry for tables. + * @type Number + * @default 400 + * @example + * // Remove the submenu delay. + * config.menu_subMenuDelay = 0; + */ + +/** + * A comma separated list of items group names to be displayed in the context + * menu. The order of items will reflect the order specified in this list if + * no priority was defined in the groups. + * @type String + * @default 'clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea' + * @example + * config.menu_groups = 'clipboard,table,anchor,link,image'; + */ +CKEDITOR.config.menu_groups = + 'clipboard,' + + 'form,' + + 'tablecell,tablecellproperties,tablerow,tablecolumn,table,'+ + 'anchor,link,image,flash,' + + 'checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div'; diff --git a/_source/plugins/menubutton/plugin.js b/_source/plugins/menubutton/plugin.js new file mode 100644 index 0000000..6f07531 --- /dev/null +++ b/_source/plugins/menubutton/plugin.js @@ -0,0 +1,98 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'menubutton', +{ + requires : [ 'button', 'menu' ], + beforeInit : function( editor ) + { + editor.ui.addHandler( CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler ); + } +}); + +/** + * Button UI element. + * @constant + * @example + */ +CKEDITOR.UI_MENUBUTTON = 'menubutton'; + +(function() +{ + var clickFn = function( editor ) + { + var _ = this._; + + // Do nothing if this button is disabled. + if ( _.state === CKEDITOR.TRISTATE_DISABLED ) + return; + + _.previousState = _.state; + + // Check if we already have a menu for it, otherwise just create it. + var menu = _.menu; + if ( !menu ) + { + menu = _.menu = new CKEDITOR.menu( editor, + { + panel: + { + className : editor.skinClass + ' cke_contextmenu', + attributes : { 'aria-label' : editor.lang.common.options } + } + }); + + menu.onHide = CKEDITOR.tools.bind( function() + { + this.setState( this.modes && this.modes[ editor.mode ] ? _.previousState : CKEDITOR.TRISTATE_DISABLED ); + }, + this ); + + // Initialize the menu items at this point. + if ( this.onMenu ) + menu.addListener( this.onMenu ); + } + + if ( _.on ) + { + menu.hide(); + return; + } + + this.setState( CKEDITOR.TRISTATE_ON ); + + menu.show( CKEDITOR.document.getById( this._.id ), 4 ); + }; + + + CKEDITOR.ui.menuButton = CKEDITOR.tools.createClass( + { + base : CKEDITOR.ui.button, + + $ : function( definition ) + { + // We don't want the panel definition in this object. + var panelDefinition = definition.panel; + delete definition.panel; + + this.base( definition ); + + this.hasArrow = true; + + this.click = clickFn; + }, + + statics : + { + handler : + { + create : function( definition ) + { + return new CKEDITOR.ui.menuButton( definition ); + } + } + } + }); +})(); diff --git a/_source/plugins/newpage/plugin.js b/_source/plugins/newpage/plugin.js new file mode 100644 index 0000000..12de07d --- /dev/null +++ b/_source/plugins/newpage/plugin.js @@ -0,0 +1,54 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Horizontal Page Break + */ + +// Register a plugin named "newpage". +CKEDITOR.plugins.add( 'newpage', +{ + init : function( editor ) + { + editor.addCommand( 'newpage', + { + modes : { wysiwyg:1, source:1 }, + + exec : function( editor ) + { + var command = this; + editor.setData( editor.config.newpage_html || '', function() + { + // Save the undo snapshot after all document changes are affected. (#4889) + setTimeout( function () + { + editor.fire( 'afterCommandExec', + { + name: command.name, + command: command + } ); + editor.selectionChange(); + + }, 200 ); + } ); + editor.focus(); + }, + async : true + }); + + editor.ui.addButton( 'NewPage', + { + label : editor.lang.newPage, + command : 'newpage' + }); + } +}); +/** + * The HTML to load in the editor when the "new page" command is executed. + * @type String + * @default '' + * @example + * config.newpage_html = '<p>Type your text here.</p>'; + */ diff --git a/_source/plugins/pagebreak/images/pagebreak.gif b/_source/plugins/pagebreak/images/pagebreak.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d1cffd64af72709b1180b3b0a51bbfe30bcb8c6 GIT binary patch literal 54 zcmZ?wbhEHb<Y!=IXkcWRIdkU!|Nj+#vM@3*Ff!;c00Bsbfr;0puk*m${3$UTHfcIC HGFSrukc<xG literal 0 HcmV?d00001 diff --git a/_source/plugins/pagebreak/plugin.js b/_source/plugins/pagebreak/plugin.js new file mode 100644 index 0000000..ac7653f --- /dev/null +++ b/_source/plugins/pagebreak/plugin.js @@ -0,0 +1,164 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Horizontal Page Break + */ + +// Register a plugin named "pagebreak". +CKEDITOR.plugins.add( 'pagebreak', +{ + init : function( editor ) + { + // Register the command. + editor.addCommand( 'pagebreak', CKEDITOR.plugins.pagebreakCmd ); + + // Register the toolbar button. + editor.ui.addButton( 'PageBreak', + { + label : editor.lang.pagebreak, + command : 'pagebreak' + }); + + var cssStyles = [ + '{' , + 'background: url(' + CKEDITOR.getUrl( this.path + 'images/pagebreak.gif' ) + ') no-repeat center center;' , + 'clear: both;' , + 'width:100%; _width:99.9%;' , + 'border-top: #999999 1px dotted;' , + 'border-bottom: #999999 1px dotted;' , + 'padding:0;' , + 'height: 5px;' , + 'cursor: default;' , + '}' + ].join( '' ).replace(/;/g, ' !important;' ); // Increase specificity to override other styles, e.g. block outline. + + // Add the style that renders our placeholder. + editor.addCss( 'div.cke_pagebreak' + cssStyles ); + + // Opera needs help to select the page-break. + CKEDITOR.env.opera && editor.on( 'contentDom', function() + { + editor.document.on( 'click', function( evt ) + { + var target = evt.data.getTarget(); + if ( target.is( 'div' ) && target.hasClass( 'cke_pagebreak') ) + editor.getSelection().selectElement( target ); + }); + }); + }, + + afterInit : function( editor ) + { + var label = editor.lang.pagebreakAlt; + + // Register a filter to displaying placeholders after mode change. + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( htmlFilter ) + { + htmlFilter.addRules( + { + attributes : { + 'class' : function( value, element ) + { + var className = value.replace( 'cke_pagebreak', '' ); + if ( className != value ) + { + var span = CKEDITOR.htmlParser.fragment.fromHtml( '<span style="display: none;"> </span>' ); + element.children.length = 0; + element.add( span ); + var attrs = element.attributes; + delete attrs[ 'aria-label' ]; + delete attrs.contenteditable; + delete attrs.title; + } + return className; + } + } + }, 5 ); + } + + if ( dataFilter ) + { + dataFilter.addRules( + { + elements : + { + div : function( element ) + { + var attributes = element.attributes, + style = attributes && attributes.style, + child = style && element.children.length == 1 && element.children[ 0 ], + childStyle = child && ( child.name == 'span' ) && child.attributes.style; + + if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) ) + { + attributes.contenteditable = "false"; + attributes[ 'class' ] = "cke_pagebreak"; + attributes[ 'data-cke-display-name' ] = "pagebreak"; + attributes[ 'aria-label' ] = label; + attributes[ 'title' ] = label; + + element.children.length = 0; + } + } + } + }); + } + }, + + requires : [ 'fakeobjects' ] +}); + +CKEDITOR.plugins.pagebreakCmd = +{ + exec : function( editor ) + { + var label = editor.lang.pagebreakAlt; + + // Create read-only element that represents a print break. + var pagebreak = CKEDITOR.dom.element.createFromHtml( + '<div style="' + + 'page-break-after: always;"' + + 'contenteditable="false" ' + + 'title="'+ label + '" ' + + 'aria-label="'+ label + '" ' + + 'data-cke-display-name="pagebreak" ' + + 'class="cke_pagebreak">' + + '</div>', editor.document ); + + var ranges = editor.getSelection().getRanges( true ); + + editor.fire( 'saveSnapshot' ); + + for ( var range, i = ranges.length - 1 ; i >= 0; i-- ) + { + range = ranges[ i ]; + + if ( i < ranges.length -1 ) + pagebreak = pagebreak.clone( true ); + + range.splitBlock( 'p' ); + range.insertNode( pagebreak ); + if ( i == ranges.length - 1 ) + { + var next = pagebreak.getNext(); + range.moveToPosition( pagebreak, CKEDITOR.POSITION_AFTER_END ); + + // If there's nothing or a non-editable block followed by, establish a new paragraph + // to make sure cursor is not trapped. + if ( !next || next.type == CKEDITOR.NODE_ELEMENT && !next.isEditable() ) + range.fixBlock( true, editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ); + + range.select(); + } + } + + editor.fire( 'saveSnapshot' ); + } +}; diff --git a/_source/plugins/panel/plugin.js b/_source/plugins/panel/plugin.js new file mode 100644 index 0000000..cb0a615 --- /dev/null +++ b/_source/plugins/panel/plugin.js @@ -0,0 +1,403 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'panel', +{ + beforeInit : function( editor ) + { + editor.ui.addHandler( CKEDITOR.UI_PANEL, CKEDITOR.ui.panel.handler ); + } +}); + +/** + * Panel UI element. + * @constant + * @example + */ +CKEDITOR.UI_PANEL = 'panel'; + +CKEDITOR.ui.panel = function( document, definition ) +{ + // Copy all definition properties to this object. + if ( definition ) + CKEDITOR.tools.extend( this, definition ); + + // Set defaults. + CKEDITOR.tools.extend( this, + { + className : '', + css : [] + }); + + this.id = CKEDITOR.tools.getNextId(); + this.document = document; + + this._ = + { + blocks : {} + }; +}; + +/** + * Transforms a rich combo definition in a {@link CKEDITOR.ui.richCombo} + * instance. + * @type Object + * @example + */ +CKEDITOR.ui.panel.handler = +{ + create : function( definition ) + { + return new CKEDITOR.ui.panel( definition ); + } +}; + +CKEDITOR.ui.panel.prototype = +{ + renderHtml : function( editor ) + { + var output = []; + this.render( editor, output ); + return output.join( '' ); + }, + + /** + * Renders the combo. + * @param {CKEDITOR.editor} editor The editor instance which this button is + * to be used by. + * @param {Array} output The output array to which append the HTML relative + * to this button. + * @example + */ + render : function( editor, output ) + { + var id = this.id; + + output.push( + '<div class="', editor.skinClass ,'"' + + ' lang="', editor.langCode, '"' + + ' role="presentation"' + + // iframe loading need sometime, keep the panel hidden(#4186). + ' style="display:none;z-index:' + ( editor.config.baseFloatZIndex + 1 ) + '">' + + '<div' + + ' id=', id, + ' dir=', editor.lang.dir, + ' role="presentation"' + + ' class="cke_panel cke_', editor.lang.dir ); + + if ( this.className ) + output.push( ' ', this.className ); + + output.push( + '">' ); + + if ( this.forceIFrame || this.css.length ) + { + output.push( + '<iframe id="', id, '_frame"' + + ' frameborder="0"' + + ' role="application" src="javascript:void(' ); + + output.push( + // Support for custom document.domain in IE. + CKEDITOR.env.isCustomDomain() ? + '(function(){' + + 'document.open();' + + 'document.domain=\'' + document.domain + '\';' + + 'document.close();' + + '})()' + : + '0' ); + + output.push( + ')"></iframe>' ); + } + + output.push( + '</div>' + + '</div>' ); + + return id; + }, + + getHolderElement : function() + { + var holder = this._.holder; + + if ( !holder ) + { + if ( this.forceIFrame || this.css.length ) + { + var iframe = this.document.getById( this.id + '_frame' ), + parentDiv = iframe.getParent(), + dir = parentDiv.getAttribute( 'dir' ), + className = parentDiv.getParent().getAttribute( 'class' ), + langCode = parentDiv.getParent().getAttribute( 'lang' ), + doc = iframe.getFrameDocument(); + + var onLoad = CKEDITOR.tools.addFunction( CKEDITOR.tools.bind( function( ev ) + { + this.isLoaded = true; + if ( this.onLoad ) + this.onLoad(); + }, this ) ); + + var data = + '<!DOCTYPE html>' + + '<html dir="' + dir + '" class="' + className + '_container" lang="' + langCode + '">' + + '<head>' + + '<style>.' + className + '_container{visibility:hidden}</style>' + + '</head>' + + '<body class="cke_' + dir + ' cke_panel_frame ' + CKEDITOR.env.cssClass + '" style="margin:0;padding:0"' + + ' onload="( window.CKEDITOR || window.parent.CKEDITOR ).tools.callFunction(' + onLoad + ');"></body>' + + // It looks strange, but for FF2, the styles must go + // after <body>, so it (body) becames immediatelly + // available. (#3031) + CKEDITOR.tools.buildStyleHtml( this.css ) + + '<\/html>'; + + doc.write( data ); + + var win = doc.getWindow(); + + // Register the CKEDITOR global. + win.$.CKEDITOR = CKEDITOR; + + // Arrow keys for scrolling is only preventable with 'keypress' event in Opera (#4534). + doc.on( 'key' + ( CKEDITOR.env.opera? 'press':'down' ), function( evt ) + { + var keystroke = evt.data.getKeystroke(), + dir = this.document.getById( this.id ).getAttribute( 'dir' ); + + // Delegate key processing to block. + if ( this._.onKeyDown && this._.onKeyDown( keystroke ) === false ) + { + evt.data.preventDefault(); + return; + } + + // ESC/ARROW-LEFT(ltr) OR ARROW-RIGHT(rtl) + if ( keystroke == 27 || keystroke == ( dir == 'rtl' ? 39 : 37 ) ) + { + if ( this.onEscape && this.onEscape( keystroke ) === false ) + evt.data.preventDefault(); + } + }, + this ); + + holder = doc.getBody(); + holder.unselectable(); + CKEDITOR.env.air && CKEDITOR.tools.callFunction( onLoad ); + } + else + holder = this.document.getById( this.id ); + + this._.holder = holder; + } + + return holder; + }, + + addBlock : function( name, block ) + { + block = this._.blocks[ name ] = block instanceof CKEDITOR.ui.panel.block ? block + : new CKEDITOR.ui.panel.block( this.getHolderElement(), block ); + + if ( !this._.currentBlock ) + this.showBlock( name ); + + return block; + }, + + getBlock : function( name ) + { + return this._.blocks[ name ]; + }, + + showBlock : function( name ) + { + var blocks = this._.blocks, + block = blocks[ name ], + current = this._.currentBlock, + holder = this.forceIFrame ? + this.document.getById( this.id + '_frame' ) + : this._.holder; + + // Disable context menu for block panel. + holder.getParent().getParent().disableContextMenu(); + + if ( current ) + { + // Clean up the current block's effects on holder. + holder.removeAttributes( current.attributes ); + current.hide(); + } + + this._.currentBlock = block; + + holder.setAttributes( block.attributes ); + CKEDITOR.fire( 'ariaWidget', holder ); + + // Reset the focus index, so it will always go into the first one. + block._.focusIndex = -1; + + this._.onKeyDown = block.onKeyDown && CKEDITOR.tools.bind( block.onKeyDown, block ); + + block.onMark = function( item ) + { + holder.setAttribute( 'aria-activedescendant', item.getId() + '_option' ); + }; + + block.onUnmark = function() + { + holder.removeAttribute( 'aria-activedescendant' ); + }; + + block.show(); + + return block; + }, + + destroy : function() + { + this.element && this.element.remove(); + } +}; + +CKEDITOR.ui.panel.block = CKEDITOR.tools.createClass( +{ + $ : function( blockHolder, blockDefinition ) + { + this.element = blockHolder.append( + blockHolder.getDocument().createElement( 'div', + { + attributes : + { + 'tabIndex' : -1, + 'class' : 'cke_panel_block', + 'role' : 'presentation' + }, + styles : + { + display : 'none' + } + }) ); + + // Copy all definition properties to this object. + if ( blockDefinition ) + CKEDITOR.tools.extend( this, blockDefinition ); + + if ( !this.attributes.title ) + this.attributes.title = this.attributes[ 'aria-label' ]; + + this.keys = {}; + + this._.focusIndex = -1; + + // Disable context menu for panels. + this.element.disableContextMenu(); + }, + + _ : { + + /** + * Mark the item specified by the index as current activated. + */ + markItem: function( index ) + { + if ( index == -1 ) + return; + var links = this.element.getElementsByTag( 'a' ); + var item = links.getItem( this._.focusIndex = index ); + + // Safari need focus on the iframe window first(#3389), but we need + // lock the blur to avoid hiding the panel. + if ( CKEDITOR.env.webkit || CKEDITOR.env.opera ) + item.getDocument().getWindow().focus(); + item.focus(); + + this.onMark && this.onMark( item ); + } + }, + + proto : + { + show : function() + { + this.element.setStyle( 'display', '' ); + }, + + hide : function() + { + if ( !this.onHide || this.onHide.call( this ) !== true ) + this.element.setStyle( 'display', 'none' ); + }, + + onKeyDown : function( keystroke ) + { + var keyAction = this.keys[ keystroke ]; + switch ( keyAction ) + { + // Move forward. + case 'next' : + var index = this._.focusIndex, + links = this.element.getElementsByTag( 'a' ), + link; + + while ( ( link = links.getItem( ++index ) ) ) + { + // Move the focus only if the element is marked with + // the _cke_focus and it it's visible (check if it has + // width). + if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) + { + this._.focusIndex = index; + link.focus(); + break; + } + } + return false; + + // Move backward. + case 'prev' : + index = this._.focusIndex; + links = this.element.getElementsByTag( 'a' ); + + while ( index > 0 && ( link = links.getItem( --index ) ) ) + { + // Move the focus only if the element is marked with + // the _cke_focus and it it's visible (check if it has + // width). + if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) + { + this._.focusIndex = index; + link.focus(); + break; + } + } + return false; + + case 'click' : + case 'mouseup' : + index = this._.focusIndex; + link = index >= 0 && this.element.getElementsByTag( 'a' ).getItem( index ); + + if ( link ) + link.$[ keyAction ] ? link.$[ keyAction ]() : link.$[ 'on' + keyAction ](); + + return false; + } + + return true; + } + } +}); + +/** + * Fired when a panel is added to the document + * @name CKEDITOR#ariaWidget + * @event + * @param {Object} holder The element wrapping the panel + */ diff --git a/_source/plugins/panelbutton/plugin.js b/_source/plugins/panelbutton/plugin.js new file mode 100644 index 0000000..eba97cd --- /dev/null +++ b/_source/plugins/panelbutton/plugin.js @@ -0,0 +1,144 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'panelbutton', +{ + requires : [ 'button' ], + onLoad : function() + { + function clickFn( editor ) + { + var _ = this._; + + if ( _.state == CKEDITOR.TRISTATE_DISABLED ) + return; + + this.createPanel( editor ); + + if ( _.on ) + { + _.panel.hide(); + return; + } + + _.panel.showBlock( this._.id, this.document.getById( this._.id ), 4 ); + } + + CKEDITOR.ui.panelButton = CKEDITOR.tools.createClass( + { + base : CKEDITOR.ui.button, + + $ : function( definition ) + { + // We don't want the panel definition in this object. + var panelDefinition = definition.panel; + delete definition.panel; + + this.base( definition ); + + this.document = ( panelDefinition + && panelDefinition.parent + && panelDefinition.parent.getDocument() ) + || CKEDITOR.document; + + panelDefinition.block = + { + attributes : panelDefinition.attributes + }; + + this.hasArrow = true; + + this.click = clickFn; + + this._ = + { + panelDefinition : panelDefinition + }; + }, + + statics : + { + handler : + { + create : function( definition ) + { + return new CKEDITOR.ui.panelButton( definition ); + } + } + }, + + proto : + { + createPanel : function( editor ) + { + var _ = this._; + + if ( _.panel ) + return; + + var panelDefinition = this._.panelDefinition || {}, + panelBlockDefinition = this._.panelDefinition.block, + panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(), + panel = this._.panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ), + block = panel.addBlock( _.id, panelBlockDefinition ), + me = this; + + panel.onShow = function() + { + if ( me.className ) + this.element.getFirst().addClass( me.className + '_panel' ); + + me.setState( CKEDITOR.TRISTATE_ON ); + + _.on = 1; + + if ( me.onOpen ) + me.onOpen(); + }; + + panel.onHide = function( preventOnClose ) + { + if ( me.className ) + this.element.getFirst().removeClass( me.className + '_panel' ); + + me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); + + _.on = 0; + + if ( !preventOnClose && me.onClose ) + me.onClose(); + }; + + panel.onEscape = function() + { + panel.hide(); + me.document.getById( _.id ).focus(); + }; + + if ( this.onBlock ) + this.onBlock( panel, block ); + + block.onHide = function() + { + _.on = 0; + me.setState( CKEDITOR.TRISTATE_OFF ); + }; + } + } + }); + + }, + beforeInit : function( editor ) + { + editor.ui.addHandler( CKEDITOR.UI_PANELBUTTON, CKEDITOR.ui.panelButton.handler ); + } +}); + +/** + * Button UI element. + * @constant + * @example + */ +CKEDITOR.UI_PANELBUTTON = 'panelbutton'; diff --git a/_source/plugins/pastefromword/filter/default.js b/_source/plugins/pastefromword/filter/default.js new file mode 100644 index 0000000..2eb948d --- /dev/null +++ b/_source/plugins/pastefromword/filter/default.js @@ -0,0 +1,1367 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var fragmentPrototype = CKEDITOR.htmlParser.fragment.prototype, + elementPrototype = CKEDITOR.htmlParser.element.prototype; + + fragmentPrototype.onlyChild = elementPrototype.onlyChild = function() + { + var children = this.children, + count = children.length, + firstChild = ( count == 1 ) && children[ 0 ]; + return firstChild || null; + }; + + elementPrototype.removeAnyChildWithName = function( tagName ) + { + var children = this.children, + childs = [], + child; + + for ( var i = 0; i < children.length; i++ ) + { + child = children[ i ]; + if ( !child.name ) + continue; + + if ( child.name == tagName ) + { + childs.push( child ); + children.splice( i--, 1 ); + } + childs = childs.concat( child.removeAnyChildWithName( tagName ) ); + } + return childs; + }; + + elementPrototype.getAncestor = function( tagNameRegex ) + { + var parent = this.parent; + while ( parent && !( parent.name && parent.name.match( tagNameRegex ) ) ) + parent = parent.parent; + return parent; + }; + + fragmentPrototype.firstChild = elementPrototype.firstChild = function( evaluator ) + { + var child; + + for ( var i = 0 ; i < this.children.length ; i++ ) + { + child = this.children[ i ]; + if ( evaluator( child ) ) + return child; + else if ( child.name ) + { + child = child.firstChild( evaluator ); + if ( child ) + return child; + } + } + + return null; + }; + + // Adding a (set) of styles to the element's 'style' attributes. + elementPrototype.addStyle = function( name, value, isPrepend ) + { + var styleText, addingStyleText = ''; + // name/value pair. + if ( typeof value == 'string' ) + addingStyleText += name + ':' + value + ';'; + else + { + // style literal. + if ( typeof name == 'object' ) + { + for ( var style in name ) + { + if ( name.hasOwnProperty( style ) ) + addingStyleText += style + ':' + name[ style ] + ';'; + } + } + // raw style text form. + else + addingStyleText += name; + + isPrepend = value; + } + + if ( !this.attributes ) + this.attributes = {}; + + styleText = this.attributes.style || ''; + + styleText = ( isPrepend ? + [ addingStyleText, styleText ] + : [ styleText, addingStyleText ] ).join( ';' ); + + this.attributes.style = styleText.replace( /^;|;(?=;)/, '' ); + }; + + /** + * Return the DTD-valid parent tag names of the specified one. + * @param tagName + */ + CKEDITOR.dtd.parentOf = function( tagName ) + { + var result = {}; + for ( var tag in this ) + { + if ( tag.indexOf( '$' ) == -1 && this[ tag ][ tagName ] ) + result[ tag ] = 1; + } + return result; + }; + + // 1. move consistent list item styles up to list root. + // 2. clear out unnecessary list item numbering. + function postProcessList( list ) + { + var children = list.children, + child, + attrs, + count = list.children.length, + match, + mergeStyle, + styleTypeRegexp = /list-style-type:(.*?)(?:;|$)/, + stylesFilter = CKEDITOR.plugins.pastefromword.filters.stylesFilter; + + attrs = list.attributes; + if ( styleTypeRegexp.exec( attrs.style ) ) + return; + + for ( var i = 0; i < count; i++ ) + { + child = children[ i ]; + + if ( child.attributes.value && Number( child.attributes.value ) == i + 1 ) + delete child.attributes.value; + + match = styleTypeRegexp.exec( child.attributes.style ); + + if ( match ) + { + if ( match[ 1 ] == mergeStyle || !mergeStyle ) + mergeStyle = match[ 1 ]; + else + { + mergeStyle = null; + break; + } + } + } + + if ( mergeStyle ) + { + for ( i = 0; i < count; i++ ) + { + attrs = children[ i ].attributes; + attrs.style && ( attrs.style = stylesFilter( [ [ 'list-style-type'] ] )( attrs.style ) || '' ); + } + + list.addStyle( 'list-style-type', mergeStyle ); + } + } + + var cssLengthRelativeUnit = /^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i; + var emptyMarginRegex = /^(?:\b0[^\s]*\s*){1,4}$/; // e.g. 0px 0pt 0px + var romanLiternalPattern = '^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$', + lowerRomanLiteralRegex = new RegExp( romanLiternalPattern ), + upperRomanLiteralRegex = new RegExp( romanLiternalPattern.toUpperCase() ); + + var orderedPatterns = { 'decimal' : /\d+/, 'lower-roman': lowerRomanLiteralRegex, 'upper-roman': upperRomanLiteralRegex, 'lower-alpha' : /^[a-z]+$/, 'upper-alpha': /^[A-Z]+$/ }, + unorderedPatterns = { 'disc' : /[l\u00B7\u2002]/, 'circle' : /[\u006F\u00D8]/,'square' : /[\u006E\u25C6]/}, + listMarkerPatterns = { 'ol' : orderedPatterns, 'ul' : unorderedPatterns }, + romans = [ [1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I'] ], + alpahbets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + // Convert roman numbering back to decimal. + function fromRoman( str ) + { + str = str.toUpperCase(); + var l = romans.length, retVal = 0; + for ( var i = 0; i < l; ++i ) + { + for ( var j = romans[i], k = j[1].length; str.substr( 0, k ) == j[1]; str = str.substr( k ) ) + retVal += j[ 0 ]; + } + return retVal; + } + + // Convert alphabet numbering back to decimal. + function fromAlphabet( str ) + { + str = str.toUpperCase(); + var l = alpahbets.length, retVal = 1; + for ( var x = 1; str.length > 0; x *= l ) + { + retVal += alpahbets.indexOf( str.charAt( str.length - 1 ) ) * x; + str = str.substr( 0, str.length - 1 ); + } + return retVal; + } + + var listBaseIndent = 0, + previousListItemMargin = null, + previousListId; + + var plugin = ( CKEDITOR.plugins.pastefromword = + { + utils : + { + // Create a <cke:listbullet> which indicate an list item type. + createListBulletMarker : function ( bullet, bulletText ) + { + var marker = new CKEDITOR.htmlParser.element( 'cke:listbullet' ); + marker.attributes = { 'cke:listsymbol' : bullet[ 0 ] }; + marker.add( new CKEDITOR.htmlParser.text( bulletText ) ); + return marker; + }, + + isListBulletIndicator : function( element ) + { + var styleText = element.attributes && element.attributes.style; + if ( /mso-list\s*:\s*Ignore/i.test( styleText ) ) + return true; + }, + + isContainingOnlySpaces : function( element ) + { + var text; + return ( ( text = element.onlyChild() ) + && ( /^(:?\s| )+$/ ).test( text.value ) ); + }, + + resolveList : function( element ) + { + // <cke:listbullet> indicate a list item. + var attrs = element.attributes, + listMarker; + + if ( ( listMarker = element.removeAnyChildWithName( 'cke:listbullet' ) ) + && listMarker.length + && ( listMarker = listMarker[ 0 ] ) ) + { + element.name = 'cke:li'; + + if ( attrs.style ) + { + attrs.style = plugin.filters.stylesFilter( + [ + // Text-indent is not representing list item level any more. + [ 'text-indent' ], + [ 'line-height' ], + // First attempt is to resolve indent level from on a constant margin increment. + [ ( /^margin(:?-left)?$/ ), null, function( margin ) + { + // Deal with component/short-hand form. + var values = margin.split( ' ' ); + margin = CKEDITOR.tools.convertToPx( values[ 3 ] || values[ 1 ] || values [ 0 ] ); + + // Figure out the indent unit by checking the first time of incrementation. + if ( !listBaseIndent && previousListItemMargin !== null && margin > previousListItemMargin ) + listBaseIndent = margin - previousListItemMargin; + + previousListItemMargin = margin; + + attrs[ 'cke:indent' ] = listBaseIndent && ( Math.ceil( margin / listBaseIndent ) + 1 ) || 1; + } ], + // The best situation: "mso-list:l0 level1 lfo2" tells the belonged list root, list item indentation, etc. + [ ( /^mso-list$/ ), null, function( val ) + { + val = val.split( ' ' ); + var listId = Number( val[ 0 ].match( /\d+/ ) ), + indent = Number( val[ 1 ].match( /\d+/ ) ); + + if ( indent == 1 ) + { + listId !== previousListId && ( attrs[ 'cke:reset' ] = 1 ); + previousListId = listId; + } + attrs[ 'cke:indent' ] = indent; + } ] + ] )( attrs.style, element ) || ''; + } + + // First level list item might be presented without a margin. + + + // In case all above doesn't apply. + if ( !attrs[ 'cke:indent' ] ) + { + previousListItemMargin = 0; + attrs[ 'cke:indent' ] = 1; + } + + // Inherit attributes from bullet. + CKEDITOR.tools.extend( attrs, listMarker.attributes ); + return true; + } + // Current list disconnected. + else + previousListId = previousListItemMargin = listBaseIndent = null; + + return false; + }, + + // Providing a shorthand style then retrieve one or more style component values. + getStyleComponents : ( function() + { + var calculator = CKEDITOR.dom.element.createFromHtml( + '<div style="position:absolute;left:-9999px;top:-9999px;"></div>', + CKEDITOR.document ); + CKEDITOR.document.getBody().append( calculator ); + + return function( name, styleValue, fetchList ) + { + calculator.setStyle( name, styleValue ); + var styles = {}, + count = fetchList.length; + for ( var i = 0; i < count; i++ ) + styles[ fetchList[ i ] ] = calculator.getStyle( fetchList[ i ] ); + + return styles; + }; + } )(), + + listDtdParents : CKEDITOR.dtd.parentOf( 'ol' ) + }, + + filters : + { + // Transform a normal list into flat list items only presentation. + // E.g. <ul><li>level1<ol><li>level2</li></ol></li> => + // <cke:li cke:listtype="ul" cke:indent="1">level1</cke:li> + // <cke:li cke:listtype="ol" cke:indent="2">level2</cke:li> + flattenList : function( element, level ) + { + level = typeof level == 'number' ? level : 1; + + var attrs = element.attributes, + listStyleType; + + // All list items are of the same type. + switch ( attrs.type ) + { + case 'a' : + listStyleType = 'lower-alpha'; + break; + case '1' : + listStyleType = 'decimal'; + break; + // TODO: Support more list style type from MS-Word. + } + + var children = element.children, + child; + + for ( var i = 0; i < children.length; i++ ) + { + child = children[ i ]; + + if ( child.name in CKEDITOR.dtd.$listItem ) + { + var attributes = child.attributes, + listItemChildren = child.children, + count = listItemChildren.length, + last = listItemChildren[ count - 1 ]; + + // Move out nested list. + if ( last.name in CKEDITOR.dtd.$list ) + { + element.add( last, i + 1 ); + + // Remove the parent list item if it's just a holder. + if ( !--listItemChildren.length ) + children.splice( i--, 1 ); + } + + child.name = 'cke:li'; + + // Inherit numbering from list root on the first list item. + attrs.start && !i && ( attributes.value = attrs.start ); + + plugin.filters.stylesFilter( + [ + [ 'tab-stops', null, function( val ) + { + var margin = val.split( ' ' )[ 1 ].match( cssLengthRelativeUnit ); + margin && ( previousListItemMargin = CKEDITOR.tools.convertToPx( margin[ 0 ] ) ); + } ], + ( level == 1 ? [ 'mso-list', null, function( val ) + { + val = val.split( ' ' ); + var listId = Number( val[ 0 ].match( /\d+/ ) ); + listId !== previousListId && ( attributes[ 'cke:reset' ] = 1 ); + previousListId = listId; + } ] : null ) + ] )( attributes.style ); + + attributes[ 'cke:indent' ] = level; + attributes[ 'cke:listtype' ] = element.name; + attributes[ 'cke:list-style-type' ] = listStyleType; + } + // Flatten sub list. + else if ( child.name in CKEDITOR.dtd.$list ) + { + // Absorb sub list children. + arguments.callee.apply( this, [ child, level + 1 ] ); + children = children.slice( 0, i ).concat( child.children ).concat( children.slice( i + 1 ) ); + element.children = []; + for ( var j = 0, num = children.length; j < num ; j++ ) + element.add( children[ j ] ); + } + } + + delete element.name; + + // We're loosing tag name here, signalize this element as a list. + attrs[ 'cke:list' ] = 1; + }, + + /** + * Try to collect all list items among the children and establish one + * or more HTML list structures for them. + * @param element + */ + assembleList : function( element ) + { + var children = element.children, child, + listItem, // The current processing cke:li element. + listItemAttrs, + listItemIndent, // Indent level of current list item. + lastIndent, + lastListItem, // The previous one just been added to the list. + list, // Current staging list and it's parent list if any. + openedLists = [], + previousListStyleType, + previousListType; + + // Properties of the list item are to be resolved from the list bullet. + var bullet, + listType, + listStyleType, + itemNumeric; + + for ( var i = 0; i < children.length; i++ ) + { + child = children[ i ]; + + if ( 'cke:li' == child.name ) + { + child.name = 'li'; + listItem = child; + listItemAttrs = listItem.attributes; + bullet = listItemAttrs[ 'cke:listsymbol' ]; + bullet = bullet && bullet.match( /^(?:[(]?)([^\s]+?)([.)]?)$/ ); + listType = listStyleType = itemNumeric = null; + + if ( listItemAttrs[ 'cke:ignored' ] ) + { + children.splice( i--, 1 ); + continue; + } + + + // This's from a new list root. + listItemAttrs[ 'cke:reset' ] && ( list = lastIndent = lastListItem = null ); + + // List item indent level might come from a real list indentation or + // been resolved from a pseudo list item's margin value, even get + // no indentation at all. + listItemIndent = Number( listItemAttrs[ 'cke:indent' ] ); + + // We're moving out of the current list, cleaning up. + if ( listItemIndent != lastIndent ) + previousListType = previousListStyleType = null; + + // List type and item style are already resolved. + if ( !bullet ) + { + listType = listItemAttrs[ 'cke:listtype' ] || 'ol'; + listStyleType = listItemAttrs[ 'cke:list-style-type' ]; + } + else + { + // Probably share the same list style type with previous list item, + // give it priority to avoid ambiguous between C(Alpha) and C.(Roman). + if ( previousListType && listMarkerPatterns[ previousListType ] [ previousListStyleType ].test( bullet[ 1 ] ) ) + { + listType = previousListType; + listStyleType = previousListStyleType; + } + else + { + for ( var type in listMarkerPatterns ) + { + for ( var style in listMarkerPatterns[ type ] ) + { + if ( listMarkerPatterns[ type ][ style ].test( bullet[ 1 ] ) ) + { + // Small numbering has higher priority, when dealing with ambiguous + // between C(Alpha) and C.(Roman). + if ( type == 'ol' && ( /alpha|roman/ ).test( style ) ) + { + var num = /roman/.test( style ) ? fromRoman( bullet[ 1 ] ) : fromAlphabet( bullet[ 1 ] ); + if ( !itemNumeric || num < itemNumeric ) + { + itemNumeric = num; + listType = type; + listStyleType = style; + } + } + else + { + listType = type; + listStyleType = style; + break; + } + } + } + } + } + + // Simply use decimal/disc for the rest forms of unrepresentable + // numerals, e.g. Chinese..., but as long as there a second part + // included, it has a bigger chance of being a order list ;) + !listType && ( listType = bullet[ 2 ] ? 'ol' : 'ul' ); + } + + previousListType = listType; + previousListStyleType = listStyleType || ( listType == 'ol' ? 'decimal' : 'disc' ); + if ( listStyleType && listStyleType != ( listType == 'ol' ? 'decimal' : 'disc' ) ) + listItem.addStyle( 'list-style-type', listStyleType ); + + // Figure out start numbering. + if ( listType == 'ol' && bullet ) + { + switch ( listStyleType ) + { + case 'decimal' : + itemNumeric = Number( bullet[ 1 ] ); + break; + case 'lower-roman': + case 'upper-roman': + itemNumeric = fromRoman( bullet[ 1 ] ); + break; + case 'lower-alpha': + case 'upper-alpha': + itemNumeric = fromAlphabet( bullet[ 1 ] ); + break; + } + + // Always create the numbering, swipe out unnecessary ones later. + listItem.attributes.value = itemNumeric; + } + + // Start the list construction. + if ( !list ) + { + openedLists.push( list = new CKEDITOR.htmlParser.element( listType ) ); + list.add( listItem ); + children[ i ] = list; + } + else + { + if ( listItemIndent > lastIndent ) + { + openedLists.push( list = new CKEDITOR.htmlParser.element( listType ) ); + list.add( listItem ); + lastListItem.add( list ); + } + else if ( listItemIndent < lastIndent ) + { + // There might be a negative gap between two list levels. (#4944) + var diff = lastIndent - listItemIndent, + parent; + while ( diff-- && ( parent = list.parent ) ) + list = parent.parent; + + list.add( listItem ); + } + else + list.add( listItem ); + + children.splice( i--, 1 ); + } + + lastListItem = listItem; + lastIndent = listItemIndent; + } + else if ( list ) + list = lastIndent = lastListItem = null; + } + + for ( i = 0; i < openedLists.length; i++ ) + postProcessList( openedLists[ i ] ); + + list = lastIndent = lastListItem = previousListId = previousListItemMargin = listBaseIndent = null; + }, + + /** + * A simple filter which always rejecting. + */ + falsyFilter : function( value ) + { + return false; + }, + + /** + * A filter dedicated on the 'style' attribute filtering, e.g. dropping/replacing style properties. + * @param styles {Array} in form of [ styleNameRegexp, styleValueRegexp, + * newStyleValue/newStyleGenerator, newStyleName ] where only the first + * parameter is mandatory. + * @param whitelist {Boolean} Whether the {@param styles} will be considered as a white-list. + */ + stylesFilter : function( styles, whitelist ) + { + return function( styleText, element ) + { + var rules = []; + // html-encoded quote might be introduced by 'font-family' + // from MS-Word which confused the following regexp. e.g. + //'font-family: "Lucida, Console"' + ( styleText || '' ) + .replace( /"/g, '"' ) + .replace( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, + function( match, name, value ) + { + name = name.toLowerCase(); + name == 'font-family' && ( value = value.replace( /["']/g, '' ) ); + + var namePattern, + valuePattern, + newValue, + newName; + for ( var i = 0 ; i < styles.length; i++ ) + { + if ( styles[ i ] ) + { + namePattern = styles[ i ][ 0 ]; + valuePattern = styles[ i ][ 1 ]; + newValue = styles[ i ][ 2 ]; + newName = styles[ i ][ 3 ]; + + if ( name.match( namePattern ) + && ( !valuePattern || value.match( valuePattern ) ) ) + { + name = newName || name; + whitelist && ( newValue = newValue || value ); + + if ( typeof newValue == 'function' ) + newValue = newValue( value, element, name ); + + // Return an couple indicate both name and value + // changed. + if ( newValue && newValue.push ) + name = newValue[ 0 ], newValue = newValue[ 1 ]; + + if ( typeof newValue == 'string' ) + rules.push( [ name, newValue ] ); + return; + } + } + } + + !whitelist && rules.push( [ name, value ] ); + + }); + + for ( var i = 0 ; i < rules.length ; i++ ) + rules[ i ] = rules[ i ].join( ':' ); + return rules.length ? + ( rules.join( ';' ) + ';' ) : false; + }; + }, + + /** + * Migrate the element by decorate styles on it. + * @param styleDefiniton + * @param variables + */ + elementMigrateFilter : function ( styleDefiniton, variables ) + { + return function( element ) + { + var styleDef = + variables ? + new CKEDITOR.style( styleDefiniton, variables )._.definition + : styleDefiniton; + element.name = styleDef.element; + CKEDITOR.tools.extend( element.attributes, CKEDITOR.tools.clone( styleDef.attributes ) ); + element.addStyle( CKEDITOR.style.getStyleText( styleDef ) ); + }; + }, + + /** + * Migrate styles by creating a new nested stylish element. + * @param styleDefinition + */ + styleMigrateFilter : function( styleDefinition, variableName ) + { + + var elementMigrateFilter = this.elementMigrateFilter; + return function( value, element ) + { + // Build an stylish element first. + var styleElement = new CKEDITOR.htmlParser.element( null ), + variables = {}; + + variables[ variableName ] = value; + elementMigrateFilter( styleDefinition, variables )( styleElement ); + // Place the new element inside the existing span. + styleElement.children = element.children; + element.children = [ styleElement ]; + }; + }, + + /** + * A filter which remove cke-namespaced-attribute on + * all none-cke-namespaced elements. + * @param value + * @param element + */ + bogusAttrFilter : function( value, element ) + { + if ( element.name.indexOf( 'cke:' ) == -1 ) + return false; + }, + + /** + * A filter which will be used to apply inline css style according the stylesheet + * definition rules, is generated lazily when filtering. + */ + applyStyleFilter : null + + }, + + getRules : function( editor ) + { + var dtd = CKEDITOR.dtd, + blockLike = CKEDITOR.tools.extend( {}, dtd.$block, dtd.$listItem, dtd.$tableContent ), + config = editor.config, + filters = this.filters, + falsyFilter = filters.falsyFilter, + stylesFilter = filters.stylesFilter, + elementMigrateFilter = filters.elementMigrateFilter, + styleMigrateFilter = CKEDITOR.tools.bind( this.filters.styleMigrateFilter, this.filters ), + createListBulletMarker = this.utils.createListBulletMarker, + flattenList = filters.flattenList, + assembleList = filters.assembleList, + isListBulletIndicator = this.utils.isListBulletIndicator, + containsNothingButSpaces = this.utils.isContainingOnlySpaces, + resolveListItem = this.utils.resolveList, + convertToPx = function( value ) + { + value = CKEDITOR.tools.convertToPx( value ); + return isNaN( value ) ? value : value + 'px'; + }, + getStyleComponents = this.utils.getStyleComponents, + listDtdParents = this.utils.listDtdParents, + removeFontStyles = config.pasteFromWordRemoveFontStyles !== false, + removeStyles = config.pasteFromWordRemoveStyles !== false; + + return { + + elementNames : + [ + // Remove script, meta and link elements. + [ ( /meta|link|script/ ), '' ] + ], + + root : function( element ) + { + element.filterChildren(); + assembleList( element ); + }, + + elements : + { + '^' : function( element ) + { + // Transform CSS style declaration to inline style. + var applyStyleFilter; + if ( CKEDITOR.env.gecko && ( applyStyleFilter = filters.applyStyleFilter ) ) + applyStyleFilter( element ); + }, + + $ : function( element ) + { + var tagName = element.name || '', + attrs = element.attributes; + + // Convert length unit of width/height on blocks to + // a more editor-friendly way (px). + if ( tagName in blockLike + && attrs.style ) + { + attrs.style = stylesFilter( + [ [ ( /^(:?width|height)$/ ), null, convertToPx ] ] )( attrs.style ) || ''; + } + + // Processing headings. + if ( tagName.match( /h\d/ ) ) + { + element.filterChildren(); + // Is the heading actually a list item? + if ( resolveListItem( element ) ) + return; + + // Adapt heading styles to editor's convention. + elementMigrateFilter( config[ 'format_' + tagName ] )( element ); + } + // Remove inline elements which contain only empty spaces. + else if ( tagName in dtd.$inline ) + { + element.filterChildren(); + if ( containsNothingButSpaces( element ) ) + delete element.name; + } + // Remove element with ms-office namespace, + // with it's content preserved, e.g. 'o:p'. + else if ( tagName.indexOf( ':' ) != -1 + && tagName.indexOf( 'cke' ) == -1 ) + { + element.filterChildren(); + + // Restore image real link from vml. + if ( tagName == 'v:imagedata' ) + { + var href = element.attributes[ 'o:href' ]; + if ( href ) + element.attributes.src = href; + element.name = 'img'; + return; + } + delete element.name; + } + + // Assembling list items into a whole list. + if ( tagName in listDtdParents ) + { + element.filterChildren(); + assembleList( element ); + } + }, + + // We'll drop any style sheet, but Firefox conclude + // certain styles in a single style element, which are + // required to be changed into inline ones. + 'style' : function( element ) + { + if ( CKEDITOR.env.gecko ) + { + // Grab only the style definition section. + var styleDefSection = element.onlyChild().value.match( /\/\* Style Definitions \*\/([\s\S]*?)\/\*/ ), + styleDefText = styleDefSection && styleDefSection[ 1 ], + rules = {}; // Storing the parsed result. + + if ( styleDefText ) + { + styleDefText + // Remove line-breaks. + .replace(/[\n\r]/g,'') + // Extract selectors and style properties. + .replace( /(.+?)\{(.+?)\}/g, + function( rule, selectors, styleBlock ) + { + selectors = selectors.split( ',' ); + var length = selectors.length, selector; + for ( var i = 0; i < length; i++ ) + { + // Assume MS-Word mostly generate only simple + // selector( [Type selector][Class selector]). + CKEDITOR.tools.trim( selectors[ i ] ) + .replace( /^(\w+)(\.[\w-]+)?$/g, + function( match, tagName, className ) + { + tagName = tagName || '*'; + className = className.substring( 1, className.length ); + + // Reject MS-Word Normal styles. + if ( className.match( /MsoNormal/ ) ) + return; + + if ( !rules[ tagName ] ) + rules[ tagName ] = {}; + if ( className ) + rules[ tagName ][ className ] = styleBlock; + else + rules[ tagName ] = styleBlock; + } ); + } + }); + + filters.applyStyleFilter = function( element ) + { + var name = rules[ '*' ] ? '*' : element.name, + className = element.attributes && element.attributes[ 'class' ], + style; + if ( name in rules ) + { + style = rules[ name ]; + if ( typeof style == 'object' ) + style = style[ className ]; + // Maintain style rules priorities. + style && element.addStyle( style, true ); + } + }; + } + } + return false; + }, + + 'p' : function( element ) + { + // This's a fall-back approach to recognize list item in FF3.6, + // as it's not perfect as not all list style (e.g. "heading list") is shipped + // with this pattern. (#6662) + if ( /MsoListParagraph/.exec( element.attributes[ 'class' ] ) ) + { + var bulletText = element.firstChild( function( node ) + { + return node.type == CKEDITOR.NODE_TEXT && !containsNothingButSpaces( node.parent ); + }); + var bullet = bulletText && bulletText.parent, + bulletAttrs = bullet && bullet.attributes; + bulletAttrs && !bulletAttrs.style && ( bulletAttrs.style = 'mso-list: Ignore;' ); + } + + element.filterChildren(); + + // Is the paragraph actually a list item? + if ( resolveListItem( element ) ) + return; + + // Adapt paragraph formatting to editor's convention + // according to enter-mode. + if ( config.enterMode == CKEDITOR.ENTER_BR ) + { + // We suffer from attribute/style lost in this situation. + delete element.name; + element.add( new CKEDITOR.htmlParser.element( 'br' ) ); + } + else + elementMigrateFilter( config[ 'format_' + ( config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ] )( element ); + }, + + 'div' : function( element ) + { + // Aligned table with no text surrounded is represented by a wrapper div, from which + // table cells inherit as text-align styles, which is wrong. + // Instead we use a clear-float div after the table to properly achieve the same layout. + var singleChild = element.onlyChild(); + if ( singleChild && singleChild.name == 'table' ) + { + var attrs = element.attributes; + singleChild.attributes = CKEDITOR.tools.extend( singleChild.attributes, attrs ); + attrs.style && singleChild.addStyle( attrs.style ); + + var clearFloatDiv = new CKEDITOR.htmlParser.element( 'div' ); + clearFloatDiv.addStyle( 'clear' ,'both' ); + element.add( clearFloatDiv ); + delete element.name; + } + }, + + 'td' : function ( element ) + { + // 'td' in 'thead' is actually <th>. + if ( element.getAncestor( 'thead') ) + element.name = 'th'; + }, + + // MS-Word sometimes present list as a mixing of normal list + // and pseudo-list, normalize the previous ones into pseudo form. + 'ol' : flattenList, + 'ul' : flattenList, + 'dl' : flattenList, + + 'font' : function( element ) + { + // Drop the font tag if it comes from list bullet text. + if ( isListBulletIndicator( element.parent ) ) + { + delete element.name; + return; + } + + element.filterChildren(); + + var attrs = element.attributes, + styleText = attrs.style, + parent = element.parent; + + if ( 'font' == parent.name ) // Merge nested <font> tags. + { + CKEDITOR.tools.extend( parent.attributes, + element.attributes ); + styleText && parent.addStyle( styleText ); + delete element.name; + } + // Convert the merged into a span with all attributes preserved. + else + { + styleText = styleText || ''; + // IE's having those deprecated attributes, normalize them. + if ( attrs.color ) + { + attrs.color != '#000000' && ( styleText += 'color:' + attrs.color + ';' ); + delete attrs.color; + } + if ( attrs.face ) + { + styleText += 'font-family:' + attrs.face + ';'; + delete attrs.face; + } + // TODO: Mapping size in ranges of xx-small, + // x-small, small, medium, large, x-large, xx-large. + if ( attrs.size ) + { + styleText += 'font-size:' + + ( attrs.size > 3 ? 'large' + : ( attrs.size < 3 ? 'small' : 'medium' ) ) + ';'; + delete attrs.size; + } + + element.name = 'span'; + element.addStyle( styleText ); + } + }, + + 'span' : function( element ) + { + // Remove the span if it comes from list bullet text. + if ( isListBulletIndicator( element.parent ) ) + return false; + + element.filterChildren(); + if ( containsNothingButSpaces( element ) ) + { + delete element.name; + return null; + } + + // List item bullet type is supposed to be indicated by + // the text of a span with style 'mso-list : Ignore' or an image. + if ( isListBulletIndicator( element ) ) + { + var listSymbolNode = element.firstChild( function( node ) + { + return node.value || node.name == 'img'; + }); + + var listSymbol = listSymbolNode && ( listSymbolNode.value || 'l.' ), + listType = listSymbol && listSymbol.match( /^(?:[(]?)([^\s]+?)([.)]?)$/ ); + + if ( listType ) + { + var marker = createListBulletMarker( listType, listSymbol ); + // Some non-existed list items might be carried by an inconsequential list, indicate by "mso-hide:all/display:none", + // those are to be removed later, now mark it with "cke:ignored". + var ancestor = element.getAncestor( 'span' ); + if ( ancestor && (/ mso-hide:\s*all|display:\s*none /).test( ancestor.attributes.style ) ) + marker.attributes[ 'cke:ignored' ] = 1; + return marker; + } + } + + // Update the src attribute of image element with href. + var children = element.children, + attrs = element.attributes, + styleText = attrs && attrs.style, + firstChild = children && children[ 0 ]; + + // Assume MS-Word mostly carry font related styles on <span>, + // adapting them to editor's convention. + if ( styleText ) + { + attrs.style = stylesFilter( + [ + // Drop 'inline-height' style which make lines overlapping. + [ 'line-height' ], + [ ( /^font-family$/ ), null, !removeFontStyles ? styleMigrateFilter( config[ 'font_style' ], 'family' ) : null ] , + [ ( /^font-size$/ ), null, !removeFontStyles ? styleMigrateFilter( config[ 'fontSize_style' ], 'size' ) : null ] , + [ ( /^color$/ ), null, !removeFontStyles ? styleMigrateFilter( config[ 'colorButton_foreStyle' ], 'color' ) : null ] , + [ ( /^background-color$/ ), null, !removeFontStyles ? styleMigrateFilter( config[ 'colorButton_backStyle' ], 'color' ) : null ] + ] )( styleText, element ) || ''; + } + + return null; + }, + + // Migrate basic style formats to editor configured ones. + 'b' : elementMigrateFilter( config[ 'coreStyles_bold' ] ), + 'i' : elementMigrateFilter( config[ 'coreStyles_italic' ] ), + 'u' : elementMigrateFilter( config[ 'coreStyles_underline' ] ), + 's' : elementMigrateFilter( config[ 'coreStyles_strike' ] ), + 'sup' : elementMigrateFilter( config[ 'coreStyles_superscript' ] ), + 'sub' : elementMigrateFilter( config[ 'coreStyles_subscript' ] ), + // Editor doesn't support anchor with content currently (#3582), + // drop such anchors with content preserved. + 'a' : function( element ) + { + var attrs = element.attributes; + if ( attrs && !attrs.href && attrs.name ) + delete element.name; + else if ( CKEDITOR.env.webkit && attrs.href && attrs.href.match( /file:\/\/\/[\S]+#/i ) ) + attrs.href = attrs.href.replace( /file:\/\/\/[^#]+/i,'' ); + }, + 'cke:listbullet' : function( element ) + { + if ( element.getAncestor( /h\d/ ) && !config.pasteFromWordNumberedHeadingToList ) + delete element.name; + } + }, + + attributeNames : + [ + // Remove onmouseover and onmouseout events (from MS Word comments effect) + [ ( /^onmouse(:?out|over)/ ), '' ], + // Onload on image element. + [ ( /^onload$/ ), '' ], + // Remove office and vml attribute from elements. + [ ( /(?:v|o):\w+/ ), '' ], + // Remove lang/language attributes. + [ ( /^lang/ ), '' ] + ], + + attributes : + { + 'style' : stylesFilter( + removeStyles ? + // Provide a white-list of styles that we preserve, those should + // be the ones that could later be altered with editor tools. + [ + // Leave list-style-type + [ ( /^list-style-type$/ ), null ], + + // Preserve margin-left/right which used as default indent style in the editor. + [ ( /^margin$|^margin-(?!bottom|top)/ ), null, function( value, element, name ) + { + if ( element.name in { p : 1, div : 1 } ) + { + var indentStyleName = config.contentsLangDirection == 'ltr' ? + 'margin-left' : 'margin-right'; + + // Extract component value from 'margin' shorthand. + if ( name == 'margin' ) + { + value = getStyleComponents( name, value, + [ indentStyleName ] )[ indentStyleName ]; + } + else if ( name != indentStyleName ) + return null; + + if ( value && !emptyMarginRegex.test( value ) ) + return [ indentStyleName, value ]; + } + + return null; + } ], + + // Preserve clear float style. + [ ( /^clear$/ ) ], + + [ ( /^border.*|margin.*|vertical-align|float$/ ), null, + function( value, element ) + { + if ( element.name == 'img' ) + return value; + } ], + + [ (/^width|height$/ ), null, + function( value, element ) + { + if ( element.name in { table : 1, td : 1, th : 1, img : 1 } ) + return value; + } ] + ] : + // Otherwise provide a black-list of styles that we remove. + [ + [ ( /^mso-/ ) ], + // Fixing color values. + [ ( /-color$/ ), null, function( value ) + { + if ( value == 'transparent' ) + return false; + if ( CKEDITOR.env.gecko ) + return value.replace( /-moz-use-text-color/g, 'transparent' ); + } ], + // Remove empty margin values, e.g. 0.00001pt 0em 0pt + [ ( /^margin$/ ), emptyMarginRegex ], + [ 'text-indent', '0cm' ], + [ 'page-break-before' ], + [ 'tab-stops' ], + [ 'display', 'none' ], + removeFontStyles ? [ ( /font-?/ ) ] : null + ], removeStyles ), + + // Prefer width styles over 'width' attributes. + 'width' : function( value, element ) + { + if ( element.name in dtd.$tableContent ) + return false; + }, + // Prefer border styles over table 'border' attributes. + 'border' : function( value, element ) + { + if ( element.name in dtd.$tableContent ) + return false; + }, + + // Only Firefox carry style sheet from MS-Word, which + // will be applied by us manually. For other browsers + // the css className is useless. + 'class' : falsyFilter, + + // MS-Word always generate 'background-color' along with 'bgcolor', + // simply drop the deprecated attributes. + 'bgcolor' : falsyFilter, + + // Deprecate 'valign' attribute in favor of 'vertical-align'. + 'valign' : removeStyles ? falsyFilter : function( value, element ) + { + element.addStyle( 'vertical-align', value ); + return false; + } + }, + + // Fore none-IE, some useful data might be buried under these IE-conditional + // comments where RegExp were the right approach to dig them out where usual approach + // is transform it into a fake element node which hold the desired data. + comment : + !CKEDITOR.env.ie ? + function( value, node ) + { + var imageInfo = value.match( /<img.*?>/ ), + listInfo = value.match( /^\[if !supportLists\]([\s\S]*?)\[endif\]$/ ); + + // Seek for list bullet indicator. + if ( listInfo ) + { + // Bullet symbol could be either text or an image. + var listSymbol = listInfo[ 1 ] || ( imageInfo && 'l.' ), + listType = listSymbol && listSymbol.match( />(?:[(]?)([^\s]+?)([.)]?)</ ); + return createListBulletMarker( listType, listSymbol ); + } + + // Reveal the <img> element in conditional comments for Firefox. + if ( CKEDITOR.env.gecko && imageInfo ) + { + var img = CKEDITOR.htmlParser.fragment.fromHtml( imageInfo[ 0 ] ).children[ 0 ], + previousComment = node.previous, + // Try to dig the real image link from vml markup from previous comment text. + imgSrcInfo = previousComment && previousComment.value.match( /<v:imagedata[^>]*o:href=['"](.*?)['"]/ ), + imgSrc = imgSrcInfo && imgSrcInfo[ 1 ]; + + // Is there a real 'src' url to be used? + imgSrc && ( img.attributes.src = imgSrc ); + return img; + } + + return false; + } + : falsyFilter + }; + } + }); + + // The paste processor here is just a reduced copy of html data processor. + var pasteProcessor = function() + { + this.dataFilter = new CKEDITOR.htmlParser.filter(); + }; + + pasteProcessor.prototype = + { + toHtml : function( data ) + { + var fragment = CKEDITOR.htmlParser.fragment.fromHtml( data, false ), + writer = new CKEDITOR.htmlParser.basicWriter(); + + fragment.writeHtml( writer, this.dataFilter ); + return writer.getHtml( true ); + } + }; + + CKEDITOR.cleanWord = function( data, editor ) + { + // Firefox will be confused by those downlevel-revealed IE conditional + // comments, fixing them first( convert it to upperlevel-revealed one ). + // e.g. <![if !vml]>...<![endif]> + if ( CKEDITOR.env.gecko ) + data = data.replace( /(<!--\[if[^<]*?\])-->([\S\s]*?)<!--(\[endif\]-->)/gi, '$1$2$3' ); + + var dataProcessor = new pasteProcessor(), + dataFilter = dataProcessor.dataFilter; + + // These rules will have higher priorities than default ones. + dataFilter.addRules( CKEDITOR.plugins.pastefromword.getRules( editor ) ); + + // Allow extending data filter rules. + editor.fire( 'beforeCleanWord', { filter : dataFilter } ); + + try + { + data = dataProcessor.toHtml( data, false ); + } + catch ( e ) + { + alert( editor.lang.pastefromword.error ); + } + + /* Below post processing those things that are unable to delivered by filter rules. */ + + // Remove 'cke' namespaced attribute used in filter rules as marker. + data = data.replace( /cke:.*?".*?"/g, '' ); + + // Remove empty style attribute. + data = data.replace( /style=""/g, '' ); + + // Remove the dummy spans ( having no inline style ). + data = data.replace( /<span>/g, '' ); + + return data; + }; +})(); + +/** + * Whether to ignore all font related formatting styles, including: + * <ul> <li>font size;</li> + * <li>font family;</li> + * <li>font foreground/background color.</li></ul> + * @name CKEDITOR.config.pasteFromWordRemoveFontStyles + * @since 3.1 + * @type Boolean + * @default true + * @example + * config.pasteFromWordRemoveFontStyles = false; + */ + +/** + * Whether to transform MS Word outline numbered headings into lists. + * @name CKEDITOR.config.pasteFromWordNumberedHeadingToList + * @since 3.1 + * @type Boolean + * @default false + * @example + * config.pasteFromWordNumberedHeadingToList = true; + */ + +/** + * Whether to remove element styles that can't be managed with the editor. Note + * that this doesn't handle the font specific styles, which depends on the + * {@link CKEDITOR.config.pasteFromWordRemoveFontStyles} setting instead. + * @name CKEDITOR.config.pasteFromWordRemoveStyles + * @since 3.1 + * @type Boolean + * @default true + * @example + * config.pasteFromWordRemoveStyles = false; + */ diff --git a/_source/plugins/pastefromword/plugin.js b/_source/plugins/pastefromword/plugin.js new file mode 100644 index 0000000..c9bd2ec --- /dev/null +++ b/_source/plugins/pastefromword/plugin.js @@ -0,0 +1,141 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function() +{ + function forceHtmlMode( evt ) { evt.data.mode = 'html'; } + + CKEDITOR.plugins.add( 'pastefromword', + { + init : function( editor ) + { + + // Flag indicate this command is actually been asked instead of a generic + // pasting. + var forceFromWord = 0; + var resetFromWord = function( evt ) + { + evt && evt.removeListener(); + editor.removeListener( 'beforePaste', forceHtmlMode ); + forceFromWord && setTimeout( function() { forceFromWord = 0; }, 0 ); + }; + + // Features bring by this command beside the normal process: + // 1. No more bothering of user about the clean-up. + // 2. Perform the clean-up even if content is not from MS-Word. + // (e.g. from a MS-Word similar application.) + editor.addCommand( 'pastefromword', + { + canUndo : false, + exec : function() + { + // Ensure the received data format is HTML and apply content filtering. (#6718) + forceFromWord = 1; + editor.on( 'beforePaste', forceHtmlMode ); + + if ( editor.execCommand( 'paste', 'html' ) === false ) + { + editor.on( 'dialogShow', function ( evt ) + { + evt.removeListener(); + evt.data.on( 'cancel', resetFromWord ); + }); + + editor.on( 'dialogHide', function( evt ) + { + evt.data.removeListener( 'cancel', resetFromWord ); + } ); + } + + editor.on( 'afterPaste', resetFromWord ); + } + }); + + // Register the toolbar button. + editor.ui.addButton( 'PasteFromWord', + { + label : editor.lang.pastefromword.toolbar, + command : 'pastefromword' + }); + + editor.on( 'pasteState', function( evt ) + { + editor.getCommand( 'pastefromword' ).setState( evt.data ); + }); + + editor.on( 'paste', function( evt ) + { + var data = evt.data, + mswordHtml; + + // MS-WORD format sniffing. + if ( ( mswordHtml = data[ 'html' ] ) + && ( forceFromWord || ( /(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/ ).test( mswordHtml ) ) ) + { + var isLazyLoad = this.loadFilterRules( function() + { + // Event continuation with the original data. + if ( isLazyLoad ) + editor.fire( 'paste', data ); + else if ( !editor.config.pasteFromWordPromptCleanup + || ( forceFromWord || confirm( editor.lang.pastefromword.confirmCleanup ) ) ) + { + data[ 'html' ] = CKEDITOR.cleanWord( mswordHtml, editor ); + } + }); + + // The cleanup rules are to be loaded, we should just cancel + // this event. + isLazyLoad && evt.cancel(); + } + }, this ); + }, + + loadFilterRules : function( callback ) + { + + var isLoaded = CKEDITOR.cleanWord; + + if ( isLoaded ) + callback(); + else + { + var filterFilePath = CKEDITOR.getUrl( + CKEDITOR.config.pasteFromWordCleanupFile + || ( this.path + 'filter/default.js' ) ); + + // Load with busy indicator. + CKEDITOR.scriptLoader.load( filterFilePath, callback, null, true ); + } + + return !isLoaded; + }, + + requires : [ 'clipboard' ] + }); +})(); + +/** + * Whether to prompt the user about the clean up of content being pasted from + * MS Word. + * @name CKEDITOR.config.pasteFromWordPromptCleanup + * @since 3.1 + * @type Boolean + * @default undefined + * @example + * config.pasteFromWordPromptCleanup = true; + */ + +/** + * The file that provides the MS Word cleanup function for pasting operations. + * Note: This is a global configuration shared by all editor instances present + * in the page. + * @name CKEDITOR.config.pasteFromWordCleanupFile + * @since 3.1 + * @type String + * @default 'default' + * @example + * // Load from 'pastefromword' plugin 'filter' sub folder (custom.js file). + * CKEDITOR.config.pasteFromWordCleanupFile = 'custom'; + */ diff --git a/_source/plugins/pastetext/dialogs/pastetext.js b/_source/plugins/pastetext/dialogs/pastetext.js new file mode 100644 index 0000000..56143df --- /dev/null +++ b/_source/plugins/pastetext/dialogs/pastetext.js @@ -0,0 +1,67 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + CKEDITOR.dialog.add( 'pastetext', function( editor ) + { + return { + title : editor.lang.pasteText.title, + + minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 368 : 350, + minHeight : 240, + + onShow : function(){ this.setupContent(); }, + onOk : function(){ this.commitContent(); }, + + contents : + [ + { + label : editor.lang.common.generalTab, + id : 'general', + elements : + [ + { + type : 'html', + id : 'pasteMsg', + html : '<div style="white-space:normal;width:340px;">' + editor.lang.clipboard.pasteMsg + '</div>' + }, + { + type : 'textarea', + id : 'content', + className : 'cke_pastetext', + + onLoad : function() + { + var label = this.getDialog().getContentElement( 'general', 'pasteMsg' ).getElement(), + input = this.getElement().getElementsByTag( 'textarea' ).getItem( 0 ); + + input.setAttribute( 'aria-labelledby', label.$.id ); + input.setStyle( 'direction', editor.config.contentsLangDirection ); + }, + + focus : function() + { + this.getElement().focus(); + }, + setup : function() + { + this.setValue( '' ); + }, + commit : function() + { + var value = this.getValue(); + setTimeout( function() + { + editor.fire( 'paste', { 'text' : value } ); + }, 0 ); + } + } + ] + } + ] + }; + }); +})(); diff --git a/_source/plugins/pastetext/plugin.js b/_source/plugins/pastetext/plugin.js new file mode 100644 index 0000000..42dbf5d --- /dev/null +++ b/_source/plugins/pastetext/plugin.js @@ -0,0 +1,98 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Paste as plain text plugin + */ + +(function() +{ + // The pastetext command definition. + var pasteTextCmd = + { + exec : function( editor ) + { + var clipboardText = CKEDITOR.tools.tryThese( + function() + { + var clipboardText = window.clipboardData.getData( 'Text' ); + if ( !clipboardText ) + throw 0; + return clipboardText; + } + // Any other approach that's working... + ); + + if ( !clipboardText ) // Clipboard access privilege is not granted. + { + editor.openDialog( 'pastetext' ); + return false; + } + else + editor.fire( 'paste', { 'text' : clipboardText } ); + + return true; + } + }; + + // Register the plugin. + CKEDITOR.plugins.add( 'pastetext', + { + init : function( editor ) + { + var commandName = 'pastetext', + command = editor.addCommand( commandName, pasteTextCmd ); + + editor.ui.addButton( 'PasteText', + { + label : editor.lang.pasteText.button, + command : commandName + }); + + CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/pastetext.js' ) ); + + if ( editor.config.forcePasteAsPlainText ) + { + // Intercept the default pasting process. + editor.on( 'beforeCommandExec', function ( evt ) + { + var mode = evt.data.commandData; + // Do NOT overwrite if HTML format is explicitly requested. + if ( evt.data.name == 'paste' && mode != 'html' ) + { + editor.execCommand( 'pastetext' ); + evt.cancel(); + } + }, null, null, 0 ); + + editor.on( 'beforePaste', function( evt ) + { + evt.data.mode = 'text'; + }); + } + + editor.on( 'pasteState', function( evt ) + { + editor.getCommand( 'pastetext' ).setState( evt.data ); + }); + }, + + requires : [ 'clipboard' ] + }); + +})(); + + +/** + * Whether to force all pasting operations to insert on plain text into the + * editor, loosing any formatting information possibly available in the source + * text. + * <strong>Note:</strong> paste from word is not affected by this configuration. + * @name CKEDITOR.config.forcePasteAsPlainText + * @type Boolean + * @default false + * @example + * config.forcePasteAsPlainText = true; + */ diff --git a/_source/plugins/placeholder/dialogs/placeholder.js b/_source/plugins/placeholder/dialogs/placeholder.js new file mode 100644 index 0000000..d709b38 --- /dev/null +++ b/_source/plugins/placeholder/dialogs/placeholder.js @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +(function() +{ + function placeholderDialog( editor, isEdit ) + { + + var lang = editor.lang.placeholder, + generalLabel = editor.lang.common.generalTab; + return { + title : lang.title, + minWidth : 300, + minHeight : 80, + contents : + [ + { + id : 'info', + label : generalLabel, + title : generalLabel, + elements : + [ + { + id : 'text', + type : 'text', + style : 'width: 100%;', + label : lang.text, + 'default' : '', + required : true, + validate : CKEDITOR.dialog.validate.notEmpty( lang.textMissing ), + setup : function( element ) + { + if ( isEdit ) + this.setValue( element.getText().slice( 2, -2 ) ); + }, + commit : function( element ) + { + var text = '[[' + this.getValue() + ']]'; + // The placeholder must be recreated. + CKEDITOR.plugins.placeholder.createPlaceholder( editor, element, text ); + } + } + ] + } + ], + onShow : function() + { + if ( isEdit ) + this._element = CKEDITOR.plugins.placeholder.getSelectedPlaceHoder( editor ); + + this.setupContent( this._element ); + }, + onOk : function() + { + this.commitContent( this._element ); + delete this._element; + } + }; + } + + CKEDITOR.dialog.add( 'createplaceholder', function( editor ) + { + return placeholderDialog( editor ); + }); + CKEDITOR.dialog.add( 'editplaceholder', function( editor ) + { + return placeholderDialog( editor, 1 ); + }); +} )(); diff --git a/_source/plugins/placeholder/lang/en.js b/_source/plugins/placeholder/lang/en.js new file mode 100644 index 0000000..3cff992 --- /dev/null +++ b/_source/plugins/placeholder/lang/en.js @@ -0,0 +1,16 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang( 'placeholder', 'en', +{ + placeholder : + { + title : 'Placeholder Properties', + toolbar : 'Create Placeholder', + text : 'Placeholder Text', + edit : 'Edit Placeholder', + textMissing : 'The placeholder must contain text.' + } +}); diff --git a/_source/plugins/placeholder/lang/he.js b/_source/plugins/placeholder/lang/he.js new file mode 100644 index 0000000..14814e8 --- /dev/null +++ b/_source/plugins/placeholder/lang/he.js @@ -0,0 +1,16 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang( 'placeholder', 'he', +{ + placeholder : + { + title : '××פ××× × ×©××ר ×ק××', + toolbar : 'צ×ר ש××ר ×ק××', + text : 'ת××× ×©××ר ××ק××', + edit : 'ער×× ×©××ר ×ק××', + textMissing : 'ש××ר ××ק×× ×××× ××××× ×קס×.' + } +}); diff --git a/_source/plugins/placeholder/placeholder.gif b/_source/plugins/placeholder/placeholder.gif new file mode 100644 index 0000000000000000000000000000000000000000..c07078c176ea25623746d36bf111fab9b9765195 GIT binary patch literal 96 zcmZ?wbhEHb6krfwn8*ME|NjHge;`BgCkrD30~3P|NE9T`z+^b3f933l{0li5j)WiH tvL!7&SK)grlj*V*H&&|Ms+>_aN#@I~@O6($sxy6?#M?fu&|qM&1^{HXA;JIv literal 0 HcmV?d00001 diff --git a/_source/plugins/placeholder/plugin.js b/_source/plugins/placeholder/plugin.js new file mode 100644 index 0000000..503f08a --- /dev/null +++ b/_source/plugins/placeholder/plugin.js @@ -0,0 +1,171 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "placeholder" plugin. + * + */ + +(function() +{ + var placeholderReplaceRegex = /\[\[[^\]]+\]\]/g; + CKEDITOR.plugins.add( 'placeholder', + { + requires : [ 'dialog' ], + lang : [ 'en', 'he' ], + init : function( editor ) + { + var lang = editor.lang.placeholder; + + editor.addCommand( 'createplaceholder', new CKEDITOR.dialogCommand( 'createplaceholder' ) ); + editor.addCommand( 'editplaceholder', new CKEDITOR.dialogCommand( 'editplaceholder' ) ); + + editor.ui.addButton( 'CreatePlaceholder', + { + label : lang.toolbar, + command :'createplaceholder', + icon : this.path + 'placeholder.gif' + }); + + if ( editor.addMenuItems ) + { + editor.addMenuGroup( 'placeholder', 20 ); + editor.addMenuItems( + { + editplaceholder : + { + label : lang.edit, + command : 'editplaceholder', + group : 'placeholder', + order : 1, + icon : this.path + 'placeholder.gif' + } + } ); + + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || !element.data( 'cke-placeholder' ) ) + return null; + + return { editplaceholder : CKEDITOR.TRISTATE_OFF }; + } ); + } + } + + editor.on( 'doubleclick', function( evt ) + { + if ( CKEDITOR.plugins.placeholder.getSelectedPlaceHoder( editor ) ) + evt.data.dialog = 'editplaceholder'; + }); + + editor.addCss( + '.cke_placeholder' + + '{' + + 'background-color: #ffff00;' + + ( CKEDITOR.env.gecko ? 'cursor: default;' : '' ) + + '}' + ); + + editor.on( 'contentDom', function() + { + editor.document.getBody().on( 'resizestart', function( evt ) + { + if ( editor.getSelection().getSelectedElement().data( 'cke-placeholder' ) ) + evt.data.preventDefault(); + }); + }); + + CKEDITOR.dialog.add( 'createplaceholder', this.path + 'dialogs/placeholder.js' ); + CKEDITOR.dialog.add( 'editplaceholder', this.path + 'dialogs/placeholder.js' ); + }, + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( dataFilter ) + { + dataFilter.addRules( + { + text : function( text ) + { + return text.replace( placeholderReplaceRegex, function( match ) + { + return CKEDITOR.plugins.placeholder.createPlaceholder( editor, null, match, 1 ); + }); + } + }); + } + + if ( htmlFilter ) + { + htmlFilter.addRules( + { + elements : + { + 'span' : function( element ) + { + if ( element.attributes && element.attributes[ 'data-cke-placeholder' ] ) + delete element.name; + } + } + }); + } + } + }); +})(); + +CKEDITOR.plugins.placeholder = +{ + createPlaceholder : function( editor, oldElement, text, isGet ) + { + var element = new CKEDITOR.dom.element( 'span', editor.document ); + element.setAttributes( + { + contentEditable : 'false', + 'data-cke-placeholder' : 1, + 'class' : 'cke_placeholder' + } + ); + + text && element.setText( text ); + + if ( isGet ) + return element.getOuterHtml(); + + if ( oldElement ) + { + if ( CKEDITOR.env.ie ) + { + element.insertAfter( oldElement ); + // Some time is required for IE before the element is removed. + setTimeout( function() + { + oldElement.remove(); + element.focus(); + }, 10 ); + } + else + element.replace( oldElement ); + } + else + editor.insertElement( element ); + + return null; + }, + + getSelectedPlaceHoder : function( editor ) + { + var range = editor.getSelection().getRanges()[ 0 ]; + range.shrink( CKEDITOR.SHRINK_TEXT ); + var node = range.startContainer; + while( node && !( node.type == CKEDITOR.NODE_ELEMENT && node.data( 'cke-placeholder' ) ) ) + node = node.getParent(); + return node; + } +}; diff --git a/_source/plugins/popup/plugin.js b/_source/plugins/popup/plugin.js new file mode 100644 index 0000000..a2e1f33 --- /dev/null +++ b/_source/plugins/popup/plugin.js @@ -0,0 +1,64 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'popup' ); + +CKEDITOR.tools.extend( CKEDITOR.editor.prototype, +{ + /** + * Opens Browser in a popup. The "width" and "height" parameters accept + * numbers (pixels) or percent (of screen size) values. + * @param {String} url The url of the external file browser. + * @param {String} width Popup window width. + * @param {String} height Popup window height. + * @param {String} options Popup window features. + */ + popup : function( url, width, height, options ) + { + width = width || '80%'; + height = height || '70%'; + + if ( typeof width == 'string' && width.length > 1 && width.substr( width.length - 1, 1 ) == '%' ) + width = parseInt( window.screen.width * parseInt( width, 10 ) / 100, 10 ); + + if ( typeof height == 'string' && height.length > 1 && height.substr( height.length - 1, 1 ) == '%' ) + height = parseInt( window.screen.height * parseInt( height, 10 ) / 100, 10 ); + + if ( width < 640 ) + width = 640; + + if ( height < 420 ) + height = 420; + + var top = parseInt( ( window.screen.height - height ) / 2, 10 ), + left = parseInt( ( window.screen.width - width ) / 2, 10 ); + + options = ( options || 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes' ) + + ',width=' + width + + ',height=' + height + + ',top=' + top + + ',left=' + left; + + var popupWindow = window.open( '', null, options, true ); + + // Blocked by a popup blocker. + if ( !popupWindow ) + return false; + + try + { + popupWindow.moveTo( left, top ); + popupWindow.resizeTo( width, height ); + popupWindow.focus(); + popupWindow.location.href = url; + } + catch ( e ) + { + popupWindow = window.open( url, null, options, true ); + } + + return true; + } +}); diff --git a/_source/plugins/preview/plugin.js b/_source/plugins/preview/plugin.js new file mode 100644 index 0000000..a31ebfa --- /dev/null +++ b/_source/plugins/preview/plugin.js @@ -0,0 +1,109 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Preview plugin. + */ + +(function() +{ + var previewCmd = + { + modes : { wysiwyg:1, source:1 }, + canUndo : false, + readOnly : 1, + exec : function( editor ) + { + var sHTML, + config = editor.config, + baseTag = config.baseHref ? '<base href="' + config.baseHref + '"/>' : '', + isCustomDomain = CKEDITOR.env.isCustomDomain(); + + if ( config.fullPage ) + { + sHTML = editor.getData() + .replace( /<head>/, '$&' + baseTag ) + .replace( /[^>]*(?=<\/title>)/, '$& — ' + editor.lang.preview ); + } + else + { + var bodyHtml = '<body ', + body = editor.document && editor.document.getBody(); + + if ( body ) + { + if ( body.getAttribute( 'id' ) ) + bodyHtml += 'id="' + body.getAttribute( 'id' ) + '" '; + if ( body.getAttribute( 'class' ) ) + bodyHtml += 'class="' + body.getAttribute( 'class' ) + '" '; + } + + bodyHtml += '>'; + + sHTML = + editor.config.docType + + '<html dir="' + editor.config.contentsLangDirection + '">' + + '<head>' + + baseTag + + '<title>' + editor.lang.preview + '</title>' + + CKEDITOR.tools.buildStyleHtml( editor.config.contentsCss ) + + '</head>' + bodyHtml + + editor.getData() + + '</body></html>'; + } + + var iWidth = 640, // 800 * 0.8, + iHeight = 420, // 600 * 0.7, + iLeft = 80; // (800 - 0.8 * 800) /2 = 800 * 0.1. + try + { + var screen = window.screen; + iWidth = Math.round( screen.width * 0.8 ); + iHeight = Math.round( screen.height * 0.7 ); + iLeft = Math.round( screen.width * 0.1 ); + } + catch ( e ){} + + var sOpenUrl = ''; + if ( isCustomDomain ) + { + window._cke_htmlToLoad = sHTML; + sOpenUrl = 'javascript:void( (function(){' + + 'document.open();' + + 'document.domain="' + document.domain + '";' + + 'document.write( window.opener._cke_htmlToLoad );' + + 'document.close();' + + 'window.opener._cke_htmlToLoad = null;' + + '})() )'; + } + + var oWindow = window.open( sOpenUrl, null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' + + iWidth + ',height=' + iHeight + ',left=' + iLeft ); + + if ( !isCustomDomain ) + { + oWindow.document.open(); + oWindow.document.write( sHTML ); + oWindow.document.close(); + } + } + }; + + var pluginName = 'preview'; + + // Register a plugin named "preview". + CKEDITOR.plugins.add( pluginName, + { + init : function( editor ) + { + editor.addCommand( pluginName, previewCmd ); + editor.ui.addButton( 'Preview', + { + label : editor.lang.preview, + command : pluginName + }); + } + }); +})(); diff --git a/_source/plugins/print/plugin.js b/_source/plugins/print/plugin.js new file mode 100644 index 0000000..cc26932 --- /dev/null +++ b/_source/plugins/print/plugin.js @@ -0,0 +1,42 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Print Plugin + */ + +CKEDITOR.plugins.add( 'print', +{ + init : function( editor ) + { + var pluginName = 'print'; + + // Register the command. + var command = editor.addCommand( pluginName, CKEDITOR.plugins.print ); + + // Register the toolbar button. + editor.ui.addButton( 'Print', + { + label : editor.lang.print, + command : pluginName + }); + } +} ); + +CKEDITOR.plugins.print = +{ + exec : function( editor ) + { + if ( CKEDITOR.env.opera ) + return; + else if ( CKEDITOR.env.gecko ) + editor.window.$.print(); + else + editor.document.$.execCommand( "Print" ); + }, + canUndo : false, + readOnly : 1, + modes : { wysiwyg : !( CKEDITOR.env.opera ) } // It is imposible to print the inner document in Opera. +}; diff --git a/_source/plugins/removeformat/plugin.js b/_source/plugins/removeformat/plugin.js new file mode 100644 index 0000000..066fce6 --- /dev/null +++ b/_source/plugins/removeformat/plugin.js @@ -0,0 +1,185 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'removeformat', +{ + requires : [ 'selection' ], + + init : function( editor ) + { + editor.addCommand( 'removeFormat', CKEDITOR.plugins.removeformat.commands.removeformat ); + editor.ui.addButton( 'RemoveFormat', + { + label : editor.lang.removeFormat, + command : 'removeFormat' + }); + + editor._.removeFormat = { filters: [] }; + } +}); + +CKEDITOR.plugins.removeformat = +{ + commands : + { + removeformat : + { + exec : function( editor ) + { + var tagsRegex = editor._.removeFormatRegex || + ( editor._.removeFormatRegex = new RegExp( '^(?:' + editor.config.removeFormatTags.replace( /,/g,'|' ) + ')$', 'i' ) ); + + var removeAttributes = editor._.removeAttributes || + ( editor._.removeAttributes = editor.config.removeFormatAttributes.split( ',' ) ); + + var filter = CKEDITOR.plugins.removeformat.filter; + var ranges = editor.getSelection().getRanges( 1 ), + iterator = ranges.createIterator(), + range; + + while ( ( range = iterator.getNextRange() ) ) + { + if ( ! range.collapsed ) + range.enlarge( CKEDITOR.ENLARGE_ELEMENT ); + + // Bookmark the range so we can re-select it after processing. + var bookmark = range.createBookmark(), + // The style will be applied within the bookmark boundaries. + startNode = bookmark.startNode, + endNode = bookmark.endNode, + currentNode; + + // We need to check the selection boundaries (bookmark spans) to break + // the code in a way that we can properly remove partially selected nodes. + // For example, removing a <b> style from + // <b>This is [some text</b> to show <b>the] problem</b> + // ... where [ and ] represent the selection, must result: + // <b>This is </b>[some text to show the]<b> problem</b> + // The strategy is simple, we just break the partial nodes before the + // removal logic, having something that could be represented this way: + // <b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b> + + var breakParent = function( node ) + { + // Let's start checking the start boundary. + var path = new CKEDITOR.dom.elementPath( node ), + pathElements = path.elements; + + for ( var i = 1, pathElement ; pathElement = pathElements[ i ] ; i++ ) + { + if ( pathElement.equals( path.block ) || pathElement.equals( path.blockLimit ) ) + break; + + // If this element can be removed (even partially). + if ( tagsRegex.test( pathElement.getName() ) && filter( editor, pathElement ) ) + node.breakParent( pathElement ); + } + }; + + breakParent( startNode ); + if ( endNode ) + { + breakParent( endNode ); + + // Navigate through all nodes between the bookmarks. + currentNode = startNode.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT ); + + while ( currentNode ) + { + // If we have reached the end of the selection, stop looping. + if ( currentNode.equals( endNode ) ) + break; + + // Cache the next node to be processed. Do it now, because + // currentNode may be removed. + var nextNode = currentNode.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ); + + // This node must not be a fake element. + if ( !( currentNode.getName() == 'img' + && currentNode.data( 'cke-realelement' ) ) + && filter( editor, currentNode ) ) + { + // Remove elements nodes that match with this style rules. + if ( tagsRegex.test( currentNode.getName() ) ) + currentNode.remove( 1 ); + else + { + currentNode.removeAttributes( removeAttributes ); + editor.fire( 'removeFormatCleanup', currentNode ); + } + } + + currentNode = nextNode; + } + } + + range.moveToBookmark( bookmark ); + } + + editor.getSelection().selectRanges( ranges ); + } + } + }, + + /** + * Perform the remove format filters on the passed element. + * @param {CKEDITOR.editor} editor + * @param {CKEDITOR.dom.element} element + */ + filter : function ( editor, element ) + { + var filters = editor._.removeFormat.filters; + for ( var i = 0; i < filters.length; i++ ) + { + if ( filters[ i ]( element ) === false ) + return false; + } + return true; + } +}; + +/** + * Add to a collection of functions to decide whether a specific + * element should be considered as formatting element and thus + * could be removed during <b>removeFormat</b> command, + * Note: Only available with the existence of 'removeformat' plugin. + * @since 3.3 + * @param {Function} func The function to be called, which will be passed a {CKEDITOR.dom.element} element to test. + * @example + * // Don't remove empty span + * editor.addRemoveFormatFilter.push( function( element ) + * { + * return !( element.is( 'span' ) && CKEDITOR.tools.isEmpty( element.getAttributes() ) ); + * }); + */ +CKEDITOR.editor.prototype.addRemoveFormatFilter = function( func ) +{ + this._.removeFormat.filters.push( func ); +}; + +/** + * A comma separated list of elements to be removed when executing the "remove + " format" command. Note that only inline elements are allowed. + * @type String + * @default 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var' + * @example + */ +CKEDITOR.config.removeFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var'; + +/** + * A comma separated list of elements attributes to be removed when executing + * the "remove format" command. + * @type String + * @default 'class,style,lang,width,height,align,hspace,valign' + * @example + */ +CKEDITOR.config.removeFormatAttributes = 'class,style,lang,width,height,align,hspace,valign'; + +/** + * Fired after an element was cleaned by the removeFormat plugin. + * @name CKEDITOR.editor#removeFormatCleanup + * @event + * @param {Object} data.element The element that was cleaned up. + */ diff --git a/_source/plugins/resize/plugin.js b/_source/plugins/resize/plugin.js new file mode 100644 index 0000000..24ba09c --- /dev/null +++ b/_source/plugins/resize/plugin.js @@ -0,0 +1,168 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'resize', +{ + init : function( editor ) + { + var config = editor.config; + + // Resize in the same direction of chrome, + // which is identical to dir of editor element. (#6614) + var resizeDir = editor.element.getDirection( 1 ); + + !config.resize_dir && ( config.resize_dir = 'both' ); + ( config.resize_maxWidth == undefined ) && ( config.resize_maxWidth = 3000 ); + ( config.resize_maxHeight == undefined ) && ( config.resize_maxHeight = 3000 ); + ( config.resize_minWidth == undefined ) && ( config.resize_minWidth = 750 ); + ( config.resize_minHeight == undefined ) && ( config.resize_minHeight = 250 ); + + if ( config.resize_enabled !== false ) + { + var container = null, + origin, + startSize, + resizeHorizontal = ( config.resize_dir == 'both' || config.resize_dir == 'horizontal' ) && + ( config.resize_minWidth != config.resize_maxWidth ), + resizeVertical = ( config.resize_dir == 'both' || config.resize_dir == 'vertical' ) && + ( config.resize_minHeight != config.resize_maxHeight ); + + function dragHandler( evt ) + { + var dx = evt.data.$.screenX - origin.x, + dy = evt.data.$.screenY - origin.y, + width = startSize.width, + height = startSize.height, + internalWidth = width + dx * ( resizeDir == 'rtl' ? -1 : 1 ), + internalHeight = height + dy; + + if ( resizeHorizontal ) + width = Math.max( config.resize_minWidth, Math.min( internalWidth, config.resize_maxWidth ) ); + + if ( resizeVertical ) + height = Math.max( config.resize_minHeight, Math.min( internalHeight, config.resize_maxHeight ) ); + + editor.resize( width, height ); + } + + function dragEndHandler ( evt ) + { + CKEDITOR.document.removeListener( 'mousemove', dragHandler ); + CKEDITOR.document.removeListener( 'mouseup', dragEndHandler ); + + if ( editor.document ) + { + editor.document.removeListener( 'mousemove', dragHandler ); + editor.document.removeListener( 'mouseup', dragEndHandler ); + } + } + + var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) + { + if ( !container ) + container = editor.getResizable(); + + startSize = { width : container.$.offsetWidth || 0, height : container.$.offsetHeight || 0 }; + origin = { x : $event.screenX, y : $event.screenY }; + + config.resize_minWidth > startSize.width && ( config.resize_minWidth = startSize.width ); + config.resize_minHeight > startSize.height && ( config.resize_minHeight = startSize.height ); + + CKEDITOR.document.on( 'mousemove', dragHandler ); + CKEDITOR.document.on( 'mouseup', dragEndHandler ); + + if ( editor.document ) + { + editor.document.on( 'mousemove', dragHandler ); + editor.document.on( 'mouseup', dragEndHandler ); + } + }); + + editor.on( 'destroy', function() { CKEDITOR.tools.removeFunction( mouseDownFn ); } ); + + editor.on( 'themeSpace', function( event ) + { + if ( event.data.space == 'bottom' ) + { + var direction = ''; + if ( resizeHorizontal && !resizeVertical ) + direction = ' cke_resizer_horizontal'; + if ( !resizeHorizontal && resizeVertical ) + direction = ' cke_resizer_vertical'; + + var resizerHtml = + '<div' + + ' class="cke_resizer' + direction + ' cke_resizer_' + resizeDir + '"' + + ' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' + + ' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event)"' + + '></div>'; + + // Always sticks the corner of botttom space. + resizeDir == 'ltr' && direction == 'ltr' ? + event.data.html += resizerHtml : + event.data.html = resizerHtml + event.data.html; + } + }, editor, null, 100 ); + } + } +} ); + +/** + * The minimum editor width, in pixels, when resizing it with the resize handle. + * Note: It fallbacks to editor's actual width if that's smaller than the default value. + * @name CKEDITOR.config.resize_minWidth + * @type Number + * @default 750 + * @example + * config.resize_minWidth = 500; + */ + +/** + * The minimum editor height, in pixels, when resizing it with the resize handle. + * Note: It fallbacks to editor's actual height if that's smaller than the default value. + * @name CKEDITOR.config.resize_minHeight + * @type Number + * @default 250 + * @example + * config.resize_minHeight = 600; + */ + +/** + * The maximum editor width, in pixels, when resizing it with the resize handle. + * @name CKEDITOR.config.resize_maxWidth + * @type Number + * @default 3000 + * @example + * config.resize_maxWidth = 750; + */ + +/** + * The maximum editor height, in pixels, when resizing it with the resize handle. + * @name CKEDITOR.config.resize_maxHeight + * @type Number + * @default 3000 + * @example + * config.resize_maxHeight = 600; + */ + +/** + * Whether to enable the resizing feature. If disabled the resize handler will not be visible. + * @name CKEDITOR.config.resize_enabled + * @type Boolean + * @default true + * @example + * config.resize_enabled = false; + */ + +/** + * The directions to which the editor resizing is enabled. Possible values + * are "both", "vertical" and "horizontal". + * @name CKEDITOR.config.resize_dir + * @type String + * @default 'both' + * @since 3.3 + * @example + * config.resize_dir = 'vertical'; + */ diff --git a/_source/plugins/richcombo/plugin.js b/_source/plugins/richcombo/plugin.js new file mode 100644 index 0000000..1fa8f34 --- /dev/null +++ b/_source/plugins/richcombo/plugin.js @@ -0,0 +1,381 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'richcombo', +{ + requires : [ 'floatpanel', 'listblock', 'button' ], + + beforeInit : function( editor ) + { + editor.ui.addHandler( CKEDITOR.UI_RICHCOMBO, CKEDITOR.ui.richCombo.handler ); + } +}); + +/** + * Button UI element. + * @constant + * @example + */ +CKEDITOR.UI_RICHCOMBO = 'richcombo'; + +CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass( +{ + $ : function( definition ) + { + // Copy all definition properties to this object. + CKEDITOR.tools.extend( this, definition, + // Set defaults. + { + title : definition.label, + modes : { wysiwyg : 1 } + }); + + // We don't want the panel definition in this object. + var panelDefinition = this.panel || {}; + delete this.panel; + + this.id = CKEDITOR.tools.getNextNumber(); + + this.document = ( panelDefinition + && panelDefinition.parent + && panelDefinition.parent.getDocument() ) + || CKEDITOR.document; + + panelDefinition.className = ( panelDefinition.className || '' ) + ' cke_rcombopanel'; + panelDefinition.block = + { + multiSelect : panelDefinition.multiSelect, + attributes : panelDefinition.attributes + }; + + this._ = + { + panelDefinition : panelDefinition, + items : {}, + state : CKEDITOR.TRISTATE_OFF + }; + }, + + statics : + { + handler : + { + create : function( definition ) + { + return new CKEDITOR.ui.richCombo( definition ); + } + } + }, + + proto : + { + renderHtml : function( editor ) + { + var output = []; + this.render( editor, output ); + return output.join( '' ); + }, + + /** + * Renders the combo. + * @param {CKEDITOR.editor} editor The editor instance which this button is + * to be used by. + * @param {Array} output The output array to which append the HTML relative + * to this button. + * @example + */ + render : function( editor, output ) + { + var env = CKEDITOR.env; + + var id = 'cke_' + this.id; + var clickFn = CKEDITOR.tools.addFunction( function( $element ) + { + var _ = this._; + + if ( _.state == CKEDITOR.TRISTATE_DISABLED ) + return; + + this.createPanel( editor ); + + if ( _.on ) + { + _.panel.hide(); + return; + } + + this.commit(); + var value = this.getValue(); + if ( value ) + _.list.mark( value ); + else + _.list.unmarkAll(); + + _.panel.showBlock( this.id, new CKEDITOR.dom.element( $element ), 4 ); + }, + this ); + + var instance = { + id : id, + combo : this, + focus : function() + { + var element = CKEDITOR.document.getById( id ).getChild( 1 ); + element.focus(); + }, + clickFn : clickFn + }; + + function updateState() + { + var state = this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; + this.setState( editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state ); + this.setValue( '' ); + } + + editor.on( 'mode', updateState, this ); + // If this combo is sensitive to readOnly state, update it accordingly. + !this.readOnly && editor.on( 'readOnly', updateState, this); + + var keyDownFn = CKEDITOR.tools.addFunction( function( ev, element ) + { + ev = new CKEDITOR.dom.event( ev ); + + var keystroke = ev.getKeystroke(); + switch ( keystroke ) + { + case 13 : // ENTER + case 32 : // SPACE + case 40 : // ARROW-DOWN + // Show panel + CKEDITOR.tools.callFunction( clickFn, element ); + break; + default : + // Delegate the default behavior to toolbar button key handling. + instance.onkey( instance, keystroke ); + } + + // Avoid subsequent focus grab on editor document. + ev.preventDefault(); + }); + + var focusFn = CKEDITOR.tools.addFunction( function() { instance.onfocus && instance.onfocus(); } ); + + // For clean up + instance.keyDownFn = keyDownFn; + + output.push( + '<span class="cke_rcombo" role="presentation">', + '<span id=', id ); + + if ( this.className ) + output.push( ' class="', this.className, ' cke_off"'); + + output.push( + ' role="presentation">', + '<span id="' + id+ '_label" class=cke_label>', this.label, '</span>', + '<a hidefocus=true title="', this.title, '" tabindex="-1"', + env.gecko && env.version >= 10900 && !env.hc ? '' : ' href="javascript:void(\'' + this.label + '\')"', + ' role="button" aria-labelledby="', id , '_label" aria-describedby="', id, '_text" aria-haspopup="true"' ); + + // Some browsers don't cancel key events in the keydown but in the + // keypress. + // TODO: Check if really needed for Gecko+Mac. + if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) ) + { + output.push( + ' onkeypress="return false;"' ); + } + + // With Firefox, we need to force it to redraw, otherwise it + // will remain in the focus state. + if ( CKEDITOR.env.gecko ) + { + output.push( + ' onblur="this.style.cssText = this.style.cssText;"' ); + } + + output.push( + ' onkeydown="CKEDITOR.tools.callFunction( ', keyDownFn, ', event, this );"' + + ' onfocus="return CKEDITOR.tools.callFunction(', focusFn, ', event);" ' + + ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188 + '="CKEDITOR.tools.callFunction(', clickFn, ', this); return false;">' + + '<span>' + + '<span id="' + id + '_text" class="cke_text cke_inline_label">' + this.label + '</span>' + + '</span>' + + '<span class=cke_openbutton><span class=cke_icon>' + ( CKEDITOR.env.hc ? '▼' : CKEDITOR.env.air ? ' ' : '' ) + '</span></span>' + // BLACK DOWN-POINTING TRIANGLE + '</a>' + + '</span>' + + '</span>' ); + + if ( this.onRender ) + this.onRender(); + + return instance; + }, + + createPanel : function( editor ) + { + if ( this._.panel ) + return; + + var panelDefinition = this._.panelDefinition, + panelBlockDefinition = this._.panelDefinition.block, + panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(), + panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ), + list = panel.addListBlock( this.id, panelBlockDefinition ), + me = this; + + panel.onShow = function() + { + if ( me.className ) + this.element.getFirst().addClass( me.className + '_panel' ); + + me.setState( CKEDITOR.TRISTATE_ON ); + + list.focus( !me.multiSelect && me.getValue() ); + + me._.on = 1; + + if ( me.onOpen ) + me.onOpen(); + }; + + panel.onHide = function( preventOnClose ) + { + if ( me.className ) + this.element.getFirst().removeClass( me.className + '_panel' ); + + me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); + + me._.on = 0; + + if ( !preventOnClose && me.onClose ) + me.onClose(); + }; + + panel.onEscape = function() + { + panel.hide(); + }; + + list.onClick = function( value, marked ) + { + // Move the focus to the main windows, otherwise it will stay + // into the floating panel, even if invisible, and Safari and + // Opera will go a bit crazy. + me.document.getWindow().focus(); + + if ( me.onClick ) + me.onClick.call( me, value, marked ); + + if ( marked ) + me.setValue( value, me._.items[ value ] ); + else + me.setValue( '' ); + + panel.hide( false ); + }; + + this._.panel = panel; + this._.list = list; + + panel.getBlock( this.id ).onHide = function() + { + me._.on = 0; + me.setState( CKEDITOR.TRISTATE_OFF ); + }; + + if ( this.init ) + this.init(); + }, + + setValue : function( value, text ) + { + this._.value = value; + + var textElement = this.document.getById( 'cke_' + this.id + '_text' ); + if ( textElement ) + { + if ( !( value || text ) ) + { + text = this.label; + textElement.addClass( 'cke_inline_label' ); + } + else + textElement.removeClass( 'cke_inline_label' ); + + textElement.setHtml( typeof text != 'undefined' ? text : value ); + } + }, + + getValue : function() + { + return this._.value || ''; + }, + + unmarkAll : function() + { + this._.list.unmarkAll(); + }, + + mark : function( value ) + { + this._.list.mark( value ); + }, + + hideItem : function( value ) + { + this._.list.hideItem( value ); + }, + + hideGroup : function( groupTitle ) + { + this._.list.hideGroup( groupTitle ); + }, + + showAll : function() + { + this._.list.showAll(); + }, + + add : function( value, html, text ) + { + this._.items[ value ] = text || value; + this._.list.add( value, html, text ); + }, + + startGroup : function( title ) + { + this._.list.startGroup( title ); + }, + + commit : function() + { + if ( !this._.committed ) + { + this._.list.commit(); + this._.committed = 1; + CKEDITOR.ui.fire( 'ready', this ); + } + this._.committed = 1; + }, + + setState : function( state ) + { + if ( this._.state == state ) + return; + + this.document.getById( 'cke_' + this.id ).setState( state ); + + this._.state = state; + } + } +}); + +CKEDITOR.ui.prototype.addRichCombo = function( name, definition ) +{ + this.add( name, CKEDITOR.UI_RICHCOMBO, definition ); +}; diff --git a/_source/plugins/save/plugin.js b/_source/plugins/save/plugin.js new file mode 100644 index 0000000..4a075b5 --- /dev/null +++ b/_source/plugins/save/plugin.js @@ -0,0 +1,56 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileSave plugin. + */ + +(function() +{ + var saveCmd = + { + modes : { wysiwyg:1, source:1 }, + readOnly : 1, + + exec : function( editor ) + { + var $form = editor.element.$.form; + + if ( $form ) + { + try + { + $form.submit(); + } + catch( e ) + { + // If there's a button named "submit" then the form.submit + // function is masked and can't be called in IE/FF, so we + // call the click() method of that button. + if ( $form.submit.click ) + $form.submit.click(); + } + } + } + }; + + var pluginName = 'save'; + + // Register a plugin named "save". + CKEDITOR.plugins.add( pluginName, + { + init : function( editor ) + { + var command = editor.addCommand( pluginName, saveCmd ); + command.modes = { wysiwyg : !!( editor.element.$.form ) }; + + editor.ui.addButton( 'Save', + { + label : editor.lang.save, + command : pluginName + }); + } + }); +})(); diff --git a/_source/plugins/scayt/dialogs/options.js b/_source/plugins/scayt/dialogs/options.js new file mode 100644 index 0000000..3bd9916 --- /dev/null +++ b/_source/plugins/scayt/dialogs/options.js @@ -0,0 +1,537 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'scaytcheck', function( editor ) +{ + var firstLoad = true, + captions, + doc = CKEDITOR.document, + editorName = editor.name, + tags = CKEDITOR.plugins.scayt.getUiTabs( editor ), + i, + contents = [], + userDicActive = 0, + dic_buttons = [ + // [0] contains buttons for creating + "dic_create_" + editorName + ",dic_restore_" + editorName, + // [1] contains buton for manipulation + "dic_rename_" + editorName + ",dic_delete_" + editorName + ], + optionsIds = [ 'mixedCase', 'mixedWithDigits', 'allCaps', 'ignoreDomainNames' ]; + + // common operations + + function getBOMAllOptions() + { + if (typeof document.forms["optionsbar_" + editorName] != "undefined") + return document.forms["optionsbar_" + editorName]["options"]; + return []; + } + function getBOMAllLangs() + { + if (typeof document.forms["languagesbar_" + editorName] != "undefined") + return document.forms["languagesbar_" + editorName]["scayt_lang"]; + return []; + } + + function setCheckedValue( radioObj, newValue ) + { + if ( !radioObj ) + return; + var radioLength = radioObj.length; + if ( radioLength == undefined ) + { + radioObj.checked = radioObj.value == newValue.toString(); + return; + } + for ( var i = 0; i < radioLength; i++ ) + { + radioObj[i].checked = false; + if ( radioObj[i].value == newValue.toString() ) + radioObj[i].checked = true; + } + } + + var lang = editor.lang.scayt; + var tags_contents = [ + { + id : 'options', + label : lang.optionsTab, + elements : [ + { + type : 'html', + id : 'options', + html : '<form name="optionsbar_' + editorName + '"><div class="inner_options">' + + ' <div class="messagebox"></div>' + + ' <div style="display:none;">' + + ' <input type="checkbox" name="options" id="allCaps_' + editorName + '" />' + + ' <label for="allCaps" id="label_allCaps_' + editorName + '"></label>' + + ' </div>' + + ' <div style="display:none;">' + + ' <input name="options" type="checkbox" id="ignoreDomainNames_' + editorName + '" />' + + ' <label for="ignoreDomainNames" id="label_ignoreDomainNames_' + editorName + '"></label>' + + ' </div>' + + ' <div style="display:none;">' + + ' <input name="options" type="checkbox" id="mixedCase_' + editorName + '" />' + + ' <label for="mixedCase" id="label_mixedCase_' + editorName + '"></label>' + + ' </div>' + + ' <div style="display:none;">' + + ' <input name="options" type="checkbox" id="mixedWithDigits_' + editorName + '" />' + + ' <label for="mixedWithDigits" id="label_mixedWithDigits_' + editorName + '"></label>' + + ' </div>' + + '</div></form>' + } + ] + }, + { + id : 'langs', + label : lang.languagesTab, + elements : [ + { + type : 'html', + id : 'langs', + html : '<form name="languagesbar_' + editorName + '"><div class="inner_langs">' + + ' <div class="messagebox"></div> ' + + ' <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol_' + editorName + '" ></div>' + + ' <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol_' + editorName + '"></div>' + + '</div></form>' + } + ] + }, + { + id : 'dictionaries', + label : lang.dictionariesTab, + elements : [ + { + type : 'html', + style: '', + id : 'dictionaries', + html : '<form name="dictionarybar_' + editorName + '"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">' + + ' <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message_' + editorName + '"> </div>' + + ' <div style="margin:5px auto; width:80%;white-space:normal;"> ' + + ' <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+ + ' <span class="cke_dialog_ui_labeled_content" >'+ + ' <div class="cke_dialog_ui_input_text">'+ + ' <input id="dic_name_' + editorName + '" type="text" class="cke_dialog_ui_input_text"/>'+ + ' </div></span></div>'+ + ' <div style="margin:5px auto; width:80%;white-space:normal;">'+ + ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create_' + editorName + '">'+ + ' </a>' + + ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete_' + editorName + '">'+ + ' </a>' + + ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename_' + editorName + '">'+ + ' </a>' + + ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore_' + editorName + '">'+ + ' </a>' + + ' </div>' + + ' <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info_' + editorName + '"></div>' + + '</div></form>' + } + ] + }, + { + id : 'about', + label : lang.aboutTab, + elements : [ + { + type : 'html', + id : 'about', + style : 'margin: 5px 5px;', + html : '<div id="scayt_about_' + editorName + '"></div>' + } + ] + } + ]; + + var dialogDefiniton = { + title : lang.title, + minWidth : 360, + minHeight : 220, + onShow : function() + { + var dialog = this; + dialog.data = editor.fire( 'scaytDialog', {} ); + dialog.options = dialog.data.scayt_control.option(); + dialog.chosed_lang = dialog.sLang = dialog.data.scayt_control.sLang; + + if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control ) + { + alert( 'Error loading application service' ); + dialog.hide(); + return; + } + + var stop = 0; + if ( firstLoad ) + { + dialog.data.scayt.getCaption( editor.langCode || 'en', function( caps ) + { + if ( stop++ > 0 ) // Once only + return; + captions = caps; + init_with_captions.apply( dialog ); + reload.apply( dialog ); + firstLoad = false; + }); + } + else + reload.apply( dialog ); + + dialog.selectPage( dialog.data.tab ); + }, + onOk : function() + { + var scayt_control = this.data.scayt_control; + scayt_control.option( this.options ); + // Setup language if it was changed. + var csLang = this.chosed_lang; + scayt_control.setLang( csLang ); + scayt_control.refresh(); + }, + onCancel: function() + { + var o = getBOMAllOptions(); + for ( var i in o ) + o[i].checked = false; + + setCheckedValue( getBOMAllLangs(), "" ); + }, + contents : contents + }; + + var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor ); + + for ( i = 0; i < tags.length; i++ ) + { + if ( tags[ i ] == 1 ) + contents[ contents.length ] = tags_contents[ i ]; + } + if ( tags[2] == 1 ) + userDicActive = 1; + + var init_with_captions = function() + { + var dialog = this, + lang_list = dialog.data.scayt.getLangList(), + buttonCaptions = [ 'dic_create', 'dic_delete', 'dic_rename', 'dic_restore' ], + buttonIds = [], + langList = [], + labels = optionsIds, + i; + + // Add buttons titles + if ( userDicActive ) + { + for ( i = 0; i < buttonCaptions.length; i++ ) + { + buttonIds[ i ] = buttonCaptions[ i ] + "_" + editorName; + doc.getById( buttonIds[ i ] ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + buttonCaptions[ i ]] +'</span>' ); + } + doc.getById( 'dic_info_' + editorName ).setHtml( captions[ 'dic_info' ] ); + } + + // Fill options and dictionary labels. + if ( tags[0] == 1 ) + { + for ( i in labels ) + { + var labelCaption = 'label_' + labels[ i ], + labelId = labelCaption + '_' + editorName, + labelElement = doc.getById( labelId ); + + if ( 'undefined' != typeof labelElement + && 'undefined' != typeof captions[ labelCaption ] + && 'undefined' != typeof dialog.options[labels[ i ]] ) + { + labelElement.setHtml( captions[ labelCaption ] ); + var labelParent = labelElement.getParent(); + labelParent.$.style.display = "block"; + } + } + } + + var about = '<p><img src="' + window.scayt.getAboutInfo().logoURL + '" /></p>' + + '<p>' + captions[ 'version' ] + window.scayt.getAboutInfo().version.toString() + '</p>' + + '<p>' + captions[ 'about_throwt_copy' ] + '</p>'; + + doc.getById( 'scayt_about_' + editorName ).setHtml( about ); + + // Create languages tab. + var createOption = function( option, list ) + { + var label = doc.createElement( 'label' ); + label.setAttribute( 'for', 'cke_option' + option ); + label.setHtml( list[ option ] ); + + if ( dialog.sLang == option ) // Current. + dialog.chosed_lang = option; + + var div = doc.createElement( 'div' ); + var radio = CKEDITOR.dom.element.createFromHtml( '<input id="cke_option' + + option + '" type="radio" ' + + ( dialog.sLang == option ? 'checked="checked"' : '' ) + + ' value="' + option + '" name="scayt_lang" />' ); + + radio.on( 'click', function() + { + this.$.checked = true; + dialog.chosed_lang = option; + }); + + div.append( radio ); + div.append( label ); + + return { + lang : list[ option ], + code : option, + radio : div + }; + }; + + if ( tags[1] ==1 ) + { + for ( i in lang_list.rtl ) + langList[ langList.length ] = createOption( i, lang_list.ltr ); + + for ( i in lang_list.ltr ) + langList[ langList.length ] = createOption( i, lang_list.ltr ); + + langList.sort( function( lang1, lang2 ) + { + return ( lang2.lang > lang1.lang ) ? -1 : 1 ; + }); + + var fieldL = doc.getById( 'scayt_lcol_' + editorName ), + fieldR = doc.getById( 'scayt_rcol_' + editorName ); + for ( i=0; i < langList.length; i++ ) + { + var field = ( i < langList.length / 2 ) ? fieldL : fieldR; + field.append( langList[ i ].radio ); + } + } + + // user dictionary handlers + var dic = {}; + dic.dic_create = function( el, dic_name , dic_buttons ) + { + // comma separated button's ids include repeats if exists + var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; + + var err_massage = captions["err_dic_create"]; + var suc_massage = captions["succ_dic_create"]; + + window.scayt.createUserDictionary( dic_name, + function( arg ) + { + hide_dic_buttons ( all_buttons ); + display_dic_buttons ( dic_buttons[1] ); + suc_massage = suc_massage.replace("%s" , arg.dname ); + dic_success_message (suc_massage); + }, + function( arg ) + { + err_massage = err_massage.replace("%s" ,arg.dname ); + dic_error_message ( err_massage + "( "+ (arg.message || "") +")"); + }); + + }; + + dic.dic_rename = function( el, dic_name ) + { + // + // try to rename dictionary + var err_massage = captions["err_dic_rename"] || ""; + var suc_massage = captions["succ_dic_rename"] || ""; + window.scayt.renameUserDictionary( dic_name, + function( arg ) + { + suc_massage = suc_massage.replace("%s" , arg.dname ); + set_dic_name( dic_name ); + dic_success_message ( suc_massage ); + }, + function( arg ) + { + err_massage = err_massage.replace("%s" , arg.dname ); + set_dic_name( dic_name ); + dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" ); + }); + }; + + dic.dic_delete = function( el, dic_name , dic_buttons ) + { + var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; + var err_massage = captions["err_dic_delete"]; + var suc_massage = captions["succ_dic_delete"]; + + // try to delete dictionary + window.scayt.deleteUserDictionary( + function( arg ) + { + suc_massage = suc_massage.replace("%s" , arg.dname ); + hide_dic_buttons ( all_buttons ); + display_dic_buttons ( dic_buttons[0] ); + set_dic_name( "" ); // empty input field + dic_success_message( suc_massage ); + }, + function( arg ) + { + err_massage = err_massage.replace("%s" , arg.dname ); + dic_error_message(err_massage); + }); + }; + + dic.dic_restore = dialog.dic_restore || function( el, dic_name , dic_buttons ) + { + // try to restore existing dictionary + var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; + var err_massage = captions["err_dic_restore"]; + var suc_massage = captions["succ_dic_restore"]; + + window.scayt.restoreUserDictionary(dic_name, + function( arg ) + { + suc_massage = suc_massage.replace("%s" , arg.dname ); + hide_dic_buttons ( all_buttons ); + display_dic_buttons(dic_buttons[1]); + dic_success_message( suc_massage ); + }, + function( arg ) + { + err_massage = err_massage.replace("%s" , arg.dname ); + dic_error_message( err_massage ); + }); + }; + + function onDicButtonClick( ev ) + { + var dic_name = doc.getById('dic_name_' + editorName).getValue(); + if ( !dic_name ) + { + dic_error_message(" Dictionary name should not be empty. "); + return false; + } + try{ + var el = ev.data.getTarget().getParent(); + var id = /(dic_\w+)_[\w\d]+/.exec(el.getId())[1]; + dic[ id ].apply( null, [ el, dic_name, dic_buttons ] ); + } + catch(err) + { + dic_error_message(" Dictionary error. "); + } + + return true; + } + + // ** bind event listeners + var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ), + l; + + for ( i = 0, l = arr_buttons.length ; i < l ; i += 1 ) + { + var dic_button = doc.getById(arr_buttons[i]); + if ( dic_button ) + dic_button.on( 'click', onDicButtonClick, this ); + } + }; + + var reload = function() + { + var dialog = this; + // for enabled options tab + if ( tags[0] == 1 ){ + var opto = getBOMAllOptions(); + + // Animate options. + for ( var k=0,l = opto.length; k<l;k++ ) + { + + var i = opto[k].id; + var checkbox = doc.getById( i ); + + if ( checkbox ) + { + opto[k].checked = false; + //alert (opto[k].removeAttribute) + if ( dialog.options[ i.split("_")[0] ] == 1 ) + { + opto[k].checked = true; + } + + + // Bind events. Do it only once. + if ( firstLoad ) + { + checkbox.on( 'click', function() + { + dialog.options[ this.getId().split("_")[0] ] = this.$.checked ? 1 : 0 ; + }); + } + } + } + } + + //for enabled languages tab + if ( tags[1] == 1 ) + { + var domLang = doc.getById("cke_option" + dialog.sLang); + setCheckedValue( domLang.$,dialog.sLang ); + } + + // * user dictionary + if ( userDicActive ) + { + window.scayt.getNameUserDictionary( + function( o ) + { + var dic_name = o.dname; + hide_dic_buttons( dic_buttons[0] + ',' + dic_buttons[1] ); + if ( dic_name ) + { + doc.getById( 'dic_name_' + editorName ).setValue(dic_name); + display_dic_buttons( dic_buttons[1] ); + } + else + display_dic_buttons( dic_buttons[0] ); + + }, + function() + { + doc.getById( 'dic_name_' + editorName ).setValue(""); + }); + dic_success_message(""); + } + + }; + + function dic_error_message( m ) + { + doc.getById('dic_message_' + editorName).setHtml('<span style="color:red;">' + m + '</span>' ); + } + function dic_success_message( m ) + { + doc.getById('dic_message_' + editorName).setHtml('<span style="color:blue;">' + m + '</span>') ; + } + function display_dic_buttons( sIds ) + { + sIds = String( sIds ); + var aIds = sIds.split(','); + for ( var i=0, l = aIds.length; i < l ; i+=1) + doc.getById( aIds[i] ).$.style.display = "inline"; + } + function hide_dic_buttons( sIds ) + { + sIds = String( sIds ); + var aIds = sIds.split(','); + for ( var i = 0, l = aIds.length; i < l ; i += 1 ) + doc.getById( aIds[i] ).$.style.display = "none"; + } + function set_dic_name( dic_name ) + { + doc.getById('dic_name_' + editorName).$.value= dic_name; + } + + return dialogDefiniton; +}); diff --git a/_source/plugins/scayt/dialogs/toolbar.css b/_source/plugins/scayt/dialogs/toolbar.css new file mode 100644 index 0000000..ecabdac --- /dev/null +++ b/_source/plugins/scayt/dialogs/toolbar.css @@ -0,0 +1,71 @@ +a +{ + text-decoration:none; + padding: 2px 4px 4px 6px; + display : block; + border-width: 1px; + border-style: solid; + margin : 0px; +} + +a.cke_scayt_toogle:hover, +a.cke_scayt_toogle:focus, +a.cke_scayt_toogle:active +{ + border-color: #316ac5; + background-color: #dff1ff; + color : #000; + cursor: pointer; + margin : 0px; +} +a.cke_scayt_toogle { + color : #316ac5; + border-color: #fff; +} +.scayt_enabled a.cke_scayt_item { + color : #316ac5; + border-color: #fff; + margin : 0px; +} +.scayt_disabled a.cke_scayt_item { + color : gray; + border-color : #fff; +} +.scayt_enabled a.cke_scayt_item:hover, +.scayt_enabled a.cke_scayt_item:focus, +.scayt_enabled a.cke_scayt_item:active +{ + border-color: #316ac5; + background-color: #dff1ff; + color : #000; + cursor: pointer; +} +.scayt_disabled a.cke_scayt_item:hover, +.scayt_disabled a.cke_scayt_item:focus, +.scayt_disabled a.cke_scayt_item:active +{ + border-color: gray; + background-color: #dff1ff; + color : gray; + cursor: no-drop; +} +.cke_scayt_set_on, .cke_scayt_set_off +{ + display: none; +} +.scayt_enabled .cke_scayt_set_on +{ + display: none; +} +.scayt_disabled .cke_scayt_set_on +{ + display: inline; +} +.scayt_disabled .cke_scayt_set_off +{ + display: none; +} +.scayt_enabled .cke_scayt_set_off +{ + display: inline; +} diff --git a/_source/plugins/scayt/plugin.js b/_source/plugins/scayt/plugin.js new file mode 100644 index 0000000..1395d6d --- /dev/null +++ b/_source/plugins/scayt/plugin.js @@ -0,0 +1,964 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Spell Check As You Type (SCAYT). + * Button name : Scayt. + */ + +(function() +{ + var commandName = 'scaytcheck', + openPage = ''; + + // Checks if a value exists in an array + function in_array( needle, haystack ) + { + var found = 0, + key; + for ( key in haystack ) + { + if ( haystack[ key ] == needle ) + { + found = 1; + break; + } + } + return found; + } + + var onEngineLoad = function() + { + var editor = this; + + var createInstance = function() // Create new instance every time Document is created. + { + var config = editor.config; + // Initialise Scayt instance. + var oParams = {}; + // Get the iframe. + oParams.srcNodeRef = editor.document.getWindow().$.frameElement; + // syntax : AppName.AppVersion@AppRevision + oParams.assocApp = 'CKEDITOR.' + CKEDITOR.version + '@' + CKEDITOR.revision; + oParams.customerid = config.scayt_customerid || '1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2'; + oParams.customDictionaryIds = config.scayt_customDictionaryIds || ''; + oParams.userDictionaryName = config.scayt_userDictionaryName || ''; + oParams.sLang = config.scayt_sLang || 'en_US'; + + // Introduce SCAYT onLoad callback. (#5632) + oParams.onLoad = function() + { + // Draw down word marker to avoid being covered by background-color style.(#5466) + if ( !( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) ) + this.addStyle( this.selectorCss(), 'padding-bottom: 2px !important;' ); + + // Call scayt_control.focus when SCAYT loaded + // and only if editor has focus and scayt control creates at first time (#5720) + if ( editor.focusManager.hasFocus && !plugin.isControlRestored( editor ) ) + this.focus(); + + }; + + oParams.onBeforeChange = function() + { + if ( plugin.getScayt( editor ) && !editor.checkDirty() ) + setTimeout( function(){ editor.resetDirty(); }, 0 ); + }; + + var scayt_custom_params = window.scayt_custom_params; + if ( typeof scayt_custom_params == 'object' ) + { + for ( var k in scayt_custom_params ) + oParams[ k ] = scayt_custom_params[ k ]; + } + // needs for restoring a specific scayt control settings + if ( plugin.getControlId( editor ) ) + oParams.id = plugin.getControlId( editor ); + + var scayt_control = new window.scayt( oParams ); + + scayt_control.afterMarkupRemove.push( function( node ) + { + ( new CKEDITOR.dom.element( node, scayt_control.document ) ).mergeSiblings(); + } ); + + // Copy config. + var lastInstance = plugin.instances[ editor.name ]; + if ( lastInstance ) + { + scayt_control.sLang = lastInstance.sLang; + scayt_control.option( lastInstance.option() ); + scayt_control.paused = lastInstance.paused; + } + + plugin.instances[ editor.name ] = scayt_control; + + try { + scayt_control.setDisabled( plugin.isPaused( editor ) === false ); + } catch (e) {} + + editor.fire( 'showScaytState' ); + }; + + editor.on( 'contentDom', createInstance ); + editor.on( 'contentDomUnload', function() + { + // Remove scripts. + var scripts = CKEDITOR.document.getElementsByTag( 'script' ), + scaytIdRegex = /^dojoIoScript(\d+)$/i, + scaytSrcRegex = /^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i; + + for ( var i=0; i < scripts.count(); i++ ) + { + var script = scripts.getItem( i ), + id = script.getId(), + src = script.getAttribute( 'src' ); + + if ( id && src && id.match( scaytIdRegex ) && src.match( scaytSrcRegex )) + script.remove(); + } + }); + + editor.on( 'beforeCommandExec', function( ev ) // Disable SCAYT before Source command execution. + { + if ( ( ev.data.name == 'source' || ev.data.name == 'newpage' ) && editor.mode == 'wysiwyg' ) + { + var scayt_instance = plugin.getScayt( editor ); + if ( scayt_instance ) + { + plugin.setPaused( editor, !scayt_instance.disabled ); + // store a control id for restore a specific scayt control settings + plugin.setControlId( editor, scayt_instance.id ); + scayt_instance.destroy( true ); + delete plugin.instances[ editor.name ]; + } + } + // Catch on source mode switch off (#5720) + else if ( ev.data.name == 'source' && editor.mode == 'source' ) + plugin.markControlRestore( editor ); + }); + + editor.on( 'afterCommandExec', function( ev ) + { + if ( !plugin.isScaytEnabled( editor ) ) + return; + + if ( editor.mode == 'wysiwyg' && ( ev.data.name == 'undo' || ev.data.name == 'redo' ) ) + window.setTimeout( function() { plugin.getScayt( editor ).refresh(); }, 10 ); + }); + + editor.on( 'destroy', function( ev ) + { + var editor = ev.editor, + scayt_instance = plugin.getScayt( editor ); + + // SCAYT instance might already get destroyed by mode switch (#5744). + if ( !scayt_instance ) + return; + + delete plugin.instances[ editor.name ]; + // store a control id for restore a specific scayt control settings + plugin.setControlId( editor, scayt_instance.id ); + scayt_instance.destroy( true ); + }); + + // Listen to data manipulation to reflect scayt markup. + editor.on( 'afterSetData', function() + { + if ( plugin.isScaytEnabled( editor ) ) { + window.setTimeout( function() + { + var instance = plugin.getScayt( editor ); + instance && instance.refresh(); + }, 10 ); + } + }); + + // Reload spell-checking for current word after insertion completed. + editor.on( 'insertElement', function() + { + var scayt_instance = plugin.getScayt( editor ); + if ( plugin.isScaytEnabled( editor ) ) + { + // Unlock the selection before reload, SCAYT will take + // care selection update. + if ( CKEDITOR.env.ie ) + editor.getSelection().unlock( true ); + + // Return focus to the editor and refresh SCAYT markup (#5573). + window.setTimeout( function() + { + scayt_instance.focus(); + scayt_instance.refresh(); + }, 10 ); + } + }, this, null, 50 ); + + editor.on( 'insertHtml', function() + { + var scayt_instance = plugin.getScayt( editor ); + if ( plugin.isScaytEnabled( editor ) ) + { + // Unlock the selection before reload, SCAYT will take + // care selection update. + if ( CKEDITOR.env.ie ) + editor.getSelection().unlock( true ); + + // Return focus to the editor (#5573) + // Refresh SCAYT markup + window.setTimeout( function() + { + scayt_instance.focus(); + scayt_instance.refresh(); + }, 10 ); + } + }, this, null, 50 ); + + editor.on( 'scaytDialog', function( ev ) // Communication with dialog. + { + ev.data.djConfig = window.djConfig; + ev.data.scayt_control = plugin.getScayt( editor ); + ev.data.tab = openPage; + ev.data.scayt = window.scayt; + }); + + var dataProcessor = editor.dataProcessor, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( htmlFilter ) + { + htmlFilter.addRules( + { + elements : + { + span : function( element ) + { + if ( element.attributes[ 'data-scayt_word' ] + && element.attributes[ 'data-scaytid' ] ) + { + delete element.name; // Write children, but don't write this node. + return element; + } + } + } + } + ); + } + + // Override Image.equals method avoid CK snapshot module to add SCAYT markup to snapshots. (#5546) + var undoImagePrototype = CKEDITOR.plugins.undo.Image.prototype; + undoImagePrototype.equals = CKEDITOR.tools.override( undoImagePrototype.equals, function( org ) + { + return function( otherImage ) + { + var thisContents = this.contents, + otherContents = otherImage.contents; + var scayt_instance = plugin.getScayt( this.editor ); + // Making the comparison based on content without SCAYT word markers. + if ( scayt_instance && plugin.isScaytReady( this.editor ) ) + { + // scayt::reset might return value undefined. (#5742) + this.contents = scayt_instance.reset( thisContents ) || ''; + otherImage.contents = scayt_instance.reset( otherContents ) || ''; + } + + var retval = org.apply( this, arguments ); + + this.contents = thisContents; + otherImage.contents = otherContents; + return retval; + }; + }); + + if ( editor.document ) + createInstance(); + }; + +CKEDITOR.plugins.scayt = + { + engineLoaded : false, + instances : {}, + // Data storage for SCAYT control, based on editor instances + controlInfo : {}, + setControlInfo : function( editor, o ) + { + if ( editor && editor.name && typeof ( this.controlInfo[ editor.name ] ) != 'object' ) + this.controlInfo[ editor.name ] = {}; + + for ( var infoOpt in o ) + this.controlInfo[ editor.name ][ infoOpt ] = o[ infoOpt ]; + }, + isControlRestored : function( editor ) + { + if ( editor && + editor.name && + this.controlInfo[ editor.name ] ) + { + return this.controlInfo[ editor.name ].restored ; + } + return false; + }, + markControlRestore : function( editor ) + { + this.setControlInfo( editor, { restored:true } ); + }, + setControlId: function( editor, id ) + { + this.setControlInfo( editor, { id:id } ); + }, + getControlId: function( editor ) + { + if ( editor && + editor.name && + this.controlInfo[ editor.name ] && + this.controlInfo[ editor.name ].id ) + { + return this.controlInfo[ editor.name ].id; + } + return null; + }, + setPaused: function( editor , bool ) + { + this.setControlInfo( editor, { paused:bool } ); + }, + isPaused: function( editor ) + { + if ( editor && + editor.name && + this.controlInfo[editor.name] ) + { + return this.controlInfo[editor.name].paused; + } + return undefined; + }, + getScayt : function( editor ) + { + return this.instances[ editor.name ]; + }, + isScaytReady : function( editor ) + { + return this.engineLoaded === true && + 'undefined' !== typeof window.scayt && this.getScayt( editor ); + }, + isScaytEnabled : function( editor ) + { + var scayt_instance = this.getScayt( editor ); + return ( scayt_instance ) ? scayt_instance.disabled === false : false; + }, + getUiTabs : function( editor ) + { + var uiTabs = []; + + // read UI tabs value from config + var configUiTabs = editor.config.scayt_uiTabs || "1,1,1"; + + // convert string to array + configUiTabs = configUiTabs.split( ',' ); + + // "About us" should be always shown for standard config + configUiTabs[3] = "1"; + + for ( var i = 0; i < 4; i++ ) { + uiTabs[i] = (typeof window.scayt != "undefined" && typeof window.scayt.uiTags != "undefined") + ? (parseInt(configUiTabs[i],10) && window.scayt.uiTags[i]) + : parseInt(configUiTabs[i],10); + } + return uiTabs; + }, + loadEngine : function( editor ) + { + // SCAYT doesn't work with Firefox2, Opera and AIR. + if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 || CKEDITOR.env.opera || CKEDITOR.env.air ) + return editor.fire( 'showScaytState' ); + + if ( this.engineLoaded === true ) + return onEngineLoad.apply( editor ); // Add new instance. + else if ( this.engineLoaded == -1 ) // We are waiting. + return CKEDITOR.on( 'scaytReady', function(){ onEngineLoad.apply( editor ); } ); // Use function(){} to avoid rejection as duplicate. + + CKEDITOR.on( 'scaytReady', onEngineLoad, editor ); + CKEDITOR.on( 'scaytReady', function() + { + this.engineLoaded = true; + }, + this, + null, + 0 + ); // First to run. + + this.engineLoaded = -1; // Loading in progress. + + // compose scayt url + var protocol = document.location.protocol; + // Default to 'http' for unknown. + protocol = protocol.search( /https?:/) != -1? protocol : 'http:'; + var baseUrl = 'svc.spellchecker.net/scayt26/loader__base.js'; + + var scaytUrl = editor.config.scayt_srcUrl || ( protocol + '//' + baseUrl ); + var scaytConfigBaseUrl = plugin.parseUrl( scaytUrl ).path + '/'; + + if( window.scayt == undefined ) + { + CKEDITOR._djScaytConfig = + { + baseUrl: scaytConfigBaseUrl, + addOnLoad: + [ + function() + { + CKEDITOR.fireOnce( 'scaytReady' ); + } + ], + isDebug: false + }; + // Append javascript code. + CKEDITOR.document.getHead().append( + CKEDITOR.document.createElement( 'script', + { + attributes : + { + type : 'text/javascript', + async : 'true', + src : scaytUrl + } + }) + ); + } + else + CKEDITOR.fireOnce( 'scaytReady' ); + + return null; + }, + parseUrl : function ( data ) + { + var match; + if ( data.match && ( match = data.match(/(.*)[\/\\](.*?\.\w+)$/) ) ) + return { path: match[1], file: match[2] }; + else + return data; + } + }; + + var plugin = CKEDITOR.plugins.scayt; + + // Context menu constructing. + var addButtonCommand = function( editor, buttonName, buttonLabel, commandName, command, menugroup, menuOrder ) + { + editor.addCommand( commandName, command ); + + // If the "menu" plugin is loaded, register the menu item. + editor.addMenuItem( commandName, + { + label : buttonLabel, + command : commandName, + group : menugroup, + order : menuOrder + }); + }; + + var commandDefinition = + { + preserveState : true, + editorFocus : false, + canUndo : false, + + exec: function( editor ) + { + if ( plugin.isScaytReady( editor ) ) + { + var isEnabled = plugin.isScaytEnabled( editor ); + + this.setState( isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_ON ); + + var scayt_control = plugin.getScayt( editor ); + // the place where the status of editor focus should be restored + // after there will be ability to store its state before SCAYT button click + // if (storedFocusState is focused ) + // scayt_control.focus(); + // + // now focus is set certainly + scayt_control.focus(); + scayt_control.setDisabled( isEnabled ); + } + else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 ) // Load first time + { + this.setState( CKEDITOR.TRISTATE_DISABLED ); + plugin.loadEngine( editor ); + } + } + }; + + // Add scayt plugin. + CKEDITOR.plugins.add( 'scayt', + { + requires : [ 'menubutton' ], + + beforeInit : function( editor ) + { + var items_order = editor.config.scayt_contextMenuItemsOrder + || 'suggest|moresuggest|control', + items_order_str = ""; + + items_order = items_order.split( '|' ); + + if ( items_order && items_order.length ) + { + for ( var pos = 0 ; pos < items_order.length ; pos++ ) + items_order_str += 'scayt_' + items_order[ pos ] + ( items_order.length != parseInt( pos, 10 ) + 1 ? ',' : '' ); + } + + // Put it on top of all context menu items (#5717) + editor.config.menu_groups = items_order_str + ',' + editor.config.menu_groups; + }, + + init : function( editor ) + { + // Delete span[data-scaytid] when text pasting in editor (#6921) + var dataFilter = editor.dataProcessor && editor.dataProcessor.dataFilter; + var dataFilterRules = + { + elements : + { + span : function( element ) + { + var attrs = element.attributes; + if ( attrs && attrs[ 'data-scaytid' ] ) + delete element.name; + } + } + }; + dataFilter && dataFilter.addRules( dataFilterRules ); + + var moreSuggestions = {}, + mainSuggestions = {}; + + // Scayt command. + var command = editor.addCommand( commandName, commandDefinition ); + + // Add Options dialog. + CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/options.js' ) ); + + var uiTabs = plugin.getUiTabs( editor ); + + var menuGroup = 'scaytButton'; + editor.addMenuGroup( menuGroup ); + // combine menu items to render + var uiMenuItems = {}; + + var lang = editor.lang.scayt; + + // always added + uiMenuItems.scaytToggle = + { + label : lang.enable, + command : commandName, + group : menuGroup + }; + + if ( uiTabs[0] == 1 ) + uiMenuItems.scaytOptions = + { + label : lang.options, + group : menuGroup, + onClick : function() + { + openPage = 'options'; + editor.openDialog( commandName ); + } + }; + + if ( uiTabs[1] == 1 ) + uiMenuItems.scaytLangs = + { + label : lang.langs, + group : menuGroup, + onClick : function() + { + openPage = 'langs'; + editor.openDialog( commandName ); + } + }; + if ( uiTabs[2] == 1 ) + uiMenuItems.scaytDict = + { + label : lang.dictionariesTab, + group : menuGroup, + onClick : function() + { + openPage = 'dictionaries'; + editor.openDialog( commandName ); + } + }; + // always added + uiMenuItems.scaytAbout = + { + label : editor.lang.scayt.about, + group : menuGroup, + onClick : function() + { + openPage = 'about'; + editor.openDialog( commandName ); + } + }; + + editor.addMenuItems( uiMenuItems ); + + editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON, + { + label : lang.title, + title : CKEDITOR.env.opera ? lang.opera_title : lang.title, + className : 'cke_button_scayt', + modes : { wysiwyg : 1 }, + onRender: function() + { + command.on( 'state', function() + { + this.setState( command.state ); + }, + this); + }, + onMenu : function() + { + var isEnabled = plugin.isScaytEnabled( editor ); + + editor.getMenuItem( 'scaytToggle' ).label = lang[ isEnabled ? 'disable' : 'enable' ]; + + var uiTabs = plugin.getUiTabs( editor ); + + return { + scaytToggle : CKEDITOR.TRISTATE_OFF, + scaytOptions : isEnabled && uiTabs[0] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + scaytLangs : isEnabled && uiTabs[1] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + scaytDict : isEnabled && uiTabs[2] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + scaytAbout : isEnabled && uiTabs[3] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED + }; + } + }); + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu && editor.addMenuItems ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !plugin.isScaytEnabled( editor ) + || selection.getRanges()[ 0 ].checkReadOnly() ) + return null; + + var scayt_control = plugin.getScayt( editor ), + node = scayt_control.getScaytNode(); + + if ( !node ) + return null; + + var word = scayt_control.getWord( node ); + + if ( !word ) + return null; + + var sLang = scayt_control.getLang(), + _r = {}, + items_suggestion = window.scayt.getSuggestion( word, sLang ); + if ( !items_suggestion || !items_suggestion.length ) + return null; + // Remove unused commands and menuitems + for ( var m in moreSuggestions ) + { + delete editor._.menuItems[ m ]; + delete editor._.commands[ m ]; + } + for ( m in mainSuggestions ) + { + delete editor._.menuItems[ m ]; + delete editor._.commands[ m ]; + } + moreSuggestions = {}; // Reset items. + mainSuggestions = {}; + + var moreSuggestionsUnable = editor.config.scayt_moreSuggestions || 'on'; + var moreSuggestionsUnableAdded = false; + + var maxSuggestions = editor.config.scayt_maxSuggestions; + ( typeof maxSuggestions != 'number' ) && ( maxSuggestions = 5 ); + !maxSuggestions && ( maxSuggestions = items_suggestion.length ); + + var contextCommands = editor.config.scayt_contextCommands || 'all'; + contextCommands = contextCommands.split( '|' ); + + for ( var i = 0, l = items_suggestion.length; i < l; i += 1 ) + { + var commandName = 'scayt_suggestion_' + items_suggestion[i].replace( ' ', '_' ); + var exec = ( function( el, s ) + { + return { + exec: function() + { + scayt_control.replace( el, s ); + } + }; + })( node, items_suggestion[i] ); + + if ( i < maxSuggestions ) + { + addButtonCommand( editor, 'button_' + commandName, items_suggestion[i], + commandName, exec, 'scayt_suggest', i + 1 ); + _r[ commandName ] = CKEDITOR.TRISTATE_OFF; + mainSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF; + } + else if ( moreSuggestionsUnable == 'on' ) + { + addButtonCommand( editor, 'button_' + commandName, items_suggestion[i], + commandName, exec, 'scayt_moresuggest', i + 1 ); + moreSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF; + moreSuggestionsUnableAdded = true; + } + } + + if ( moreSuggestionsUnableAdded ) + { + // Register the More suggestions group; + editor.addMenuItem( 'scayt_moresuggest', + { + label : lang.moreSuggestions, + group : 'scayt_moresuggest', + order : 10, + getItems : function() + { + return moreSuggestions; + } + }); + mainSuggestions[ 'scayt_moresuggest' ] = CKEDITOR.TRISTATE_OFF; + } + + if ( in_array( 'all', contextCommands ) || in_array( 'ignore', contextCommands) ) + { + var ignore_command = { + exec: function(){ + scayt_control.ignore( node ); + } + }; + addButtonCommand( editor, 'ignore', lang.ignore, 'scayt_ignore', ignore_command, 'scayt_control', 1 ); + mainSuggestions[ 'scayt_ignore' ] = CKEDITOR.TRISTATE_OFF; + } + + if ( in_array( 'all', contextCommands ) || in_array( 'ignoreall', contextCommands ) ) + { + var ignore_all_command = { + exec: function(){ + scayt_control.ignoreAll( node ); + } + }; + addButtonCommand(editor, 'ignore_all', lang.ignoreAll, 'scayt_ignore_all', ignore_all_command, 'scayt_control', 2); + mainSuggestions['scayt_ignore_all'] = CKEDITOR.TRISTATE_OFF; + } + + if ( in_array( 'all', contextCommands ) || in_array( 'add', contextCommands ) ) + { + var addword_command = { + exec: function(){ + window.scayt.addWordToUserDictionary( node ); + } + }; + addButtonCommand(editor, 'add_word', lang.addWord, 'scayt_add_word', addword_command, 'scayt_control', 3); + mainSuggestions['scayt_add_word'] = CKEDITOR.TRISTATE_OFF; + } + + if ( scayt_control.fireOnContextMenu ) + scayt_control.fireOnContextMenu( editor ); + + return mainSuggestions; + }); + } + + var showInitialState = function() + { + editor.removeListener( 'showScaytState', showInitialState ); + + if ( !CKEDITOR.env.opera && !CKEDITOR.env.air ) + command.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); + else + command.setState( CKEDITOR.TRISTATE_DISABLED ); + }; + + editor.on( 'showScaytState', showInitialState ); + + if ( CKEDITOR.env.opera || CKEDITOR.env.air ) + { + editor.on( 'instanceReady', function() + { + showInitialState(); + }); + } + + // Start plugin + if ( editor.config.scayt_autoStartup ) + { + editor.on( 'instanceReady', function() + { + plugin.loadEngine( editor ); + }); + } + }, + + afterInit : function( editor ) + { + // Prevent word marker line from displaying in elements path and been removed when cleaning format. (#3570) (#4125) + var elementsPathFilters, + scaytFilter = function( element ) + { + if ( element.hasAttribute( 'data-scaytid' ) ) + return false; + }; + + if ( editor._.elementsPath && ( elementsPathFilters = editor._.elementsPath.filters ) ) + elementsPathFilters.push( scaytFilter ); + + editor.addRemoveFormatFilter && editor.addRemoveFormatFilter( scaytFilter ); + + } + }); +})(); + +/** + * If enabled (true), turns on SCAYT automatically after loading the editor. + * @name CKEDITOR.config.scayt_autoStartup + * @type Boolean + * @default false + * @example + * config.scayt_autoStartup = true; + */ + +/** + * Defines the number of SCAYT suggestions to show in the main context menu. + * The possible values are: + * <ul> + * <li>0 (zero): All suggestions are displayed in the main context menu.</li> + * <li>Positive number: The maximum number of suggestions to shown in context + * menu. Other entries will be shown in "More Suggestions" sub-menu.</li> + * <li>Negative number: No suggestions are shown in the main context menu. All + * entries will be listed in the "Suggestions" sub-menu.</li> + * </ul> + * @name CKEDITOR.config.scayt_maxSuggestions + * @type Number + * @default 5 + * @example + * // Display only three suggestions in the main context menu. + * config.scayt_maxSuggestions = 3; + * @example + * // Do not show the suggestions directly. + * config.scayt_maxSuggestions = -1; + */ + +/** + * Sets the customer ID for SCAYT. Required for migration from free version + * with banner to paid version. + * @name CKEDITOR.config.scayt_customerid + * @type String + * @default '' + * @example + * // Load SCAYT using my customer ID. + * config.scayt_customerid = 'your-encrypted-customer-id'; + */ + +/** + * Enables/disables the "More Suggestions" sub-menu in the context menu. + * The possible values are "on" or "off". + * @name CKEDITOR.config.scayt_moreSuggestions + * @type String + * @default 'on' + * @example + * // Disables the "More Suggestions" sub-menu. + * config.scayt_moreSuggestions = 'off'; + */ + +/** + * Customizes the display of SCAYT context menu commands ("Add Word", "Ignore" + * and "Ignore All"). It must be a string with one or more of the following + * words separated by a pipe ("|"): + * <ul> + * <li>"off": disables all options.</li> + * <li>"all": enables all options.</li> + * <li>"ignore": enables the "Ignore" option.</li> + * <li>"ignoreall": enables the "Ignore All" option.</li> + * <li>"add": enables the "Add Word" option.</li> + * </ul> + * @name CKEDITOR.config.scayt_contextCommands + * @type String + * @default 'all' + * @example + * // Show only "Add Word" and "Ignore All" in the context menu. + * config.scayt_contextCommands = 'add|ignoreall'; + */ + +/** + * Sets the default spellchecking language for SCAYT. + * @name CKEDITOR.config.scayt_sLang + * @type String + * @default 'en_US' + * @example + * // Sets SCAYT to German. + * config.scayt_sLang = 'de_DE'; + */ + +/** + * Sets the visibility of the SCAYT tabs in the settings dialog and toolbar + * button. The value must contain a "1" (enabled) or "0" (disabled) number for + * each of the following entries, in this precise order, separated by a + * comma (","): "Options", "Languages" and "Dictionary". + * @name CKEDITOR.config.scayt_uiTabs + * @type String + * @default '1,1,1' + * @example + * // Hide the "Languages" tab. + * config.scayt_uiTabs = '1,0,1'; + */ + + +/** + * Set the URL to SCAYT core. Required to switch to licensed version of SCAYT application. + * Further details at http://wiki.spellchecker.net/doku.php?id=3rd:wysiwyg:fckeditor:wscckf3l . + * @name CKEDITOR.config.scayt_srcUrl + * @type String + * @default '' + * @example + * config.scayt_srcUrl = "http://my-host/spellcheck/lf/scayt/scayt.js"; + */ + +/** + * Links SCAYT to custom dictionaries. It's a string containing dictionary ids + * separared by commas (","). Available only for licensed version. + * Further details at http://wiki.spellchecker.net/doku.php?id=custom_dictionary_support . + * @name CKEDITOR.config.scayt_customDictionaryIds + * @type String + * @default '' + * @example + * config.scayt_customDictionaryIds = '3021,3456,3478"'; + */ + +/** + * Makes it possible to activate a custom dictionary on SCAYT. The user + * dictionary name must be used. Available only for licensed version. + * @name CKEDITOR.config.scayt_userDictionaryName + * @type String + * @default '' + * @example + * config.scayt_userDictionaryName = 'MyDictionary'; + */ + +/** + * Define order of placing of SCAYT context menu items by groups. + * It must be a string with one or more of the following + * words separated by a pipe ("|"): + * <ul> + * <li>'suggest' - main suggestion word list,</li> + * <li>'moresuggest' - more suggestions word list,</li> + * <li>'control' - SCAYT commands, such as 'Ignore' and 'Add Word'</li> + * </ul> + * + * @name CKEDITOR.config.scayt_contextMenuItemsOrder + * @type String + * @default 'suggest|moresuggest|control' + * @example + * config.scayt_contextMenuItemsOrder = 'moresuggest|control|suggest'; + */ diff --git a/_source/plugins/selection/plugin.js b/_source/plugins/selection/plugin.js new file mode 100644 index 0000000..d8888c1 --- /dev/null +++ b/_source/plugins/selection/plugin.js @@ -0,0 +1,1601 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + // #### checkSelectionChange : START + + // The selection change check basically saves the element parent tree of + // the current node and check it on successive requests. If there is any + // change on the tree, then the selectionChange event gets fired. + function checkSelectionChange() + { + try + { + // In IE, the "selectionchange" event may still get thrown when + // releasing the WYSIWYG mode, so we need to check it first. + var sel = this.getSelection(); + if ( !sel || !sel.document.getWindow().$ ) + return; + + var firstElement = sel.getStartElement(); + var currentPath = new CKEDITOR.dom.elementPath( firstElement ); + + if ( !currentPath.compare( this._.selectionPreviousPath ) ) + { + this._.selectionPreviousPath = currentPath; + this.fire( 'selectionChange', { selection : sel, path : currentPath, element : firstElement } ); + } + } + catch (e) + {} + } + + var checkSelectionChangeTimer, + checkSelectionChangeTimeoutPending; + + function checkSelectionChangeTimeout() + { + // Firing the "OnSelectionChange" event on every key press started to + // be too slow. This function guarantees that there will be at least + // 200ms delay between selection checks. + + checkSelectionChangeTimeoutPending = true; + + if ( checkSelectionChangeTimer ) + return; + + checkSelectionChangeTimeoutExec.call( this ); + + checkSelectionChangeTimer = CKEDITOR.tools.setTimeout( checkSelectionChangeTimeoutExec, 200, this ); + } + + function checkSelectionChangeTimeoutExec() + { + checkSelectionChangeTimer = null; + + if ( checkSelectionChangeTimeoutPending ) + { + // Call this with a timeout so the browser properly moves the + // selection after the mouseup. It happened that the selection was + // being moved after the mouseup when clicking inside selected text + // with Firefox. + CKEDITOR.tools.setTimeout( checkSelectionChange, 0, this ); + + checkSelectionChangeTimeoutPending = false; + } + } + + // #### checkSelectionChange : END + + function rangeRequiresFix( range ) + { + function isInlineCt( node ) + { + return node && node.type == CKEDITOR.NODE_ELEMENT + && node.getName() in CKEDITOR.dtd.$removeEmpty; + } + + function singletonBlock( node ) + { + var body = range.document.getBody(); + return !node.is( 'body' ) && body.getChildCount() == 1; + } + + var start = range.startContainer, + offset = range.startOffset; + + if ( start.type == CKEDITOR.NODE_TEXT ) + return false; + + // 1. Empty inline element. <span>^</span> + // 2. Adjoin to inline element. <p><strong>text</strong>^</p> + // 3. The only empty block in document. <body><p>^</p></body> (#7222) + return !CKEDITOR.tools.trim( start.getHtml() ) ? isInlineCt( start ) || singletonBlock( start ) + : isInlineCt( start.getChild( offset - 1 ) ) || isInlineCt( start.getChild( offset ) ); + } + + var selectAllCmd = + { + modes : { wysiwyg : 1, source : 1 }, + readOnly : CKEDITOR.env.ie || CKEDITOR.env.webkit, + exec : function( editor ) + { + switch ( editor.mode ) + { + case 'wysiwyg' : + editor.document.$.execCommand( 'SelectAll', false, null ); + // Force triggering selectionChange (#7008) + editor.forceNextSelectionCheck(); + editor.selectionChange(); + break; + case 'source' : + // Select the contents of the textarea + var textarea = editor.textarea.$; + if ( CKEDITOR.env.ie ) + textarea.createTextRange().execCommand( 'SelectAll' ); + else + { + textarea.selectionStart = 0; + textarea.selectionEnd = textarea.value.length; + } + textarea.focus(); + } + }, + canUndo : false + }; + + function createFillingChar( doc ) + { + removeFillingChar( doc ); + + var fillingChar = doc.createText( '\u200B' ); + doc.setCustomData( 'cke-fillingChar', fillingChar ); + + return fillingChar; + } + + function getFillingChar( doc ) + { + return doc && doc.getCustomData( 'cke-fillingChar' ); + } + + // Checks if a filling char has been used, eventualy removing it (#1272). + function checkFillingChar( doc ) + { + var fillingChar = doc && getFillingChar( doc ); + if ( fillingChar ) + { + // Use this flag to avoid removing the filling char right after + // creating it. + if ( fillingChar.getCustomData( 'ready' ) ) + removeFillingChar( doc ); + else + fillingChar.setCustomData( 'ready', 1 ); + } + } + + function removeFillingChar( doc ) + { + var fillingChar = doc && doc.removeCustomData( 'cke-fillingChar' ); + if ( fillingChar ) + { + // We can't simply remove the filling node because the user + // will actually enlarge it when typing, so we just remove the + // invisible char from it. + fillingChar.setText( fillingChar.getText().replace( /\u200B/g, '' ) ); + fillingChar = 0; + } + } + + CKEDITOR.plugins.add( 'selection', + { + init : function( editor ) + { + // On WebKit only, we need a special "filling" char on some situations + // (#1272). Here we set the events that should invalidate that char. + if ( CKEDITOR.env.webkit ) + { + editor.on( 'selectionChange', function() { checkFillingChar( editor.document ); } ); + editor.on( 'beforeSetMode', function() { removeFillingChar( editor.document ); } ); + editor.on( 'key', function( e ) + { + // Remove the filling char before some keys get + // executed, so they'll not get blocked by it. + switch ( e.data.keyCode ) + { + case 13 : // ENTER + case CKEDITOR.SHIFT + 13 : // SHIFT-ENTER + case 37 : // LEFT-ARROW + case 39 : // RIGHT-ARROW + case 8 : // BACKSPACE + removeFillingChar( editor.document ); + } + }, null, null, 10 ); + + var fillingCharBefore, + resetSelection; + + function beforeData() + { + var doc = editor.document, + fillingChar = getFillingChar( doc ); + + if ( fillingChar ) + { + // If cursor is right blinking by side of the filler node, save it for restoring, + // as the following text substitution will blind it. (#7437) + var sel = doc.$.defaultView.getSelection(); + if ( sel.type == 'Caret' && sel.anchorNode == fillingChar.$ ) + resetSelection = 1; + + fillingCharBefore = fillingChar.getText(); + fillingChar.setText( fillingCharBefore.replace( /\u200B/g, '' ) ); + } + } + function afterData() + { + var doc = editor.document, + fillingChar = getFillingChar( doc ); + + if ( fillingChar ) + { + fillingChar.setText( fillingCharBefore ); + + if ( resetSelection ) + { + doc.$.defaultView.getSelection().setPosition( fillingChar.$,fillingChar.getLength() ); + resetSelection = 0; + } + } + } + editor.on( 'beforeUndoImage', beforeData ); + editor.on( 'afterUndoImage', afterData ); + editor.on( 'beforeGetData', beforeData, null, null, 0 ); + editor.on( 'getData', afterData ); + } + + editor.on( 'contentDom', function() + { + var doc = editor.document, + body = doc.getBody(), + html = doc.getDocumentElement(); + + if ( CKEDITOR.env.ie ) + { + // Other browsers don't loose the selection if the + // editor document loose the focus. In IE, we don't + // have support for it, so we reproduce it here, other + // than firing the selection change event. + + var savedRange, + saveEnabled, + restoreEnabled = 1; + + // "onfocusin" is fired before "onfocus". It makes it + // possible to restore the selection before click + // events get executed. + body.on( 'focusin', function( evt ) + { + // If there are elements with layout they fire this event but + // it must be ignored to allow edit its contents #4682 + if ( evt.data.$.srcElement.nodeName != 'BODY' ) + return; + + // If we have saved a range, restore it at this + // point. + if ( savedRange ) + { + if ( restoreEnabled ) + { + // Well not break because of this. + try + { + savedRange.select(); + } + catch (e) + {} + + // Update locked selection because of the normalized text nodes. (#6083, #6987) + var lockedSelection = doc.getCustomData( 'cke_locked_selection' ); + if ( lockedSelection ) + { + lockedSelection.unlock(); + lockedSelection.lock(); + } + } + + savedRange = null; + } + }); + + body.on( 'focus', function() + { + // Enable selections to be saved. + saveEnabled = 1; + + saveSelection(); + }); + + body.on( 'beforedeactivate', function( evt ) + { + // Ignore this event if it's caused by focus switch between + // internal editable control type elements, e.g. layouted paragraph. (#4682) + if ( evt.data.$.toElement ) + return; + + // Disable selections from being saved. + saveEnabled = 0; + restoreEnabled = 1; + }); + + // IE before version 8 will leave cursor blinking inside the document after + // editor blurred unless we clean up the selection. (#4716) + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) + { + editor.on( 'blur', function( evt ) + { + // Try/Catch to avoid errors if the editor is hidden. (#6375) + try + { + editor.document && editor.document.$.selection.empty(); + } + catch (e) {} + }); + } + + // Listening on document element ensures that + // scrollbar is included. (#5280) + html.on( 'mousedown', function() + { + // Lock restore selection now, as we have + // a followed 'click' event which introduce + // new selection. (#5735) + restoreEnabled = 0; + }); + + html.on( 'mouseup', function() + { + restoreEnabled = 1; + }); + + // In IE6/7 the blinking cursor appears, but contents are + // not editable. (#5634) + if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.version < 8 || CKEDITOR.env.quirks ) ) + { + // The 'click' event is not fired when clicking the + // scrollbars, so we can use it to check whether + // the empty space following <body> has been clicked. + html.on( 'click', function( evt ) + { + if ( evt.data.getTarget().getName() == 'html' ) + editor.getSelection().getRanges()[ 0 ].select(); + }); + } + + var scroll; + // IE fires the "selectionchange" event when clicking + // inside a selection. We don't want to capture that. + body.on( 'mousedown', function( evt ) + { + // IE scrolls document to top on right mousedown + // when editor has no focus, remember this scroll + // position and revert it before context menu opens. (#5778) + if ( evt.data.$.button == 2 ) + { + var sel = editor.document.$.selection; + if ( sel.type == 'None' ) + scroll = editor.window.getScrollPosition(); + } + disableSave(); + }); + + body.on( 'mouseup', + function( evt ) + { + // Restore recorded scroll position when needed on right mouseup. + if ( evt.data.$.button == 2 && scroll ) + { + editor.document.$.documentElement.scrollLeft = scroll.x; + editor.document.$.documentElement.scrollTop = scroll.y; + } + scroll = null; + + saveEnabled = 1; + setTimeout( function() + { + saveSelection( true ); + }, + 0 ); + }); + + body.on( 'keydown', disableSave ); + body.on( 'keyup', + function() + { + saveEnabled = 1; + saveSelection(); + }); + + + // IE is the only to provide the "selectionchange" + // event. + doc.on( 'selectionchange', saveSelection ); + + function disableSave() + { + saveEnabled = 0; + } + + function saveSelection( testIt ) + { + if ( saveEnabled ) + { + var doc = editor.document, + sel = editor.getSelection(), + nativeSel = sel && sel.getNative(); + + // There is a very specific case, when clicking + // inside a text selection. In that case, the + // selection collapses at the clicking point, + // but the selection object remains in an + // unknown state, making createRange return a + // range at the very start of the document. In + // such situation we have to test the range, to + // be sure it's valid. + if ( testIt && nativeSel && nativeSel.type == 'None' ) + { + // The "InsertImage" command can be used to + // test whether the selection is good or not. + // If not, it's enough to give some time to + // IE to put things in order for us. + if ( !doc.$.queryCommandEnabled( 'InsertImage' ) ) + { + CKEDITOR.tools.setTimeout( saveSelection, 50, this, true ); + return; + } + } + + // Avoid saving selection from within text input. (#5747) + var parentTag; + if ( nativeSel && nativeSel.type && nativeSel.type != 'Control' + && ( parentTag = nativeSel.createRange() ) + && ( parentTag = parentTag.parentElement() ) + && ( parentTag = parentTag.nodeName ) + && parentTag.toLowerCase() in { input: 1, textarea : 1 } ) + { + return; + } + + savedRange = nativeSel && sel.getRanges()[ 0 ]; + + checkSelectionChangeTimeout.call( editor ); + } + } + } + else + { + // In other browsers, we make the selection change + // check based on other events, like clicks or keys + // press. + + doc.on( 'mouseup', checkSelectionChangeTimeout, editor ); + doc.on( 'keyup', checkSelectionChangeTimeout, editor ); + } + }); + + // Clear the cached range path before unload. (#7174) + editor.on( 'contentDomUnload', editor.forceNextSelectionCheck, editor ); + + editor.addCommand( 'selectAll', selectAllCmd ); + editor.ui.addButton( 'SelectAll', + { + label : editor.lang.selectAll, + command : 'selectAll' + }); + + editor.selectionChange = checkSelectionChangeTimeout; + + // IE9 might cease to work if there's an object selection inside the iframe (#7639). + CKEDITOR.env.ie9Compat && editor.on( 'destroy', function() + { + var sel = editor.getSelection(); + sel && sel.getNative().clear(); + }, null, null, 9 ); + } + }); + + /** + * Gets the current selection from the editing area when in WYSIWYG mode. + * @returns {CKEDITOR.dom.selection} A selection object or null if not on + * WYSIWYG mode or no selection is available. + * @example + * var selection = CKEDITOR.instances.editor1.<b>getSelection()</b>; + * alert( selection.getType() ); + */ + CKEDITOR.editor.prototype.getSelection = function() + { + return this.document && this.document.getSelection(); + }; + + CKEDITOR.editor.prototype.forceNextSelectionCheck = function() + { + delete this._.selectionPreviousPath; + }; + + /** + * Gets the current selection from the document. + * @returns {CKEDITOR.dom.selection} A selection object. + * @example + * var selection = CKEDITOR.instances.editor1.document.<b>getSelection()</b>; + * alert( selection.getType() ); + */ + CKEDITOR.dom.document.prototype.getSelection = function() + { + var sel = new CKEDITOR.dom.selection( this ); + return ( !sel || sel.isInvalid ) ? null : sel; + }; + + /** + * No selection. + * @constant + * @example + * if ( editor.getSelection().getType() == CKEDITOR.SELECTION_NONE ) + * alert( 'Nothing is selected' ); + */ + CKEDITOR.SELECTION_NONE = 1; + + /** + * Text or collapsed selection. + * @constant + * @example + * if ( editor.getSelection().getType() == CKEDITOR.SELECTION_TEXT ) + * alert( 'Text is selected' ); + */ + CKEDITOR.SELECTION_TEXT = 2; + + /** + * Element selection. + * @constant + * @example + * if ( editor.getSelection().getType() == CKEDITOR.SELECTION_ELEMENT ) + * alert( 'An element is selected' ); + */ + CKEDITOR.SELECTION_ELEMENT = 3; + + /** + * Manipulates the selection in a DOM document. + * @constructor + * @example + */ + CKEDITOR.dom.selection = function( document ) + { + var lockedSelection = document.getCustomData( 'cke_locked_selection' ); + + if ( lockedSelection ) + return lockedSelection; + + this.document = document; + this.isLocked = 0; + this._ = + { + cache : {} + }; + + /** + * IE BUG: The selection's document may be a different document than the + * editor document. Return null if that's the case. + */ + if ( CKEDITOR.env.ie ) + { + var range = this.getNative().createRange(); + if ( !range + || ( range.item && range.item(0).ownerDocument != this.document.$ ) + || ( range.parentElement && range.parentElement().ownerDocument != this.document.$ ) ) + { + this.isInvalid = true; + } + } + + return this; + }; + + var styleObjectElements = + { + img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1, + a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1 + }; + + CKEDITOR.dom.selection.prototype = + { + /** + * Gets the native selection object from the browser. + * @function + * @returns {Object} The native selection object. + * @example + * var selection = editor.getSelection().<b>getNative()</b>; + */ + getNative : + CKEDITOR.env.ie ? + function() + { + return this._.cache.nativeSel || ( this._.cache.nativeSel = this.document.$.selection ); + } + : + function() + { + return this._.cache.nativeSel || ( this._.cache.nativeSel = this.document.getWindow().$.getSelection() ); + }, + + /** + * Gets the type of the current selection. The following values are + * available: + * <ul> + * <li>{@link CKEDITOR.SELECTION_NONE} (1): No selection.</li> + * <li>{@link CKEDITOR.SELECTION_TEXT} (2): Text is selected or + * collapsed selection.</li> + * <li>{@link CKEDITOR.SELECTION_ELEMENT} (3): A element + * selection.</li> + * </ul> + * @function + * @returns {Number} One of the following constant values: + * {@link CKEDITOR.SELECTION_NONE}, {@link CKEDITOR.SELECTION_TEXT} or + * {@link CKEDITOR.SELECTION_ELEMENT}. + * @example + * if ( editor.getSelection().<b>getType()</b> == CKEDITOR.SELECTION_TEXT ) + * alert( 'Text is selected' ); + */ + getType : + CKEDITOR.env.ie ? + function() + { + var cache = this._.cache; + if ( cache.type ) + return cache.type; + + var type = CKEDITOR.SELECTION_NONE; + + try + { + var sel = this.getNative(), + ieType = sel.type; + + if ( ieType == 'Text' ) + type = CKEDITOR.SELECTION_TEXT; + + if ( ieType == 'Control' ) + type = CKEDITOR.SELECTION_ELEMENT; + + // It is possible that we can still get a text range + // object even when type == 'None' is returned by IE. + // So we'd better check the object returned by + // createRange() rather than by looking at the type. + if ( sel.createRange().parentElement ) + type = CKEDITOR.SELECTION_TEXT; + } + catch(e) {} + + return ( cache.type = type ); + } + : + function() + { + var cache = this._.cache; + if ( cache.type ) + return cache.type; + + var type = CKEDITOR.SELECTION_TEXT; + + var sel = this.getNative(); + + if ( !sel ) + type = CKEDITOR.SELECTION_NONE; + else if ( sel.rangeCount == 1 ) + { + // Check if the actual selection is a control (IMG, + // TABLE, HR, etc...). + + var range = sel.getRangeAt(0), + startContainer = range.startContainer; + + if ( startContainer == range.endContainer + && startContainer.nodeType == 1 + && ( range.endOffset - range.startOffset ) == 1 + && styleObjectElements[ startContainer.childNodes[ range.startOffset ].nodeName.toLowerCase() ] ) + { + type = CKEDITOR.SELECTION_ELEMENT; + } + } + + return ( cache.type = type ); + }, + + /** + * Retrieve the {@link CKEDITOR.dom.range} instances that represent the current selection. + * Note: Some browsers returns multiple ranges even on a sequent selection, e.g. Firefox returns + * one range for each table cell when one or more table row is selected. + * @return {Array} + * @example + * var ranges = selection.getRanges(); + * alert(ranges.length); + */ + getRanges : (function() + { + var func = CKEDITOR.env.ie ? + ( function() + { + function getNodeIndex( node ) { return new CKEDITOR.dom.node( node ).getIndex(); } + + // Finds the container and offset for a specific boundary + // of an IE range. + var getBoundaryInformation = function( range, start ) + { + // Creates a collapsed range at the requested boundary. + range = range.duplicate(); + range.collapse( start ); + + // Gets the element that encloses the range entirely. + var parent = range.parentElement(), + doc = parent.ownerDocument; + + // Empty parent element, e.g. <i>^</i> + if ( !parent.hasChildNodes() ) + return { container : parent, offset : 0 }; + + var siblings = parent.children, + child, + sibling, + testRange = range.duplicate(), + startIndex = 0, + endIndex = siblings.length - 1, + index = -1, + position, + distance; + + // Binary search over all element childs to test the range to see whether + // range is right on the boundary of one element. + while ( startIndex <= endIndex ) + { + index = Math.floor( ( startIndex + endIndex ) / 2 ); + child = siblings[ index ]; + testRange.moveToElementText( child ); + position = testRange.compareEndPoints( 'StartToStart', range ); + + if ( position > 0 ) + endIndex = index - 1; + else if ( position < 0 ) + startIndex = index + 1; + else + { + // IE9 report wrong measurement with compareEndPoints when range anchors between two BRs. + // e.g. <p>text<br />^<br /></p> (#7433) + if ( CKEDITOR.env.ie9Compat && child.tagName == 'BR' ) + { + var bmId = 'cke_range_marker'; + range.execCommand( 'CreateBookmark', false, bmId ); + child = doc.getElementsByName( bmId )[ 0 ]; + var offset = getNodeIndex( child ); + parent.removeChild( child ); + return { container : parent, offset : offset }; + } + else + return { container : parent, offset : getNodeIndex( child ) }; + } + } + + // All childs are text nodes, + // or to the right hand of test range are all text nodes. (#6992) + if ( index == -1 || index == siblings.length - 1 && position < 0 ) + { + // Adapt test range to embrace the entire parent contents. + testRange.moveToElementText( parent ); + testRange.setEndPoint( 'StartToStart', range ); + + // IE report line break as CRLF with range.text but + // only LF with textnode.nodeValue, normalize them to avoid + // breaking character counting logic below. (#3949) + distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length; + + siblings = parent.childNodes; + + // Actual range anchor right beside test range at the boundary of text node. + if ( !distance ) + { + child = siblings[ siblings.length - 1 ]; + + if ( child.nodeType == CKEDITOR.NODE_ELEMENT ) + return { container : parent, offset : siblings.length }; + else + return { container : child, offset : child.nodeValue.length }; + } + + // Start the measuring until distance overflows, meanwhile count the text nodes. + var i = siblings.length; + while ( distance > 0 ) + distance -= siblings[ --i ].nodeValue.length; + + return { container : siblings[ i ], offset : -distance }; + } + // Test range was one offset beyond OR behind the anchored text node. + else + { + // Adapt one side of test range to the actual range + // for measuring the offset between them. + testRange.collapse( position > 0 ? true : false ); + testRange.setEndPoint( position > 0 ? 'StartToStart' : 'EndToStart', range ); + + // IE report line break as CRLF with range.text but + // only LF with textnode.nodeValue, normalize them to avoid + // breaking character counting logic below. (#3949) + distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length; + + // Actual range anchor right beside test range at the inner boundary of text node. + if ( !distance ) + return { container : parent, offset : getNodeIndex( child ) + ( position > 0 ? 0 : 1 ) }; + + // Start the measuring until distance overflows, meanwhile count the text nodes. + while ( distance > 0 ) + { + try + { + sibling = child[ position > 0 ? 'previousSibling' : 'nextSibling' ]; + distance -= sibling.nodeValue.length; + child = sibling; + } + // Measurement in IE could be somtimes wrong because of <select> element. (#4611) + catch( e ) + { + return { container : parent, offset : getNodeIndex( child ) }; + } + } + + return { container : child, offset : position > 0 ? -distance : child.nodeValue.length + distance }; + } + }; + + return function() + { + // IE doesn't have range support (in the W3C way), so we + // need to do some magic to transform selections into + // CKEDITOR.dom.range instances. + + var sel = this.getNative(), + nativeRange = sel && sel.createRange(), + type = this.getType(), + range; + + if ( !sel ) + return []; + + if ( type == CKEDITOR.SELECTION_TEXT ) + { + range = new CKEDITOR.dom.range( this.document ); + + var boundaryInfo = getBoundaryInformation( nativeRange, true ); + range.setStart( new CKEDITOR.dom.node( boundaryInfo.container ), boundaryInfo.offset ); + + boundaryInfo = getBoundaryInformation( nativeRange ); + range.setEnd( new CKEDITOR.dom.node( boundaryInfo.container ), boundaryInfo.offset ); + + // Correct an invalid IE range case on empty list item. (#5850) + if ( range.endContainer.getPosition( range.startContainer ) & CKEDITOR.POSITION_PRECEDING + && range.endOffset <= range.startContainer.getIndex() ) + { + range.collapse(); + } + + return [ range ]; + } + else if ( type == CKEDITOR.SELECTION_ELEMENT ) + { + var retval = []; + + for ( var i = 0 ; i < nativeRange.length ; i++ ) + { + var element = nativeRange.item( i ), + parentElement = element.parentNode, + j = 0; + + range = new CKEDITOR.dom.range( this.document ); + + for (; j < parentElement.childNodes.length && parentElement.childNodes[j] != element ; j++ ) + { /*jsl:pass*/ } + + range.setStart( new CKEDITOR.dom.node( parentElement ), j ); + range.setEnd( new CKEDITOR.dom.node( parentElement ), j + 1 ); + retval.push( range ); + } + + return retval; + } + + return []; + }; + })() + : + function() + { + + // On browsers implementing the W3C range, we simply + // tranform the native ranges in CKEDITOR.dom.range + // instances. + + var ranges = [], + range, + doc = this.document, + sel = this.getNative(); + + if ( !sel ) + return ranges; + + // On WebKit, it may happen that we'll have no selection + // available. We normalize it here by replicating the + // behavior of other browsers. + if ( !sel.rangeCount ) + { + range = new CKEDITOR.dom.range( doc ); + range.moveToElementEditStart( doc.getBody() ); + ranges.push( range ); + } + + for ( var i = 0 ; i < sel.rangeCount ; i++ ) + { + var nativeRange = sel.getRangeAt( i ); + + range = new CKEDITOR.dom.range( doc ); + + range.setStart( new CKEDITOR.dom.node( nativeRange.startContainer ), nativeRange.startOffset ); + range.setEnd( new CKEDITOR.dom.node( nativeRange.endContainer ), nativeRange.endOffset ); + ranges.push( range ); + } + return ranges; + }; + + return function( onlyEditables ) + { + var cache = this._.cache; + if ( cache.ranges && !onlyEditables ) + return cache.ranges; + else if ( !cache.ranges ) + cache.ranges = new CKEDITOR.dom.rangeList( func.call( this ) ); + + // Split range into multiple by read-only nodes. + if ( onlyEditables ) + { + var ranges = cache.ranges; + for ( var i = 0; i < ranges.length; i++ ) + { + var range = ranges[ i ]; + + // Drop range spans inside one ready-only node. + var parent = range.getCommonAncestor(); + if ( parent.isReadOnly() ) + ranges.splice( i, 1 ); + + if ( range.collapsed ) + continue; + + var startContainer = range.startContainer, + endContainer = range.endContainer, + startOffset = range.startOffset, + endOffset = range.endOffset, + walkerRange = range.clone(); + + // Range may start inside a non-editable element, restart range + // by the end of it. + var readOnly; + if ( ( readOnly = startContainer.isReadOnly() ) ) + range.setStartAfter( readOnly ); + + // Enlarge range start/end with text node to avoid walker + // being DOM destructive, it doesn't interfere our checking + // of elements below as well. + if ( startContainer && startContainer.type == CKEDITOR.NODE_TEXT ) + { + if ( startOffset >= startContainer.getLength() ) + walkerRange.setStartAfter( startContainer ); + else + walkerRange.setStartBefore( startContainer ); + } + + if ( endContainer && endContainer.type == CKEDITOR.NODE_TEXT ) + { + if ( !endOffset ) + walkerRange.setEndBefore( endContainer ); + else + walkerRange.setEndAfter( endContainer ); + } + + // Looking for non-editable element inside the range. + var walker = new CKEDITOR.dom.walker( walkerRange ); + walker.evaluator = function( node ) + { + if ( node.type == CKEDITOR.NODE_ELEMENT + && node.isReadOnly() ) + { + var newRange = range.clone(); + range.setEndBefore( node ); + + // Drop collapsed range around read-only elements, + // it make sure the range list empty when selecting + // only non-editable elements. + if ( range.collapsed ) + ranges.splice( i--, 1 ); + + // Avoid creating invalid range. + if ( !( node.getPosition( walkerRange.endContainer ) & CKEDITOR.POSITION_CONTAINS ) ) + { + newRange.setStartAfter( node ); + if ( !newRange.collapsed ) + ranges.splice( i + 1, 0, newRange ); + } + + return true; + } + + return false; + }; + + walker.next(); + } + } + + return cache.ranges; + }; + })(), + + /** + * Gets the DOM element in which the selection starts. + * @returns {CKEDITOR.dom.element} The element at the beginning of the + * selection. + * @example + * var element = editor.getSelection().<b>getStartElement()</b>; + * alert( element.getName() ); + */ + getStartElement : function() + { + var cache = this._.cache; + if ( cache.startElement !== undefined ) + return cache.startElement; + + var node, + sel = this.getNative(); + + switch ( this.getType() ) + { + case CKEDITOR.SELECTION_ELEMENT : + return this.getSelectedElement(); + + case CKEDITOR.SELECTION_TEXT : + + var range = this.getRanges()[0]; + + if ( range ) + { + if ( !range.collapsed ) + { + range.optimize(); + + // Decrease the range content to exclude particial + // selected node on the start which doesn't have + // visual impact. ( #3231 ) + while ( 1 ) + { + var startContainer = range.startContainer, + startOffset = range.startOffset; + // Limit the fix only to non-block elements.(#3950) + if ( startOffset == ( startContainer.getChildCount ? + startContainer.getChildCount() : startContainer.getLength() ) + && !startContainer.isBlockBoundary() ) + range.setStartAfter( startContainer ); + else break; + } + + node = range.startContainer; + + if ( node.type != CKEDITOR.NODE_ELEMENT ) + return node.getParent(); + + node = node.getChild( range.startOffset ); + + if ( !node || node.type != CKEDITOR.NODE_ELEMENT ) + node = range.startContainer; + else + { + var child = node.getFirst(); + while ( child && child.type == CKEDITOR.NODE_ELEMENT ) + { + node = child; + child = child.getFirst(); + } + } + } + else + { + node = range.startContainer; + if ( node.type != CKEDITOR.NODE_ELEMENT ) + node = node.getParent(); + } + + node = node.$; + } + } + + return cache.startElement = ( node ? new CKEDITOR.dom.element( node ) : null ); + }, + + /** + * Gets the current selected element. + * @returns {CKEDITOR.dom.element} The selected element. Null if no + * selection is available or the selection type is not + * {@link CKEDITOR.SELECTION_ELEMENT}. + * @example + * var element = editor.getSelection().<b>getSelectedElement()</b>; + * alert( element.getName() ); + */ + getSelectedElement : function() + { + var cache = this._.cache; + if ( cache.selectedElement !== undefined ) + return cache.selectedElement; + + var self = this; + + var node = CKEDITOR.tools.tryThese( + // Is it native IE control type selection? + function() + { + return self.getNative().createRange().item( 0 ); + }, + // Figure it out by checking if there's a single enclosed + // node of the range. + function() + { + var range = self.getRanges()[ 0 ], + enclosed, + selected; + + // Check first any enclosed element, e.g. <ul>[<li><a href="#">item</a></li>]</ul> + for ( var i = 2; i && !( ( enclosed = range.getEnclosedNode() ) + && ( enclosed.type == CKEDITOR.NODE_ELEMENT ) + && styleObjectElements[ enclosed.getName() ] + && ( selected = enclosed ) ); i-- ) + { + // Then check any deep wrapped element, e.g. [<b><i><img /></i></b>] + range.shrink( CKEDITOR.SHRINK_ELEMENT ); + } + + return selected.$; + }); + + return cache.selectedElement = ( node ? new CKEDITOR.dom.element( node ) : null ); + }, + + /** + * Retrieves the text contained within the range, empty string is returned for non-text selection. + * @returns {String} string of text within the current selection. + * @since 3.6.1 + * @example + * var text = editor.getSelectedText(); + * alert( text ); + */ + getSelectedText : function() + { + var cache = this._.cache; + if ( cache.selectedText !== undefined ) + return cache.selectedText; + + var text = '', + nativeSel = this.getNative(); + if ( this.getType() == CKEDITOR.SELECTION_TEXT ) + text = CKEDITOR.env.ie ? nativeSel.createRange().text : nativeSel.toString(); + + return ( cache.selectedText = text ); + }, + + lock : function() + { + // Call all cacheable function. + this.getRanges(); + this.getStartElement(); + this.getSelectedElement(); + this.getSelectedText(); + + // The native selection is not available when locked. + this._.cache.nativeSel = {}; + + this.isLocked = 1; + + // Save this selection inside the DOM document. + this.document.setCustomData( 'cke_locked_selection', this ); + }, + + unlock : function( restore ) + { + var doc = this.document, + lockedSelection = doc.getCustomData( 'cke_locked_selection' ); + + if ( lockedSelection ) + { + doc.setCustomData( 'cke_locked_selection', null ); + + if ( restore ) + { + var selectedElement = lockedSelection.getSelectedElement(), + ranges = !selectedElement && lockedSelection.getRanges(); + + this.isLocked = 0; + this.reset(); + + doc.getBody().focus(); + + if ( selectedElement ) + this.selectElement( selectedElement ); + else + this.selectRanges( ranges ); + } + } + + if ( !lockedSelection || !restore ) + { + this.isLocked = 0; + this.reset(); + } + }, + + reset : function() + { + this._.cache = {}; + }, + + /** + * Make the current selection of type {@link CKEDITOR.SELECTION_ELEMENT} by enclosing the specified element. + * @param element + */ + selectElement : function( element ) + { + if ( this.isLocked ) + { + var range = new CKEDITOR.dom.range( this.document ); + range.setStartBefore( element ); + range.setEndAfter( element ); + + this._.cache.selectedElement = element; + this._.cache.startElement = element; + this._.cache.ranges = new CKEDITOR.dom.rangeList( range ); + this._.cache.type = CKEDITOR.SELECTION_ELEMENT; + + return; + } + + range = new CKEDITOR.dom.range( element.getDocument() ); + range.setStartBefore( element ); + range.setEndAfter( element ); + range.select(); + + this.document.fire( 'selectionchange' ); + this.reset(); + + }, + + /** + * Adding the specified ranges to document selection preceding + * by clearing up the original selection. + * @param {CKEDITOR.dom.range} ranges + */ + selectRanges : function( ranges ) + { + if ( this.isLocked ) + { + this._.cache.selectedElement = null; + this._.cache.startElement = ranges[ 0 ] && ranges[ 0 ].getTouchedStartNode(); + this._.cache.ranges = new CKEDITOR.dom.rangeList( ranges ); + this._.cache.type = CKEDITOR.SELECTION_TEXT; + + return; + } + + if ( CKEDITOR.env.ie ) + { + if ( ranges.length > 1 ) + { + // IE doesn't accept multiple ranges selection, so we join all into one. + var last = ranges[ ranges.length -1 ] ; + ranges[ 0 ].setEnd( last.endContainer, last.endOffset ); + ranges.length = 1; + } + + if ( ranges[ 0 ] ) + ranges[ 0 ].select(); + + this.reset(); + } + else + { + var sel = this.getNative(); + + // getNative() returns null if iframe is "display:none" in FF. (#6577) + if ( !sel ) + return; + + if ( ranges.length ) + { + sel.removeAllRanges(); + // Remove any existing filling char first. + CKEDITOR.env.webkit && removeFillingChar( this.document ); + } + + for ( var i = 0 ; i < ranges.length ; i++ ) + { + // Joining sequential ranges introduced by + // readonly elements protection. + if ( i < ranges.length -1 ) + { + var left = ranges[ i ], right = ranges[ i +1 ], + between = left.clone(); + between.setStart( left.endContainer, left.endOffset ); + between.setEnd( right.startContainer, right.startOffset ); + + // Don't confused by Firefox adjancent multi-ranges + // introduced by table cells selection. + if ( !between.collapsed ) + { + between.shrink( CKEDITOR.NODE_ELEMENT, true ); + var ancestor = between.getCommonAncestor(), + enclosed = between.getEnclosedNode(); + + // The following cases has to be considered: + // 1. <span contenteditable="false">[placeholder]</span> + // 2. <input contenteditable="false" type="radio"/> (#6621) + if ( ancestor.isReadOnly() || enclosed && enclosed.isReadOnly() ) + { + right.setStart( left.startContainer, left.startOffset ); + ranges.splice( i--, 1 ); + continue; + } + } + } + + var range = ranges[ i ]; + var nativeRange = this.document.$.createRange(); + var startContainer = range.startContainer; + + // In FF2, if we have a collapsed range, inside an empty + // element, we must add something to it otherwise the caret + // will not be visible. + // In Opera instead, the selection will be moved out of the + // element. (#4657) + if ( range.collapsed && + ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) ) && + startContainer.type == CKEDITOR.NODE_ELEMENT && + !startContainer.getChildCount() ) + { + startContainer.appendText( '' ); + } + + if ( range.collapsed + && CKEDITOR.env.webkit + && rangeRequiresFix( range ) ) + { + // Append a zero-width space so WebKit will not try to + // move the selection by itself (#1272). + var fillingChar = createFillingChar( this.document ); + range.insertNode( fillingChar ) ; + + var next = fillingChar.getNext(); + + // If the filling char is followed by a <br>, whithout + // having something before it, it'll not blink. + // Let's remove it in this case. + if ( next && !fillingChar.getPrevious() && next.type == CKEDITOR.NODE_ELEMENT && next.getName() == 'br' ) + { + removeFillingChar( this.document ); + range.moveToPosition( next, CKEDITOR.POSITION_BEFORE_START ); + } + else + range.moveToPosition( fillingChar, CKEDITOR.POSITION_AFTER_END ); + } + + nativeRange.setStart( range.startContainer.$, range.startOffset ); + + try + { + nativeRange.setEnd( range.endContainer.$, range.endOffset ); + } + catch ( e ) + { + // There is a bug in Firefox implementation (it would be too easy + // otherwise). The new start can't be after the end (W3C says it can). + // So, let's create a new range and collapse it to the desired point. + if ( e.toString().indexOf( 'NS_ERROR_ILLEGAL_VALUE' ) >= 0 ) + { + range.collapse( 1 ); + nativeRange.setEnd( range.endContainer.$, range.endOffset ); + } + else + throw e; + } + + // Select the range. + sel.addRange( nativeRange ); + } + + this.reset(); + } + }, + + /** + * Create bookmark for every single of this selection range (from #getRanges) + * by calling the {@link CKEDITOR.dom.range.prototype.createBookmark} method, + * with extra cares to avoid interferon among those ranges. Same arguments are + * received as with the underlay range method. + */ + createBookmarks : function( serializable ) + { + return this.getRanges().createBookmarks( serializable ); + }, + + /** + * Create bookmark for every single of this selection range (from #getRanges) + * by calling the {@link CKEDITOR.dom.range.prototype.createBookmark2} method, + * with extra cares to avoid interferon among those ranges. Same arguments are + * received as with the underlay range method. + */ + createBookmarks2 : function( normalized ) + { + return this.getRanges().createBookmarks2( normalized ); + }, + + /** + * Select the virtual ranges denote by the bookmarks by calling #selectRanges. + * @param bookmarks + */ + selectBookmarks : function( bookmarks ) + { + var ranges = []; + for ( var i = 0 ; i < bookmarks.length ; i++ ) + { + var range = new CKEDITOR.dom.range( this.document ); + range.moveToBookmark( bookmarks[i] ); + ranges.push( range ); + } + this.selectRanges( ranges ); + return this; + }, + + /** + * Retrieve the common ancestor node of the first range and the last range. + */ + getCommonAncestor : function() + { + var ranges = this.getRanges(), + startNode = ranges[ 0 ].startContainer, + endNode = ranges[ ranges.length - 1 ].endContainer; + return startNode.getCommonAncestor( endNode ); + }, + + /** + * Moving scroll bar to the current selection's start position. + */ + scrollIntoView : function() + { + // If we have split the block, adds a temporary span at the + // range position and scroll relatively to it. + var start = this.getStartElement(); + start.scrollIntoView(); + } + }; +})(); + +( function() +{ + var notWhitespaces = CKEDITOR.dom.walker.whitespaces( true ), + fillerTextRegex = /\ufeff|\u00a0/, + nonCells = { table:1,tbody:1,tr:1 }; + + CKEDITOR.dom.range.prototype.select = + CKEDITOR.env.ie ? + // V2 + function( forceExpand ) + { + var collapsed = this.collapsed, + isStartMarkerAlone, dummySpan, ieRange; + + // Try to make a object selection. + var selected = this.getEnclosedNode(); + if ( selected ) + { + try + { + ieRange = this.document.$.body.createControlRange(); + ieRange.addElement( selected.$ ); + ieRange.select(); + return; + } + catch( er ) {} + } + + // IE doesn't support selecting the entire table row/cell, move the selection into cells, e.g. + // <table><tbody><tr>[<td>cell</b></td>... => <table><tbody><tr><td>[cell</td>... + if ( this.startContainer.type == CKEDITOR.NODE_ELEMENT && this.startContainer.getName() in nonCells + || this.endContainer.type == CKEDITOR.NODE_ELEMENT && this.endContainer.getName() in nonCells ) + { + this.shrink( CKEDITOR.NODE_ELEMENT, true ); + } + + var bookmark = this.createBookmark(); + + // Create marker tags for the start and end boundaries. + var startNode = bookmark.startNode; + + var endNode; + if ( !collapsed ) + endNode = bookmark.endNode; + + // Create the main range which will be used for the selection. + ieRange = this.document.$.body.createTextRange(); + + // Position the range at the start boundary. + ieRange.moveToElementText( startNode.$ ); + ieRange.moveStart( 'character', 1 ); + + if ( endNode ) + { + // Create a tool range for the end. + var ieRangeEnd = this.document.$.body.createTextRange(); + + // Position the tool range at the end. + ieRangeEnd.moveToElementText( endNode.$ ); + + // Move the end boundary of the main range to match the tool range. + ieRange.setEndPoint( 'EndToEnd', ieRangeEnd ); + ieRange.moveEnd( 'character', -1 ); + } + else + { + // The isStartMarkerAlone logic comes from V2. It guarantees that the lines + // will expand and that the cursor will be blinking on the right place. + // Actually, we are using this flag just to avoid using this hack in all + // situations, but just on those needed. + var next = startNode.getNext( notWhitespaces ); + isStartMarkerAlone = ( !( next && next.getText && next.getText().match( fillerTextRegex ) ) // already a filler there? + && ( forceExpand || !startNode.hasPrevious() || ( startNode.getPrevious().is && startNode.getPrevious().is( 'br' ) ) ) ); + + // Append a temporary <span></span> before the selection. + // This is needed to avoid IE destroying selections inside empty + // inline elements, like <b></b> (#253). + // It is also needed when placing the selection right after an inline + // element to avoid the selection moving inside of it. + dummySpan = this.document.createElement( 'span' ); + dummySpan.setHtml( '' ); // Zero Width No-Break Space (U+FEFF). See #1359. + dummySpan.insertBefore( startNode ); + + if ( isStartMarkerAlone ) + { + // To expand empty blocks or line spaces after <br>, we need + // instead to have any char, which will be later deleted using the + // selection. + // \ufeff = Zero Width No-Break Space (U+FEFF). (#1359) + this.document.createText( '\ufeff' ).insertBefore( startNode ); + } + } + + // Remove the markers (reset the position, because of the changes in the DOM tree). + this.setStartBefore( startNode ); + startNode.remove(); + + if ( collapsed ) + { + if ( isStartMarkerAlone ) + { + // Move the selection start to include the temporary \ufeff. + ieRange.moveStart( 'character', -1 ); + + ieRange.select(); + + // Remove our temporary stuff. + this.document.$.selection.clear(); + } + else + ieRange.select(); + + this.moveToPosition( dummySpan, CKEDITOR.POSITION_BEFORE_START ); + dummySpan.remove(); + } + else + { + this.setEndBefore( endNode ); + endNode.remove(); + ieRange.select(); + } + + this.document.fire( 'selectionchange' ); + } + : + function() + { + this.document.getSelection().selectRanges( [ this ] ); + }; +} )(); diff --git a/_source/plugins/showblocks/images/block_address.png b/_source/plugins/showblocks/images/block_address.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee67aa245f0120d51f2f38edaee70f14b10570e GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^IzY_N!3-o<B;8#Nq}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMK7AWs*^5RHjfCs=bGFyJ}5<ahioXP*!1vPLBt988bf1^M;m;@blc zI5n|(?Wq68^!>rCi$0g;Eiyc$vVI-oU!%8itj<4<T5@^hww&JCyLw)|XdT1lD@=xm Tl($X+n$F<q>gTe~DWM4flGr|! literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_blockquote.png b/_source/plugins/showblocks/images/block_blockquote.png new file mode 100644 index 0000000000000000000000000000000000000000..cae3aec621af5da1a22171d6c955a06d45e03344 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?p!3-puF6poUDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&i#?!?yMC1I~N#1-6iX6`I@9SSieh55%L@`H3tj*1vyXn?JTP=h1 zq7yq#inQ1U$#A%{JZas0Y|*Yj-<?jXqFN!Js{`Ijt^0n;=3wrjJiDj}wL8DRpP$+w cua~4Rcg2_KHg{&bDbOAUPgg&ebxsLQ0Bi(6<NyEw literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_div.png b/_source/plugins/showblocks/images/block_div.png new file mode 100644 index 0000000000000000000000000000000000000000..c71f397880c27eec92878c76a39ba29fdc8c79c0 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{g!3-pAT1p~;6kC8#h-*Vb!~g&PpI_@;0~BE@ z3Gxg6&+v4+fftac@9E+gA`zaPaD+|5Lo_uZfx%ev0aHK|<7$lvp4}QDO%pUWUChX9 gu%40<AE3g;uyH-3ghgPg5l}0Gr>mdKI;Vst0CM~$$^ZZW literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_h1.png b/_source/plugins/showblocks/images/block_h1.png new file mode 100644 index 0000000000000000000000000000000000000000..3a64347350e5a48d2702f2fc4d436dfb5524b3a8 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?&C|s(MB;LCf(tv(kuC#=47L(MHnu%k5)vC;DY>yMnpz<~Nr#D{ Y!iwS9`#nLcfI1jFUHx3vIVCg!04>HO?EnA( literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_h2.png b/_source/plugins/showblocks/images/block_h2.png new file mode 100644 index 0000000000000000000000000000000000000000..8062ebe8e4b80bfae9dba6f1cbc84b7c2b555976 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?*VDx@L?S#n!G)dYNSA?w0P`#k=BC3P2N_qUJBT-4c=7DO8doF9 fNNuhK(>NH)c^ICE+osk7H8Oa*`njxgN@xNASv4n& literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_h3.png b/_source/plugins/showblocks/images/block_h3.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6a4030284aace8cfa05e67b37966b86355b2aa GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?%hSa%L?S#n!G)dYNSA?w0P`#k=BC3P2N_qUA6V8c*n1$0Z<C&g bgRUS$*%5{({`T3yKwS);u6{1-oD!M<)Ws%G literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_h4.png b/_source/plugins/showblocks/images/block_h4.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7f7951d492342590e22863facc85e94e0b79e1 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&V!3-qtMdT|0DYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?$J50zL?S#n;RplI5pF|=3^ukBMK(7kCkKYhy=%G{bsE!bmPKkf dt!S9##L&E&;e&1D*BGEa22WQ%mvv4FO#lL=CawSg literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_h5.png b/_source/plugins/showblocks/images/block_h5.png new file mode 100644 index 0000000000000000000000000000000000000000..e153de09988a289dff08d61d489c3c7338b593c9 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?$J50zL?S#n!G)dYNS8r_0JFe?&V=A*6{bgq3QHsnEjWrVTveFe e%(Oz4iJ@cy!$Tj3Ri}XZ7(8A5T-G@yGywnxt0t@f literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_h6.png b/_source/plugins/showblocks/images/block_h6.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d993a9d238e58a8116cc24120c3769f6e239fa GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?!_&nvL}F@kf(tv(kuC!V0p?j8%uUS#jzP>U3QZERJQZ)0&Yxv* ZVJKb9@F*b4cN0(#gQu&X%Q~loCICblBq#s? literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_p.png b/_source/plugins/showblocks/images/block_p.png new file mode 100644 index 0000000000000000000000000000000000000000..4e6035d209b9821cb749ae4dfae48b560cd5e385 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm<3?w=JZgmAxYymzYt_=+h|NsAgeyw*6P=u)@ z$S?Rm!_(~sUO=9lr;B3<M|5(63mZ>M1&>3+5$Ci8pAABUjyE$GRWf)gF>JMO?|24O O$>8bg=d#Wzp$PysVj{=@ literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/images/block_pre.png b/_source/plugins/showblocks/images/block_pre.png new file mode 100644 index 0000000000000000000000000000000000000000..d11a0fffbe66e209b8db4b1ef18ce95960743114 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^VnEE#!3-p?Z$2Ldq}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMIneNPw15Q*^Qgd<!M9^z>U2@V209Ek!=f;}v)6L}p2dBgj&IOGy1 g@NDunVAO48-1Co7KKYsRW1v<BPgg&ebxsLQ0INhNBme*a literal 0 HcmV?d00001 diff --git a/_source/plugins/showblocks/plugin.js b/_source/plugins/showblocks/plugin.js new file mode 100644 index 0000000..6107cdf --- /dev/null +++ b/_source/plugins/showblocks/plugin.js @@ -0,0 +1,160 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "showblocks" plugin. Enable it will make all block level + * elements being decorated with a border and the element name + * displayed on the left-right corner. + */ + +(function() +{ + var cssTemplate = '.%2 p,'+ + '.%2 div,'+ + '.%2 pre,'+ + '.%2 address,'+ + '.%2 blockquote,'+ + '.%2 h1,'+ + '.%2 h2,'+ + '.%2 h3,'+ + '.%2 h4,'+ + '.%2 h5,'+ + '.%2 h6'+ + '{'+ + 'background-repeat: no-repeat;'+ + 'background-position: top %3;'+ + 'border: 1px dotted gray;'+ + 'padding-top: 8px;'+ + 'padding-%3: 8px;'+ + '}'+ + + '.%2 p'+ + '{'+ + '%1p.png);'+ + '}'+ + + '.%2 div'+ + '{'+ + '%1div.png);'+ + '}'+ + + '.%2 pre'+ + '{'+ + '%1pre.png);'+ + '}'+ + + '.%2 address'+ + '{'+ + '%1address.png);'+ + '}'+ + + '.%2 blockquote'+ + '{'+ + '%1blockquote.png);'+ + '}'+ + + '.%2 h1'+ + '{'+ + '%1h1.png);'+ + '}'+ + + '.%2 h2'+ + '{'+ + '%1h2.png);'+ + '}'+ + + '.%2 h3'+ + '{'+ + '%1h3.png);'+ + '}'+ + + '.%2 h4'+ + '{'+ + '%1h4.png);'+ + '}'+ + + '.%2 h5'+ + '{'+ + '%1h5.png);'+ + '}'+ + + '.%2 h6'+ + '{'+ + '%1h6.png);'+ + '}'; + + var cssTemplateRegex = /%1/g, cssClassRegex = /%2/g, backgroundPositionRegex = /%3/g; + + var commandDefinition = + { + readOnly : 1, + preserveState : true, + editorFocus : false, + + exec : function ( editor ) + { + this.toggleState(); + this.refresh( editor ); + }, + + refresh : function( editor ) + { + if ( editor.document ) + { + var funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'addClass' : 'removeClass'; + editor.document.getBody()[ funcName ]( 'cke_show_blocks' ); + } + } + }; + + CKEDITOR.plugins.add( 'showblocks', + { + requires : [ 'wysiwygarea' ], + + init : function( editor ) + { + var command = editor.addCommand( 'showblocks', commandDefinition ); + command.canUndo = false; + + if ( editor.config.startupOutlineBlocks ) + command.setState( CKEDITOR.TRISTATE_ON ); + + editor.addCss( cssTemplate + .replace( cssTemplateRegex, 'background-image: url(' + CKEDITOR.getUrl( this.path ) + 'images/block_' ) + .replace( cssClassRegex, 'cke_show_blocks ' ) + .replace( backgroundPositionRegex, editor.lang.dir == 'rtl' ? 'right' : 'left' ) ); + + editor.ui.addButton( 'ShowBlocks', + { + label : editor.lang.showBlocks, + command : 'showblocks' + }); + + // Refresh the command on setData. + editor.on( 'mode', function() + { + if ( command.state != CKEDITOR.TRISTATE_DISABLED ) + command.refresh( editor ); + }); + + // Refresh the command on setData. + editor.on( 'contentDom', function() + { + if ( command.state != CKEDITOR.TRISTATE_DISABLED ) + command.refresh( editor ); + }); + } + }); +} )(); + +/** + * Whether to automaticaly enable the "show block" command when the editor + * loads. (StartupShowBlocks in FCKeditor) + * @name CKEDITOR.config.startupOutlineBlocks + * @type Boolean + * @default false + * @example + * config.startupOutlineBlocks = true; + */ diff --git a/_source/plugins/showborders/plugin.js b/_source/plugins/showborders/plugin.js new file mode 100644 index 0000000..dc924e1 --- /dev/null +++ b/_source/plugins/showborders/plugin.js @@ -0,0 +1,207 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "show border" plugin. The command display visible outline + * border line around all table elements if table doesn't have a none-zero 'border' attribute specified. + */ + +(function() +{ + var showBorderClassName = 'cke_show_border', + cssStyleText, + cssTemplate = + // TODO: For IE6, we don't have child selector support, + // where nested table cells could be incorrect. + ( CKEDITOR.env.ie6Compat ? + [ + '.%1 table.%2,', + '.%1 table.%2 td, .%1 table.%2 th', + '{', + 'border : #d3d3d3 1px dotted', + '}' + ] : + [ + '.%1 table.%2,', + '.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,', + '.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,', + '.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,', + '.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th', + '{', + 'border : #d3d3d3 1px dotted', + '}' + ] ).join( '' ); + + cssStyleText = cssTemplate.replace( /%2/g, showBorderClassName ).replace( /%1/g, 'cke_show_borders ' ); + + var commandDefinition = + { + preserveState : true, + editorFocus : false, + readOnly: 1, + + exec : function ( editor ) + { + this.toggleState(); + this.refresh( editor ); + }, + + refresh : function( editor ) + { + if ( editor.document ) + { + var funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'addClass' : 'removeClass'; + editor.document.getBody()[ funcName ]( 'cke_show_borders' ); + } + } + }; + + CKEDITOR.plugins.add( 'showborders', + { + requires : [ 'wysiwygarea' ], + modes : { 'wysiwyg' : 1 }, + + init : function( editor ) + { + + var command = editor.addCommand( 'showborders', commandDefinition ); + command.canUndo = false; + + if ( editor.config.startupShowBorders !== false ) + command.setState( CKEDITOR.TRISTATE_ON ); + + editor.addCss( cssStyleText ); + + // Refresh the command on setData. + editor.on( 'mode', function() + { + if ( command.state != CKEDITOR.TRISTATE_DISABLED ) + command.refresh( editor ); + }, null, null, 100 ); + + // Refresh the command on wysiwyg frame reloads. + editor.on( 'contentDom', function() + { + if ( command.state != CKEDITOR.TRISTATE_DISABLED ) + command.refresh( editor ); + }); + + editor.on( 'removeFormatCleanup', function( evt ) + { + var element = evt.data; + if ( editor.getCommand( 'showborders' ).state == CKEDITOR.TRISTATE_ON && + element.is( 'table' ) && ( !element.hasAttribute( 'border' ) || parseInt( element.getAttribute( 'border' ), 10 ) <= 0 ) ) + element.addClass( showBorderClassName ); + }); + }, + + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( dataFilter ) + { + dataFilter.addRules( + { + elements : + { + 'table' : function( element ) + { + var attributes = element.attributes, + cssClass = attributes[ 'class' ], + border = parseInt( attributes.border, 10 ); + + if ( !border || border <= 0 ) + attributes[ 'class' ] = ( cssClass || '' ) + ' ' + showBorderClassName; + } + } + } ); + } + + if ( htmlFilter ) + { + htmlFilter.addRules( + { + elements : + { + 'table' : function( table ) + { + var attributes = table.attributes, + cssClass = attributes[ 'class' ]; + + cssClass && ( attributes[ 'class' ] = + cssClass.replace( showBorderClassName, '' ) + .replace( /\s{2}/, ' ' ) + .replace( /^\s+|\s+$/, '' ) ); + } + } + } ); + } + } + }); + + // Table dialog must be aware of it. + CKEDITOR.on( 'dialogDefinition', function( ev ) + { + var dialogName = ev.data.name; + + if ( dialogName == 'table' || dialogName == 'tableProperties' ) + { + var dialogDefinition = ev.data.definition, + infoTab = dialogDefinition.getContents( 'info' ), + borderField = infoTab.get( 'txtBorder' ), + originalCommit = borderField.commit; + + borderField.commit = CKEDITOR.tools.override( originalCommit, function( org ) + { + return function( data, selectedTable ) + { + org.apply( this, arguments ); + var value = parseInt( this.getValue(), 10 ); + selectedTable[ ( !value || value <= 0 ) ? 'addClass' : 'removeClass' ]( showBorderClassName ); + }; + } ); + + var advTab = dialogDefinition.getContents( 'advanced' ), + classField = advTab && advTab.get( 'advCSSClasses' ); + + if ( classField ) + { + classField.setup = CKEDITOR.tools.override( classField.setup, function( originalSetup ) + { + return function() + { + originalSetup.apply( this, arguments ); + this.setValue( this.getValue().replace( /cke_show_border/, '' ) ); + }; + }); + + classField.commit = CKEDITOR.tools.override( classField.commit, function( originalCommit ) + { + return function( data, element ) + { + originalCommit.apply( this, arguments ); + + if ( !parseInt( element.getAttribute( 'border' ), 10 ) ) + element.addClass( 'cke_show_border' ); + }; + }); + } + } + }); + +} )(); + +/** + * Whether to automatically enable the "show borders" command when the editor loads. + * (ShowBorders in FCKeditor) + * @name CKEDITOR.config.startupShowBorders + * @type Boolean + * @default true + * @example + * config.startupShowBorders = false; + */ diff --git a/_source/plugins/smiley/dialogs/smiley.js b/_source/plugins/smiley/dialogs/smiley.js new file mode 100644 index 0000000..d9628a0 --- /dev/null +++ b/_source/plugins/smiley/dialogs/smiley.js @@ -0,0 +1,224 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'smiley', function( editor ) +{ + var config = editor.config, + lang = editor.lang.smiley, + images = config.smiley_images, + columns = config.smiley_columns || 8, + i; + + /** + * Simulate "this" of a dialog for non-dialog events. + * @type {CKEDITOR.dialog} + */ + var dialog; + var onClick = function( evt ) + { + var target = evt.data.getTarget(), + targetName = target.getName(); + + if ( targetName == 'a' ) + target = target.getChild( 0 ); + else if ( targetName != 'img' ) + return; + + var src = target.getAttribute( 'cke_src' ), + title = target.getAttribute( 'title' ); + + var img = editor.document.createElement( 'img', + { + attributes : + { + src : src, + 'data-cke-saved-src' : src, + title : title, + alt : title, + width : target.$.width, + height : target.$.height + } + }); + + editor.insertElement( img ); + + dialog.hide(); + evt.data.preventDefault(); + }; + + var onKeydown = CKEDITOR.tools.addFunction( function( ev, element ) + { + ev = new CKEDITOR.dom.event( ev ); + element = new CKEDITOR.dom.element( element ); + var relative, nodeToMove; + + var keystroke = ev.getKeystroke(), + rtl = editor.lang.dir == 'rtl'; + switch ( keystroke ) + { + // UP-ARROW + case 38 : + // relative is TR + if ( ( relative = element.getParent().getParent().getPrevious() ) ) + { + nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] ); + nodeToMove.focus(); + } + ev.preventDefault(); + break; + // DOWN-ARROW + case 40 : + // relative is TR + if ( ( relative = element.getParent().getParent().getNext() ) ) + { + nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] ); + if ( nodeToMove ) + nodeToMove.focus(); + } + ev.preventDefault(); + break; + // ENTER + // SPACE + case 32 : + onClick( { data: ev } ); + ev.preventDefault(); + break; + + // RIGHT-ARROW + case rtl ? 37 : 39 : + // TAB + case 9 : + // relative is TD + if ( ( relative = element.getParent().getNext() ) ) + { + nodeToMove = relative.getChild( 0 ); + nodeToMove.focus(); + ev.preventDefault(true); + } + // relative is TR + else if ( ( relative = element.getParent().getParent().getNext() ) ) + { + nodeToMove = relative.getChild( [0, 0] ); + if ( nodeToMove ) + nodeToMove.focus(); + ev.preventDefault(true); + } + break; + + // LEFT-ARROW + case rtl ? 39 : 37 : + // SHIFT + TAB + case CKEDITOR.SHIFT + 9 : + // relative is TD + if ( ( relative = element.getParent().getPrevious() ) ) + { + nodeToMove = relative.getChild( 0 ); + nodeToMove.focus(); + ev.preventDefault(true); + } + // relative is TR + else if ( ( relative = element.getParent().getParent().getPrevious() ) ) + { + nodeToMove = relative.getLast().getChild( 0 ); + nodeToMove.focus(); + ev.preventDefault(true); + } + break; + default : + // Do not stop not handled events. + return; + } + }); + + // Build the HTML for the smiley images table. + var labelId = CKEDITOR.tools.getNextId() + '_smiley_emtions_label'; + var html = + [ + '<div>' + + '<span id="' + labelId + '" class="cke_voice_label">' + lang.options +'</span>', + '<table role="listbox" aria-labelledby="' + labelId + '" style="width:100%;height:100%" cellspacing="2" cellpadding="2"', + CKEDITOR.env.ie && CKEDITOR.env.quirks ? ' style="position:absolute;"' : '', + '><tbody>' + ]; + + var size = images.length; + for ( i = 0 ; i < size ; i++ ) + { + if ( i % columns === 0 ) + html.push( '<tr>' ); + + var smileyLabelId = 'cke_smile_label_' + i + '_' + CKEDITOR.tools.getNextNumber(); + html.push( + '<td class="cke_dark_background cke_centered" style="vertical-align: middle;">' + + '<a href="javascript:void(0)" role="option"', + ' aria-posinset="' + ( i +1 ) + '"', + ' aria-setsize="' + size + '"', + ' aria-labelledby="' + smileyLabelId + '"', + ' class="cke_smile cke_hand" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">', + '<img class="cke_hand" title="', config.smiley_descriptions[i], '"' + + ' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '" alt="', config.smiley_descriptions[i], '"', + ' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"', + // IE BUG: Below is a workaround to an IE image loading bug to ensure the image sizes are correct. + ( CKEDITOR.env.ie ? ' onload="this.setAttribute(\'width\', 2); this.removeAttribute(\'width\');" ' : '' ), + '>' + + '<span id="' + smileyLabelId + '" class="cke_voice_label">' +config.smiley_descriptions[ i ] + '</span>' + + '</a>', + '</td>' ); + + if ( i % columns == columns - 1 ) + html.push( '</tr>' ); + } + + if ( i < columns - 1 ) + { + for ( ; i < columns - 1 ; i++ ) + html.push( '<td></td>' ); + html.push( '</tr>' ); + } + + html.push( '</tbody></table></div>' ); + + var smileySelector = + { + type : 'html', + id : 'smileySelector', + html : html.join( '' ), + onLoad : function( event ) + { + dialog = event.sender; + }, + focus : function() + { + var self = this; + // IE need a while to move the focus (#6539). + setTimeout( function () + { + var firstSmile = self.getElement().getElementsByTag( 'a' ).getItem( 0 ); + firstSmile.focus(); + }, 0 ); + }, + onClick : onClick, + style : 'width: 100%; border-collapse: separate;' + }; + + return { + title : editor.lang.smiley.title, + minWidth : 270, + minHeight : 120, + contents : [ + { + id : 'tab1', + label : '', + title : '', + expand : true, + padding : 0, + elements : [ + smileySelector + ] + } + ], + buttons : [ CKEDITOR.dialog.cancelButton ] + }; +} ); diff --git a/_source/plugins/smiley/images/angel_smile.gif b/_source/plugins/smiley/images/angel_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..2cf4894758f019612996cb5bd2a716e2a81ec1fc GIT binary patch literal 465 zcmV;?0WSVWNk%w1VH5xq0M$PL{lzEPm>m7K8Ln>^|JO!qF{At9X#BAx{?0`Dx;)aD zGyl~%>82e2z90Yp|NFit|Kn8uvlaW|lKt_;{Oh&;_t^j7P5=7m^4DGbv@HG3T-nEZ z{_mje&v%|^4Ex`GiCPT6P890YrTn}u`lurR{r3OPF8=-R|JrKb$CCfoC-ApP`tsxb z!Zp;hXZ5ii_qiX=v6}tKJo<Vm>gD&popkQ#;>n3v*QYSisZ#&!g!}sV{QLd?|NHch zEC2uhA^8LW002J#EC2ui02BZe000K=z@KnPEE<QDB!wesHjh8bWI7>kt{;i9a;a1( zsLX-1a&0<K;)GSYOe7r*N|F*WwM3C<ayebP6%$@dM;JLN6(=QaUlJM#g&ivg2N_}{ zl_Qiz7#IZwF%ud9H=isOBMlKm7zUp-4iYLgpFBMPszeY5HVzIwA1WO?z85CBL%TW? z6dwpC5FE@J$E!ma2rU2rCJO`$05A;=4-wWv7zqdq2nYlOG64#g=0z<D2{;NqJ~IO# z0S*WdV4;YG3?l-72*J?902l)c8nMveMF0;TKnxg25Xuh=5neC|z<{Gfk03*uJLj=w Hksts&wF%9u literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/angry_smile.gif b/_source/plugins/smiley/images/angry_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..40b52d3a77882c88197787fadaa201826fb95c1f GIT binary patch literal 443 zcmV;s0Yv^sNk%w1VH5xq0M$DH_m4mIZzS|)9r~w4>`o5$WfGM{2lt0F@K+f6dMW+1 zOZb&h_JTrrPz(8+Kk<PqyK_p#IRyE57nxNgYA~hzlrigXAc<NG_gxWmIG6hJ<J(FK z?s_Nvty=M2Bd1dl{{8&AVHx}S_}^e4`}XtOYAoST43J@&nrC*{$FJg44%0yf=-A7g zbuh7wpzCB9gh_Yq=;HqV{?4(Q%vv7wzH9gO@avId&r=ZQS`zV14FCWC0000000000 z00000A^8LW0027xEC2ui02BZe000Kqz@2bNEE<o<q)?$4446!%bKs~x1%d$5=>T}W z4-Zyb9DL7*ga9!v9srB@Hyv1Gi;P95*6|+F2?2EsWIJ6369xt$0308RiUJG_LjwyU zGA9%;2_6{~E;b|>1O$}}8X71R85Sd-HyR`e1Ok-@4-XX;2^J+5DjOR*2n7hYZwwC{ zBO!<r9|*+-l@$jJB@GQ17cDa>1~_$vI}!m2+6^%xARsIT8+Ani5)u~;6A=0kG$sWF l<b=?Bkz+-KgAqy*2sk9bKMWXXDP&mW-#>*)G8PE}06T|mq1*rf literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/broken_heart.gif b/_source/plugins/smiley/images/broken_heart.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6d0166a47735697f12678ffb1a08a1a7200968b GIT binary patch literal 192 zcmZ?wbhEHb6k!ly*v!qaMW5-RKhJG1uA`PLmmS$YHtM{qQh%MV@GMH`b&ABJ5WfHa z|1%%~#h)yU3=G^1Iv_ES84N7B1t&dM@3nZmz)4`Lq8#Vb$|eUN*X#)$C3RYcI%~PT zWqogKk9jz?<75ppLqg&SK|!v_Q_Ety++1HUv98hMODHgWwOC8N)5K}_3f@WSr=k`z j?0o3$&8|}U*w|FGP?9k}PO7Q7L!`31uYW?nAcHjkUg|+l literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/confused_smile.gif b/_source/plugins/smiley/images/confused_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..a52db7a4e5c61690dfd5e8485ef9eb0af1d69a68 GIT binary patch literal 464 zcmV;>0WbbXNk%w1VH5xq0M$PLyoVdum>K`mJOAZd|Ns1}b`|iZ7@KDe{^eu;vlaj1 zQvbFV|KLsk+erW4Q2)ar|Gyvp{qOj&8UOm{|KeAPS`7coEPYkF|JXtQ&N2JqlKbC% zYA~hz>$U&gN0)NF`?MMU=xWWo-u=#8{@q&o^5eay)c(aV^|2lQ?1cWe8UFX!|KCdP z=;Hpm9Os}I{?tSN<yH6f@b1Ag|NZv<@1Xav75>afrI6eI-c9(j9N*OK|JrK(@x{uN zF8}}kA^8LW002J#EC2ui02BZe000K<z@KnPEE<iCq$All5*bN_!m&&;oD2tLz@;d1 z4U6Sk%sLREF2jQnJjO+8WHPA@6dFyZv#~(p1UnZk5g`gPI3FbwJP>3*4k-i|92W#E zJuMs@9}yZ5e?pN2A|E0I2ptn97bX!K5D7yuAuBWy1QP-R8Y^=pH!iY53Ihxj8zdPR z7#SxcBPT8@!#@}-9tb2bySvg0DhmnK4j9=KGXMnuF98eh;*UQW83H~P6$SVe2R1ej z)r2s3@Swm810W0lI8Xrqhy?NkLO>xw0tgTi0vsp+5eq>b6f2I4XoR4+aRHsET*;D1 G5CA*YUCMv} literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/cry_smile.gif b/_source/plugins/smiley/images/cry_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ef6ba4fb5c4b06e3a9162a55c92623f547e8a09 GIT binary patch literal 468 zcmV;_0W1DTNk%w1VH5xq0M$PL|K(hjWDft}OxLF{{@g_W-%6==7W}#>`m-6;m>cM^ zE$OBl|Kd{rz8(Mn{{O@)|JFMF<YfP{6V1Ecy{FWDRl22++mK<ImvX&{S`7Z^YO#ZO z^Ugxd!t(OhUB8AC|G^lSYZ>jSHQ&dQ|Lk<w$FG`acCCp%$%$C-w@LrxR?(?a?!hzv z-%$V3G@NxX|LRQtw+#R8UD}&B?az0yjiCSZZ{fE(=-A8uz7qc3TKe+i^w(0mb4s~~ zBLDyYA^8LW002J#EC2ui02BZe000K@z@KnPEE<o<<WIm96rRc@LBOcCo&^C?0O)pA zSFE-uP-)H@fXYdLxLo5Q!%V72)&fHN@hCDh5gvj(1w0&wEC&Zf3;;Ga836$qHv^HA z3Jnc%05T&K6cs%nBNiAG7AqhiLn<&d6B8I0DG)j}6&)QEszU-E6CJZDECUN77pJ=$ zLj)zV7$`m=)CLF_7Z$NY922G{3MV)YB_RnS8_5$xu@)OK3L_2<J0}Jr2PPGuLKC4T z5<Z}qSHi#t1T!w|qtLHHg$)f71bA`cg*6Eh6jmT&!NP?c2ts6tgi*qej$0%w_+SuY KoG37Z0028eHOOKB literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/devil_smile.gif b/_source/plugins/smiley/images/devil_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..bfb25077de87204f3edacb9c492a329c80c9b5b5 GIT binary patch literal 436 zcmV;l0ZaZzNk%w1VH5xq0M$PLjZ+G0FQNa|IsV#6|HCHFmNEIcJpZ&6t9BLr_T~To z{{6lr%w8S-&O`p%R_Uf3{pD`|;7t9rBba6m|KwNxw;HEY5&XO^{<<Cg!Zpy47yrgC z{`c7TwHg1vAN;f|xrZYC$vpr4_RYKA<*_aQ{`>yB8UF8}*QYT5+G_9X_}RyL=D$Ge z%1ry;ef`c{=-A8m!y@#_Bmd4L_w@Py?1bmYV(f_}?az0ygLwV!z5mWJ`uYF*s3P&Y zG5`PnA^8LW002J#EC2ui02BZe000Kjz@KnPEE<nUqh*;CE-l1oQd(S2gqQ5a2~{o& zzECC$qAEcs)?gqYXqd+c0@NC8?u7gzVvIO&1{Y!<3j`8b7=1PY0XZiQB#a{>Iu(gT z6f2A>3N?`dJPI5hmqQdTBQy#n5Hc_dusR#1LKG<+A_));J0~0^2`{rn0}U5>GXiWe z7YiN>v_B384FU!RY#9Xw9}+zWMLQYSHvkOh784Q@7~n+&9~T+`^z<5*(Lxa(9uFD_ e03TF1aDY!76DBZpSV*v7lOGiZHgrcM2mm`bZN3Ho literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/embaressed_smile.gif b/_source/plugins/smiley/images/embaressed_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..d9cedc56bdb0cdd234679cceabafc9256bc2852c GIT binary patch literal 442 zcmV;r0Y&~tNk%w1VH5xq0M$PL_lh{u$ngEPD*xnD|JOSG_~`wy7uuK^{<j+X)>zrF zIRF3u{pV@_%qjlNH~;2b?db6S&P0@F6#w8&|J_GwFs1&x9{<=viCPT$s3Q24QTdxc zc~A@f@1XpYG5xJt|G^mlz7qfb`}(Un=D$Gu;*#gcV*m0_`lm$wv`f^pXRdb?_JTsn zlrH$OA-|n;?!hzu_t^i}C+DCT{p2>eha&X8YyaXv|Lju#?p^BCrT^M$``>;3)I<9D z|NsC0A^8LW002J#EC2ui02BZe000Kpz@KnPEE<cG<Y0L@5|hda^D=QJNrQ(rp-@n$ z#w13<U_5f9F^mAJJ|~Z|c`%_62#p4)cv4j=1tJ|cCVvnjC2d0!Cog|K3mr6m6^Ah) z2#Yv60Ran<GA02Kp9Pph0~8%1kRm$`JR+Znr$Q772_GLe5d=MW0wW$72${AN9~#Oj zy#x*@8yg+~07DcMC>ks*DGD_$0vpuSZnh)T8wVU57&93j!v;tc76Jn5><0!e83yHx k76Q6hfnkL{1pcf9EXL44LMK9s89?X|qQ#3Civ$4xJDD%WfB*mh literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/envelope.gif b/_source/plugins/smiley/images/envelope.gif new file mode 100644 index 0000000000000000000000000000000000000000..94e0b1fa59d04474bad8443fdc072c41f1fc905e GIT binary patch literal 426 zcmZ?wbhEHb6k!lyxT?YM?~>2||NrmL6nnlv;@|baw<}Hmyx#ilu+6JQI`22?JesZa zdbRw&Gaesz8UEN|{bgVFt@-l*&O7`)Y4dcW?*2C6Z`;-W|NZu1nZ)l$lm31@`eD20 zv;7ViCWv2OZg6Uf-oLw1k5@YU`t<nkA=9_#%m4lR_h)b5iyh|w|NR15%0LaE_>+Z^ zfkA^o2V@w?PYi6w9i|j`=t%XSc(P$ZfC!gYQep#x?ebHZ3sYY7adj|Wk*G^CTJE6G zaxg>SgQ8Poh0PU}t#$#P8g0ySY*}Jr)m02U^-fHje9cvCA&h(so!uHt>^$rf*tpr1 z#KqZJ7?_>;rcR6HTq?xP%q7ge!ikS_8V@t?(rFC5%*+Bz-rUnf**TXnu$(){bkvFU zIPcE=`<GpC*~85u-zmg%jzv&V_)-tI;JLF5LhPpmm@m5YzEzVwa`CGh7q_(9g~#Hm P!mL~}Tv|3lEDY8F&X|=- literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/heart.gif b/_source/plugins/smiley/images/heart.gif new file mode 100644 index 0000000000000000000000000000000000000000..680ae2fc1c73a1ede67a748912235a0026279ddd GIT binary patch literal 183 zcmZ?wbhEHb6k!ly*v!qaMW5-RKhJG1uA`PLmmS$YHtM{qQh%MV@GMH`b&ABJ5WfHa z|1%%~#h)yU3=G^1Iv_ES84N5b1t&dM@3qLz`Q;hBfTb}(bj3$SZci>I$AvFnO*1s~ zDOsr2A=tOzwkOY)_z$Ae3=EU|*mtzNoELC1aW^a1>~rd>j&32v4|R^N35e*9IP=2R bBm2VFA8He>=d0A!3uiU8wzW$NGFSrun#)1b literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/kiss.gif b/_source/plugins/smiley/images/kiss.gif new file mode 100644 index 0000000000000000000000000000000000000000..70e52551417b6d1c551a5217f837e71674118695 GIT binary patch literal 241 zcmZ?wbhEHb6k!lyI3mLEIz{4Hl+bQB)&qVbuk#gNPfR`*tN$p3?|iVp{RD;Gq3Zwt z|2q>Ucd|2Lcd^(1|9}4d{c}4@=iJ6wudXcp|NlP&A)xq^g^>Yhl@3TD$W8{<JO$Oh zl+1Y<tJdYb4sv8**x<8-(eO0`Kg;sNIUYTKJvJV2JdmO!z|*F<kmVXvN8_OjFU(}P zJ}9VpF$qmRp0u~YgQsg_sELZmyK;7C1Bp2)_J*7sKFn+u&YXh2?OINewLF}<#_SFH NGiJ`3t)$3c4FIalP?`V$ literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/lightbulb.gif b/_source/plugins/smiley/images/lightbulb.gif new file mode 100644 index 0000000000000000000000000000000000000000..d44c2ffe6a0ac0f4fdb9bd8bb2921d931ed6b8e9 GIT binary patch literal 368 zcmZ?wbhEHb6k!lyxT?!AJzMhkqr!hLvVK2G`MbsY=WP4`&yxS$jrw~oW@o$7#AN<| zM??O8Jo@{7ZI;2(FZ;5;_uIdonEY$C<^MM=Cp#nlyxv+Hy6g9&NfQ!hPA}S<Z|3mt zjK}}`0eJ?+Z_k(Cnr+_VS^j5l;QvSAB^J~F|Nr;z@B2Sf4F7$<@po<1zw3dgrs(}z z?($=Y_5c6>8OQ>PKUo+V7<3tQK)OMGVqoh%Fs;BtN2=dLnZbdFgQwT6&@*Kl6Z1ud zfC`?q#~7X;n!zEUlW!!DF~>t(ec^671256f3MTqm|H8{e+1c1QSh!hry}4YOm^nE7 z*;%wZJaw5gTiCfZ<T*XV<fOTawH7)hta1?)65w1JAL=TkCg3$gL{MagyM&~|J~uHw WvBR#)e0(QdWzV`wT{!E=U=0Ah#fCfp literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/omg_smile.gif b/_source/plugins/smiley/images/omg_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab7ea69968a82a3fc73b0a6b513928a244e3282d GIT binary patch literal 451 zcmV;!0X+UkNk%w1VH5xq0M$PLxrZVB<!Y8^68_y<{N<1T<5d3DHoBB`v7Ffc_t^jc z{{P)XlxnMwSa<u(GpTkKYcZq$=3D%<EdIM2|Jz6XwG;o~PXFUc|H~}?@1Xs(OZuxh z{qe=-zd--K649wriCPTWwLH*}7xdCg{?tSM)K1^WlIql@`lurOy;1z@wdmN(|KdP> zRl4rz;(1UD{mxwe{qdZ2F#Y5<+M74|^y>5R`}Y0+`I|r3$FJk5K;^M5``>-{xgXTC zXaE2IA^8LW002J#EC2ui02BZe000Kyz@KnPEE<c8i*k7+S{4+G)UvcRpPh)dFbZ`j z6Km1Zc|8IFZ3rYV7{W+PAfw8p0|Wx^Jwav^3NZ>93mJleFmOUi911oFEeA6`3<!W6 z9u-3i7L6+qpdSsOHwp=vn*{_a1Pl-j1|Og+96YFt1qD(REDk#k4j3C75)+z>7P%2z z0?h(6DJdEf$3F`sB@qK9ItMi-4-XpS6=Fgd6cHsGCxA5o0yrBL)j}2+7$hj|3NA7a tDCn6Rat}j~4<>RP5FkR}6$}$Z2w(%iVUu$h06d^q@1n<#Ab$h_06QGh!|nh8 literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/regular_smile.gif b/_source/plugins/smiley/images/regular_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..e5bc34be362f6774593dda685a0e6b6ddd963dfd GIT binary patch literal 450 zcmV;z0X_alNk%w1VH5xq0M$PL{pX9mh8O?kTd|Fx|L14_-c$LzC;#G7{k9tawif^Y z{{P}h|KCgh!y*6ONB`PJ|FRSQx*h+s75?v_iCPS5Fr|@W589s}|H~}=>$U#(*#F%_ zo@fmJ{`&Q?9skxn{>CQ%;#dFNJNC*n|NZv=z99SGeg4u+{{8&_&Lhx}7yso|{<|6f z&N1%6GyeVW^YQ!5yWaoULauid=-A8q;&J=_|9w@uy{FXw=SKh1H0HlRrI6c@VVRe5 zz5oCJA^8LW002J#EC2ui02BZe000Kxz@KnPEE<a&hVsEY5*wT3p}=518qS8}An1k; z)ho8BT@lWLZ}p>VjE9cUBr_ohz>dP?<bG}dFC7XRcOn`J3LSiJ4h|%U3MeLqkR2I) zLI)EhI2AFHDH$*~JT@8;5JLwm6FwC^84oEn0~HlC01*+Y0tE{>A{ZDT4Im>1x(KP6 zN)A=S4J9oy5eNwh%Rd4iTO%q93l0n30oM?3KOZd{I}`yI@BtJT5)j!!ZWu1|791A+ s$|Rt}7tO#73lu1Dh#)~=7B?j#c<|8Bp%a1)JlK<Pv7^V2MS=hTJE}a;<^TWy literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/sad_smile.gif b/_source/plugins/smiley/images/sad_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..ae4cf1e35ba6d509111883da5ecabe3e4b0a4e7a GIT binary patch literal 460 zcmV;-0W<zbNk%w1VH5xq0M$PL|HLN!=Zn*o8veQ*|Ns8~-c$eIOaHYN>82e1<zx7= z9RJ`=|Kd^qvJ?N#G5_61|FaeU=3S9v5B}(CYA~h$);#~>SN^^r|I$1E<XQjhbpP6F zbU2s)*g~FY49&aVnrC+KrWpU_RsGIf{qe>A)I<K#Oo>_y``>;3_t^gLp#T2*`tsxd z`seP!Gw9gMy{FXWu`QQt8Tqgk%9Jku(lr0uNB`R}v4eQ(<@f*n_VuwH{Oh&awLFw+ ztN;K1A^8LW002J#EC2ui02BZe000K*z@KnPEE<iA<ihZH9EnN>qrhw~o=Hn2lCdxh zHY;)wNldtw#iLVkIIhshM59S$zP3uuJ%U<VAQT`d5eq0d96cK*BXB<p69hgK6f6Y~ zFO(c98x9Ra3>qsrJ|6@(B?K@WA1j`pLLw771hpg%8!QAXD=8NPus;kL3nVQ(B^3z) zDk=dcz`+$v2?ZS(*ccT60|&1|6&()~7A`U;5)v^02N2$lKW-v45+3&G0s{~Y!9oTA z4g^R*5F!Ku2?7rAgC}IcfC0ZQTmZ0R#zHI?AV5%{;DE;l42@_U>G6rllPI4A0RTIR CY|IM) literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/shades_smile.gif b/_source/plugins/smiley/images/shades_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..b4540175035281da7afa2b185641392121bde669 GIT binary patch literal 449 zcmV;y0Y3gmNk%w1VH5xq0M$PL|JOpBY7_tCRQAI>sCF0s-c$eLK>y%O|K(f%(>vXq z8~*<O|FstXvlU4Yd0!!uoOLk&!5D-|cjw4rM;fDaIG6s$Ch@v4|L$FGFms7o4CcQ; z>&i_3>{9K|ci6|TYA~hLvuD4Zbm+J@|MYL#n>YX5JMO_VkYSmcXLio9n&YWJv4eR3 zvJ?Kd8S9=1|LIB5sZ#Ff;`Of-_q7?nh7<R>AN}Mu{<<Ca_3;1DGymH#@3AcNxg-1H zWdHyFA^8LW002J#EC2ui02BZe000Kwz@KnPEE<o<q)@;-I1kF-L4aTuo=)Tx!L16O z325;E!;nZAOa}%tn0DbJXX2?(?i|i$GaB)V6%P*%gn|_rgoGJlKN5n2gcTAMiHapd zAuJUXoFFk95}Xep5+xBs9X=u{C@3N(Hz6q!5-b-Hr$SR51$PDj0KY3MxD2^J31I>S z11BdJ7d<pHE({F~Lly}D2LT!o5CPyC1Ps=UKNdPV1S$*f3o_viE!ac{78W)HIq)9= rFX*Au)c}VA2r526Aa`xxkOS8g1PD;$S_6kgT4=0yEsDn>K>z?d7Ms3Y literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/teeth_smile.gif b/_source/plugins/smiley/images/teeth_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d734d15486da5ebf1286f634eac6773e7e6e297 GIT binary patch literal 442 zcmV;r0Y&~tNk%w1VH5xq0M$PLZZn^eV-Nq$H2&sg{N#rJ*+c%_TL1t5|K(f%wG{u= zJlU=`|NH9y!zcgZQUBmg|KCdfy&?bo_WbL$u6Gpw;#b(mudRtb_w@Py<yHIo_?c=I z|I#%7+G_pr#s0S$y{FW<ha!++neews-^Y@da=rPm74GQbnrC+R_3*Kcp!@do{?bhA zo(PFr4FBwO>#HCC#xCXE@_kjh|Nr~`@1V`Q-v8!N{?9<AklX0k%l+9;|G^ml-%tO` zEdT%iA^8LW002J#EC2ui02BZe000Kpz@KnPEE<iFWU^2=5+6y2qxWDI9!@9(!L3Y_ z4Qx?6C?mX(!LAW5CSNqk1mSoP<N~&PAfd%;4ju=C9X@SBNrE6Y7z_mmIWsaeEDZ@m z5E%?I001Bi3K*Rw2OT_@hzJuZogxGr6Cwa81PLFgKU)qNH#;K=1quormI=m~NfibK zI0`sEF%h@MxJx$+0omFC6x3ou5dsPe7bhAkDLNMcCdW?^4KM*3g9jEH-3i}A4-pX| kBrI6Cupxx8eeWVr2;gEvi-S&v`140CqQ#3Ci39-vI~tVBhyVZp literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/thumbs_down.gif b/_source/plugins/smiley/images/thumbs_down.gif new file mode 100644 index 0000000000000000000000000000000000000000..90b9978c094ab81dccd07022255ff4fd31c35f96 GIT binary patch literal 408 zcmZ?wbhEHb6k!lyxT?kQcZ>JGqalCx2Hu)&{_m2{+m)vO_Syf~Vg3J-^}q8DzgAoB zY*#upMep%ShexxO{+;o-FhTs)BAxp)#r~eOSywLddLGBG<t~d#B&TOf{=a5BF`0jV zoAB=qDj$|f{JY}(_gu{N<p%$*2mV^2^#7LYzq?V-7fAfM<@;xg&WG)u^D=n;|NqZG z8BqMm!pOj&#h?Q+2IMCOwyh3R3p{kB`dt_pDnqzf7_UrP$;83Y!oKa|45_IN4kubp z^f+`MyslZNBGAE7wNb)qp}bHcle-TeE4M^h0ApLEFsG!PFdMU`REs=g0Dm4Qr(6TG zxCD=r7(2UISU>~|BNr<dkJNlERzW^NE-tZFCN?D{zPVXin}iOj%F3`YunGxCi-@n^ zASl2mAbM4H)ftifA(v#-Sz|+7xfZcKa${zD_1u-2m7VvEGY>QG?N7|#Ke;<HSOWn3 Cp@Uff literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/thumbs_up.gif b/_source/plugins/smiley/images/thumbs_up.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6332848df0540a77f8c192a6174186e94f0a258 GIT binary patch literal 396 zcmZ?wbhEHb6k!lyxT?VL?`X)My@8KcI^3FVerk%|hwYxP7U{fQY5Hik($03JzgxWj zo{PD@+~Ds?n}6pW{vI;DFhTs^KKma#tY7RfUso>j?Xb<iGakQ|yZl;hxu`_)-zA@? z8+Gr`6nnPc;m;PGe^;FU|NqZGOQ86Zg^__lfk6jk3CK?jY%3im6nN-J^>!aB)Qr(# zVSXm~p~tJ6!NH+GS8r3RbNLPq5v56m2?_!tT5`=Mh8#EENAjiI)MMGy(7@rIn^)h+ zz{SqN!7T2~$&)K6#vm10-o@1KB*`PpBP!3wH+5zi*92xEQC>dYbz*{C5^QYj63)!b z?84Ig{JetfEbQBQik!HZcz6#8@vv};a0*=GIO)X7B)fn`MDhyD?wc;GtjsL0UM0VM J=jO;@4FGr*ZsY&} literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/tounge_smile.gif b/_source/plugins/smiley/images/tounge_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2e657fa323f04ac09ecbe2900ad1351c1e2367f GIT binary patch literal 446 zcmV;v0YUypNk%w1VH5xq0M$PL|K??uWe$s03;fzmx`!YC|Ni~574xeW|JFVC%|vT4 zqyM)X|N7;zO$-0!TmRrq?dbUayBYt@DF5P7|Jp^<K?eWgSO48Z|G^mk@1W0-9NM)! z=D$Gy<yHUw`gu?b|NZv->$UsharxLs|J_H$IRyT`Am5o5{qe=$$C7<jy5Ua@>#HB^ zi6!6E?f=d(=-A8j(o6sJTL0`)|JrK%;*$T^LjT`T|K?HUu`TGhH`vFo|I#$WTo0FP z8UO$PA^8LW002J#EC2ui02BZe000Ktz@KnPEE<cHq>^$ZJ}wu^Wb#NN9?j>(!L?8+ zh^z5w0hk?L5}1d<5}^zb2nFZ>7==OxgDKuU9(frKfq?}yZ9@+L1uhB-1t=K|5DF>~ zAqxwN02w=vAvFjhDUUEBCYwTw7C169F9<d~FA^9BCaH=R7B?da1Hl6cIRpeO5vo5A z4<sWS1RES2&^`eIC&@!$BrzHS9|6|_0U8Ge3vNPT9XbLf6(tQH1P1oXt6>Q}75xnX o=QOEP6sAQ#avGAQ%Yxv*3UL}VEo`z5frb+jDQeuvu}BaAJJJrr?*IS* literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/whatchutalkingabout_smile.gif b/_source/plugins/smiley/images/whatchutalkingabout_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..77098821c622975362f3afbc4e83a515f88dc814 GIT binary patch literal 452 zcmV;#0XzOjNk%w1VH5xq0M$PL|J6JG>WKH(QvS3R|Ns8~`se@JME>b>{mnA&s2cvt zSoXIj|KLrPXcqp$CH}@P|KwEv;Yt3t8UM>H_^=p>S`7X1#s2T0zlIa&xHtH+9QCms z{<<Ci>{4nlrMZV9%9Jke>-hWMee23h|JW-0>$U&RBbRc$&AZ<J?p=LVy8idr|K&`j zklWwX?f>*||G^mU!88B24FBIsqI4PYx-s|k`Tza%=D$Gy=3VE=V)f8O{?tRzkQe*n zWdHyFA^8LW002J#EC2ui02BZe000Kzz@KnPEE<o<<d4B*bUFs*l9_@qAW#DX$%qI* zpiye{0r4i=V%OVf=w7%A4KYC%Bay@Eb}L+R2NoqF01tN;1Oy=j79;^SE(A9v4{1Mm z1q3J_Dvbdr9w!6^4-!KWEEb6>Eg~i&As#4<4yHm85CIpv0RjjL76k<s3LG4#Rt5$D zBmm1MFat6J61JDl3_d$C8QnDr6x7wH69zLo4HfF^J>r%>69@n^86O`Q_!!_6)<O&u u4iGGRuwcUm4H~Mw^EZKm0|x~WCQ!&_0)>m=_(@o3#G=M=QbG<10suQ9l+BC) literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/images/wink_smile.gif b/_source/plugins/smiley/images/wink_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..b21029548f7d4b48f9a0237e7e89a075750a4abf GIT binary patch literal 458 zcmV;*0X6<dNk%w1VH5xq0M$PLm1h$ByCbD_7}%^d|Jz0X;#2<RWB<b<|K3Ue;Y<Jj z{{Fff|FjnW;7$M1JOAu-{<9eW);<2dKmN=}xrZWoPz(O(YHBd0(2y7Zw;cb@F^O6X z{<j&ei9Y}4UB8AC(Wz4OzH9&GO#k$6-_-5)(nbC8#q`ok@TM61wjKY@Bgu(akYSnT zzd--)UG=dYv4eR3z!m?}H0#Pt|KCvm?1cR5wfw^}@wzelv>E^0JL{_-^Ugy4&p`IW zJpcdyA^8LW002J#EC2ui02BZe000K(z@KnPEE<i8q+>Zb5*x`vp%Gy=oX~>D;Gq#B z8pq^XgeDA@hoNxd`EHYOF`0fmEG<E0Ly?K+1`joM4*(w_AulRRWIqWWBOm}BBL)~O zBnk>POA<o~b^`#D4J#KHnF>8Io<g7oCj|on5i_SSCMGuvtv?Y3E))VK2?PW>AO{OE z3mm->2qFU;!wA+60U6B>5JM3W1O^=y0?`BkI{^U<5RE??8WA`E<P;PD0_yB#2mKiI z8}MPsAwhyWAq@@$Sb*Zg2Mj0}FffSaK#CL@GH`&v@t~1@5;=BrLb9aEBS8QFJ3P3> AT>t<8 literal 0 HcmV?d00001 diff --git a/_source/plugins/smiley/plugin.js b/_source/plugins/smiley/plugin.js new file mode 100644 index 0000000..bde383b --- /dev/null +++ b/_source/plugins/smiley/plugin.js @@ -0,0 +1,94 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'smiley', +{ + requires : [ 'dialog' ], + + init : function( editor ) + { + editor.config.smiley_path = editor.config.smiley_path || ( this.path + 'images/' ); + editor.addCommand( 'smiley', new CKEDITOR.dialogCommand( 'smiley' ) ); + editor.ui.addButton( 'Smiley', + { + label : editor.lang.smiley.toolbar, + command : 'smiley' + }); + CKEDITOR.dialog.add( 'smiley', this.path + 'dialogs/smiley.js' ); + } +} ); + +/** + * The base path used to build the URL for the smiley images. It must end with + * a slash. + * @name CKEDITOR.config.smiley_path + * @type String + * @default {@link CKEDITOR.basePath} + 'plugins/smiley/images/' + * @example + * config.smiley_path = 'http://www.example.com/images/smileys/'; + * @example + * config.smiley_path = '/images/smileys/'; + */ + +/** + * The file names for the smileys to be displayed. These files must be + * contained inside the URL path defined with the + * {@link CKEDITOR.config.smiley_path} setting. + * @type Array + * @default (see example) + * @example + * // This is actually the default value. + * config.smiley_images = [ + * 'regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif', + * 'embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif', + * 'devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif', + * 'broken_heart.gif','kiss.gif','envelope.gif']; + */ +CKEDITOR.config.smiley_images = [ + 'regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif', + 'embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif', + 'devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif', + 'broken_heart.gif','kiss.gif','envelope.gif']; + +/** + * The description to be used for each of the smileys defined in the + * {@link CKEDITOR.config.smiley_images} setting. Each entry in this array list + * must match its relative pair in the {@link CKEDITOR.config.smiley_images} + * setting. + * @type Array + * @default The textual descriptions of smiley. + * @example + * // Default settings. + * config.smiley_descriptions = + * [ + * 'smiley', 'sad', 'wink', 'laugh', 'frown', 'cheeky', 'blush', 'surprise', + * 'indecision', 'angry', 'angel', 'cool', 'devil', 'crying', 'enlightened', 'no', + * 'yes', 'heart', 'broken heart', 'kiss', 'mail' + * ]; + * @example + * // Use textual emoticons as description. + * config.smiley_descriptions = + * [ + * ':)', ':(', ';)', ':D', ':/', ':P', ':*)', ':-o', + * ':|', '>:(', 'o:)', '8-)', '>:-)', ';(', '', '', '', + * '', '', ':-*', '' + * ]; + */ +CKEDITOR.config.smiley_descriptions = + [ + 'smiley', 'sad', 'wink', 'laugh', 'frown', 'cheeky', 'blush', 'surprise', + 'indecision', 'angry', 'angel', 'cool', 'devil', 'crying', 'enlightened', 'no', + 'yes', 'heart', 'broken heart', 'kiss', 'mail' + ]; + +/** + * The number of columns to be generated by the smilies matrix. + * @name CKEDITOR.config.smiley_columns + * @type Number + * @default 8 + * @since 3.3.2 + * @example + * config.smiley_columns = 6; + */ diff --git a/_source/plugins/sourcearea/plugin.js b/_source/plugins/sourcearea/plugin.js new file mode 100644 index 0000000..4e9e0da --- /dev/null +++ b/_source/plugins/sourcearea/plugin.js @@ -0,0 +1,209 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "sourcearea" plugin. It registers the "source" editing + * mode, which displays the raw data being edited in the editor. + */ + +CKEDITOR.plugins.add( 'sourcearea', +{ + requires : [ 'editingblock' ], + + init : function( editor ) + { + var sourcearea = CKEDITOR.plugins.sourcearea, + win = CKEDITOR.document.getWindow(); + + editor.on( 'editingBlockReady', function() + { + var textarea, + onResize; + + editor.addMode( 'source', + { + load : function( holderElement, data ) + { + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) + holderElement.setStyle( 'position', 'relative' ); + + // Create the source area <textarea>. + editor.textarea = textarea = new CKEDITOR.dom.element( 'textarea' ); + textarea.setAttributes( + { + dir : 'ltr', + tabIndex : CKEDITOR.env.webkit ? -1 : editor.tabIndex, + 'role' : 'textbox', + 'aria-label' : editor.lang.editorTitle.replace( '%1', editor.name ) + }); + textarea.addClass( 'cke_source' ); + textarea.addClass( 'cke_enable_context_menu' ); + + editor.readOnly && textarea.setAttribute( 'readOnly', 'readonly' ); + + var styles = + { + // IE7 has overflow the <textarea> from wrapping table cell. + width : CKEDITOR.env.ie7Compat ? '99%' : '100%', + height : '100%', + resize : 'none', + outline : 'none', + 'text-align' : 'left' + }; + + // Having to make <textarea> fixed sized to conque the following bugs: + // 1. The textarea height/width='100%' doesn't constraint to the 'td' in IE6/7. + // 2. Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor + // if text content within it has overflowed. (#4762) + if ( CKEDITOR.env.ie ) + { + onResize = function() + { + // Holder rectange size is stretched by textarea, + // so hide it just for a moment. + textarea.hide(); + textarea.setStyle( 'height', holderElement.$.clientHeight + 'px' ); + textarea.setStyle( 'width', holderElement.$.clientWidth + 'px' ); + // When we have proper holder size, show textarea again. + textarea.show(); + }; + + editor.on( 'resize', onResize ); + win.on( 'resize', onResize ); + setTimeout( onResize, 0 ); + } + + // Reset the holder element and append the + // <textarea> to it. + holderElement.setHtml( '' ); + holderElement.append( textarea ); + textarea.setStyles( styles ); + + editor.fire( 'ariaWidget', textarea ); + + textarea.on( 'blur', function() + { + editor.focusManager.blur(); + }); + + textarea.on( 'focus', function() + { + editor.focusManager.focus(); + }); + + // The editor data "may be dirty" after this point. + editor.mayBeDirty = true; + + // Set the <textarea> value. + this.loadData( data ); + + var keystrokeHandler = editor.keystrokeHandler; + if ( keystrokeHandler ) + keystrokeHandler.attach( textarea ); + + setTimeout( function() + { + editor.mode = 'source'; + editor.fire( 'mode' ); + }, + ( CKEDITOR.env.gecko || CKEDITOR.env.webkit ) ? 100 : 0 ); + }, + + loadData : function( data ) + { + textarea.setValue( data ); + editor.fire( 'dataReady' ); + }, + + getData : function() + { + return textarea.getValue(); + }, + + getSnapshotData : function() + { + return textarea.getValue(); + }, + + unload : function( holderElement ) + { + textarea.clearCustomData(); + editor.textarea = textarea = null; + + if ( onResize ) + { + editor.removeListener( 'resize', onResize ); + win.removeListener( 'resize', onResize ); + } + + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) + holderElement.removeStyle( 'position' ); + }, + + focus : function() + { + textarea.focus(); + } + }); + }); + + editor.on( 'readOnly', function() + { + if ( editor.mode == 'source' ) + { + if ( editor.readOnly ) + editor.textarea.setAttribute( 'readOnly', 'readonly' ); + else + editor.textarea.removeAttribute( 'readOnly' ); + } + }); + + editor.addCommand( 'source', sourcearea.commands.source ); + + if ( editor.ui.addButton ) + { + editor.ui.addButton( 'Source', + { + label : editor.lang.source, + command : 'source' + }); + } + + editor.on( 'mode', function() + { + editor.getCommand( 'source' ).setState( + editor.mode == 'source' ? + CKEDITOR.TRISTATE_ON : + CKEDITOR.TRISTATE_OFF ); + }); + } +}); + +/** + * Holds the definition of commands an UI elements included with the sourcearea + * plugin. + * @example + */ +CKEDITOR.plugins.sourcearea = +{ + commands : + { + source : + { + modes : { wysiwyg:1, source:1 }, + editorFocus : false, + readOnly : 1, + exec : function( editor ) + { + if ( editor.mode == 'wysiwyg' ) + editor.fire( 'saveSnapshot' ); + editor.getCommand( 'source' ).setState( CKEDITOR.TRISTATE_DISABLED ); + editor.setMode( editor.mode == 'source' ? 'wysiwyg' : 'source' ); + }, + + canUndo : false + } + } +}; diff --git a/_source/plugins/specialchar/dialogs/specialchar.js b/_source/plugins/specialchar/dialogs/specialchar.js new file mode 100644 index 0000000..6cc0845 --- /dev/null +++ b/_source/plugins/specialchar/dialogs/specialchar.js @@ -0,0 +1,350 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'specialchar', function( editor ) +{ + /** + * Simulate "this" of a dialog for non-dialog events. + * @type {CKEDITOR.dialog} + */ + var dialog, + lang = editor.lang.specialChar; + + var onChoice = function( evt ) + { + var target, value; + if ( evt.data ) + target = evt.data.getTarget(); + else + target = new CKEDITOR.dom.element( evt ); + + if ( target.getName() == 'a' && ( value = target.getChild( 0 ).getHtml() ) ) + { + target.removeClass( "cke_light_background" ); + dialog.hide(); + + // We must use "insertText" here to keep text styled. + var span = editor.document.createElement( 'span' ); + span.setHtml( value ); + editor.insertText( span.getText() ); + } + }; + + var onClick = CKEDITOR.tools.addFunction( onChoice ); + + var focusedNode; + + var onFocus = function( evt, target ) + { + var value; + target = target || evt.data.getTarget(); + + if ( target.getName() == 'span' ) + target = target.getParent(); + + if ( target.getName() == 'a' && ( value = target.getChild( 0 ).getHtml() ) ) + { + // Trigger blur manually if there is focused node. + if ( focusedNode ) + onBlur( null, focusedNode ); + + var htmlPreview = dialog.getContentElement( 'info', 'htmlPreview' ).getElement(); + + dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( value ); + htmlPreview.setHtml( CKEDITOR.tools.htmlEncode( value ) ); + target.getParent().addClass( "cke_light_background" ); + + // Memorize focused node. + focusedNode = target; + } + }; + + var onBlur = function( evt, target ) + { + target = target || evt.data.getTarget(); + + if ( target.getName() == 'span' ) + target = target.getParent(); + + if ( target.getName() == 'a' ) + { + dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( ' ' ); + dialog.getContentElement( 'info', 'htmlPreview' ).getElement().setHtml( ' ' ); + target.getParent().removeClass( "cke_light_background" ); + + focusedNode = undefined; + } + }; + + var onKeydown = CKEDITOR.tools.addFunction( function( ev ) + { + ev = new CKEDITOR.dom.event( ev ); + + // Get an Anchor element. + var element = ev.getTarget(); + var relative, nodeToMove; + var keystroke = ev.getKeystroke(), + rtl = editor.lang.dir == 'rtl'; + + switch ( keystroke ) + { + // UP-ARROW + case 38 : + // relative is TR + if ( ( relative = element.getParent().getParent().getPrevious() ) ) + { + nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] ); + nodeToMove.focus(); + onBlur( null, element ); + onFocus( null, nodeToMove ); + } + ev.preventDefault(); + break; + // DOWN-ARROW + case 40 : + // relative is TR + if ( ( relative = element.getParent().getParent().getNext() ) ) + { + nodeToMove = relative.getChild( [ element.getParent().getIndex(), 0 ] ); + if ( nodeToMove && nodeToMove.type == 1 ) + { + nodeToMove.focus(); + onBlur( null, element ); + onFocus( null, nodeToMove ); + } + } + ev.preventDefault(); + break; + // SPACE + // ENTER is already handled as onClick + case 32 : + onChoice( { data: ev } ); + ev.preventDefault(); + break; + + // RIGHT-ARROW + case rtl ? 37 : 39 : + // TAB + case 9 : + // relative is TD + if ( ( relative = element.getParent().getNext() ) ) + { + nodeToMove = relative.getChild( 0 ); + if ( nodeToMove.type == 1 ) + { + nodeToMove.focus(); + onBlur( null, element ); + onFocus( null, nodeToMove ); + ev.preventDefault( true ); + } + else + onBlur( null, element ); + } + // relative is TR + else if ( ( relative = element.getParent().getParent().getNext() ) ) + { + nodeToMove = relative.getChild( [ 0, 0 ] ); + if ( nodeToMove && nodeToMove.type == 1 ) + { + nodeToMove.focus(); + onBlur( null, element ); + onFocus( null, nodeToMove ); + ev.preventDefault( true ); + } + else + onBlur( null, element ); + } + break; + + // LEFT-ARROW + case rtl ? 39 : 37 : + // SHIFT + TAB + case CKEDITOR.SHIFT + 9 : + // relative is TD + if ( ( relative = element.getParent().getPrevious() ) ) + { + nodeToMove = relative.getChild( 0 ); + nodeToMove.focus(); + onBlur( null, element ); + onFocus( null, nodeToMove ); + ev.preventDefault( true ); + } + // relative is TR + else if ( ( relative = element.getParent().getParent().getPrevious() ) ) + { + nodeToMove = relative.getLast().getChild( 0 ); + nodeToMove.focus(); + onBlur( null, element ); + onFocus( null, nodeToMove ); + ev.preventDefault( true ); + } + else + onBlur( null, element ); + break; + default : + // Do not stop not handled events. + return; + } + }); + + return { + title : lang.title, + minWidth : 430, + minHeight : 280, + buttons : [ CKEDITOR.dialog.cancelButton ], + charColumns : 17, + onLoad : function() + { + var columns = this.definition.charColumns, + extraChars = editor.config.extraSpecialChars, + chars = editor.config.specialChars; + + var charsTableLabel = CKEDITOR.tools.getNextId() + '_specialchar_table_label'; + var html = [ '<table role="listbox" aria-labelledby="' + charsTableLabel + '"' + + ' style="width: 320px; height: 100%; border-collapse: separate;"' + + ' align="center" cellspacing="2" cellpadding="2" border="0">' ]; + + var i = 0, + size = chars.length, + character, + charDesc; + + while ( i < size ) + { + html.push( '<tr>' ) ; + + for ( var j = 0 ; j < columns ; j++, i++ ) + { + if ( ( character = chars[ i ] ) ) + { + charDesc = ''; + + if ( character instanceof Array ) + { + charDesc = character[ 1 ]; + character = character[ 0 ]; + } + else + { + var _tmpName = character.toLowerCase().replace( '&', '' ).replace( ';', '' ).replace( '#', '' ); + + // Use character in case description unavailable. + charDesc = lang[ _tmpName ] || character; + } + + var charLabelId = 'cke_specialchar_label_' + i + '_' + CKEDITOR.tools.getNextNumber(); + + html.push( + '<td class="cke_dark_background" style="cursor: default" role="presentation">' + + '<a href="javascript: void(0);" role="option"' + + ' aria-posinset="' + ( i +1 ) + '"', + ' aria-setsize="' + size + '"', + ' aria-labelledby="' + charLabelId + '"', + ' style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="', CKEDITOR.tools.htmlEncode( charDesc ), '"' + + ' onkeydown="CKEDITOR.tools.callFunction( ' + onKeydown + ', event, this )"' + + ' onclick="CKEDITOR.tools.callFunction(' + onClick + ', this); return false;"' + + ' tabindex="-1">' + + '<span style="margin: 0 auto;cursor: inherit">' + + character + + '</span>' + + '<span class="cke_voice_label" id="' + charLabelId + '">' + + charDesc + + '</span></a>'); + } + else + html.push( '<td class="cke_dark_background"> ' ); + + html.push( '</td>' ); + } + html.push( '</tr>' ); + } + + html.push( '</tbody></table>', '<span id="' + charsTableLabel + '" class="cke_voice_label">' + lang.options +'</span>' ); + + this.getContentElement( 'info', 'charContainer' ).getElement().setHtml( html.join( '' ) ); + }, + contents : [ + { + id : 'info', + label : editor.lang.common.generalTab, + title : editor.lang.common.generalTab, + padding : 0, + align : 'top', + elements : [ + { + type : 'hbox', + align : 'top', + widths : [ '320px', '90px' ], + children : + [ + { + type : 'html', + id : 'charContainer', + html : '', + onMouseover : onFocus, + onMouseout : onBlur, + focus : function() + { + var firstChar = this.getElement().getElementsByTag( 'a' ).getItem( 0 ); + setTimeout( function() + { + firstChar.focus(); + onFocus( null, firstChar ); + }, 0 ); + }, + onShow : function() + { + var firstChar = this.getElement().getChild( [ 0, 0, 0, 0, 0 ] ); + setTimeout( function() + { + firstChar.focus(); + onFocus( null, firstChar ); + }, 0 ); + }, + onLoad : function( event ) + { + dialog = event.sender; + } + }, + { + type : 'hbox', + align : 'top', + widths : [ '100%' ], + children : + [ + { + type : 'vbox', + align : 'top', + children : + [ + { + type : 'html', + html : '<div></div>' + }, + { + type : 'html', + id : 'charPreview', + className : 'cke_dark_background', + style : 'border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;', + html : '<div> </div>' + }, + { + type : 'html', + id : 'htmlPreview', + className : 'cke_dark_background', + style : 'border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;', + html : '<div> </div>' + } + ] + } + ] + } + ] + } + ] + } + ] + }; +} ); diff --git a/_source/plugins/specialchar/lang/en.js b/_source/plugins/specialchar/lang/en.js new file mode 100644 index 0000000..69077c9 --- /dev/null +++ b/_source/plugins/specialchar/lang/en.js @@ -0,0 +1,89 @@ + +CKEDITOR.plugins.setLang( 'specialchar', 'en', +{ + euro: "Euro sign", + lsquo: "Left single quotation mark", + rsquo: "Right single quotation mark", + ldquo: "Left double quotation mark", + rdquo: "Right double quotation mark", + ndash: "En dash", + mdash: "Em dash", + iexcl: "Inverted exclamation mark", + cent: "Cent sign", + pound: "Pound sign", + curren: "Currency sign", + yen: "Yen sign", + brvbar: "Broken bar", + sect: "Section sign", + uml: "Diaeresis", + copy: "Copyright sign", + ordf: "Feminine ordinal indicator", + laquo: "Left-pointing double angle quotation mark", + not: "Not sign", + reg: "Registered sign", + macr: "Macron", + deg: "Degree sign", + sup2: "Superscript two", + sup3: "Superscript three", + acute: "Acute accent", + micro: "Micro sign", + para: "Pilcrow sign", + middot: "Middle dot", + cedil: "Cedilla", + sup1: "Superscript one", + ordm: "Masculine ordinal indicator", + frac14: "Vulgar fraction one quarter", + frac12: "Vulgar fraction one half", + frac34: "Vulgar fraction three quarters", + iquest: "Inverted question mark", + agrave: "Latin small letter a with grave", + aacute: "Latin small letter a with acute", + acirc: "Latin small letter a with circumflex", + atilde: "Latin small letter a with tilde", + auml: "Latin small letter a with diaeresis", + aring: "Latin small letter a with ring above", + aelig: "Latin small letter ae", + ccedil: "Latin small letter c with cedilla", + egrave: "Latin small letter e with grave", + eacute: "Latin small letter e with acute", + ecirc: "Latin small letter e with circumflex", + euml: "Latin small letter e with diaeresis", + igrave: "Latin small letter i with grave", + iacute: "Latin small letter i with acute", + icirc: "Latin small letter i with circumflex", + iuml: "Latin small letter i with diaeresis", + eth: "Latin small letter eth", + ntilde: "Latin small letter n with tilde", + ograve: "Latin small letter o with grave", + oacute: "Latin small letter o with acute", + ocirc: "Latin small letter o with circumflex", + otilde: "Latin small letter o with tilde", + ouml: "Latin small letter o with diaeresis", + times: "Multiplication sign", + oslash: "Latin small letter o with stroke", + ugrave: "Latin small letter u with grave", + uacute: "Latin small letter u with acute", + ucirc: "Latin small letter u with circumflex", + uuml: "Latin small letter u with diaeresis", + yacute: "Latin small letter y with acute", + thorn: "Latin small letter thorn", + szlig: "Latin small letter sharp s", + divide: "Division sign", + yuml: "Latin small letter y with diaeresis", + oelig: "Latin small ligature oe", + '372': "Latin capital letter w with circumflex", + '374': "Latin capital letter y with circumflex", + '373': "Latin small letter w with circumflex", + '375': "Latin small letter y with circumflex", + 8219: "Single high-reversed-9 quotation mark", + bdquo: "Double low-9 quotation mark", + hellip: "Horizontal ellipsis", + trade: "Trade mark sign", + '9658': "Black right-pointing pointer", + bull: "Bullet", + rarr: "Rightwards double arrow", + harr: "Left right double arrow", + diams: "Black diamond suit", + asymp: "Almost equal to", + sbquo: "Single low-9 quotation mark" +}); diff --git a/_source/plugins/specialchar/plugin.js b/_source/plugins/specialchar/plugin.js new file mode 100644 index 0000000..85c802e --- /dev/null +++ b/_source/plugins/specialchar/plugin.js @@ -0,0 +1,70 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Special Character plugin + */ + +CKEDITOR.plugins.add( 'specialchar', +{ + // List of available localizations. + availableLangs : { en:1 }, + + init : function( editor ) + { + var pluginName = 'specialchar', + plugin = this; + + // Register the dialog. + CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/specialchar.js' ); + + editor.addCommand( pluginName, + { + exec : function() + { + var langCode = editor.langCode; + langCode = plugin.availableLangs[ langCode ] ? langCode : 'en'; + + CKEDITOR.scriptLoader.load( + CKEDITOR.getUrl( plugin.path + 'lang/' + langCode + '.js' ), + function() + { + CKEDITOR.tools.extend( editor.lang.specialChar, plugin.langEntries[ langCode ] ); + editor.openDialog( pluginName ); + }); + }, + modes : { wysiwyg:1 }, + canUndo : false + }); + + // Register the toolbar button. + editor.ui.addButton( 'SpecialChar', + { + label : editor.lang.specialChar.toolbar, + command : pluginName + }); + } +} ); + +/** + * The list of special characters visible in Special Character dialog. + * @type Array + * @example + * config.specialChars = [ '"', '’', [ '&custom;', 'Custom label' ] ]; + * config.specialChars = config.specialChars.concat( [ '"', [ '’', 'Custom label' ] ] ); + */ +CKEDITOR.config.specialChars = + [ + '!','"','#','$','%','&',"'",'(',')','*','+','-','.','/', + '0','1','2','3','4','5','6','7','8','9',':',';', + '<','=','>','?','@', + 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', + 'P','Q','R','S','T','U','V','W','X','Y','Z', + '[',']','^','_','`', + 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', + 'q','r','s','t','u','v','w','x','y','z', + '{','|','}','~', + "€", "‘", "’", "“", "”", "–", "—", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "®", "¯", "°", "&", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "&", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ü", "ý", "þ", "ÿ", "Œ", "œ", "Ŵ", "Ŷ", "ŵ", "ŷ", "‚", "‛", "„", "…", "™", "►", "•", "→", "⇒", "⇔", "♦", "≈" + ]; diff --git a/_source/plugins/styles/plugin.js b/_source/plugins/styles/plugin.js new file mode 100644 index 0000000..0850a66 --- /dev/null +++ b/_source/plugins/styles/plugin.js @@ -0,0 +1,1696 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'styles', +{ + requires : [ 'selection' ], + init : function( editor ) + { + // This doesn't look like correct, but it's the safest way to proper + // pass the disableReadonlyStyling configuration to the style system + // without having to change any method signature in the API. (#6103) + editor.on( 'contentDom', function() + { + editor.document.setCustomData( 'cke_includeReadonly', !editor.config.disableReadonlyStyling ); + }); + } +}); + +/** + * Registers a function to be called whenever the selection position changes in the + * editing area. The current state is passed to the function. The possible + * states are {@link CKEDITOR.TRISTATE_ON} and {@link CKEDITOR.TRISTATE_OFF}. + * @param {CKEDITOR.style} style The style to be watched. + * @param {Function} callback The function to be called. + * @example + * // Create a style object for the <b> element. + * var style = new CKEDITOR.style( { element : 'b' } ); + * var editor = CKEDITOR.instances.editor1; + * editor.attachStyleStateChange( style, function( state ) + * { + * if ( state == CKEDITOR.TRISTATE_ON ) + * alert( 'The current state for the B element is ON' ); + * else + * alert( 'The current state for the B element is OFF' ); + * }); + */ +CKEDITOR.editor.prototype.attachStyleStateChange = function( style, callback ) +{ + // Try to get the list of attached callbacks. + var styleStateChangeCallbacks = this._.styleStateChangeCallbacks; + + // If it doesn't exist, it means this is the first call. So, let's create + // all the structure to manage the style checks and the callback calls. + if ( !styleStateChangeCallbacks ) + { + // Create the callbacks array. + styleStateChangeCallbacks = this._.styleStateChangeCallbacks = []; + + // Attach to the selectionChange event, so we can check the styles at + // that point. + this.on( 'selectionChange', function( ev ) + { + // Loop throw all registered callbacks. + for ( var i = 0 ; i < styleStateChangeCallbacks.length ; i++ ) + { + var callback = styleStateChangeCallbacks[ i ]; + + // Check the current state for the style defined for that + // callback. + var currentState = callback.style.checkActive( ev.data.path ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF; + + // Call the callback function, passing the current + // state to it. + callback.fn.call( this, currentState ); + } + }); + } + + // Save the callback info, so it can be checked on the next occurrence of + // selectionChange. + styleStateChangeCallbacks.push( { style : style, fn : callback } ); +}; + +CKEDITOR.STYLE_BLOCK = 1; +CKEDITOR.STYLE_INLINE = 2; +CKEDITOR.STYLE_OBJECT = 3; + +(function() +{ + var blockElements = { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1 }, + objectElements = { a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1 }; + + var semicolonFixRegex = /\s*(?:;\s*|$)/, + varRegex = /#\((.+?)\)/g; + + var notBookmark = CKEDITOR.dom.walker.bookmark( 0, 1 ), + nonWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 ); + + CKEDITOR.style = function( styleDefinition, variablesValues ) + { + if ( variablesValues ) + { + styleDefinition = CKEDITOR.tools.clone( styleDefinition ); + + replaceVariables( styleDefinition.attributes, variablesValues ); + replaceVariables( styleDefinition.styles, variablesValues ); + } + + var element = this.element = styleDefinition.element ? + ( typeof styleDefinition.element == 'string' ? styleDefinition.element.toLowerCase() : styleDefinition.element ) + : '*'; + + this.type = + blockElements[ element ] ? + CKEDITOR.STYLE_BLOCK + : objectElements[ element ] ? + CKEDITOR.STYLE_OBJECT + : + CKEDITOR.STYLE_INLINE; + + // If the 'element' property is an object with a set of possible element, it will be applied like an object style: only to existing elements + if ( typeof this.element == 'object' ) + this.type = CKEDITOR.STYLE_OBJECT; + + this._ = + { + definition : styleDefinition + }; + }; + + CKEDITOR.style.prototype = + { + apply : function( document ) + { + applyStyle.call( this, document, false ); + }, + + remove : function( document ) + { + applyStyle.call( this, document, true ); + }, + + applyToRange : function( range ) + { + return ( this.applyToRange = + this.type == CKEDITOR.STYLE_INLINE ? + applyInlineStyle + : this.type == CKEDITOR.STYLE_BLOCK ? + applyBlockStyle + : this.type == CKEDITOR.STYLE_OBJECT ? + applyObjectStyle + : null ).call( this, range ); + }, + + removeFromRange : function( range ) + { + return ( this.removeFromRange = + this.type == CKEDITOR.STYLE_INLINE ? + removeInlineStyle + : this.type == CKEDITOR.STYLE_BLOCK ? + removeBlockStyle + : this.type == CKEDITOR.STYLE_OBJECT ? + removeObjectStyle + : null ).call( this, range ); + }, + + applyToObject : function( element ) + { + setupElement( element, this ); + }, + + /** + * Get the style state inside an element path. Returns "true" if the + * element is active in the path. + */ + checkActive : function( elementPath ) + { + switch ( this.type ) + { + case CKEDITOR.STYLE_BLOCK : + return this.checkElementRemovable( elementPath.block || elementPath.blockLimit, true ); + + case CKEDITOR.STYLE_OBJECT : + case CKEDITOR.STYLE_INLINE : + + var elements = elementPath.elements; + + for ( var i = 0, element ; i < elements.length ; i++ ) + { + element = elements[ i ]; + + if ( this.type == CKEDITOR.STYLE_INLINE + && ( element == elementPath.block || element == elementPath.blockLimit ) ) + continue; + + if( this.type == CKEDITOR.STYLE_OBJECT ) + { + var name = element.getName(); + if ( !( typeof this.element == 'string' ? name == this.element : name in this.element ) ) + continue; + } + + if ( this.checkElementRemovable( element, true ) ) + return true; + } + } + return false; + }, + + /** + * Whether this style can be applied at the element path. + * @param elementPath + */ + checkApplicable : function( elementPath ) + { + switch ( this.type ) + { + case CKEDITOR.STYLE_INLINE : + case CKEDITOR.STYLE_BLOCK : + break; + + case CKEDITOR.STYLE_OBJECT : + return elementPath.lastElement.getAscendant( this.element, true ); + } + + return true; + }, + + // Checks if an element, or any of its attributes, is removable by the + // current style definition. + checkElementRemovable : function( element, fullMatch ) + { + if ( !element || element.isReadOnly() ) + return false; + + var def = this._.definition, + attribs, + name = element.getName(); + + // If the element name is the same as the style name. + if ( typeof this.element == 'string' ? name == this.element : name in this.element ) + { + // If no attributes are defined in the element. + if ( !fullMatch && !element.hasAttributes() ) + return true; + + attribs = getAttributesForComparison( def ); + + if ( attribs._length ) + { + for ( var attName in attribs ) + { + if ( attName == '_length' ) + continue; + + var elementAttr = element.getAttribute( attName ) || ''; + + // Special treatment for 'style' attribute is required. + if ( attName == 'style' ? + compareCssText( attribs[ attName ], normalizeCssText( elementAttr, false ) ) + : attribs[ attName ] == elementAttr ) + { + if ( !fullMatch ) + return true; + } + else if ( fullMatch ) + return false; + } + if ( fullMatch ) + return true; + } + else + return true; + } + + // Check if the element can be somehow overriden. + var override = getOverrides( this )[ element.getName() ] ; + if ( override ) + { + // If no attributes have been defined, remove the element. + if ( !( attribs = override.attributes ) ) + return true; + + for ( var i = 0 ; i < attribs.length ; i++ ) + { + attName = attribs[i][0]; + var actualAttrValue = element.getAttribute( attName ); + if ( actualAttrValue ) + { + var attValue = attribs[i][1]; + + // Remove the attribute if: + // - The override definition value is null; + // - The override definition value is a string that + // matches the attribute value exactly. + // - The override definition value is a regex that + // has matches in the attribute value. + if ( attValue === null || + ( typeof attValue == 'string' && actualAttrValue == attValue ) || + attValue.test( actualAttrValue ) ) + return true; + } + } + } + return false; + }, + + // Builds the preview HTML based on the styles definition. + buildPreview : function( label ) + { + var styleDefinition = this._.definition, + html = [], + elementName = styleDefinition.element; + + // Avoid <bdo> in the preview. + if ( elementName == 'bdo' ) + elementName = 'span'; + + html = [ '<', elementName ]; + + // Assign all defined attributes. + var attribs = styleDefinition.attributes; + if ( attribs ) + { + for ( var att in attribs ) + { + html.push( ' ', att, '="', attribs[ att ], '"' ); + } + } + + // Assign the style attribute. + var cssStyle = CKEDITOR.style.getStyleText( styleDefinition ); + if ( cssStyle ) + html.push( ' style="', cssStyle, '"' ); + + html.push( '>', ( label || styleDefinition.name ), '</', elementName, '>' ); + + return html.join( '' ); + } + }; + + // Build the cssText based on the styles definition. + CKEDITOR.style.getStyleText = function( styleDefinition ) + { + // If we have already computed it, just return it. + var stylesDef = styleDefinition._ST; + if ( stylesDef ) + return stylesDef; + + stylesDef = styleDefinition.styles; + + // Builds the StyleText. + var stylesText = ( styleDefinition.attributes && styleDefinition.attributes[ 'style' ] ) || '', + specialStylesText = ''; + + if ( stylesText.length ) + stylesText = stylesText.replace( semicolonFixRegex, ';' ); + + for ( var style in stylesDef ) + { + var styleVal = stylesDef[ style ], + text = ( style + ':' + styleVal ).replace( semicolonFixRegex, ';' ); + + // Some browsers don't support 'inherit' property value, leave them intact. (#5242) + if ( styleVal == 'inherit' ) + specialStylesText += text; + else + stylesText += text; + } + + // Browsers make some changes to the style when applying them. So, here + // we normalize it to the browser format. + if ( stylesText.length ) + stylesText = normalizeCssText( stylesText ); + + stylesText += specialStylesText; + + // Return it, saving it to the next request. + return ( styleDefinition._ST = stylesText ); + }; + + // Gets the parent element which blocks the styling for an element. This + // can be done through read-only elements (contenteditable=false) or + // elements with the "data-nostyle" attribute. + function getUnstylableParent( element ) + { + var unstylable, + editable; + + while ( ( element = element.getParent() ) ) + { + if ( element.getName() == 'body' ) + break; + + if ( element.getAttribute( 'data-nostyle' ) ) + unstylable = element; + else if ( !editable ) + { + var contentEditable = element.getAttribute( 'contentEditable' ); + + if ( contentEditable == 'false' ) + unstylable = element; + else if ( contentEditable == 'true' ) + editable = 1; + } + } + + return unstylable; + } + + function applyInlineStyle( range ) + { + var document = range.document; + + if ( range.collapsed ) + { + // Create the element to be inserted in the DOM. + var collapsedElement = getElement( this, document ); + + // Insert the empty element into the DOM at the range position. + range.insertNode( collapsedElement ); + + // Place the selection right inside the empty element. + range.moveToPosition( collapsedElement, CKEDITOR.POSITION_BEFORE_END ); + + return; + } + + var elementName = this.element; + var def = this._.definition; + var isUnknownElement; + + // Indicates that fully selected read-only elements are to be included in the styling range. + var includeReadonly = def.includeReadonly; + + // If the read-only inclusion is not available in the definition, try + // to get it from the document data. + if ( includeReadonly == undefined ) + includeReadonly = document.getCustomData( 'cke_includeReadonly' ); + + // Get the DTD definition for the element. Defaults to "span". + var dtd = CKEDITOR.dtd[ elementName ] || ( isUnknownElement = true, CKEDITOR.dtd.span ); + + // Expand the range. + range.enlarge( CKEDITOR.ENLARGE_ELEMENT, 1 ); + range.trim(); + + // Get the first node to be processed and the last, which concludes the + // processing. + var boundaryNodes = range.createBookmark(), + firstNode = boundaryNodes.startNode, + lastNode = boundaryNodes.endNode; + + var currentNode = firstNode; + + var styleRange; + + // Check if the boundaries are inside non stylable elements. + var firstUnstylable = getUnstylableParent( firstNode ), + lastUnstylable = getUnstylableParent( lastNode ); + + // If the first element can't be styled, we'll start processing right + // after its unstylable root. + if ( firstUnstylable ) + currentNode = firstUnstylable.getNextSourceNode( true ); + + // If the last element can't be styled, we'll stop processing on its + // unstylable root. + if ( lastUnstylable ) + lastNode = lastUnstylable; + + // Do nothing if the current node now follows the last node to be processed. + if ( currentNode.getPosition( lastNode ) == CKEDITOR.POSITION_FOLLOWING ) + currentNode = 0; + + while ( currentNode ) + { + var applyStyle = false; + + if ( currentNode.equals( lastNode ) ) + { + currentNode = null; + applyStyle = true; + } + else + { + var nodeType = currentNode.type; + var nodeName = nodeType == CKEDITOR.NODE_ELEMENT ? currentNode.getName() : null; + var nodeIsReadonly = nodeName && ( currentNode.getAttribute( 'contentEditable' ) == 'false' ); + var nodeIsNoStyle = nodeName && currentNode.getAttribute( 'data-nostyle' ); + + if ( nodeName && currentNode.data( 'cke-bookmark' ) ) + { + currentNode = currentNode.getNextSourceNode( true ); + continue; + } + + // Check if the current node can be a child of the style element. + if ( !nodeName || ( dtd[ nodeName ] + && !nodeIsNoStyle + && ( !nodeIsReadonly || includeReadonly ) + && ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) + && ( !def.childRule || def.childRule( currentNode ) ) ) ) + { + var currentParent = currentNode.getParent(); + + // Check if the style element can be a child of the current + // node parent or if the element is not defined in the DTD. + if ( currentParent + && ( ( currentParent.getDtd() || CKEDITOR.dtd.span )[ elementName ] || isUnknownElement ) + && ( !def.parentRule || def.parentRule( currentParent ) ) ) + { + // This node will be part of our range, so if it has not + // been started, place its start right before the node. + // In the case of an element node, it will be included + // only if it is entirely inside the range. + if ( !styleRange && ( !nodeName || !CKEDITOR.dtd.$removeEmpty[ nodeName ] || ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) ) ) + { + styleRange = new CKEDITOR.dom.range( document ); + styleRange.setStartBefore( currentNode ); + } + + // Non element nodes, readonly elements, or empty + // elements can be added completely to the range. + if ( nodeType == CKEDITOR.NODE_TEXT || nodeIsReadonly || ( nodeType == CKEDITOR.NODE_ELEMENT && !currentNode.getChildCount() ) ) + { + var includedNode = currentNode; + var parentNode; + + // This node is about to be included completelly, but, + // if this is the last node in its parent, we must also + // check if the parent itself can be added completelly + // to the range, otherwise apply the style immediately. + while ( ( applyStyle = !includedNode.getNext( notBookmark ) ) + && ( parentNode = includedNode.getParent(), dtd[ parentNode.getName() ] ) + && ( parentNode.getPosition( firstNode ) | CKEDITOR.POSITION_FOLLOWING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_FOLLOWING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) + && ( !def.childRule || def.childRule( parentNode ) ) ) + { + includedNode = parentNode; + } + + styleRange.setEndAfter( includedNode ); + + } + } + else + applyStyle = true; + } + else + applyStyle = true; + + // Get the next node to be processed. + currentNode = currentNode.getNextSourceNode( nodeIsNoStyle || nodeIsReadonly ); + } + + // Apply the style if we have something to which apply it. + if ( applyStyle && styleRange && !styleRange.collapsed ) + { + // Build the style element, based on the style object definition. + var styleNode = getElement( this, document ), + styleHasAttrs = styleNode.hasAttributes(); + + // Get the element that holds the entire range. + var parent = styleRange.getCommonAncestor(); + + var removeList = { + styles : {}, + attrs : {}, + // Styles cannot be removed. + blockedStyles : {}, + // Attrs cannot be removed. + blockedAttrs : {} + }; + + var attName, styleName, value; + + // Loop through the parents, removing the redundant attributes + // from the element to be applied. + while ( styleNode && parent ) + { + if ( parent.getName() == elementName ) + { + for ( attName in def.attributes ) + { + if ( removeList.blockedAttrs[ attName ] || !( value = parent.getAttribute( styleName ) ) ) + continue; + + if ( styleNode.getAttribute( attName ) == value ) + removeList.attrs[ attName ] = 1; + else + removeList.blockedAttrs[ attName ] = 1; + } + + for ( styleName in def.styles ) + { + if ( removeList.blockedStyles[ styleName ] || !( value = parent.getStyle( styleName ) ) ) + continue; + + if ( styleNode.getStyle( styleName ) == value ) + removeList.styles[ styleName ] = 1; + else + removeList.blockedStyles[ styleName ] = 1; + } + } + + parent = parent.getParent(); + } + + for ( attName in removeList.attrs ) + styleNode.removeAttribute( attName ); + + for ( styleName in removeList.styles ) + styleNode.removeStyle( styleName ); + + if ( styleHasAttrs && !styleNode.hasAttributes() ) + styleNode = null; + + if ( styleNode ) + { + // Move the contents of the range to the style element. + styleRange.extractContents().appendTo( styleNode ); + + // Here we do some cleanup, removing all duplicated + // elements from the style element. + removeFromInsideElement( this, styleNode ); + + // Insert it into the range position (it is collapsed after + // extractContents. + styleRange.insertNode( styleNode ); + + // Let's merge our new style with its neighbors, if possible. + styleNode.mergeSiblings(); + + // As the style system breaks text nodes constantly, let's normalize + // things for performance. + // With IE, some paragraphs get broken when calling normalize() + // repeatedly. Also, for IE, we must normalize body, not documentElement. + // IE is also known for having a "crash effect" with normalize(). + // We should try to normalize with IE too in some way, somewhere. + if ( !CKEDITOR.env.ie ) + styleNode.$.normalize(); + } + // Style already inherit from parents, left just to clear up any internal overrides. (#5931) + else + { + styleNode = new CKEDITOR.dom.element( 'span' ); + styleRange.extractContents().appendTo( styleNode ); + styleRange.insertNode( styleNode ); + removeFromInsideElement( this, styleNode ); + styleNode.remove( true ); + } + + // Style applied, let's release the range, so it gets + // re-initialization in the next loop. + styleRange = null; + } + } + + // Remove the bookmark nodes. + range.moveToBookmark( boundaryNodes ); + + // Minimize the result range to exclude empty text nodes. (#5374) + range.shrink( CKEDITOR.SHRINK_TEXT ); + } + + function removeInlineStyle( range ) + { + /* + * Make sure our range has included all "collpased" parent inline nodes so + * that our operation logic can be simpler. + */ + range.enlarge( CKEDITOR.ENLARGE_ELEMENT, 1 ); + + var bookmark = range.createBookmark(), + startNode = bookmark.startNode; + + if ( range.collapsed ) + { + + var startPath = new CKEDITOR.dom.elementPath( startNode.getParent() ), + // The topmost element in elementspatch which we should jump out of. + boundaryElement; + + + for ( var i = 0, element ; i < startPath.elements.length + && ( element = startPath.elements[i] ) ; i++ ) + { + /* + * 1. If it's collaped inside text nodes, try to remove the style from the whole element. + * + * 2. Otherwise if it's collapsed on element boundaries, moving the selection + * outside the styles instead of removing the whole tag, + * also make sure other inner styles were well preserverd.(#3309) + */ + if ( element == startPath.block || element == startPath.blockLimit ) + break; + + if ( this.checkElementRemovable( element ) ) + { + var isStart; + + if ( range.collapsed && ( + range.checkBoundaryOfElement( element, CKEDITOR.END ) || + ( isStart = range.checkBoundaryOfElement( element, CKEDITOR.START ) ) ) ) + { + boundaryElement = element; + boundaryElement.match = isStart ? 'start' : 'end'; + } + else + { + /* + * Before removing the style node, there may be a sibling to the style node + * that's exactly the same to the one to be removed. To the user, it makes + * no difference that they're separate entities in the DOM tree. So, merge + * them before removal. + */ + element.mergeSiblings(); + if ( element.getName() == this.element ) + removeFromElement( this, element ); + else + removeOverrides( element, getOverrides( this )[ element.getName() ] ); + } + } + } + + // Re-create the style tree after/before the boundary element, + // the replication start from bookmark start node to define the + // new range. + if ( boundaryElement ) + { + var clonedElement = startNode; + for ( i = 0 ;; i++ ) + { + var newElement = startPath.elements[ i ]; + if ( newElement.equals( boundaryElement ) ) + break; + // Avoid copying any matched element. + else if ( newElement.match ) + continue; + else + newElement = newElement.clone(); + newElement.append( clonedElement ); + clonedElement = newElement; + } + clonedElement[ boundaryElement.match == 'start' ? + 'insertBefore' : 'insertAfter' ]( boundaryElement ); + } + } + else + { + /* + * Now our range isn't collapsed. Lets walk from the start node to the end + * node via DFS and remove the styles one-by-one. + */ + var endNode = bookmark.endNode, + me = this; + + /* + * Find out the style ancestor that needs to be broken down at startNode + * and endNode. + */ + function breakNodes() + { + var startPath = new CKEDITOR.dom.elementPath( startNode.getParent() ), + endPath = new CKEDITOR.dom.elementPath( endNode.getParent() ), + breakStart = null, + breakEnd = null; + for ( var i = 0 ; i < startPath.elements.length ; i++ ) + { + var element = startPath.elements[ i ]; + + if ( element == startPath.block || element == startPath.blockLimit ) + break; + + if ( me.checkElementRemovable( element ) ) + breakStart = element; + } + for ( i = 0 ; i < endPath.elements.length ; i++ ) + { + element = endPath.elements[ i ]; + + if ( element == endPath.block || element == endPath.blockLimit ) + break; + + if ( me.checkElementRemovable( element ) ) + breakEnd = element; + } + + if ( breakEnd ) + endNode.breakParent( breakEnd ); + if ( breakStart ) + startNode.breakParent( breakStart ); + } + breakNodes(); + + // Now, do the DFS walk. + var currentNode = startNode.getNext(); + while ( !currentNode.equals( endNode ) ) + { + /* + * Need to get the next node first because removeFromElement() can remove + * the current node from DOM tree. + */ + var nextNode = currentNode.getNextSourceNode(); + if ( currentNode.type == CKEDITOR.NODE_ELEMENT && this.checkElementRemovable( currentNode ) ) + { + // Remove style from element or overriding element. + if ( currentNode.getName() == this.element ) + removeFromElement( this, currentNode ); + else + removeOverrides( currentNode, getOverrides( this )[ currentNode.getName() ] ); + + /* + * removeFromElement() may have merged the next node with something before + * the startNode via mergeSiblings(). In that case, the nextNode would + * contain startNode and we'll have to call breakNodes() again and also + * reassign the nextNode to something after startNode. + */ + if ( nextNode.type == CKEDITOR.NODE_ELEMENT && nextNode.contains( startNode ) ) + { + breakNodes(); + nextNode = startNode.getNext(); + } + } + currentNode = nextNode; + } + } + + range.moveToBookmark( bookmark ); + } + + function applyObjectStyle( range ) + { + var root = range.getCommonAncestor( true, true ), + element = root.getAscendant( this.element, true ); + element && !element.isReadOnly() && setupElement( element, this ); + } + + function removeObjectStyle( range ) + { + var root = range.getCommonAncestor( true, true ), + element = root.getAscendant( this.element, true ); + + if ( !element ) + return; + + var style = this, + def = style._.definition, + attributes = def.attributes; + var styles = CKEDITOR.style.getStyleText( def ); + + // Remove all defined attributes. + if ( attributes ) + { + for ( var att in attributes ) + { + element.removeAttribute( att, attributes[ att ] ); + } + } + + // Assign all defined styles. + if ( def.styles ) + { + for ( var i in def.styles ) + { + if ( !def.styles.hasOwnProperty( i ) ) + continue; + + element.removeStyle( i ); + } + } + } + + function applyBlockStyle( range ) + { + // Serializible bookmarks is needed here since + // elements may be merged. + var bookmark = range.createBookmark( true ); + + var iterator = range.createIterator(); + iterator.enforceRealBlocks = true; + + // make recognize <br /> tag as a separator in ENTER_BR mode (#5121) + if ( this._.enterMode ) + iterator.enlargeBr = ( this._.enterMode != CKEDITOR.ENTER_BR ); + + var block; + var doc = range.document; + var previousPreBlock; + + while ( ( block = iterator.getNextParagraph() ) ) // Only one = + { + if ( !block.isReadOnly() ) + { + var newBlock = getElement( this, doc, block ); + replaceBlock( block, newBlock ); + } + } + + range.moveToBookmark( bookmark ); + } + + function removeBlockStyle( range ) + { + // Serializible bookmarks is needed here since + // elements may be merged. + var bookmark = range.createBookmark( 1 ); + + var iterator = range.createIterator(); + iterator.enforceRealBlocks = true; + iterator.enlargeBr = this._.enterMode != CKEDITOR.ENTER_BR; + + var block; + while ( ( block = iterator.getNextParagraph() ) ) + { + if ( this.checkElementRemovable( block ) ) + { + // <pre> get special treatment. + if ( block.is( 'pre' ) ) + { + var newBlock = this._.enterMode == CKEDITOR.ENTER_BR ? + null : range.document.createElement( + this._.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); + + newBlock && block.copyAttributes( newBlock ); + replaceBlock( block, newBlock ); + } + else + removeFromElement( this, block, 1 ); + } + } + + range.moveToBookmark( bookmark ); + } + + // Replace the original block with new one, with special treatment + // for <pre> blocks to make sure content format is well preserved, and merging/splitting adjacent + // when necessary.(#3188) + function replaceBlock( block, newBlock ) + { + // Block is to be removed, create a temp element to + // save contents. + var removeBlock = !newBlock; + if ( removeBlock ) + { + newBlock = block.getDocument().createElement( 'div' ); + block.copyAttributes( newBlock ); + } + + var newBlockIsPre = newBlock && newBlock.is( 'pre' ); + var blockIsPre = block.is( 'pre' ); + + var isToPre = newBlockIsPre && !blockIsPre; + var isFromPre = !newBlockIsPre && blockIsPre; + + if ( isToPre ) + newBlock = toPre( block, newBlock ); + else if ( isFromPre ) + // Split big <pre> into pieces before start to convert. + newBlock = fromPres( removeBlock ? + [ block.getHtml() ] : splitIntoPres( block ), newBlock ); + else + block.moveChildren( newBlock ); + + newBlock.replace( block ); + + if ( newBlockIsPre ) + { + // Merge previous <pre> blocks. + mergePre( newBlock ); + } + else if ( removeBlock ) + removeNoAttribsElement( newBlock ); + } + + /** + * Merge a <pre> block with a previous sibling if available. + */ + function mergePre( preBlock ) + { + var previousBlock; + if ( !( ( previousBlock = preBlock.getPrevious( nonWhitespaces ) ) + && previousBlock.is + && previousBlock.is( 'pre') ) ) + return; + + // Merge the previous <pre> block contents into the current <pre> + // block. + // + // Another thing to be careful here is that currentBlock might contain + // a '\n' at the beginning, and previousBlock might contain a '\n' + // towards the end. These new lines are not normally displayed but they + // become visible after merging. + var mergedHtml = replace( previousBlock.getHtml(), /\n$/, '' ) + '\n\n' + + replace( preBlock.getHtml(), /^\n/, '' ) ; + + // Krugle: IE normalizes innerHTML from <pre>, breaking whitespaces. + if ( CKEDITOR.env.ie ) + preBlock.$.outerHTML = '<pre>' + mergedHtml + '</pre>'; + else + preBlock.setHtml( mergedHtml ); + + previousBlock.remove(); + } + + /** + * Split into multiple <pre> blocks separated by double line-break. + * @param preBlock + */ + function splitIntoPres( preBlock ) + { + // Exclude the ones at header OR at tail, + // and ignore bookmark content between them. + var duoBrRegex = /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi, + blockName = preBlock.getName(), + splitedHtml = replace( preBlock.getOuterHtml(), + duoBrRegex, + function( match, charBefore, bookmark ) + { + return charBefore + '</pre>' + bookmark + '<pre>'; + } ); + + var pres = []; + splitedHtml.replace( /<pre\b.*?>([\s\S]*?)<\/pre>/gi, function( match, preContent ){ + pres.push( preContent ); + } ); + return pres; + } + + // Wrapper function of String::replace without considering of head/tail bookmarks nodes. + function replace( str, regexp, replacement ) + { + var headBookmark = '', + tailBookmark = ''; + + str = str.replace( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi, + function( str, m1, m2 ){ + m1 && ( headBookmark = m1 ); + m2 && ( tailBookmark = m2 ); + return ''; + } ); + return headBookmark + str.replace( regexp, replacement ) + tailBookmark; + } + + /** + * Converting a list of <pre> into blocks with format well preserved. + */ + function fromPres( preHtmls, newBlock ) + { + var docFrag; + if ( preHtmls.length > 1 ) + docFrag = new CKEDITOR.dom.documentFragment( newBlock.getDocument() ); + + for ( var i = 0 ; i < preHtmls.length ; i++ ) + { + var blockHtml = preHtmls[ i ]; + + // 1. Trim the first and last line-breaks immediately after and before <pre>, + // they're not visible. + blockHtml = blockHtml.replace( /(\r\n|\r)/g, '\n' ) ; + blockHtml = replace( blockHtml, /^[ \t]*\n/, '' ) ; + blockHtml = replace( blockHtml, /\n$/, '' ) ; + // 2. Convert spaces or tabs at the beginning or at the end to + blockHtml = replace( blockHtml, /^[ \t]+|[ \t]+$/g, function( match, offset, s ) + { + if ( match.length == 1 ) // one space, preserve it + return ' ' ; + else if ( !offset ) // beginning of block + return CKEDITOR.tools.repeat( ' ', match.length - 1 ) + ' '; + else // end of block + return ' ' + CKEDITOR.tools.repeat( ' ', match.length - 1 ); + } ) ; + + // 3. Convert \n to <BR>. + // 4. Convert contiguous (i.e. non-singular) spaces or tabs to + blockHtml = blockHtml.replace( /\n/g, '<br>' ) ; + blockHtml = blockHtml.replace( /[ \t]{2,}/g, + function ( match ) + { + return CKEDITOR.tools.repeat( ' ', match.length - 1 ) + ' ' ; + } ) ; + + if ( docFrag ) + { + var newBlockClone = newBlock.clone(); + newBlockClone.setHtml( blockHtml ); + docFrag.append( newBlockClone ); + } + else + newBlock.setHtml( blockHtml ); + } + + return docFrag || newBlock; + } + + /** + * Converting from a non-PRE block to a PRE block in formatting operations. + */ + function toPre( block, newBlock ) + { + var bogus = block.getBogus(); + bogus && bogus.remove(); + + // First trim the block content. + var preHtml = block.getHtml(); + + // 1. Trim head/tail spaces, they're not visible. + preHtml = replace( preHtml, /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g, '' ); + // 2. Delete ANSI whitespaces immediately before and after <BR> because + // they are not visible. + preHtml = preHtml.replace( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi, '$1' ); + // 3. Compress other ANSI whitespaces since they're only visible as one + // single space previously. + // 4. Convert to spaces since is no longer needed in <PRE>. + preHtml = preHtml.replace( /([ \t\n\r]+| )/g, ' ' ); + // 5. Convert any <BR /> to \n. This must not be done earlier because + // the \n would then get compressed. + preHtml = preHtml.replace( /<br\b[^>]*>/gi, '\n' ); + + // Krugle: IE normalizes innerHTML to <pre>, breaking whitespaces. + if ( CKEDITOR.env.ie ) + { + var temp = block.getDocument().createElement( 'div' ); + temp.append( newBlock ); + newBlock.$.outerHTML = '<pre>' + preHtml + '</pre>'; + newBlock.copyAttributes( temp.getFirst() ); + newBlock = temp.getFirst().remove(); + } + else + newBlock.setHtml( preHtml ); + + return newBlock; + } + + // Removes a style from an element itself, don't care about its subtree. + function removeFromElement( style, element ) + { + var def = style._.definition, + attributes = CKEDITOR.tools.extend( {}, def.attributes, getOverrides( style )[ element.getName() ] ), + styles = def.styles, + // If the style is only about the element itself, we have to remove the element. + removeEmpty = CKEDITOR.tools.isEmpty( attributes ) && CKEDITOR.tools.isEmpty( styles ); + + // Remove definition attributes/style from the elemnt. + for ( var attName in attributes ) + { + // The 'class' element value must match (#1318). + if ( ( attName == 'class' || style._.definition.fullMatch ) + && element.getAttribute( attName ) != normalizeProperty( attName, attributes[ attName ] ) ) + continue; + removeEmpty = element.hasAttribute( attName ); + element.removeAttribute( attName ); + } + + for ( var styleName in styles ) + { + // Full match style insist on having fully equivalence. (#5018) + if ( style._.definition.fullMatch + && element.getStyle( styleName ) != normalizeProperty( styleName, styles[ styleName ], true ) ) + continue; + + removeEmpty = removeEmpty || !!element.getStyle( styleName ); + element.removeStyle( styleName ); + } + + if ( removeEmpty ) + { + !CKEDITOR.dtd.$block[ element.getName() ] || style._.enterMode == CKEDITOR.ENTER_BR && !element.hasAttributes() ? + removeNoAttribsElement( element ) : + element.renameNode( style._.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); + } + } + + // Removes a style from inside an element. + function removeFromInsideElement( style, element ) + { + var def = style._.definition, + attribs = def.attributes, + styles = def.styles, + overrides = getOverrides( style ), + innerElements = element.getElementsByTag( style.element ); + + for ( var i = innerElements.count(); --i >= 0 ; ) + removeFromElement( style, innerElements.getItem( i ) ); + + // Now remove any other element with different name that is + // defined to be overriden. + for ( var overrideElement in overrides ) + { + if ( overrideElement != style.element ) + { + innerElements = element.getElementsByTag( overrideElement ) ; + for ( i = innerElements.count() - 1 ; i >= 0 ; i-- ) + { + var innerElement = innerElements.getItem( i ); + removeOverrides( innerElement, overrides[ overrideElement ] ) ; + } + } + } + } + + /** + * Remove overriding styles/attributes from the specific element. + * Note: Remove the element if no attributes remain. + * @param {Object} element + * @param {Object} overrides + */ + function removeOverrides( element, overrides ) + { + var attributes = overrides && overrides.attributes ; + + if ( attributes ) + { + for ( var i = 0 ; i < attributes.length ; i++ ) + { + var attName = attributes[i][0], actualAttrValue ; + + if ( ( actualAttrValue = element.getAttribute( attName ) ) ) + { + var attValue = attributes[i][1] ; + + // Remove the attribute if: + // - The override definition value is null ; + // - The override definition valie is a string that + // matches the attribute value exactly. + // - The override definition value is a regex that + // has matches in the attribute value. + if ( attValue === null || + ( attValue.test && attValue.test( actualAttrValue ) ) || + ( typeof attValue == 'string' && actualAttrValue == attValue ) ) + element.removeAttribute( attName ) ; + } + } + } + + removeNoAttribsElement( element ); + } + + // If the element has no more attributes, remove it. + function removeNoAttribsElement( element ) + { + // If no more attributes remained in the element, remove it, + // leaving its children. + if ( !element.hasAttributes() ) + { + if ( CKEDITOR.dtd.$block[ element.getName() ] ) + { + var previous = element.getPrevious( nonWhitespaces ), + next = element.getNext( nonWhitespaces ); + + if ( previous && ( previous.type == CKEDITOR.NODE_TEXT || !previous.isBlockBoundary( { br : 1 } ) ) ) + element.append( 'br', 1 ); + if ( next && ( next.type == CKEDITOR.NODE_TEXT || !next.isBlockBoundary( { br : 1 } ) ) ) + element.append( 'br' ); + + element.remove( true ); + } + else + { + // Removing elements may open points where merging is possible, + // so let's cache the first and last nodes for later checking. + var firstChild = element.getFirst(); + var lastChild = element.getLast(); + + element.remove( true ); + + if ( firstChild ) + { + // Check the cached nodes for merging. + firstChild.type == CKEDITOR.NODE_ELEMENT && firstChild.mergeSiblings(); + + if ( lastChild && !firstChild.equals( lastChild ) + && lastChild.type == CKEDITOR.NODE_ELEMENT ) + lastChild.mergeSiblings(); + } + + } + } + } + + function getElement( style, targetDocument, element ) + { + var el, + def = style._.definition, + elementName = style.element; + + // The "*" element name will always be a span for this function. + if ( elementName == '*' ) + elementName = 'span'; + + // Create the element. + el = new CKEDITOR.dom.element( elementName, targetDocument ); + + // #6226: attributes should be copied before the new ones are applied + if ( element ) + element.copyAttributes( el ); + + el = setupElement( el, style ); + + // Avoid ID duplication. + if ( targetDocument.getCustomData( 'doc_processing_style' ) && el.hasAttribute( 'id' ) ) + el.removeAttribute( 'id' ); + else + targetDocument.setCustomData( 'doc_processing_style', 1 ); + + return el; + } + + function setupElement( el, style ) + { + var def = style._.definition, + attributes = def.attributes, + styles = CKEDITOR.style.getStyleText( def ); + + // Assign all defined attributes. + if ( attributes ) + { + for ( var att in attributes ) + { + el.setAttribute( att, attributes[ att ] ); + } + } + + // Assign all defined styles. + if( styles ) + el.setAttribute( 'style', styles ); + + return el; + } + + function replaceVariables( list, variablesValues ) + { + for ( var item in list ) + { + list[ item ] = list[ item ].replace( varRegex, function( match, varName ) + { + return variablesValues[ varName ]; + }); + } + } + + // Returns an object that can be used for style matching comparison. + // Attributes names and values are all lowercased, and the styles get + // merged with the style attribute. + function getAttributesForComparison( styleDefinition ) + { + // If we have already computed it, just return it. + var attribs = styleDefinition._AC; + if ( attribs ) + return attribs; + + attribs = {}; + + var length = 0; + + // Loop through all defined attributes. + var styleAttribs = styleDefinition.attributes; + if ( styleAttribs ) + { + for ( var styleAtt in styleAttribs ) + { + length++; + attribs[ styleAtt ] = styleAttribs[ styleAtt ]; + } + } + + // Includes the style definitions. + var styleText = CKEDITOR.style.getStyleText( styleDefinition ); + if ( styleText ) + { + if ( !attribs[ 'style' ] ) + length++; + attribs[ 'style' ] = styleText; + } + + // Appends the "length" information to the object. + attribs._length = length; + + // Return it, saving it to the next request. + return ( styleDefinition._AC = attribs ); + } + + /** + * Get the the collection used to compare the elements and attributes, + * defined in this style overrides, with other element. All information in + * it is lowercased. + * @param {CKEDITOR.style} style + */ + function getOverrides( style ) + { + if ( style._.overrides ) + return style._.overrides; + + var overrides = ( style._.overrides = {} ), + definition = style._.definition.overrides; + + if ( definition ) + { + // The override description can be a string, object or array. + // Internally, well handle arrays only, so transform it if needed. + if ( !CKEDITOR.tools.isArray( definition ) ) + definition = [ definition ]; + + // Loop through all override definitions. + for ( var i = 0 ; i < definition.length ; i++ ) + { + var override = definition[i]; + var elementName; + var overrideEl; + var attrs; + + // If can be a string with the element name. + if ( typeof override == 'string' ) + elementName = override.toLowerCase(); + // Or an object. + else + { + elementName = override.element ? override.element.toLowerCase() : style.element; + attrs = override.attributes; + } + + // We can have more than one override definition for the same + // element name, so we attempt to simply append information to + // it if it already exists. + overrideEl = overrides[ elementName ] || ( overrides[ elementName ] = {} ); + + if ( attrs ) + { + // The returning attributes list is an array, because we + // could have different override definitions for the same + // attribute name. + var overrideAttrs = ( overrideEl.attributes = overrideEl.attributes || new Array() ); + for ( var attName in attrs ) + { + // Each item in the attributes array is also an array, + // where [0] is the attribute name and [1] is the + // override value. + overrideAttrs.push( [ attName.toLowerCase(), attrs[ attName ] ] ); + } + } + } + } + + return overrides; + } + + // Make the comparison of attribute value easier by standardizing it. + function normalizeProperty( name, value, isStyle ) + { + var temp = new CKEDITOR.dom.element( 'span' ); + temp [ isStyle ? 'setStyle' : 'setAttribute' ]( name, value ); + return temp[ isStyle ? 'getStyle' : 'getAttribute' ]( name ); + } + + // Make the comparison of style text easier by standardizing it. + function normalizeCssText( unparsedCssText, nativeNormalize ) + { + var styleText; + if ( nativeNormalize !== false ) + { + // Injects the style in a temporary span object, so the browser parses it, + // retrieving its final format. + var temp = new CKEDITOR.dom.element( 'span' ); + temp.setAttribute( 'style', unparsedCssText ); + styleText = temp.getAttribute( 'style' ) || ''; + } + else + styleText = unparsedCssText; + + // Normalize font-family property, ignore quotes and being case insensitive. (#7322) + // http://www.w3.org/TR/css3-fonts/#font-family-the-font-family-property + styleText = styleText.replace( /(font-family:)(.*?)(?=;|$)/, function ( match, prop, val ) + { + var names = val.split( ',' ); + for ( var i = 0; i < names.length; i++ ) + names[ i ] = CKEDITOR.tools.trim( names[ i ].replace( /["']/g, '' ) ); + return prop + names.join( ',' ); + }); + + // Shrinking white-spaces around colon and semi-colon (#4147). + // Compensate tail semi-colon. + return styleText.replace( /\s*([;:])\s*/, '$1' ) + .replace( /([^\s;])$/, '$1;') + // Trimming spaces after comma(#4107), + // remove quotations(#6403), + // mostly for differences on "font-family". + .replace( /,\s+/g, ',' ) + .replace( /\"/g,'' ) + .toLowerCase(); + } + + // Turn inline style text properties into one hash. + function parseStyleText( styleText ) + { + var retval = {}; + styleText + .replace( /"/g, '"' ) + .replace( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function( match, name, value ) + { + retval[ name ] = value; + } ); + return retval; + } + + /** + * Compare two bunch of styles, with the speciality that value 'inherit' + * is treated as a wildcard which will match any value. + * @param {Object|String} source + * @param {Object|String} target + */ + function compareCssText( source, target ) + { + typeof source == 'string' && ( source = parseStyleText( source ) ); + typeof target == 'string' && ( target = parseStyleText( target ) ); + for( var name in source ) + { + if ( !( name in target && + ( target[ name ] == source[ name ] + || source[ name ] == 'inherit' + || target[ name ] == 'inherit' ) ) ) + { + return false; + } + } + return true; + } + + function applyStyle( document, remove ) + { + var selection = document.getSelection(), + // Bookmark the range so we can re-select it after processing. + bookmarks = selection.createBookmarks( 1 ), + ranges = selection.getRanges(), + func = remove ? this.removeFromRange : this.applyToRange, + range; + + var iterator = ranges.createIterator(); + while ( ( range = iterator.getNextRange() ) ) + func.call( this, range ); + + if ( bookmarks.length == 1 && bookmarks[ 0 ].collapsed ) + { + selection.selectRanges( ranges ); + document.getById( bookmarks[ 0 ].startNode ).remove(); + } + else + selection.selectBookmarks( bookmarks ); + + document.removeCustomData( 'doc_processing_style' ); + } +})(); + +CKEDITOR.styleCommand = function( style ) +{ + this.style = style; +}; + +CKEDITOR.styleCommand.prototype.exec = function( editor ) +{ + editor.focus(); + + var doc = editor.document; + + if ( doc ) + { + if ( this.state == CKEDITOR.TRISTATE_OFF ) + this.style.apply( doc ); + else if ( this.state == CKEDITOR.TRISTATE_ON ) + this.style.remove( doc ); + } + + return !!doc; +}; + +/** + * Manages styles registration and loading. See also {@link CKEDITOR.config.stylesSet}. + * @namespace + * @augments CKEDITOR.resourceManager + * @constructor + * @since 3.2 + * @example + * // The set of styles for the <b>Styles</b> combo + * CKEDITOR.stylesSet.add( 'default', + * [ + * // Block Styles + * { name : 'Blue Title' , element : 'h3', styles : { 'color' : 'Blue' } }, + * { name : 'Red Title' , element : 'h3', styles : { 'color' : 'Red' } }, + * + * // Inline Styles + * { name : 'Marker: Yellow' , element : 'span', styles : { 'background-color' : 'Yellow' } }, + * { name : 'Marker: Green' , element : 'span', styles : { 'background-color' : 'Lime' } }, + * + * // Object Styles + * { + * name : 'Image on Left', + * element : 'img', + * attributes : + * { + * 'style' : 'padding: 5px; margin-right: 5px', + * 'border' : '2', + * 'align' : 'left' + * } + * } + * ]); + */ +CKEDITOR.stylesSet = new CKEDITOR.resourceManager( '', 'stylesSet' ); + +// Backward compatibility (#5025). +CKEDITOR.addStylesSet = CKEDITOR.tools.bind( CKEDITOR.stylesSet.add, CKEDITOR.stylesSet ); +CKEDITOR.loadStylesSet = function( name, url, callback ) + { + CKEDITOR.stylesSet.addExternal( name, url, '' ); + CKEDITOR.stylesSet.load( name, callback ); + }; + + +/** + * Gets the current styleSet for this instance + * @param {Function} callback The function to be called with the styles data. + * @example + * editor.getStylesSet( function( stylesDefinitions ) {} ); + */ +CKEDITOR.editor.prototype.getStylesSet = function( callback ) +{ + if ( !this._.stylesDefinitions ) + { + var editor = this, + // Respect the backwards compatible definition entry + configStyleSet = editor.config.stylesCombo_stylesSet || editor.config.stylesSet || 'default'; + + // #5352 Allow to define the styles directly in the config object + if ( configStyleSet instanceof Array ) + { + editor._.stylesDefinitions = configStyleSet; + callback( configStyleSet ); + return; + } + + var partsStylesSet = configStyleSet.split( ':' ), + styleSetName = partsStylesSet[ 0 ], + externalPath = partsStylesSet[ 1 ], + pluginPath = CKEDITOR.plugins.registered.styles.path; + + CKEDITOR.stylesSet.addExternal( styleSetName, + externalPath ? + partsStylesSet.slice( 1 ).join( ':' ) : + pluginPath + 'styles/' + styleSetName + '.js', '' ); + + CKEDITOR.stylesSet.load( styleSetName, function( stylesSet ) + { + editor._.stylesDefinitions = stylesSet[ styleSetName ]; + callback( editor._.stylesDefinitions ); + } ) ; + } + else + callback( this._.stylesDefinitions ); +}; + +/** + * Indicates that fully selected read-only elements will be included when + * applying the style (for inline styles only). + * @name CKEDITOR.style.includeReadonly + * @type Boolean + * @default false + * @since 3.5 + */ + + /** + * Disables inline styling on read-only elements. + * @name CKEDITOR.config.disableReadonlyStyling + * @type Boolean + * @default false + * @since 3.5 + */ + +/** + * The "styles definition set" to use in the editor. They will be used in the + * styles combo and the Style selector of the div container. <br> + * The styles may be defined in the page containing the editor, or can be + * loaded on demand from an external file. In the second case, if this setting + * contains only a name, the styles definition file will be loaded from the + * "styles" folder inside the styles plugin folder. + * Otherwise, this setting has the "name:url" syntax, making it + * possible to set the URL from which loading the styles file.<br> + * Previously this setting was available as config.stylesCombo_stylesSet<br> + * @name CKEDITOR.config.stylesSet + * @type String|Array + * @default 'default' + * @since 3.3 + * @example + * // Load from the styles' styles folder (mystyles.js file). + * config.stylesSet = 'mystyles'; + * @example + * // Load from a relative URL. + * config.stylesSet = 'mystyles:/editorstyles/styles.js'; + * @example + * // Load from a full URL. + * config.stylesSet = 'mystyles:http://www.example.com/editorstyles/styles.js'; + * @example + * // Load from a list of definitions. + * config.stylesSet = [ + * { name : 'Strong Emphasis', element : 'strong' }, + * { name : 'Emphasis', element : 'em' }, ... ]; + */ diff --git a/_source/plugins/styles/styles/default.js b/_source/plugins/styles/styles/default.js new file mode 100644 index 0000000..74ad133 --- /dev/null +++ b/_source/plugins/styles/styles/default.js @@ -0,0 +1,88 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.stylesSet.add( 'default', +[ + /* Block Styles */ + + // These styles are already available in the "Format" combo, so they are + // not needed here by default. You may enable them to avoid placing the + // "Format" combo in the toolbar, maintaining the same features. + /* + { name : 'Paragraph' , element : 'p' }, + { name : 'Heading 1' , element : 'h1' }, + { name : 'Heading 2' , element : 'h2' }, + { name : 'Heading 3' , element : 'h3' }, + { name : 'Heading 4' , element : 'h4' }, + { name : 'Heading 5' , element : 'h5' }, + { name : 'Heading 6' , element : 'h6' }, + { name : 'Preformatted Text', element : 'pre' }, + { name : 'Address' , element : 'address' }, + */ + + { name : 'Blue Title' , element : 'h3', styles : { 'color' : 'Blue' } }, + { name : 'Red Title' , element : 'h3', styles : { 'color' : 'Red' } }, + + /* Inline Styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles combo, removing them from the toolbar. + /* + { name : 'Strong' , element : 'strong', overrides : 'b' }, + { name : 'Emphasis' , element : 'em' , overrides : 'i' }, + { name : 'Underline' , element : 'u' }, + { name : 'Strikethrough' , element : 'strike' }, + { name : 'Subscript' , element : 'sub' }, + { name : 'Superscript' , element : 'sup' }, + */ + + { name : 'Marker: Yellow' , element : 'span', styles : { 'background-color' : 'Yellow' } }, + { name : 'Marker: Green' , element : 'span', styles : { 'background-color' : 'Lime' } }, + + { name : 'Big' , element : 'big' }, + { name : 'Small' , element : 'small' }, + { name : 'Typewriter' , element : 'tt' }, + + { name : 'Computer Code' , element : 'code' }, + { name : 'Keyboard Phrase' , element : 'kbd' }, + { name : 'Sample Text' , element : 'samp' }, + { name : 'Variable' , element : 'var' }, + + { name : 'Deleted Text' , element : 'del' }, + { name : 'Inserted Text' , element : 'ins' }, + + { name : 'Cited Work' , element : 'cite' }, + { name : 'Inline Quotation' , element : 'q' }, + + { name : 'Language: RTL' , element : 'span', attributes : { 'dir' : 'rtl' } }, + { name : 'Language: LTR' , element : 'span', attributes : { 'dir' : 'ltr' } }, + + /* Object Styles */ + + { + name : 'Image on Left', + element : 'img', + attributes : + { + 'style' : 'padding: 5px; margin-right: 5px', + 'border' : '2', + 'align' : 'left' + } + }, + + { + name : 'Image on Right', + element : 'img', + attributes : + { + 'style' : 'padding: 5px; margin-left: 5px', + 'border' : '2', + 'align' : 'right' + } + }, + + { name : 'Borderless Table', element : 'table', styles: { 'border-style': 'hidden', 'background-color' : '#E6E6FA' } }, + { name : 'Square Bulleted List', element : 'ul', styles : { 'list-style-type' : 'square' } } +]); diff --git a/_source/plugins/stylescombo/plugin.js b/_source/plugins/stylescombo/plugin.js new file mode 100644 index 0000000..086f109 --- /dev/null +++ b/_source/plugins/stylescombo/plugin.js @@ -0,0 +1,218 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + CKEDITOR.plugins.add( 'stylescombo', + { + requires : [ 'richcombo', 'styles' ], + + init : function( editor ) + { + var config = editor.config, + lang = editor.lang.stylesCombo, + styles = {}, + stylesList = [], + combo; + + function loadStylesSet( callback ) + { + editor.getStylesSet( function( stylesDefinitions ) + { + if ( !stylesList.length ) + { + var style, + styleName; + + // Put all styles into an Array. + for ( var i = 0, count = stylesDefinitions.length ; i < count ; i++ ) + { + var styleDefinition = stylesDefinitions[ i ]; + + styleName = styleDefinition.name; + + style = styles[ styleName ] = new CKEDITOR.style( styleDefinition ); + style._name = styleName; + style._.enterMode = config.enterMode; + + stylesList.push( style ); + } + + // Sorts the Array, so the styles get grouped by type. + stylesList.sort( sortStyles ); + } + + callback && callback(); + }); + } + + editor.ui.addRichCombo( 'Styles', + { + label : lang.label, + title : lang.panelTitle, + className : 'cke_styles', + + panel : + { + css : editor.skin.editor.css.concat( config.contentsCss ), + multiSelect : true, + attributes : { 'aria-label' : lang.panelTitle } + }, + + init : function() + { + combo = this; + + loadStylesSet( function() + { + var style, + styleName, + lastType, + type, + i, + count; + + // Loop over the Array, adding all items to the + // combo. + for ( i = 0, count = stylesList.length ; i < count ; i++ ) + { + style = stylesList[ i ]; + styleName = style._name; + type = style.type; + + if ( type != lastType ) + { + combo.startGroup( lang[ 'panelTitle' + String( type ) ] ); + lastType = type; + } + + combo.add( + styleName, + style.type == CKEDITOR.STYLE_OBJECT ? styleName : style.buildPreview(), + styleName ); + } + + combo.commit(); + + }); + }, + + onClick : function( value ) + { + editor.focus(); + editor.fire( 'saveSnapshot' ); + + var style = styles[ value ], + selection = editor.getSelection(), + elementPath = new CKEDITOR.dom.elementPath( selection.getStartElement() ); + + style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document ); + + editor.fire( 'saveSnapshot' ); + }, + + onRender : function() + { + editor.on( 'selectionChange', function( ev ) + { + var currentValue = this.getValue(), + elementPath = ev.data.path, + elements = elementPath.elements; + + // For each element into the elements path. + for ( var i = 0, count = elements.length, element ; i < count ; i++ ) + { + element = elements[i]; + + // Check if the element is removable by any of + // the styles. + for ( var value in styles ) + { + if ( styles[ value ].checkElementRemovable( element, true ) ) + { + if ( value != currentValue ) + this.setValue( value ); + return; + } + } + } + + // If no styles match, just empty it. + this.setValue( '' ); + }, + this); + }, + + onOpen : function() + { + if ( CKEDITOR.env.ie || CKEDITOR.env.webkit ) + editor.focus(); + + var selection = editor.getSelection(), + element = selection.getSelectedElement(), + elementPath = new CKEDITOR.dom.elementPath( element || selection.getStartElement() ), + counter = [ 0, 0, 0, 0 ]; + + this.showAll(); + this.unmarkAll(); + for ( var name in styles ) + { + var style = styles[ name ], + type = style.type; + + if ( style.checkActive( elementPath ) ) + this.mark( name ); + else if ( type == CKEDITOR.STYLE_OBJECT && !style.checkApplicable( elementPath ) ) + { + this.hideItem( name ); + counter[ type ]--; + } + + counter[ type ]++; + } + + if ( !counter[ CKEDITOR.STYLE_BLOCK ] ) + this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_BLOCK ) ] ); + + if ( !counter[ CKEDITOR.STYLE_INLINE ] ) + this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_INLINE ) ] ); + + if ( !counter[ CKEDITOR.STYLE_OBJECT ] ) + this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_OBJECT ) ] ); + }, + + // Force a reload of the data + reset: function() + { + if ( combo ) + { + delete combo._.panel; + delete combo._.list; + combo._.committed = 0; + combo._.items = {}; + combo._.state = CKEDITOR.TRISTATE_OFF; + } + styles = {}; + stylesList = []; + loadStylesSet(); + } + }); + + editor.on( 'instanceReady', function() { loadStylesSet(); } ); + } + }); + + function sortStyles( styleA, styleB ) + { + var typeA = styleA.type, + typeB = styleB.type; + + return typeA == typeB ? 0 : + typeA == CKEDITOR.STYLE_OBJECT ? -1 : + typeB == CKEDITOR.STYLE_OBJECT ? 1 : + typeB == CKEDITOR.STYLE_BLOCK ? 1 : + -1; + } +})(); diff --git a/_source/plugins/stylesheetparser/plugin.js b/_source/plugins/stylesheetparser/plugin.js new file mode 100644 index 0000000..23ffc85 --- /dev/null +++ b/_source/plugins/stylesheetparser/plugin.js @@ -0,0 +1,148 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @stylesheetParser plugin. + */ + +(function() +{ + // We want to extract only the elements with classes defined in the stylesheets: + function parseClasses( aRules, skipSelectors, validSelectors ) + { + // aRules are just the different rules in the style sheets + // We want to merge them and them split them by commas, so we end up with only + // the selectors + var s = aRules.join(' '); + // Remove selectors splitting the elements, leave only the class selector (.) + s = s.replace( /(,|>|\+|~)/g, ' ' ); + // Remove attribute selectors: table[border="0"] + s = s.replace( /\[[^\]]*/g, '' ); + // Remove Ids: div#main + s = s.replace( /#[^\s]*/g, '' ); + // Remove pseudo-selectors and pseudo-elements: :hover :nth-child(2n+1) ::before + s = s.replace( /\:{1,2}[^\s]*/g, '' ); + + s = s.replace( /\s+/g, ' ' ); + + var aSelectors = s.split( ' ' ), + aClasses = []; + + for ( var i = 0; i < aSelectors.length ; i++ ) + { + var selector = aSelectors[ i ]; + + if ( validSelectors.test( selector ) && !skipSelectors.test( selector ) ) + { + // If we still don't know about this one, add it + if ( CKEDITOR.tools.indexOf( aClasses, selector ) == -1 ) + aClasses.push( selector ); + } + } + + return aClasses; + } + + function LoadStylesCSS( theDoc, skipSelectors, validSelectors ) + { + var styles = [], + // It will hold all the rules of the applied stylesheets (except those internal to CKEditor) + aRules = [], + i; + + for ( i = 0; i < theDoc.styleSheets.length; i++ ) + { + var sheet = theDoc.styleSheets[ i ], + node = sheet.ownerNode || sheet.owningElement; + + // Skip the internal stylesheets + if ( node.getAttribute( 'data-cke-temp' ) ) + continue; + + // Exclude stylesheets injected by extensions + if ( sheet.href && sheet.href.substr(0, 9) == 'chrome://' ) + continue; + + var sheetRules = sheet.cssRules || sheet.rules; + for ( var j = 0; j < sheetRules.length; j++ ) + aRules.push( sheetRules[ j ].selectorText ); + } + + var aClasses = parseClasses( aRules, skipSelectors, validSelectors ); + + // Add each style to our "Styles" collection. + for ( i = 0; i < aClasses.length; i++ ) + { + var oElement = aClasses[ i ].split( '.' ), + element = oElement[ 0 ].toLowerCase(), + sClassName = oElement[ 1 ]; + + styles.push( { + name : element + '.' + sClassName, + element : element, + attributes : {'class' : sClassName} + }); + } + + return styles; + } + + // Register a plugin named "stylesheetparser". + CKEDITOR.plugins.add( 'stylesheetparser', + { + requires: [ 'styles' ], + onLoad : function() + { + var obj = CKEDITOR.editor.prototype; + obj.getStylesSet = CKEDITOR.tools.override( obj.getStylesSet, function( org ) + { + return function( callback ) + { + var self = this; + org.call( this, function( definitions ) + { + // Rules that must be skipped + var skipSelectors = self.config.stylesheetParser_skipSelectors || ( /(^body\.|^\.)/i ), + // Rules that are valid + validSelectors = self.config.stylesheetParser_validSelectors || ( /\w+\.\w+/ ); + + callback( ( self._.stylesDefinitions = definitions.concat( LoadStylesCSS( self.document.$, skipSelectors, validSelectors ) ) ) ); + }); + }; + }); + + } + }); +})(); + + +/** + * A regular expression that defines whether a CSS rule will be + * skipped by the Stylesheet Parser plugin. A CSS rule matching + * the regular expression will be ignored and will not be available + * in the Styles drop-down list. + * @name CKEDITOR.config.stylesheetParser_skipSelectors + * @type RegExp + * @default /(^body\.|^\.)/i + * @since 3.6 + * @see CKEDITOR.config.stylesheetParser_validSelectors + * @example + * // Ignore rules for body and caption elements, classes starting with "high", and any class defined for no specific element. + * config.stylesheetParser_skipSelectors = /(^body\.|^caption\.|\.high|^\.)/i; + */ + + /** + * A regular expression that defines which CSS rules will be used + * by the Stylesheet Parser plugin. A CSS rule matching the regular + * expression will be available in the Styles drop-down list. + * @name CKEDITOR.config.stylesheetParser_validSelectors + * @type RegExp + * @default /\w+\.\w+/ + * @since 3.6 + * @see CKEDITOR.config.stylesheetParser_skipSelectors + * @example + * // Only add rules for p and span elements. + * config.stylesheetParser_validSelectors = /\^(p|span)\.\w+/; + */ diff --git a/_source/plugins/tab/plugin.js b/_source/plugins/tab/plugin.js new file mode 100644 index 0000000..f0a21b4 --- /dev/null +++ b/_source/plugins/tab/plugin.js @@ -0,0 +1,367 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var meta = + { + editorFocus : false, + modes : { wysiwyg:1, source:1 } + }; + + var blurCommand = + { + exec : function( editor ) + { + editor.container.focusNext( true, editor.tabIndex ); + } + }; + + var blurBackCommand = + { + exec : function( editor ) + { + editor.container.focusPrevious( true, editor.tabIndex ); + } + }; + + function selectNextCellCommand( backward ) + { + return { + editorFocus : false, + canUndo : false, + modes : { wysiwyg : 1 }, + exec : function( editor ) + { + if ( editor.focusManager.hasFocus ) + { + var sel = editor.getSelection(), + ancestor = sel.getCommonAncestor(), + cell; + + if ( ( cell = ( ancestor.getAscendant( 'td', true ) || ancestor.getAscendant( 'th', true ) ) ) ) + { + var resultRange = new CKEDITOR.dom.range( editor.document ), + next = CKEDITOR.tools.tryThese( function() + { + var row = cell.getParent(), + next = row.$.cells[ cell.$.cellIndex + ( backward ? - 1 : 1 ) ]; + + // Invalid any empty value. + next.parentNode.parentNode; + return next; + }, + function() + { + var row = cell.getParent(), + table = row.getAscendant( 'table' ), + nextRow = table.$.rows[ row.$.rowIndex + ( backward ? - 1 : 1 ) ]; + + return nextRow.cells[ backward? nextRow.cells.length -1 : 0 ]; + }); + + // Clone one more row at the end of table and select the first newly established cell. + if ( ! ( next || backward ) ) + { + var table = cell.getAscendant( 'table' ).$, + cells = cell.getParent().$.cells; + + var newRow = new CKEDITOR.dom.element( table.insertRow( -1 ), editor.document ); + + for ( var i = 0, count = cells.length ; i < count; i++ ) + { + var newCell = newRow.append( new CKEDITOR.dom.element( + cells[ i ], editor.document ).clone( false, false ) ); + !CKEDITOR.env.ie && newCell.appendBogus(); + } + + resultRange.moveToElementEditStart( newRow ); + } + else if ( next ) + { + next = new CKEDITOR.dom.element( next ); + resultRange.moveToElementEditStart( next ); + // Avoid selecting empty block makes the cursor blind. + if ( !( resultRange.checkStartOfBlock() && resultRange.checkEndOfBlock() ) ) + resultRange.selectNodeContents( next ); + } + else + return true; + + resultRange.select( true ); + return true; + } + } + return false; + } + }; + } + + CKEDITOR.plugins.add( 'tab', + { + requires : [ 'keystrokes' ], + + init : function( editor ) + { + var tabTools = editor.config.enableTabKeyTools !== false, + tabSpaces = editor.config.tabSpaces || 0, + tabText = ''; + + while ( tabSpaces-- ) + tabText += '\xa0'; + + if ( tabText ) + { + editor.on( 'key', function( ev ) + { + if ( ev.data.keyCode == 9 ) // TAB + { + editor.insertHtml( tabText ); + ev.cancel(); + } + }); + } + + if ( tabTools ) + { + editor.on( 'key', function( ev ) + { + if ( ev.data.keyCode == 9 && editor.execCommand( 'selectNextCell' ) || // TAB + ev.data.keyCode == ( CKEDITOR.SHIFT + 9 ) && editor.execCommand( 'selectPreviousCell' ) ) // SHIFT+TAB + ev.cancel(); + }); + } + + if ( CKEDITOR.env.webkit || CKEDITOR.env.gecko ) + { + editor.on( 'key', function( ev ) + { + var keyCode = ev.data.keyCode; + + if ( keyCode == 9 && !tabText ) // TAB + { + ev.cancel(); + editor.execCommand( 'blur' ); + } + + if ( keyCode == ( CKEDITOR.SHIFT + 9 ) ) // SHIFT+TAB + { + editor.execCommand( 'blurBack' ); + ev.cancel(); + } + }); + } + + editor.addCommand( 'blur', CKEDITOR.tools.extend( blurCommand, meta ) ); + editor.addCommand( 'blurBack', CKEDITOR.tools.extend( blurBackCommand, meta ) ); + editor.addCommand( 'selectNextCell', selectNextCellCommand() ); + editor.addCommand( 'selectPreviousCell', selectNextCellCommand( true ) ); + } + }); +})(); + +/** + * Moves the UI focus to the element following this element in the tabindex + * order. + * @example + * var element = CKEDITOR.document.getById( 'example' ); + * element.focusNext(); + */ +CKEDITOR.dom.element.prototype.focusNext = function( ignoreChildren, indexToUse ) +{ + var $ = this.$, + curTabIndex = ( indexToUse === undefined ? this.getTabIndex() : indexToUse ), + passedCurrent, enteredCurrent, + elected, electedTabIndex, + element, elementTabIndex; + + if ( curTabIndex <= 0 ) + { + // If this element has tabindex <= 0 then we must simply look for any + // element following it containing tabindex=0. + + element = this.getNextSourceNode( ignoreChildren, CKEDITOR.NODE_ELEMENT ); + + while ( element ) + { + if ( element.isVisible() && element.getTabIndex() === 0 ) + { + elected = element; + break; + } + + element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ); + } + } + else + { + // If this element has tabindex > 0 then we must look for: + // 1. An element following this element with the same tabindex. + // 2. The first element in source other with the lowest tabindex + // that is higher than this element tabindex. + // 3. The first element with tabindex=0. + + element = this.getDocument().getBody().getFirst(); + + while ( ( element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) ) + { + if ( !passedCurrent ) + { + if ( !enteredCurrent && element.equals( this ) ) + { + enteredCurrent = true; + + // Ignore this element, if required. + if ( ignoreChildren ) + { + if ( !( element = element.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) ) + break; + passedCurrent = 1; + } + } + else if ( enteredCurrent && !this.contains( element ) ) + passedCurrent = 1; + } + + if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 ) + continue; + + if ( passedCurrent && elementTabIndex == curTabIndex ) + { + elected = element; + break; + } + + if ( elementTabIndex > curTabIndex && ( !elected || !electedTabIndex || elementTabIndex < electedTabIndex ) ) + { + elected = element; + electedTabIndex = elementTabIndex; + } + else if ( !elected && elementTabIndex === 0 ) + { + elected = element; + electedTabIndex = elementTabIndex; + } + } + } + + if ( elected ) + elected.focus(); +}; + +/** + * Moves the UI focus to the element before this element in the tabindex order. + * @example + * var element = CKEDITOR.document.getById( 'example' ); + * element.focusPrevious(); + */ +CKEDITOR.dom.element.prototype.focusPrevious = function( ignoreChildren, indexToUse ) +{ + var $ = this.$, + curTabIndex = ( indexToUse === undefined ? this.getTabIndex() : indexToUse ), + passedCurrent, enteredCurrent, + elected, + electedTabIndex = 0, + elementTabIndex; + + var element = this.getDocument().getBody().getLast(); + + while ( ( element = element.getPreviousSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) ) + { + if ( !passedCurrent ) + { + if ( !enteredCurrent && element.equals( this ) ) + { + enteredCurrent = true; + + // Ignore this element, if required. + if ( ignoreChildren ) + { + if ( !( element = element.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) ) + break; + passedCurrent = 1; + } + } + else if ( enteredCurrent && !this.contains( element ) ) + passedCurrent = 1; + } + + if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 ) + continue; + + if ( curTabIndex <= 0 ) + { + // If this element has tabindex <= 0 then we must look for: + // 1. An element before this one containing tabindex=0. + // 2. The last element with the highest tabindex. + + if ( passedCurrent && elementTabIndex === 0 ) + { + elected = element; + break; + } + + if ( elementTabIndex > electedTabIndex ) + { + elected = element; + electedTabIndex = elementTabIndex; + } + } + else + { + // If this element has tabindex > 0 we must look for: + // 1. An element preceeding this one, with the same tabindex. + // 2. The last element in source other with the highest tabindex + // that is lower than this element tabindex. + + if ( passedCurrent && elementTabIndex == curTabIndex ) + { + elected = element; + break; + } + + if ( elementTabIndex < curTabIndex && ( !elected || elementTabIndex > electedTabIndex ) ) + { + elected = element; + electedTabIndex = elementTabIndex; + } + } + } + + if ( elected ) + elected.focus(); +}; + +/** + * Intructs the editor to add a number of spaces (&nbsp;) to the text when + * hitting the TAB key. If set to zero, the TAB key will be used to move the + * cursor focus to the next element in the page, out of the editor focus. + * @name CKEDITOR.config.tabSpaces + * @type Number + * @default 0 + * @example + * config.tabSpaces = 4; + */ + +/** + * Allow context-sensitive tab key behaviors, including the following scenarios: + * <h5>When selection is anchored inside <b>table cells</b>:</h5> + * <ul> + * <li>If TAB is pressed, select the contents of the "next" cell. If in the last cell in the table, add a new row to it and focus its first cell.</li> + * <li>If SHIFT+TAB is pressed, select the contents of the "previous" cell. Do nothing when it's in the first cell.</li> + * </ul> + * @name CKEDITOR.config.enableTabKeyTools + * @type Boolean + * @default true + * @example + * config.enableTabKeyTools = false; + */ + +// If the TAB key is not supposed to be enabled for navigation, the following +// settings could be used alternatively: +// config.keystrokes.push( +// [ CKEDITOR.ALT + 38 /*Arrow Up*/, 'selectPreviousCell' ], +// [ CKEDITOR.ALT + 40 /*Arrow Down*/, 'selectNextCell' ] +// ); diff --git a/_source/plugins/table/dialogs/table.js b/_source/plugins/table/dialogs/table.js new file mode 100644 index 0000000..2ceebdc --- /dev/null +++ b/_source/plugins/table/dialogs/table.js @@ -0,0 +1,602 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var defaultToPixel = CKEDITOR.tools.cssLength; + + var commitValue = function( data ) + { + var id = this.id; + if ( !data.info ) + data.info = {}; + data.info[id] = this.getValue(); + }; + + function tableDialog( editor, command ) + { + var makeElement = function( name ) + { + return new CKEDITOR.dom.element( name, editor.document ); + }; + + var dialogadvtab = editor.plugins.dialogadvtab; + + return { + title : editor.lang.table.title, + minWidth : 310, + minHeight : CKEDITOR.env.ie ? 310 : 280, + + onLoad : function() + { + var dialog = this; + + var styles = dialog.getContentElement( 'advanced', 'advStyles' ); + + if ( styles ) + { + styles.on( 'change', function( evt ) + { + // Synchronize width value. + var width = this.getStyle( 'width', '' ), + txtWidth = dialog.getContentElement( 'info', 'txtWidth' ); + + txtWidth && txtWidth.setValue( width, true ); + + // Synchronize height value. + var height = this.getStyle( 'height', '' ), + txtHeight = dialog.getContentElement( 'info', 'txtHeight' ); + + txtHeight && txtHeight.setValue( height, true ); + }); + } + }, + + onShow : function() + { + // Detect if there's a selected table. + var selection = editor.getSelection(), + ranges = selection.getRanges(), + selectedTable = null; + + var rowsInput = this.getContentElement( 'info', 'txtRows' ), + colsInput = this.getContentElement( 'info', 'txtCols' ), + widthInput = this.getContentElement( 'info', 'txtWidth' ), + heightInput = this.getContentElement( 'info', 'txtHeight' ); + + if ( command == 'tableProperties' ) + { + if ( ( selectedTable = selection.getSelectedElement() ) ) + selectedTable = selectedTable.getAscendant( 'table', true ); + else if ( ranges.length > 0 ) + { + // Webkit could report the following range on cell selection (#4948): + // <table><tr><td>[ </td></tr></table>] + if ( CKEDITOR.env.webkit ) + ranges[ 0 ].shrink( CKEDITOR.NODE_ELEMENT ); + + var rangeRoot = ranges[0].getCommonAncestor( true ); + selectedTable = rangeRoot.getAscendant( 'table', true ); + } + + // Save a reference to the selected table, and push a new set of default values. + this._.selectedElement = selectedTable; + } + + // Enable or disable the row, cols, width fields. + if ( selectedTable ) + { + this.setupContent( selectedTable ); + rowsInput && rowsInput.disable(); + colsInput && colsInput.disable(); + } + else + { + rowsInput && rowsInput.enable(); + colsInput && colsInput.enable(); + } + + // Call the onChange method for the widht and height fields so + // they get reflected into the Advanced tab. + widthInput && widthInput.onChange(); + heightInput && heightInput.onChange(); + }, + onOk : function() + { + var selection = editor.getSelection(), + bms = this._.selectedElement && selection.createBookmarks(); + + var table = this._.selectedElement || makeElement( 'table' ), + me = this, + data = {}; + + this.commitContent( data, table ); + + if ( data.info ) + { + var info = data.info; + + // Generate the rows and cols. + if ( !this._.selectedElement ) + { + var tbody = table.append( makeElement( 'tbody' ) ), + rows = parseInt( info.txtRows, 10 ) || 0, + cols = parseInt( info.txtCols, 10 ) || 0; + + for ( var i = 0 ; i < rows ; i++ ) + { + var row = tbody.append( makeElement( 'tr' ) ); + for ( var j = 0 ; j < cols ; j++ ) + { + var cell = row.append( makeElement( 'td' ) ); + if ( !CKEDITOR.env.ie ) + cell.append( makeElement( 'br' ) ); + } + } + } + + // Modify the table headers. Depends on having rows and cols generated + // correctly so it can't be done in commit functions. + + // Should we make a <thead>? + var headers = info.selHeaders; + if ( !table.$.tHead && ( headers == 'row' || headers == 'both' ) ) + { + var thead = new CKEDITOR.dom.element( table.$.createTHead() ); + tbody = table.getElementsByTag( 'tbody' ).getItem( 0 ); + var theRow = tbody.getElementsByTag( 'tr' ).getItem( 0 ); + + // Change TD to TH: + for ( i = 0 ; i < theRow.getChildCount() ; i++ ) + { + var th = theRow.getChild( i ); + // Skip bookmark nodes. (#6155) + if ( th.type == CKEDITOR.NODE_ELEMENT && !th.data( 'cke-bookmark' ) ) + { + th.renameNode( 'th' ); + th.setAttribute( 'scope', 'col' ); + } + } + thead.append( theRow.remove() ); + } + + if ( table.$.tHead !== null && !( headers == 'row' || headers == 'both' ) ) + { + // Move the row out of the THead and put it in the TBody: + thead = new CKEDITOR.dom.element( table.$.tHead ); + tbody = table.getElementsByTag( 'tbody' ).getItem( 0 ); + + var previousFirstRow = tbody.getFirst(); + while ( thead.getChildCount() > 0 ) + { + theRow = thead.getFirst(); + for ( i = 0; i < theRow.getChildCount() ; i++ ) + { + var newCell = theRow.getChild( i ); + if ( newCell.type == CKEDITOR.NODE_ELEMENT ) + { + newCell.renameNode( 'td' ); + newCell.removeAttribute( 'scope' ); + } + } + theRow.insertBefore( previousFirstRow ); + } + thead.remove(); + } + + // Should we make all first cells in a row TH? + if ( !this.hasColumnHeaders && ( headers == 'col' || headers == 'both' ) ) + { + for ( row = 0 ; row < table.$.rows.length ; row++ ) + { + newCell = new CKEDITOR.dom.element( table.$.rows[ row ].cells[ 0 ] ); + newCell.renameNode( 'th' ); + newCell.setAttribute( 'scope', 'row' ); + } + } + + // Should we make all first TH-cells in a row make TD? If 'yes' we do it the other way round :-) + if ( ( this.hasColumnHeaders ) && !( headers == 'col' || headers == 'both' ) ) + { + for ( i = 0 ; i < table.$.rows.length ; i++ ) + { + row = new CKEDITOR.dom.element( table.$.rows[i] ); + if ( row.getParent().getName() == 'tbody' ) + { + newCell = new CKEDITOR.dom.element( row.$.cells[0] ); + newCell.renameNode( 'td' ); + newCell.removeAttribute( 'scope' ); + } + } + } + + // Set the width and height. + info.txtHeight ? table.setStyle( 'height', info.txtHeight ) : table.removeStyle( 'height' ); + info.txtWidth ? table.setStyle( 'width', info.txtWidth ) : table.removeStyle( 'width' ); + + if ( !table.getAttribute( 'style' ) ) + table.removeAttribute( 'style' ); + } + + // Insert the table element if we're creating one. + if ( !this._.selectedElement ) + { + editor.insertElement( table ); + // Override the default cursor position after insertElement to place + // cursor inside the first cell (#7959), IE needs a while. + setTimeout( function() + { + var firstCell = new CKEDITOR.dom.element( table.$.rows[ 0 ].cells[ 0 ] ); + var range = new CKEDITOR.dom.range( editor.document ); + range.moveToPosition( firstCell, CKEDITOR.POSITION_AFTER_START ); + range.select( 1 ); + }, 0 ); + } + // Properly restore the selection, (#4822) but don't break + // because of this, e.g. updated table caption. + else + try { selection.selectBookmarks( bms ); } catch( er ){} + }, + contents : [ + { + id : 'info', + label : editor.lang.table.title, + elements : + [ + { + type : 'hbox', + widths : [ null, null ], + styles : [ 'vertical-align:top' ], + children : + [ + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'text', + id : 'txtRows', + 'default' : 3, + label : editor.lang.table.rows, + required : true, + controlStyle : 'width:5em', + validate : function() + { + var pass = true, + value = this.getValue(); + pass = pass && CKEDITOR.dialog.validate.integer()( value ) + && value > 0; + if ( !pass ) + { + alert( editor.lang.table.invalidRows ); + this.select(); + } + return pass; + }, + setup : function( selectedElement ) + { + this.setValue( selectedElement.$.rows.length ); + }, + commit : commitValue + }, + { + type : 'text', + id : 'txtCols', + 'default' : 2, + label : editor.lang.table.columns, + required : true, + controlStyle : 'width:5em', + validate : function() + { + var pass = true, + value = this.getValue(); + pass = pass && CKEDITOR.dialog.validate.integer()( value ) + && value > 0; + if ( !pass ) + { + alert( editor.lang.table.invalidCols ); + this.select(); + } + return pass; + }, + setup : function( selectedTable ) + { + this.setValue( selectedTable.$.rows[0].cells.length); + }, + commit : commitValue + }, + { + type : 'html', + html : ' ' + }, + { + type : 'select', + id : 'selHeaders', + 'default' : '', + label : editor.lang.table.headers, + items : + [ + [ editor.lang.table.headersNone, '' ], + [ editor.lang.table.headersRow, 'row' ], + [ editor.lang.table.headersColumn, 'col' ], + [ editor.lang.table.headersBoth, 'both' ] + ], + setup : function( selectedTable ) + { + // Fill in the headers field. + var dialog = this.getDialog(); + dialog.hasColumnHeaders = true; + + // Check if all the first cells in every row are TH + for ( var row = 0 ; row < selectedTable.$.rows.length ; row++ ) + { + // If just one cell isn't a TH then it isn't a header column + if ( selectedTable.$.rows[row].cells[0].nodeName.toLowerCase() != 'th' ) + { + dialog.hasColumnHeaders = false; + break; + } + } + + // Check if the table contains <thead>. + if ( ( selectedTable.$.tHead !== null) ) + this.setValue( dialog.hasColumnHeaders ? 'both' : 'row' ); + else + this.setValue( dialog.hasColumnHeaders ? 'col' : '' ); + }, + commit : commitValue + }, + { + type : 'text', + id : 'txtBorder', + 'default' : 1, + label : editor.lang.table.border, + controlStyle : 'width:3em', + validate : CKEDITOR.dialog.validate['number']( editor.lang.table.invalidBorder ), + setup : function( selectedTable ) + { + this.setValue( selectedTable.getAttribute( 'border' ) || '' ); + }, + commit : function( data, selectedTable ) + { + if ( this.getValue() ) + selectedTable.setAttribute( 'border', this.getValue() ); + else + selectedTable.removeAttribute( 'border' ); + } + }, + { + id : 'cmbAlign', + type : 'select', + 'default' : '', + label : editor.lang.common.align, + items : + [ + [ editor.lang.common.notSet , ''], + [ editor.lang.common.alignLeft , 'left'], + [ editor.lang.common.alignCenter , 'center'], + [ editor.lang.common.alignRight , 'right'] + ], + setup : function( selectedTable ) + { + this.setValue( selectedTable.getAttribute( 'align' ) || '' ); + }, + commit : function( data, selectedTable ) + { + if ( this.getValue() ) + selectedTable.setAttribute( 'align', this.getValue() ); + else + selectedTable.removeAttribute( 'align' ); + } + } + ] + }, + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'hbox', + widths : [ '5em' ], + children : + [ + { + type : 'text', + id : 'txtWidth', + controlStyle : 'width:5em', + label : editor.lang.common.width, + 'default' : 500, + getValue : defaultToPixel, + validate : CKEDITOR.dialog.validate.cssLength( editor.lang.common.invalidCssLength.replace( '%1', editor.lang.common.width ) ), + onChange : function() + { + var styles = this.getDialog().getContentElement( 'advanced', 'advStyles' ); + styles && styles.updateStyle( 'width', this.getValue() ); + }, + setup : function( selectedTable ) + { + var val = selectedTable.getStyle( 'width' ); + val && this.setValue( val ); + }, + commit : commitValue + } + ] + }, + { + type : 'hbox', + widths : [ '5em' ], + children : + [ + { + type : 'text', + id : 'txtHeight', + controlStyle : 'width:5em', + label : editor.lang.common.height, + 'default' : '', + getValue : defaultToPixel, + validate : CKEDITOR.dialog.validate.cssLength( editor.lang.common.invalidCssLength.replace( '%1', editor.lang.common.height ) ), + onChange : function() + { + var styles = this.getDialog().getContentElement( 'advanced', 'advStyles' ); + styles && styles.updateStyle( 'height', this.getValue() ); + }, + + setup : function( selectedTable ) + { + var val = selectedTable.getStyle( 'width' ); + val && this.setValue( val ); + }, + commit : commitValue + } + ] + }, + { + type : 'html', + html : ' ' + }, + { + type : 'text', + id : 'txtCellSpace', + controlStyle : 'width:3em', + label : editor.lang.table.cellSpace, + 'default' : 1, + validate : CKEDITOR.dialog.validate.number( editor.lang.table.invalidCellSpacing ), + setup : function( selectedTable ) + { + this.setValue( selectedTable.getAttribute( 'cellSpacing' ) || '' ); + }, + commit : function( data, selectedTable ) + { + if ( this.getValue() ) + selectedTable.setAttribute( 'cellSpacing', this.getValue() ); + else + selectedTable.removeAttribute( 'cellSpacing' ); + } + }, + { + type : 'text', + id : 'txtCellPad', + controlStyle : 'width:3em', + label : editor.lang.table.cellPad, + 'default' : 1, + validate : CKEDITOR.dialog.validate.number( editor.lang.table.invalidCellPadding ), + setup : function( selectedTable ) + { + this.setValue( selectedTable.getAttribute( 'cellPadding' ) || '' ); + }, + commit : function( data, selectedTable ) + { + if ( this.getValue() ) + selectedTable.setAttribute( 'cellPadding', this.getValue() ); + else + selectedTable.removeAttribute( 'cellPadding' ); + } + } + ] + } + ] + }, + { + type : 'html', + align : 'right', + html : '' + }, + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'text', + id : 'txtCaption', + label : editor.lang.table.caption, + setup : function( selectedTable ) + { + this.enable(); + + var nodeList = selectedTable.getElementsByTag( 'caption' ); + if ( nodeList.count() > 0 ) + { + var caption = nodeList.getItem( 0 ); + var firstElementChild = caption.getFirst( CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_ELEMENT ) ); + + if ( firstElementChild && !firstElementChild.equals( caption.getBogus() ) ) + { + this.disable(); + this.setValue( caption.getText() ); + return; + } + + caption = CKEDITOR.tools.trim( caption.getText() ); + this.setValue( caption ); + } + }, + commit : function( data, table ) + { + if ( !this.isEnabled() ) + return; + + var caption = this.getValue(), + captionElement = table.getElementsByTag( 'caption' ); + if ( caption ) + { + if ( captionElement.count() > 0 ) + { + captionElement = captionElement.getItem( 0 ); + captionElement.setHtml( '' ); + } + else + { + captionElement = new CKEDITOR.dom.element( 'caption', editor.document ); + if ( table.getChildCount() ) + captionElement.insertBefore( table.getFirst() ); + else + captionElement.appendTo( table ); + } + captionElement.append( new CKEDITOR.dom.text( caption, editor.document ) ); + } + else if ( captionElement.count() > 0 ) + { + for ( var i = captionElement.count() - 1 ; i >= 0 ; i-- ) + captionElement.getItem( i ).remove(); + } + } + }, + { + type : 'text', + id : 'txtSummary', + label : editor.lang.table.summary, + setup : function( selectedTable ) + { + this.setValue( selectedTable.getAttribute( 'summary' ) || '' ); + }, + commit : function( data, selectedTable ) + { + if ( this.getValue() ) + selectedTable.setAttribute( 'summary', this.getValue() ); + else + selectedTable.removeAttribute( 'summary' ); + } + } + ] + } + ] + }, + dialogadvtab && dialogadvtab.createAdvancedTab( editor ) + ] + }; + } + + CKEDITOR.dialog.add( 'table', function( editor ) + { + return tableDialog( editor, 'table' ); + } ); + CKEDITOR.dialog.add( 'tableProperties', function( editor ) + { + return tableDialog( editor, 'tableProperties' ); + } ); +})(); diff --git a/_source/plugins/table/plugin.js b/_source/plugins/table/plugin.js new file mode 100644 index 0000000..301cb27 --- /dev/null +++ b/_source/plugins/table/plugin.js @@ -0,0 +1,78 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'table', +{ + init : function( editor ) + { + var table = CKEDITOR.plugins.table, + lang = editor.lang.table; + + editor.addCommand( 'table', new CKEDITOR.dialogCommand( 'table' ) ); + editor.addCommand( 'tableProperties', new CKEDITOR.dialogCommand( 'tableProperties' ) ); + + editor.ui.addButton( 'Table', + { + label : lang.toolbar, + command : 'table' + }); + + CKEDITOR.dialog.add( 'table', this.path + 'dialogs/table.js' ); + CKEDITOR.dialog.add( 'tableProperties', this.path + 'dialogs/table.js' ); + + // If the "menu" plugin is loaded, register the menu items. + if ( editor.addMenuItems ) + { + editor.addMenuItems( + { + table : + { + label : lang.menu, + command : 'tableProperties', + group : 'table', + order : 5 + }, + + tabledelete : + { + label : lang.deleteTable, + command : 'tableDelete', + group : 'table', + order : 1 + } + } ); + } + + editor.on( 'doubleclick', function( evt ) + { + var element = evt.data.element; + + if ( element.is( 'table' ) ) + evt.data.dialog = 'tableProperties'; + }); + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || element.isReadOnly() ) + return null; + + var isTable = element.hasAscendant( 'table', 1 ); + + if ( isTable ) + { + return { + tabledelete : CKEDITOR.TRISTATE_OFF, + table : CKEDITOR.TRISTATE_OFF + }; + } + + return null; + } ); + } + } +} ); diff --git a/_source/plugins/tableresize/plugin.js b/_source/plugins/tableresize/plugin.js new file mode 100644 index 0000000..891a7d9 --- /dev/null +++ b/_source/plugins/tableresize/plugin.js @@ -0,0 +1,443 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var pxUnit = CKEDITOR.tools.cssLength, + needsIEHacks = CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks || CKEDITOR.env.version < 7 ); + + function getWidth( el ) + { + return CKEDITOR.env.ie ? el.$.clientWidth : parseInt( el.getComputedStyle( 'width' ), 10 ); + } + + function getBorderWidth( element, side ) + { + var computed = element.getComputedStyle( 'border-' + side + '-width' ), + borderMap = + { + thin: '0px', + medium: '1px', + thick: '2px' + }; + + if ( computed.indexOf( 'px' ) < 0 ) + { + // look up keywords + if ( computed in borderMap && element.getComputedStyle( 'border-style' ) != 'none' ) + computed = borderMap[ computed ]; + else + computed = 0; + } + + return parseInt( computed, 10 ); + } + + // Gets the table row that contains the most columns. + function getMasterPillarRow( table ) + { + var $rows = table.$.rows, + maxCells = 0, cellsCount, + $elected, $tr; + + for ( var i = 0, len = $rows.length ; i < len; i++ ) + { + $tr = $rows[ i ]; + cellsCount = $tr.cells.length; + + if ( cellsCount > maxCells ) + { + maxCells = cellsCount; + $elected = $tr; + } + } + + return $elected; + } + + function buildTableColumnPillars( table ) + { + var pillars = [], + pillarIndex = -1, + rtl = ( table.getComputedStyle( 'direction' ) == 'rtl' ); + + // Get the raw row element that cointains the most columns. + var $tr = getMasterPillarRow( table ); + + // Get the tbody element and position, which will be used to set the + // top and bottom boundaries. + var tbody = new CKEDITOR.dom.element( table.$.tBodies[ 0 ] ), + tbodyPosition = tbody.getDocumentPosition(); + + // Loop thorugh all cells, building pillars after each one of them. + for ( var i = 0, len = $tr.cells.length ; i < len ; i++ ) + { + // Both the current cell and the successive one will be used in the + // pillar size calculation. + var td = new CKEDITOR.dom.element( $tr.cells[ i ] ), + nextTd = $tr.cells[ i + 1 ] && new CKEDITOR.dom.element( $tr.cells[ i + 1 ] ); + + pillarIndex += td.$.colSpan || 1; + + // Calculate the pillar boundary positions. + var pillarLeft, pillarRight, pillarWidth; + + var x = td.getDocumentPosition().x; + + // Calculate positions based on the current cell. + rtl ? + pillarRight = x + getBorderWidth( td, 'left' ) : + pillarLeft = x + td.$.offsetWidth - getBorderWidth( td, 'right' ); + + // Calculate positions based on the next cell, if available. + if ( nextTd ) + { + x = nextTd.getDocumentPosition().x; + + rtl ? + pillarLeft = x + nextTd.$.offsetWidth - getBorderWidth( nextTd, 'right' ) : + pillarRight = x + getBorderWidth( nextTd, 'left' ); + } + // Otherwise calculate positions based on the table (for last cell). + else + { + x = table.getDocumentPosition().x; + + rtl ? + pillarLeft = x : + pillarRight = x + table.$.offsetWidth; + } + + pillarWidth = Math.max( pillarRight - pillarLeft, 3 ); + + // The pillar should reflects exactly the shape of the hovered + // column border line. + pillars.push( { + table : table, + index : pillarIndex, + x : pillarLeft, + y : tbodyPosition.y, + width : pillarWidth, + height : tbody.$.offsetHeight, + rtl : rtl } ); + } + + return pillars; + } + + function getPillarAtPosition( pillars, positionX ) + { + for ( var i = 0, len = pillars.length ; i < len ; i++ ) + { + var pillar = pillars[ i ]; + + if ( positionX >= pillar.x && positionX <= ( pillar.x + pillar.width ) ) + return pillar; + } + + return null; + } + + function cancel( evt ) + { + ( evt.data || evt ).preventDefault(); + } + + function columnResizer( editor ) + { + var pillar, + document, + resizer, + isResizing, + startOffset, + currentShift; + + var leftSideCells, rightSideCells, leftShiftBoundary, rightShiftBoundary; + + function detach() + { + pillar = null; + currentShift = 0; + isResizing = 0; + + document.removeListener( 'mouseup', onMouseUp ); + resizer.removeListener( 'mousedown', onMouseDown ); + resizer.removeListener( 'mousemove', onMouseMove ); + + document.getBody().setStyle( 'cursor', 'auto' ); + + // Hide the resizer (remove it on IE7 - #5890). + needsIEHacks ? resizer.remove() : resizer.hide(); + } + + function resizeStart() + { + // Before starting to resize, figure out which cells to change + // and the boundaries of this resizing shift. + + var columnIndex = pillar.index, + map = CKEDITOR.tools.buildTableMap( pillar.table ), + leftColumnCells = [], + rightColumnCells = [], + leftMinSize = Number.MAX_VALUE, + rightMinSize = leftMinSize, + rtl = pillar.rtl; + + for ( var i = 0, len = map.length ; i < len ; i++ ) + { + var row = map[ i ], + leftCell = row[ columnIndex + ( rtl ? 1 : 0 ) ], + rightCell = row[ columnIndex + ( rtl ? 0 : 1 ) ]; + + leftCell = leftCell && new CKEDITOR.dom.element( leftCell ); + rightCell = rightCell && new CKEDITOR.dom.element( rightCell ); + + if ( !leftCell || !rightCell || !leftCell.equals( rightCell ) ) + { + leftCell && ( leftMinSize = Math.min( leftMinSize, getWidth( leftCell ) ) ); + rightCell && ( rightMinSize = Math.min( rightMinSize, getWidth( rightCell ) ) ); + + leftColumnCells.push( leftCell ); + rightColumnCells.push( rightCell ); + } + } + + // Cache the list of cells to be resized. + leftSideCells = leftColumnCells; + rightSideCells = rightColumnCells; + + // Cache the resize limit boundaries. + leftShiftBoundary = pillar.x - leftMinSize; + rightShiftBoundary = pillar.x + rightMinSize; + + resizer.setOpacity( 0.5 ); + startOffset = parseInt( resizer.getStyle( 'left' ), 10 ); + currentShift = 0; + isResizing = 1; + + resizer.on( 'mousemove', onMouseMove ); + + // Prevent the native drag behavior otherwise 'mousemove' won't fire. + document.on( 'dragstart', cancel ); + } + + function resizeEnd() + { + isResizing = 0; + + resizer.setOpacity( 0 ); + + currentShift && resizeColumn(); + + var table = pillar.table; + setTimeout( function () { table.removeCustomData( '_cke_table_pillars' ); }, 0 ); + + document.removeListener( 'dragstart', cancel ); + } + + function resizeColumn() + { + var rtl = pillar.rtl, + cellsCount = rtl ? rightSideCells.length : leftSideCells.length; + + // Perform the actual resize to table cells, only for those by side of the pillar. + for ( var i = 0 ; i < cellsCount ; i++ ) + { + var leftCell = leftSideCells[ i ], + rightCell = rightSideCells[ i ], + table = pillar.table; + + // Defer the resizing to avoid any interference among cells. + CKEDITOR.tools.setTimeout( + function( leftCell, leftOldWidth, rightCell, rightOldWidth, tableWidth, sizeShift ) + { + leftCell && leftCell.setStyle( 'width', pxUnit( Math.max( leftOldWidth + sizeShift, 0 ) ) ); + rightCell && rightCell.setStyle( 'width', pxUnit( Math.max( rightOldWidth - sizeShift, 0 ) ) ); + + // If we're in the last cell, we need to resize the table as well + if ( tableWidth ) + table.setStyle( 'width', pxUnit( tableWidth + sizeShift * ( rtl ? -1 : 1 ) ) ); + } + , 0, + this, [ + leftCell, leftCell && getWidth( leftCell ), + rightCell, rightCell && getWidth( rightCell ), + ( !leftCell || !rightCell ) && ( getWidth( table ) + getBorderWidth( table, 'left' ) + getBorderWidth( table, 'right' ) ), + currentShift ] ); + } + } + + function onMouseDown( evt ) + { + cancel( evt ); + + resizeStart(); + + document.on( 'mouseup', onMouseUp, this ); + } + + function onMouseUp( evt ) + { + evt.removeListener(); + + resizeEnd(); + } + + function onMouseMove( evt ) + { + move( evt.data.$.clientX ); + } + + document = editor.document; + + resizer = CKEDITOR.dom.element.createFromHtml( + '<div data-cke-temp=1 contenteditable=false unselectable=on '+ + 'style="position:absolute;cursor:col-resize;filter:alpha(opacity=0);opacity:0;' + + 'padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"></div>', document ); + + // Except on IE6/7 (#5890), place the resizer after body to prevent it + // from being editable. + if ( !needsIEHacks ) + document.getDocumentElement().append( resizer ); + + this.attachTo = function( targetPillar ) + { + // Accept only one pillar at a time. + if ( isResizing ) + return; + + // On IE6/7, we append the resizer everytime we need it. (#5890) + if ( needsIEHacks ) + { + document.getBody().append( resizer ); + currentShift = 0; + } + + pillar = targetPillar; + + resizer.setStyles( + { + width: pxUnit( targetPillar.width ), + height : pxUnit( targetPillar.height ), + left : pxUnit( targetPillar.x ), + top : pxUnit( targetPillar.y ) + }); + + // In IE6/7, it's not possible to have custom cursors for floating + // elements in an editable document. Show the resizer in that case, + // to give the user a visual clue. + needsIEHacks && resizer.setOpacity( 0.25 ); + + resizer.on( 'mousedown', onMouseDown, this ); + + document.getBody().setStyle( 'cursor', 'col-resize' ); + + // Display the resizer to receive events but don't show it, + // only change the cursor to resizable shape. + resizer.show(); + }; + + var move = this.move = function( posX ) + { + if ( !pillar ) + return 0; + + if ( !isResizing && ( posX < pillar.x || posX > ( pillar.x + pillar.width ) ) ) + { + detach(); + return 0; + } + + var resizerNewPosition = posX - Math.round( resizer.$.offsetWidth / 2 ); + + if ( isResizing ) + { + if ( resizerNewPosition == leftShiftBoundary || resizerNewPosition == rightShiftBoundary ) + return 1; + + resizerNewPosition = Math.max( resizerNewPosition, leftShiftBoundary ); + resizerNewPosition = Math.min( resizerNewPosition, rightShiftBoundary ); + + currentShift = resizerNewPosition - startOffset; + } + + resizer.setStyle( 'left', pxUnit( resizerNewPosition ) ); + + return 1; + }; + } + + function clearPillarsCache( evt ) + { + var target = evt.data.getTarget(); + + if ( evt.name == 'mouseout' ) + { + // Bypass interal mouse move. + if ( !target.is ( 'table' ) ) + return; + + var dest = new CKEDITOR.dom.element( evt.data.$.relatedTarget || evt.data.$.toElement ); + while( dest && dest.$ && !dest.equals( target ) && !dest.is( 'body' ) ) + dest = dest.getParent(); + if ( !dest || dest.equals( target ) ) + return; + } + + target.getAscendant( 'table', 1 ).removeCustomData( '_cke_table_pillars' ); + evt.removeListener(); + } + + CKEDITOR.plugins.add( 'tableresize', + { + requires : [ 'tabletools' ], + init : function( editor ) + { + editor.on( 'contentDom', function() + { + var resizer; + + editor.document.getBody().on( 'mousemove', function( evt ) + { + evt = evt.data; + + // If we're already attached to a pillar, simply move the + // resizer. + if ( resizer && resizer.move( evt.$.clientX ) ) + { + cancel( evt ); + return; + } + + // Considering table, tr, td, tbody but nothing else. + var target = evt.getTarget(), + table, + pillars; + + if ( !target.is( 'table' ) && !target.getAscendant( 'tbody', 1 ) ) + return; + + table = target.getAscendant( 'table', 1 ); + + if ( !( pillars = table.getCustomData( '_cke_table_pillars' ) ) ) + { + // Cache table pillars calculation result. + table.setCustomData( '_cke_table_pillars', ( pillars = buildTableColumnPillars( table ) ) ); + table.on( 'mouseout', clearPillarsCache ); + table.on( 'mousedown', clearPillarsCache ); + } + + var pillar = getPillarAtPosition( pillars, evt.$.clientX ); + if ( pillar ) + { + !resizer && ( resizer = new columnResizer( editor ) ); + resizer.attachTo( pillar ); + } + }); + }); + } + }); + +})(); diff --git a/_source/plugins/tabletools/dialogs/tableCell.js b/_source/plugins/tabletools/dialogs/tableCell.js new file mode 100644 index 0000000..d37cd10 --- /dev/null +++ b/_source/plugins/tabletools/dialogs/tableCell.js @@ -0,0 +1,525 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'cellProperties', function( editor ) + { + var langTable = editor.lang.table, + langCell = langTable.cell, + langCommon = editor.lang.common, + validate = CKEDITOR.dialog.validate, + widthPattern = /^(\d+(?:\.\d+)?)(px|%)$/, + heightPattern = /^(\d+(?:\.\d+)?)px$/, + bind = CKEDITOR.tools.bind, + spacer = { type : 'html', html : ' ' }, + rtl = editor.lang.dir == 'rtl'; + + /** + * + * @param dialogName + * @param callback [ childDialog ] + */ + function getDialogValue( dialogName, callback ) + { + var onOk = function() + { + releaseHandlers( this ); + callback( this, this._.parentDialog ); + this._.parentDialog.changeFocus( true ); + }; + var onCancel = function() + { + releaseHandlers( this ); + this._.parentDialog.changeFocus(); + }; + var releaseHandlers = function( dialog ) + { + dialog.removeListener( 'ok', onOk ); + dialog.removeListener( 'cancel', onCancel ); + }; + var bindToDialog = function( dialog ) + { + dialog.on( 'ok', onOk ); + dialog.on( 'cancel', onCancel ); + }; + editor.execCommand( dialogName ); + if ( editor._.storedDialogs.colordialog ) + bindToDialog( editor._.storedDialogs.colordialog ); + else + { + CKEDITOR.on( 'dialogDefinition', function( e ) + { + if ( e.data.name != dialogName ) + return; + + var definition = e.data.definition; + + e.removeListener(); + definition.onLoad = CKEDITOR.tools.override( definition.onLoad, function( orginal ) + { + return function() + { + bindToDialog( this ); + definition.onLoad = orginal; + if ( typeof orginal == 'function' ) + orginal.call( this ); + }; + } ); + }); + } + } + + return { + title : langCell.title, + minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks? 450 : 410, + minHeight : CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks )? 230 : 200, + contents : [ + { + id : 'info', + label : langCell.title, + accessKey : 'I', + elements : + [ + { + type : 'hbox', + widths : [ '40%', '5%', '40%' ], + children : + [ + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'hbox', + widths : [ '70%', '30%' ], + children : + [ + { + type : 'text', + id : 'width', + width: '100px', + label : langCommon.width, + validate : validate[ 'number' ]( langCell.invalidWidth ), + + // Extra labelling of width unit type. + onLoad : function() + { + var widthType = this.getDialog().getContentElement( 'info', 'widthType' ), + labelElement = widthType.getElement(), + inputElement = this.getInputElement(), + ariaLabelledByAttr = inputElement.getAttribute( 'aria-labelledby' ); + + inputElement.setAttribute( 'aria-labelledby', [ ariaLabelledByAttr, labelElement.$.id ].join( ' ' ) ); + }, + + setup : function( element ) + { + var widthAttr = parseInt( element.getAttribute( 'width' ), 10 ), + widthStyle = parseInt( element.getStyle( 'width' ), 10 ); + + !isNaN( widthAttr ) && this.setValue( widthAttr ); + !isNaN( widthStyle ) && this.setValue( widthStyle ); + }, + commit : function( element ) + { + var value = parseInt( this.getValue(), 10 ), + unit = this.getDialog().getValueOf( 'info', 'widthType' ); + + if ( !isNaN( value ) ) + element.setStyle( 'width', value + unit ); + else + element.removeStyle( 'width' ); + + element.removeAttribute( 'width' ); + }, + 'default' : '' + }, + { + type : 'select', + id : 'widthType', + label : editor.lang.table.widthUnit, + labelStyle: 'visibility:hidden', + 'default' : 'px', + items : + [ + [ langTable.widthPx, 'px' ], + [ langTable.widthPc, '%' ] + ], + setup : function( selectedCell ) + { + var widthMatch = widthPattern.exec( selectedCell.getStyle( 'width' ) || selectedCell.getAttribute( 'width' ) ); + if ( widthMatch ) + this.setValue( widthMatch[2] ); + } + } + ] + }, + { + type : 'hbox', + widths : [ '70%', '30%' ], + children : + [ + { + type : 'text', + id : 'height', + label : langCommon.height, + width: '100px', + 'default' : '', + validate : validate[ 'number' ]( langCell.invalidHeight ), + + // Extra labelling of height unit type. + onLoad : function() + { + var heightType = this.getDialog().getContentElement( 'info', 'htmlHeightType' ), + labelElement = heightType.getElement(), + inputElement = this.getInputElement(), + ariaLabelledByAttr = inputElement.getAttribute( 'aria-labelledby' ); + + inputElement.setAttribute( 'aria-labelledby', [ ariaLabelledByAttr, labelElement.$.id ].join( ' ' ) ); + }, + + setup : function( element ) + { + var heightAttr = parseInt( element.getAttribute( 'height' ), 10 ), + heightStyle = parseInt( element.getStyle( 'height' ), 10 ); + + !isNaN( heightAttr ) && this.setValue( heightAttr ); + !isNaN( heightStyle ) && this.setValue( heightStyle ); + }, + commit : function( element ) + { + var value = parseInt( this.getValue(), 10 ); + + if ( !isNaN( value ) ) + element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) ); + else + element.removeStyle( 'height' ); + + element.removeAttribute( 'height' ); + } + }, + { + id : 'htmlHeightType', + type : 'html', + html : '<br />'+ langTable.widthPx + } + ] + }, + spacer, + { + type : 'select', + id : 'wordWrap', + label : langCell.wordWrap, + 'default' : 'yes', + items : + [ + [ langCell.yes, 'yes' ], + [ langCell.no, 'no' ] + ], + setup : function( element ) + { + var wordWrapAttr = element.getAttribute( 'noWrap' ), + wordWrapStyle = element.getStyle( 'white-space' ); + + if ( wordWrapStyle == 'nowrap' || wordWrapAttr ) + this.setValue( 'no' ); + }, + commit : function( element ) + { + if ( this.getValue() == 'no' ) + element.setStyle( 'white-space', 'nowrap' ); + else + element.removeStyle( 'white-space' ); + + element.removeAttribute( 'noWrap' ); + } + }, + spacer, + { + type : 'select', + id : 'hAlign', + label : langCell.hAlign, + 'default' : '', + items : + [ + [ langCommon.notSet, '' ], + [ langCommon.alignLeft, 'left' ], + [ langCommon.alignCenter, 'center' ], + [ langCommon.alignRight, 'right' ] + ], + setup : function( element ) + { + var alignAttr = element.getAttribute( 'align' ), + textAlignStyle = element.getStyle( 'text-align'); + + this.setValue( textAlignStyle || alignAttr || '' ); + }, + commit : function( selectedCell ) + { + var value = this.getValue(); + + if ( value ) + selectedCell.setStyle( 'text-align', value ); + else + selectedCell.removeStyle( 'text-align' ); + + selectedCell.removeAttribute( 'align' ); + } + }, + { + type : 'select', + id : 'vAlign', + label : langCell.vAlign, + 'default' : '', + items : + [ + [ langCommon.notSet, '' ], + [ langCommon.alignTop, 'top' ], + [ langCommon.alignMiddle, 'middle' ], + [ langCommon.alignBottom, 'bottom' ], + [ langCell.alignBaseline, 'baseline' ] + ], + setup : function( element ) + { + var vAlignAttr = element.getAttribute( 'vAlign' ), + vAlignStyle = element.getStyle( 'vertical-align' ); + + switch( vAlignStyle ) + { + // Ignore all other unrelated style values.. + case 'top': + case 'middle': + case 'bottom': + case 'baseline': + break; + default: + vAlignStyle = ''; + } + + this.setValue( vAlignStyle || vAlignAttr || '' ); + }, + commit : function( element ) + { + var value = this.getValue(); + + if ( value ) + element.setStyle( 'vertical-align', value ); + else + element.removeStyle( 'vertical-align' ); + + element.removeAttribute( 'vAlign' ); + } + } + ] + }, + spacer, + { + type : 'vbox', + padding : 0, + children : + [ + { + type : 'select', + id : 'cellType', + label : langCell.cellType, + 'default' : 'td', + items : + [ + [ langCell.data, 'td' ], + [ langCell.header, 'th' ] + ], + setup : function( selectedCell ) + { + this.setValue( selectedCell.getName() ); + }, + commit : function( selectedCell ) + { + selectedCell.renameNode( this.getValue() ); + } + }, + spacer, + { + type : 'text', + id : 'rowSpan', + label : langCell.rowSpan, + 'default' : '', + validate : validate.integer( langCell.invalidRowSpan ), + setup : function( selectedCell ) + { + var attrVal = parseInt( selectedCell.getAttribute( 'rowSpan' ), 10 ); + if ( attrVal && attrVal != 1 ) + this.setValue( attrVal ); + }, + commit : function( selectedCell ) + { + var value = parseInt( this.getValue(), 10 ); + if ( value && value != 1 ) + selectedCell.setAttribute( 'rowSpan', this.getValue() ); + else + selectedCell.removeAttribute( 'rowSpan' ); + } + }, + { + type : 'text', + id : 'colSpan', + label : langCell.colSpan, + 'default' : '', + validate : validate.integer( langCell.invalidColSpan ), + setup : function( element ) + { + var attrVal = parseInt( element.getAttribute( 'colSpan' ), 10 ); + if ( attrVal && attrVal != 1 ) + this.setValue( attrVal ); + }, + commit : function( selectedCell ) + { + var value = parseInt( this.getValue(), 10 ); + if ( value && value != 1 ) + selectedCell.setAttribute( 'colSpan', this.getValue() ); + else + selectedCell.removeAttribute( 'colSpan' ); + } + }, + spacer, + { + type : 'hbox', + padding : 0, + widths : [ '60%', '40%' ], + children : + [ + { + type : 'text', + id : 'bgColor', + label : langCell.bgColor, + 'default' : '', + setup : function( element ) + { + var bgColorAttr = element.getAttribute( 'bgColor' ), + bgColorStyle = element.getStyle( 'background-color' ); + + this.setValue( bgColorStyle || bgColorAttr ); + }, + commit : function( selectedCell ) + { + var value = this.getValue(); + + if ( value ) + selectedCell.setStyle( 'background-color', this.getValue() ); + else + selectedCell.removeStyle( 'background-color' ); + + selectedCell.removeAttribute( 'bgColor'); + } + }, + { + type : 'button', + id : 'bgColorChoose', + "class" : 'colorChooser', + label : langCell.chooseColor, + onLoad : function() + { + // Stick the element to the bottom (#5587) + this.getElement().getParent().setStyle( 'vertical-align', 'bottom' ); + }, + onClick : function() + { + var self = this; + getDialogValue( 'colordialog', function( colorDialog ) + { + self.getDialog().getContentElement( 'info', 'bgColor' ).setValue( + colorDialog.getContentElement( 'picker', 'selectedColor' ).getValue() + ); + } ); + } + } + ] + }, + spacer, + { + type : 'hbox', + padding : 0, + widths : [ '60%', '40%' ], + children : + [ + { + type : 'text', + id : 'borderColor', + label : langCell.borderColor, + 'default' : '', + setup : function( element ) + { + var borderColorAttr = element.getAttribute( 'borderColor' ), + borderColorStyle = element.getStyle( 'border-color' ); + + this.setValue( borderColorStyle || borderColorAttr ); + }, + commit : function( selectedCell ) + { + var value = this.getValue(); + if ( value ) + selectedCell.setStyle( 'border-color', this.getValue() ); + else + selectedCell.removeStyle( 'border-color' ); + + selectedCell.removeAttribute( 'borderColor'); + } + }, + { + type : 'button', + id : 'borderColorChoose', + "class" : 'colorChooser', + label : langCell.chooseColor, + style : ( rtl ? 'margin-right' : 'margin-left' ) + ': 10px', + onLoad : function() + { + // Stick the element to the bottom (#5587) + this.getElement().getParent().setStyle( 'vertical-align', 'bottom' ); + }, + onClick : function() + { + var self = this; + getDialogValue( 'colordialog', function( colorDialog ) + { + self.getDialog().getContentElement( 'info', 'borderColor' ).setValue( + colorDialog.getContentElement( 'picker', 'selectedColor' ).getValue() + ); + } ); + } + } + ] + } + ] + } + ] + } + ] + } + ], + onShow : function() + { + this.cells = CKEDITOR.plugins.tabletools.getSelectedCells( + this._.editor.getSelection() ); + this.setupContent( this.cells[ 0 ] ); + }, + onOk : function() + { + var selection = this._.editor.getSelection(), + bookmarks = selection.createBookmarks(); + + var cells = this.cells; + for ( var i = 0 ; i < cells.length ; i++ ) + this.commitContent( cells[ i ] ); + + selection.selectBookmarks( bookmarks ); + + // Force selectionChange event because of alignment style. + var firstElement = selection.getStartElement(); + var currentPath = new CKEDITOR.dom.elementPath( firstElement ); + + this._.editor._.selectionPreviousPath = currentPath; + this._.editor.fire( 'selectionChange', { selection : selection, path : currentPath, element : firstElement } ); + } + }; + } ); diff --git a/_source/plugins/tabletools/plugin.js b/_source/plugins/tabletools/plugin.js new file mode 100644 index 0000000..7b52599 --- /dev/null +++ b/_source/plugins/tabletools/plugin.js @@ -0,0 +1,1194 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var cellNodeRegex = /^(?:td|th)$/; + + function getSelectedCells( selection ) + { + // Walker will try to split text nodes, which will make the current selection + // invalid. So save bookmarks before doing anything. + var bookmarks = selection.createBookmarks(); + + var ranges = selection.getRanges(); + var retval = []; + var database = {}; + + function moveOutOfCellGuard( node ) + { + // Apply to the first cell only. + if ( retval.length > 0 ) + return; + + // If we are exiting from the first </td>, then the td should definitely be + // included. + if ( node.type == CKEDITOR.NODE_ELEMENT && cellNodeRegex.test( node.getName() ) + && !node.getCustomData( 'selected_cell' ) ) + { + CKEDITOR.dom.element.setMarker( database, node, 'selected_cell', true ); + retval.push( node ); + } + } + + for ( var i = 0 ; i < ranges.length ; i++ ) + { + var range = ranges[ i ]; + + if ( range.collapsed ) + { + // Walker does not handle collapsed ranges yet - fall back to old API. + var startNode = range.getCommonAncestor(); + var nearestCell = startNode.getAscendant( 'td', true ) || startNode.getAscendant( 'th', true ); + if ( nearestCell ) + retval.push( nearestCell ); + } + else + { + var walker = new CKEDITOR.dom.walker( range ); + var node; + walker.guard = moveOutOfCellGuard; + + while ( ( node = walker.next() ) ) + { + // If may be possible for us to have a range like this: + // <td>^1</td><td>^2</td> + // The 2nd td shouldn't be included. + // + // So we have to take care to include a td we've entered only when we've + // walked into its children. + + var parent = node.getAscendant( 'td' ) || node.getAscendant( 'th' ); + if ( parent && !parent.getCustomData( 'selected_cell' ) ) + { + CKEDITOR.dom.element.setMarker( database, parent, 'selected_cell', true ); + retval.push( parent ); + } + } + } + } + + CKEDITOR.dom.element.clearAllMarkers( database ); + + // Restore selection position. + selection.selectBookmarks( bookmarks ); + + return retval; + } + + function getFocusElementAfterDelCells( cellsToDelete ) { + var i = 0, + last = cellsToDelete.length - 1, + database = {}, + cell,focusedCell, + tr; + + while ( ( cell = cellsToDelete[ i++ ] ) ) + CKEDITOR.dom.element.setMarker( database, cell, 'delete_cell', true ); + + // 1.first we check left or right side focusable cell row by row; + i = 0; + while ( ( cell = cellsToDelete[ i++ ] ) ) + { + if ( ( focusedCell = cell.getPrevious() ) && !focusedCell.getCustomData( 'delete_cell' ) + || ( focusedCell = cell.getNext() ) && !focusedCell.getCustomData( 'delete_cell' ) ) + { + CKEDITOR.dom.element.clearAllMarkers( database ); + return focusedCell; + } + } + + CKEDITOR.dom.element.clearAllMarkers( database ); + + // 2. then we check the toppest row (outside the selection area square) focusable cell + tr = cellsToDelete[ 0 ].getParent(); + if ( ( tr = tr.getPrevious() ) ) + return tr.getLast(); + + // 3. last we check the lowerest row focusable cell + tr = cellsToDelete[ last ].getParent(); + if ( ( tr = tr.getNext() ) ) + return tr.getChild( 0 ); + + return null; + } + + function insertRow( selection, insertBefore ) + { + var cells = getSelectedCells( selection ), + firstCell = cells[ 0 ], + table = firstCell.getAscendant( 'table' ), + doc = firstCell.getDocument(), + startRow = cells[ 0 ].getParent(), + startRowIndex = startRow.$.rowIndex, + lastCell = cells[ cells.length - 1 ], + endRowIndex = lastCell.getParent().$.rowIndex + lastCell.$.rowSpan - 1, + endRow = new CKEDITOR.dom.element( table.$.rows[ endRowIndex ] ), + rowIndex = insertBefore ? startRowIndex : endRowIndex, + row = insertBefore ? startRow : endRow; + + var map = CKEDITOR.tools.buildTableMap( table ), + cloneRow = map[ rowIndex ], + nextRow = insertBefore ? map[ rowIndex - 1 ] : map[ rowIndex + 1 ], + width = map[0].length; + + var newRow = doc.createElement( 'tr' ); + for ( var i = 0; i < width; i++ ) + { + var cell; + // Check whether there's a spanning row here, do not break it. + if ( cloneRow[ i ].rowSpan > 1 && nextRow && cloneRow[ i ] == nextRow[ i ] ) + { + cell = cloneRow[ i ]; + cell.rowSpan += 1; + } + else + { + cell = new CKEDITOR.dom.element( cloneRow[ i ] ).clone(); + cell.removeAttribute( 'rowSpan' ); + !CKEDITOR.env.ie && cell.appendBogus(); + newRow.append( cell ); + cell = cell.$; + } + + i += cell.colSpan - 1; + } + + insertBefore ? + newRow.insertBefore( row ) : + newRow.insertAfter( row ); + } + + function deleteRows( selectionOrRow ) + { + if ( selectionOrRow instanceof CKEDITOR.dom.selection ) + { + var cells = getSelectedCells( selectionOrRow ), + firstCell = cells[ 0 ], + table = firstCell.getAscendant( 'table' ), + map = CKEDITOR.tools.buildTableMap( table ), + startRow = cells[ 0 ].getParent(), + startRowIndex = startRow.$.rowIndex, + lastCell = cells[ cells.length - 1 ], + endRowIndex = lastCell.getParent().$.rowIndex + lastCell.$.rowSpan - 1, + rowsToDelete = []; + + // Delete cell or reduce cell spans by checking through the table map. + for ( var i = startRowIndex; i <= endRowIndex; i++ ) + { + var mapRow = map[ i ], + row = new CKEDITOR.dom.element( table.$.rows[ i ] ); + + for ( var j = 0; j < mapRow.length; j++ ) + { + var cell = new CKEDITOR.dom.element( mapRow[ j ] ), + cellRowIndex = cell.getParent().$.rowIndex; + + if ( cell.$.rowSpan == 1 ) + cell.remove(); + // Row spanned cell. + else + { + // Span row of the cell, reduce spanning. + cell.$.rowSpan -= 1; + // Root row of the cell, root cell to next row. + if ( cellRowIndex == i ) + { + var nextMapRow = map[ i + 1 ]; + nextMapRow[ j - 1 ] ? + cell.insertAfter( new CKEDITOR.dom.element( nextMapRow[ j - 1 ] ) ) + : new CKEDITOR.dom.element( table.$.rows[ i + 1 ] ).append( cell, 1 ); + } + } + + j += cell.$.colSpan - 1; + } + + rowsToDelete.push( row ); + } + + var rows = table.$.rows; + + // Where to put the cursor after rows been deleted? + // 1. Into next sibling row if any; + // 2. Into previous sibling row if any; + // 3. Into table's parent element if it's the very last row. + var cursorPosition = new CKEDITOR.dom.element( rows[ endRowIndex + 1 ] || ( startRowIndex > 0 ? rows[ startRowIndex - 1 ] : null ) || table.$.parentNode ); + + for ( i = rowsToDelete.length ; i >= 0 ; i-- ) + deleteRows( rowsToDelete[ i ] ); + + return cursorPosition; + } + else if ( selectionOrRow instanceof CKEDITOR.dom.element ) + { + table = selectionOrRow.getAscendant( 'table' ); + + if ( table.$.rows.length == 1 ) + table.remove(); + else + selectionOrRow.remove(); + } + + return null; + } + + function getCellColIndex( cell, isStart ) + { + var row = cell.getParent(), + rowCells = row.$.cells; + + var colIndex = 0; + for ( var i = 0; i < rowCells.length; i++ ) + { + var mapCell = rowCells[ i ]; + colIndex += isStart ? 1 : mapCell.colSpan; + if ( mapCell == cell.$ ) + break; + } + + return colIndex -1; + } + + function getColumnsIndices( cells, isStart ) + { + var retval = isStart ? Infinity : 0; + for ( var i = 0; i < cells.length; i++ ) + { + var colIndex = getCellColIndex( cells[ i ], isStart ); + if ( isStart ? colIndex < retval : colIndex > retval ) + retval = colIndex; + } + return retval; + } + + function insertColumn( selection, insertBefore ) + { + var cells = getSelectedCells( selection ), + firstCell = cells[ 0 ], + table = firstCell.getAscendant( 'table' ), + startCol = getColumnsIndices( cells, 1 ), + lastCol = getColumnsIndices( cells ), + colIndex = insertBefore? startCol : lastCol; + + var map = CKEDITOR.tools.buildTableMap( table ), + cloneCol = [], + nextCol = [], + height = map.length; + + for ( var i = 0; i < height; i++ ) + { + cloneCol.push( map[ i ][ colIndex ] ); + var nextCell = insertBefore ? map[ i ][ colIndex - 1 ] : map[ i ][ colIndex + 1 ]; + nextCell && nextCol.push( nextCell ); + } + + for ( i = 0; i < height; i++ ) + { + var cell; + // Check whether there's a spanning column here, do not break it. + if ( cloneCol[ i ].colSpan > 1 + && nextCol.length + && nextCol[ i ] == cloneCol[ i ] ) + { + cell = cloneCol[ i ]; + cell.colSpan += 1; + } + else + { + cell = new CKEDITOR.dom.element( cloneCol[ i ] ).clone(); + cell.removeAttribute( 'colSpan' ); + !CKEDITOR.env.ie && cell.appendBogus(); + cell[ insertBefore? 'insertBefore' : 'insertAfter' ].call( cell, new CKEDITOR.dom.element ( cloneCol[ i ] ) ); + cell = cell.$; + } + + i += cell.rowSpan - 1; + } + } + + function deleteColumns( selectionOrCell ) + { + var cells = getSelectedCells( selectionOrCell ), + firstCell = cells[ 0 ], + lastCell = cells[ cells.length - 1 ], + table = firstCell.getAscendant( 'table' ), + map = CKEDITOR.tools.buildTableMap( table ), + startColIndex, + endColIndex, + rowsToDelete = []; + + // Figure out selected cells' column indices. + for ( var i = 0, rows = map.length; i < rows; i++ ) + { + for ( var j = 0, cols = map[ i ].length; j < cols; j++ ) + { + if ( map[ i ][ j ] == firstCell.$ ) + startColIndex = j; + if ( map[ i ][ j ] == lastCell.$ ) + endColIndex = j; + } + } + + // Delete cell or reduce cell spans by checking through the table map. + for ( i = startColIndex; i <= endColIndex; i++ ) + { + for ( j = 0; j < map.length; j++ ) + { + var mapRow = map[ j ], + row = new CKEDITOR.dom.element( table.$.rows[ j ] ), + cell = new CKEDITOR.dom.element( mapRow[ i ] ); + + if ( cell.$ ) + { + if ( cell.$.colSpan == 1 ) + cell.remove(); + // Reduce the col spans. + else + cell.$.colSpan -= 1; + + j += cell.$.rowSpan - 1; + + if ( !row.$.cells.length ) + rowsToDelete.push( row ); + } + } + } + + var firstRowCells = table.$.rows[ 0 ] && table.$.rows[ 0 ].cells; + + // Where to put the cursor after columns been deleted? + // 1. Into next cell of the first row if any; + // 2. Into previous cell of the first row if any; + // 3. Into table's parent element; + var cursorPosition = new CKEDITOR.dom.element( firstRowCells[ startColIndex ] || ( startColIndex ? firstRowCells[ startColIndex - 1 ] : table.$.parentNode ) ); + + // Delete table rows only if all columns are gone (do not remove empty row). + if ( rowsToDelete.length == rows ) + table.remove(); + + return cursorPosition; + } + + function getFocusElementAfterDelCols( cells ) + { + var cellIndexList = [], + table = cells[ 0 ] && cells[ 0 ].getAscendant( 'table' ), + i, length, + targetIndex, targetCell; + + // get the cellIndex list of delete cells + for ( i = 0, length = cells.length; i < length; i++ ) + cellIndexList.push( cells[i].$.cellIndex ); + + // get the focusable column index + cellIndexList.sort(); + for ( i = 1, length = cellIndexList.length; i < length; i++ ) + { + if ( cellIndexList[ i ] - cellIndexList[ i - 1 ] > 1 ) + { + targetIndex = cellIndexList[ i - 1 ] + 1; + break; + } + } + + if ( !targetIndex ) + targetIndex = cellIndexList[ 0 ] > 0 ? ( cellIndexList[ 0 ] - 1 ) + : ( cellIndexList[ cellIndexList.length - 1 ] + 1 ); + + // scan row by row to get the target cell + var rows = table.$.rows; + for ( i = 0, length = rows.length; i < length ; i++ ) + { + targetCell = rows[ i ].cells[ targetIndex ]; + if ( targetCell ) + break; + } + + return targetCell ? new CKEDITOR.dom.element( targetCell ) : table.getPrevious(); + } + + function insertCell( selection, insertBefore ) + { + var startElement = selection.getStartElement(); + var cell = startElement.getAscendant( 'td', 1 ) || startElement.getAscendant( 'th', 1 ); + + if ( !cell ) + return; + + // Create the new cell element to be added. + var newCell = cell.clone(); + if ( !CKEDITOR.env.ie ) + newCell.appendBogus(); + + if ( insertBefore ) + newCell.insertBefore( cell ); + else + newCell.insertAfter( cell ); + } + + function deleteCells( selectionOrCell ) + { + if ( selectionOrCell instanceof CKEDITOR.dom.selection ) + { + var cellsToDelete = getSelectedCells( selectionOrCell ); + var table = cellsToDelete[ 0 ] && cellsToDelete[ 0 ].getAscendant( 'table' ); + var cellToFocus = getFocusElementAfterDelCells( cellsToDelete ); + + for ( var i = cellsToDelete.length - 1 ; i >= 0 ; i-- ) + deleteCells( cellsToDelete[ i ] ); + + if ( cellToFocus ) + placeCursorInCell( cellToFocus, true ); + else if ( table ) + table.remove(); + } + else if ( selectionOrCell instanceof CKEDITOR.dom.element ) + { + var tr = selectionOrCell.getParent(); + if ( tr.getChildCount() == 1 ) + tr.remove(); + else + selectionOrCell.remove(); + } + } + + // Remove filler at end and empty spaces around the cell content. + function trimCell( cell ) + { + var bogus = cell.getBogus(); + bogus && bogus.remove(); + cell.trim(); + } + + function placeCursorInCell( cell, placeAtEnd ) + { + var range = new CKEDITOR.dom.range( cell.getDocument() ); + if ( !range[ 'moveToElementEdit' + ( placeAtEnd ? 'End' : 'Start' ) ]( cell ) ) + { + range.selectNodeContents( cell ); + range.collapse( placeAtEnd ? false : true ); + } + range.select( true ); + } + + function cellInRow( tableMap, rowIndex, cell ) + { + var oRow = tableMap[ rowIndex ]; + if ( typeof cell == 'undefined' ) + return oRow; + + for ( var c = 0 ; oRow && c < oRow.length ; c++ ) + { + if ( cell.is && oRow[c] == cell.$ ) + return c; + else if ( c == cell ) + return new CKEDITOR.dom.element( oRow[ c ] ); + } + return cell.is ? -1 : null; + } + + function cellInCol( tableMap, colIndex, cell ) + { + var oCol = []; + for ( var r = 0; r < tableMap.length; r++ ) + { + var row = tableMap[ r ]; + if ( typeof cell == 'undefined' ) + oCol.push( row[ colIndex ] ); + else if ( cell.is && row[ colIndex ] == cell.$ ) + return r; + else if ( r == cell ) + return new CKEDITOR.dom.element( row[ colIndex ] ); + } + + return ( typeof cell == 'undefined' )? oCol : cell.is ? -1 : null; + } + + function mergeCells( selection, mergeDirection, isDetect ) + { + var cells = getSelectedCells( selection ); + + // Invalid merge request if: + // 1. In batch mode despite that less than two selected. + // 2. In solo mode while not exactly only one selected. + // 3. Cells distributed in different table groups (e.g. from both thead and tbody). + var commonAncestor; + if ( ( mergeDirection ? cells.length != 1 : cells.length < 2 ) + || ( commonAncestor = selection.getCommonAncestor() ) + && commonAncestor.type == CKEDITOR.NODE_ELEMENT + && commonAncestor.is( 'table' ) ) + { + return false; + } + + var cell, + firstCell = cells[ 0 ], + table = firstCell.getAscendant( 'table' ), + map = CKEDITOR.tools.buildTableMap( table ), + mapHeight = map.length, + mapWidth = map[ 0 ].length, + startRow = firstCell.getParent().$.rowIndex, + startColumn = cellInRow( map, startRow, firstCell ); + + if ( mergeDirection ) + { + var targetCell; + try + { + var rowspan = parseInt( firstCell.getAttribute( 'rowspan' ), 10 ) || 1; + var colspan = parseInt( firstCell.getAttribute( 'colspan' ), 10 ) || 1; + + targetCell = + map[ mergeDirection == 'up' ? + ( startRow - rowspan ): + mergeDirection == 'down' ? ( startRow + rowspan ) : startRow ] [ + mergeDirection == 'left' ? + ( startColumn - colspan ): + mergeDirection == 'right' ? ( startColumn + colspan ) : startColumn ]; + + } + catch( er ) + { + return false; + } + + // 1. No cell could be merged. + // 2. Same cell actually. + if ( !targetCell || firstCell.$ == targetCell ) + return false; + + // Sort in map order regardless of the DOM sequence. + cells[ ( mergeDirection == 'up' || mergeDirection == 'left' ) ? + 'unshift' : 'push' ]( new CKEDITOR.dom.element( targetCell ) ); + } + + // Start from here are merging way ignorance (merge up/right, batch merge). + var doc = firstCell.getDocument(), + lastRowIndex = startRow, + totalRowSpan = 0, + totalColSpan = 0, + // Use a documentFragment as buffer when appending cell contents. + frag = !isDetect && new CKEDITOR.dom.documentFragment( doc ), + dimension = 0; + + for ( var i = 0; i < cells.length; i++ ) + { + cell = cells[ i ]; + + var tr = cell.getParent(), + cellFirstChild = cell.getFirst(), + colSpan = cell.$.colSpan, + rowSpan = cell.$.rowSpan, + rowIndex = tr.$.rowIndex, + colIndex = cellInRow( map, rowIndex, cell ); + + // Accumulated the actual places taken by all selected cells. + dimension += colSpan * rowSpan; + // Accumulated the maximum virtual spans from column and row. + totalColSpan = Math.max( totalColSpan, colIndex - startColumn + colSpan ) ; + totalRowSpan = Math.max( totalRowSpan, rowIndex - startRow + rowSpan ); + + if ( !isDetect ) + { + // Trim all cell fillers and check to remove empty cells. + if ( trimCell( cell ), cell.getChildren().count() ) + { + // Merge vertically cells as two separated paragraphs. + if ( rowIndex != lastRowIndex + && cellFirstChild + && !( cellFirstChild.isBlockBoundary + && cellFirstChild.isBlockBoundary( { br : 1 } ) ) ) + { + var last = frag.getLast( CKEDITOR.dom.walker.whitespaces( true ) ); + if ( last && !( last.is && last.is( 'br' ) ) ) + frag.append( 'br' ); + } + + cell.moveChildren( frag ); + } + i ? cell.remove() : cell.setHtml( '' ); + } + lastRowIndex = rowIndex; + } + + if ( !isDetect ) + { + frag.moveChildren( firstCell ); + + if ( !CKEDITOR.env.ie ) + firstCell.appendBogus(); + + if ( totalColSpan >= mapWidth ) + firstCell.removeAttribute( 'rowSpan' ); + else + firstCell.$.rowSpan = totalRowSpan; + + if ( totalRowSpan >= mapHeight ) + firstCell.removeAttribute( 'colSpan' ); + else + firstCell.$.colSpan = totalColSpan; + + // Swip empty <tr> left at the end of table due to the merging. + var trs = new CKEDITOR.dom.nodeList( table.$.rows ), + count = trs.count(); + + for ( i = count - 1; i >= 0; i-- ) + { + var tailTr = trs.getItem( i ); + if ( !tailTr.$.cells.length ) + { + tailTr.remove(); + count++; + continue; + } + } + + return firstCell; + } + // Be able to merge cells only if actual dimension of selected + // cells equals to the caculated rectangle. + else + return ( totalRowSpan * totalColSpan ) == dimension; + } + + function verticalSplitCell ( selection, isDetect ) + { + var cells = getSelectedCells( selection ); + if ( cells.length > 1 ) + return false; + else if ( isDetect ) + return true; + + var cell = cells[ 0 ], + tr = cell.getParent(), + table = tr.getAscendant( 'table' ), + map = CKEDITOR.tools.buildTableMap( table ), + rowIndex = tr.$.rowIndex, + colIndex = cellInRow( map, rowIndex, cell ), + rowSpan = cell.$.rowSpan, + newCell, + newRowSpan, + newCellRowSpan, + newRowIndex; + + if ( rowSpan > 1 ) + { + newRowSpan = Math.ceil( rowSpan / 2 ); + newCellRowSpan = Math.floor( rowSpan / 2 ); + newRowIndex = rowIndex + newRowSpan; + var newCellTr = new CKEDITOR.dom.element( table.$.rows[ newRowIndex ] ), + newCellRow = cellInRow( map, newRowIndex ), + candidateCell; + + newCell = cell.clone(); + + // Figure out where to insert the new cell by checking the vitual row. + for ( var c = 0; c < newCellRow.length; c++ ) + { + candidateCell = newCellRow[ c ]; + // Catch first cell actually following the column. + if ( candidateCell.parentNode == newCellTr.$ + && c > colIndex ) + { + newCell.insertBefore( new CKEDITOR.dom.element( candidateCell ) ); + break; + } + else + candidateCell = null; + } + + // The destination row is empty, append at will. + if ( !candidateCell ) + newCellTr.append( newCell, true ); + } + else + { + newCellRowSpan = newRowSpan = 1; + + newCellTr = tr.clone(); + newCellTr.insertAfter( tr ); + newCellTr.append( newCell = cell.clone() ); + + var cellsInSameRow = cellInRow( map, rowIndex ); + for ( var i = 0; i < cellsInSameRow.length; i++ ) + cellsInSameRow[ i ].rowSpan++; + } + + if ( !CKEDITOR.env.ie ) + newCell.appendBogus(); + + cell.$.rowSpan = newRowSpan; + newCell.$.rowSpan = newCellRowSpan; + if ( newRowSpan == 1 ) + cell.removeAttribute( 'rowSpan' ); + if ( newCellRowSpan == 1 ) + newCell.removeAttribute( 'rowSpan' ); + + return newCell; + } + + function horizontalSplitCell( selection, isDetect ) + { + var cells = getSelectedCells( selection ); + if ( cells.length > 1 ) + return false; + else if ( isDetect ) + return true; + + var cell = cells[ 0 ], + tr = cell.getParent(), + table = tr.getAscendant( 'table' ), + map = CKEDITOR.tools.buildTableMap( table ), + rowIndex = tr.$.rowIndex, + colIndex = cellInRow( map, rowIndex, cell ), + colSpan = cell.$.colSpan, + newCell, + newColSpan, + newCellColSpan; + + if ( colSpan > 1 ) + { + newColSpan = Math.ceil( colSpan / 2 ); + newCellColSpan = Math.floor( colSpan / 2 ); + } + else + { + newCellColSpan = newColSpan = 1; + var cellsInSameCol = cellInCol( map, colIndex ); + for ( var i = 0; i < cellsInSameCol.length; i++ ) + cellsInSameCol[ i ].colSpan++; + } + newCell = cell.clone(); + newCell.insertAfter( cell ); + if ( !CKEDITOR.env.ie ) + newCell.appendBogus(); + + cell.$.colSpan = newColSpan; + newCell.$.colSpan = newCellColSpan; + if ( newColSpan == 1 ) + cell.removeAttribute( 'colSpan' ); + if ( newCellColSpan == 1 ) + newCell.removeAttribute( 'colSpan' ); + + return newCell; + } + // Context menu on table caption incorrect (#3834) + var contextMenuTags = { thead : 1, tbody : 1, tfoot : 1, td : 1, tr : 1, th : 1 }; + + CKEDITOR.plugins.tabletools = + { + init : function( editor ) + { + var lang = editor.lang.table; + + editor.addCommand( 'cellProperties', new CKEDITOR.dialogCommand( 'cellProperties' ) ); + CKEDITOR.dialog.add( 'cellProperties', this.path + 'dialogs/tableCell.js' ); + + editor.addCommand( 'tableDelete', + { + exec : function( editor ) + { + var selection = editor.getSelection(), + startElement = selection && selection.getStartElement(), + table = startElement && startElement.getAscendant( 'table', 1 ); + + if ( !table ) + return; + + // If the table's parent has only one child remove it as well (unless it's the body or a table cell) (#5416, #6289) + var parent = table.getParent(); + if ( parent.getChildCount() == 1 && !parent.is( 'body', 'td', 'th' ) ) + table = parent; + + var range = new CKEDITOR.dom.range( editor.document ); + range.moveToPosition( table, CKEDITOR.POSITION_BEFORE_START ); + table.remove(); + range.select(); + } + } ); + + editor.addCommand( 'rowDelete', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + placeCursorInCell( deleteRows( selection ) ); + } + } ); + + editor.addCommand( 'rowInsertBefore', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + insertRow( selection, true ); + } + } ); + + editor.addCommand( 'rowInsertAfter', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + insertRow( selection ); + } + } ); + + editor.addCommand( 'columnDelete', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + var element = deleteColumns( selection ); + element && placeCursorInCell( element, true ); + } + } ); + + editor.addCommand( 'columnInsertBefore', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + insertColumn( selection, true ); + } + } ); + + editor.addCommand( 'columnInsertAfter', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + insertColumn( selection ); + } + } ); + + editor.addCommand( 'cellDelete', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + deleteCells( selection ); + } + } ); + + editor.addCommand( 'cellMerge', + { + exec : function( editor ) + { + placeCursorInCell( mergeCells( editor.getSelection() ), true ); + } + } ); + + editor.addCommand( 'cellMergeRight', + { + exec : function( editor ) + { + placeCursorInCell( mergeCells( editor.getSelection(), 'right' ), true ); + } + } ); + + editor.addCommand( 'cellMergeDown', + { + exec : function( editor ) + { + placeCursorInCell( mergeCells( editor.getSelection(), 'down' ), true ); + } + } ); + + editor.addCommand( 'cellVerticalSplit', + { + exec : function( editor ) + { + placeCursorInCell( verticalSplitCell( editor.getSelection() ) ); + } + } ); + + editor.addCommand( 'cellHorizontalSplit', + { + exec : function( editor ) + { + placeCursorInCell( horizontalSplitCell( editor.getSelection() ) ); + } + } ); + + editor.addCommand( 'cellInsertBefore', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + insertCell( selection, true ); + } + } ); + + editor.addCommand( 'cellInsertAfter', + { + exec : function( editor ) + { + var selection = editor.getSelection(); + insertCell( selection ); + } + } ); + + // If the "menu" plugin is loaded, register the menu items. + if ( editor.addMenuItems ) + { + editor.addMenuItems( + { + tablecell : + { + label : lang.cell.menu, + group : 'tablecell', + order : 1, + getItems : function() + { + var selection = editor.getSelection(), + cells = getSelectedCells( selection ); + return { + tablecell_insertBefore : CKEDITOR.TRISTATE_OFF, + tablecell_insertAfter : CKEDITOR.TRISTATE_OFF, + tablecell_delete : CKEDITOR.TRISTATE_OFF, + tablecell_merge : mergeCells( selection, null, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + tablecell_merge_right : mergeCells( selection, 'right', true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + tablecell_merge_down : mergeCells( selection, 'down', true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + tablecell_split_vertical : verticalSplitCell( selection, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + tablecell_split_horizontal : horizontalSplitCell( selection, true ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + tablecell_properties : cells.length > 0 ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED + }; + } + }, + + tablecell_insertBefore : + { + label : lang.cell.insertBefore, + group : 'tablecell', + command : 'cellInsertBefore', + order : 5 + }, + + tablecell_insertAfter : + { + label : lang.cell.insertAfter, + group : 'tablecell', + command : 'cellInsertAfter', + order : 10 + }, + + tablecell_delete : + { + label : lang.cell.deleteCell, + group : 'tablecell', + command : 'cellDelete', + order : 15 + }, + + tablecell_merge : + { + label : lang.cell.merge, + group : 'tablecell', + command : 'cellMerge', + order : 16 + }, + + tablecell_merge_right : + { + label : lang.cell.mergeRight, + group : 'tablecell', + command : 'cellMergeRight', + order : 17 + }, + + tablecell_merge_down : + { + label : lang.cell.mergeDown, + group : 'tablecell', + command : 'cellMergeDown', + order : 18 + }, + + tablecell_split_horizontal : + { + label : lang.cell.splitHorizontal, + group : 'tablecell', + command : 'cellHorizontalSplit', + order : 19 + }, + + tablecell_split_vertical : + { + label : lang.cell.splitVertical, + group : 'tablecell', + command : 'cellVerticalSplit', + order : 20 + }, + + tablecell_properties : + { + label : lang.cell.title, + group : 'tablecellproperties', + command : 'cellProperties', + order : 21 + }, + + tablerow : + { + label : lang.row.menu, + group : 'tablerow', + order : 1, + getItems : function() + { + return { + tablerow_insertBefore : CKEDITOR.TRISTATE_OFF, + tablerow_insertAfter : CKEDITOR.TRISTATE_OFF, + tablerow_delete : CKEDITOR.TRISTATE_OFF + }; + } + }, + + tablerow_insertBefore : + { + label : lang.row.insertBefore, + group : 'tablerow', + command : 'rowInsertBefore', + order : 5 + }, + + tablerow_insertAfter : + { + label : lang.row.insertAfter, + group : 'tablerow', + command : 'rowInsertAfter', + order : 10 + }, + + tablerow_delete : + { + label : lang.row.deleteRow, + group : 'tablerow', + command : 'rowDelete', + order : 15 + }, + + tablecolumn : + { + label : lang.column.menu, + group : 'tablecolumn', + order : 1, + getItems : function() + { + return { + tablecolumn_insertBefore : CKEDITOR.TRISTATE_OFF, + tablecolumn_insertAfter : CKEDITOR.TRISTATE_OFF, + tablecolumn_delete : CKEDITOR.TRISTATE_OFF + }; + } + }, + + tablecolumn_insertBefore : + { + label : lang.column.insertBefore, + group : 'tablecolumn', + command : 'columnInsertBefore', + order : 5 + }, + + tablecolumn_insertAfter : + { + label : lang.column.insertAfter, + group : 'tablecolumn', + command : 'columnInsertAfter', + order : 10 + }, + + tablecolumn_delete : + { + label : lang.column.deleteColumn, + group : 'tablecolumn', + command : 'columnDelete', + order : 15 + } + }); + } + + // If the "contextmenu" plugin is laoded, register the listeners. + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || element.isReadOnly() ) + return null; + + while ( element ) + { + if ( element.getName() in contextMenuTags ) + { + return { + tablecell : CKEDITOR.TRISTATE_OFF, + tablerow : CKEDITOR.TRISTATE_OFF, + tablecolumn : CKEDITOR.TRISTATE_OFF + }; + } + element = element.getParent(); + } + + return null; + } ); + } + }, + + getSelectedCells : getSelectedCells + + }; + CKEDITOR.plugins.add( 'tabletools', CKEDITOR.plugins.tabletools ); +})(); + +/** + * Create a two-dimension array that reflects the actual layout of table cells, + * with cell spans, with mappings to the original td elements. + * @param table {CKEDITOR.dom.element} + */ +CKEDITOR.tools.buildTableMap = function ( table ) +{ + var aRows = table.$.rows ; + + // Row and Column counters. + var r = -1 ; + + var aMap = []; + + for ( var i = 0 ; i < aRows.length ; i++ ) + { + r++ ; + !aMap[r] && ( aMap[r] = [] ); + + var c = -1 ; + + for ( var j = 0 ; j < aRows[i].cells.length ; j++ ) + { + var oCell = aRows[i].cells[j] ; + + c++ ; + while ( aMap[r][c] ) + c++ ; + + var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ; + var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ; + + for ( var rs = 0 ; rs < iRowSpan ; rs++ ) + { + if ( !aMap[r + rs] ) + aMap[r + rs] = []; + + for ( var cs = 0 ; cs < iColSpan ; cs++ ) + { + aMap[r + rs][c + cs] = aRows[i].cells[j] ; + } + } + + c += iColSpan - 1 ; + } + } + return aMap ; +}; diff --git a/_source/plugins/templates/dialogs/templates.js b/_source/plugins/templates/dialogs/templates.js new file mode 100644 index 0000000..2c895fa --- /dev/null +++ b/_source/plugins/templates/dialogs/templates.js @@ -0,0 +1,234 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var doc = CKEDITOR.document; + + CKEDITOR.dialog.add( 'templates', function( editor ) + { + // Constructs the HTML view of the specified templates data. + function renderTemplatesList( container, templatesDefinitions ) + { + // clear loading wait text. + container.setHtml( '' ); + + for ( var i = 0, totalDefs = templatesDefinitions.length ; i < totalDefs ; i++ ) + { + var definition = CKEDITOR.getTemplates( templatesDefinitions[ i ] ), + imagesPath = definition.imagesPath, + templates = definition.templates, + count = templates.length; + + for ( var j = 0 ; j < count ; j++ ) + { + var template = templates[ j ], + item = createTemplateItem( template, imagesPath ); + item.setAttribute( 'aria-posinset', j + 1 ); + item.setAttribute( 'aria-setsize', count ); + container.append( item ); + } + } + } + + function createTemplateItem( template, imagesPath ) + { + var item = CKEDITOR.dom.element.createFromHtml( + '<a href="javascript:void(0)" tabIndex="-1" role="option" >' + + '<div class="cke_tpl_item"></div>' + + '</a>' ); + + // Build the inner HTML of our new item DIV. + var html = '<table style="width:350px;" class="cke_tpl_preview" role="presentation"><tr>'; + + if ( template.image && imagesPath ) + html += '<td class="cke_tpl_preview_img"><img src="' + CKEDITOR.getUrl( imagesPath + template.image ) + '"' + ( CKEDITOR.env.ie6Compat ? ' onload="this.width=this.width"' : '' ) + ' alt="" title=""></td>'; + + html += '<td style="white-space:normal;"><span class="cke_tpl_title">' + template.title + '</span><br/>'; + + if ( template.description ) + html += '<span>' + template.description + '</span>'; + + html += '</td></tr></table>'; + + item.getFirst().setHtml( html ); + + item.on( 'click', function() { insertTemplate( template.html ); } ); + + return item; + } + + /** + * Insert the specified template content into editor. + * @param {Number} index + */ + function insertTemplate( html ) + { + var dialog = CKEDITOR.dialog.getCurrent(), + isInsert = dialog.getValueOf( 'selectTpl', 'chkInsertOpt' ); + + if ( isInsert ) + { + // Everything should happen after the document is loaded (#4073). + editor.on( 'contentDom', function( evt ) + { + evt.removeListener(); + dialog.hide(); + + // Place the cursor at the first editable place. + var range = new CKEDITOR.dom.range( editor.document ); + range.moveToElementEditStart( editor.document.getBody() ); + range.select( 1 ); + setTimeout( function() + { + editor.fire( 'saveSnapshot' ); + }, 0 ); + }); + + editor.fire( 'saveSnapshot' ); + editor.setData( html ); + } + else + { + editor.insertHtml( html ); + dialog.hide(); + } + } + + function keyNavigation( evt ) + { + var target = evt.data.getTarget(), + onList = listContainer.equals( target ); + + // Keyboard navigation for template list. + if ( onList || listContainer.contains( target ) ) + { + var keystroke = evt.data.getKeystroke(), + items = listContainer.getElementsByTag( 'a' ), + focusItem; + + if ( items ) + { + // Focus not yet onto list items? + if ( onList ) + focusItem = items.getItem( 0 ); + else + { + switch ( keystroke ) + { + case 40 : // ARROW-DOWN + focusItem = target.getNext(); + break; + + case 38 : // ARROW-UP + focusItem = target.getPrevious(); + break; + + case 13 : // ENTER + case 32 : // SPACE + target.fire( 'click' ); + } + } + + if ( focusItem ) + { + focusItem.focus(); + evt.data.preventDefault(); + } + } + } + } + + // Load skin at first. + CKEDITOR.skins.load( editor, 'templates' ); + + var listContainer; + + var templateListLabelId = 'cke_tpl_list_label_' + CKEDITOR.tools.getNextNumber(), + lang = editor.lang.templates, + config = editor.config; + return { + title :editor.lang.templates.title, + + minWidth : CKEDITOR.env.ie ? 440 : 400, + minHeight : 340, + + contents : + [ + { + id :'selectTpl', + label : lang.title, + elements : + [ + { + type : 'vbox', + padding : 5, + children : + [ + { + id : 'selectTplText', + type : 'html', + html : + '<span>' + + lang.selectPromptMsg + + '</span>' + }, + { + id : 'templatesList', + type : 'html', + focus: true, + html : + '<div class="cke_tpl_list" tabIndex="-1" role="listbox" aria-labelledby="' + templateListLabelId+ '">' + + '<div class="cke_tpl_loading"><span></span></div>' + + '</div>' + + '<span class="cke_voice_label" id="' + templateListLabelId + '">' + lang.options+ '</span>' + }, + { + id : 'chkInsertOpt', + type : 'checkbox', + label : lang.insertOption, + 'default' : config.templates_replaceContent + } + ] + } + ] + } + ], + + buttons : [ CKEDITOR.dialog.cancelButton ], + + onShow : function() + { + var templatesListField = this.getContentElement( 'selectTpl' , 'templatesList' ); + listContainer = templatesListField.getElement(); + + CKEDITOR.loadTemplates( config.templates_files, function() + { + var templates = ( config.templates || 'default' ).split( ',' ); + + if ( templates.length ) + { + renderTemplatesList( listContainer, templates ); + templatesListField.focus(); + } + else + { + listContainer.setHtml( + '<div class="cke_tpl_empty">' + + '<span>' + lang.emptyListMsg + '</span>' + + '</div>' ); + } + }); + + this._.element.on( 'keydown', keyNavigation ); + }, + + onHide : function() + { + this._.element.removeListener( 'keydown', keyNavigation ); + } + }; + }); +})(); diff --git a/_source/plugins/templates/plugin.js b/_source/plugins/templates/plugin.js new file mode 100644 index 0000000..e0e1080 --- /dev/null +++ b/_source/plugins/templates/plugin.js @@ -0,0 +1,99 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + CKEDITOR.plugins.add( 'templates', + { + requires : [ 'dialog' ], + + init : function( editor ) + { + CKEDITOR.dialog.add( 'templates', CKEDITOR.getUrl( this.path + 'dialogs/templates.js' ) ); + + editor.addCommand( 'templates', new CKEDITOR.dialogCommand( 'templates' ) ); + + editor.ui.addButton( 'Templates', + { + label : editor.lang.templates.button, + command : 'templates' + }); + } + }); + + var templates = {}, + loadedTemplatesFiles = {}; + + CKEDITOR.addTemplates = function( name, definition ) + { + templates[ name ] = definition; + }; + + CKEDITOR.getTemplates = function( name ) + { + return templates[ name ]; + }; + + CKEDITOR.loadTemplates = function( templateFiles, callback ) + { + // Holds the templates files to be loaded. + var toLoad = []; + + // Look for pending template files to get loaded. + for ( var i = 0, count = templateFiles.length ; i < count ; i++ ) + { + if ( !loadedTemplatesFiles[ templateFiles[ i ] ] ) + { + toLoad.push( templateFiles[ i ] ); + loadedTemplatesFiles[ templateFiles[ i ] ] = 1; + } + } + + if ( toLoad.length ) + CKEDITOR.scriptLoader.load( toLoad, callback ); + else + setTimeout( callback, 0 ); + }; +})(); + + + +/** + * The templates definition set to use. It accepts a list of names separated by + * comma. It must match definitions loaded with the templates_files setting. + * @type String + * @default 'default' + * @example + * config.templates = 'my_templates'; + */ + +/** + * The list of templates definition files to load. + * @type (String) Array + * @default [ 'plugins/templates/templates/default.js' ] + * @example + * config.templates_files = + * [ + * '/editor_templates/site_default.js', + * 'http://www.example.com/user_templates.js + * ]; + * + */ +CKEDITOR.config.templates_files = + [ + CKEDITOR.getUrl( + '_source/' + // @Packager.RemoveLine + 'plugins/templates/templates/default.js' ) + ]; + +/** + * Whether the "Replace actual contents" checkbox is checked by default in the + * Templates dialog. + * @type Boolean + * @default true + * @example + * config.templates_replaceContent = false; + */ +CKEDITOR.config.templates_replaceContent = true; diff --git a/_source/plugins/templates/templates/default.js b/_source/plugins/templates/templates/default.js new file mode 100644 index 0000000..cf91e85 --- /dev/null +++ b/_source/plugins/templates/templates/default.js @@ -0,0 +1,94 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +// Register a templates definition set named "default". +CKEDITOR.addTemplates( 'default', +{ + // The name of sub folder which hold the shortcut preview images of the + // templates. + imagesPath : CKEDITOR.getUrl( CKEDITOR.plugins.getPath( 'templates' ) + 'templates/images/' ), + + // The templates definitions. + templates : + [ + { + title: 'Image and Title', + image: 'template1.gif', + description: 'One main image with a title and text that surround the image.', + html: + '<h3>' + + '<img style="margin-right: 10px" height="100" width="100" align="left"/>' + + 'Type the title here'+ + '</h3>' + + '<p>' + + 'Type the text here' + + '</p>' + }, + { + title: 'Strange Template', + image: 'template2.gif', + description: 'A template that defines two colums, each one with a title, and some text.', + html: + '<table cellspacing="0" cellpadding="0" style="width:100%" border="0">' + + '<tr>' + + '<td style="width:50%">' + + '<h3>Title 1</h3>' + + '</td>' + + '<td></td>' + + '<td style="width:50%">' + + '<h3>Title 2</h3>' + + '</td>' + + '</tr>' + + '<tr>' + + '<td>' + + 'Text 1' + + '</td>' + + '<td></td>' + + '<td>' + + 'Text 2' + + '</td>' + + '</tr>' + + '</table>' + + '<p>' + + 'More text goes here.' + + '</p>' + }, + { + title: 'Text and Table', + image: 'template3.gif', + description: 'A title with some text and a table.', + html: + '<div style="width: 80%">' + + '<h3>' + + 'Title goes here' + + '</h3>' + + '<table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1">' + + '<caption style="border:solid 1px black">' + + '<strong>Table title</strong>' + + '</caption>' + + '</tr>' + + '<tr>' + + '<td> </td>' + + '<td> </td>' + + '<td> </td>' + + '</tr>' + + '<tr>' + + '<td> </td>' + + '<td> </td>' + + '<td> </td>' + + '</tr>' + + '<tr>' + + '<td> </td>' + + '<td> </td>' + + '<td> </td>' + + '</tr>' + + '</table>' + + '<p>' + + 'Type the text here' + + '</p>' + + '</div>' + } + ] +}); diff --git a/_source/plugins/templates/templates/images/template1.gif b/_source/plugins/templates/templates/images/template1.gif new file mode 100644 index 0000000000000000000000000000000000000000..efdabbebd4503ceb55c948fa73b9b83cbd373e57 GIT binary patch literal 375 zcmV--0f_!bNk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB95pDD3{Ep z^T{;k4xj+g%7JRP+$IPq!1Bb&uKB$DQa@x|8x8NO4b`hO25#T<cT?Wp$MV<17dSFF z))BV|H3v{fXt;v7Qz+>OnRw~9=3yE0xyeE4CQ8$(2)Mz>8udZCXX=BRr7DZbW_#-a zYZEHlJM(KAEc4dditDMnJ4(CC+&uK06fIp0D*Z|wX5EYpGb{?;a*WKVoEoWp!Y!`y zeo4*}FFC(bZ<u%9$nH#MiXXad0R3$OV^9jhghduI4C3%%k9`6wT1+QVA-9Z3Kq7Ly z;ql{)kRtK8vxt%(#*z~^va~_+<s_FfO%|-VgJQ~^i&o+sN%QB-n?ivSEo$=-QkX%P V&N}LJD2Az2t6IH^HS2={06Vn%v1I@N literal 0 HcmV?d00001 diff --git a/_source/plugins/templates/templates/images/template2.gif b/_source/plugins/templates/templates/images/template2.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1cebb3aed88265add0a1d87d40de566f86a9619 GIT binary patch literal 333 zcmV-T0kZx_Nk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l)5 z^9hYgr_{iwip@$vOs!XY{ff7r?)dx+qsQEX@;zh1=Oa1&?y=+d0`r>f@duda#%D-q zaHzPUxA@lRm;@PF<R|E*cA3?dNXa+p2?QF-GfH|?csggPiIv$(#R;HFXG)usdMlZ$ zTglrSWDC5)3On^`93?w!B+P8${Ot29eG^?BQk)EhyzR7%T}mCkG)~@fea?}tJ~ZwP zF9_a_+eu$;e~)giKb_z2;$6IfgHG@RnC&3KG71+O{O7Pv!-(!6Y9NRa6GMw06gST5 f=<g#)5$xKPRCn@RN^%%lx_k*Urp%cV3IG5*5PY8V literal 0 HcmV?d00001 diff --git a/_source/plugins/templates/templates/images/template3.gif b/_source/plugins/templates/templates/images/template3.gif new file mode 100644 index 0000000000000000000000000000000000000000..db41cb4fb8fc7eafac8f382810e87147e791ad6e GIT binary patch literal 422 zcmV;X0a^Y>Nk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l%g z^9hYgr_`$T`us4l+^+W<)gC_JviY3#AeC&_xD98m<8-m1jvsB&<_@0<GMBdz090rP zFgS9^!+7$h2y*z>q~XXRsCap^IRqK$(K#c!N9pBf82AawVH$?WN){q&IjedXiz+EX zOS+od%WDgp+d909toAG5`lTy-9D18rOxWx+T}>D*o&1Qa9n5V^96nACtqfi*?*05t zZSMX~zfpQ^<%jRPUfiDEO<g>8=eEuB)DKv}S_cJW8uTxqL`=(AMXYB~Aenu4SM=e_ zrj6M`kqsZ_xrlC}y^5evW>krApudqWP2zFM5Fo{b%sA$2wGU)SI5vkKVQCad(WEn$ zGF`IFr&KONpB8ayRSwduHn4I{;q@zxs8h=VDkqjl*t8<nvaR~I>(;n#c+zd*_U=jy QeEa(S3plV~2n7HDJNoX*`2YX_ literal 0 HcmV?d00001 diff --git a/_source/plugins/toolbar/plugin.js b/_source/plugins/toolbar/plugin.js new file mode 100644 index 0000000..5b6878a --- /dev/null +++ b/_source/plugins/toolbar/plugin.js @@ -0,0 +1,545 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "toolbar" plugin. Renders the default toolbar interface in + * the editor. + */ + +(function() +{ + var toolbox = function() + { + this.toolbars = []; + this.focusCommandExecuted = false; + }; + + toolbox.prototype.focus = function() + { + for ( var t = 0, toolbar ; toolbar = this.toolbars[ t++ ] ; ) + { + for ( var i = 0, item ; item = toolbar.items[ i++ ] ; ) + { + if ( item.focus ) + { + item.focus(); + return; + } + } + } + }; + + var commands = + { + toolbarFocus : + { + modes : { wysiwyg : 1, source : 1 }, + readOnly : 1, + + exec : function( editor ) + { + if ( editor.toolbox ) + { + editor.toolbox.focusCommandExecuted = true; + + // Make the first button focus accessible for IE. (#3417) + // Adobe AIR instead need while of delay. + if ( CKEDITOR.env.ie || CKEDITOR.env.air ) + setTimeout( function(){ editor.toolbox.focus(); }, 100 ); + else + editor.toolbox.focus(); + } + } + } + }; + + CKEDITOR.plugins.add( 'toolbar', + { + init : function( editor ) + { + var endFlag; + + var itemKeystroke = function( item, keystroke ) + { + var next, toolbar; + var rtl = editor.lang.dir == 'rtl', + toolbarGroupCycling = editor.config.toolbarGroupCycling; + + toolbarGroupCycling = toolbarGroupCycling === undefined || toolbarGroupCycling; + + switch ( keystroke ) + { + case 9 : // TAB + case CKEDITOR.SHIFT + 9 : // SHIFT + TAB + // Cycle through the toolbars, starting from the one + // closest to the current item. + while ( !toolbar || !toolbar.items.length ) + { + toolbar = keystroke == 9 ? + ( ( toolbar ? toolbar.next : item.toolbar.next ) || editor.toolbox.toolbars[ 0 ] ) : + ( ( toolbar ? toolbar.previous : item.toolbar.previous ) || editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ] ); + + // Look for the first item that accepts focus. + if ( toolbar.items.length ) + { + item = toolbar.items[ endFlag ? ( toolbar.items.length - 1 ) : 0 ]; + while ( item && !item.focus ) + { + item = endFlag ? item.previous : item.next; + + if ( !item ) + toolbar = 0; + } + } + } + + if ( item ) + item.focus(); + + return false; + + case rtl ? 37 : 39 : // RIGHT-ARROW + case 40 : // DOWN-ARROW + next = item; + do + { + // Look for the next item in the toolbar. + next = next.next; + + // If it's the last item, cycle to the first one. + if ( !next && toolbarGroupCycling ) + next = item.toolbar.items[ 0 ]; + } + while ( next && !next.focus ) + + // If available, just focus it, otherwise focus the + // first one. + if ( next ) + next.focus(); + else + // Send a TAB. + itemKeystroke( item, 9 ); + + return false; + + case rtl ? 39 : 37 : // LEFT-ARROW + case 38 : // UP-ARROW + next = item; + do + { + // Look for the previous item in the toolbar. + next = next.previous; + + // If it's the first item, cycle to the last one. + if ( !next && toolbarGroupCycling ) + next = item.toolbar.items[ item.toolbar.items.length - 1 ]; + } + while ( next && !next.focus ) + + // If available, just focus it, otherwise focus the + // last one. + if ( next ) + next.focus(); + else + { + endFlag = 1; + // Send a SHIFT + TAB. + itemKeystroke( item, CKEDITOR.SHIFT + 9 ); + endFlag = 0; + } + + return false; + + case 27 : // ESC + editor.focus(); + return false; + + case 13 : // ENTER + case 32 : // SPACE + item.execute(); + return false; + } + return true; + }; + + editor.on( 'themeSpace', function( event ) + { + if ( event.data.space == editor.config.toolbarLocation ) + { + editor.toolbox = new toolbox(); + + var labelId = CKEDITOR.tools.getNextId(); + + var output = [ '<div class="cke_toolbox" role="group" aria-labelledby="', labelId, '" onmousedown="return false;"' ], + expanded = editor.config.toolbarStartupExpanded !== false, + groupStarted; + + output.push( expanded ? '>' : ' style="display:none">' ); + + // Sends the ARIA label. + output.push( '<span id="', labelId, '" class="cke_voice_label">', editor.lang.toolbars, '</span>' ); + + var toolbars = editor.toolbox.toolbars, + toolbar = + ( editor.config.toolbar instanceof Array ) ? + editor.config.toolbar + : + editor.config[ 'toolbar_' + editor.config.toolbar ]; + + for ( var r = 0 ; r < toolbar.length ; r++ ) + { + var toolbarId, + toolbarObj = 0, + toolbarName, + row = toolbar[ r ], + items; + + // It's better to check if the row object is really + // available because it's a common mistake to leave + // an extra comma in the toolbar definition + // settings, which leads on the editor not loading + // at all in IE. (#3983) + if ( !row ) + continue; + + if ( groupStarted ) + { + output.push( '</div>' ); + groupStarted = 0; + } + + if ( row === '/' ) + { + output.push( '<div class="cke_break"></div>' ); + continue; + } + + items = row.items || row; + + // Create all items defined for this toolbar. + for ( var i = 0 ; i < items.length ; i++ ) + { + var item, + itemName = items[ i ], + canGroup; + + item = editor.ui.create( itemName ); + + if ( item ) + { + canGroup = item.canGroup !== false; + + // Initialize the toolbar first, if needed. + if ( !toolbarObj ) + { + // Create the basic toolbar object. + toolbarId = CKEDITOR.tools.getNextId(); + toolbarObj = { id : toolbarId, items : [] }; + toolbarName = row.name && ( editor.lang.toolbarGroups[ row.name ] || row.name ); + + // Output the toolbar opener. + output.push( '<span id="', toolbarId, '" class="cke_toolbar"', + ( toolbarName ? ' aria-labelledby="'+ toolbarId + '_label"' : '' ), + ' role="toolbar">' ); + + // If a toolbar name is available, send the voice label. + toolbarName && output.push( '<span id="', toolbarId, '_label" class="cke_voice_label">', toolbarName, '</span>' ); + + output.push( '<span class="cke_toolbar_start"></span>' ); + + // Add the toolbar to the "editor.toolbox.toolbars" + // array. + var index = toolbars.push( toolbarObj ) - 1; + + // Create the next/previous reference. + if ( index > 0 ) + { + toolbarObj.previous = toolbars[ index - 1 ]; + toolbarObj.previous.next = toolbarObj; + } + } + + if ( canGroup ) + { + if ( !groupStarted ) + { + output.push( '<span class="cke_toolgroup" role="presentation">' ); + groupStarted = 1; + } + } + else if ( groupStarted ) + { + output.push( '</span>' ); + groupStarted = 0; + } + + var itemObj = item.render( editor, output ); + index = toolbarObj.items.push( itemObj ) - 1; + + if ( index > 0 ) + { + itemObj.previous = toolbarObj.items[ index - 1 ]; + itemObj.previous.next = itemObj; + } + + itemObj.toolbar = toolbarObj; + itemObj.onkey = itemKeystroke; + + /* + * Fix for #3052: + * Prevent JAWS from focusing the toolbar after document load. + */ + itemObj.onfocus = function() + { + if ( !editor.toolbox.focusCommandExecuted ) + editor.focus(); + }; + } + } + + if ( groupStarted ) + { + output.push( '</span>' ); + groupStarted = 0; + } + + if ( toolbarObj ) + output.push( '<span class="cke_toolbar_end"></span></span>' ); + } + + output.push( '</div>' ); + + if ( editor.config.toolbarCanCollapse ) + { + var collapserFn = CKEDITOR.tools.addFunction( + function() + { + editor.execCommand( 'toolbarCollapse' ); + }); + + editor.on( 'destroy', function () { + CKEDITOR.tools.removeFunction( collapserFn ); + }); + + var collapserId = CKEDITOR.tools.getNextId(); + + editor.addCommand( 'toolbarCollapse', + { + readOnly : 1, + exec : function( editor ) + { + var collapser = CKEDITOR.document.getById( collapserId ), + toolbox = collapser.getPrevious(), + contents = editor.getThemeSpace( 'contents' ), + toolboxContainer = toolbox.getParent(), + contentHeight = parseInt( contents.$.style.height, 10 ), + previousHeight = toolboxContainer.$.offsetHeight, + collapsed = !toolbox.isVisible(); + + if ( !collapsed ) + { + toolbox.hide(); + collapser.addClass( 'cke_toolbox_collapser_min' ); + collapser.setAttribute( 'title', editor.lang.toolbarExpand ); + } + else + { + toolbox.show(); + collapser.removeClass( 'cke_toolbox_collapser_min' ); + collapser.setAttribute( 'title', editor.lang.toolbarCollapse ); + } + + // Update collapser symbol. + collapser.getFirst().setText( collapsed ? + '\u25B2' : // BLACK UP-POINTING TRIANGLE + '\u25C0' ); // BLACK LEFT-POINTING TRIANGLE + + var dy = toolboxContainer.$.offsetHeight - previousHeight; + contents.setStyle( 'height', ( contentHeight - dy ) + 'px' ); + + editor.fire( 'resize' ); + }, + + modes : { wysiwyg : 1, source : 1 } + } ); + + output.push( '<a title="' + ( expanded ? editor.lang.toolbarCollapse : editor.lang.toolbarExpand ) + + '" id="' + collapserId + '" tabIndex="-1" class="cke_toolbox_collapser' ); + + if ( !expanded ) + output.push( ' cke_toolbox_collapser_min' ); + + output.push( '" onclick="CKEDITOR.tools.callFunction(' + collapserFn + ')">', + '<span>▲</span>', // BLACK UP-POINTING TRIANGLE + '</a>' ); + } + + event.data.html += output.join( '' ); + } + }); + + editor.on( 'destroy', function() + { + var toolbars, index = 0, i, + items, instance; + toolbars = this.toolbox.toolbars; + for ( ; index < toolbars.length; index++ ) + { + items = toolbars[ index ].items; + for ( i = 0; i < items.length; i++ ) + { + instance = items[ i ]; + if ( instance.clickFn ) CKEDITOR.tools.removeFunction( instance.clickFn ); + if ( instance.keyDownFn ) CKEDITOR.tools.removeFunction( instance.keyDownFn ); + } + } + }); + + editor.addCommand( 'toolbarFocus', commands.toolbarFocus ); + + editor.ui.add( '-', CKEDITOR.UI_SEPARATOR, {} ); + editor.ui.addHandler( CKEDITOR.UI_SEPARATOR, + { + create: function() + { + return { + render : function( editor, output ) + { + output.push( '<span class="cke_separator" role="separator"></span>' ); + return {}; + } + }; + } + }); + } + }); +})(); + +CKEDITOR.UI_SEPARATOR = 'separator'; + +/** + * The "theme space" to which rendering the toolbar. For the default theme, + * the recommended options are "top" and "bottom". + * @type String + * @default 'top' + * @see CKEDITOR.config.theme + * @example + * config.toolbarLocation = 'bottom'; + */ +CKEDITOR.config.toolbarLocation = 'top'; + +/** + * The toolbar definition. It is an array of toolbars (strips), + * each one being also an array, containing a list of UI items. + * Note that this setting is composed by "toolbar_" added by the toolbar name, + * which in this case is called "Basic". This second part of the setting name + * can be anything. You must use this name in the + * {@link CKEDITOR.config.toolbar} setting, so you instruct the editor which + * toolbar_(name) setting to you. + * @type Array + * @example + * // Defines a toolbar with only one strip containing the "Source" button, a + * // separator and the "Bold" and "Italic" buttons. + * <b>config.toolbar_Basic = + * [ + * [ 'Source', '-', 'Bold', 'Italic' ] + * ]</b>; + * config.toolbar = 'Basic'; + */ +CKEDITOR.config.toolbar_Basic = +[ + ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink','-','About'] +]; + +/** + * This is the default toolbar definition used by the editor. It contains all + * editor features. + * @type Array + * @default (see example) + * @example + * // This is actually the default value. + * config.toolbar_Full = + * [ + * { name: 'document', items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] }, + * { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] }, + * { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] }, + * { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] }, + * '/', + * { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] }, + * { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] }, + * { name: 'links', items : [ 'Link','Unlink','Anchor' ] }, + * { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak' ] }, + * '/', + * { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] }, + * { name: 'colors', items : [ 'TextColor','BGColor' ] }, + * { name: 'tools', items : [ 'Maximize', 'ShowBlocks','-','About' ] } + * ]; + */ +CKEDITOR.config.toolbar_Full = +[ + { name: 'document', items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] }, + { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] }, + { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] }, + { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] }, + '/', + { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] }, + { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] }, + { name: 'links', items : [ 'Link','Unlink','Anchor' ] }, + { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] }, + '/', + { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] }, + { name: 'colors', items : [ 'TextColor','BGColor' ] }, + { name: 'tools', items : [ 'Maximize', 'ShowBlocks','-','About' ] } +]; + +/** + * The toolbox (alias toolbar) definition. It is a toolbar name or an array of + * toolbars (strips), each one being also an array, containing a list of UI items. + * @type Array|String + * @default 'Full' + * @example + * // Defines a toolbar with only one strip containing the "Source" button, a + * // separator and the "Bold" and "Italic" buttons. + * config.toolbar = + * [ + * [ 'Source', '-', 'Bold', 'Italic' ] + * ]; + * @example + * // Load toolbar_Name where Name = Basic. + * config.toolbar = 'Basic'; + */ +CKEDITOR.config.toolbar = 'Full'; + +/** + * Whether the toolbar can be collapsed by the user. If disabled, the collapser + * button will not be displayed. + * @type Boolean + * @default true + * @example + * config.toolbarCanCollapse = false; + */ +CKEDITOR.config.toolbarCanCollapse = true; + +/** + * Whether the toolbar must start expanded when the editor is loaded. + * @name CKEDITOR.config.toolbarStartupExpanded + * @type Boolean + * @default true + * @example + * config.toolbarStartupExpanded = false; + */ + +/** + * When enabled, makes the arrow keys navigation cycle within the current + * toolbar group. Otherwise the arrows will move trought all items available in + * the toolbar. The TAB key will still be used to quickly jump among the + * toolbar groups. + * @name CKEDITOR.config.toolbarGroupCycling + * @since 3.6 + * @type Boolean + * @default true + * @example + * config.toolbarGroupCycling = false; + */ diff --git a/_source/plugins/uicolor/dialogs/uicolor.js b/_source/plugins/uicolor/dialogs/uicolor.js new file mode 100644 index 0000000..916b5d2 --- /dev/null +++ b/_source/plugins/uicolor/dialogs/uicolor.js @@ -0,0 +1,205 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'uicolor', function( editor ) +{ + var dialog, picker, pickerContents, + // Actual UI color value. + uiColor = editor.getUiColor(), + pickerId = 'cke_uicolor_picker' + CKEDITOR.tools.getNextNumber(); + + function setNewPickerColor( color ) + { + // Convert HEX representation to RGB, stripping # char. + if ( /^#/.test( color ) ) + color = window.YAHOO.util.Color.hex2rgb( color.substr( 1 ) ); + picker.setValue( color, true ); + // Refresh picker UI. + picker.refresh( pickerId ); + } + + function setNewUiColor( color, force ) + { + if ( force || dialog._.contents.tab1.livePeview.getValue() ) + editor.setUiColor( color ); + // Write new config string into textbox. + dialog._.contents.tab1.configBox.setValue( + 'config.uiColor = "#' + picker.get( "hex" ) + '"' + ); + } + + pickerContents = + { + id : 'yuiColorPicker', + type : 'html', + html : "<div id='" + pickerId + "' class='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>", + onLoad : function( event ) + { + var url = CKEDITOR.getUrl( + '_source/' + // @Packager.RemoveLine + 'plugins/uicolor/yui/' + ); + + // Create new color picker widget. + picker = new window.YAHOO.widget.ColorPicker( pickerId, + { + showhsvcontrols : true, + showhexcontrols : true, + images : + { + PICKER_THUMB : url + "assets/picker_thumb.png", + HUE_THUMB : url + "assets/hue_thumb.png" + } + }); + + // Set actual UI color to the picker. + if ( uiColor ) + setNewPickerColor( uiColor ); + + // Subscribe to the rgbChange event. + picker.on( "rgbChange", function() + { + // Reset predefined box. + dialog._.contents.tab1.predefined.setValue( '' ); + setNewUiColor( '#' + picker.get( 'hex' ) ); + }); + + // Fix input class names. + var inputs = new CKEDITOR.dom.nodeList( picker.getElementsByTagName( 'input' ) ); + for ( var i = 0; i < inputs.count() ; i++ ) + inputs.getItem( i ).addClass( 'cke_dialog_ui_input_text' ); + } + }; + + var skipPreviewChange = true; + + return { + title : editor.lang.uicolor.title, + minWidth : 360, + minHeight : 320, + onLoad : function() + { + dialog = this; + this.setupContent(); + + // #3808 + if ( CKEDITOR.env.ie7Compat ) + dialog.parts.contents.setStyle( 'overflow', 'hidden' ); + }, + contents : [ + { + id : 'tab1', + label : '', + title : '', + expand : true, + padding : 0, + elements : [ + pickerContents, + { + id : 'tab1', + type : 'vbox', + children : + [ + { + id : 'livePeview', + type : 'checkbox', + label : editor.lang.uicolor.preview, + 'default' : 1, + onLoad : function() + { + skipPreviewChange = true; + }, + onChange : function() + { + if ( skipPreviewChange ) + return; + var on = this.getValue(), + color = on ? '#' + picker.get( 'hex' ) : uiColor; + setNewUiColor( color, true ); + } + }, + { + type : 'hbox', + children : + [ + { + id : 'predefined', + type : 'select', + 'default' : '', + label : editor.lang.uicolor.predefined, + items : + [ + [ '' ], + [ 'Light blue', '#9AB8F3' ], + [ 'Sand', '#D2B48C' ], + [ 'Metallic', '#949AAA' ], + [ 'Purple', '#C2A3C7' ], + [ 'Olive', '#A2C980' ], + [ 'Happy green', '#9BD446' ], + [ 'Jezebel Blue', '#14B8C4' ], + [ 'Burn', '#FF893A' ], + [ 'Easy red', '#FF6969' ], + [ 'Pisces 3', '#48B4F2' ], + [ 'Aquarius 5', '#487ED4' ], + [ 'Absinthe', '#A8CF76' ], + [ 'Scrambled Egg', '#C7A622' ], + [ 'Hello monday', '#8E8D80' ], + [ 'Lovely sunshine', '#F1E8B1' ], + [ 'Recycled air', '#B3C593' ], + [ 'Down', '#BCBCA4' ], + [ 'Mark Twain', '#CFE91D' ], + [ 'Specks of dust', '#D1B596' ], + [ 'Lollipop', '#F6CE23' ] + ], + onChange : function() + { + var color = this.getValue(); + if ( color ) + { + setNewPickerColor( color ); + setNewUiColor( color ); + // Refresh predefined preview box. + CKEDITOR.document.getById( 'predefinedPreview' ).setStyle( 'background', color ); + } + else + CKEDITOR.document.getById( 'predefinedPreview' ).setStyle( 'background', '' ); + }, + onShow : function() + { + var color = editor.getUiColor(); + if ( color ) + this.setValue( color ); + } + }, + { + id : 'predefinedPreview', + type : 'html', + html : '<div id="cke_uicolor_preview" style="border: 1px solid black; padding: 3px; width: 30px;">' + + '<div id="predefinedPreview" style="width: 30px; height: 30px;"> </div>' + + '</div>' + } + ] + }, + { + id : 'configBox', + type : 'text', + label : editor.lang.uicolor.config, + onShow : function() + { + var color = editor.getUiColor(); + if ( color ) + this.setValue( + 'config.uiColor = "' + color + '"' + ); + } + } + ] + } + ] + } + ], + buttons : [ CKEDITOR.dialog.okButton ] + }; +} ); diff --git a/_source/plugins/uicolor/lang/en.js b/_source/plugins/uicolor/lang/en.js new file mode 100644 index 0000000..8de4b1f --- /dev/null +++ b/_source/plugins/uicolor/lang/en.js @@ -0,0 +1,15 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang( 'uicolor', 'en', +{ + uicolor : + { + title : 'UI Color Picker', + preview : 'Live preview', + config : 'Paste this string into your config.js file', + predefined : 'Predefined color sets' + } +}); diff --git a/_source/plugins/uicolor/lang/he.js b/_source/plugins/uicolor/lang/he.js new file mode 100644 index 0000000..2cfa495 --- /dev/null +++ b/_source/plugins/uicolor/lang/he.js @@ -0,0 +1,15 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang( 'uicolor', 'he', +{ + uicolor : + { + title : '×××רת צ××¢ ××שק ×שת×ש', + preview : 'תצ××× ×ק××××', + config : '×××ק ×ת ×××§×¡× ××× ×ת×× ×ק×××¥ config.js', + predefined : 'ק××צ×ת צ××¢×× ××××ר×ת ×ר×ש' + } +}); diff --git a/_source/plugins/uicolor/plugin.js b/_source/plugins/uicolor/plugin.js new file mode 100644 index 0000000..f971fbc --- /dev/null +++ b/_source/plugins/uicolor/plugin.js @@ -0,0 +1,37 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add( 'uicolor', +{ + requires : [ 'dialog' ], + lang : [ 'en', 'he' ], + + init : function( editor ) + { + if ( CKEDITOR.env.ie6Compat ) + return; + + editor.addCommand( 'uicolor', new CKEDITOR.dialogCommand( 'uicolor' ) ); + editor.ui.addButton( 'UIColor', + { + label : editor.lang.uicolor.title, + command : 'uicolor', + icon : this.path + 'uicolor.gif' + }); + CKEDITOR.dialog.add( 'uicolor', this.path + 'dialogs/uicolor.js' ); + + // Load YUI js files. + CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( + '_source/' + // @Packager.RemoveLine + 'plugins/uicolor/yui/yui.js' + )); + + // Load YUI css files. + editor.element.getDocument().appendStyleSheet( CKEDITOR.getUrl( + '_source/' + // @Packager.RemoveLine + 'plugins/uicolor/yui/assets/yui.css' + )); + } +} ); diff --git a/_source/plugins/uicolor/uicolor.gif b/_source/plugins/uicolor/uicolor.gif new file mode 100644 index 0000000000000000000000000000000000000000..ec33de6e5bc6bb99e438497f20adc8db44e4e8a8 GIT binary patch literal 1108 zcmV-a1grZ;Nk%w1VGsZi0O$Mw4Fd`d1PKlV3l0Se4h0Ji1q==a4G#tm4+jqq2oMkn z5fKUz6A%d#5DOF$4Hgj&6%q>;6A%~^5*ZW}8Wk2A78e{A866iI9TyxP7aSfK9v~PX z8XXB79Sa>E4Idy7At4hYBNZbg7$qbeCMF&yCL${*Bqb~fEGQ@}C@C!{EGI4uEh#K6 zDK9B64=OSeEHW1_GaE59A2T&0H8&_OJqI>7D>yhWIyf^hKn*-OH#0&JKRP`=J2^l* zJ~u-aIz$^hMj<{&CO}9lLr5?=Q3*y$H$74fNJ~6ROF>LaMnF^(O-xEpO-(~r8B$GA zMOYt5Std+cEJb4nQCl@qTsuf+4OU%3Szbv^Xcb&uPhVeFUtd~KY8zr;U{h-%WMO1j zZY*1FG*Nd3UvE8Pa7I;n4rg&qS$q|0aaL_|U0r@1Z*ydFb8BILCv<dhb#!!PfiY=< zI$n(iZi7W~gim9S4|auEW|0?qgkpV#Yip7qfQ58!lPiRVdxnOBbCfoThlhEULTR7| zeU?pbqYi<WSaPKpg_vWCmu`5bBafJQe5Wsyn1hy?i-D*+n3<EBnV5C61%;_ci>Xt3 zwhxf0VSu<9m8xx-s(OUFCZ4K=iMlbNtB{VnKBudjfW`%sx=g97qpYi{g~tz=yIP*R zXp6}jkIE;cymqO(gOtlOt-O+o)&!c%LbAM_pUY9Vys3}a54pUtrORNwyt|ay8mi22 znAs<>%z&TTHk0H8w#<&C+D5y}oSEhhs@qk-%&DE{8?f4C#LTwI%fO=ND7D&l%*@KX z+J~s<IGXYU!r7Ls=trOO4x{rL$l9i~=vlevYR%fUsq-n*+QP2$IH3Ik!RLFV{0-OI z&duVbwev~G=Z@Oi*Q)#)yz^VH{3*`opVQ{A%<Gl4{5rz(ZOrYG(dwkh@`2gszq|ZP z-sjE2{9WVc+2`lu%KUNA`-I)|x8m~0=<?R=^W*XJ?&kfy>if>{``-5Z?E3un|NsC0 z|NsC0|NsC0A^s6Va%Ew3Wn>_CX>@2HM@dak04x9i000mG5C8xO{s8ys%ZKmYHgfUc zwOdy%+_!Ak?A4<;Pae8+>CA!SW{ui2XUpEXW2bJMxNg{_MQf(an6O{FylJa84H~m# z$A$sxr3;rWS*?&2BNogTuUxli!E&_<)hSY-YR!uEij}HVrb>nK#7WboN|Hv2`qXJt zCQOznO?t#g(V;?vB0+N0Xi*|Wh6o7))MpPKJ97g4@xw<?o;!8u$cf`-4H`3J;Jj(W zMopSCWypvL^QB7`D^tLD;j%>wmMc}LNQnZ)$&w>Qo-|>iBnc8DM1}|n0_4Yz95sCK z=%EA04I4CO$cO>sg^Lv@TBu-=0)>eZBu0n`0pf#)4jeWmXvl!!f`tkcCP;|zzyX8? a3>GLzkO0Af0|pEfC_q5K000351OPkalif1_ literal 0 HcmV?d00001 diff --git a/_source/plugins/uicolor/yui/assets/hue_bg.png b/_source/plugins/uicolor/yui/assets/hue_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d9bcdeb5c49910d5c32c9ebbb134200bf138b7b4 GIT binary patch literal 1120 zcmWkuZA?>V6h6*nD|EKy_G>T#efd;-TcIEZRG=3KG$^eF2Q{FAMV4*KY}f{qh`QSV zerz}DmTbC_Y|fEr#w0P0=t#CW_qsTZ+oCcxM!nmzgkYx0y)F9Qv+IxZJb6w|&dGC5 zaz;Z<^@~z7QUPF5prJObvq_J$hJ`xXo5wcl^n8zhtsmg}%|C)|K3%8x)wT6C_ipWb zw=>oa{%CJkw=1x%v!^@U-5DL&ajAP1z;mggH7#{nz-rJ$faL=7qA45La$rShQh@N! zu%sTCvXE1t{K=eCf%*<$g}~m_lTbYf%#DuhOcn)}oyL+UY!^T)N0SIlg&q}p70^Bg z#v`A*ftBD@6%H#L*N*0!pas#aR&fdVH33r!@M?%V4H}RB^=Q5i+Cy}fVbYD}B4EjH z?P{0x>Acg883%O<vmR{oU`T=1rJu3nQQIh{?ZLD|n6?b}C#URvz)qpni|<XN&2wJ& z^7$>a|AzJ?B#N%FVmw`fKNY;g=C3&BXB;Z@Kam~dpydSE;!)<o*L-Ly#&HE+cCFAo z+TF<c@SMxbNEK7^xk@y-f%$G}D(p$X1djzpc%<ZSEibCutVj&ocx;#jt?a2*xSJ(* zS(hAU>KoPs+}MGZ#35TL&dgu1t8ZJCOzunMR5)=3wB`6<04>Wd>f<uA7wWiCfdV(W zmgC&mvrX=E<uf&6<xjIMXi@7q4{m-PEuSK{4EHJ!Ou&UEV1J<_f16%>EGNt=fUO7S z2UdorB;0d<%}W2%DB8|}rj&7Bd@G600GiIAl}DfA(T~fGjEtPSpMM-+!R<h;zoq}r z<JVhPIsmHgnHPnBX{Z?w)h@jz9oScT{Hrf4o~5O6<xrkIV?##Ek3+NVSs$LvdUz-K zVqsBnU~^YH-9S#p2Xmt1(pB-YCH8^zSUli}O-sG;%g)JW+E1+FDa)jvI)wsbavgml zl%;;+l~<A*hJi-fD{Qwu+AWO=8||_8CB2VJ4wK>dW!t0gq&tGw>1(Ck!bL+QCwfHM zFSfg6C%J1(_sXrL%2?h=Gs#tB`jY5~^n-B4=5yiEV7#4=o|0Az*Nu@}Ih_Oz$pHOG zC`&0{EO(L#V`PcEmKepS-spt1Gd{>irzEF%o|nyJB4uhF{YR*@P1evnVor$^%6<|| znF`WIVUCMc(=ZuIiR8<#kjLU}uWTnbQf7F06KORJtfO9XHgzgQe;2kI(+lL6NRM$K zObK})t}2X5(vY~u9{XN8DGugG$E0mSB^Mi(>V!Gl<R-dPm~+Hh=xRZ;O|GF#*k$oG z(!0X;G@n4X2wC<=BhuM8?}#0i8b#hV*+Cto*Dz2|UnMJy$uK=5OgnsQX&U)iT;-NK mNV9m%-8>YlD8E#--~|}G|8JkdYdiH90fD-v+HZu-d;bSJ8}W_+ literal 0 HcmV?d00001 diff --git a/_source/plugins/uicolor/yui/assets/hue_thumb.png b/_source/plugins/uicolor/yui/assets/hue_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..14d5db4862403a43231ac4766301552afa79e8ae GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLl;=8&~`zjDUQ}64!{5 z;QX|b^2DN42FH~Aq*MjZ+{E<Mpwz^a%EFVWHb6z30X`wF|Ns97GJ#~>`+k2Qi@7Ao zFBm9x{S+_IKn6ok7srr_TS*Cr7<jgbC%G^QD7vw!9N-X2N^uBd6=CLFC~>4CR#a^B hhMOMV_Dn1i4C!Z>gq7E&G66L+c)I$ztaD0e0ssu{I5q$P literal 0 HcmV?d00001 diff --git a/_source/plugins/uicolor/yui/assets/picker_mask.png b/_source/plugins/uicolor/yui/assets/picker_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d91932b376af76ccfac030c12eb9fec7ee4c63 GIT binary patch literal 12174 zcmV;9FLBU`P)<h;3K|Lk000e1NJLTq006cC006cK1^@s6bntfs00004XF*Lt007q5 z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBVMAW1|)RCwC# zUE7x9IC4zr>_6|b&%Dfjpyv}j54LBIXFZqhE-_t{2r7|?ya1%Cs>h{sswI&ir4|Fh z$jAgxe*E!Arq9Rc<1hC3+xpMn|Ni&&sREphKX2dqw+!rCg4f<Q^c-!Qd7XLxUfaC) zv#-5v*=ysy9>vHA{v>|sAOH9VUq1Wx=i{&V_yqRn;}h7QkI%<<rLmbm<HtAn4GQ?9 zXxr=eLhZcw@b&ip^V$&jy!{z$@3x80K(BA@#q0ff{aco$Y|r&QE!XAt{POa0Yr8&w z`SOMS{PR!x*T4Qn|Mj2$ML+%fPq%$P{M!%v5B<ZBKYX9SPJG|=1$SO&-ph*~wc|58 zR@C0wueM7-6Zk)Mz!uxPZS@@WGgh!l@K#{&f6L?bD`?9N%&&jf>-7fW_4(VkZ}j!+ z*W3A4Q2+7AAN1S*{zm`&=RfJ^|M;1H`st@nDf0RFlp-IAiA&;HZ{w3b`^>wEDMb|H zcWo7$YKZ}V2ee&$PJPY#JEPa?S+a1^5~E@1g&W3xW#A&D$3t?w{=G7DSsA*r_4-%Y z`s<fFW3LkAx8Hud$&g?E`xpB8=bvwK<ih~lxE&(UPJ#4f(0TwHktaOzy&Ne4C6WZK z26pmwvkg6OpkxWw^?$X$Zrkm;SpvHPxq^BH^7{M=;G#kO^6jCi*T+qUyaM~z|M``E z`Q?|J99cpBZon4je+qCX09+CQmdpN`&jKB|WI77c>|z_E&o@}NSYWQ_Q@Xg&3d|Ou zW&0J1V(Gn21@Ok$tl7ApUjkd|>Gf{~b_Mkc=*rd-*uVe&`%Pc}`s=SZK(DV?u$Q+4 zw*GP77{rl7z$bi8N=|4%dgnzQK{K@X9=v7^ctch^o|!a57b!8M)R5bd+^DZB*f)2h zXi(pP{pA7dU4m@DUcq}~?BDN<UH{hYHL!dtumLll2Iefl&}U}<f0kq5G3S62Q6d{p zZDULOYF5`W0x|Ogtm|v849viK>ws-MON*}ARvB9}^yYkUl^^T(x&iy;x&pXVP)oMH zG4>x1DYCNm`n+yi_f;$KX~32?&=bL&3KR!`?Ad)hXq&kbL*FF~DPi6Lgmfs6L(D+0 zND0vbo2}RNnI*FeDS>21aabAxyE61@^}W7lp{p^l|7<n(`g;AVjBWw@)9(9xeA<1_ zw#poqCUTM-$%GBE!A98L3-&VSDM~&dt<09yrjG9!yk%y#tUAruT7GCPy|FT*B#V?H zQhrp%mPwb}`)~L6Qd{o<Bhc5Y%~$2f`lzqhzjgoGcFj&c3)uC7^ND~CWz9(N7zK-- z<UyL+3H-c(($mZkv<ir<e~n&0n~n#z>WGkjF52;svSZcA8su7jAYiZ3LweO3*sn5! zSD>!n=?3mEUmKmhK6d%BxhCszn^Za-*h3D(8SY6kiNgaaXQX90(eY3K$c_zH0Bie! zBHJ2UyB-p(7Bef5YbLIag?2iM6)3&}lecGR>8-$C0bN;o1$K2uG_Y5@@20Q6ep|mt z*;#x0tH7=ryq?1awzczFEUg2jL1spUI~;shFFVJMWT3#Y2!p-uSjIu7V%f`fjs-Ap z^O>)I7X@&(g2WB97X@e*&x;21dj4(4t<5d)+aC4x2CzHGU+%zOzu(5F>;Cn4UV*tj zZ$V@8yjpp$fL&R8ZO0o+m)B>04HkLJJo2A^{CRu7ZvXb}emug@Fk>GfXvJPL@_-^q z01_^oksZ=)$m(QUUX;~R(;!CYEsBZDLoIZEb1~!wBOR^fg#bCy%lortW+6TF_FY@w z<j2w#Gp%4Ql~uJXQW;n1>&6w46@B~bZ!ZnoFU!@$z>E}`k{^oUMnFB{O&3px81f^O z51QS()3a{J?CEH!+pUC&YHNa5>Eykw2XY`qJYY8f?~*Z#9Wbu!EB)#UYzgYy^IbES z3h4T`vT|kq^`Z574Oq_r_AIDJ0c{44L7>OU1PLbsz#Hu@vK`wj512a*;t0UHoeBa? zk6L-sMY|p{s1$`s7O*7~*BX(c{b~v9`g)Thw{{({Us@kq|5b2nV9S~lBm$l;MJBR- zSsN}46ctdtgi9+$xa(0`+j0;b5@@3(htB#Thl4>@u&CE;xE$KTV_CN$*;#_wksf7p zH>9;!8MRBwYyjM)2y#PKP>c6P+kZ7HSsw`0kDr;x8GBY&%c%cEP&e$K0;+W$c6Ga3 z-f4l|(a#9Tgjm>eL6n{@$mNioz>^;m<O;l4TVMMu;|6FJY;G}jEp%d;MwdWd&nxw_ zWOfbgU4|@tSc;UChc*xDOnN*8X!t!jmMwsJBUWaV0MX~SfUeH(f>>!~orEy~tWx3~ zOIPqpfCGkR(H?r%tE(Zjv@CMcj9p#<%|dfa05{ue+I>B?x*{YBs9Lr@sIdpzjet7C z(j3YXHqYbA7G>{gy$rQE(#f8iq4wzn3QC-$G_@y1j3806bjQvT*z2!Z!CPeq$}$Qt zKiFGHksaJG`+EfLE_ox5tq+;W^uV3*u}1^OjK^IhVL9wdjz0DhDyAkTJeq`!B#Pcg zhP)_7_7G+P^?uQ&deV!Q8k_%Iz3u(DO+Od8Pl9$mZo9rWlUfCjjYrK(<6~b$ZT0S1 zS3O;Ux%tu+)a&a-3?R6yAif2U*Sn8h->)oR%UIXfo6X1d@8#Re{rTQ*_p!In<@$MS zi0rd9cH9YgPHQJ6i50k+-%kgas7Aw(CeRhp9m<d*mds$o(vyjl0)WlBc3L?et`yno zuy-j^*;ndsAweo*v-Gj0{E#DKZqL`9Ws7Fw4YWnFy9^K|W6NvfS$$^%yC5kr0)9)H zAix{R6Sp&f{gy<rth~<E2rRpd6oFF0@uSgpQ*vl6-Pm}`-Vs>n<Idib5=42{%{~qC znjV)LTZ4X+Ax!{UwY40HBb9{&^<3~cXoh5h&^HFP<y%_`ml8M}mb1aCRs(|5a6k&M z_jItx+QySrcOVfXtv$)oe8(x5&9;+zn`K+6pDQ~n!0+~;-X<8gNIk8CNj*f&doO{l z>RTLOFML>EN7Z(g?zUW!g!Hg9HcE;V1EAh^ef|OhyG~Aswq6=s?q4)8Rd863y;SWj zSY7I8OIMc~2-fXFMwH5^wNOOZdAr8m>OGbX*q5qptG2GXdan<;-u3UQn|F<U2kWKQ zhX|d$|E-#ObxmXqNqt@KEHz=Xxi#||J1axH4iKE*V(Carqp1UsdlI%q%p9<_xeYNd za6V9-2h`J+#zu@S0z+=v3CW?7F-2-{DMbX+HcVYXswBw66}fhd-pCG%k-vWV%F@o0 zt_P@K3~_Z9u%iNf9@*!Boh)eqf<{k2>kfk?i04PcV*!JYNDjCSSa=A`)xBsyFVf!o zcEj3Z<YOBW<h7%`0(0vm4S=tW?(T+$t&FU}D?nVdou@55t*t}5?;x;Cl)G`VgQ*cL z0fVFSc-3?v_#K9pKyT!ZW^xcH@+81@HC_|&DPNkmxjq_?+DO2#PMdG_)!nuVJk7!) zxGT!}=z_|+4}rJttH76_l^Pq2viBL=@Ub)c+5@$ht@M~$Ywbv5bCQkgc2ua35+=GG zN`YIWSIlij!4f%oTKd?FnEs%Bf0rB8mzG-mvc2!T>$<&e+vLHr0ak9iY3#aPde)nR zA-C1eupV=%_1K$crutm{Xra05zTK<7Zd!fooV!<E-InbdjBD(pGGuUjb|g2_%~>f@ zjN&Brbhe|X^)|DOW?&^TSXp<hN3_TR1bdr>b-J8|rPncYZ6g>MN)cr9$&910<@S`i zkQl{a<mMbwT5O%8NNex@eQ|a%qqE)2V`5w(kH`#*Wu0m`$i5y}t-wxa5miu!iu{|p z4THf8@Sja*BXB=7qc<+d=4dQ+Mke8KETV&4gf1=uY>Qy;-2thth!_d8NT%MNOLaRo zCuFG|O0c<n-dXxpS}b+gSlusK`gV?&Ys1)^n<7~I+A%h_7wS2TZPab>z;<ggn2fv8 zf!wIq;2`+(7<=fwQKZy)(Ne1i+PX>&U9i--BvN-HZ`yK2WHwUjV^zvpBugv*x@U8x z({-K67HqPx8;i~;!e{od_khhIU{6k}7<LRV7|eniFt8Oox}aCVA}Ijt{U$)84qyU& zX*+-l8j<{9os>aYNF7KD;K_3|HlOG;X68|WyQts~R_Ey{93p$q#vLD)BBQJf!D<A5 z9I&_6&c%=;T6PeU6jpKtyyqZzWL30;k}UfDo@i-g2RH98wSY;zFH(NUf~YDpL}0jx zETRlBJJ}(&wZY<buimT2?-E1?kE{G>rZ2nhQiG*TS=m|!i=sNPks~sAWNwo((+QeE z#&&JLOxr|<K+NqqC9do+f<jgfhWXwCyAA*oQe?O3bf73MYWIHks|DLu{qF^jqJ2|q zEuJ4T;-!@)LRMITVpqc2S$Ev}(9&k~k}^>mJq#Wvwe^U!h^q1|mxGNOYb!WJG9t^^ z7DMZKI!Lj#PN|b)?X9WqMFoppm0nG~SG!I#I0zVZ`DqtCYId&sD^t_0?Sst)+mcAN zUvx@c>}O&7-Gj-m-xe7Z%Keh9Wq_!IMZnTSjO}I%4>EJ4jWgw@5p#Q)LYiP`6fiQd z^$<J5c6GK>Ve27n-UX6~u~jBf+k#TtGMMS9dA;lIYZHi)4l30jO7QF&T(%QhouWT^ zynfVSX2S`ZnZPko&ykt#z}4MKa~F_k(OQ~~<ckJ1gE|nH+Ez&x)?k$EycO)2iJ5BS z39Zd&4n4uVJ1Z;3UL>0%y}dDP!_F!}v#hlq(gM^>trIkoxdHpiniE-2)#zvMuOXYZ z@JTauPGdhoUrzx&2nsFzYz-P9uOq1X=#HU5Icmr1+m7`=TI)3+i)$@z)KfDUFrb|e zMgs?s-Dk1u&Z5gh$7`mpZ50a_t)I09Z_Y2;>j48bSd6fih|8uJJL^RwJv?I9MOj1S zdLU4vQqm5rNLt8_pn<5I7Sa+!IUbUAt>rFsNh$%|eUVd;2@Sq8wo0jAKq5vm`3kt3 z=3N~Rsk>_m9Wl3@TSRJXnS>Dm>Ye59TAeks*WX>pFw%@&JCaPu7;eaM#?H163Yxqm ziO1X{Y;1uY1)XquF~r!S{e#6HD+K5cU}@)0U+V%VRlwA-9$@K^y(J@8pB$}LpzaKz z#@63&zauQRhE`R2<!J8Yu*S{=gPGe#6679OJ5U;$8Oaw<Y7{+6M*Gv-FgWCjkW<{$ zP17qF{Zg$3hn>6msV$Z^{OZT{Yqz~|MKp5@rfxL0c0%O-=ufe>>^uw{kcP3JqOoTg z+bjHcEIkgV+Xd`yFtrAF15DLXpaVjTJA-wc7@{Rz2CcE1z_Vdg<2a#%A@fTHRary$ zx^qPy{_{TkOX+1&?B6kR^}s#nLpfB<^+cJ+!)2=@cHV%N&a^i{jchr@!b(pU4J^^d zO17|ADFAxZ`eGm^1_e)qtT@Ery0EFfmaLv(=|+cN8%<tn7E!XZ&OFvOLPvKRT4fBE zI&@35-S;8ZuKv0RPPeGIVdB#nJ3CL_2s?Xiv#Z7yBSB*=b>Rh$tyRdxLGaieqrB*@ zL#S!P*wWof-%8)Qb4e_g_L$k4z#SDq0S(+`G&PH>PTX|r+7{K~Ti3eID{{XsPtw=} z0bxo@dr1_)!UUvA#=f(B>9TP$k}MsN5fF`Yl1{Sda#ZD%T;wD<f^ioyA<m++h;>_* zrR(uRL+il<i>L+JnOY9wm9-+$udbbEn?0(LOj>$r_hai=7gPtL*qQi|ZPXQR$29gp zkeHn=VZ^I8vx(Xr3C^*P2@HVj>St<aJ1wXah>Oa=0bwJ{*liQX>WaLOu?0&v$0Jsj zZGj8Z3^mjKv_3!Zt()Tzw)7pqx@$jMW2a1WYelRebzTA;ZOaH?<q=cF-cWidT@PIn z?Ng%>FNSYztt>#^x{9&}1iB)CrBSv~c-4}XJO4VNu`kuHu8xMR`H+r@WMy3&f@(oD zV-IQUBfyT>ItFjOyTqV&0>y3{a4&QaiC7u|8A%bSB@^2+!6JcGyO0!VK!4kJZHk>1 znNk-3?ybKKaCMsmp|tx{qUMoqf7#pY9YA&lk%ZZwrPU|5J9327sG0NZzDc%Dr%025 zqCIwz@d$Rqv$k9j0=G{sMPM7F99180rOMfIOX{5lSZj~hBGDq+p)@>{DBd>D(nB2@ zz1GjEM9YEo=n!M0*-1Ij*Dw%_*w@JncJ0>&i~KC^eP`rF2U)|W{@J)VA!A!|1Qar* z*jjIw0i|Z_ef0$;GbCeMEUibRZ?mK78J{kaZ6ym=Hg~jl6AQ>=HEZjAwYpG94|(1j zW6N|q-Bz=DfN-cDdxU)xSwru&TsGqlj#fXTK+$96&LKfghSJ8J%i;Ld466Ic7^EwK zuHB7AWfjo^qGj`m7f~6w&sVL%jGPcDOR5_pYDq3q8i?$oc2L&4#06v<<?$EoipXGE zNe;3`$sh*=YVSyj90(jorckgu1=C1Ik&MB+)?!7BTn*jE=l~4l2WgpM$d0D|LtS8) zRn(GZ-@YY{fb$?L^I#iGmZ(nqu<yh<8X3W4PK{t>775i>3x}i}tq++VK{F93+C@%G zValBBMTkrmmI0*)W{`~}Bamck?hjo=AIT2H;zr=Ov-i5ctc-b|dO^D>y);olB4TMB zC|XiP28;VR$Cqm(8I)rp<q7Mcv7S?ojFHz@2b7wz6?1oteH7T<VneMqXLGVi2w-)7 ztG2_M;>>kC5c^snH_B6o0E;X<Pj@Sa;{o^u%9tW&cS7<*xEbAcVC{ACL=4!y?Yo1w zG;+ey*cE(QH%qVs@L$Aw@i)*4Hb==ARv_wuP0ZRToU;0K6g%K@Sfgbu*%1xWHRXq9 zcYP<&rK;#XkRq-NqGbn?C-SZ#<%2qofP>OGDq4mJAaYlw*nfA;o{!0X+V9n+`Q<ih z7n*V%5liA`lQE_gxkij_pVwPmi=BFqTxJlDPlWX$1F{3vdLV{285~Iw#lk*|uWXFl z?Gj@f<Qp+`_g=dqT9!yA*F{ih+J*gjd8E9xv_Q;TUu${sXnPatMGqd>=20nuSDlk0 zdgAwJ=+@w{od%FmxoH4qYj6Ry<_6@487vZ>V-HCY_L4Ek;gHVAHhozyMcV2<0vW}W z{7{x50y!yd{Q&F2azst1q4hSTulr-+Tp`h%A*?MwAJ_+zEJ?ObOB4spn(@)R)X>2& zf=kQ!usm=ppk%N<3>mc_`qq7y4os*fgh3{fE%yV-ALNecQ9724spY3iR-n%;mLmd6 zE873Ja6=*qeEPg1Cyb7X=BtLlGg9Z#Gl5!Z*j^VXfzjv;q(@hx2?D~5Jdw7U_P2|X zXdzX>N67uq%&cTd!^|?#(m5pyv#$2jQbRr?MwiJL*{)@0>KMC94OKA3K#t72B8eGQ zho%5VV9w47VpMu*-A$wNL!A%GiU-iw7fW|M05Jh}mf1p5fbI&HM3Gac!<DWkrJ13Y zM)IT6)0@^s(n11P*LQdzCp8GSO}yNuP+KY{0=e;YV2_M?(K5wzM6#Jg_JD6Oy-~eq zF|w8(<P_1n+cY~vYtPtb0oh=56XdAysq>nzy#;7ldzS7-AeZ2l+khNtzzZzBJg{dp zb~=mbyw7Y0_M9bK!fawT<A{<%O1{A2D6`$tbu2QhKDX{#XXik%lLURI*MW-zv!ULz z8tI}v{$YL0{nCPm7b18DV|!`#5tjB`kkG46u(8_)$PjBEk|2+5Ok`vuQRdNVhw7?b z#+HRmz!f1RLAHSx7d9TKW;&y>={_?Rk|qSC2C5A~wb;**BF6L!W`$oc0wS#Y$YvKE zd17j5OQIOlnsscaN0*DLL$AtD>*~b_1WCz@B5FbwppQe4OMr?AbDH21$qb#P1Oo$h z`Jrt*5Px-YL<g1*c%Q1VM~j`1_Kt>qh0lp<J~Ae+A!B?a3LYVY8%04){ffoTDo`Y& z*4bldb3X#G;fhdoKICzh<I%CZ19HUB67=1eMefHjDs4{ixT6}I>~&%y-E2w<M@~et zW9GT@t2OHaO-*V{A_2M4jMgza0HM!Cfv6tGs5P}Q_L7WLIss3-SgGpFZ)x0ZyE+k# z8yy!IZB5Br;}x$0@U-f_fr%u&f~AP1#psyZD_z-VWgH3g_--_fBT)!=-J}?rQMo6| zPU@tEmJ~>y05*1A5Qnk%V<damVPv2PO0EM_<mUl)?pWM&MRYb1c-qJfv5K9hrAT@P z)pV(9z|w|&II5weX%tY0Agfa}pl|(Ww|o^0D1f%0B~Oew@+_}=_oV~tuah4Vm~sjP zOOnW$txzf)$rG))!JU#pLdFCzXfv*{2iZH7YzazH-TDy5i;Q~Zs+xTXfR>HvfhCyH zC=hpY#SvhGb9KOVK)%&Y^RnGaB(p=7)*V4_v-Gn7YcXoCFRC_(RZ!S6b8Cfqwbxbv zIj6A?%91d9Xt1|+Of<oyx9UJQIKi57LCiUVylm2)M|jq-ow@^%9>}XTw3;!B44<0% znWwtB|2&P4+P1NSp^2?K9QLkzeJ!ClT9SHNtqA8<27~p{mMh}O4{Na_#LV9CBRDWv z0#Jih47q~#9>@&J3tPNlQHDPawRfPgO~%%`y0s}74Z!7ym6a4BPiw1+ygEt-x+0)F zb#IHD5sR_Ifd)sVNL0&_vGT}Xc+?%csAYn*+Q^s#o56yZ9IR5MSuC&vo8!1&Bi#ab zqlFVvgjB+%|65pFi}1B2Pjo6A6*5T>N(ltKX>(B|m0NHnM|lj~Jr~#sRwic<K_pd* z%=TD7=KSgeZ5t*Oly<L`ofZPw0k$=SEHfE8^sOc1YT)m$mu4#CCGom4YKp0Kpr{ix z1m@VY0>^FJ1-T`NnK`Sm1G_Iw#v}#|WQK-WlSrb8+AYnEC!}nrHzOofG;mq1M+5E# zF0gem)7`OLLSQ3s1BPWaokAx|WSl1)5O_Z6ba(|#QZlH~GNb{nI{^wDZ8k5vpDICX zWG18F@zH)Vr5-va5qopI{6+-mtjzF^x9ma0=x8jY25H&De=xXL-ukp$GA4EJ?nEl- zQ?{Ut(U?OkHjw~DK_d!wv%y_+E+_VTv|H%t<BVF7^pp$0n|2568h|EKdmAzXTujK` zGRwtat#hM<)nsvNo3rntM$L4L?7b%@i=`VquBD3+J6;sn*<xgA0V+LC$dg8L#2N~g zd_G(&l1aL_K(;JCLz0-=9Cl*hco4Ft0KjyBsngKIARYv^=X}`jm*zdG33L|qTcbg@ zCfG%L0un`ozHv7?;4Tp8P^JL6Lgdeh&Cg`)OeT>Hi!TN=lLhqd)(n^$wIw5XbX}6n z`wVcC!1m9<6ftn4w>5(+5MMNCf!6LiiE4Whw^Y6wQ<}v(+fAE42iREv2fEtS=E3Z# z5uh!P+mj_oiZsVqH6tECPhe|8cAs!~*a#jwEAVkGN;B?DgH<vv0<x4H+PBtHWobou zyU$Lm6Ot<iQ$KB#dU`~9dh#55-aax?>?WY8pQ;Rv=0J-zk#a?d`U!O06|i&_pC0~% zs`H#tCai{-F-YNecP#Zgvjn-m4!WXHOEei+>hHL2yn0o89qjDD)2se_dhnP@n|qag zq7K&uG4;zpyE+``=ZwZifMAQ|GqM9DW;}m7&*Dql$%OnMBsqMELWGhrj(%q3(o|;F zm3fVvSr`q@)mGl(=<h&^l+&b0v<OlwQ`q&q$<f#p0J<2XVaQ=$kKxc9A~RBiy|g^Y z`h`+tO^XY_qLexTNrAj?FOY2Rpq3P|0Nh%R*yR8d;uM{r83#5$71$cUFzuc3ye+Sp z@UqdJM{O}SvimGYMBgbu`yqWj6I?1U{-V;`miw`%=e75(oi*fuSiz%Y@Jt<bUENEv zwd?@u`a08@6>b*|dsgt6oOp6bR~u`cPXan(Y?Gy<!Y4HP#dA`!4vXnhw85cSBVq-Q zz#$>ewo|O!dC`^>(LOeEI&2wo%g8#w=7X*X=dws6C9Z=RM)P&R>XeWcW*}*S9|dBO z#E4vw6hn)0PQ$k*rB~U=N_Ki%gBgJqonHde7}<hHk29I0VnpGpvo9+}3}B;-ozlzF zATLH68rav>bdbG3X-bM%8BGh!5%`glVkCChN}~g3BW$M}kFK2>ONsVtFvIPh8-j|! zP`X_o->~@7R1I1~_EP)g01;!(lkT_dq{zVuDO3BhOrBuw4xoebW0<k60MZ)#nw2Dq zrOC1x4ZRH6)?#6#z3Vn5OGxWzAStpe9%yNIwcRXhzb&v6wIqi$wo?oh$`8~bEa`xl z7l1zq6scDEA=zQoZn)<MQX?HOf=b6GNdnsU4#)$<MFxxpP(ASSK<fP6fZe3ZBUdB} zE<Jz)Pd&rfkd47MvXUv5ZjP8+4vES-B~~D)EI#6RMFyz7wS{K^T4x?zjjb|`+hMP- zuM84n5u3jourq1&As^eT40OP%FQye-veyQH%&QjcSRHl*CSrT(j|>}oV0S%e1I!G@ zS(<=GAhvWhk}V>&+|*Y)b=L0-?9AW-BY4bAxj;rqE3At~Ky}WW0=SHa2iUo(K{h79 zoT?DC0FAa;NfwZ-@hm`!>^_u$QRi@h3rq?mNydOZGE=G{H&Tn{xCKvROl{R@LvI^( zB**_YItF)xh#kMXDH{M%hCO)$0MF=nR&EvuhTU2b<g}16dz0zn2seiYW@@q?Xja)% zYDJPWt-|4AhQ8(un3G^fQpDBWhF?uit%xaQvO3!c3RAwfv8`l-KV7J${c2KU5H0<T z5;Qs$Zs}vq(5OsRGqf`d?Cqq8r?Z3ckp)b?SuEKBx7|rF18}5~AxIE#z4Uox*&PJ& zaC+X#1R{{C@t7T;YYnvpXvN&k00IPf0MP6>Ml1Q!wJQMKqreW=pfU8fHKC=;%8?Wy zW7a2QbPj5(!N<S~bXmJi{yqi7=6aJ>Ijz>u$oivp7#D1d0NoTZEjF9$;1MK(IMCCG zx#4mA491Rzkwx{-qhlU*CEw$JHpIZDM;^H+`-KBjpLq;>6vPe?U29I&lkB=&7dC0T zkL-zu_B9&G9&wIzIR`R>lTzb(!J|=U9R-`&X&KV;#bWceXp7Ay_biXxa!>Y)!Gw|^ zRzPXZRpL4+;23w5y4e9ilxJLLJ(vJZZMK~=hmp~M@T|Zw#n?zU2c03D=h^@)oM4jt zsnM*VVdlh?mfl95dUI}PN`okEK2kL0v3MjOvN9u+K?D|Fd;ZM@K@!6VE-4WpdRjVS z`e9&)&ImiJgbn!Hp)7H-n8gVs%>dH{es0F7IG{|}g8|!fpqD#of!gVkQq&1hX3_GZ z_3_C-5c<`Ii&6%I$Pr){sa<DucDM`&wJYU%ZIP^jEE@q5eSZ`PI+;fk=)rLX*^wC_ zYrVWmtR*U}dR*HSW9#jm{$Aj<L!)8Pb<VJIG}+`?z)m|O*4)=<o<9U)%PzF$ympg0 z3HENk7n`!gW7samZe<~(?Z$|D&a_(v?_#hm@|7*dcB=ErwrCX09(!3uHNF&$N=N4* zgSp3not%VnwoR1GAw%zS0DL(AwI@ULk1VE#>-I;}6YGm*O`nF^QD6H`R=aiQ0s=u4 zTza2}Kqg;X`>lWu)lt7?a43FWI*YMWGq5^yjaX|lW+X^@MFS{LxLd9dEvFY2K><K2 zHocdoW^{LkwJiom`dDjX%f17(9)_kaP2m!_D|Fh}m@O49t>Mgp?OA;_w>u?86cFL0 zl^u|i`zRqxP>`3><7&bkb1pweD>LXk79h=KJ3K9)2o~)&cO%)=<GKSNAa`;D%M!h^ zu$yGbOiAVyJUOZK==i5Hc9d2}y`0DyQs(R@RI;kAIV4BWE!;`sSmmlbTizOJ>1g}F zezt&oXXmE4tL+eryM}%D`&caP0o?<5GC3n&x1^uY*oC}O)4&Ny&lDB0x4RvToOh&) zr$x!r&{le0YierKcvjGr`MhwQN2@c|(vL0gU66c2WH&Pd(};GS(b>6m9(kOx2U$5v z@|0jSjm6$YCkMz`nb*JIW&u`KPe-hr@wz*AM^1+0bSRGYKYlwV;Do^T4dXIFHa6J1 z)5oZS&(qlha)lDCehAo6iE0Y?R>0YuTY#ACrKQ=>*;xRyl>~C^y1g2X{k0@ro$W{? zwvM-s$pDz_i65J#OcG%Bz!;8vLC%YD?so%r2z*0VV~N1-I_u_z2H-X|cn0LCMglSM zk_53Mlgw>~!{KUf$8{>kWIt>;QEu|Y(%7QI@3#!A20N#nd+-LJ&->U1fju>|lm~u` zMVtiAa2v1VIPJr2mh<AcF;HS<_ZgsSk6$?TyN>ANV{@gxO%YTY*rpumms_z`G6*Nz z@vOfDix06fV0>$B$utX(vNk(w-AuBv%gzxK2aX60xFRL6_ufZ}bZ!6>Cu>P8z_~%E zH<=FdoV||Vfm~{K063R%M}Vz=BS&@=XYTJbm>oS$PO`<-#+Jr*?h<A#NRaJ(F0eI# z2N)cdz9!iu1f}JDp8#?%Ky^Xe7FMxbvoZzxgtT$BwDtdc{8wzxIU_}qa)m8vl-1Wp zUHQ1ij>J)Bt`PObM)kSZ8H|g?k<=*@;I^`DUND+wP){p6|2G-|G5*}WiV*^B=KId- z;G@Tf8k-jmEBQtPM31$T_1&(cVlBrp3fd&t$w|wntNq&V-IN5&It_E4@Imd|Kl?!< zfuUTc3zAHObCRvo`Z^&~rld%Ai4Mrxfz*f=J2kV1&iOMk#tIN2lVt<S_<2bOiZky! zoy+m>AiQla>BXSp(9++bG|?7bP^y}FKW_JBeC3hEjw3ZfkQ=ooGj?Ibj8S#saVB*- z(a3wWYzYE&Mi#gdr2U=EcHfQNhXCmfHXuAzgA3lI-REUKqmoum9Ai$?F!CHEmD0~z zqF9XWl^>uxWn#1olpsOM+>$6(x}0oQrzmhdPl^o4kuac)((nmM5;-1}WlGssZT7om z&`$%t(;*_@Mk^abP-k3?V4{ACM!F=WN2VN=j44B&BSj(rM^iD32B1+VaO%L_i|*Y4 zY*t?&sLqff4*OA7!ZgPku1D6@utwCJ{WyPAO_H%kf$k=8h&W*C==PQYs~c!Wj2#U! zFn*)-F<uN1C8N+Wd$7l0Zh)eW<Yfsn*DD%+mIw|rZ0xjoKn$%KW)94CY(P&^q`|%I z%*vDEfGVBrL5{~P&@;=9%(SJtZX)W~>|TRRDm+6Dq3p;2+49V@!K-(?{xPPPoF1to z$x0H=yC}mJp~L3**vIz?8MOj$Qro8;i>#|LTTB(5kG`YF^a7^fmu>C|j@F))CsXdp z2*c0Hi~~%Z-PZrVI2D6HRvrQW5r+0;$An*<4jfMfb~H<CCa9F{%43c0v?hN5o$92C zqfAB_5PNqi<nKB_9R|BmxI|#J+mhACXxn<y>xr6qu(0VIU{6XB%fdUt+7GKM$ZQ7d z+*G-q^3AhAkG6UGeKe43wk=Z~@{qi^8g4~a7kh3;^x0=fpYx<ha?<w<xHD_lNM^Ps zs6q830gIn<%l24%sH5R|P)0jsioJux3z1WXIuaxzrcKC_=P)+macH3&i6lst#WQmO zsw6^`BtnwsETA7fCxPS&9bs&X0aXVi8mQQt4K8QcI5$dtg0Ta@ht^=y3iJx8ELH~R z_w}_2r2ey_bJ+TNL^EUkoXO6Xk^dhEA~WZpOh-}IFm352((9uPKFru)d!g*S6a#^z zS#RPU=Q01$M9}E@W<iK%ts3o|s19T>@Ed05BU<|1?Y@y9GNH9cw6|*ydMtC~bu#Ur zW^%V9`U#e%tuqzfu>F?#-9|w@YT*rZk~0~*#cRn2ktxkSAW3Ed%?xnei<~%b>YUvy zQB0iuZb_Yd#{V~D+^D7_lR5mbj7|2~MWfx0!AN^YIy$^?2|Zp0fzVvE@~A_$*cnVA zMw#g)ypC<gCxeVV^t&Wo4x)i{coO(LC}+;m*q$80faj>q2vdiFXhx6E0)LqSNUxhI zVW-W=i}3ha-8{;~vjY#ZReptXbC!%U_7TS<<#h*49XcddFz8&+VQpzLHIvtFG}ukc ztmOZTJf~!aiH*rPc@pR;9nD7=JCGdVDq<116>`I1b5xT@tC-Dp5?2cO>`Zi$Oc?Cc z(=Nq~W}cBGvz~W!9>~};tnKM?az?r*E|O;jW_03+7UVQwICongNlHz~C-}PvCLZYw zR_qcowKa`$hP?y!^;8FkQe+UQgE~86O1M%&)(VWI%!rlfG4Y`wbreh^=ZP%0M8brg z;dU5oO-Jt}hg^{e*c8v~l#?WMUt?_~z?@+B^hF06nQ2~sj#!{Wam0bn8hwA4g(GPp zre)|l%aSOn8U*|Kj6IRW895IgvD0rHxqx+pbT_1PaWqhU>-R^eY8dPASqqQe_aWKy zbYM@gdG;KmUU;{SlVCmuz<nh9n*x3Y<Y$6<#>zWeg767aWXd_QWP{P+&9)h)*5Dlk z!wjP}|BcZa_lfvoG{C0G|7UodwcV@AJHfqqjue^oy9ceoY@nI}^Q?wH6;v~TLW`Kr zXy79tKO?#FmJgG$lhVOuZE*2ZjE(?$gwY2R3`cIyVJA+KNNfEK$gcDqZHkf0VMdOe zm>Iv^1hyK8I~oYO9l-Us@yB|M4gsFj<5}h%0z<ZA4Kn3$Cmm(pK`p(VGhGBX#o%XZ z?mJ^2bT~#Pi$5XIEC<;82q1@Ki3dt*P5c>Yagcd)ZD(q&^V&IE^>F~$_5al^!k4%1 zJn&9?;+~W-ewCt^;T`NeM?jwi+M(lXmEnk#nsGM*Cu2AujAFmD9g=3^cRpazg{)2P zn8^slCiA+?NR(!+NuZ1{S-MkuZF%6gv9{}!d*XLgzfH?4N!?6zAmK9F0seNx-8fs1 zXDviP*JZL(3;|+<;j`Pb3|s~}q7~H5vaL6j*f~=voG(jG12zp0Lhxjb*#NQD5r-zc z8>nBrJig*G4d%vKNVex5w1@9RM?K}U<_D?ky?<0-r@?(R`7<F~j_Ua-DRkEMB-_q1 z@$fm%)WpvkLgx9{!#X<&F7INFwDI;^pqK^5?8P6qK<7GbdE?(Hqo*ms<}?E8kxmdW zcC)h8=)>p`ot`?H2s#>^rZ4^=FlN|z7;uANn-1>IN}N2Cr3Zk`BP^T*Bp+h=GXQ?n zq4@~xH~`i&0DT(!&VYJ`-9wFiKyS}TnG}0}0I747b%*zVRH^Xn>CK)NJe~mTrv#t_ zcabwXLIlFM0P-}L$AMa&#=dX$_}d`x3eTZ?RLY=?o8@$7*!k>srvp9PW)jSU?U;_9 z^Qe?K+IdESZGby%u+M1qd$#NeEItDAvw?m9$ftmLQX9{>7*l{gdPf)rHlFHin8at8 zf231nfja`;X`qjQ{TPtT2$-J+=#L;%GCuZM%zFe-GoTq|EqXG0J-rjFA!)<E$4KYP z|BmD7@}o>YD@D%G+(%jVtWGl1QAU{d2%u&<<*Zbo86f4@e+txxnf@rS&tmU0L4FkI zvtVzu0H1hQIRnIJ0C_feJe#F6_kc5iO=q3M`0__VKFhGvjLYYO_Y5XJ1jJ{7c^Yep zHW&J!52nA`qtNH$?S3o4*oSLk&tTSPNrW?X?<5;9naK^$U}fVxx$Ap|<T-vP;4^{E zPXXW)LH;bT9|_#%I?>$u2f@bg3gWkxHK%Fp4+8RMf$}i0&g=*$e&(C#qxaD0ZvpHl zv+I<EDo+IDQ$cjLM0zHOXC&753hXDaE5Gaa`~Et}u~=%TT;Y^Y{C<Ib`i10=`5*cq zwg?~noyured5?>6`Mm!BUmxWOUFGBaUp^pXA9e5eL-vl3cNcl?@AS6vgTG5D@?CMq zTi=Sx2mN33JO2+a9~-FUJu&myl|RHap8Fr(82g7GfB2M~pO3%P<NpL009r=Zt$joe QQ~&?~07*qoM6N<$f&<h~%m4rY literal 0 HcmV?d00001 diff --git a/_source/plugins/uicolor/yui/assets/picker_thumb.png b/_source/plugins/uicolor/yui/assets/picker_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..78445a2fe060047216b3692980ebabfb0683c3c6 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s3?%0jwTl2LmUKs7M+Sy#H?H_c7y<c`C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$ZGeh61AIbUf%JbcD6UwV4CFAE1o;L3 z|Icv!6fe*~20c#~$B>F!NeM|wNi2*CXBkqA8W@y2&T>3yVv%g*IK)!uk)}MmImzx& dTmu6$gLVMJ@>Lg{{{wY0c)I$ztaD0e0szdFI<Ei# literal 0 HcmV?d00001 diff --git a/_source/plugins/uicolor/yui/assets/yui.css b/_source/plugins/uicolor/yui/assets/yui.css new file mode 100644 index 0000000..e7dbd79 --- /dev/null +++ b/_source/plugins/uicolor/yui/assets/yui.css @@ -0,0 +1,15 @@ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;} + +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +.cke_uicolor_picker .yui-picker-panel{background:#e3e3e3;border-color:#888;}.cke_uicolor_picker .yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.cke_uicolor_picker .yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.cke_uicolor_picker .yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.cke_uicolor_picker .yui-picker{position:relative;}.cke_uicolor_picker .yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.cke_uicolor_picker .yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.cke_uicolor_picker .yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .cke_uicolor_picker .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale');}.cke_uicolor_picker .yui-picker-mask{position:absolute;z-index:1;top:0;left:0;}.cke_uicolor_picker .yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.cke_uicolor_picker .yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.cke_uicolor_picker .yui-picker-controls .hd{background:transparent;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls .bd{height:100px;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.cke_uicolor_picker .yui-picker-controls li{padding:2px;list-style:none;margin:0;}.cke_uicolor_picker .yui-picker-controls input{font-size:.85em;width:2.4em;}.cke_uicolor_picker .yui-picker-hex-controls{clear:both;padding:2px;}.cke_uicolor_picker .yui-picker-hex-controls input{width:4.6em;}.cke_uicolor_picker .yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;} diff --git a/_source/plugins/uicolor/yui/yui.js b/_source/plugins/uicolor/yui/yui.js new file mode 100644 index 0000000..714d141 --- /dev/null +++ b/_source/plugins/uicolor/yui/yui.js @@ -0,0 +1,71 @@ +/*jsl:ignoreall*/ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueOf"],D={isArray:function(G){return A.toString.apply(G)===F;},isBoolean:function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error("Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.length>1){N.pop();}N.push("}");}return N.join("");},substitute:function(V,H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if(!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1796"});(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},get:function(y){var AA,Y,z,x,G;if(y){if(y[l]||y.item){return y;}if(typeof y==="string"){AA=y;y=K.getElementById(y);if(y&&y.id===AA){return y;}else{if(y&&K.all){y=null;Y=K.all[AA];for(x=0,G=Y.length;x<G;++x){if(Y[x].id===AA){return Y[x];}}}}return y;}if(y.DOM_EVENTS){y=y.get("element");}if("length" in y){z=[];for(x=0,G=y.length;x<G;++x){z[z.length]=E.Dom.get(y[x]);}return z;}return y;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];G=S(AF[v],q);x=S(AF[v],R);if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC==c)){if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G}); +},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,Y=K[t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibling){return G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;Y.setAttribute(G,x);},getAttribute:function(Y,G){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;return Y.getAttribute(G);},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B); +}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1796"});YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:function(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,YAHOO.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]=a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{try{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.removeListener(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN]; +I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready();M._tryPreloadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=YAHOO.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O[N.TYPE],O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener; +/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */ +if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E); +}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1796"});YAHOO.register("yahoo-dom-event", YAHOO, {version: "2.7.0", build: "1796"}); +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue; +}if(!this.isOverTarget(P,d,this.mode,U)){c.outEvts.push(d);}I[S]=true;delete this.dragOvers[S];}for(var R in a.groups){if("string"!=typeof R){continue;}for(S in this.ids[R]){var G=this.ids[R][S];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=a){if(this.isOverTarget(P,G,this.mode,U)){D[R]=true;if(L){c.dropEvts.push(G);}else{if(!I[G.id]){c.enterEvts.push(G);}else{c.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:c.outEvts,enter:c.enterEvts,over:c.overEvts,drop:c.dropEvts,point:P,draggedRegion:U,sourceRegion:this.locationCache[a.id],validDrop:L};for(var C in D){Q.push(C);}if(L&&!c.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(V);a.fireEvent("invalidDropEvent",{e:V});}}for(S=0;S<E.length;S++){var Y=null;if(c[E[S]+"Evts"]){Y=c[E[S]+"Evts"];}if(Y&&Y.length){var H=E[S].charAt(0).toUpperCase()+E[S].substr(1),X="onDrag"+H,J="b4Drag"+H,O="drag"+H+"Event",W="drag"+H;if(this.mode){if(a.events[J]){a[J](V,Y,Q);a.fireEvent(J+"Event",{event:V,info:Y,group:Q});}if(a.events[W]){a[X](V,Y,Q);a.fireEvent(O,{event:V,info:Y,group:Q});}}else{for(var Z=0,T=Y.length;Z<T;++Z){if(a.events[J]){a[J](V,Y[Z].id,Q[0]);a.fireEvent(J+"Event",{event:V,info:Y[Z].id,group:Q[0]});}if(a.events[W]){a[X](V,Y[Z].id,Q[0]);a.fireEvent(O,{event:V,info:Y[Z].id,group:Q[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLocation:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.getEl(),K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C.el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(C,E){var D=YAHOO.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id); +}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this.config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||(E===false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D); +}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1796"});/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +(function(){var B=YAHOO.util.Dom.getXY,A=YAHOO.util.Event,D=Array.prototype.slice;function C(G,E,F,H){C.ANIM_AVAIL=(!YAHOO.lang.isUndefined(YAHOO.util.Anim));if(G){this.init(G,E,true);this.initSlider(H);this.initThumb(F);}}YAHOO.lang.augmentObject(C,{getHorizSlider:function(F,G,I,H,E){return new C(F,F,new YAHOO.widget.SliderThumb(G,F,I,H,0,0,E),"horiz");},getVertSlider:function(G,H,E,I,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,0,0,E,I,F),"vert");},getSliderRegion:function(G,H,J,I,E,K,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,J,I,E,K,F),"region");},SOURCE_UI_EVENT:1,SOURCE_SET_VALUE:2,SOURCE_KEY_EVENT:3,ANIM_AVAIL:false},true);YAHOO.extend(C,YAHOO.util.DragDrop,{_mouseDown:false,dragOnly:true,initSlider:function(E){this.type=E;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=C.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=true;this.keyIncrement=20;this.moveComplete=true;this.animationDuration=0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0];},initThumb:function(F){var E=this;this.thumb=F;F.cacheBetweenDrags=true;if(F._isHoriz&&F.xTicks&&F.xTicks.length){this.tickPause=Math.round(360/F.xTicks.length);}else{if(F.yTicks&&F.yTicks.length){this.tickPause=Math.round(360/F.yTicks.length);}}F.onAvailable=function(){return E.setStartSliderState();};F.onMouseDown=function(){E._mouseDown=true;return E.focus();};F.startDrag=function(){E._slideStart();};F.onDrag=function(){E.fireEvents(true);};F.onMouseUp=function(){E.thumbMouseUp();};},onAvailable:function(){this._bindKeyEvents();},_bindKeyEvents:function(){A.on(this.id,"keydown",this.handleKeyDown,this,true);A.on(this.id,"keypress",this.handleKeyPress,this,true);},handleKeyPress:function(F){if(this.enableKeys){var E=A.getCharCode(F);switch(E){case 37:case 38:case 39:case 40:case 36:case 35:A.preventDefault(F);break;default:}}},handleKeyDown:function(J){if(this.enableKeys){var G=A.getCharCode(J),F=this.thumb,H=this.getXValue(),E=this.getYValue(),I=true;switch(G){case 37:H-=this.keyIncrement;break;case 38:E-=this.keyIncrement;break;case 39:H+=this.keyIncrement;break;case 40:E+=this.keyIncrement;break;case 36:H=F.leftConstraint;E=F.topConstraint;break;case 35:H=F.rightConstraint;E=F.bottomConstraint;break;default:I=false;}if(I){if(F._isRegion){this._setRegionValue(C.SOURCE_KEY_EVENT,H,E,true);}else{this._setValue(C.SOURCE_KEY_EVENT,(F._isHoriz?H:E),true);}A.stopEvent(J);}}},setStartSliderState:function(){this.setThumbCenterPoint();this.baselinePos=B(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion){if(this.deferredSetRegionValue){this._setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null;}else{this.setRegionValue(0,0,true,true,true);}}else{if(this.deferredSetValue){this._setValue.apply(this,this.deferredSetValue);this.deferredSetValue=null;}else{this.setValue(0,true,true,true);}}},setThumbCenterPoint:function(){var E=this.thumb.getEl();if(E){this.thumbCenterPoint={x:parseInt(E.offsetWidth/2,10),y:parseInt(E.offsetHeight/2,10)};}},lock:function(){this.thumb.lock();this.locked=true;},unlock:function(){this.thumb.unlock();this.locked=false;},thumbMouseUp:function(){this._mouseDown=false;if(!this.isLocked()&&!this.moveComplete){this.endMove();}},onMouseUp:function(){this._mouseDown=false;if(this.backgroundEnabled&&!this.isLocked()&&!this.moveComplete){this.endMove();}},getThumb:function(){return this.thumb;},focus:function(){this.valueChangeSource=C.SOURCE_UI_EVENT;var E=this.getEl();if(E.focus){try{E.focus();}catch(F){}}this.verifyOffset();return !this.isLocked();},onChange:function(E,F){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue();},getXValue:function(){return this.thumb.getXValue();},getYValue:function(){return this.thumb.getYValue();},setValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setValue.apply(this,E);},_setValue:function(I,L,G,H,E){var F=this.thumb,K,J;if(!F.available){this.deferredSetValue=arguments;return false;}if(this.isLocked()&&!H){return false;}if(isNaN(L)){return false;}if(F._isRegion){return false;}this._silent=E;this.valueChangeSource=I||C.SOURCE_SET_VALUE;F.lastOffset=[L,L];this.verifyOffset(true);this._slideStart();if(F._isHoriz){K=F.initPageX+L+this.thumbCenterPoint.x;this.moveThumb(K,F.initPageY,G);}else{J=F.initPageY+L+this.thumbCenterPoint.y;this.moveThumb(F.initPageX,J,G);}return true;},setRegionValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setRegionValue.apply(this,E);},_setRegionValue:function(F,J,H,I,G,K){var L=this.thumb,E,M;if(!L.available){this.deferredSetRegionValue=arguments;return false;}if(this.isLocked()&&!G){return false;}if(isNaN(J)){return false;}if(!L._isRegion){return false;}this._silent=K;this.valueChangeSource=F||C.SOURCE_SET_VALUE;L.lastOffset=[J,H];this.verifyOffset(true);this._slideStart();E=L.initPageX+J+this.thumbCenterPoint.x;M=L.initPageY+H+this.thumbCenterPoint.y;this.moveThumb(E,M,I);return true;},verifyOffset:function(F){var G=B(this.getEl()),E=this.thumb;if(!this.thumbCenterPoint||!this.thumbCenterPoint.x){this.setThumbCenterPoint();}if(G){if(G[0]!=this.baselinePos[0]||G[1]!=this.baselinePos[1]){this.setInitPosition();this.baselinePos=G;E.initPageX=this.initPageX+E.startOffset[0];E.initPageY=this.initPageY+E.startOffset[1];E.deltaSetXY=null;this.resetThumbConstraints();return false;}}return true;},moveThumb:function(K,J,I,G){var L=this.thumb,M=this,F,E,H;if(!L.available){return;}L.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);E=L.getTargetCoord(K,J);F=[Math.round(E.x),Math.round(E.y)];if(this.animate&&L._graduated&&!I){this.lock();this.curCoord=B(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){M.moveOneTick(F); +},this.tickPause);}else{if(this.animate&&C.ANIM_AVAIL&&!I){this.lock();H=new YAHOO.util.Motion(L.id,{points:{to:F}},this.animationDuration,YAHOO.util.Easing.easeOut);H.onComplete.subscribe(function(){M.unlock();if(!M._mouseDown){M.endMove();}});H.animate();}else{L.setDragElPos(K,J);if(!G&&!this._mouseDown){this.endMove();}}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart();this.fireEvent("slideStart");}this._sliding=true;}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var E=this._silent;this._sliding=false;this._silent=false;this.moveComplete=false;if(!E){this.onSlideEnd();this.fireEvent("slideEnd");}}},moveOneTick:function(F){var H=this.thumb,G=this,I=null,E,J;if(H._isRegion){I=this._getNextX(this.curCoord,F);E=(I!==null)?I[0]:this.curCoord[0];I=this._getNextY(this.curCoord,F);J=(I!==null)?I[1]:this.curCoord[1];I=E!==this.curCoord[0]||J!==this.curCoord[1]?[E,J]:null;}else{if(H._isHoriz){I=this._getNextX(this.curCoord,F);}else{I=this._getNextY(this.curCoord,F);}}if(I){this.curCoord=I;this.thumb.alignElWithMouse(H.getEl(),I[0]+this.thumbCenterPoint.x,I[1]+this.thumbCenterPoint.y);if(!(I[0]==F[0]&&I[1]==F[1])){setTimeout(function(){G.moveOneTick(F);},this.tickPause);}else{this.unlock();if(!this._mouseDown){this.endMove();}}}else{this.unlock();if(!this._mouseDown){this.endMove();}}},_getNextX:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[0]>F[0]){J=H.tickSize-this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]-J,E[1]);I=[G.x,G.y];}else{if(E[0]<F[0]){J=H.tickSize+this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]+J,E[1]);I=[G.x,G.y];}else{}}return I;},_getNextY:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[1]>F[1]){J=H.tickSize-this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]-J);I=[G.x,G.y];}else{if(E[1]<F[1]){J=H.tickSize+this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]+J);I=[G.x,G.y];}else{}}return I;},b4MouseDown:function(E){if(!this.backgroundEnabled){return false;}this.thumb.autoOffset();this.resetThumbConstraints();},onMouseDown:function(F){if(!this.backgroundEnabled||this.isLocked()){return false;}this._mouseDown=true;var E=A.getPageX(F),G=A.getPageY(F);this.focus();this._slideStart();this.moveThumb(E,G);},onDrag:function(F){if(this.backgroundEnabled&&!this.isLocked()){var E=A.getPageX(F),G=A.getPageY(F);this.moveThumb(E,G,true,true);this.fireEvents();}},endMove:function(){this.unlock();this.fireEvents();this.moveComplete=true;this._slideEnd();},resetThumbConstraints:function(){var E=this.thumb;E.setXConstraint(E.leftConstraint,E.rightConstraint,E.xTickSize);E.setYConstraint(E.topConstraint,E.bottomConstraint,E.xTickSize);},fireEvents:function(G){var F=this.thumb,I,H,E;if(!G){F.cachePosition();}if(!this.isLocked()){if(F._isRegion){I=F.getXValue();H=F.getYValue();if(I!=this.previousX||H!=this.previousY){if(!this._silent){this.onChange(I,H);this.fireEvent("change",{x:I,y:H});}}this.previousX=I;this.previousY=H;}else{E=F.getValue();if(E!=this.previousVal){if(!this._silent){this.onChange(E);this.fireEvent("change",E);}}this.previousVal=E;}}},toString:function(){return("Slider ("+this.type+") "+this.id);}});YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);YAHOO.widget.Slider=C;})();YAHOO.widget.SliderThumb=function(G,B,E,D,A,F,C){if(G){YAHOO.widget.SliderThumb.superclass.constructor.call(this,G,B);this.parentElId=B;}this.isTarget=false;this.tickSize=C;this.maintainOffset=true;this.initSlider(E,D,A,F,C);this.scroll=false;};YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:true,_isHoriz:false,_prevVal:0,_graduated:false,getOffsetFromParent0:function(C){var A=YAHOO.util.Dom.getXY(this.getEl()),B=C||YAHOO.util.Dom.getXY(this.parentElId);return[(A[0]-B[0]),(A[1]-B[1])];},getOffsetFromParent:function(H){var A=this.getEl(),E,I,F,B,K,D,C,J,G;if(!this.deltaOffset){I=YAHOO.util.Dom.getXY(A);F=H||YAHOO.util.Dom.getXY(this.parentElId);E=[(I[0]-F[0]),(I[1]-F[1])];B=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);K=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);D=B-E[0];C=K-E[1];if(isNaN(D)||isNaN(C)){}else{this.deltaOffset=[D,C];}}else{J=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);G=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);E=[J+this.deltaOffset[0],G+this.deltaOffset[1]];}return E;},initSlider:function(D,C,A,E,B){this.initLeft=D;this.initRight=C;this.initUp=A;this.initDown=E;this.setXConstraint(D,C,B);this.setYConstraint(A,E,B);if(B&&B>1){this._graduated=true;}this._isHoriz=(D||C);this._isVert=(A||E);this._isRegion=(this._isHoriz&&this._isVert);},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this);this.tickSize=0;this._graduated=false;},getValue:function(){return(this._isHoriz)?this.getXValue():this.getYValue();},getXValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[0])){this.lastOffset=A;return(A[0]-this.startOffset[0]);}else{return(this.lastOffset[0]-this.startOffset[0]);}},getYValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[1])){this.lastOffset=A;return(A[1]-this.startOffset[1]);}else{return(this.lastOffset[1]-this.startOffset[1]);}},toString:function(){return"SliderThumb "+this.id;},onChange:function(A,B){}});(function(){var A=YAHOO.util.Event,B=YAHOO.widget;function C(I,F,H,D){var G=this,J={min:false,max:false},E,K;this.minSlider=I;this.maxSlider=F;this.activeSlider=I;this.isHoriz=I.thumb._isHoriz;E=this.minSlider.thumb.onMouseDown;K=this.maxSlider.thumb.onMouseDown;this.minSlider.thumb.onMouseDown=function(){G.activeSlider=G.minSlider;E.apply(this,arguments);};this.maxSlider.thumb.onMouseDown=function(){G.activeSlider=G.maxSlider;K.apply(this,arguments);};this.minSlider.thumb.onAvailable=function(){I.setStartSliderState();J.min=true;if(J.max){G.fireEvent("ready",G);}};this.maxSlider.thumb.onAvailable=function(){F.setStartSliderState();J.max=true;if(J.min){G.fireEvent("ready",G);}};I.onMouseDown=F.onMouseDown=function(L){return this.backgroundEnabled&&G._handleMouseDown(L); +};I.onDrag=F.onDrag=function(L){G._handleDrag(L);};I.onMouseUp=F.onMouseUp=function(L){G._handleMouseUp(L);};I._bindKeyEvents=function(){G._bindKeyEvents(this);};F._bindKeyEvents=function(){};I.subscribe("change",this._handleMinChange,I,this);I.subscribe("slideStart",this._handleSlideStart,I,this);I.subscribe("slideEnd",this._handleSlideEnd,I,this);F.subscribe("change",this._handleMaxChange,F,this);F.subscribe("slideStart",this._handleSlideStart,F,this);F.subscribe("slideEnd",this._handleSlideEnd,F,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);D=YAHOO.lang.isArray(D)?D:[0,H];D[0]=Math.min(Math.max(parseInt(D[0],10)|0,0),H);D[1]=Math.max(Math.min(parseInt(D[1],10)|0,H),0);if(D[0]>D[1]){D.splice(0,2,D[1],D[0]);}this.minVal=D[0];this.maxVal=D[1];this.minSlider.setValue(this.minVal,true,true,true);this.maxSlider.setValue(this.maxVal,true,true,true);}C.prototype={minVal:-1,maxVal:-1,minRange:0,_handleSlideStart:function(E,D){this.fireEvent("slideStart",D);},_handleSlideEnd:function(E,D){this.fireEvent("slideEnd",D);},_handleDrag:function(D){B.Slider.prototype.onDrag.call(this.activeSlider,D);},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue();},_handleMaxChange:function(){this.activeSlider=this.maxSlider;this.updateValue();},_bindKeyEvents:function(D){A.on(D.id,"keydown",this._handleKeyDown,this,true);A.on(D.id,"keypress",this._handleKeyPress,this,true);},_handleKeyDown:function(D){this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);},_handleKeyPress:function(D){this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);},setValues:function(H,K,I,E,J){var F=this.minSlider,M=this.maxSlider,D=F.thumb,L=M.thumb,N=this,G={min:false,max:false};if(D._isHoriz){D.setXConstraint(D.leftConstraint,L.rightConstraint,D.tickSize);L.setXConstraint(D.leftConstraint,L.rightConstraint,L.tickSize);}else{D.setYConstraint(D.topConstraint,L.bottomConstraint,D.tickSize);L.setYConstraint(D.topConstraint,L.bottomConstraint,L.tickSize);}this._oneTimeCallback(F,"slideEnd",function(){G.min=true;if(G.max){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});this._oneTimeCallback(M,"slideEnd",function(){G.max=true;if(G.min){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});F.setValue(H,I,E,false);M.setValue(K,I,E,false);},setMinValue:function(F,H,I,E){var G=this.minSlider,D=this;this.activeSlider=G;D=this;this._oneTimeCallback(G,"slideEnd",function(){D.updateValue(E);setTimeout(function(){D._cleanEvent(G,"slideEnd");},0);});G.setValue(F,H,I);},setMaxValue:function(D,H,I,F){var G=this.maxSlider,E=this;this.activeSlider=G;this._oneTimeCallback(G,"slideEnd",function(){E.updateValue(F);setTimeout(function(){E._cleanEvent(G,"slideEnd");},0);});G.setValue(D,H,I);},updateValue:function(J){var E=this.minSlider.getValue(),K=this.maxSlider.getValue(),F=false,D,M,H,I,L,G;if(E!=this.minVal||K!=this.maxVal){F=true;D=this.minSlider.thumb;M=this.maxSlider.thumb;H=this.isHoriz?"x":"y";G=this.minSlider.thumbCenterPoint[H]+this.maxSlider.thumbCenterPoint[H];I=Math.max(K-G-this.minRange,0);L=Math.min(-E-G-this.minRange,0);if(this.isHoriz){I=Math.min(I,M.rightConstraint);D.setXConstraint(D.leftConstraint,I,D.tickSize);M.setXConstraint(L,M.rightConstraint,M.tickSize);}else{I=Math.min(I,M.bottomConstraint);D.setYConstraint(D.leftConstraint,I,D.tickSize);M.setYConstraint(L,M.bottomConstraint,M.tickSize);}}this.minVal=E;this.maxVal=K;if(F&&!J){this.fireEvent("change",this);}},selectActiveSlider:function(H){var E=this.minSlider,D=this.maxSlider,J=E.isLocked()||!E.backgroundEnabled,G=D.isLocked()||!E.backgroundEnabled,F=YAHOO.util.Event,I;if(J||G){this.activeSlider=J?D:E;}else{if(this.isHoriz){I=F.getPageX(H)-E.thumb.initPageX-E.thumbCenterPoint.x;}else{I=F.getPageY(H)-E.thumb.initPageY-E.thumbCenterPoint.y;}this.activeSlider=I*2>D.getValue()+E.getValue()?D:E;}},_handleMouseDown:function(D){if(!D._handled){D._handled=true;this.selectActiveSlider(D);return B.Slider.prototype.onMouseDown.call(this.activeSlider,D);}else{return false;}},_handleMouseUp:function(D){B.Slider.prototype.onMouseUp.apply(this.activeSlider,arguments);},_oneTimeCallback:function(F,D,E){F.subscribe(D,function(){F.unsubscribe(D,arguments.callee);E.apply({},[].slice.apply(arguments));});},_cleanEvent:function(K,E){var J,I,D,G,H,F;if(K.__yui_events&&K.events[E]){for(I=K.__yui_events.length;I>=0;--I){if(K.__yui_events[I].type===E){J=K.__yui_events[I];break;}}if(J){H=J.subscribers;F=[];G=0;for(I=0,D=H.length;I<D;++I){if(H[I]){F[G++]=H[I];}}J.subscribers=F;}}}};YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);B.Slider.getHorizDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,G,0,0,F),E=new B.SliderThumb(K,H,0,G,0,0,F);return new C(new B.Slider(H,H,I,"horiz"),new B.Slider(H,H,E,"horiz"),G,D);};B.Slider.getVertDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,0,0,G,F),E=new B.SliderThumb(K,H,0,0,0,G,F);return new B.DualSlider(new B.Slider(H,H,I,"vert"),new B.Slider(H,H,E,"vert"),G,D);};YAHOO.widget.DualSlider=C;})();YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.7.0",build:"1796"});/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,setter:null,getter:null,validator:null,getValue:function(){var A=this.value;if(this.getter){A=this.getter.call(this.owner,this.name);}return A;},setValue:function(F,B){var E,A=this.owner,C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.setter){F=this.setter.call(A,F,this.name);if(F===undefined){}}if(this.method){this.method.call(A,F,this.name);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};if(C){this._written=false;}this._initialConfig=this._initialConfig||{};for(var A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig,true);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return null;}return B.getValue();},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var C=[],B;for(B in this._configs){if(A.hasOwnProperty(this._configs,B)&&!A.isUndefined(this._configs[B])){C[C.length]=B;}}return C;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.util.AttributeProvider;var A=function(D,E){this.init.apply(this,arguments);};A.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true,"change":true};A.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(F,D){var E=this.get("element");if(E){E[D]=F;}},DEFAULT_HTML_GETTER:function(D){var E=this.get("element"),F;if(E){F=E[D];}return F;},appendChild:function(D){D=D.get?D.get("element"):D;return this.get("element").appendChild(D);},getElementsByTagName:function(D){return this.get("element").getElementsByTagName(D);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(D,E){D=D.get?D.get("element"):D;E=(E&&E.get)?E.get("element"):E;return this.get("element").insertBefore(D,E);},removeChild:function(D){D=D.get?D.get("element"):D;return this.get("element").removeChild(D);},replaceChild:function(D,E){D=D.get?D.get("element"):D;E=E.get?E.get("element"):E;return this.get("element").replaceChild(D,E);},initAttributes:function(D){},addListener:function(H,G,I,F){var E=this.get("element")||this.get("id");F=F||this;var D=this;if(!this._events[H]){if(E&&this.DOM_EVENTS[H]){YAHOO.util.Event.addListener(E,H,function(J){if(J.srcElement&&!J.target){J.target=J.srcElement;}D.fireEvent(H,J);},I,F);}this.createEvent(H,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(E,D){return this.unsubscribe.apply(this,arguments);},addClass:function(D){B.addClass(this.get("element"),D);},getElementsByClassName:function(E,D){return B.getElementsByClassName(E,D,this.get("element"));},hasClass:function(D){return B.hasClass(this.get("element"),D);},removeClass:function(D){return B.removeClass(this.get("element"),D);},replaceClass:function(E,D){return B.replaceClass(this.get("element"),E,D);},setStyle:function(E,D){return B.setStyle(this.get("element"),E,D);},getStyle:function(D){return B.getStyle(this.get("element"),D);},fireQueue:function(){var E=this._queue;for(var F=0,D=E.length;F<D;++F){this[E[F][0]].apply(this,E[F][1]);}},appendTo:function(E,F){E=(E.get)?E.get("element"):B.get(E);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:E}); +F=(F&&F.get)?F.get("element"):B.get(F);var D=this.get("element");if(!D){return false;}if(!E){return false;}if(D.parent!=E){if(F){E.insertBefore(D,F);}else{E.appendChild(D);}}this.fireEvent("appendTo",{type:"appendTo",target:E});return D;},get:function(D){var F=this._configs||{},E=F.element;if(E&&!F[D]&&!YAHOO.lang.isUndefined(E.value[D])){this._setHTMLAttrConfig(D);}return C.prototype.get.call(this,D);},setAttributes:function(J,G){var E={},H=this._configOrder;for(var I=0,D=H.length;I<D;++I){if(J[H[I]]!==undefined){E[H[I]]=true;this.set(H[I],J[H[I]],G);}}for(var F in J){if(J.hasOwnProperty(F)&&!E[F]){this.set(F,J[F],G);}}},set:function(E,G,D){var F=this.get("element");if(!F){this._queue[this._queue.length]=["set",arguments];if(this._configs[E]){this._configs[E].value=G;}return;}if(!this._configs[E]&&!YAHOO.lang.isUndefined(F[E])){this._setHTMLAttrConfig(E);}return C.prototype.set.apply(this,arguments);},setAttributeConfig:function(D,E,F){this._configOrder.push(D);C.prototype.setAttributeConfig.apply(this,arguments);},createEvent:function(E,D){this._events[E]=true;return C.prototype.createEvent.apply(this,arguments);},init:function(E,D){this._initElement(E,D);},destroy:function(){var D=this.get("element");YAHOO.util.Event.purgeElement(D,true);this.unsubscribeAll();if(D&&D.parentNode){D.parentNode.removeChild(D);}this._queue=[];this._events={};this._configs={};this._configOrder=[];},_initElement:function(F,E){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];E=E||{};E.element=E.element||F||null;var H=false;var D=A.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var G in D){if(D.hasOwnProperty(G)){this.DOM_EVENTS[G]=D[G];}}if(typeof E.element==="string"){this._setHTMLAttrConfig("id",{value:E.element});}if(B.get(E.element)){H=true;this._initHTMLElement(E);this._initContent(E);}YAHOO.util.Event.onAvailable(E.element,function(){if(!H){this._initHTMLElement(E);}this.fireEvent("available",{type:"available",target:B.get(E.element)});},this,true);YAHOO.util.Event.onContentReady(E.element,function(){if(!H){this._initContent(E);}this.fireEvent("contentReady",{type:"contentReady",target:B.get(E.element)});},this,true);},_initHTMLElement:function(D){this.setAttributeConfig("element",{value:B.get(D.element),readOnly:true});},_initContent:function(D){this.initAttributes(D);this.setAttributes(D,true);this.fireQueue();},_setHTMLAttrConfig:function(D,F){var E=this.get("element");F=F||{};F.name=D;F.setter=F.setter||this.DEFAULT_HTML_SETTER;F.getter=F.getter||this.DEFAULT_HTML_GETTER;F.value=F.value||E[D];this._configs[D]=new YAHOO.util.Attribute(F,this);}};YAHOO.augment(A,C);YAHOO.util.Element=A;})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1796"});/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +YAHOO.util.Color=function(){var A="0",B=YAHOO.lang.isArray,C=YAHOO.lang.isNumber;return{real2dec:function(D){return Math.min(255,Math.round(D*256));},hsv2rgb:function(H,O,M){if(B(H)){return this.hsv2rgb.call(this,H[0],H[1],H[2]);}var D,I,L,G=Math.floor((H/60)%6),J=(H/60)-G,F=M*(1-O),E=M*(1-J*O),N=M*(1-(1-J)*O),K;switch(G){case 0:D=M;I=N;L=F;break;case 1:D=E;I=M;L=F;break;case 2:D=F;I=M;L=N;break;case 3:D=F;I=E;L=M;break;case 4:D=N;I=F;L=M;break;case 5:D=M;I=F;L=E;break;}K=this.real2dec;return[K(D),K(I),K(L)];},rgb2hsv:function(D,H,I){if(B(D)){return this.rgb2hsv.apply(this,D);}D/=255;H/=255;I/=255;var G,L,E=Math.min(Math.min(D,H),I),J=Math.max(Math.max(D,H),I),K=J-E,F;switch(J){case E:G=0;break;case D:G=60*(H-I)/K;if(H<I){G+=360;}break;case H:G=(60*(I-D)/K)+120;break;case I:G=(60*(D-H)/K)+240;break;}L=(J===0)?0:1-(E/J);F=[Math.round(G),L,J];return F;},rgb2hex:function(F,E,D){if(B(F)){return this.rgb2hex.apply(this,F);}var G=this.dec2hex;return G(F)+G(E)+G(D);},dec2hex:function(D){D=parseInt(D,10)|0;D=(D>255||D<0)?0:D;return(A+D.toString(16)).slice(-2).toUpperCase();},hex2dec:function(D){return parseInt(D,16);},hex2rgb:function(D){var E=this.hex2dec;return[E(D.slice(0,2)),E(D.slice(2,4)),E(D.slice(4,6))];},websafe:function(F,E,D){if(B(F)){return this.websafe.apply(this,F);}var G=function(H){if(C(H)){H=Math.min(Math.max(0,H),255);var I,J;for(I=0;I<256;I=I+51){J=I+51;if(H>=I&&H<=J){return(H-I>25)?J:I;}}}return H;};return[G(F),G(E),G(D)];}};}();(function(){var J=0,F=YAHOO.util,C=YAHOO.lang,D=YAHOO.widget.Slider,B=F.Color,E=F.Dom,I=F.Event,A=C.substitute,H="yui-picker";function G(L,K){J=J+1;K=K||{};if(arguments.length===1&&!YAHOO.lang.isString(L)&&!L.nodeName){K=L;L=K.element||null;}if(!L&&!K.element){L=this._createHostElement(K);}G.superclass.constructor.call(this,L,K);this.initPicker();}YAHOO.extend(G,YAHOO.util.Element,{ID:{R:H+"-r",R_HEX:H+"-rhex",G:H+"-g",G_HEX:H+"-ghex",B:H+"-b",B_HEX:H+"-bhex",H:H+"-h",S:H+"-s",V:H+"-v",PICKER_BG:H+"-bg",PICKER_THUMB:H+"-thumb",HUE_BG:H+"-hue-bg",HUE_THUMB:H+"-hue-thumb",HEX:H+"-hex",SWATCH:H+"-swatch",WEBSAFE_SWATCH:H+"-websafe-swatch",CONTROLS:H+"-controls",RGB_CONTROLS:H+"-rgb-controls",HSV_CONTROLS:H+"-hsv-controls",HEX_CONTROLS:H+"-hex-controls",HEX_SUMMARY:H+"-hex-summary",CONTROLS_LABEL:H+"-controls-label"},TXT:{ILLEGAL_HEX:"Illegal hex value entered",SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"\u00B0",PERCENT:"%"},IMAGE:{PICKER_THUMB:"../../build/colorpicker/assets/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"},DEFAULT:{PICKER_SIZE:180},OPT:{HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv",RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcontrols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"},skipAnim:true,_createHostElement:function(){var K=document.createElement("div");if(this.CSS.BASE){K.className=this.CSS.BASE;}return K;},_updateHueSlider:function(){var K=this.get(this.OPT.PICKER_SIZE),L=this.get(this.OPT.HUE);L=K-Math.round(L/360*K);if(L===K){L=0;}this.hueSlider.setValue(L,this.skipAnim);},_updatePickerSlider:function(){var L=this.get(this.OPT.PICKER_SIZE),M=this.get(this.OPT.SATURATION),K=this.get(this.OPT.VALUE);M=Math.round(M*L/100);K=Math.round(L-(K*L/100));this.pickerSlider.setRegionValue(M,K,this.skipAnim);},_updateSliders:function(){this._updateHueSlider();this._updatePickerSlider();},setValue:function(L,K){K=(K)||false;this.set(this.OPT.RGB,L,K);this._updateSliders();},hueSlider:null,pickerSlider:null,_getH:function(){var K=this.get(this.OPT.PICKER_SIZE),L=(K-this.hueSlider.getValue())/K;L=Math.round(L*360);return(L===360)?0:L;},_getS:function(){return this.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE);},_getV:function(){var K=this.get(this.OPT.PICKER_SIZE);return(K-this.pickerSlider.getYValue())/K;},_updateSwatch:function(){var M=this.get(this.OPT.RGB),O=this.get(this.OPT.WEBSAFE),N=this.getElement(this.ID.SWATCH),L=M.join(","),K=this.get(this.OPT.TXT);E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CURRENT_COLOR,{"rgb":"#"+this.get(this.OPT.HEX)});N=this.getElement(this.ID.WEBSAFE_SWATCH);L=O.join(",");E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CLOSEST_WEBSAFE,{"rgb":"#"+B.rgb2hex(O)});},_getValuesFromSliders:function(){this.set(this.OPT.RGB,B.hsv2rgb(this._getH(),this._getS(),this._getV()));},_updateFormFields:function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).value=this.get(this.OPT.SATURATION);this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML=B.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=B.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=B.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX);},_onHueSliderChange:function(N){var L=this._getH(),K=B.hsv2rgb(L,1,1),M="rgb("+K.join(",")+")";this.set(this.OPT.HUE,L,true);E.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",M);if(this.hueSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();}this._updateFormFields();this._updateSwatch();},_onPickerSliderChange:function(M){var L=this._getS(),K=this._getV();this.set(this.OPT.SATURATION,Math.round(L*100),true);this.set(this.OPT.VALUE,Math.round(K*100),true);if(this.pickerSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders(); +}this._updateFormFields();this._updateSwatch();},_getCommand:function(K){var L=I.getCharCode(K);if(L===38){return 3;}else{if(L===13){return 6;}else{if(L===40){return 4;}else{if(L>=48&&L<=57){return 1;}else{if(L>=97&&L<=102){return 2;}else{if(L>=65&&L<=70){return 2;}else{if("8, 9, 13, 27, 37, 39".indexOf(L)>-1||K.ctrlKey||K.metaKey){return 5;}else{return 0;}}}}}}}},_useFieldValue:function(L,K,N){var M=K.value;if(N!==this.OPT.HEX){M=parseInt(M,10);}if(M!==this.get(N)){this.set(N,M);}},_rgbFieldKeypress:function(M,K,O){var N=this._getCommand(M),L=(M.shiftKey)?10:1;switch(N){case 6:this._useFieldValue.apply(this,arguments);break;case 3:this.set(O,Math.min(this.get(O)+L,255));this._updateFormFields();break;case 4:this.set(O,Math.max(this.get(O)-L,0));this._updateFormFields();break;default:}},_hexFieldKeypress:function(L,K,N){var M=this._getCommand(L);if(M===6){this._useFieldValue.apply(this,arguments);}},_hexOnly:function(L,K){var M=this._getCommand(L);switch(M){case 6:case 5:case 1:break;case 2:if(K!==true){break;}default:I.stopEvent(L);return false;}},_numbersOnly:function(K){return this._hexOnly(K,true);},getElement:function(K){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[K]];},_createElements:function(){var N,M,P,O,L,K=this.get(this.OPT.IDS),Q=this.get(this.OPT.TXT),S=this.get(this.OPT.IMAGES),R=function(U,V){var W=document.createElement(U);if(V){C.augmentObject(W,V,true);}return W;},T=function(U,V){var W=C.merge({autocomplete:"off",value:"0",size:3,maxlength:3},V);W.name=W.id;return new R(U,W);};L=this.get("element");N=new R("div",{id:K[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.PICKER_THUMB],className:"yui-picker-thumb"});P=new R("img",{src:S.PICKER_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"});P=new R("img",{src:S.HUE_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.CONTROLS],className:"yui-picker-controls"});L.appendChild(N);L=N;N=new R("div",{className:"hd"});M=new R("a",{id:K[this.ID.CONTROLS_LABEL],href:"#"});N.appendChild(M);L.appendChild(N);N=new R("div",{className:"bd"});L.appendChild(N);L=N;N=new R("ul",{id:K[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.R+" "));O=new T("input",{id:K[this.ID.R],className:"yui-picker-r"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.G+" "));O=new T("input",{id:K[this.ID.G],className:"yui-picker-g"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.B+" "));O=new T("input",{id:K[this.ID.B],className:"yui-picker-b"});M.appendChild(O);N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.H+" "));O=new T("input",{id:K[this.ID.H],className:"yui-picker-h"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.DEG));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.S+" "));O=new T("input",{id:K[this.ID.S],className:"yui-picker-s"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.V+" "));O=new T("input",{id:K[this.ID.V],className:"yui-picker-v"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});M=new R("li",{id:K[this.ID.R_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.G_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.B_HEX]});N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});N.appendChild(document.createTextNode(Q.HEX+" "));M=new T("input",{id:K[this.ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});N.appendChild(M);L.appendChild(N);L=this.get("element");N=new R("div",{id:K[this.ID.SWATCH],className:"yui-picker-swatch"});L.appendChild(N);N=new R("div",{id:K[this.ID.WEBSAFE_SWATCH],className:"yui-picker-websafe-swatch"});L.appendChild(N);},_attachRGBHSV:function(L,K){I.on(this.getElement(L),"keydown",function(N,M){M._rgbFieldKeypress(N,this,K);},this);I.on(this.getElement(L),"keypress",this._numbersOnly,this,true);I.on(this.getElement(L),"blur",function(N,M){M._useFieldValue(N,this,K);},this);},_updateRGB:function(){var K=[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)];this.set(this.OPT.RGB,K);this._updateSliders();},_initElements:function(){var O=this.OPT,N=this.get(O.IDS),L=this.get(O.ELEMENTS),K,M,P;for(K in this.ID){if(C.hasOwnProperty(this.ID,K)){N[this.ID[K]]=N[K];}}M=E.get(N[this.ID.PICKER_BG]);if(!M){this._createElements();}else{}for(K in N){if(C.hasOwnProperty(N,K)){M=E.get(N[K]);P=E.generateId(M);N[K]=P;N[N[K]]=P;L[P]=M;}}},initPicker:function(){this._initSliders();this._bindUI();this.syncUI(true);},_initSliders:function(){var K=this.ID,L=this.get(this.OPT.PICKER_SIZE);this.hueSlider=D.getVertSlider(this.getElement(K.HUE_BG),this.getElement(K.HUE_THUMB),0,L);this.pickerSlider=D.getSliderRegion(this.getElement(K.PICKER_BG),this.getElement(K.PICKER_THUMB),0,L,0,L);this.set(this.OPT.ANIMATE,this.get(this.OPT.ANIMATE));},_bindUI:function(){var K=this.ID,L=this.OPT;this.hueSlider.subscribe("change",this._onHueSliderChange,this,true);this.pickerSlider.subscribe("change",this._onPickerSliderChange,this,true);I.on(this.getElement(K.WEBSAFE_SWATCH),"click",function(M){this.setValue(this.get(L.WEBSAFE));},this,true);I.on(this.getElement(K.CONTROLS_LABEL),"click",function(M){this.set(L.SHOW_CONTROLS,!this.get(L.SHOW_CONTROLS));I.preventDefault(M);},this,true);this._attachRGBHSV(K.R,L.RED);this._attachRGBHSV(K.G,L.GREEN);this._attachRGBHSV(K.B,L.BLUE);this._attachRGBHSV(K.H,L.HUE); +this._attachRGBHSV(K.S,L.SATURATION);this._attachRGBHSV(K.V,L.VALUE);I.on(this.getElement(K.HEX),"keydown",function(N,M){M._hexFieldKeypress(N,this,L.HEX);},this);I.on(this.getElement(this.ID.HEX),"keypress",this._hexOnly,this,true);I.on(this.getElement(this.ID.HEX),"blur",function(N,M){M._useFieldValue(N,this,L.HEX);},this);},syncUI:function(K){this.skipAnim=K;this._updateRGB();this.skipAnim=false;},_updateRGBFromHSV:function(){var L=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100],K=B.hsv2rgb(L);this.set(this.OPT.RGB,K);this._updateSliders();},_updateHex:function(){var N=this.get(this.OPT.HEX),K=N.length,O,M,L;if(K===3){O=N.split("");for(M=0;M<K;M=M+1){O[M]=O[M]+O[M];}N=O.join("");}if(N.length!==6){return false;}L=B.hex2rgb(N);this.setValue(L);},_hideShowEl:function(M,K){var L=(C.isString(M)?this.getElement(M):M);E.setStyle(L,"display",(K)?"":"none");},initAttributes:function(K){K=K||{};G.superclass.initAttributes.call(this,K);this.setAttributeConfig(this.OPT.PICKER_SIZE,{value:K.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:K.hue||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:K.saturation||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:C.isNumber(K.value)?K.value:100,validator:C.isNumber});this.setAttributeConfig(this.OPT.RED,{value:C.isNumber(K.red)?K.red:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:C.isNumber(K.green)?K.green:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:C.isNumber(K.blue)?K.blue:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:K.hex||"FFFFFF",validator:C.isString});this.setAttributeConfig(this.OPT.RGB,{value:K.rgb||[255,255,255],method:function(O){this.set(this.OPT.RED,O[0],true);this.set(this.OPT.GREEN,O[1],true);this.set(this.OPT.BLUE,O[2],true);var Q=B.websafe(O),P=B.rgb2hex(O),N=B.rgb2hsv(O);this.set(this.OPT.WEBSAFE,Q,true);this.set(this.OPT.HEX,P,true);if(N[1]){this.set(this.OPT.HUE,N[0],true);}this.set(this.OPT.SATURATION,Math.round(N[1]*100),true);this.set(this.OPT.VALUE,Math.round(N[2]*100),true);},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(N){if(N){N.showEvent.subscribe(function(){this.pickerSlider.focus();},this,true);}}});this.setAttributeConfig(this.OPT.WEBSAFE,{value:K.websafe||[255,255,255]});var M=K.ids||C.merge({},this.ID),L;if(!K.ids&&J>1){for(L in M){if(C.hasOwnProperty(M,L)){M[L]=M[L]+J;}}}this.setAttributeConfig(this.OPT.IDS,{value:M,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:K.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:K.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:C.isBoolean(K.showcontrols)?K.showcontrols:true,method:function(N){var O=E.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0];this._hideShowEl(O,N);this.getElement(this.ID.CONTROLS_LABEL).innerHTML=(N)?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS;}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:C.isBoolean(K.showrgbcontrols)?K.showrgbcontrols:true,method:function(N){this._hideShowEl(this.ID.RGB_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:C.isBoolean(K.showhsvcontrols)?K.showhsvcontrols:false,method:function(N){this._hideShowEl(this.ID.HSV_CONTROLS,N);if(N&&this.get(this.OPT.SHOW_HEX_SUMMARY)){this.set(this.OPT.SHOW_HEX_SUMMARY,false);}}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:C.isBoolean(K.showhexcontrols)?K.showhexcontrols:false,method:function(N){this._hideShowEl(this.ID.HEX_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:C.isBoolean(K.showwebsafe)?K.showwebsafe:true,method:function(N){this._hideShowEl(this.ID.WEBSAFE_SWATCH,N);}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:C.isBoolean(K.showhexsummary)?K.showhexsummary:true,method:function(N){this._hideShowEl(this.ID.HEX_SUMMARY,N);if(N&&this.get(this.OPT.SHOW_HSV_CONTROLS)){this.set(this.OPT.SHOW_HSV_CONTROLS,false);}}});this.setAttributeConfig(this.OPT.ANIMATE,{value:C.isBoolean(K.animate)?K.animate:true,method:function(N){if(this.pickerSlider){this.pickerSlider.animate=N;this.hueSlider.animate=N;}}});this.on(this.OPT.HUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.SATURATION+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.VALUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.RED+"Change",this._updateRGB,this,true);this.on(this.OPT.GREEN+"Change",this._updateRGB,this,true);this.on(this.OPT.BLUE+"Change",this._updateRGB,this,true);this.on(this.OPT.HEX+"Change",this._updateHex,this,true);this._initElements();}});YAHOO.widget.ColorPicker=G;})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.7.0",build:"1796"}); + +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if("style" in D){B.Dom.setStyle(D,C,F+E);}else{if(C in D){D[C]=F;}}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)]; +}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})(); +/* +TERMS OF USE - EASING EQUATIONS +Open source under the BSD License. +Copyright 2001 Robert Penner All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]); +}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"}); diff --git a/_source/plugins/undo/plugin.js b/_source/plugins/undo/plugin.js new file mode 100644 index 0000000..89819f0 --- /dev/null +++ b/_source/plugins/undo/plugin.js @@ -0,0 +1,580 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Undo/Redo system for saving shapshot for document modification + * and other recordable changes. + */ + +(function() +{ + CKEDITOR.plugins.add( 'undo', + { + requires : [ 'selection', 'wysiwygarea' ], + + init : function( editor ) + { + var undoManager = new UndoManager( editor ); + + var undoCommand = editor.addCommand( 'undo', + { + exec : function() + { + if ( undoManager.undo() ) + { + editor.selectionChange(); + this.fire( 'afterUndo' ); + } + }, + state : CKEDITOR.TRISTATE_DISABLED, + canUndo : false + }); + + var redoCommand = editor.addCommand( 'redo', + { + exec : function() + { + if ( undoManager.redo() ) + { + editor.selectionChange(); + this.fire( 'afterRedo' ); + } + }, + state : CKEDITOR.TRISTATE_DISABLED, + canUndo : false + }); + + undoManager.onChange = function() + { + undoCommand.setState( undoManager.undoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); + redoCommand.setState( undoManager.redoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); + }; + + function recordCommand( event ) + { + // If the command hasn't been marked to not support undo. + if ( undoManager.enabled && event.data.command.canUndo !== false ) + undoManager.save(); + } + + // We'll save snapshots before and after executing a command. + editor.on( 'beforeCommandExec', recordCommand ); + editor.on( 'afterCommandExec', recordCommand ); + + // Save snapshots before doing custom changes. + editor.on( 'saveSnapshot', function() + { + undoManager.save(); + }); + + // Registering keydown on every document recreation.(#3844) + editor.on( 'contentDom', function() + { + editor.document.on( 'keydown', function( event ) + { + // Do not capture CTRL hotkeys. + if ( !event.data.$.ctrlKey && !event.data.$.metaKey ) + undoManager.type( event ); + }); + }); + + // Always save an undo snapshot - the previous mode might have + // changed editor contents. + editor.on( 'beforeModeUnload', function() + { + editor.mode == 'wysiwyg' && undoManager.save( true ); + }); + + // Make the undo manager available only in wysiwyg mode. + editor.on( 'mode', function() + { + undoManager.enabled = editor.readOnly ? false : editor.mode == 'wysiwyg'; + undoManager.onChange(); + }); + + editor.ui.addButton( 'Undo', + { + label : editor.lang.undo, + command : 'undo' + }); + + editor.ui.addButton( 'Redo', + { + label : editor.lang.redo, + command : 'redo' + }); + + editor.resetUndo = function() + { + // Reset the undo stack. + undoManager.reset(); + + // Create the first image. + editor.fire( 'saveSnapshot' ); + }; + + /** + * Update the undo stacks with any subsequent DOM changes after this call. + * @name CKEDITOR.editor#updateUndo + * @example + * function() + * { + * editor.fire( 'updateSnapshot' ); + * ... + * // Ask to include subsequent (in this call stack) DOM changes to be + * // considered as part of the first snapshot. + * editor.fire( 'updateSnapshot' ); + * editor.document.body.append(...); + * ... + * } + */ + editor.on( 'updateSnapshot', function() + { + if ( undoManager.currentImage && new Image( editor ).equals( undoManager.currentImage ) ) + setTimeout( function() { undoManager.update(); }, 0 ); + }); + } + }); + + CKEDITOR.plugins.undo = {}; + + /** + * Undo snapshot which represents the current document status. + * @name CKEDITOR.plugins.undo.Image + * @param editor The editor instance on which the image is created. + */ + var Image = CKEDITOR.plugins.undo.Image = function( editor ) + { + this.editor = editor; + + editor.fire( 'beforeUndoImage' ); + + var contents = editor.getSnapshot(), + selection = contents && editor.getSelection(); + + // In IE, we need to remove the expando attributes. + CKEDITOR.env.ie && contents && ( contents = contents.replace( /\s+data-cke-expando=".*?"/g, '' ) ); + + this.contents = contents; + this.bookmarks = selection && selection.createBookmarks2( true ); + + editor.fire( 'afterUndoImage' ); + }; + + // Attributes that browser may changing them when setting via innerHTML. + var protectedAttrs = /\b(?:href|src|name)="[^"]*?"/gi; + + Image.prototype = + { + equals : function( otherImage, contentOnly ) + { + + var thisContents = this.contents, + otherContents = otherImage.contents; + + // For IE6/7 : Comparing only the protected attribute values but not the original ones.(#4522) + if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) + { + thisContents = thisContents.replace( protectedAttrs, '' ); + otherContents = otherContents.replace( protectedAttrs, '' ); + } + + if ( thisContents != otherContents ) + return false; + + if ( contentOnly ) + return true; + + var bookmarksA = this.bookmarks, + bookmarksB = otherImage.bookmarks; + + if ( bookmarksA || bookmarksB ) + { + if ( !bookmarksA || !bookmarksB || bookmarksA.length != bookmarksB.length ) + return false; + + for ( var i = 0 ; i < bookmarksA.length ; i++ ) + { + var bookmarkA = bookmarksA[ i ], + bookmarkB = bookmarksB[ i ]; + + if ( + bookmarkA.startOffset != bookmarkB.startOffset || + bookmarkA.endOffset != bookmarkB.endOffset || + !CKEDITOR.tools.arrayCompare( bookmarkA.start, bookmarkB.start ) || + !CKEDITOR.tools.arrayCompare( bookmarkA.end, bookmarkB.end ) ) + { + return false; + } + } + } + + return true; + } + }; + + /** + * @constructor Main logic for Redo/Undo feature. + */ + function UndoManager( editor ) + { + this.editor = editor; + + // Reset the undo stack. + this.reset(); + } + + + var editingKeyCodes = { /*Backspace*/ 8:1, /*Delete*/ 46:1 }, + modifierKeyCodes = { /*Shift*/ 16:1, /*Ctrl*/ 17:1, /*Alt*/ 18:1 }, + navigationKeyCodes = { 37:1, 38:1, 39:1, 40:1 }; // Arrows: L, T, R, B + + UndoManager.prototype = + { + /** + * Process undo system regard keystrikes. + * @param {CKEDITOR.dom.event} event + */ + type : function( event ) + { + var keystroke = event && event.data.getKey(), + isModifierKey = keystroke in modifierKeyCodes, + isEditingKey = keystroke in editingKeyCodes, + wasEditingKey = this.lastKeystroke in editingKeyCodes, + sameAsLastEditingKey = isEditingKey && keystroke == this.lastKeystroke, + // Keystrokes which navigation through contents. + isReset = keystroke in navigationKeyCodes, + wasReset = this.lastKeystroke in navigationKeyCodes, + + // Keystrokes which just introduce new contents. + isContent = ( !isEditingKey && !isReset ), + + // Create undo snap for every different modifier key. + modifierSnapshot = ( isEditingKey && !sameAsLastEditingKey ), + // Create undo snap on the following cases: + // 1. Just start to type . + // 2. Typing some content after a modifier. + // 3. Typing some content after make a visible selection. + startedTyping = !( isModifierKey || this.typing ) + || ( isContent && ( wasEditingKey || wasReset ) ); + + if ( startedTyping || modifierSnapshot ) + { + var beforeTypeImage = new Image( this.editor ); + + // Use setTimeout, so we give the necessary time to the + // browser to insert the character into the DOM. + CKEDITOR.tools.setTimeout( function() + { + var currentSnapshot = this.editor.getSnapshot(); + + // In IE, we need to remove the expando attributes. + if ( CKEDITOR.env.ie ) + currentSnapshot = currentSnapshot.replace( /\s+data-cke-expando=".*?"/g, '' ); + + if ( beforeTypeImage.contents != currentSnapshot ) + { + // It's safe to now indicate typing state. + this.typing = true; + + // This's a special save, with specified snapshot + // and without auto 'fireChange'. + if ( !this.save( false, beforeTypeImage, false ) ) + // Drop future snapshots. + this.snapshots.splice( this.index + 1, this.snapshots.length - this.index - 1 ); + + this.hasUndo = true; + this.hasRedo = false; + + this.typesCount = 1; + this.modifiersCount = 1; + + this.onChange(); + } + }, + 0, this + ); + } + + this.lastKeystroke = keystroke; + + // Create undo snap after typed too much (over 25 times). + if ( isEditingKey ) + { + this.typesCount = 0; + this.modifiersCount++; + + if ( this.modifiersCount > 25 ) + { + this.save( false, null, false ); + this.modifiersCount = 1; + } + } + else if ( !isReset ) + { + this.modifiersCount = 0; + this.typesCount++; + + if ( this.typesCount > 25 ) + { + this.save( false, null, false ); + this.typesCount = 1; + } + } + + }, + + reset : function() // Reset the undo stack. + { + /** + * Remember last pressed key. + */ + this.lastKeystroke = 0; + + /** + * Stack for all the undo and redo snapshots, they're always created/removed + * in consistency. + */ + this.snapshots = []; + + /** + * Current snapshot history index. + */ + this.index = -1; + + this.limit = this.editor.config.undoStackSize || 20; + + this.currentImage = null; + + this.hasUndo = false; + this.hasRedo = false; + + this.resetType(); + }, + + /** + * Reset all states about typing. + * @see UndoManager.type + */ + resetType : function() + { + this.typing = false; + delete this.lastKeystroke; + this.typesCount = 0; + this.modifiersCount = 0; + }, + fireChange : function() + { + this.hasUndo = !!this.getNextImage( true ); + this.hasRedo = !!this.getNextImage( false ); + // Reset typing + this.resetType(); + this.onChange(); + }, + + /** + * Save a snapshot of document image for later retrieve. + */ + save : function( onContentOnly, image, autoFireChange ) + { + var snapshots = this.snapshots; + + // Get a content image. + if ( !image ) + image = new Image( this.editor ); + + // Do nothing if it was not possible to retrieve an image. + if ( image.contents === false ) + return false; + + // Check if this is a duplicate. In such case, do nothing. + if ( this.currentImage && image.equals( this.currentImage, onContentOnly ) ) + return false; + + // Drop future snapshots. + snapshots.splice( this.index + 1, snapshots.length - this.index - 1 ); + + // If we have reached the limit, remove the oldest one. + if ( snapshots.length == this.limit ) + snapshots.shift(); + + // Add the new image, updating the current index. + this.index = snapshots.push( image ) - 1; + + this.currentImage = image; + + if ( autoFireChange !== false ) + this.fireChange(); + return true; + }, + + restoreImage : function( image ) + { + this.editor.loadSnapshot( image.contents ); + + if ( image.bookmarks ) + this.editor.getSelection().selectBookmarks( image.bookmarks ); + else if ( CKEDITOR.env.ie ) + { + // IE BUG: If I don't set the selection to *somewhere* after setting + // document contents, then IE would create an empty paragraph at the bottom + // the next time the document is modified. + var $range = this.editor.document.getBody().$.createTextRange(); + $range.collapse( true ); + $range.select(); + } + + this.index = image.index; + + // Update current image with the actual editor + // content, since actualy content may differ from + // the original snapshot due to dom change. (#4622) + this.update(); + this.fireChange(); + }, + + // Get the closest available image. + getNextImage : function( isUndo ) + { + var snapshots = this.snapshots, + currentImage = this.currentImage, + image, i; + + if ( currentImage ) + { + if ( isUndo ) + { + for ( i = this.index - 1 ; i >= 0 ; i-- ) + { + image = snapshots[ i ]; + if ( !currentImage.equals( image, true ) ) + { + image.index = i; + return image; + } + } + } + else + { + for ( i = this.index + 1 ; i < snapshots.length ; i++ ) + { + image = snapshots[ i ]; + if ( !currentImage.equals( image, true ) ) + { + image.index = i; + return image; + } + } + } + } + + return null; + }, + + /** + * Check the current redo state. + * @return {Boolean} Whether the document has previous state to + * retrieve. + */ + redoable : function() + { + return this.enabled && this.hasRedo; + }, + + /** + * Check the current undo state. + * @return {Boolean} Whether the document has future state to restore. + */ + undoable : function() + { + return this.enabled && this.hasUndo; + }, + + /** + * Perform undo on current index. + */ + undo : function() + { + if ( this.undoable() ) + { + this.save( true ); + + var image = this.getNextImage( true ); + if ( image ) + return this.restoreImage( image ), true; + } + + return false; + }, + + /** + * Perform redo on current index. + */ + redo : function() + { + if ( this.redoable() ) + { + // Try to save. If no changes have been made, the redo stack + // will not change, so it will still be redoable. + this.save( true ); + + // If instead we had changes, we can't redo anymore. + if ( this.redoable() ) + { + var image = this.getNextImage( false ); + if ( image ) + return this.restoreImage( image ), true; + } + } + + return false; + }, + + /** + * Update the last snapshot of the undo stack with the current editor content. + */ + update : function() + { + this.snapshots.splice( this.index, 1, ( this.currentImage = new Image( this.editor ) ) ); + } + }; +})(); + +/** + * The number of undo steps to be saved. The higher this setting value the more + * memory is used for it. + * @name CKEDITOR.config.undoStackSize + * @type Number + * @default 20 + * @example + * config.undoStackSize = 50; + */ + +/** + * Fired when the editor is about to save an undo snapshot. This event can be + * fired by plugins and customizations to make the editor saving undo snapshots. + * @name CKEDITOR.editor#saveSnapshot + * @event + */ + +/** + * Fired before an undo image is to be taken. An undo image represents the + * editor state at some point. It's saved into an undo store, so the editor is + * able to recover the editor state on undo and redo operations. + * @name CKEDITOR.editor#beforeUndoImage + * @since 3.5.3 + * @see CKEDITOR.editor#afterUndoImage + * @event + */ + +/** + * Fired after an undo image is taken. An undo image represents the + * editor state at some point. It's saved into an undo store, so the editor is + * able to recover the editor state on undo and redo operations. + * @name CKEDITOR.editor#afterUndoImage + * @since 3.5.3 + * @see CKEDITOR.editor#beforeUndoImage + * @event + */ diff --git a/_source/plugins/wsc/dialogs/ciframe.html b/_source/plugins/wsc/dialogs/ciframe.html new file mode 100644 index 0000000..e174702 --- /dev/null +++ b/_source/plugins/wsc/dialogs/ciframe.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html> +<head> + <title></title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <script type="text/javascript"> + +function gup( name ) +{ + name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ; + var regexS = '[\\?&]' + name + '=([^&#]*)' ; + var regex = new RegExp( regexS ) ; + var results = regex.exec( window.location.href ) ; + + if ( results ) + return results[ 1 ] ; + else + return '' ; +} + +var interval; + +function sendData2Master() +{ + var destination = window.parent.parent ; + try + { + if ( destination.XDTMaster ) + { + var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ; + window.clearInterval( interval ) ; + } + } + catch (e) {} +} + +function onLoad() +{ + interval = window.setInterval( sendData2Master, 100 ); +} + +</script> +</head> +<body onload="onLoad()"><p></p></body> +</html> diff --git a/_source/plugins/wsc/dialogs/tmpFrameset.html b/_source/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000..105f8b2 --- /dev/null +++ b/_source/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html> +<head> + <title></title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <script type="text/javascript"> + +function doLoadScript( url ) +{ + if ( !url ) + return false ; + + var s = document.createElement( "script" ) ; + s.type = "text/javascript" ; + s.src = url ; + document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ; + + return true ; +} + +var opener; +function tryLoad() +{ + opener = window.parent; + + // get access to global parameters + var oParams = window.opener.oldFramesetPageParams; + + // make frameset rows string prepare + var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ; + document.getElementById( 'itFrameset' ).rows = sFramesetRows ; + + // dynamic including init frames and crossdomain transport code + // from config sproxy_js_frameset url + var addScriptUrl = oParams.sproxy_js_frameset ; + doLoadScript( addScriptUrl ) ; +} + + </script> +</head> + +<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0"> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame> + <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame> +</frameset> +</html> diff --git a/_source/plugins/wsc/dialogs/wsc.css b/_source/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000..b73dae4 --- /dev/null +++ b/_source/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,82 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} diff --git a/_source/plugins/wsc/dialogs/wsc.js b/_source/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000..ecadaaf --- /dev/null +++ b/_source/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,192 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'checkspell', function( editor ) +{ + var number = CKEDITOR.tools.getNextNumber(), + iframeId = 'cke_frame_' + number, + textareaId = 'cke_data_' + number, + errorBoxId = 'cke_error_' + number, + interval, + protocol = document.location.protocol || 'http:', + errorMsg = editor.lang.spellCheck.notAvailable; + + var pasteArea = '<textarea'+ + ' style="display: none"' + + ' id="' + textareaId + '"' + + ' rows="10"' + + ' cols="40">' + + ' </textarea><div' + + ' id="' + errorBoxId + '"' + + ' style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;">' + + '</div><iframe' + + ' src=""' + + ' style="width:100%;background-color:#f1f1e3;"' + + ' frameborder="0"' + + ' name="' + iframeId + '"' + + ' id="' + iframeId + '"' + + ' allowtransparency="1">' + + '</iframe>'; + + var wscCoreUrl = editor.config.wsc_customLoaderScript || ( protocol + + '//loader.spellchecker.net/sproxy_fck/sproxy.php' + + '?plugin=fck2' + + '&customerid=' + editor.config.wsc_customerId + + '&cmd=script&doc=wsc&schema=22' + ); + + if ( editor.config.wsc_customLoaderScript ) + errorMsg += '<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">' + + editor.lang.spellCheck.errorLoading.replace( /%s/g, editor.config.wsc_customLoaderScript ) + '</p>'; + + function burnSpelling( dialog, errorMsg ) + { + var i = 0; + return function () + { + if ( typeof( window.doSpell ) == 'function' ) + { + //Call from window.setInteval expected at once. + if ( typeof( interval ) != 'undefined' ) + window.clearInterval( interval ); + + initAndSpell( dialog ); + } + else if ( i++ == 180 ) // Timeout: 180 * 250ms = 45s. + window._cancelOnError( errorMsg ); + }; + } + + window._cancelOnError = function( m ) + { + if ( typeof( window.WSC_Error ) == 'undefined' ) + { + CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'none' ); + var errorBox = CKEDITOR.document.getById( errorBoxId ); + errorBox.setStyle( 'display', 'block' ); + errorBox.setHtml( m || editor.lang.spellCheck.notAvailable ); + } + }; + + function initAndSpell( dialog ) + { + var LangComparer = new window._SP_FCK_LangCompare(), // Language abbr standarts comparer. + pluginPath = CKEDITOR.getUrl( editor.plugins.wsc.path + 'dialogs/' ), // Service paths corecting/preparing. + framesetPath = pluginPath + 'tmpFrameset.html'; + + // global var is used in FCK specific core + // change on equal var used in fckplugin.js + window.gFCKPluginName = 'wsc'; + + LangComparer.setDefaulLangCode( editor.config.defaultLanguage ); + + window.doSpell({ + ctrl : textareaId, + + lang : editor.config.wsc_lang || LangComparer.getSPLangCode(editor.langCode ), + intLang: editor.config.wsc_uiLang || LangComparer.getSPLangCode(editor.langCode ), + winType : iframeId, // If not defined app will run on winpopup. + + // Callback binding section. + onCancel : function() + { + dialog.hide(); + }, + onFinish : function( dT ) + { + editor.focus(); + dialog.getParentEditor().setData( dT.value ); + dialog.hide(); + }, + + // Some manipulations with client static pages. + staticFrame : framesetPath, + framesetPath : framesetPath, + iframePath : pluginPath + 'ciframe.html', + + // Styles defining. + schemaURI : pluginPath + 'wsc.css', + + userDictionaryName: editor.config.wsc_userDictionaryName, + customDictionaryName: editor.config.wsc_customDictionaryIds && editor.config.wsc_customDictionaryIds.split(","), + domainName: editor.config.wsc_domainName + + }); + + // Hide user message console (if application was loaded more then after timeout). + CKEDITOR.document.getById( errorBoxId ).setStyle( 'display', 'none' ); + CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'block' ); + } + + return { + title : editor.config.wsc_dialogTitle || editor.lang.spellCheck.title, + minWidth : 485, + minHeight : 380, + buttons : [ CKEDITOR.dialog.cancelButton ], + onShow : function() + { + var contentArea = this.getContentElement( 'general', 'content' ).getElement(); + contentArea.setHtml( pasteArea ); + contentArea.getChild( 2 ).setStyle( 'height', this._.contentSize.height + 'px' ); + + if ( typeof( window.doSpell ) != 'function' ) + { + // Load script. + CKEDITOR.document.getHead().append( + CKEDITOR.document.createElement( 'script', + { + attributes : + { + type : 'text/javascript', + src : wscCoreUrl + } + }) + ); + } + + var sData = editor.getData(); // Get the data to be checked. + CKEDITOR.document.getById( textareaId ).setValue( sData ); + + interval = window.setInterval( burnSpelling( this, errorMsg ), 250 ); + }, + onHide : function() + { + window.ooo = undefined; + window.int_framsetLoaded = undefined; + window.framesetLoaded = undefined; + window.is_window_opened = false; + }, + contents : [ + { + id : 'general', + label : editor.config.wsc_dialogTitle || editor.lang.spellCheck.title, + padding : 0, + elements : [ + { + type : 'html', + id : 'content', + html : '' + } + ] + } + ] + }; +}); + +// Expand the spell-check frame when dialog resized. (#6829) +CKEDITOR.dialog.on( 'resize', function( evt ) +{ + var data = evt.data, + dialog = data.dialog; + + if ( dialog._.name == 'checkspell' ) + { + var content = dialog.getContentElement( 'general', 'content' ).getElement(), + iframe = content && content.getChild( 2 ); + + iframe && iframe.setSize( 'height', data.height ); + iframe && iframe.setSize( 'width', data.width ); + } +}); diff --git a/_source/plugins/wsc/plugin.js b/_source/plugins/wsc/plugin.js new file mode 100644 index 0000000..3566dc9 --- /dev/null +++ b/_source/plugins/wsc/plugin.js @@ -0,0 +1,33 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Spell checker + */ + +// Register a plugin named "wsc". +CKEDITOR.plugins.add( 'wsc', +{ + requires : [ 'dialog' ], + init : function( editor ) + { + var commandName = 'checkspell'; + + var command = editor.addCommand( commandName, new CKEDITOR.dialogCommand( commandName ) ); + + // SpellChecker doesn't work in Opera and with custom domain + command.modes = { wysiwyg : ( !CKEDITOR.env.opera && !CKEDITOR.env.air && document.domain == window.location.hostname ) }; + + editor.ui.addButton( 'SpellChecker', + { + label : editor.lang.spellCheck.toolbar, + command : commandName + }); + CKEDITOR.dialog.add( commandName, this.path + 'dialogs/wsc.js' ); + } +}); + +CKEDITOR.config.wsc_customerId = CKEDITOR.config.wsc_customerId || '1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk' ; +CKEDITOR.config.wsc_customLoaderScript = CKEDITOR.config.wsc_customLoaderScript || null; diff --git a/_source/plugins/wysiwygarea/plugin.js b/_source/plugins/wysiwygarea/plugin.js new file mode 100644 index 0000000..6e4eacb --- /dev/null +++ b/_source/plugins/wysiwygarea/plugin.js @@ -0,0 +1,1351 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview The "wysiwygarea" plugin. It registers the "wysiwyg" editing + * mode, which handles the main editing area space. + */ + +(function() +{ + // Matching an empty paragraph at the end of document. + var emptyParagraphRegexp = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi; + + var notWhitespaceEval = CKEDITOR.dom.walker.whitespaces( true ); + + // Elements that could blink the cursor anchoring beside it, like hr, page-break. (#6554) + function nonEditable( element ) + { + return element.isBlockBoundary() && CKEDITOR.dtd.$empty[ element.getName() ]; + } + + + function onInsert( insertFunc ) + { + return function( evt ) + { + if ( this.mode == 'wysiwyg' ) + { + this.focus(); + + this.fire( 'saveSnapshot' ); + + insertFunc.call( this, evt.data ); + + // Save snaps after the whole execution completed. + // This's a workaround for make DOM modification's happened after + // 'insertElement' to be included either, e.g. Form-based dialogs' 'commitContents' + // call. + CKEDITOR.tools.setTimeout( function() + { + this.fire( 'saveSnapshot' ); + }, 0, this ); + } + }; + } + + function doInsertHtml( data ) + { + if ( this.dataProcessor ) + data = this.dataProcessor.toHtml( data ); + + if ( !data ) + return; + + // HTML insertion only considers the first range. + var selection = this.getSelection(), + range = selection.getRanges()[ 0 ]; + + if ( range.checkReadOnly() ) + return; + + // Opera: force block splitting when pasted content contains block. (#7801) + if ( CKEDITOR.env.opera ) + { + var path = new CKEDITOR.dom.elementPath( range.startContainer ); + if ( path.block ) + { + var nodes = CKEDITOR.htmlParser.fragment.fromHtml( data, false ).children; + for ( var i = 0, count = nodes.length; i < count; i++ ) + { + if ( nodes[ i ]._.isBlockLike ) + { + range.splitBlock( this.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ); + range.insertNode( range.document.createText( '' ) ); + range.select(); + break; + } + } + } + } + + if ( CKEDITOR.env.ie ) + { + var selIsLocked = selection.isLocked; + + if ( selIsLocked ) + selection.unlock(); + + var $sel = selection.getNative(); + + // Delete control selections to avoid IE bugs on pasteHTML. + if ( $sel.type == 'Control' ) + $sel.clear(); + else if ( selection.getType() == CKEDITOR.SELECTION_TEXT ) + { + // Due to IE bugs on handling contenteditable=false blocks + // (#6005), we need to make some checks and eventually + // delete the selection first. + + range = selection.getRanges()[ 0 ]; + var endContainer = range && range.endContainer; + + if ( endContainer && + endContainer.type == CKEDITOR.NODE_ELEMENT && + endContainer.getAttribute( 'contenteditable' ) == 'false' && + range.checkBoundaryOfElement( endContainer, CKEDITOR.END ) ) + { + range.setEndAfter( range.endContainer ); + range.deleteContents(); + } + } + + try + { + $sel.createRange().pasteHTML( data ); + } + catch (e) {} + + if ( selIsLocked ) + this.getSelection().lock(); + } + else + this.document.$.execCommand( 'inserthtml', false, data ); + + // Webkit does not scroll to the cursor position after pasting (#5558) + if ( CKEDITOR.env.webkit ) + { + selection = this.getSelection(); + selection.scrollIntoView(); + } + } + + function doInsertText( text ) + { + var selection = this.getSelection(), + mode = selection.getStartElement().hasAscendant( 'pre', true ) ? + CKEDITOR.ENTER_BR : this.config.enterMode, + isEnterBrMode = mode == CKEDITOR.ENTER_BR; + + var html = CKEDITOR.tools.htmlEncode( text.replace( /\r\n|\r/g, '\n' ) ); + + // Convert leading and trailing whitespaces into + html = html.replace( /^[ \t]+|[ \t]+$/g, function( match, offset, s ) + { + if ( match.length == 1 ) // one space, preserve it + return ' '; + else if ( !offset ) // beginning of block + return CKEDITOR.tools.repeat( ' ', match.length - 1 ) + ' '; + else // end of block + return ' ' + CKEDITOR.tools.repeat( ' ', match.length - 1 ); + } ); + + // Convert subsequent whitespaces into + html = html.replace( /[ \t]{2,}/g, function ( match ) + { + return CKEDITOR.tools.repeat( ' ', match.length - 1 ) + ' '; + } ); + + var paragraphTag = mode == CKEDITOR.ENTER_P ? 'p' : 'div'; + + // Two line-breaks create one paragraph. + if ( !isEnterBrMode ) + { + html = html.replace( /(\n{2})([\s\S]*?)(?:$|\1)/g, + function( match, group1, text ) + { + return '<'+paragraphTag + '>' + text + '</' + paragraphTag + '>'; + }); + } + + // One <br> per line-break. + html = html.replace( /\n/g, '<br>' ); + + // Compensate padding <br> for non-IE. + if ( !( isEnterBrMode || CKEDITOR.env.ie ) ) + { + html = html.replace( new RegExp( '<br>(?=</' + paragraphTag + '>)' ), function( match ) + { + return CKEDITOR.tools.repeat( match, 2 ); + } ); + } + + // Inline styles have to be inherited in Firefox. + if ( CKEDITOR.env.gecko || CKEDITOR.env.webkit ) + { + var path = new CKEDITOR.dom.elementPath( selection.getStartElement() ), + context = []; + + for ( var i = 0; i < path.elements.length; i++ ) + { + var tag = path.elements[ i ].getName(); + if ( tag in CKEDITOR.dtd.$inline ) + context.unshift( path.elements[ i ].getOuterHtml().match( /^<.*?>/) ); + else if ( tag in CKEDITOR.dtd.$block ) + break; + } + + // Reproduce the context by preceding the pasted HTML with opening inline tags. + html = context.join( '' ) + html; + } + + doInsertHtml.call( this, html ); + } + + function doInsertElement( element ) + { + var selection = this.getSelection(), + ranges = selection.getRanges(), + elementName = element.getName(), + isBlock = CKEDITOR.dtd.$block[ elementName ]; + + var selIsLocked = selection.isLocked; + + if ( selIsLocked ) + selection.unlock(); + + var range, clone, lastElement, bookmark; + + for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) + { + range = ranges[ i ]; + + if ( !range.checkReadOnly() ) + { + // Remove the original contents, merge splitted nodes. + range.deleteContents( 1 ); + + clone = !i && element || element.clone( 1 ); + + // If we're inserting a block at dtd-violated position, split + // the parent blocks until we reach blockLimit. + var current, dtd; + if ( isBlock ) + { + while ( ( current = range.getCommonAncestor( 0, 1 ) ) + && ( dtd = CKEDITOR.dtd[ current.getName() ] ) + && !( dtd && dtd [ elementName ] ) ) + { + // Split up inline elements. + if ( current.getName() in CKEDITOR.dtd.span ) + range.splitElement( current ); + // If we're in an empty block which indicate a new paragraph, + // simply replace it with the inserting block.(#3664) + else if ( range.checkStartOfBlock() + && range.checkEndOfBlock() ) + { + range.setStartBefore( current ); + range.collapse( true ); + current.remove(); + } + else + range.splitBlock(); + } + } + + // Insert the new node. + range.insertNode( clone ); + + // Save the last element reference so we can make the + // selection later. + if ( !lastElement ) + lastElement = clone; + } + } + + if ( lastElement ) + { + range.moveToPosition( lastElement, CKEDITOR.POSITION_AFTER_END ); + + // If we're inserting a block element immediatelly followed by + // another block element, the selection must move there. (#3100,#5436) + if ( isBlock ) + { + var next = lastElement.getNext( notWhitespaceEval ), + nextName = next && next.type == CKEDITOR.NODE_ELEMENT && next.getName(); + + // Check if it's a block element that accepts text. + if ( nextName && CKEDITOR.dtd.$block[ nextName ] && CKEDITOR.dtd[ nextName ]['#'] ) + range.moveToElementEditStart( next ); + } + } + + selection.selectRanges( [ range ] ); + + if ( selIsLocked ) + this.getSelection().lock(); + } + + // DOM modification here should not bother dirty flag.(#4385) + function restoreDirty( editor ) + { + if ( !editor.checkDirty() ) + setTimeout( function(){ editor.resetDirty(); }, 0 ); + } + + var isNotWhitespace = CKEDITOR.dom.walker.whitespaces( true ), + isNotBookmark = CKEDITOR.dom.walker.bookmark( false, true ); + + function isNotEmpty( node ) + { + return isNotWhitespace( node ) && isNotBookmark( node ); + } + + function isNbsp( node ) + { + return node.type == CKEDITOR.NODE_TEXT + && CKEDITOR.tools.trim( node.getText() ).match( /^(?: |\xa0)$/ ); + } + + function restoreSelection( selection ) + { + if ( selection.isLocked ) + { + selection.unlock(); + setTimeout( function() { selection.lock(); }, 0 ); + } + } + + function isBlankParagraph( block ) + { + return block.getOuterHtml().match( emptyParagraphRegexp ); + } + + isNotWhitespace = CKEDITOR.dom.walker.whitespaces( true ); + + // Gecko need a key event to 'wake up' the editing + // ability when document is empty.(#3864, #5781) + function activateEditing( editor ) + { + var win = editor.window, + doc = editor.document, + body = editor.document.getBody(), + bodyFirstChild = body.getFirst(), + bodyChildsNum = body.getChildren().count(); + + if ( !bodyChildsNum + || bodyChildsNum == 1 + && bodyFirstChild.type == CKEDITOR.NODE_ELEMENT + && bodyFirstChild.hasAttribute( '_moz_editor_bogus_node' ) ) + { + restoreDirty( editor ); + + // Memorize scroll position to restore it later (#4472). + var hostDocument = editor.element.getDocument(); + var hostDocumentElement = hostDocument.getDocumentElement(); + var scrollTop = hostDocumentElement.$.scrollTop; + var scrollLeft = hostDocumentElement.$.scrollLeft; + + // Simulating keyboard character input by dispatching a keydown of white-space text. + var keyEventSimulate = doc.$.createEvent( "KeyEvents" ); + keyEventSimulate.initKeyEvent( 'keypress', true, true, win.$, false, + false, false, false, 0, 32 ); + doc.$.dispatchEvent( keyEventSimulate ); + + if ( scrollTop != hostDocumentElement.$.scrollTop || scrollLeft != hostDocumentElement.$.scrollLeft ) + hostDocument.getWindow().$.scrollTo( scrollLeft, scrollTop ); + + // Restore the original document status by placing the cursor before a bogus br created (#5021). + bodyChildsNum && body.getFirst().remove(); + doc.getBody().appendBogus(); + var nativeRange = new CKEDITOR.dom.range( doc ); + nativeRange.setStartAt( body , CKEDITOR.POSITION_AFTER_START ); + nativeRange.select(); + } + } + + /** + * Auto-fixing block-less content by wrapping paragraph (#3190), prevent + * non-exitable-block by padding extra br.(#3189) + */ + function onSelectionChangeFixBody( evt ) + { + var editor = evt.editor, + path = evt.data.path, + blockLimit = path.blockLimit, + selection = evt.data.selection, + range = selection.getRanges()[0], + body = editor.document.getBody(), + enterMode = editor.config.enterMode; + + if ( CKEDITOR.env.gecko ) + { + activateEditing( editor ); + + // Ensure bogus br could help to move cursor (out of styles) to the end of block. (#7041) + var pathBlock = path.block || path.blockLimit, + lastNode = pathBlock && pathBlock.getLast( isNotEmpty ); + + // Check some specialities of the current path block: + // 1. It is really displayed as block; (#7221) + // 2. It doesn't end with one inner block; (#7467) + // 3. It doesn't have bogus br yet. + if ( pathBlock + && pathBlock.isBlockBoundary() + && !( lastNode && lastNode.type == CKEDITOR.NODE_ELEMENT && lastNode.isBlockBoundary() ) + && !pathBlock.is( 'pre' ) + && !pathBlock.getBogus() ) + { + editor.fire( 'updateSnapshot' ); + restoreDirty( editor ); + pathBlock.appendBogus(); + } + } + + // When we're in block enter mode, a new paragraph will be established + // to encapsulate inline contents right under body. (#3657) + if ( editor.config.autoParagraph !== false + && enterMode != CKEDITOR.ENTER_BR + && range.collapsed + && blockLimit.getName() == 'body' + && !path.block ) + { + editor.fire( 'updateSnapshot' ); + restoreDirty( editor ); + CKEDITOR.env.ie && restoreSelection( selection ); + + var fixedBlock = range.fixBlock( true, + editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ); + + // For IE, we should remove any filler node which was introduced before. + if ( CKEDITOR.env.ie ) + { + var first = fixedBlock.getFirst( isNotEmpty ); + first && isNbsp( first ) && first.remove(); + } + + // If the fixed block is actually blank and is already followed by an exitable blank + // block, we should revert the fix and move into the existed one. (#3684) + if ( isBlankParagraph( fixedBlock ) ) + { + var element = fixedBlock.getNext( isNotWhitespace ); + if ( element && + element.type == CKEDITOR.NODE_ELEMENT && + !nonEditable( element ) ) + { + range.moveToElementEditStart( element ); + fixedBlock.remove(); + } + else + { + element = fixedBlock.getPrevious( isNotWhitespace ); + if ( element && + element.type == CKEDITOR.NODE_ELEMENT && + !nonEditable( element ) ) + { + range.moveToElementEditEnd( element ); + fixedBlock.remove(); + } + } + } + + range.select(); + // Cancel this selection change in favor of the next (correct). (#6811) + evt.cancel(); + } + + // Browsers are incapable of moving cursor out of certain block elements (e.g. table, div, pre) + // at the end of document, makes it unable to continue adding content, we have to make this + // easier by opening an new empty paragraph. + var testRange = new CKEDITOR.dom.range( editor.document ); + testRange.moveToElementEditEnd( editor.document.getBody() ); + var testPath = new CKEDITOR.dom.elementPath( testRange.startContainer ); + if ( !testPath.blockLimit.is( 'body') ) + { + editor.fire( 'updateSnapshot' ); + restoreDirty( editor ); + CKEDITOR.env.ie && restoreSelection( selection ); + + var paddingBlock; + if ( enterMode != CKEDITOR.ENTER_BR ) + paddingBlock = body.append( editor.document.createElement( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ); + else + paddingBlock = body; + + if ( !CKEDITOR.env.ie ) + paddingBlock.appendBogus(); + } + } + + CKEDITOR.plugins.add( 'wysiwygarea', + { + requires : [ 'editingblock' ], + + init : function( editor ) + { + var fixForBody = ( editor.config.enterMode != CKEDITOR.ENTER_BR && editor.config.autoParagraph !== false ) + ? editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p' : false; + + var frameLabel = editor.lang.editorTitle.replace( '%1', editor.name ); + + var contentDomReadyHandler; + editor.on( 'editingBlockReady', function() + { + var mainElement, + iframe, + isLoadingData, + isPendingFocus, + frameLoaded, + fireMode; + + + // Support for custom document.domain in IE. + var isCustomDomain = CKEDITOR.env.isCustomDomain(); + + // Creates the iframe that holds the editable document. + var createIFrame = function( data ) + { + if ( iframe ) + iframe.remove(); + + var src = + 'document.open();' + + + // The document domain must be set any time we + // call document.open(). + ( isCustomDomain ? ( 'document.domain="' + document.domain + '";' ) : '' ) + + + 'document.close();'; + + // With IE, the custom domain has to be taken care at first, + // for other browers, the 'src' attribute should be left empty to + // trigger iframe's 'load' event. + src = + CKEDITOR.env.air ? + 'javascript:void(0)' : + CKEDITOR.env.ie ? + 'javascript:void(function(){' + encodeURIComponent( src ) + '}())' + : + ''; + + iframe = CKEDITOR.dom.element.createFromHtml( '<iframe' + + ' style="width:100%;height:100%"' + + ' frameBorder="0"' + + ' title="' + frameLabel + '"' + + ' src="' + src + '"' + + ' tabIndex="' + ( CKEDITOR.env.webkit? -1 : editor.tabIndex ) + '"' + + ' allowTransparency="true"' + + '></iframe>' ); + + // Running inside of Firefox chrome the load event doesn't bubble like in a normal page (#5689) + if ( document.location.protocol == 'chrome:' ) + CKEDITOR.event.useCapture = true; + + // With FF, it's better to load the data on iframe.load. (#3894,#4058) + iframe.on( 'load', function( ev ) + { + frameLoaded = 1; + ev.removeListener(); + + var doc = iframe.getFrameDocument(); + doc.write( data ); + + CKEDITOR.env.air && contentDomReady( doc.getWindow().$ ); + }); + + // Reset adjustment back to default (#5689) + if ( document.location.protocol == 'chrome:' ) + CKEDITOR.event.useCapture = false; + + mainElement.append( iframe ); + }; + + // The script that launches the bootstrap logic on 'domReady', so the document + // is fully editable even before the editing iframe is fully loaded (#4455). + contentDomReadyHandler = CKEDITOR.tools.addFunction( contentDomReady ); + var activationScript = + '<script id="cke_actscrpt" type="text/javascript" data-cke-temp="1">' + + ( isCustomDomain ? ( 'document.domain="' + document.domain + '";' ) : '' ) + + 'window.parent.CKEDITOR.tools.callFunction( ' + contentDomReadyHandler + ', window );' + + '</script>'; + + // Editing area bootstrap code. + function contentDomReady( domWindow ) + { + if ( !frameLoaded ) + return; + frameLoaded = 0; + + editor.fire( 'ariaWidget', iframe ); + + var domDocument = domWindow.document, + body = domDocument.body; + + // Remove this script from the DOM. + var script = domDocument.getElementById( "cke_actscrpt" ); + script && script.parentNode.removeChild( script ); + + body.spellcheck = !editor.config.disableNativeSpellChecker; + + var editable = !editor.readOnly; + + if ( CKEDITOR.env.ie ) + { + // Don't display the focus border. + body.hideFocus = true; + + // Disable and re-enable the body to avoid IE from + // taking the editing focus at startup. (#141 / #523) + body.disabled = true; + body.contentEditable = editable; + body.removeAttribute( 'disabled' ); + } + else + { + // Avoid opening design mode in a frame window thread, + // which will cause host page scrolling.(#4397) + setTimeout( function() + { + // Prefer 'contentEditable' instead of 'designMode'. (#3593) + if ( CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 + || CKEDITOR.env.opera ) + domDocument.$.body.contentEditable = editable; + else if ( CKEDITOR.env.webkit ) + domDocument.$.body.parentNode.contentEditable = editable; + else + domDocument.$.designMode = editable? 'off' : 'on'; + }, 0 ); + } + + editable && CKEDITOR.env.gecko && CKEDITOR.tools.setTimeout( activateEditing, 0, null, editor ); + + domWindow = editor.window = new CKEDITOR.dom.window( domWindow ); + domDocument = editor.document = new CKEDITOR.dom.document( domDocument ); + + editable && domDocument.on( 'dblclick', function( evt ) + { + var element = evt.data.getTarget(), + data = { element : element, dialog : '' }; + editor.fire( 'doubleclick', data ); + data.dialog && editor.openDialog( data.dialog ); + }); + + // Prevent automatic submission in IE #6336 + CKEDITOR.env.ie && domDocument.on( 'click', function( evt ) + { + var element = evt.data.getTarget(); + if ( element.is( 'input' ) ) + { + var type = element.getAttribute( 'type' ); + if ( type == 'submit' || type == 'reset' ) + evt.data.preventDefault(); + } + }); + + // Gecko/Webkit need some help when selecting control type elements. (#3448) + if ( !( CKEDITOR.env.ie || CKEDITOR.env.opera ) ) + { + domDocument.on( 'mousedown', function( ev ) + { + var control = ev.data.getTarget(); + if ( control.is( 'img', 'hr', 'input', 'textarea', 'select' ) ) + editor.getSelection().selectElement( control ); + } ); + } + + if ( CKEDITOR.env.gecko ) + { + domDocument.on( 'mouseup', function( ev ) + { + if ( ev.data.$.button == 2 ) + { + var target = ev.data.getTarget(); + + // Prevent right click from selecting an empty block even + // when selection is anchored inside it. (#5845) + if ( !target.getOuterHtml().replace( emptyParagraphRegexp, '' ) ) + { + var range = new CKEDITOR.dom.range( domDocument ); + range.moveToElementEditStart( target ); + range.select( true ); + } + } + } ); + } + + // Prevent the browser opening links in read-only blocks. (#6032) + domDocument.on( 'click', function( ev ) + { + ev = ev.data; + if ( ev.getTarget().is( 'a' ) && ev.$.button != 2 ) + ev.preventDefault(); + }); + + // Webkit: avoid from editing form control elements content. + if ( CKEDITOR.env.webkit ) + { + // Mark that cursor will right blinking (#7113). + domDocument.on( 'mousedown', function() { wasFocused = 1; } ); + // Prevent from tick checkbox/radiobox/select + domDocument.on( 'click', function( ev ) + { + if ( ev.data.getTarget().is( 'input', 'select' ) ) + ev.data.preventDefault(); + } ); + + // Prevent from editig textfield/textarea value. + domDocument.on( 'mouseup', function( ev ) + { + if ( ev.data.getTarget().is( 'input', 'textarea' ) ) + ev.data.preventDefault(); + } ); + } + + // IE standard compliant in editing frame doesn't focus the editor when + // clicking outside actual content, manually apply the focus. (#1659) + if ( editable && + CKEDITOR.env.ie && domDocument.$.compatMode == 'CSS1Compat' + || CKEDITOR.env.gecko + || CKEDITOR.env.opera ) + { + var htmlElement = domDocument.getDocumentElement(); + htmlElement.on( 'mousedown', function( evt ) + { + // Setting focus directly on editor doesn't work, we + // have to use here a temporary element to 'redirect' + // the focus. + if ( evt.data.getTarget().equals( htmlElement ) ) + { + if ( CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 ) + blinkCursor(); + focusGrabber.focus(); + } + } ); + } + + var focusTarget = CKEDITOR.env.ie ? iframe : domWindow; + focusTarget.on( 'blur', function() + { + editor.focusManager.blur(); + }); + + var wasFocused; + + focusTarget.on( 'focus', function() + { + var doc = editor.document; + + if ( editable && CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 ) + blinkCursor(); + else if ( CKEDITOR.env.opera ) + doc.getBody().focus(); + // Webkit needs focus for the first time on the HTML element. (#6153) + else if ( CKEDITOR.env.webkit ) + { + if ( !wasFocused ) + { + editor.document.getDocumentElement().focus(); + wasFocused = 1; + } + } + + editor.focusManager.focus(); + }); + + var keystrokeHandler = editor.keystrokeHandler; + // Prevent backspace from navigating off the page. + keystrokeHandler.blockedKeystrokes[ 8 ] = !editable; + keystrokeHandler.attach( domDocument ); + + if ( CKEDITOR.env.ie ) + { + domDocument.getDocumentElement().addClass( domDocument.$.compatMode ); + // Override keystrokes which should have deletion behavior + // on control types in IE . (#4047) + editable && domDocument.on( 'keydown', function( evt ) + { + var keyCode = evt.data.getKeystroke(); + + // Backspace OR Delete. + if ( keyCode in { 8 : 1, 46 : 1 } ) + { + var sel = editor.getSelection(), + control = sel.getSelectedElement(); + + if ( control ) + { + // Make undo snapshot. + editor.fire( 'saveSnapshot' ); + + // Delete any element that 'hasLayout' (e.g. hr,table) in IE8 will + // break up the selection, safely manage it here. (#4795) + var bookmark = sel.getRanges()[ 0 ].createBookmark(); + // Remove the control manually. + control.remove(); + sel.selectBookmarks( [ bookmark ] ); + + editor.fire( 'saveSnapshot' ); + + evt.data.preventDefault(); + } + } + } ); + + // PageUp/PageDown scrolling is broken in document + // with standard doctype, manually fix it. (#4736) + if ( domDocument.$.compatMode == 'CSS1Compat' ) + { + var pageUpDownKeys = { 33 : 1, 34 : 1 }; + domDocument.on( 'keydown', function( evt ) + { + if ( evt.data.getKeystroke() in pageUpDownKeys ) + { + setTimeout( function () + { + editor.getSelection().scrollIntoView(); + }, 0 ); + } + } ); + } + + // Prevent IE from leaving new paragraph after deleting all contents in body. (#6966) + editor.config.enterMode != CKEDITOR.ENTER_P + && domDocument.on( 'selectionchange', function() + { + var body = domDocument.getBody(), + range = editor.getSelection().getRanges()[ 0 ]; + + if ( body.getHtml().match( /^<p> <\/p>$/i ) + && range.startContainer.equals( body ) ) + { + // Avoid the ambiguity from a real user cursor position. + setTimeout( function () + { + range = editor.getSelection().getRanges()[ 0 ]; + if ( !range.startContainer.equals ( 'body' ) ) + { + body.getFirst().remove( 1 ); + range.moveToElementEditEnd( body ); + range.select( 1 ); + } + }, 0 ); + } + }); + } + + // Adds the document body as a context menu target. + if ( editor.contextMenu ) + editor.contextMenu.addTarget( domDocument, editor.config.browserContextMenuOnCtrl !== false ); + + setTimeout( function() + { + editor.fire( 'contentDom' ); + + if ( fireMode ) + { + editor.mode = 'wysiwyg'; + editor.fire( 'mode' ); + fireMode = false; + } + + isLoadingData = false; + + if ( isPendingFocus ) + { + editor.focus(); + isPendingFocus = false; + } + setTimeout( function() + { + editor.fire( 'dataReady' ); + }, 0 ); + + // IE, Opera and Safari may not support it and throw errors. + try { editor.document.$.execCommand( 'enableInlineTableEditing', false, !editor.config.disableNativeTableHandles ); } catch(e) {} + if ( editor.config.disableObjectResizing ) + { + try + { + editor.document.$.execCommand( 'enableObjectResizing', false, false ); + } + catch(e) + { + // For browsers in which the above method failed, we can cancel the resizing on the fly (#4208) + editor.document.getBody().on( CKEDITOR.env.ie ? 'resizestart' : 'resize', function( evt ) + { + evt.data.preventDefault(); + }); + } + } + + /* + * IE BUG: IE might have rendered the iframe with invisible contents. + * (#3623). Push some inconsequential CSS style changes to force IE to + * refresh it. + * + * Also, for some unknown reasons, short timeouts (e.g. 100ms) do not + * fix the problem. :( + */ + if ( CKEDITOR.env.ie ) + { + setTimeout( function() + { + if ( editor.document ) + { + var $body = editor.document.$.body; + $body.runtimeStyle.marginBottom = '0px'; + $body.runtimeStyle.marginBottom = ''; + } + }, 1000 ); + } + }, + 0 ); + } + + editor.addMode( 'wysiwyg', + { + load : function( holderElement, data, isSnapshot ) + { + mainElement = holderElement; + + if ( CKEDITOR.env.ie && CKEDITOR.env.quirks ) + holderElement.setStyle( 'position', 'relative' ); + + // The editor data "may be dirty" after this + // point. + editor.mayBeDirty = true; + + fireMode = true; + + if ( isSnapshot ) + this.loadSnapshotData( data ); + else + this.loadData( data ); + }, + + loadData : function( data ) + { + isLoadingData = true; + editor._.dataStore = { id : 1 }; + + var config = editor.config, + fullPage = config.fullPage, + docType = config.docType; + + // Build the additional stuff to be included into <head>. + var headExtra = + '<style type="text/css" data-cke-temp="1">' + + editor._.styles.join( '\n' ) + + '</style>'; + + !fullPage && ( headExtra = + CKEDITOR.tools.buildStyleHtml( editor.config.contentsCss ) + + headExtra ); + + var baseTag = config.baseHref ? '<base href="' + config.baseHref + '" data-cke-temp="1" />' : ''; + + if ( fullPage ) + { + // Search and sweep out the doctype declaration. + data = data.replace( /<!DOCTYPE[^>]*>/i, function( match ) + { + editor.docType = docType = match; + return ''; + }).replace( /<\?xml\s[^\?]*\?>/i, function( match ) + { + editor.xmlDeclaration = match; + return ''; + }); + } + + // Get the HTML version of the data. + if ( editor.dataProcessor ) + data = editor.dataProcessor.toHtml( data, fixForBody ); + + if ( fullPage ) + { + // Check if the <body> tag is available. + if ( !(/<body[\s|>]/).test( data ) ) + data = '<body>' + data; + + // Check if the <html> tag is available. + if ( !(/<html[\s|>]/).test( data ) ) + data = '<html>' + data + '</html>'; + + // Check if the <head> tag is available. + if ( !(/<head[\s|>]/).test( data ) ) + data = data.replace( /<html[^>]*>/, '$&<head><title></title></head>' ) ; + else if ( !(/<title[\s|>]/).test( data ) ) + data = data.replace( /<head[^>]*>/, '$&<title></title>' ) ; + + // The base must be the first tag in the HEAD, e.g. to get relative + // links on styles. + baseTag && ( data = data.replace( /<head>/, '$&' + baseTag ) ); + + // Inject the extra stuff into <head>. + // Attention: do not change it before testing it well. (V2) + // This is tricky... if the head ends with <meta ... content type>, + // Firefox will break. But, it works if we place our extra stuff as + // the last elements in the HEAD. + data = data.replace( /<\/head\s*>/, headExtra + '$&' ); + + // Add the DOCTYPE back to it. + data = docType + data; + } + else + { + data = + config.docType + + '<html dir="' + config.contentsLangDirection + '"' + + ' lang="' + ( config.contentsLanguage || editor.langCode ) + '">' + + '<head>' + + '<title>' + frameLabel + '</title>' + + baseTag + + headExtra + + '</head>' + + '<body' + ( config.bodyId ? ' id="' + config.bodyId + '"' : '' ) + + ( config.bodyClass ? ' class="' + config.bodyClass + '"' : '' ) + + '>' + + data + + '</html>'; + } + + // Distinguish bogus to normal BR at the end of document for Mozilla. (#5293). + if ( CKEDITOR.env.gecko ) + data = data.replace( /<br \/>(?=\s*<\/(:?html|body)>)/, '$&<br type="_moz" />' ); + + data += activationScript; + + + // The iframe is recreated on each call of setData, so we need to clear DOM objects + this.onDispose(); + createIFrame( data ); + }, + + getData : function() + { + var config = editor.config, + fullPage = config.fullPage, + docType = fullPage && editor.docType, + xmlDeclaration = fullPage && editor.xmlDeclaration, + doc = iframe.getFrameDocument(); + + var data = fullPage + ? doc.getDocumentElement().getOuterHtml() + : doc.getBody().getHtml(); + + // BR at the end of document is bogus node for Mozilla. (#5293). + if ( CKEDITOR.env.gecko ) + data = data.replace( /<br>(?=\s*(:?$|<\/body>))/, '' ); + + if ( editor.dataProcessor ) + data = editor.dataProcessor.toDataFormat( data, fixForBody ); + + // Reset empty if the document contains only one empty paragraph. + if ( config.ignoreEmptyParagraph ) + data = data.replace( emptyParagraphRegexp, function( match, lookback ) { return lookback; } ); + + if ( xmlDeclaration ) + data = xmlDeclaration + '\n' + data; + if ( docType ) + data = docType + '\n' + data; + + return data; + }, + + getSnapshotData : function() + { + return iframe.getFrameDocument().getBody().getHtml(); + }, + + loadSnapshotData : function( data ) + { + iframe.getFrameDocument().getBody().setHtml( data ); + }, + + onDispose : function() + { + if ( !editor.document ) + return; + + editor.document.getDocumentElement().clearCustomData(); + editor.document.getBody().clearCustomData(); + + editor.window.clearCustomData(); + editor.document.clearCustomData(); + + iframe.clearCustomData(); + + /* + * IE BUG: When destroying editor DOM with the selection remains inside + * editing area would break IE7/8's selection system, we have to put the editing + * iframe offline first. (#3812 and #5441) + */ + iframe.remove(); + }, + + unload : function( holderElement ) + { + this.onDispose(); + + editor.window = editor.document = iframe = mainElement = isPendingFocus = null; + + editor.fire( 'contentDomUnload' ); + }, + + focus : function() + { + var win = editor.window; + + if ( isLoadingData ) + isPendingFocus = true; + // Temporary solution caused by #6025, supposed be unified by #6154. + else if ( CKEDITOR.env.opera && editor.document ) + { + // Required for Opera when switching focus + // from another iframe, e.g. panels. (#6444) + var iframe = editor.window.$.frameElement; + iframe.blur(), iframe.focus(); + editor.document.getBody().focus(); + + editor.selectionChange(); + } + else if ( !CKEDITOR.env.opera && win ) + { + // AIR needs a while to focus when moving from a link. + CKEDITOR.env.air ? setTimeout( function () { win.focus(); }, 0 ) : win.focus(); + editor.selectionChange(); + } + } + }); + + editor.on( 'insertHtml', onInsert( doInsertHtml ) , null, null, 20 ); + editor.on( 'insertElement', onInsert( doInsertElement ), null, null, 20 ); + editor.on( 'insertText', onInsert( doInsertText ), null, null, 20 ); + // Auto fixing on some document structure weakness to enhance usabilities. (#3190 and #3189) + editor.on( 'selectionChange', onSelectionChangeFixBody, null, null, 1 ); + }); + + var titleBackup; + // Setting voice label as window title, backup the original one + // and restore it before running into use. + editor.on( 'contentDom', function() + { + var title = editor.document.getElementsByTag( 'title' ).getItem( 0 ); + title.data( 'cke-title', editor.document.$.title ); + editor.document.$.title = frameLabel; + }); + + editor.on( 'readOnly', function() + { + if ( editor.mode == 'wysiwyg' ) + { + // Symply reload the wysiwyg area. It'll take care of read-only. + var wysiwyg = editor.getMode(); + wysiwyg.loadData( wysiwyg.getData() ); + } + }); + + // IE>=8 stricts mode doesn't have 'contentEditable' in effect + // on element unless it has layout. (#5562) + if ( CKEDITOR.document.$.documentMode >= 8 ) + { + editor.addCss( 'html.CSS1Compat [contenteditable=false]{ min-height:0 !important;}' ); + + var selectors = []; + for ( var tag in CKEDITOR.dtd.$removeEmpty ) + selectors.push( 'html.CSS1Compat ' + tag + '[contenteditable=false]' ); + editor.addCss( selectors.join( ',' ) + '{ display:inline-block;}' ); + } + // Set the HTML style to 100% to have the text cursor in affect (#6341) + else if ( CKEDITOR.env.gecko ) + { + editor.addCss( 'html { height: 100% !important; }' ); + editor.addCss( 'img:-moz-broken { -moz-force-broken-image-icon : 1; width : 24px; height : 24px; }' ); + } + + /* #3658: [IE6] Editor document has horizontal scrollbar on long lines + To prevent this misbehavior, we show the scrollbar always */ + /* #6341: The text cursor must be set on the editor area. */ + /* #6632: Avoid having "text" shape of cursor in IE7 scrollbars.*/ + editor.addCss( 'html { _overflow-y: scroll; cursor: text; *cursor:auto;}' ); + // Use correct cursor for these elements + editor.addCss( 'img, input, textarea { cursor: default;}' ); + + // Switch on design mode for a short while and close it after then. + function blinkCursor( retry ) + { + if ( editor.readOnly ) + return; + + CKEDITOR.tools.tryThese( + function() + { + editor.document.$.designMode = 'on'; + setTimeout( function() + { + editor.document.$.designMode = 'off'; + if ( CKEDITOR.currentInstance == editor ) + editor.document.getBody().focus(); + }, 50 ); + }, + function() + { + // The above call is known to fail when parent DOM + // tree layout changes may break design mode. (#5782) + // Refresh the 'contentEditable' is a cue to this. + editor.document.$.designMode = 'off'; + var body = editor.document.getBody(); + body.setAttribute( 'contentEditable', false ); + body.setAttribute( 'contentEditable', true ); + // Try it again once.. + !retry && blinkCursor( 1 ); + }); + } + + // Create an invisible element to grab focus. + if ( CKEDITOR.env.gecko || CKEDITOR.env.ie || CKEDITOR.env.opera ) + { + var focusGrabber; + editor.on( 'uiReady', function() + { + focusGrabber = editor.container.append( CKEDITOR.dom.element.createFromHtml( + // Use 'span' instead of anything else to fly under the screen-reader radar. (#5049) + '<span tabindex="-1" style="position:absolute;" role="presentation"></span>' ) ); + + focusGrabber.on( 'focus', function() + { + editor.focus(); + } ); + + editor.focusGrabber = focusGrabber; + } ); + editor.on( 'destroy', function() + { + CKEDITOR.tools.removeFunction( contentDomReadyHandler ); + focusGrabber.clearCustomData(); + delete editor.focusGrabber; + } ); + } + + // Disable form elements editing mode provided by some browers. (#5746) + editor.on( 'insertElement', function ( evt ) + { + var element = evt.data; + if ( element.type == CKEDITOR.NODE_ELEMENT + && ( element.is( 'input' ) || element.is( 'textarea' ) ) ) + { + // We should flag that the element was locked by our code so + // it'll be editable by the editor functions (#6046). + if ( !element.isReadOnly() ) + element.data( 'cke-editable', element.hasAttribute( 'contenteditable' ) ? 'true' : '1' ); + element.setAttribute( 'contentEditable', false ); + } + }); + + } + }); + + // Fixing Firefox 'Back-Forward Cache' break design mode. (#4514) + if ( CKEDITOR.env.gecko ) + { + (function() + { + var body = document.body; + + if ( !body ) + window.addEventListener( 'load', arguments.callee, false ); + else + { + var currentHandler = body.getAttribute( 'onpageshow' ); + body.setAttribute( 'onpageshow', ( currentHandler ? currentHandler + ';' : '') + + 'event.persisted && (function(){' + + 'var allInstances = CKEDITOR.instances, editor, doc;' + + 'for ( var i in allInstances )' + + '{' + + ' editor = allInstances[ i ];' + + ' doc = editor.document;' + + ' if ( doc )' + + ' {' + + ' doc.$.designMode = "off";' + + ' doc.$.designMode = "on";' + + ' }' + + '}' + + '})();' ); + } + } )(); + + } +})(); + +/** + * Disables the ability of resize objects (image and tables) in the editing + * area. + * @type Boolean + * @default false + * @example + * config.disableObjectResizing = true; + */ +CKEDITOR.config.disableObjectResizing = false; + +/** + * Disables the "table tools" offered natively by the browser (currently + * Firefox only) to make quick table editing operations, like adding or + * deleting rows and columns. + * @type Boolean + * @default true + * @example + * config.disableNativeTableHandles = false; + */ +CKEDITOR.config.disableNativeTableHandles = true; + +/** + * Disables the built-in words spell checker if browser provides one.<br /><br /> + * + * <strong>Note:</strong> Although word suggestions provided by browsers (natively) will not appear in CKEditor's default context menu, + * users can always reach the native context menu by holding the <em>Ctrl</em> key when right-clicking if {@link CKEDITOR.config.browserContextMenuOnCtrl} + * is enabled or you're simply not using the context menu plugin. + * + * @type Boolean + * @default true + * @example + * config.disableNativeSpellChecker = false; + */ +CKEDITOR.config.disableNativeSpellChecker = true; + +/** + * Whether the editor must output an empty value ("") if it's contents is made + * by an empty paragraph only. + * @type Boolean + * @default true + * @example + * config.ignoreEmptyParagraph = false; + */ +CKEDITOR.config.ignoreEmptyParagraph = true; + +/** + * Fired when data is loaded and ready for retrieval in an editor instance. + * @name CKEDITOR.editor#dataReady + * @event + */ + +/** + * Whether automatically create wrapping blocks around inline contents inside document body, + * this helps to ensure the integrality of the block enter mode. + * <strong>Note:</strong> Changing the default value might introduce unpredictable usability issues. + * @name CKEDITOR.config.autoParagraph + * @since 3.6 + * @type Boolean + * @default true + * @example + * config.autoParagraph = false; + */ + +/** + * Fired when some elements are added to the document + * @name CKEDITOR.editor#ariaWidget + * @event + * @param {Object} element The element being added + */ diff --git a/_source/plugins/xml/plugin.js b/_source/plugins/xml/plugin.js new file mode 100644 index 0000000..2a6fd36 --- /dev/null +++ b/_source/plugins/xml/plugin.js @@ -0,0 +1,170 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @fileOverview Defines the {@link CKEDITOR.xml} class, which represents a + * loaded XML document. + */ + +(function() +{ + CKEDITOR.plugins.add( 'xml', {}); + + /** + * Represents a loaded XML document. + * @constructor + * @param {object|string} xmlObjectOrData A native XML (DOM document) object or + * a string containing the XML definition to be loaded. + * @example + * var xml = <b>new CKEDITOR.xml( '<books><book title="My Book" /></books>' )</b>; + */ + CKEDITOR.xml = function( xmlObjectOrData ) + { + var baseXml = null; + + if ( typeof xmlObjectOrData == 'object' ) + baseXml = xmlObjectOrData; + else + { + var data = ( xmlObjectOrData || '' ).replace( / /g, '\xA0' ); + if ( window.DOMParser ) + baseXml = (new DOMParser()).parseFromString( data, 'text/xml' ); + else if ( window.ActiveXObject ) + { + try { baseXml = new ActiveXObject( 'MSXML2.DOMDocument' ); } + catch(e) + { + try { baseXml = new ActiveXObject( 'Microsoft.XmlDom' ); } catch(e) {} + } + + if ( baseXml ) + { + baseXml.async = false; + baseXml.resolveExternals = false; + baseXml.validateOnParse = false; + baseXml.loadXML( data ); + } + } + } + + /** + * The native XML (DOM document) used by the class instance. + * @type object + * @example + */ + this.baseXml = baseXml; + }; + + CKEDITOR.xml.prototype = + { + /** + * Get a single node from the XML document, based on a XPath query. + * @param {String} xpath The XPath query to execute. + * @param {Object} [contextNode] The XML DOM node to be used as the context + * for the XPath query. The document root is used by default. + * @returns {Object} A XML node element or null if the query has no results. + * @example + * // Create the XML instance. + * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' ); + * // Get the first <item> node. + * var itemNode = <b>xml.selectSingleNode( 'list/item' )</b>; + * // Alert "item". + * alert( itemNode.nodeName ); + */ + selectSingleNode : function( xpath, contextNode ) + { + var baseXml = this.baseXml; + + if ( contextNode || ( contextNode = baseXml ) ) + { + if ( CKEDITOR.env.ie || contextNode.selectSingleNode ) // IE + return contextNode.selectSingleNode( xpath ); + else if ( baseXml.evaluate ) // Others + { + var result = baseXml.evaluate( xpath, contextNode, null, 9, null); + return ( result && result.singleNodeValue ) || null; + } + } + + return null; + }, + + /** + * Gets a list node from the XML document, based on a XPath query. + * @param {String} xpath The XPath query to execute. + * @param {Object} [contextNode] The XML DOM node to be used as the context + * for the XPath query. The document root is used by default. + * @returns {ArrayLike} An array containing all matched nodes. The array will + * be empty if the query has no results. + * @example + * // Create the XML instance. + * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' ); + * // Get the first <item> node. + * var itemNodes = xml.selectSingleNode( 'list/item' ); + * // Alert "item" twice, one for each <item>. + * for ( var i = 0 ; i < itemNodes.length ; i++ ) + * alert( itemNodes[i].nodeName ); + */ + selectNodes : function( xpath, contextNode ) + { + var baseXml = this.baseXml, + nodes = []; + + if ( contextNode || ( contextNode = baseXml ) ) + { + if ( CKEDITOR.env.ie || contextNode.selectNodes ) // IE + return contextNode.selectNodes( xpath ); + else if ( baseXml.evaluate ) // Others + { + var result = baseXml.evaluate( xpath, contextNode, null, 5, null); + + if ( result ) + { + var node; + while ( ( node = result.iterateNext() ) ) + nodes.push( node ); + } + } + } + + return nodes; + }, + + /** + * Gets the string representation of hte inner contents of a XML node, + * based on a XPath query. + * @param {String} xpath The XPath query to execute. + * @param {Object} [contextNode] The XML DOM node to be used as the context + * for the XPath query. The document root is used by default. + * @returns {String} The textual representation of the inner contents of + * the node or null if the query has no results. + * @example + * // Create the XML instance. + * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' ); + * // Alert "<item id="test1" /><item id="test2" />". + * alert( xml.getInnerXml( 'list' ) ); + */ + getInnerXml : function( xpath, contextNode ) + { + var node = this.selectSingleNode( xpath, contextNode ), + xml = []; + if ( node ) + { + node = node.firstChild; + while ( node ) + { + if ( node.xml ) // IE + xml.push( node.xml ); + else if ( window.XMLSerializer ) // Others + xml.push( ( new XMLSerializer() ).serializeToString( node ) ); + + node = node.nextSibling; + } + } + + return xml.length ? xml.join( '' ) : null; + } + }; +})(); diff --git a/_source/skins/kama/dialog.css b/_source/skins/kama/dialog.css new file mode 100644 index 0000000..0fb40fd --- /dev/null +++ b/_source/skins/kama/dialog.css @@ -0,0 +1,943 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/* Restore the dialog visibility */ +body .cke_dialog +{ + visibility: visible; +} + +/* Force Gecko to consider table as positioned */ +.cke_skin_kama table.cke_dialog.cke_browser_gecko +{ + display:block; +} + +.cke_skin_kama .cke_dialog_body +{ + z-index: 1; + border: solid 1px #ddd; + padding: 5px; + background-color: #fff; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + + /* 'cke_dialog' element has been fixed positioned in all but IE6, while we + need it to be positioned to hold e.g. close button. */ + position: relative; + _position: static; +} + +.cke_skin_kama .cke_dialog_tl, +.cke_skin_kama .cke_dialog_tr, +.cke_skin_kama .cke_dialog_tc, +.cke_skin_kama .cke_dialog_bl, +.cke_skin_kama .cke_dialog_br, +.cke_skin_kama .cke_dialog_bc, +.cke_skin_kama .cke_dialog_ml, +.cke_skin_kama .cke_dialog_mr +{ + display:none; +} + +.cke_skin_kama .cke_dialog_title +{ + font-weight: bold; + font-size: 14px; + padding: 3px 3px 8px; + cursor: move; + position: relative; + border-bottom: 1px solid #eee; +} + +.cke_skin_kama .cke_browser_iequirks .cke_dialog_title, +.cke_skin_kama .cke_browser_ie6 .cke_dialog_title, +.cke_skin_kama .cke_browser_ie7 .cke_dialog_title +{ + margin-bottom: 22px; +} + +.cke_skin_kama .cke_browser_iequirks.cke_single_page .cke_dialog_title, +.cke_skin_kama .cke_browser_ie6.cke_single_page .cke_dialog_title, +.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_title +{ + margin-bottom: 10px; +} + +.cke_skin_kama .cke_dialog_contents +{ + background-color: #ebebeb; + border: solid 1px #fff; + border-bottom: none; + overflow: auto; + padding: 17px 10px 5px 10px; + -moz-border-radius-topleft: 5px; + -moz-border-radius-topright: 5px; + -webkit-border-top-left-radius: 5px; + -webkit-border-top-right-radius: 5px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + margin-top: 22px; +} + +.cke_skin_kama .cke_dialog_footer +{ + text-align: right; + background-color: #ebebeb; + border: solid 1px #fff; + border-bottom: none; + -moz-border-radius-bottomleft: 5px; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-left-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} + +.cke_skin_kama .cke_rtl .cke_dialog_footer +{ + text-align: left; +} + +.cke_skin_kama .cke_dialog_footer .cke_resizer +{ + margin-top: 20px; +} +.cke_skin_kama .cke_browser_iequirks .cke_dialog_footer .cke_resizer, +.cke_skin_kama .cke_browser_ie6 .cke_dialog_footer .cke_resizer +{ + margin-top: 27px; +} + +/* tabs */ + +.cke_skin_kama .cke_dialog_tabs +{ + height: 23px; + display: inline-block; + _display: block; + margin-left:10px; + margin-right:10px; + margin-top: 11px; + position: absolute; + z-index: 2; +} + +.cke_skin_kama .cke_browser_iequirks .cke_dialog_tabs, +.cke_skin_kama .cke_browser_ie6 .cke_dialog_tabs, +.cke_skin_kama .cke_browser_ie7 .cke_dialog_tabs +{ + top: 33px; +} + +.cke_skin_kama .cke_rtl .cke_dialog_tabs +{ + right: 10px; +} + +.cke_skin_kama a.cke_dialog_tab, +.cke_skin_kama a:link.cke_dialog_tab, +.cke_skin_kama a:active.cke_dialog_tab, +.cke_skin_kama a:hover.cke_dialog_tab, +.cke_skin_kama a:visited.cke_dialog_tab +{ + background-image: url(images/sprites.png); + background-repeat: repeat-x; + background-position: 0 -1323px; + + background-color: #ebebeb; + height: 14px; + padding: 4px 8px; + display: inline-block; + cursor: pointer; + +} + +/* Gecko 1.8 layout workaround. */ +.cke_skin_kama .cke_browser_gecko18 a.cke_dialog_tab, +.cke_skin_kama .cke_browser_gecko18 a:link.cke_dialog_tab, +.cke_skin_kama .cke_browser_gecko18 a:active.cke_dialog_tab, +.cke_skin_kama .cke_browser_gecko18 a:hover.cke_dialog_tab, +.cke_skin_kama .cke_browser_gecko18 a:visited.cke_dialog_tab +{ + display: inline; + position: relative; + top: 6px; +} + +.cke_skin_kama a:hover.cke_dialog_tab +{ + background-color: #f1f1e3; +} + +.cke_skin_kama .cke_hc a:hover.cke_dialog_tab +{ + padding: 2px 6px !important; + border-width: 3px; +} + +.cke_skin_kama a.cke_dialog_tab_selected, +.cke_skin_kama a:link.cke_dialog_tab_selected, +.cke_skin_kama a:active.cke_dialog_tab_selected, +.cke_skin_kama a:hover.cke_dialog_tab_selected, +.cke_skin_kama a:visited.cke_dialog_tab_selected +{ + background-position: 0 -1279px; + cursor: default; +} + +.cke_skin_kama .cke_hc a.cke_dialog_tab_selected, +.cke_skin_kama .cke_hc a:link.cke_dialog_tab_selected, +.cke_skin_kama .cke_hc a:active.cke_dialog_tab_selected, +.cke_skin_kama .cke_hc a:hover.cke_dialog_tab_selected, +.cke_skin_kama .cke_hc a:visited.cke_dialog_tab_selected +{ + padding: 2px 6px !important; + border-width: 3px; +} + +/* single_page */ + +.cke_skin_kama .cke_single_page .cke_dialog_tabs +{ + display: none; +} + +.cke_skin_kama .cke_single_page .cke_dialog_contents +{ + padding-top: 5px; + margin-top: 10px; +} + +/* IE7 + IE quirks */ +.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_contents +{ + margin-top: 0px; + position: relative; + margin-bottom: -22px; +} + +.cke_skin_kama .cke_dialog_ui_vbox table, +.cke_skin_kama .cke_dialog_ui_hbox table +{ + margin: auto; +} + +.cke_skin_kama .cke_dialog_ui_vbox_child +{ + padding: 5px 0px; +} + +.cke_skin_kama input.cke_dialog_ui_input_text, +.cke_skin_kama input.cke_dialog_ui_input_password +{ + background-color: white; + border: none; + padding: 0px; + width: 100%; + height: 14px; +} + +.cke_skin_kama div.cke_dialog_ui_input_text, +.cke_skin_kama div.cke_dialog_ui_input_password +{ + background-color: white; + border: 1px solid #a0a0a0; + padding: 1px 0px; + /* IE6/Quirks - make sure the content does not overflow (#7321) */ + _width: 99.9%; +} + +/* Opera/IE doesn't leave enough padding in text input for cursor to blink in RTL. (#6087) */ +.cke_skin_kama .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text, +.cke_skin_kama .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text, +.cke_skin_kama .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password, +.cke_skin_kama .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password +{ + padding-right: 2px; +} + +/* Compensate the padding added above on container. */ +.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text, +.cke_skin_kama .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text, +.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password, +.cke_skin_kama .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password +{ + padding-left: 2px; +} + +.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child, +.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child, +.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first, +.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last +{ + padding-right: 2px !important; +} + +.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text { + padding-right: 1px; +} + +.cke_skin_kama .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text, +.cke_skin_kama .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password +{ + border-width: 0px; +} + +.cke_skin_kama .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text, +.cke_skin_kama .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password +{ + border-width: 1px; +} + +.cke_skin_kama textarea.cke_dialog_ui_input_textarea +{ + background-color: white; + border: none; + padding: 0px; + width: 100%; + /* + * IE6 BUG: Scrollbars in textareas can overflow even if the outer DIV is set to overflow:hidden. + * So leave 1% width for the scrollbar. In most situations the 1% isn't noticeable by users. + */ + _width: 99%; + overflow: auto; + resize: none; +} + +.cke_skin_kama div.cke_dialog_ui_input_textarea +{ + background-color: white; + border: 1px solid #a0a0a0; + padding: 1px 0px; +} + +.cke_skin_kama div.cke_disabled .cke_dialog_ui_labeled_content * +{ + background-color : #a0a0a0; + cursor : default; +} + +/* RTL + IE6: Input overflows dialog element. (#7321) */ +.cke_skin_kama .cke_rtl .cke_dialog_ui_labeled_content +{ + _width: 95%; +} + +.cke_skin_kama .cke_dialog_ui_hbox +{ + width: 100%; +} + +.cke_skin_kama .cke_dialog_ui_hbox_first, +.cke_skin_kama .cke_dialog_ui_hbox_child, +.cke_skin_kama .cke_dialog_ui_hbox_last +{ + vertical-align: top; +} + +.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_first, +.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_child +{ + padding-right: 10px; +} + +.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_first, +.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_child +{ + padding-left: 10px; +} + +/* button */ + +.cke_skin_kama a.cke_dialog_ui_button +{ + border-collapse: separate; + cursor: default; + + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + background: transparent url(images/sprites.png) repeat-x scroll 0 -1069px; + _background: none; + padding: 5px 0; + text-align: center; +} + +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button +{ + padding: 0; +} + +/* IE6 buttons. */ +.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span +{ + width: 70px; +} + +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span, +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span +{ + width: 100px; +} + +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span, +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span, +.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span +{ + padding: 5px 15px; + text-align: center; + color: #3b3b1f; + background: #53D9F0 none; + display: inline-block; + cursor: default; +} +/* END IE6 buttons. */ + +.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button span.cke_dialog_ui_button +{ + margin: 0; +} +.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button +{ + display:inline-block; + padding-top: 3px; + padding-bottom: 2px; + margin: 2px 0; +} + +.cke_skin_kama a.cke_dialog_ui_button_ok span, +.cke_skin_kama a.cke_dialog_ui_button_cancel span +{ + width:60px; + padding-right: 20px; + padding-left: 20px; +} + +.cke_skin_kama a.cke_dialog_ui_button_ok +{ + background-position: 0 -1143px; +} + +.cke_skin_kama a.cke_dialog_ui_button_ok span +{ + background: transparent url(images/sprites.png) no-repeat scroll right -1219px; +} + +.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_ok span +{ + background-position: left -1219px; +} + +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span, +.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span +{ + background-color: #B8E834; + margin-right: 0; +} + +.cke_skin_kama a.cke_dialog_ui_button_cancel +{ + background-position: 0 -1104px; +} + +.cke_skin_kama a.cke_dialog_ui_button_cancel span +{ + background: transparent url(images/sprites.png) no-repeat scroll right -1245px; +} + +.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_cancel span +{ + background-position: left -1245px; +} + +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span, +.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span +{ + background-color: #F65D20; +} + +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span, +.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span, +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span, +.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span +{ + background-image: none; +} + +.cke_skin_kama span.cke_dialog_ui_button +{ + padding: 2px 10px; + text-align: center; + color: #222; + display: inline-block; + cursor: default; + min-width: 60px; + +margin: 2px 0; /* IE7 */ +} + +/* Gecko 1.8 does not support display: inline-block */ +.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button +{ + display: block; +} + +.cke_skin_kama a.cke_dialog_ui_button span.cke_disabled +{ + border: #898980 1px solid; + color: #5e5e55; + background-color: #c5c5b3; +} + +.cke_skin_kama a:hover.cke_dialog_ui_button, +.cke_skin_kama a:focus.cke_dialog_ui_button, +.cke_skin_kama a:active.cke_dialog_ui_button +{ + background-position: 0 -1179px; +} + +.cke_skin_kama .cke_hc a:hover.cke_dialog_ui_button, +.cke_skin_kama .cke_hc a:focus.cke_dialog_ui_button, +.cke_skin_kama .cke_hc a:active.cke_dialog_ui_button +{ + border-width: 2px; +} + +/* Skip hover effect on IE6 */ +.cke_skin_kama .cke_browser_iequirks a:hover.cke_dialog_ui_button span, +.cke_skin_kama .cke_browser_iequirks a:focus.cke_dialog_ui_button span, +.cke_skin_kama .cke_browser_iequirks a:active.cke_dialog_ui_button span, +.cke_skin_kama .cke_browser_ie6 a:hover.cke_dialog_ui_button span, +.cke_skin_kama .cke_browser_ie6 a:focus.cke_dialog_ui_button span, +.cke_skin_kama .cke_browser_ie6 a:active.cke_dialog_ui_button span +{ + background-image: none; + background: #F7A922; +} + +.cke_skin_kama .cke_dialog_footer_buttons +{ + display: inline-table; + margin-right: 12px; + margin-left: 12px; + width: auto; + position: relative; +} + +/* IE7 needs position static #6806 */ +.cke_skin_kama .cke_browser_ie7 .cke_dialog_footer_buttons +{ + position: static; +} + +/* Gecko 1.8 does not support for display: inline-table */ +.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons +{ + display: inline; +} + +.cke_skin_kama .cke_dialog_footer_buttons span.cke_dialog_ui_button +{ + margin: 7px 0; + text-align: center; +} + +/* Firefox2 buttons */ +.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons a.cke_dialog_ui_button +{ + display: block; + padding: 0; +} + +.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button +{ + padding-bottom: 5px; + padding-top: 6px; + margin-bottom: 0; +} + +.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_ok .cke_dialog_ui_button +{ + background-position: right -1214px; +} + +.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_cancel .cke_dialog_ui_button +{ + background-position: right -1242px; +} +/* END Firefox2 buttons */ + +.cke_skin_kama .cke_browser_ie9.cke_rtl .cke_dialog_footer_buttons td +{ + padding-left: 2px; +} + +.cke_skin_kama strong +{ + font-weight: bold; +} + +/* close_button */ + +.cke_skin_kama .cke_dialog .cke_dialog_body .cke_dialog_close_button +{ + background-image: url(images/sprites.png); + background-repeat: no-repeat; + background-position: 0 -1022px; + position: absolute; + cursor: pointer; + text-align: center; + height: 20px; + width: 20px; + top: 5px; + /* IE 6 */ + _background-image: url(images/sprites_ie6.png); +} + +.cke_skin_kama .cke_dialog_close_button span +{ + display: none; +} + +.cke_skin_kama .cke_dialog_close_button:hover +{ + background-position: 0 -1045px; +} + +.cke_skin_kama .cke_ltr .cke_dialog_close_button +{ + right: 10px; +} + +.cke_skin_kama .cke_browser_ie8.cke_rtl .cke_dialog_close_button +{ + left: 8px; +} + +.cke_skin_kama .cke_rtl .cke_dialog_close_button +{ + left: 10px; +} + +.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button +{ + left: 16px; + top: 0; +} + +/*.cke_skin_kama .cke_browser_ie6.cke_rtl .cke_dialog_close_button +{ + left: 16px; +}*/ + +/* IE7 + IE quirks */ +.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button +{ + position: absolute; + left: 10px; + top: 5px; +} + +/* IE7 + IE quirks */ +.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_footer +{ + margin-top: 22px; +} + +.cke_skin_kama .cke_browser_ie6 .cke_dialog_close_button, +.cke_skin_kama .cke_browser_iequirks .cke_dialog_close_button +{ + top: 7px; +} + +/* IE7 + IE quirks */ +.cke_skin_kama .cke_browser_ie7.cke_ltr .cke_dialog_close_button +{ + margin-top: 0; +} + +.cke_skin_kama .cke_dialog_ui_input_select +{ + border: 1px solid #a0a0a0; + background-color: white; +} + +.cke_skin_kama .cke_dialog_ui_input_file +{ + width: 100%; + height: 25px; +} + +/* + * Some utility CSS classes for dialog authors. + */ +.cke_skin_kama .cke_dialog .cke_dark_background +{ + background-color: #eaead1; +} + +.cke_skin_kama .cke_dialog .cke_hand +{ + cursor: pointer; +} + +.cke_skin_kama .cke_dialog .cke_centered +{ + text-align: center; +} + +.cke_skin_kama .cke_dialog a.cke_btn_reset +{ + float: right; + background-position: 0 -32px; + background-image: url(images/mini.gif); + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: 1px none; + font-size: 1px; +} + +.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_reset +{ + float: left; +} + +.cke_skin_kama .cke_dialog a.cke_btn_locked, +.cke_skin_kama .cke_dialog a.cke_btn_unlocked +{ + float: left; + background-position: 0 0; + background-image: url(images/mini.gif); + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: none 1px; + font-size: 1px; +} +.cke_skin_kama .cke_dialog a.cke_btn_locked .cke_icon +{ + display:none; +} + +.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_locked, +.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_unlocked +{ + float: right; +} + +.cke_skin_kama .cke_dialog a.cke_btn_unlocked +{ + background-position: 0 -16px; + background-image: url(images/mini.gif); +} + +.cke_skin_kama .cke_dialog .cke_btn_over +{ + border: outset 1px; + cursor: pointer; +} + +.cke_skin_kama .cke_dialog .ImagePreviewBox +{ + border : 2px ridge black; + overflow : scroll; + height : 200px; + width : 300px; + padding : 2px; + background-color : white; +} + +.cke_skin_kama .cke_dialog .ImagePreviewBox table td { + white-space: normal; +} + +/* Fix iframedialog's height doesn't stretch to 100% #4863.*/ +.cke_skin_kama .cke_browser_iequirks .cke_dialog_page_contents +{ + _position: absolute; +} + +.cke_skin_kama .cke_dialog .ImagePreviewLoader +{ + position: absolute; + white-space : normal; + overflow : hidden; + height : 160px; + width : 230px; + margin : 2px; + padding : 2px; + opacity : 0.9; + filter : alpha(opacity=90); + + background-color : #e4e4e4; +} + +.cke_skin_kama .cke_dialog .FlashPreviewBox +{ + white-space : normal; + border : 2px ridge black; + overflow : auto; + height : 160px; + width : 390px; + padding : 2px; + background-color : white; +} + +.cke_skin_kama .cke_dialog .cke_pastetext +{ + width: 346px; + height: 170px; +} + +.cke_skin_kama .cke_dialog .cke_pastetext textarea +{ + width: 340px; + height: 170px; + resize: none; +} + +.cke_skin_kama .cke_dialog iframe.cke_pasteframe +{ + width: 346px; + height: 130px; + background-color: white; + border: 1px solid black; +} + +.cke_skin_kama .cke_dialog .cke_dark_background +{ + text-align : center; + background-color: #eaead1; + font-size : 14px; +} + +.cke_skin_kama .cke_dialog .cke_light_background +{ + text-align : center; + background-color: #ffffbe; +} + +.cke_skin_kama .cke_dialog .cke_hand +{ + cursor: pointer; +} + +.cke_skin_kama .cke_disabled +{ + color: #a0a0a0; +} + +/* High Contrast Mode */ + +.cke_skin_kama .cke_hc .cke_dialog_title, +.cke_skin_kama .cke_hc .cke_dialog_tabs, +.cke_skin_kama .cke_hc .cke_dialog_contents, +.cke_skin_kama .cke_hc .cke_dialog_footer +{ + border-left: 1px solid; + border-right: 1px solid; +} + +.cke_skin_kama .cke_hc .cke_dialog_title +{ + border-top: 1px solid; +} + +.cke_skin_kama .cke_hc .cke_dialog_footer +{ + border-bottom: 1px solid; +} + +.cke_skin_kama .cke_hc .cke_dialog_close_button span +{ + display: inline; + cursor: pointer; + font-weight: bold; + position: relative; + top: 3px; +} + +.cke_skin_kama .cke_dialog_body .cke_label +{ + display: none; +} + +.cke_skin_kama .cke_dialog_body label.cke_required +{ + font-weight: bold; +} + +.cke_skin_kama .cke_hc .cke_dialog_body .cke_label +{ + display: inline; + cursor: inherit; +} + +.cke_skin_kama .cke_hc a.cke_btn_locked, +.cke_skin_kama .cke_hc a.cke_btn_unlocked, +.cke_skin_kama .cke_hc a.cke_btn_reset +{ + border-style: solid; + float: left; + width: auto; + height: auto; + padding: 0 2px; +} + +.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_locked, +.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_unlocked, +.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_reset +{ + float: right; +} +.cke_skin_kama .cke_hc a.cke_btn_locked .cke_icon +{ + display:inline; +} + +.cke_skin_kama a.cke_smile img +{ + /* IE6 does not support transparent borders */ + border: 2px solid #eaead1; +} + +.cke_skin_kama a.cke_smile:focus img, +.cke_skin_kama a.cke_smile:active img, +.cke_skin_kama a.cke_smile:hover img +{ + border-color: #C7C78F; +} + +.cke_skin_kama .cke_hc .cke_dialog_tabs a, +.cke_skin_kama .cke_hc .cke_dialog_footer a +{ + opacity: 1.0; + filter: alpha(opacity=100); + border: 1px solid white; +} + +.cke_skin_kama .cke_hc .ImagePreviewBox +{ + width: 260px; +} + +/** + * Styles specific to "cellProperties" dialog. + */ + +.cke_skin_kama .cke_dialog_contents a.colorChooser +{ + display:block; + margin-top:6px; + margin-left: 10px; + width: 80px; +} + +.cke_skin_kama .cke_rtl .cke_dialog_contents a.colorChooser +{ + margin-right: 10px; +} diff --git a/_source/skins/kama/editor.css b/_source/skins/kama/editor.css new file mode 100644 index 0000000..672f55e --- /dev/null +++ b/_source/skins/kama/editor.css @@ -0,0 +1,25 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@import url("reset.css"); +@import url("mainui.css"); +@import url("panel.css"); +@import url("toolbar.css"); +@import url("menu.css"); +@import url("richcombo.css"); +@import url("elementspath.css"); +@import url("icons.css"); +@import url("presets.css"); + +/* Restore the container visibility */ +html .cke_skin_kama +{ + visibility: inherit; +} + +html.cke_skin_kama_container +{ + visibility: visible; +} diff --git a/_source/skins/kama/elementspath.css b/_source/skins/kama/elementspath.css new file mode 100644 index 0000000..60f6c6a --- /dev/null +++ b/_source/skins/kama/elementspath.css @@ -0,0 +1,73 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@media print +{ + .cke_path + { + display: none; + } +} + +.cke_skin_kama .cke_path +{ + display: inline-block; + float: left; + margin-top: 5px; +} + +.cke_skin_kama .cke_rtl .cke_path +{ + float: right; +} + +.cke_shared .cke_skin_kama .cke_path +{ + _width: 100%; + margin: 0 0 5px; +} + +.cke_skin_kama .cke_path a, +.cke_skin_kama .cke_path .cke_empty +{ + display: inline-block; + float: left; + padding: 1px 4px 0; + color: #60676a; + cursor: default; +} + +.cke_skin_kama .cke_path .cke_empty +{ + visibility: hidden; +} + +.cke_skin_kama .cke_rtl .cke_path a, +.cke_skin_kama .cke_rtl .cke_path cke_empty +{ + float: right; +} + +.cke_skin_kama .cke_path a:hover, +.cke_skin_kama .cke_path a:focus, +.cke_skin_kama .cke_path a:active /* IE */ +{ + background-color: #dff1ff; + padding: 1px 4px 0; + outline: none; + color : #000; +} + +/* IE double float-right workaround */ +.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path a, +.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path .cke_empty +{ + float: none; +} + +.cke_skin_kama .cke_path .cke_label +{ + display: none; +} diff --git a/_source/skins/kama/icons.css b/_source/skins/kama/icons.css new file mode 100644 index 0000000..9dfa35b --- /dev/null +++ b/_source/skins/kama/icons.css @@ -0,0 +1,366 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_kama .cke_button_source .cke_icon +{ + background-position: 0 0; +} + +.cke_skin_kama .cke_button_docProps .cke_icon +{ + background-position: 0 -16px; +} + +.cke_skin_kama .cke_button_newpage .cke_icon +{ + background-position: 0 -48px; +} + +.cke_skin_kama .cke_button_preview .cke_icon +{ + background-position: 0 -64px; +} + +.cke_skin_kama .cke_button_cut .cke_icon +{ + background-position: 0 -96px; +} + +.cke_skin_kama .cke_button_copy .cke_icon +{ + background-position: 0 -112px; +} + +.cke_skin_kama .cke_button_paste .cke_icon +{ + background-position: 0 -128px; +} + +.cke_skin_kama .cke_button_pastetext .cke_icon +{ + background-position: 0 -144px; +} + +.cke_skin_kama .cke_button_find .cke_icon +{ + background-position: 0 -240px; +} + +.cke_skin_kama .cke_button_replace .cke_icon +{ + background-position: 0 -256px; +} + +.cke_skin_kama .cke_button_selectAll .cke_icon +{ + background-position: 0 -272px; +} + +.cke_skin_kama .cke_button_removeFormat .cke_icon +{ + background-position: 0 -288px; +} + +.cke_skin_kama .cke_button_bold .cke_icon +{ + background-position: 0 -304px; +} + +.cke_skin_kama .cke_button_italic .cke_icon +{ + background-position: 0 -320px; +} + +.cke_skin_kama .cke_button_underline .cke_icon +{ + background-position: 0 -336px; +} + +.cke_skin_kama .cke_button_strike .cke_icon +{ + background-position: 0 -352px; +} + +.cke_skin_kama .cke_button_subscript .cke_icon +{ + background-position: 0 -368px; +} + +.cke_skin_kama .cke_button_superscript .cke_icon +{ + background-position: 0 -384px; +} + +.cke_skin_kama .cke_button_table .cke_icon +{ + background-position: 0 -608px; +} + +.cke_skin_kama .cke_button_horizontalrule .cke_icon +{ + background-position: 0 -624px; +} + +.cke_skin_kama .cke_button_smiley .cke_icon +{ + background-position: 0 -640px; +} + +.cke_skin_kama .cke_button_link .cke_icon +{ + background-position: 0 -528px; +} + +.cke_skin_kama .cke_button_unlink .cke_icon +{ + background-position: 0 -544px; +} + +.cke_skin_kama .cke_button_anchor .cke_icon +{ + background-position: 0 -560px; +} + +.cke_skin_kama .cke_button_image .cke_icon +{ + background-position: 0 -576px; +} + +.cke_skin_kama .cke_button_flash .cke_icon +{ + background-position: 0 -592px; +} + +.cke_skin_kama .cke_button_specialchar .cke_icon +{ + background-position: 0 -656px; +} + +.cke_skin_kama .cke_button_pagebreak .cke_icon +{ + background-position: 0 -672px; +} + +.cke_skin_kama .cke_button_print .cke_icon +{ + background-position: 0 -176px; +} + +.cke_skin_kama .cke_button_checkspell .cke_icon, +.cke_skin_kama .cke_button_scayt .cke_icon +{ + background-position: 0 -192px; +} + +.cke_skin_kama .cke_button_pagebreak .cke_icon +{ + background-position: 0 -672px; +} + +.cke_skin_kama .cke_button_textcolor .cke_icon +{ + background-position: 0 -704px; +} + +.cke_skin_kama .cke_button_bgcolor .cke_icon +{ + background-position: 0 -720px; +} + +.cke_skin_kama .cke_button_form .cke_icon +{ + background-position: 0 -752px; +} + +.cke_skin_kama .cke_button_checkbox .cke_icon +{ + background-position: 0 -768px; +} + +.cke_skin_kama .cke_button_radio .cke_icon +{ + background-position: 0 -784px; +} + +.cke_skin_kama .cke_button_textfield .cke_icon +{ + background-position: 0 -800px; +} + +.cke_skin_kama .cke_button_textarea .cke_icon +{ + background-position: 0 -816px; +} +.cke_skin_kama .cke_button_showblocks .cke_icon +{ + background-position: 0 -1136px; +} + +.cke_skin_kama .cke_button_select .cke_icon +{ + background-position: 0 -832px; +} + +.cke_skin_kama .cke_button_button .cke_icon +{ + background-position: 0 -848px; +} + +.cke_skin_kama .cke_button_imagebutton .cke_icon +{ + background-position: 0 -864px; +} + +.cke_skin_kama .cke_button_hiddenfield .cke_icon +{ + background-position: 0 -880px; +} + +.cke_skin_kama .cke_button_undo .cke_icon +{ + background-position: 0 -208px; +} + +.cke_skin_kama .cke_rtl .cke_button_undo .cke_icon +{ + background-position: 0 -224px; +} + +.cke_skin_kama .cke_button_redo .cke_icon +{ + background-position: 0 -224px; +} + +.cke_skin_kama .cke_rtl .cke_button_redo .cke_icon +{ + background-position: 0 -208px; +} + +.cke_skin_kama .cke_button_templates .cke_icon +{ + background-position: 0 -80px; +} + +.cke_skin_kama .cke_button_numberedlist .cke_icon +{ + background-position: 0 -400px; +} + +.cke_skin_kama .cke_button_bulletedlist .cke_icon +{ + background-position: 0 -416px; +} + +.cke_skin_kama .cke_mixed_dir_content .cke_button_numberedlist .cke_icon +{ + background-position: 0 -1217px; +} + +.cke_skin_kama .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon +{ + background-position: 0 -1233px; +} + +.cke_skin_kama .cke_button_outdent .cke_icon +{ + background-position: 0 -432px; +} + +.cke_skin_kama .cke_button_indent .cke_icon +{ + background-position: 0 -448px; +} + +.cke_skin_kama .cke_mixed_dir_content .cke_button_indent .cke_icon +{ + background-position: 0 -1265px; +} + +.cke_skin_kama .cke_mixed_dir_content .cke_button_outdent .cke_icon +{ + background-position: 0 -1249px; +} + +.cke_skin_kama .cke_button_justifyleft .cke_icon +{ + background-position: 0 -464px; +} + +.cke_skin_kama .cke_button_justifycenter .cke_icon +{ + background-position: 0 -480px; +} + +.cke_skin_kama .cke_button_justifyright .cke_icon +{ + background-position: 0 -496px; +} + +.cke_skin_kama .cke_button_justifyblock .cke_icon +{ + background-position: 0 -512px; +} + +.cke_skin_kama .cke_button_blockquote .cke_icon +{ + background-position: 0 -1152px; +} + +.cke_skin_kama .cke_button_creatediv .cke_icon +{ + background-position: 0 -1168px; +} +.cke_skin_kama .cke_button_editdiv .cke_icon +{ + background-position: 0 -1184px; +} +.cke_skin_kama .cke_button_removediv .cke_icon +{ + background-position: 0 -1200px; +} + +.cke_skin_kama .cke_button_flash .cke_icon +{ + background-position: 0 -592px; +} + +.cke_skin_kama .cke_button_pastefromword .cke_icon +{ + background-position: 0 -160px; +} + +.cke_skin_kama .cke_button_save .cke_icon +{ + background-position: 0 -32px; +} + +.cke_skin_kama .cke_button_about .cke_icon +{ + background-position: 0 -736px; +} + +.cke_skin_kama .cke_button_maximize .cke_icon +{ + background-position: 0 -1040px; +} + +.cke_skin_kama .cke_button_editdiv .cke_icon +{ + background-position: 0 -1184px; +} + +.cke_skin_kama .cke_button_bidirtl .cke_icon +{ + background-position: 0 -1072px; +} + +.cke_skin_kama .cke_button_bidiltr .cke_icon +{ + background-position: 0 -1056px; +} +.cke_skin_kama .cke_button_iframe .cke_icon +{ + background-position: 0 -1279px; +} diff --git a/_source/skins/kama/icons.png b/_source/skins/kama/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3bf195dd35a2dd3773a5cae7e4712a1133a5d5 GIT binary patch literal 5598 zcmX|FbySq!)4#imfaKDPfD0%gAt}w0i!@S#APoW{upkJMOGrzobeAAVs^k}0QE5a% zX({Pgy5qOLf4rY_?wPrB=bq=8JI|f@oG1F8?p;c<Yh(ZbN)2^Y1A>GDaD|!_M$n>? z6PpO)Dn|XmQvk^6{tXDo$U+c|>~`t~Iso`_0e}qy;P{dtR{-!924K}10GTuZnA~4k zeOChj2JUGap$U7gtEgOF0+>z*0}7RvmUfuL4-*zPT(@OI7Kn+7QA$Y_kpX5&fodwi z%K5hH*Y4=(7%zXmk;ywAvC8cl!{izymzvty+1aHdWMjm9{mso`83?Pga*r`_a$092 zBOo%}(@$7G4W#PehB{|&&P-OhxK$}A7yt1g_2^uA5%u5npLOa?*h}mk|FUgIOL326 zs>2R)9`tt_S=sF*Rze6#!<$=MJA;k62nEHn%S$~EVj@HYez~(P1T*eLSy)tbXvrUQ z6X-c~%yqOeqEHCu&HkmurXF8f-TvE}nns(}lg|)aF(!HjD$P~CNQcQL6V=t#4N7#+ z;o)KH#8^q`dz`uy5bM1-hn}6mmLn0wQXNgWDgAZJ#D=}Onbj+zqL&wtrLo~VI@(cD zQAejIV%pje4hz*O!<|iv#l^*`QQGqN?=LQ(hx<#uzCJyf*n<Q{5ly{Y>ga<42{xs> zi*s}$+Ugvts-B*n85tRV6^_g(-J|_oDu(Q>g}M6220p$XfW1^sQxPiA3gyzPsK`g% zy9cDDOG@5vZPJj6Ra5a<b1JLm=jWWA5|K!@(#y+}sr;muQ<M(bsHmv8iAF2x>t9}8 zvR%)cnVCsVO{MUt`&d_ZoO#1bgz_SZD6@5c&=qi6Er@7o-B8ttN`1?7_wL2TMQbbW zO+^ibq$DP_%IkT^lk}ncrluCIJ{|L&8%<A+kB?cDl&+_Ykg653nSXd&*>IT-blcX^ zPvf1OoOZ@DB(sL5Rz{m%8T<PBrZ%qS=H}ANDIBC;@9yr-Gev$IJrZ%6kk!+(_l!a5 znG1bdVvtq2d;<*%3It+e<u!d57YB6a<1E*bU&JLrm46&(-GJTw>FgQsyU289d;TW+ zE{XQ9{r&yhS~0Y0Eo9mQiEq+r<>VxMmn0JFnGAauS7sMC&Z;WPOG``3%HHGg_^qw2 z?d|QIot@p?-Mzg%!rp^}145RMj*bYioSdATo}LoE)${XnLhOX&3X&fvA>09omw~P! zP+S~+1OTm;hN_a0@A!JwsXyIFdWRK<ac!cj0J&^C;t54NwowY=IZNv)qM<Q9sXjhA z!M);|`E0^%qQ%eW!+Np5-G_{Hu^nkxoS?ayC^XBOE{gK1E>48|Hcjl9+lS@@w}rvs zW0r%+r|Duh9@Iq(f9(I9fb7CMeqNGa`cG!5*XcI2^CRSOjj2F8Smee{xVO5JFvl42 zC2JN}CMc&W@g>)WQCw+n`k~Y-nwH;p6Y1*eI`mgXpB}A`Dl7;yPrD`4&<>pyc5`w0 zD$Ov9k<wNYVEn)j*aZa4WfC2XLJByQBfFJ2lhkk0Hr!Adm^IR-%tFgNnYugRM9(oi zFfgE0z7eIS@BR;3k=;PKWn<&*SV7sWFz{jz_nXieTEG95wY24}^Yt}{mJQOLl-6wz zyAYIlV&pMxv?`}{)%P@F3IaN<al#aVI4F#`J>rX5J9ZXC*dYAAL7UtVO+*;&5pQ{J z2y3h=XHuO6nG=wQR#dnG9CX!>DDRWbUzOF#JqeA9;^N{LkZq-_KYvFsppz6CU)Y*_ zT+qvxWoY`qMwPe5`q4B+mOPT}qFCiw@YY`q*`qz2hI!+cFp_wHQ_^?a+HyyQf2j;3 zkzSTL>QUjDR&e?*JrF$GDHP9||KoT!mFLg3R?ojGi^vwgqvgws4s-XG@4qhTA}~j) zN7GmGTok3wrg>CxTUVuMP&QV~Z8lOiR(zr(@$W`xMa*#`(l-e&Ci0srk2i*sffa|a zQ{n5RZ>ZRqmdYb*icO+7NFt;v0%hGd4EZYTm3=FYRPpA&GlIo8YLj1!Ao^Bh%Q!26 z)<s<$%_k@@{z(^eZ2t!{bMtq>CwtCh+8>fb?hlFU7!p@h45C(hSB5&`(>urev!w&q z)0{a|*vWpRbGL=Vl`)8!-kPThk`u+8NLI1FgJ&AsA<lL6PhZdwAK{+3Gm+h(0LXx! z<Kr==sBdsZ0i+FP6I11aB0Px;vz~TLEH-nzj9<f_8ehsXVVCTJtq7Rj_Q5XAFJFBA zoRl<=XI(h<eHuL7Nx(KLCqa@Lk7Q<MmJWKeG_No{sURxq8E_etli)Kgulv$x`K49s z>0*dV<R7^Fn`_U`cWl_cRR?VK%Y5k|X~WmgxJ{m;kVsM%!3Gwe+_`z!Y=RlpH}eR( zfPlPj?@~5>wI0S%hc`!3f14)}Cir!j)2^hbh9)FnLdSZkT5B^Z*P1GOfL&ZRu9K4D zYoZ-{c%mkCQR%c=MKWFTF)MqKXCV<K`W=UA2wwnIk)6hXkA%zDc>7*XHY!7Lp!09& zgFM3_8Kogbh#>SDaLRbAk4Z@eIxro>kGhnEUU>&SAajRO`~_5JzL+zE8>R!}m@Ch= zb&vmhmy@RB85h)ggg<6(ow_%~TZVDz(qKJrXyCoB&QQ>Sn9j<_I{u8e&i6%S7#7wa zpbhEM0dVSmkOUWO`{3+;muJ$qXVeNU?)X7G+Us#f0dGvFd3ey5A#pW&bpF_kbYUSK zy&xyb&rElCBE5wz_t*0J{8Ko9Q^lHavjc3KO`D<~b<H0D_PuD<D8c@o7ftxRhLSaU zo6x|b@^b#kPYDoZL2Xi-n4G|HcqqkJYwPJ-%2@WVqmGa!n1eNv<P<>~dDW(e_*h$- zqY-d~OED0Ua@bNXktx3)e5T0o9uLnckl_HF-<y25=g@U8e|sglGB4b*cvDs!6U!uI zX~;?Zgz<H&V=X=dCY5e)DcbeLAJ4Tye&tBs&9|Ms>+J6v>v070MyJ!e4?-fD3m&g( zED8~KR)7Bdc~87s!RTIOL`1;=uM$ORE(N-fpuCSd>Eg)^pnXaE&9+p9lq1||Gwd3g zl+ZERp5QfAv%@E{gtB+jA7FDPwE9v3C^EQ3WkAuJimf0bkw70HZaF3mzfoH1Hh6cu zYk0s~Y#_{rd2|QQwb-vGZP)vKE6>~PWn&I|^3_Gzh=l+Q#qh)2LOXQ_tlR@Rrl^j2 zj}z#&Z<c!k?6eR%Hku-Z6O=QkLr9i<mlFXKtLxjoxcTkTI}%9N2?%appVdY_2N5`r z@|6?W^2O2Fp}^E~w6vYhlA}>D<<yU5eKlEMEp(_UO%gjzC|Bn^jdPlFs6Eo2lZQ7r zMb{Ay)Wzu7RYZF75_7nnWU_MtwX&76^-Er+SEP7xSJwv|=m-0U>Ta_IXH<~!_STYV zU%ZHOm0-h(>%11#Z!-|qCvJ#%_IKm-+_9G=?I7Ui#bS445xgLi7a6b5tJC=~=AE&m zR$OCOr}ntVhi_@IalP-^2nM-g+f}n5fBF$8xB7{Vl&MfCb7L@`--<UcF(foJ6k6Y$ zmxm2?usT*&3dw{@0-Pvco(#bD^q8tk!g^9H9^rJ9MAIpVCN~w?;iN=>J@FfY1R4U` zEkf*R+2LEq0bPph&#U@VwNC(4Dt*r;ZoB2PJ?$xgb`>S<9S5Ltg$S!8iQ3#ZXmb0P zcF~-uTxt-2Iz8R*ifqOuQP+zhIg8AJWIu@@Eh!NcQlFft2<%uf%~Ni19EsYs0S!}b zl3JvFBv-m_9@PB*3;?~TPL=rZyy)ncwXN`M_tA!=Y^h>JYGO&$(M%W}-4YJ~jJjub zn0q6whb?*vzuwu-^?XsXz>^V^NFRwKhP~wx6c=i|UStinP}j+Z?Vc~z@PRyX2#`P> zu@`(2WtSA7wmy)M`v-xI#mMbLegd{L2$hkBjPIYW^?Oec&+;6Ai29(<wFKB7@Az-7 z7y@hGwVz8Sm1l!H3q7eqW@P|}DJUu``b+)!=(~T)?P4(P(ZS~PzHzOx<GOik5FMbH zzvJ?IZ+|M#d!ajdtsjaF_1PHzRDQhKjJIs`Y=Hu@+d}`)y8qjCqAvRiDE=?&wRycO z6uVc^HdQA`304%@vvv7fT3V=iS01pY(latLj!%}AmGO}?+&4BhX26f?KXf|QiuJkp z&i|dC><aJ2tR&vApy4eX<YCYRk8Kwp2BxagcejYJZ4CVP=`Vj7%KFIZ-w0{896SD6 z;_^6#nfK3jA5Tt@A6iGGqNLilWAsN`+qF%V+4zbo`jO#bdZyS2IeqQE$B%71JUnU& zB_$5Wb%nJYACee#*$&=v(h3pTY(uQs+1ce9)<UO5^QD9(Bp&hG!bBXC5adp`L~%<u z4FNl2?5&i(($l6stVQ#8hO50*v#X=yZl+|<=D%n&)RShC^>UUbY1!Nx`rz#rvAFNo zLS>@%=Wchm{hT0wxq!ba=O02QG~XrGQ`lu~`H8fTt`*N9Et@9Rrj7@-DCBmcOh!51 z=~j(2I}LFDjw!YzXnUyDu#vTv;FZB*E&LMr&k}!rIPHE6+*<>u0}lmj1AwW$PgP&e z^Tl)l6Q-Nf_`}n4^7A&UWk=H|_2-3U%1s!v>Ld$~typsMbtL1PmXO@@wL{p^3b6t# zsIn_EnuW}}W9lRAOyR4(Zb;blcnQEgU(>xS<KCa^W8@L!HB6O-id$@A7*1q)L=vDT zo$1!QzB=^0i<IE^Ooab_xCo4hPTST2O*BF8fJVRKREuF`Vql;FpiM&PHXlD9pKWS< z(BA9Xg74)_Ovwz}O|jjC1^&}6TS%VM_FP{qQ&k-#Q!kqCeO*`qr<u#=-shE^J!7o9 zS<btXUswBRMfxiu4t_1&tY!xHGd;tXOca9MrkcDlryKP{a0N*nLohV?kQg|u{jLa` zFqx#X&hh_D0lFn}pMHEcR_lP7aINnnCe3uLzxAc3U;eO`;+nrjrP@`w`oHGWp8J}4 zauR2yuP!RV<@nBFje@4TpAk0L&-ZA+vA&1_at-+`x!+~-jb%U1=ko;y56c`}(Fs=h zf=^XA<GCCh9bMKaX%%z7j{DCMd0ta{vGBZK;_c8&qk&VbsQaJ)o=@wP)c;+MC3+Mn z&%!!_Wmac(<t+Y{DuB%-<p|obh3?KLs6r)a4D@(JUvAsdaR`~Qi+FvE4yS!pa8lap zwQ-;PiR;em2%?l20#zfjq97J-H)l~NwR?g%OT02d6H2K9R1mTk@bWZKp2MrrQwhHL zCMCr$$CNgGAH>3y|E97yuK$s8Nr?RhI2$1x5tQ&yK}BJ1A}v6tU46wU?wt_KPn;V} zSJ139SX13T8Hv=?GWpdLv_D>Dtaa1qrAYfPb?o4$H28lKB%Qnl$TG|3x@*a!W$0Q3 zNu<2k$?*+aF`}qZH$D%jhLW<h;w_H-v^TVz^gh2|6W!7ghik)2iK;k*LN!S3Ai~^f z@7q$P*u$%th}S7!yS1uD<=#p2ICQ4Dd8MeOSUz7-WSv0LiAqBfjX%0Xy@f~Kr_o-e z`$c5)q!g>El4d=K74oPq`}oFsPKb*bh8Pl3r^QiK$G{)zkX|9W=S*s+eeE|b%;qaQ zR$ab5&1m|TV(6QcYx_k;z{R`Rr})9N)>u||I&~S2yX8ifwS5M64Zn6|C_~cI$D<5V z_M;3Oj)D=h_e#rTCd`yMGTRi>dU=u0Yx4gOuU@^PWLaed;EihGz;XnoxA&)I4zkZD zzX;aV)yD(#dZPDC2r!Sm-um94I=`;2?%-@b!Rqr_8x&xh%Bd|{PJXKBp^n?ggPQ@c z4tXNEyFv9}ha>y?4FI?XS47B)hV1CoOF9TQOO`Ng+nu$lw*CTby_8v;PnpS<XE;ka zBm!r<NEV+1BO}w9u8~%^IAaVH(6vjN#mP!T0R8yIhG79c7!IoNI;}q>VuoO&2O`Mx zHx0v@{r&j(Xn}CeW3ST}+pVWgm_tK(1_p4?JPFrK5>}JYWEsduLxdf#K-jUeo_$4n zG0Q7m+Y>4uiFcd6emn$Ig9C0&77W_S7-Mv~i(C!^!b)W#R4<;TTAr*SeJ+{7F!A|C zgjTWr-r%oXH%*x0M!8qr*@@Qj>GY_5pq`1bs7zBJo)X3Owyf;jD~-bK=Snq2p<chn z;f(>upPmqpgdqXf=)zjA+i6CGqA!h+hBSB@KeNclsmk-XMw&vJN9Y;4p)S#M4Xhpy zk00Mf?c|SA0Q%>jc^@$RSV_8?6=r2Kq+)FBO_sOTv}vRb%i85CEFSS(>d0DD@mW-< zU-<e!)rYYrY%M9F*F#3|=yKn#>A4HDg~EGC`)_I%OvnbY(ev}PtXS_r;xN?{^&OHY z&Oc<VAKJP)>~P&KM_f9-;^9DAtI=`0xuAqxuJjRe8{a{ZW5QnbE-iR18jadEggZo8 ztS9GkR)fIFFi0x-Pq;~gldpI<fm0iqrS@Fm<+}wQVhbKZpi+-#9g821v7`*__5N_! z2(s*z_8+5MI-9#nGPuAXYyIslc*fKm#Q{qrBhd3?^6DkqVaT@^Jj80n{Q6WcmQR+m zmf98`{;@#V#XSv;3y}`=_1IhWyx!83b+=0HKNq)5-LS^2=1&i;C8DeQ&HNqaFm{@t za_ml^nef-QdYU?&$m&n_+^6PD6VpvcOEb0KyGYVjAdh`~eCl20te=>&Ur(4&l#8GD za8A^1pWi+zvO$~_@rLrO;1|4laEYM(^`5QLBy{i4QvloSZ86f!g>9ZEu+|I9A2%;s zvZPL1vNVG9<$nYTm1LUbB#bXRQ?FgkGZkPo9OWl5r;qw>OHEph)<-<DkL`fLCu{?& zj*_4N{^7GD@1ToB@Q;d@g0m^pi(8QKQJB?UpTRdakvWg;@U&48d)RNcX!isyy*Q7= z8k6)Nt(CGP=|^>JHjk)-Qfa-|c9M>z^64f6j;nK|=Om-_E+<X>4wS@@tUbK12;{cJ zWz5kxQQPSC{_~3IvAp=9M?<;#Fs{h%3q%@aT5Y_7w1dBAZ@56hD+_bkollY7CMa!^ z&Va|g>C|r%cWl~NmkJy6->v+-JzMGS7Icoe98gJ+Z^z|yWK@aYxx+T;9rb4h;}G~X zxU{vkb!Cf#Z$-hgI!JDKc(43xUtbjr#3dwHHF_4eDj2m^9hU&$e|V7l*v$=vSap{P zfCKBZuiNr{Fa0aCNcSTNl_CKD$4XoRzk<YD?em*$MEaky=<O#YBpmLhyu`cy*_}N) zYH(UDVQLqOORzfPdTKS{OhlrWBL^1`t-^G<G+Rxz_#e6f>?I43rJn0kPD!~+_{Rh^ M(7LLX%GRO(1EjHd^8f$< literal 0 HcmV?d00001 diff --git a/_source/skins/kama/icons_rtl.png b/_source/skins/kama/icons_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..83eee28ac79d5e00e8ec9136ba491c8c0a2b8352 GIT binary patch literal 5600 zcmX|_by!s2)4=a8ARPh%N-P3Ox4_cfB@H5qGy($By+|l4A=2H5fJk>NjkN4n7U}Np zWr^SV{_%dE=iZrf&YeHz+?hLbPt<cARZ^lyL;wJgs;epKV<iOu;E@yHV6{(4Uz)Lk z&`r(E0|1Dr{#_s-J(CVQ$!x8ruMGhHPXGWG1_0<gtlR<sF9879wgdo)Q~;oL{rb9B z1psh>=URr!SQ{oq#k)HIN4x)lj7(~3>P0*^j(~u{t`#FBUsza}6bdaQ0v?L-RFVM< zEX6<noJ>vq<>1aUH2KahTya!okW>YEqM~wreSK#S+C!P|CbIn}0b)>47&5w-lseEv z1K^sT>c#D1g2?)xf*rH=7iWJuz56MvP&DsD;6AVw@u_uTewRE0Ck7@GP<mwl>X~~I z*+oAwyK?V+Ny(#l2CNJ5|Lq?h9#1so(8<bO-`(lD-@~PgJlGuQ3U!-yAT1~?ym-Y8 zX9IL?`<MH>Xk=vQ9QVgI)|-cXDRsv9G&BtNEoZ&y4&f%c`id<-eId59%_d6Q+k2$S zLl+kp9W#Hwm6RjYpn&l3?G5<)8fWt(-92c3Gh$9}_tlri)8)l&JRzaGThPYe|3tL4 zK7IOhiMbNi(gHoUP?|G1-X~dKU!R+zEGsX+y#-&KZTR~73}wL1<7fmmbUD?O&+|nY z<yF_0sRXsu9xExmfB!x`J>CC@{X-d@%d-=*2U&+}%MEY!eSF;k<`O9lIWSKL_=)b1 zA9*s*p9A9J-@cU}?%yX6t|a5KWKmGc%gesT;NpvQP)kb_DUMT1$%%*V{rK^NO<7q^ zPw(#Tj*%&Mad9yvC56PjzP7#|ox$oUNO~KOo6&JL;R3L{UK7;RWK~lClv2#Ds(O2S z+tGnY{82?BCgzs%)6*~1ISpxSYHH!))4wvX*X)c&qv_@4nUYZiDg}(@HN_Q;cWHo5 z*RHZhtb>EY@pQUaCUS0Ts`;ytudi=P(@suK4z-l*c?#3u;9#yPq-W|<&|yYWSJ&n} zTt?TNzi#7!q~cv7I5;>65Ed@08o9kar!t?Wf0Psv9S>F*MQ5_&sE#|n51cGC-8x!f zQ&z>-`g3-6#-|CVRB0p9`u!y_jZ#WV)OSPlO9QRJ@cP!$`rh@=A7v#aC8ee12L}g- zhlfW;N5{v<CnqPTr>9uk^Ye4;TfV%!#QJh|b%nuTu(5h`bA$CAyIsN3zrSH~0OYB! zV*tplPuT$grM9|~yrJ*(ZYDaw0F~C?p-^G-c*d0GsU=NV=k8}JW@60&tFK>c|Ef*z zx+HjJ6lc{Vy^Y7TBGViti4&TJnvTV38|y2hZE&F=s!!T9>~hgjno5F5N4vi4?+ob@ zA>G$*qZYP9#9iYXTbRrEK$(kx`IBsu4L*sBmmpR%mUuN!4=PytI@q-x{dA;Yz(y!d zt2mcvq-@;bX@Wb>PX**GLNprLml21JyuhG%TeIXfb?!nMWVnKmSVJn&^z5wGlV70s z)L+@uS-F&C*oIWp?^VToR%`8jpP$N{q*0{LIsLW3;fPBGf1az}og$7(;RP1o8r~!5 z)+QDQXFXizLhHNWZU;kZb?~?X!Pb;3ok|N!n%tHE$%@0rO}EdhwP5nN@A%Vfh(8B> zpL(qX?PVyCb3ax;?C<ZtW8a+gv^c1jS3r7coV}wR&tfj#YA&$`YokO)K$Pjlj)X&w z9v(b2pP!W5Wn`rLKCwXI0aoeEbFrh^JdhYH-LtrrG92^+)mj-Dj=>R`We)9+BG!!@ z3OIJ5<wt_fJ~~sI5234g`27BeUkUbe+X)z%nm_me!@LjTD+6@gn+9^b|HWcsHS|K4 z>3SqobY^9#yF(_heJ8virW?Z4E_K;AUgWXCbJ|DmdcASSDDJuT3GY@>;<5UdTa!fH z>o~SfKY=fWR1<`mUwHZ_2pi+5n^a@n8Pr<?NUX9MaRp=a2XzIKr=-kHtt<?q^fW^L z&T26dxxaPi;wVB>TS4|FJ*fyHijQtO^?R(UOnL70cv_(5<Xe20dbH?SA&`*kqkf2a zQE_o`=s$cGf>KgQ!@?To{dX*==px_HX}h+a@iD7Y$|{P85HkB~Mi;2^9uBSBX^^aJ z>XFe|N9$S9*~d1Q?urF_t(O>7g><}OxB<R+{+|{Is5KW&b>!e=lTZBj-)Sd4z!p!w z%)qlEj(TY!16}Ovbm|%oT)dvK$no^{@=ik|X8I-nagmOO9-kkzw~vmtsSXEvG9Bz- znZ-1x#j*Bduo-mD<UcpuKi~FmaNd6V+D<0cBVdD37~;FP*ctS*<75U^UXd1Rfef6Y z6<~oV1x|6QuZE3Z&^t=HguJFiGaI@V?$zETvK`BBs>Wcx#<cxgFVqpKXQxjv#ID!2 z`Meftiql|$gg>P>_}gcwA=Iy`k!lkg7xgN@4f#wP`HVd`QJ;3aA2+>Xhm4sMu0T+w z`qn^L%nBq=-2xWVQ)git{m~D8s>j2uRppKEZp+zp5f@e5^QM}pq_iAd%7f!z^vAe_ z%cexI1TZu*5{L4>l{3mKt)4Cg122rsjLnT6ln#fMrq@}OZsV2`Y1%Ly+l=MC@@6`d zo>`+?oE)m&-6JnXypUGiyi1<T{X=D3R$AI|8Nt;sJ!5NRWF-0UM|I#;ZTVnz0s!O6 zsi(~E8+LA9ap*m3$V@QSI*TllP%A4PtmZNI`+Vf;Q_A&;XGn_PZuD|9yu7bGE*n)d z?ZPM?TP6}kv6F<OQEmcQepLblG`nIMS<mT#$v*iEVApU)Fp8pUIy^jU8u_%YuC7X2 zp^MI%a-}b{Vkca%?>yD$d{g3$<?eq>_>1jYmHoH@p9l=U0s{AsR%6z1q6OED1O)oZ z%ajZ{Q!Qpl8$U!<Khy9?28Ne*x*~{adqn3a@T!UyoVPv{m{l~oEp-)A{@$y`9oNoE z2AUlucr~_a3Fia&M_xm757JcnNhk6%nI1%Mv9iZzs<j2FH<rUB)1YE63RJeRMD>r5 zKhV(C)s<qhR|3|M*}nf2Lp_<BQ>5;SyGl5D(Z?LI5urrr<8TVQx;zR{s`ZpmfRc8e zHmx0wOjSzSJ^%=%MH32vwR`{*QmRI3R?L8JnT?8<gi-P@t(<K44UU9PQ$)s}52#cb z>6J6V2i;)}j`$wD@=s~CE=Y#94oUtC%qg%}TZ4hkgdl296Vz`%*a$hk(^a^34@LGQ zv$-W~IkG{-il4wKVLO{I4GqKd^I01Dj3VtNVfie7SL#bRIv0k8;BZO~E(JY>L{NJb z$I_XIvG_N%x~JqfRdM&!_!oqfM&-C>d`chS@bYKTV)COxnLTN_UFM?P^NpZ^b+tZR zYsr!C2?nEf>`Ysx@iAK-g~n1NtGLNoji?34x0PER9^$Y})!qj{G=nA73;P*}TylHM z_0sa#oq8J+lz05b7q+xz{!S*mE1nz&B@4;!wA<T7KPV`BM-4GZh(GFaFStyFM@RF= z()X%{>I?dFcgVuk(-#gdFj>9JR_w=jzfIbo59a~BSb{^`-39SKw;x9=Tgl=F1ExKA zFY$pC8p4!d5DjlL8!RWxQ-YBUbF<_IWgx>L_{Ld;)wCSVp;`C3mMjHQ$vz@|@WZw| zDF~3B5^9`9KKMw-N4Q;Ewb^9%!a6Mlf_wxB3Xxl;Jai=Y!m3OK=x`}Wniqa*%Ut(n z2VS<JD_>smE{dIWmW6jOxlOsUvoRDWM&1N><miVZ9plM677l0$m(YvMS;g}IKLP;Z z$Hq*@?6|-rIq4Cns-Svv@J*?Q%~OCRi~dpb-7N;C%JK+b3A0;s5TuJ7Rk`(3gVn^V zVJme^pc!mIndQDVk|lmj3lBg2I~}&%t`6;>ezGevz$o6|-RyuY*R^z=QMl1a|A2om zqHx+yG1#Ow^0c+Le+|L^ry8wsOVawB&*A6#oNQoozjTn6zkR1d=b_xediEH<#Z^)7 zXIlR38o7Jp8C?AQ{C5fb!ABK%#L(P^Iqw-4?t{jac-6^@IUqNs;$>5H&B-XYW(uE0 zz$2KJ&+b%J!P2PY!OLdPA0%?cHFhKEB2JSdVy=Iy*Pa1>lROEtt+qI@-4SE=p=2JI zGc<F=ZY?%87PGpGTcN3e<z=tm$@)l*-mg}yOmdkqHnvKkO?0`-NEu8{G|k=pxX`*% zRUPpJcwTKY-|A=kb5_r|-e#$b5_qDS%)^OkVXt=$aL&V-J(@U&$TYdVNds(W+R;-9 zx_oA)eKVY#GoqDkg*JI+D!=MS_>*{FHddAo6RlPWz4I=4Vv8kvz7d{~Vd*{G=*>;0 z2`$cb!7Hkb(Jv(>AqmuBy6;eL1`oo)!KvWl`*LWkPVljw1wU}~jSx(U<?)PY#l90? zSfh`o{kIZ7a+88{?>S>PWPe%Xuj=0j+{|q>wS<^U;b;sJ94dz}@XSXjCMD@mmXw#5 z1`f!Blai8*Vl_fFG#t4oauX-yU|}KtOQUj@7-D{c!*NB>&^mOQ1Q+bFK73z~hX5BG zig$4+1P(>C5!3LPy8R@iAi&*kyLi<?(u!V}zL*v6=fg=|;nNw-_TT<~f1eLJnD?B6 zI{jhwps*s?e8%FA1O6mS{HZDbJ~X_Xo_HCuWZ3$c?UpnGMzKIa$!znsB3Se}vdxLk z>q6m$8I|J1JuAl8CIR(iTMXbiibRN$ZysE5U165Y?oE?3=LOK3Y$qNk1=AcxRs<+O zW=6%MK?reoVQxK*??ANBAZ1cfbTf5QQ4yK)hon(nUS3-O(X-xEgq<l`p8OpbtZyda z(>pscs9&=;F&N{)%^f0y0&`?Z`mD@0alb?ut@jWcH_AJ5y4K~|`L6Tz3`gK(y5m@{ z5IK8(73My-?tO?aU<^z-0EizA^Kfj~W%_yd*35neBHvuYC7Zl{{V=Vu(|!WenAuB< zNdmZXq^*I5+4saWyf17p5PDyi^cfXAewmZu&pOXhODBKC5yB@OXS}aJ;tXq?%JA5C zIE99|Ui&SNRns%oBRZs}Fo(#D>T0}grqhvh<A%pA#;}9Ho6cB_s7($1ZD^Qm_Sxd= zYjX<=3q4UxmLn48s4IJI?YH+CnO!ktx6_!vBI7q*>xgX67<o5{q{UA?ym9v32N8df z&>!O}<)4O43im1OqNzoG%Ib5z7@HC*W#@s6p@h#{N%f^wx6PidJvW398kNsGhmD*) zuIEx_G}8ZW2-lx8F1Nz&c|}GFPi?Yb=?={}FBJ+h+ZS@9SCTO^N!%g1Hw6_MIB@OZ ziWb}$IulkPaL;m&5`mcpBU1Ol(R%a(8V?J|<R04ocaNy3br<*g?J#(GdI${9=P+<X zhM3jnTcL&QoBYpErHpJZv^k6Zoabl4|0D`FOOOwIujYBt=I<rK=_8_<x%M5sIr8K) z){uGF7B{?!CdoHcu`}OK4$pdsqs($xf3`ik$W;05gMw(eH=g3ef`j>qFJSsAf8YE6 z#*G#{Vu48tL^Qfs&21PF6eTwLmkoghs5YC4IpFzUjG}or=2)M5Y7oZo*(dU98VQ5A z@)Pyy;jf-`9>a-L%t}6N**zHSU=s)G03_!VPjTzobU`vt4eV3;^>6F&ri3&&%i8C_ zoW^>2{MHY^n>{jJlvN-4ZoShp$ouF#*1{e}%3n^ntB`6SQkV1u`eupd5)6t}zxU&R z_NQ*%H|Br~{Wdmzwyh_i;pxilccMqJ^RHjn;^gOl-B96u4@m4^Il652s;d)O1(CI1 z{qfp)>*VA#P!LD_+#HL6B2!zTTV(~djb5KEh<nw1I!gkSv>hXoxXGmsFIUE-FXDs& z%ShzA)ipBK)owxQJ|K4%dk?ktkH+agrNe<WFe0sohgBW=q8|z?<T<6rWw10rGF<oq zbU~LWS(K}+Xh1zFQ^?uQ6~Z|IpquFUU9#|w5@2gSoB3A$0(jeQTy-|n!tw#2+kWjO zGabCWJ8Io;H>LxkdokZ}cD<-8E75WiWnE*BQ<9dIFFB?{38`zlR^kHZ+6fmWs*K)l zkx!pm-`_uVEi<`roqL2C3i8KAJn!X_kZhKk_<3_iURwi1nu-+t-W-L04!K)7?*Koi zB8)J$D7U<!{dw)INFz5g6sU{dOBuN6sOr4UuHY!|2-(@+kzy?7fCoqn6ILKSO=FMn zHyC!}BRPu_*KsBveIuL>)U`edqBEve*3()%0bd@Acxx;0Cn5`dS=`(4u(OG8F4qG> z$5#4HN}xpX<bQ1en~htRxRS$trY3~srEOIJHin|X*oM3nE(r4p`4#0U#4TI=43aJe zN#};lbEP-H>0f>hT#ZEvc0yty)_V>0M=Kwt5j{uUc!6%ba$Zcbk>8dZWn$%*FV%?f zUpg|mBQDFW%f5_V{QWZ=5;?*~4UTsDsNUQqwll4x3hst~%>){C)I~3bs)ozl(1&Kp ztmjcCJKt4^5BsHY57Bb|S`l$A?9yyH%SuZw=s;%okKn`59&J3HMaSN2rgeJp%FJ;O zNinMnVypQ!6CUV>&vWO+#-inW9~!AC%BFZBI<Vh}vxdMXm?Z5D)A)j`=9gzwE4z+l za(9UvT^rJ^n9Pnxf<gliQ>|MXDqaQ6mzm^TZ2$2*$e12)63)4(O(xf3yT9KyIhX3y zB*+DGwaSYl?0a}s$r|1TGGSX0U%2W)Pud5Q$)w~cz>Z9@{Y8t@aNW-SYl|i3G_4nw z*mD$UTH&ukpd0&d)BUTEa2kEEMq*H-A$ixvK+lF|JbY7@#D>-J9Z=7-of?)M-swC| z_~p%AxnBJAl{(4`1S|A&3YwD9sPo{S?TpY3n9>EFP)3FGywa{zS7C{790O<Am|4n; zK6n6%(mua{Lw*5YDm&~4Vo~vf2Jc3eDc+@INZaO`NgehsI4e)Au%^{!Q`G2?u!1nP zHt%#Lvgw57N6l=@-#;EJTH$ON4QK-0J%;$5#A8l#X=f2=I`k4ZO5#Xe7P|gD0kzc# zVK||<fS-3sL)XFk1MGLvsF(xKM8_Jz`oRH7Qd?64*Zf_O%Klr{ZgKOCbHQyJRH{4m zE{RtX8n!fwf8g342&GQm^j|A@V-$4L$!P5EqS#&bu{o9@aP>aOTYAE+slELc5gQg5 z+PzjsYVo_GqT)&szo~HNFw{2e_tljynaHzNA|Na*EQSB|{x+O%26-q9OtrP_7%D1u zhdP+t<lz7UmrIKkk<At<x=Jni0IYMaCBy<%S>{yfgl2F3OYY<ICu{o=1H-NmEB)+T z<xY2Jr#$z6W25BR5C*9`dc8o~7AEn4<JI<0On$!-TdPmjuqAgN7j_2$eh(~<z|M5n Ru%}Fby0VT^g@WaW{{hG4-#P#Q literal 0 HcmV?d00001 diff --git a/_source/skins/kama/images/dialog_sides.gif b/_source/skins/kama/images/dialog_sides.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f91b4753ad672ecbbda36ddd0522f6f93dadd1d GIT binary patch literal 48 zcmZ?wbhEHbRA69aXkcWxdUfvq|Nj+#vM@3L1#}pI03^e}#NN}-!TmCvfx#L8L+uN$ literal 0 HcmV?d00001 diff --git a/_source/skins/kama/images/dialog_sides.png b/_source/skins/kama/images/dialog_sides.png new file mode 100644 index 0000000000000000000000000000000000000000..1042a61cf9f3c3839d1c4fafa0ad9d83396253ef GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xp=xbhE&{2`t$$4J+tA0B`Qsl z9vhhqtp$qJRd?FDPMdF@e_dDMD`Urf=8xG5b(}}eFZ`0d!ouSpw?IAXqxlYhq!kV@ Y*liGXlBs6f3N(+w)78&qol`;+0EeeJRsaA1 literal 0 HcmV?d00001 diff --git a/_source/skins/kama/images/dialog_sides_rtl.png b/_source/skins/kama/images/dialog_sides_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f7b49fcc3ed5a8fa763d0ad0372f86c8582b20 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xqG@ehE&{2($V8fPfJKhU`;Ah zc*d3_ry$0V<ftIVnpCJTt>x09fWpQlD(0qaDhB!Y^fDE`igwg9eSAM}o@l*f2hbU8 Z4D<GL{eSw`^aRjI22WQ%mvv4FO#tQFHbwvd literal 0 HcmV?d00001 diff --git a/_source/skins/kama/images/mini.gif b/_source/skins/kama/images/mini.gif new file mode 100644 index 0000000000000000000000000000000000000000..54d910741607aeef28fb9b5882f77f14a3d975ab GIT binary patch literal 183 zcmV;o07(BwNk%w1VGsZ?0HOx~nVHN00DyOQcc7r80DypIW|;s0|NsC0A^8LW000L7 zEC2ui01yB$000Agc)HyFFv{5oF_bJUwc?N^8lWRyWF#Iz8eXjXprlOQc&_jKVd<V* zkW!KqD<>P$Qd9j}#|1MMRnVHftai)I0hk4V(@-do3I{afTNt=~7q!&zhQ}M^!I~t% lw;gm1W_k-^4+91Sga8FY3}$4Fii8ejXLS&6nq4;u06XFIMo9nw literal 0 HcmV?d00001 diff --git a/_source/skins/kama/images/noimage.png b/_source/skins/kama/images/noimage.png new file mode 100644 index 0000000000000000000000000000000000000000..159811305af7fc78662a53949f9c62bd702785af GIT binary patch literal 2115 zcmV-J2)y@+P)<h;3K|Lk000e1NJLTq001Ze001Zm0{{R3yC6tk00093P)t-s+g4WG zTwL2!RN|kX+gMoQprGyM<>Ho>++t$jfPmRaN!?~<++bkXLqpg`M%qnH+*(@WuCC*= zv+nTj+f!5FhKAvZiQ<}?-*<Q0S6AP7c;J41<HW?`k&)xc$>EHQ<H*S4t*zsuqwn+a z*+fL+ySwe><KAv=;;5+MkdW{9_2QG0;?B<7US8Z-SmM#q;g^@%PEOu$Z`n&r*g-+v zY;50jblg={;*^x^-`?6vO5u)<<HpA2(9q+xwd1j|<GsD($H(4vcHCuU<Fc~k&CTF} zf#8CI;-#hIyu9!9^4m~Q<IK$Ajg8}~s@q#z<GQ-zwzl4FZR5Va-f?l@eSPid=HtS` z-+6iC#l_lCP})&Z?(gmI^6=xZu;aJ4;DdwWo15a8nBH@9;+>t|a&q5ubK|eC;+&k} zgoNRWitg>}<EyLTi;M2@@8Yek;fRRaU0vXOeB+&++DAv?nVI95nBHV$-DzpvYis7c zz1?td-+Fr5NJ!$Ip6>4K<<ipQ!NKLv&)H5+<e#47w6x^Y)8eC}++JSl*Vga(_t-x_ z>ekfk+}q{E#Me7J>(bHOVPWE?rr?K%;Dm(Xm6h64Q}6Nb*FHY!#>MR6-{6IX-+X-I z%F5>4+~J3Z;f00e!NKCVxZ<&~;;O3SqN3ugtl@%!<hr`sQBmW#xZ}&q<gu~izrWpR zXyd1++fq{Ej*i`GYVPal<D8uC@a^N&)Z@d$-C<(t&CBMmuI}>i<fWzW^6%ow$>P1e z;;ydZ#KhvOtLC({;-aGCtgP(Y+2*ma<h8Zrx3}V_r{kuk<+{1$$;se`hUdGw>)hMx z+uH5p;oyjf;E9RksHoz~%Hqq*<G{e-goEIUir|Zj+EP;M)YIXUljFI$<e;D0RaNN7 z$JRMH*g!zpN=oI<&ek_K<f^LKQ&ZVcP~K){=(@S&yu9Sr*5tCX;hdb}!NKCg!{V~C z<j>FIou1*CnBt3z=eoJ#jg8})n&6C#;Ej#qx3}JMbKrV<S#Yci000F3Nkl<ZcwRlw z1F-Z+6oAnl+cutU+qP}n#&6rUZQHiZwe7vh%<flHneNKzTS?H$uc3*fP*Bj=v130% zQBfbUU>7tBO*{x<B|7Nh;^-KaxNXG>tyZfK3kwUxgN0tN*J@X6OH7P%ba6R|MjaCq zA3fCS^<jZ|d202c|5K~gd2qmlqefBCqmx<;sSoAkjCuTc2mG+G#h5WU;PU{VeE1`Z z(gy~fIRs|Mj*N`Z(9pQAOoc)jZ~!!BqtFfY_n68Ejf=CgN=<zQZQY7pQ#Yqt#l@L$ z&Y2r1@H<>trNaG^w6x&h;0X}?rKOdWz!A`Z9|xkD8K>f`UV#Y?778OHBSXx=QYf4d zoK}L{Q!~*TtJJk6Fh&?D5QJPX2q1&OfL$*X3k0A6uYHxe2KBE^0~AtRv$6lS_4Mtw zjmdb8w%ey$-|jzKQydZk_OE`ld4h0VagD&R{(3`^$bu@Iv<q*NkZK_+YPfD|5P<zb zxEWnpSA4o<V`K8%DHbCmBSq92k`W@+P>Wz|F(np;w+L$1T|t*mx13G3-F40Aw`c@9 zL2Z;#D6&TC32e8>&v@;sZF2I)mdogy^|n{%#!lK$`8FOL+{->kqn*o!Q&9ZdT8hya zJJ)vob|e5rp^%1ahwoV6vbpfmrNU;DyYo|7C5b{g9~)~xp8^}MtSyt#I%b%psG&iG zJBt||G?}cda+pLp|0#Mv83t8ePNQkM%(Af1?7Hn1&|J&A%4#b~576<-vaWL11-=d% zjn3E4Bu&oGSEtcv9DHfzU9xYFqYbj3X$xMyv<nDG(n&h9oBwmo*&PyHQb2&6=A|#q zwQB<+x#CQxtCvb!8Qs|;lM`ikGgh@q>zk620x(KK`!SZ(ByE*QR@b!~_Z6C8;XY$~ zUEONQDrvnAqx;eCz@ACxt*$HG6s>%H00x>89eAybjwzilk+fp83w8hb?EbuE^JAhJ z4EY}FF(BrSQGb)G7>t<GW%KSm{ey-ap5D8OF;%;F(_Qn2G=Ijszj(K2sc?GV0omQ0 zUmDHGY9FkYnq85#b&*+0|NdvN9jA6^4=~kWuCiL?7mvGm>XRo_^U^P?TAn+Y1rHE_ zni#6(xk`Dp*RS@tv%k3M@Zn7t&6_X1D#9_Usz<Aq4=TeeGTpsiSm17UI-#eBkUkri z@h|$^2dXeCL3O$E@TvhDubx{|ao0;=L;PM`+TWu0rMqW(hbv1_3^p#kua~Y|I@Nya z5tf30r}*LsY?sREJNJ6oz|a`PsDN>MSrI*i%%e-j6MXo5XJ>^opYKB$zvO6U3O$0= z3qz|IC~Lr`ua^};XHRw(6BB$8(H!zg5bq|pvFFeuV5s|YG-%VelSQAyCZv#&k664V zAt7N4cG)c!6Me{hf)g7X>XnP+d$Dm&DP%HHygT2`jc3lyEx$laRFL^?xRj&toe^}W zHa;0GEXa4`dHDM?hdMhuhnW8UJfP3tD98k-IT0*xQ~{2_R}dFsjM>TMT3T{AmK;ki zcZli18~1!6BBy|?LIZR*fvg}FjN^S6;&M40&uLiiJvkf>m&x=PS74Iv$cEj9I}aw8 z3u^H!bBh<h=Ww|oKmQDq>8Q6YMezoAmY&mQ&3gCl6I1WNV$>{I@G?DfCd0dk^LaeL t9L{?@PmZPK&<CDd0a3vxu<5Moe*xgDR7U()XIcON002ovPDHLkV1lp=pwR#T literal 0 HcmV?d00001 diff --git a/_source/skins/kama/images/sprites.png b/_source/skins/kama/images/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb4e1c6c37e5ffa475f73bb252adbec70135ac4 GIT binary patch literal 7086 zcmc(EWl)?=ur3<hT^Gn=8yphc7Fe7t79hY9Am|257WbeVJV<bt06`Mmg9H-X9X1dw zfyFi0-S4~So_l}Y^XF8Zs+pRecY3;}`swL<=V>HVPo0dInHUQTi%e5P)c`ZnVqp=C z6F$I5Jto1NSXeBcnySi1K8xra5+9?Ph5-}8r`Y=J#52$Ex!;CRuoLqUn�~;+yNk z0q<ZHvnGMoEPrN#8kZaM8#|pF-Z5h*H4%cr9HHryI7BL7AQ7Go2ak?e#t-0$sW)1B z8|Z%!t_ks~_Av|YvKq~(ySPFJo&)Pfu@!N?uDMIGl1KIa?_o-zn_dL;SjG_Z#c81U zlVuDloZhY+K4<+$2H7w$?-u^@JZP|$zPOy_$&1X<Rx-rfpn#lXnN(QJ8%fG{A`iLo z9~Ns#4Hy_Ce0J+9?W{DZc@~l3<dm)}we&s6xuPM@8Su2>!muQ0T76HFX6vPWK8Ivj zBU46ro#%PE;MC&Q{F22)n$sDa2Vv)6E4215vB*X6b?Pnarm48KwI2D__7-*h$d7Me zo4<lhtTYoQ*@leLybN=HPzq|*0Rn^GR9B`uUm9^dj@OHU_?2;gqu=bE%uY0=aR~?t zs464F-{_=4;u#(vEa{j&Gk6<EOJ}AEi@ALtt<x@4GFQT_W&o%}wR&dOw%6kgX=`&A z&vEMxfa<HJ99ACan(9A`oZvUM`jBQ_a_Sc*^htn$ZBTH~Zjj4Jb+I_Gt)p;RhF9%= z!jSv()Sg32`*dsU@%POX$oa!vpruXm(+nwlwggJ)GFn3e32Um3Gpb{>3*N53=$DzL zlamsK2%wJB9aUPg?JXY?P?=4*K-ITv;cxX#rt{T;*zoZ1tE;dl;<CvQ?QgVyHMC0f zzXetJRH4hBoEJQ0dH=fOm%EgUwiN5A7}D38k9N_OnseEjnsZnbNx3hEq}<9-Z66X! zCbaI<?BhOoj7(osNRDQr&r&6%NLRHuR>n+%?5IV1dwHnDZx(?zk;WL|(-S16pAMJM z0-T!jlQ@!c7Nd^KL)DY789wfaMYjEtHuv(VdBu_X1nh0corx!R`VA<dBAJN?`r%Cd z@l!rqSp5L$qjBI?1l>6xHlwG#w!NKH7bh-w(LVYhr1n!it*#BsRLe>SrzA=7^a(-A zI770Mrao0>UwiGxT0&i%2#i6XfNHXmwE~*4uU$k@5ughOGi2gf2r*=CyrkXQ+A7ri zs)jMpA|%Grcf(zm7$NYIlf>*hnEuQEl-S5IT)-BVo@cG+N}h@L<<0AHU}8>A91r%< z?vU;zx%lv~YH~V*{mYm6n!_YhQ&SVbTHiM^nc?AC6BtirJ#hgiC%Qk(#Czhp9L*DY zhH*h{(5;^Y(MX~f>1(k&1;1ZiHjgoPR%cSE>(87UHRowYv1O1-{Spv;3~w9K<qD6| z;R?Uj#Vr5q{0ao8JNz34ro93fkX^+w(9>fCo-Ea2_YTcIQpLwe%4!KDr4R;SAxyOJ zWT+CNB$1Sz7|;U-fZ)qC&G19rWUT*_BQUALMi=5IgMpi!A~PISn7nm8zOyv)pB|U~ zzxm`p(#n4^bWVxhJ$>uoU|*=2|FM=*7l)gh+mV`&9|TUWJv2?J&$#FPU_pyJUK$_a zQWn?47<4*JvV`ClB_#PBqq)d4>?WI-mzPkb&xnhP7olI|K{T+rw^+<GUx^-~32nRE z6N7)v9FaV|+1S{?xcpv>iawXL2g(;N(;qPq=4;JCsf5Af?`_busE{1{b6UTSRX0-B zu^%Y?f}`Ng$>wpiSCOXa_Z}Ls&${}}ACaku+z8%6=(4-ng@vv+Y_{W_l+CTf;{`OQ z5p3uJj(9|URrMyRmrD7UU``-zc%wvd<5I80S=|yR6mTfPPT52gcRl-rl34XT=hx^i z^d(F5D_jHF>A5+7t_yC?>$|>v#@~of{^^O!>|aV|6{fEP(nNkP1Fu*vZprUL5V4Ix zF=>n4>fp`MA-5c$jM)H=!O~~9_c++s_L_uh-!9ZaiYt6-u4$@8O-KFwUk)0quB(FX z2%lxmwR9hwdz0rrK{;RMgl0KrYD`r{Lkqv|p5>eD`Dek*%}I9m^M5x_Z6UL_J;G;l z`^|~mrk>GD<nB!*Xm8J7LyZNAR&<;3*}XTK&7I%)fBIFpV%ro`wX{!QYz*G%hb)t` zSL&(0bk$xb{aL@@vyo|FY`p38>a^Y<TuxA9Z=n@UR1T&wJ^<1(-`moYZ>wrd4Wu#+ zqiju{J;Q+ir4UCKhi-Ed1HSMhm1HF+P5w+go2$yzC%2xpM_qH`cONWx*Q~}FYy1`# z798K7)7abFGh^!@nIo8(nE0e%Nxz(EGjS&Wxl{e&S(0w?Sfla$!z7X}i{U(?!V-7E zrA!RfR$c76HbIg9|0o^MSf?LJr?P4}>^7{NyQ{pI*l2oM2}_x83s|*Wp`j^I(J6f> z{`ZV<m|cSZ@UpfmJeNI{Rg1Na_ofU<pdzd@Oe!CI2JhbH9j?%Bf1S@LQNc%*9~S(4 zEPNb&Yej|%JYPHP*q)AXpdgL_bnwNFS-eY^qVFBEGy?>=-b{?2nAknIms%_H6_4~% zD6O>~<gW{pJQW~X33zUKIlF4zjwbDseZX;dd>ws}9VR7<eUxO)7_`AfI>tmt-XV3R z;ke(7|E)`^2`+B-bMUe}lqjd7cMhS_ULd=k;K#KZz`UODR6To@#RFp1*VY-eW_6F% zTQ~afNG*CSZs0H`8K=NO_}*~#Q&JAI-Q$M^HNl91k%FTfkpNGVKDb`@VZ(|jLWQEQ zTwdU+-jK=-9T&Rv*9I4<uK@r=N|^}sHmi^!iv}K7mj}O$BG^^;`bZIbpwlB1ovi6+ zDS2}|Sl#Sz!9WVruIs#`&Ge-ZNJkLUTdE&t+)^FLGaQLNf7@a*9hKX$UXp1Nw93nM z8W+7ZD*|H2wUxDY#33p(?U4s+Gp|zB2_M9I8n&)gf6npv&7D*Gg6oG{!DhN9JOJg( z7<9bu?l`(5Pv#~sGDuAxQ(4g^z#e8oXzh^6sTn*^7N)v7FLZen9iOgHDlXL3Y^%!L z86Pe=A-1fw>(9{PM8W;yvV16D^-}{b7x;kk@LC=5HF5%2G6eY?Z<7Xml`rWuv@@EN zL0q2B4@t{!YpAX-U7zetprGL8;qk&cDme!q&XC3Q{?*ppu{bZTo>$t-AF|XE*I}8F z7Blp?vZ4G8^s%Mbojk}t%MJ`Z>uM<}EAu{q5fVh#21|{+pB0m;rdjV3N>>-Zc6U@? zRu+fnOM(uF;iW>Yd*20WO0@H|KHMcMFm}FC;@}GKUTxpcC9$R>VhK?BHLfT}j{ESJ zsH*si?3agI6T{4X)QKV*;$BGzloUMfi1}!1q6CEiMFua+Dsp8j1F(QuYLkPDcuFWr zC6B8+Z5fXE-_d-Xk~PJW>lH#tX6l_KctDD&CpvI8F5jKSeG=xb&w<;$3k_k`4kIrP z=U`aYe#y|`#`v`SJL<n)%rjKDAH3fQs70^VC(4I#sNz-sxiNlW&~y~n^D-oU6|cFA z2YXP%;;A^<)TasmBzbf5WhHG&#)li{Sa@gxmVQrP0XM#n0BSm-@nm2yx0C3|wEBAV z^tL<Ih>s}&Eed8MeRImDtZ3ccn#8u18Xw^*7_?|a77m+X_$n+PW*rt~ul-sPO&}j1 zpkeWn-%+#YbjtWA3tg~(T}H!chN(Y$wpkWsu!Al*zyO_ii5N?iVi;-8?zCFzT=T$R zrDB79WP9MyZ-E1HYrdJzWco$pe9*SJzNmJ;lb4;nJfY!&ywS)3+99Y?C%~Yh5+g`V zd2E^i)5?|Zprcsogi9DtM57_oNU2z+wq1S5;K!JM+73IYsBO^z;`H)f3{=GOF}4)S zq+2AGsceUkO`Wg+75N$|S{Okr|7~x|V};%sK*9jt8Ens2JAm!2CYC;esS{_XR9#65 zNs@;DY;8>)bfl*%MXQKrYuicW4eq#tihf{}iZ9Cx64om{_yga6Do!Y#IhAgTRFG3F zNx1Sfg3L|vz9BYllXzcd=rLF*_NP$nxsn}%H+4dwCAO11Fzn!~{f!8_hiIUxU<t*j zT_3THCx!MMf8cU3WPQvjF(n9CBGwva-<FkTO@TRfdF+#RGKvSNNWYs91zd)yvZDcs zq0N=UuPh#>mlPbn4%(fC1oT~W2?VGjWy$j<`%GQCX*D|pL+XUQ7t>i6`4aeG9C<Ln z8Kerh*A`ss48{@i#Su9;2wCIyNWUlkIVc_S&22pOQ%Qzv@#9ske~*fB*7cs)pJ2L* zw{A)9oFnd3fm*^POaWlPQ68edLl{>mm{<hP{?qwAQ8^>2$)s2SWH$@!_MAR-g3So> z2(#56|AwpvH}Xy;N0D-OekQXdQ3xGvb+eFJp7<_fT}-C45ObyTF5)cwe4>mX9l~J= z_Q)i&PE>d69yic}HKA=Ax7vqU<U|c#x_<nPV^+Z5^h2)BZi}u^5y{Vx13N;=c1Rs9 zoXPi1>rdEw!5~`qrbGc`f<<Tg?+^EQ@U(SV>(pih1}+1p5~k|o4m>i?)A-qBiJL~# zF&}~FSj{Hi>A#sD+`QMj<gT*j7ffjAUmq#bwo<b@HN@bgV~4;_)u$f!D{Q`rl>A+M zu`{VqJoJ<r(b%aTA;rb8Bs9y?99w}B!|1BoArw+4u8bhthPV0JZ|qra7?9t@+8G=K zzeP!C7^uTT2#uaA#@>Sxr}aTaNFxXXl*tmyZWXhGA@P(ORCHhK0FQa7eN>&egxfxc z-FwiF9|k}K2)HG|AorM)V65Xq_cACH4g$3Q)Rh-W7Q((;HKjdN!o^#C`{E}`q~_FZ z08}Ilu37BTXUd^q*_j-Yo2AB+Z*1SEgY!G)^m^7PE8m*C`@?MDb}0%pny*XU6qd~- z0q_67A`#EY8Q30`HF!?xko<u~F*u`cc<c~sS7m=0;<P?mNuRAR$_W+SJNVu~*)s8R zWp`9E6rJU~YxQ~==rjb*3Wfm^)Y`kWTa%h%f3HNMI#mZM5BIS1-mU_27Z1Lf`WS47 z5X(I?h?zKoY);%Z5FbK66Bs+2E2Hnt$<i%1x_72O?wx#eyj{x`hC{y<xgT^grwSXN z-nn~QlY#bT_+F7E;0z0V>^E)hpnKuh$)bxhW#O9A;yb1v;Z!{z!s2aGFia-nE2B>5 zT5KyO!reqocPw#wz6>I3V5?p<LlU<c@i<zvoWSur6fJU39uLMY6cjdDb*iYqqqOTD zi7<aakAI&XU$i!zrHbu8L`OZ2SH%|^mWvf5vP!9pwk6(Vc9ta_<{Oy5)Uu`|1L2}j z&m)PKIt?b4%zsnhP7Xm!ga2~IiA7)|bRcd~K~7Q7&3rIQFp4(w3{{9z<|d?;8U`va z0c928mX)$AWxx>c2Sd|CgjlqprSLCWA86w?c9fRiSvpd8w*1PbB$5}G=AfC)n8Gn= z3sMNr%Lo^{tnbhMG2+`wbQ?gZ82A_@S0XMdvv@`6XM-~sp4Y6!c`6&ni<my)JiYWu zAyQP(Q+AspB4&r<fD>S$11iu%4I0V-N76w&cGn101s;Got{WBajK|E*h!hJYFkdSe zGGd2@MlO7Kp>wmfzNLX4cSpIWly|wABKF-vzx&cdgU2XSj+(%?9V*85WNP;vD$Jp+ zR%HFAhxZ`m%{d~|i{0+Hkc0hDMv}WW0{&^L*Rq%UQUpb>O%Q+T=YF=`zKR{xp{t2> z+cMLV^$C{2Dtes-sZ+T9?Lz~V?EqAq&g?McFgc7j5`F9_ksS1K{arL+u6$tS|L80U zYiy(gx+xI{(=X?72Ig<6%Ztj$OH7~tajH)Z`IDum9KrI~^-pQRS)L#9tcKFrndRZ- zP6gIJT(&@`AyO9d^|m*jF%`aUi?eLF4&C|)fusEZQZh{AK&U+aIMCgP3s0v<(wlX( zDVg+w&5?S3tCP*Hk==M<>n@|`*@U{yl0MzM-)R|Nay1oPwiu8TPizcwQg`61p9M4; zt-KX;GHwFBLQ>6JNRt`6KASK6+(O6EaLi+L+4{J&!f{(=aBj{PQ9TvC3V8phS~;S| zv((WMy?9kyU_%XJZF#QdR@3}^^E(jVH24xELG<YnAci=qsID_0`<)aIHhf6EpvO9A zf;cZVVS=#=3qB~^y<@?gQ)Bev%%m6dz&#$PjP0)wOHGxDiUfT<RteL$kBD6DyvdK8 zB_ARu?@Q-1HVcB{r={It8IS5q=NB{qj6%7u$G{m06dwg99IM#q(FX})F%*t_iiXz6 zejAT?ya1y~3OjnVTb#JWw3h~GKTHgediqQQG|Tr7F4*ti>8WQ>XdAtM_cTTiN!;F5 zLog^HVBi~U^^~mP{#p%m=%wtC;;a5k5#N$Fv#IhcOADI_vzxO7994o-vmf32@g=-| za#Yegn}%y`SQ9(-hiG9gMY`u>&`Ujo1%(#r4C=)zV0JXImE%jj=y)%MpA058Mq>Sy z0R=_p1jCFm0|Ru?OPN^9PaY&BOhlV!Vd=0SiOq#$^jaaAQbA4+L(C!h;Kgqf3o>AC zU3~WwHAWgIm8^#ixTUaYP*_o23BCah=5fOmF1D5us^6`<U0Ix)u%?U45(+(*W+YkL zcw=lZYP`tVye1GEaoAr+2WA<4hM86?LhMu!;6*rL)ozsjl?8V*jJv+GW|F*n%+J<n z)_DiLt5@biLwR{>WMsNzsOIK2+r{9L74kK6pKq$RH45U5-x2(R>?|oHa>i2M+E|jV z!?L%l;?b<O((T|VV~!rPb6YT-3-{M9E_S*!_@}-6!V4>=r-eLUyGRe4FIDl|wXy92 zm{%D?7Zb3H*376`pdEzJ{tnZU2CohZ)>}eMObbFp2wBYtv6Bx+*f7LGfVuCXx=LLv zNt{;1UV^xA$58q-6?5_+xJX>i17-IwKN&B1VHIqhmfv72stsuKycGB>+&FsYF*cn( z+&sR+-87Wd^ACwR+LZYiKKn8Qud$@WE&~r-Fb;@TwQ(h3-M#$$m;3E)VHIy9ae9h$ zPYdr2={-l4Z6VRxfw^y)Exm%R(xMMLURXD3VsxsH6@9$TZmTHz9Kacn=o1T*a~kuC zm-wZ~s)Eo7KQ!sP?NjM1LL3sU^E=IsX)QURyW<;fJ1AGRhJiuK!-Zj8pEnbtGiVZG z>^^_kBFf?|K_{Q%aVc?7rmHS1@!q62$2Iq+p&mY{b-1_cdnKAK{}cDzKw54Ci;Rry z1EonKg6l|ylect1JkOQlSo|8qx?kTCbJ;Sog7dMml4a-On&!{$ZdB5xm<_3DS~1Pu z!c)#_?rP5JIw})Hk^H4@pOGjLwvSwH5Uj>KWNiC7R1lzZ%-N^b=YCBr^qJrdqgrfZ zi-ko&VCt`e!otF`CA30EYiny$;@s@)c^P)6I&QWL#q0PE`7sEoU*`zE4bCJm5)6aE zwkIbiT{ky3R}xsICsjzHW@f&BCW_Rb(%{ZaPoGkSO*9IV`9v~KL-z8lpT5BINW-ER zd`>HT_k)kqi%&>sAM`*Pu`|w3Zlm;>E=(r6o2{av!jI_dokP)j_`EVH$M?a(KN}nm zUN=TWL|ATAi8s%`>tQH+_`rh__xrWX=+{x;X$3RGqvM}0SL$EZZKUW4s%~*({(a5& zQMbwuxrEBOv>7@t(M4D!%KZ2u=Mu6acsg~xEe*EA>j)E^a%ji=o|r=zp6qfEok)1V zq*%R>UY|X&oC1%tA&dJ-9x`y;y|l#>Cv%R*FXK%7lRJpS#xJH+RQ^s~(0oF4JicC0 zm{d2_kQCQqkmeFsDCO4t?l$4KA6APw=L<{V>x~<Fd+xuqODTkFUjAvmU!aJ3^%Vz- z+Bq{~CrwssWXSmiiS>gd!Q%73v>IUFNc>6C3&$QCvvhlH?|FEOI*i5T*5cSZEb!BK z3o|EukFKf=+hq@IOb*Sq{1EB2FjQw~eu3kF1HNn#q!S-WvCk~K6*#E<U@x1KZC4W* zUw_w@<F@x0tR-v^ZZvEp!@0C-zc}<|q%*V11`ZfX`MZzhd=u{Vj5<%NZbfIHX&yJ) zr9%FN*yp7A7YDq%x8Fz^r~y<lNV`6e|12Ciwio(rX~1MrfcM$_z{VXs+#UM}boAiJ zZC&x413;;Heja!|@9%Zp_JqVG`#j=>VpYt*^*zs>>P^NaVBM_`g+^PUZBL5Pa@Utu zn+h)!x9{FJj|GhfeZBgHbB(;C%8Ek&qR<{-PlCnVCA{PP`{VrN@NAtay?Fs57c#~X zWFv05=na!ai|-Mf<%Qf@$h~b&&-E2f%?%s)KGt)7XNvT|If~umhz~n))EetUF^u*1 zwXC<K=Y|qUj}4Hor{8AFY53W*zfzP`hlTk7J#!QA&+9w@+gGNm-nq%<&NSxO(dtH_ zJ`$dkV?(3jU%vVVc;;qoKDo+xj<ud-6s+gP{(W=qukELkn@=ZkZj{gcO1H}N|4B;q zCgb&_x|*Ny|EZz8nVd<XsZnYeB3-g0`-cRb(#xCX-8VF98%e}4pq;+<BbgBpyZ&$# z+kywu{C%M9nzspka<kx<CnQfTm@wuJ(Q2}E#|M$qKDUk^3K2HiadR79{HG{3{-_hd zQp>xhaIb5B{{O7j{1>$9|5Mlb@6~jATmW?}(Ogt(UIv1jr!jpV!!p05=CpA956W0L znQ#q`DHMFbkkP>yF8S^ohDUy@8SY+<;gXq>l|&eCaxjuLM(q`*cVJZ8FskC1KBbEj zs`Mfgv-$wDLW}8m$x13Jy`~sRBUvdh@RkrGQ6`6=4ir&9sELVpwI+ta%(bKbSXCuI z1%w(JP7MH|#>O*4Kqw5hx&nk+SS-%~6H`-XegG5G)91T^HyZ<M_1yO)E^E%VIn1@r Rm^vJmrkb8=HTcEb{{;yeZDRlc literal 0 HcmV?d00001 diff --git a/_source/skins/kama/images/sprites_ie6.png b/_source/skins/kama/images/sprites_ie6.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb305c8d360e647fb2cd15714a408e8eb6a3b21 GIT binary patch literal 2724 zcmZWqc{tSj7ygW)A>9;;tgTeGESZGNEo9$9i70DPmQX~}UJ5NrqO?g0*S?3bjj_%c z%b3NCWz0;njIoZH`Ci@se$VfpbKdhl=a2K8=e+NE?BsCruZ;>D0RVqlTbaA8XITIc zIC1zoT6~-;vz}m)E+>zJ!X70y03rk@J6DT!62L&NrpP}Uh+-|UvKx-k6%Dr5XhFim z><_p*JCSt}y+^>Hq1cj^2<<RfJtVfK52z-R5E77%Oa3wg98=f=N|b+0QeXyV&0)}S z7{?MG5a_>RzL9ISVZj;!*}&%=#UVS{MdwYBi`cTO0_3`V?X*lm1Z?T7;)<6t<SCbb z4e-v%uAWmVz5$kf_d~vlYk?ZjMJ4Ex`f7-#AXJARY6yiNfWnUmqK%+ynw?1il=ef{ zjiFdWDCUGP{siF}fD(}8=YYNr?i!I_1L*#7;iIF=&%xFPy72LF&^p1$0IM(Ii?3j` zEC4V}Mf4cx__ecnLaggIKNC!R2GBe3`wJ+@{VMzf_IEPo^T5mxu<#w|^su3C5`{$t z(08z001WU`P$A$IfwZ0tM*TBo6{Wm#0F{9Z0x%uoR908;D?v?FT|;%1!@yj1ZB=Vk zb#rxtJ#kuCtyufB2C9|h|J+blU;AMgQQd$R)^BRAuk$9(3hGs%#w|^aEjd&GHSB6^ zs_$+@L+HJ}<ataJI+q4on=nl+=x=n;+0+iT%C%xzpf>dY+G1zhI?&G>Q^sK1!sr~R zO9k86p3m47MPC_c#|k?S<2tYrV_c|9vt(kounX1M(}C^5-5gu!>+b6A?W$m^<9i6V z#uuT!L;bzo1l+)F#&RXwkkX4I;Rfs3$i9BOaL9m2z&B1E?H?pS!>GpJ7Q{gkd9Z(w zIDnqEq!I_oL@Ij5iAti;Ny8+{aQm#w2$?=gCSm71$Eg%5jY1z88=+Ij=o1Y32%E;3 z9Hos;&?m=P(_`!@#sqtEYLdm6W=_tqnA20Ub5rc8nO}3$^W5p*^Ro+!voo`tnHla9 zhdZ~#UEwayuPrU`mif!8i;FzL>e>p#TNSQBYXY7S;wu${Pk*jD%EjRnKur<@{}jHq zC(XelF=eauLL%JCBN70~bwx<Zz`)xq`E?QzWo>VP7)ETB(A<rpD_mS>Os&oTc8wuT zQy=^EN2_2ssR}=~Z@E`ax@VDzzs-1&lUDdjT9y&0u3WY)#6G<if1$S8^Nfenwc@C= zR|3-mhy@na7mBZt1714#%C$5;I?|ktV{!$`+|1GG<{j#;^IZQov)8@3?_hxmpQQK# z`Q15bHqBdZA3Xa*YH0ABDkeBG)^I4xB)a}h93dXlEj=|Qr|orS_H0af%R`HwbpvMm zWn|=Zgv-8ij`m(N#ZPJW@qUaBB#lTdd7<N_5#eSlnSHI{8RxQFXSB3gakyaORK^>5 zanZs2QNn$Gj|h_F9KTImbX9B1q3n2^pK?Pcar>rFV$sKf>CE$Fq{#-RE#+BbzE^Ee z&2UXQdJ#=0Ek;XwdY-PVsHiCGXlMSg|C0V%$Fm}eUBa+U?^w;wE>f9f%Jp~q6n$`T zh?exm*>7dT4T6=3Z|XJ!j4Dj&7GT9C){D(`%mO7cP#S_q&|H-dw1C9%Ay5EgNhTf> z3+Jn%RACD~iSF<tLPR6y+)nC>Axh)6Y-pkLXUk-T!@>RE{tr}5wVYn>5K1SGO9Jmz z(Zq2-kOGOYjwQ|@!t>$be05Z%NYow_5?*6=x6Owu++>rtV7kdkoQTg3vKlXxf8}Cx zAScbmCJ!wljJc(YDnQjd6uWYQZxZMkD)iV?tv~y>b?8Du#-W-@j%Ccs3*);d50<xF z-q+;!b|m$&vRm1~K#d4;$|W0pH7TJE*<qyt?hNx2QHp~p#fd(Z$R{eN*4&oe&1Y*o zHG|z%Qwu|cC2igDDPBAG(Y8JKdhxI)&ectqU*a#`^NWgf)#g5?Av@a@&y*o+jC`+{ z<E_H>k`zA{MMn_6CdaF6&ct7~eLj+Gsu*{pX>f9&Q}N98s*qE1VSarzHBF|OHF0&B z_Kt6Qo6ecmX+=jzdxlXzYFFcwC*?OrKioTKziP5KJx^aYIOwBOP+VNlBaBm!Iu?h= z3r__h97(GZzlz>hJrl&=|I$7N8<wY6en5+;SpL<}H6a!I0HN2s=XrxDD-u9IGx!m; z@ZurNcHep9n7v=quFbKsE6Q{*sNZzh9ts*>==$GM$)Oz_eFvk}i7HoDFOy>bj;AFh zC1*7DYidp;L|J2>60%I%PCGfx)kaX%U#Gn@Y%ZgiWIJB{dvw=HS?<l2F>epC`a8~_ zlag#Z{4Y6#j>u>0gj}2?c3t?~w#`0kx32NYPdXvQM^wF=V&h3RU&FiFbt_ekeOZr+ z<7xL>)!ycO*1x{iUDQ=vvT*V7j^XOq*!b+vr4ItJeY<7!uSRm0+7+f1UzX>_U%l_| zR*x7hB|2XXec#Q~E8Q0u#GHsxxD_9w%goC1TE5Ux6ldu`*%M6TY`&3{`PSV4iNxfP zj1{(PT?!8N9>qom2Tu+d8W?DMv`|A!1(B0oc^T?Au}PC^gzw*j*6d$1>^1Up+}xCU z_cIelV$18?U%R`zxvdEp<GE{{>S;rBXJvZRUkUppPN~oRdP}m94)U-SoWeLVY6~-l zb{5}BcV7!~WWFNg3>sSH({oB~rL-2)Q*@96Egp4CUtH?P`^<PbFV1QF`2K@IIGle* z_laD#&%V=hZiDF_&KI`Z2FgBhPuHM4#9~Vij;r942uAMip|i}T!-?Lo@c6APx$FxI zRnrGDyV$#SYL7JA)vYVg5MUIEG@_4bdxlr5|Lvzy+feEH%scu>j?1Jn+a<B5ytTE| zRNGgt%>vQwA5@ZIm_e{>OlBSmGT>-t*3N4tI*75P8b7RROqpL3F~+}dN2vpYWUT*N zggu;fBr(O_Aa>sWZPvxUFV_C4g?{qNaGWy`978+vM|3tGrHosl_b3N)z1fyJN98}< zl}5MoTH!mC#c@K3&F9NhpB<;jeYgpDTBta9ZAZhrPzr~!Q&S~V-n1vH>LC-v=_|0f z-V@q{IFK@1R7o^8l%a{RqNODM%=>fGmo3@;dYlxsqwfO(8J{J(I!?l5ROb$HV2LvU zdJ%02_zc23J8jCPmqt_(oDV>HW3wV~m$|*L11-5%QV#_=qyp=<wl>RPQC6tbshAdy zwiMH*hT81a?B|sqpw~ycQm*3a_fir%AAy&|ge1z2Z`0KFhT#J2)Y4;d`zp+0pJkov z%HsH{t2J>%P`B)gOq1_L?DaB|9*OsVv78a*YFs<o{I0YrX-G}+p}OF9|M^I*#8ip$ z>&?4*Q*_NQ(v+$iHZSh`DNWVjTM16Th!c-hb@t(#=lQ?{ueOpILr$#OuTJod^_%4r zT8nn^c;}4?k!cj}gVVo4eolYLO@6R<4Uw|2kLQw>dN$#PmTEbF;q0;C)jZ^4XQ+l} zO!&*fIX2eupQc<>v+1Kp>TmtBO+Wa@EB`ah{|Tf6Y?uyjV}Z>+W{~goC*J~CQDf`B O6<Aw1m=_*Df9GE{Jc{c8 literal 0 HcmV?d00001 diff --git a/_source/skins/kama/images/toolbar_start.gif b/_source/skins/kama/images/toolbar_start.gif new file mode 100644 index 0000000000000000000000000000000000000000..1774246c2ef37fa17cdcd971b3db38c713989818 GIT binary patch literal 105 zcmZ?wbhEHbWM&Xx*v!DNYH`cTMJ){#5iK=Q6WWtDtnAH5a-ToFbl$Y$qHMnfGs+q& z!l!hn{{R1<0Spv>vM@3*@G|Itcpx(vSj09kT*<OnVs>=evpCkexyN`q)l}NV7#XYq D|1u-x literal 0 HcmV?d00001 diff --git a/_source/skins/kama/mainui.css b/_source/skins/kama/mainui.css new file mode 100644 index 0000000..646d221 --- /dev/null +++ b/_source/skins/kama/mainui.css @@ -0,0 +1,203 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_kama +{ + display: block; +} + +/* Main editor only settings. */ +span.cke_skin_kama +{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 1px solid #D3D3D3; + padding: 5px; +} + +.cke_skin_kama span.cke_browser_webkit, +.cke_skin_kama span.cke_browser_gecko18 +{ + display: block; +} + +.cke_skin_kama .cke_wrapper +{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + background-color: #d3d3d3; + background-image: url(images/sprites.png); + background-repeat: repeat-x; + background-position: 0 -1950px; + display: block; + /* IE Quirks: editor chrome overflow horizontally without an explicit width. */ + _display: inline-block; + padding: 5px; + + /*background-color: Red;*/ +} + +.cke_shared .cke_skin_kama .cke_wrapper +{ + padding-bottom: 0; +} + +.cke_skin_kama .cke_browser_ie6 .cke_wrapper, +.cke_skin_kama .cke_browser_iequirks .cke_wrapper +{ + background-image: none; +} + +.cke_skin_kama .cke_editor +{ + display: inline-table; + width: 100%; +} +.cke_skin_kama .cke_browser_webkit .cke_editor +{ + display: table; /* #6684 */ +} + +.cke_skin_kama .ltr .cke_browser_ie iframe +{ + margin-right: -10px; +} + +.cke_skin_kama .rtl .cke_browser_ie iframe +{ + margin-left: -10px; +} + +.cke_skin_kama .cke_browser_opera .cke_editor.cke_skin_kama .cke_resizer +{ + display: table; +} + +.cke_skin_kama .cke_contents +{ + margin: 5px; +} + +.cke_skin_kama .cke_hc .cke_contents +{ + border: 1px solid black; +} + +.cke_skin_kama .cke_contents iframe +{ + background-color: #fff; +} + +.cke_skin_kama .cke_focus +{ + outline: auto 5px -webkit-focus-ring-color; +} + +.cke_skin_kama textarea.cke_source +{ + font-family: 'Courier New' , Monospace; + font-size: small; + background-color: #fff; + white-space: pre; +} + +.cke_skin_kama .cke_browser_iequirks textarea.cke_source +{ + /* For IE6+Quirks only */ + _white-space: normal; +} + +.cke_skin_kama .cke_resizer +{ + width: 12px; + height: 12px; + margin-top: 9px; + display: block; + float: right; + /* resizer.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -1428px; + background-repeat: no-repeat; + cursor: se-resize; +} + +/* Adobe AIR doesn't support *-resize cursor shape. */ +.cke_skin_kama .cke_browser_air .cke_resizer, +.cke_skin_kama .cke_browser_air .cke_rtl .cke_resizer +{ + cursor: move; +} + +.cke_skin_kama .cke_resizer_rtl +{ + cursor: sw-resize; + /* resizer_rtl.gif*/ + background-position: 0 -1455px; + float: left; +} + +.cke_skin_kama .cke_resizer_horizontal, +.cke_skin_kama .cke_rtl .cke_resizer_horizontal +{ + cursor: e-resize; +} + +.cke_skin_kama .cke_resizer_vertical, +.cke_skin_kama .cke_rtl .cke_resizer_vertical +{ + cursor: n-resize; +} + +.cke_skin_kama .cke_maximized .cke_resizer +{ + display: none; +} + +.cke_skin_kama .cke_browser_ie6 .cke_contents textarea, +.cke_skin_kama .cke_browser_ie7 .cke_contents textarea +{ + position: absolute; +} + +.cke_skin_kama .cke_browser_ie.cke_browser_quirks .cke_contents iframe +{ + position: absolute; + top: 0; +} + +.cke_skin_kama .cke_browser_ie6 .cke_editor, +.cke_skin_kama .cke_browser_ie7 .cke_editor +{ + display: inline-block; +} + +.cke_skin_kama .cke_browser_ie6 .cke_editor, +.cke_shared .cke_skin_kama .cke_browser_ie7 .cke_wrapper +{ + padding-bottom: 5px; +} + +/* All voice labels are not displayed. */ +.cke_skin_kama .cke_voice_label +{ + display: none; +} + +.cke_skin_kama legend.cke_voice_label +{ + display: none; +} + +.cke_skin_kama .cke_browser_ie legend.cke_voice_label +{ + position: absolute; + display: block; + width: 0; + height: 0; + overflow: hidden; +} diff --git a/_source/skins/kama/menu.css b/_source/skins/kama/menu.css new file mode 100644 index 0000000..52ba9fc --- /dev/null +++ b/_source/skins/kama/menu.css @@ -0,0 +1,232 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_kama .cke_contextmenu +{ + padding: 2px; +} + +.cke_skin_kama .cke_menuitem a +{ + display:block; +} + +.cke_skin_kama .cke_menuitem span +{ + cursor: default; +} + +.cke_skin_kama .cke_menuitem a:hover, +.cke_skin_kama .cke_menuitem a:focus, +.cke_skin_kama .cke_menuitem a:active +{ + background-color: #D3D3D3; + display:block; +} + +.cke_hc .cke_menuitem a:hover, +.cke_hc .cke_menuitem a:focus, +.cke_hc .cke_menuitem a:active +{ + border: 2px solid; +} + +.cke_skin_kama .cke_menuitem .cke_icon +{ + background-image: url(icons.png); + background-position: 100px; + background-repeat:no-repeat; + background-color: transparent; + width: 16px; + height: 16px; + float: left; +} + +.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon +{ + background-image: url(icons_rtl.png); +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_browser_ie .cke_skin_kama .cke_menuitem .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie6 .cke_skin_kama .cke_menuitem .cke_icon, +.cke_browser_ie .cke_skin_kama .cke_menuitem.cke_noalphafix .cke_icon +{ + filter: ; +} + +.cke_skin_kama .cke_menuitem .cke_disabled .cke_icon +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_browser_ie .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie6 .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon, +.cke_browser_ie .cke_skin_kama .cke_menuitem.cke_noalphafix .cke_disabled .cke_icon +{ + filter: ; +} + +.cke_skin_kama .cke_menuitem .cke_icon_wrapper +{ + background-color: #D3D3D3; + border: solid 4px #D3D3D3; + width: 16px; + height: 16px; + float: left; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + clear: both; +} + +.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon_wrapper +{ + float: right; +} + +.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper, +.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper, +.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper +{ + background-color: #9d9d9d; + border: solid 4px #9d9d9d; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.cke_skin_kama .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper, +.cke_skin_kama .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper, +.cke_skin_kama .cke_menuitem a:active.cke_disabled .cke_icon_wrapper +{ + background-color: #D3D3D3; + border: solid 4px #D3D3D3; +} + +.cke_skin_kama .cke_menuitem .cke_label +{ + display:block; + padding-right: 3px; + padding-top: 5px; + padding-left: 4px; + height:19px; + margin-left: 24px; + background-color: #fff; +} +/* Set these after the document has been loaded and we know the dimensions*/ +.cke_skin_kama .cke_frameLoaded .cke_menuitem .cke_label +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.cke_rtl .cke_skin_kama .cke_menuitem .cke_label +{ + padding-right: 0; + margin-left: 0; + padding-left: 3px; + margin-right: 28px; +} + +.cke_skin_kama .cke_menuitem a.cke_disabled .cke_label +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.30; /* Safari, Opera and Mozilla */ +} + +.cke_skin_kama .cke_menuitem a:hover .cke_label, +.cke_skin_kama .cke_menuitem a:focus .cke_label, +.cke_skin_kama .cke_menuitem a:active .cke_label +{ + background-color: #D3D3D3; +} + +.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label, +.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label, +.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label +{ + background-color: transparent; +} + +.cke_skin_kama .cke_menuseparator +{ + background-color: #D3D3D3; + height: 2px; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + + _font-size: 0; +} + +.cke_skin_kama .cke_menuarrow +{ + /* arrowright.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -1411px; + background-repeat: no-repeat; + height: 5px; + width: 3px; + float: right; + margin-right: 2px; + margin-top: 3px; +} + +.cke_rtl .cke_skin_kama .cke_menuarrow +{ + float: left; + margin-right: 0; + margin-left: 2px; + /* arrowleft.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0px -1390px; + background-repeat: no-repeat; +} + +.cke_skin_kama .cke_menuarrow span +{ + display: none; +} + +.cke_hc .cke_skin_kama .cke_menuarrow +{ + width: auto; + margin-top: 0; +} + +.cke_hc .cke_skin_kama .cke_menuarrow span +{ + display: inline; +} + +/* #3766 In the context menu, long labels with second level menu get wrapped */ +.cke_browser_ie.cke_ltr .cke_skin_kama .cke_menuarrow +{ + position: absolute; + right: 2px; +} + +.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuarrow +{ + position: absolute; + left: 2px; +} +/* END #3766 */ diff --git a/_source/skins/kama/panel.css b/_source/skins/kama/panel.css new file mode 100644 index 0000000..c8db117 --- /dev/null +++ b/_source/skins/kama/panel.css @@ -0,0 +1,217 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_kama .cke_panel +{ + border: 1px solid #8f8f73; + background-color: #fff; + + width: 120px; + height: 100px; + + overflow: hidden; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.cke_skin_kama .cke_contextmenu +{ + margin: 0; +} + +/* Ideally we would use "inherit here"... but you know... IE :( */ +.cke_skin_kama .cke_panel iframe +{ + width: 100%; + height: 100%; +} + +/* + * All the following styles are to be used inside the iframe that holds panel + * contents. We don't use the cke_skin_default there to avoid the reset to be + * active. + * This is not an issue as we'll never have two skins running inside the same + * panel iframe. + */ + +html.cke_skin_kama_container +{ + overflow: auto; + overflow-x: hidden; +} + +body.cke_panel_frame +{ + overflow: auto; +} + +.cke_panel_frame .cke_label +{ + display: none; +} + +ul.cke_panel_list +{ + list-style-type: none; + margin: 3px; + padding: 0px; + white-space: nowrap; +} + +li.cke_panel_listItem +{ + margin: 0px; +} + +.cke_panel_listItem a +{ + padding: 2px; + display: block; + border: 1px solid #fff; + color: inherit !important; + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; +} + +/* IE6 */ +* html .cke_panel_listItem a +{ + width : 100%; + + /* IE is not able to inherit the color, so we must force it to black */ + color: #000; +} + +/* IE7 */ +*:first-child+html .cke_panel_listItem a +{ + /* IE is not able to inherit the color, so we must force it to black */ + color: #000; +} + +.cke_panel_listItem.cke_selected a +{ + border: 1px solid #ccc; + background-color: #e9f5ff; +} + +.cke_panel_listItem a:hover, +.cke_panel_listItem a:focus, +.cke_panel_listItem a:active +{ + border-color: #316ac5; + background-color: #dff1ff; +} + +.cke_hc .cke_panel_listItem.cke_selected a, +.cke_hc .cke_panel_listItem a:hover, +.cke_hc .cke_panel_listItem a:focus, +.cke_hc .cke_panel_listItem a:active +{ + border-width: 3px; + padding: 0px; +} + +.cke_panel_grouptitle +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; + font-weight: bold; + white-space: nowrap; + background-color: #dcdcdc; + color: #000; + margin:0px; + padding:3px; +} + +.cke_panel_listItem p, +.cke_panel_listItem h1, +.cke_panel_listItem h2, +.cke_panel_listItem h3, +.cke_panel_listItem h4, +.cke_panel_listItem h5, +.cke_panel_listItem h6, +.cke_panel_listItem pre +{ + margin-top: 3px; + margin-bottom: 3px; +} + +.cke_skin_kama .cke_button_textcolor_panel, +.cke_skin_kama .cke_button_bgcolor_panel +{ + width: 150px; + height: 135px; +} + +.cke_colorblock +{ + padding: 3px; + font-size: 11px; + font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif; +} + +.cke_colorblock, +.cke_colorblock a +{ + text-decoration: none; + color: #000; +} + +span.cke_colorbox +{ + width: 10px; + height: 10px; + border: #808080 1px solid; + float: left; +} + +.cke_rtl span.cke_colorbox +{ + float: right; +} + +a.cke_colorbox +{ + border: #fff 1px solid; + padding: 2px; + float: left; +} + +.cke_rtl a.cke_colorbox +{ + float: right; +} + +a:hover.cke_colorbox, +a:focus.cke_colorbox, +a:active.cke_colorbox +{ + border: #316ac5 1px solid; + background-color: #dff1ff; +} + +a.cke_colorauto, +a.cke_colormore +{ + border: #fff 1px solid; + padding: 2px; + display: block; + cursor: pointer; +} + +a:hover.cke_colorauto, +a:hover.cke_colormore, +a:focus.cke_colorauto, +a:focus.cke_colormore, +a:active.cke_colorauto, +a:active.cke_colormore +{ + border: #316ac5 1px solid; + background-color: #dff1ff; +} diff --git a/_source/skins/kama/presets.css b/_source/skins/kama/presets.css new file mode 100644 index 0000000..2cd10b0 --- /dev/null +++ b/_source/skins/kama/presets.css @@ -0,0 +1,49 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/* "Source" button label */ +.cke_skin_kama .cke_button_source .cke_label +{ + display: inline; +} + +/* "Styles" panel size */ +.cke_skin_kama .cke_styles_panel +{ + width: 150px; + height: 170px; +} + +/* "Format" panel size */ +.cke_skin_kama .cke_format_panel +{ + width: 150px; + height: 170px; +} + +/* "Font" panel size */ +.cke_skin_kama .cke_font_panel +{ + width: 150px; + height: 170px; +} + +/* "Font Size" panel size */ +.cke_skin_kama .cke_fontSize_panel +{ + height: 170px; +} + +/* "Font Size" combo width */ +.cke_skin_kama .cke_fontSize .cke_text +{ + width: 25px; +} + +/* "Font Size" combo width (IE Quirks) */ +.cke_skin_kama .cke_browser_iequirks .cke_fontSize .cke_text +{ + width: 32px; +} diff --git a/_source/skins/kama/reset.css b/_source/skins/kama/reset.css new file mode 100644 index 0000000..fb299b0 --- /dev/null +++ b/_source/skins/kama/reset.css @@ -0,0 +1,84 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Reset and Default Values + */ +.cke_skin_kama *, +.cke_skin_kama a:hover, +.cke_skin_kama a:link, +.cke_skin_kama a:visited, +.cke_skin_kama a:active +{ + margin: 0; + padding: 0; + border: 0; + background: transparent; + text-decoration: none; + font: normal normal normal 100% Sans-Serif; + width: auto; + height: auto; + border-collapse: collapse; + text-align: left; + vertical-align: baseline; + white-space: nowrap; + cursor: auto; + color: #000; + + font-size: 12px; + font-family: Arial,Helvetica,Tahoma,Verdana,Sans-Serif; +} + +.cke_skin_kama .cke_rtl *, +.cke_skin_kama .cke_rtl a:hover, +.cke_skin_kama .cke_rtl a:link, +.cke_skin_kama .cke_rtl a:visited, +.cke_skin_kama .cke_rtl a:active, +.cke_rtl .cke_skin_kama *, +.cke_rtl .cke_skin_kama a:hover, +.cke_rtl .cke_skin_kama a:link, +.cke_rtl .cke_skin_kama a:visited, +.cke_rtl .cke_skin_kama a:active +{ + text-align: right; +} + +.cke_skin_kama iframe +{ + vertical-align: inherit; /** For IE */ +} + +.cke_skin_kama textarea +{ + white-space: pre; +} + +.cke_skin_kama .cke_browser_gecko textarea +{ + cursor: text; +} + +.cke_skin_kama .cke_browser_gecko textarea[disabled] +{ + cursor: default; +} + +.cke_skin_kama input[type="text"], +.cke_skin_kama input[type="password"] +{ + cursor: text; +} + +.cke_skin_kama input[type="text"][disabled], +.cke_skin_kama input[type="password"][disabled] +{ + cursor: default; +} + +.cke_skin_kama fieldset +{ + padding: 10px; + border: 2px groove #E0DFE3; +} diff --git a/_source/skins/kama/richcombo.css b/_source/skins/kama/richcombo.css new file mode 100644 index 0000000..e6c7736 --- /dev/null +++ b/_source/skins/kama/richcombo.css @@ -0,0 +1,287 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/* Special Combo */ + +.cke_skin_kama .cke_rcombo +{ + display: inline; +} + +.cke_skin_kama .cke_rtl .cke_rcombo +{ +} + +.cke_skin_kama .cke_rcombopanel +{ + border: 1px solid #8F8F73; + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + height: auto; + _height: 100px; +} + +/* IE6 workaround, shouldn't be here */ +.cke_skin_kama .cke_browser_iequirks .cke_rcombopanel, +.cke_skin_kama .cke_browser_ie6 .cke_rcombopanel +{ +/* width: 150px;*/ +} + +.cke_skin_kama .cke_rcombo a, +.cke_skin_kama .cke_rcombo a:active, +.cke_skin_kama .cke_rcombo a:hover +{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: repeat-x; + background-position: 0 -100px; + border-bottom:1px solid #DAD9D9; + border-right:1px solid #DAD9D9; + float:left; + padding: 2px; + height: 21px; + margin-right: 6px; + margin-bottom: 5px; +} + +.cke_skin_kama .cke_rtl .cke_rcombo a, +.cke_skin_kama .cke_rtl .cke_rcombo a:active, +.cke_skin_kama .cke_rtl .cke_rcombo a:hover +{ + float:right; + margin-right: 0; + margin-left: 6px; +} + +.cke_skin_kama .cke_hc .cke_rcombo a +{ + filter: alpha(opacity=100); /* IE */ + opacity: 1.0; /* Safari, Opera and Mozilla */ +} + +.cke_skin_kama .cke_rcombo .cke_label +{ + display: none; + line-height: 26px; + vertical-align: top; + margin-right: 5px; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + /* background-color: #f1f1e3; Because of IE6+ClearType */ +} + +.cke_skin_kama .cke_rtl .cke_rcombo .cke_label +{ + margin-right: 0; + margin-left: 5px; +} + +.cke_skin_kama .cke_rcombo .cke_inline_label +{ + line-height: 21px; + font-style: italic; + color: #666666; +} + +.cke_skin_kama .cke_hc .cke_rcombo .cke_openbutton +{ + vertical-align: top; +} + +.cke_skin_kama .cke_hc .cke_rcombo .cke_label +{ + filter: alpha(opacity=100); + opacity: 1.0; +} + +.cke_skin_kama .cke_rcombo .cke_text +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + + height: 21px; + line-height: 21px; + width:60px; + text-overflow: ellipsis; + overflow: hidden; + display: inline-block; + margin: 0 2px 0 4px; + cursor: default; +} + +.cke_skin_kama .cke_rtl .cke_rcombo .cke_text +{ + margin: 0 4px 0 2px; +} + +.cke_skin_kama .cke_rcombo .cke_openbutton +{ + display: inline-block; +} + +.cke_skin_kama .cke_rcombo .cke_openbutton .cke_icon +{ + display: inline-block; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -68px; + background-repeat: no-repeat; + width: 17px; + height: 19px; + margin: 1px 2px; +} + +.cke_skin_kama .cke_hc .cke_rcombo .cke_openbutton .cke_icon +{ + background: none; +} + +.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_openbutton +{ + margin-bottom: 0; +} + +.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_text, +.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_text, +.cke_skin_kama .cke_rcombo .cke_off a:active .cke_text, +.cke_skin_kama .cke_rcombo .cke_on .cke_text +{ + border-color: #316ac5; + filter: alpha(opacity=100); /* IE */ + opacity: 1; /* Safari, Opera and Mozilla */ +} + +.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_openbutton, +.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_openbutton, +.cke_skin_kama .cke_rcombo .cke_off a:active .cke_openbutton, +.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton +{ + border-color: #316ac5; + background-color: #dff1ff; +} + +.cke_skin_kama .cke_rcombo .cke_on .cke_text +{ + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton +{ + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; +} + +.cke_skin_kama .cke_rcombo .cke_disabled .cke_label +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.3; /* Safari, Opera and Mozilla */ +} + +.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_label +{ + filter: alpha(opacity=70); + opacity: 0.7; +} + +.cke_skin_kama .cke_rcombo .cke_disabled .cke_text, +.cke_skin_kama .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=50); /* IE */ + opacity: 0.5; /* Safari, Opera and Mozilla */ +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_kama .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50); +} +.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=50); +} + +.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_text, +.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=80); + opacity: 0.8; +} + +.cke_skin_kama .cke_rcombo .cke_disabled .cke_text +{ + color: #fff; +} + +/* RTL */ + +.cke_skin_kama .cke_rtl .cke_rcombo span +{ +/* _zoom: 1;*/ +} + +.cke_skin_kama .cke_rtl .cke_rcombo .cke_text +{ +/* _float: left;*/ +} + +/* Firefox 2 & WebKit Section */ + +.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_text, +.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_openbutton, +.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_text, +.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_openbutton +{ + display: block; + float: left; +} + +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_text, +.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text +{ +/* float: right;*/ +} + +.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_label, +.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_label +{ + /*display: block;*/ + float: left; +} + +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_label, +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_text, +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_openbutton, +.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label, +.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text, +.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton +{ + float: right; +} + +.cke_skin_kama .cke_browser_ie7 .cke_rcombo .cke_text +{ + line-height: 18px; +} + +.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_text, +.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_text +{ + height: auto; + line-height: 17px; +} + +.cke_skin_kama .cke_rtl .cke_rcombo .cke_font .cke_text, +.cke_skin_kama .cke_rtl .cke_rcombo .cke_fontSize .cke_text +{ + direction: ltr; +} diff --git a/_source/skins/kama/skin.js b/_source/skins/kama/skin.js new file mode 100644 index 0000000..922bf19 --- /dev/null +++ b/_source/skins/kama/skin.js @@ -0,0 +1,236 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.skins.add( 'kama', (function() +{ + var uiColorStylesheetId = 'cke_ui_color'; + + return { + editor : { css : [ 'editor.css' ] }, + dialog : { css : [ 'dialog.css' ] }, + richcombo : { canGroup: false }, + templates : { css : [ 'templates.css' ] }, + margins : [ 0, 0, 0, 0 ], + init : function( editor ) + { + if ( editor.config.width && !isNaN( editor.config.width ) ) + editor.config.width -= 12; + + var uiColorMenus = []; + var uiColorRegex = /\$color/g; + var uiColorMenuCss = "/* UI Color Support */\ +.cke_skin_kama .cke_menuitem .cke_icon_wrapper\ +{\ + background-color: $color !important;\ + border-color: $color !important;\ +}\ +\ +.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,\ +.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,\ +.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper\ +{\ + background-color: $color !important;\ + border-color: $color !important;\ +}\ +\ +.cke_skin_kama .cke_menuitem a:hover .cke_label,\ +.cke_skin_kama .cke_menuitem a:focus .cke_label,\ +.cke_skin_kama .cke_menuitem a:active .cke_label\ +{\ + background-color: $color !important;\ +}\ +\ +.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,\ +.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,\ +.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label\ +{\ + background-color: transparent !important;\ +}\ +\ +.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,\ +.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,\ +.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper\ +{\ + background-color: $color !important;\ + border-color: $color !important;\ +}\ +\ +.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper\ +{\ + background-color: $color !important;\ + border-color: $color !important;\ +}\ +\ +.cke_skin_kama .cke_menuseparator\ +{\ + background-color: $color !important;\ +}\ +\ +.cke_skin_kama .cke_menuitem a:hover,\ +.cke_skin_kama .cke_menuitem a:focus,\ +.cke_skin_kama .cke_menuitem a:active\ +{\ + background-color: $color !important;\ +}"; + // We have to split CSS declarations for webkit. + if ( CKEDITOR.env.webkit ) + { + uiColorMenuCss = uiColorMenuCss.split( '}' ).slice( 0, -1 ); + for ( var i = 0 ; i < uiColorMenuCss.length ; i++ ) + uiColorMenuCss[ i ] = uiColorMenuCss[ i ].split( '{' ); + } + + function getStylesheet( document ) + { + var node = document.getById( uiColorStylesheetId ); + if ( !node ) + { + node = document.getHead().append( 'style' ); + node.setAttribute( "id", uiColorStylesheetId ); + node.setAttribute( "type", "text/css" ); + } + return node; + } + + function updateStylesheets( styleNodes, styleContent, replace ) + { + var r, i, content; + for ( var id = 0 ; id < styleNodes.length ; id++ ) + { + if ( CKEDITOR.env.webkit ) + { + for ( i = 0 ; i < styleContent.length ; i++ ) + { + content = styleContent[ i ][ 1 ]; + for ( r = 0 ; r < replace.length ; r++ ) + content = content.replace( replace[ r ][ 0 ], replace[ r ][ 1 ] ); + + styleNodes[ id ].$.sheet.addRule( styleContent[ i ][ 0 ], content ); + } + } + else + { + content = styleContent; + for ( r = 0 ; r < replace.length ; r++ ) + content = content.replace( replace[ r ][ 0 ], replace[ r ][ 1 ] ); + + if ( CKEDITOR.env.ie ) + styleNodes[ id ].$.styleSheet.cssText += content; + else + styleNodes[ id ].$.innerHTML += content; + } + } + } + + var uiColorRegexp = /\$color/g; + + CKEDITOR.tools.extend( editor, + { + uiColor: null, + + getUiColor : function() + { + return this.uiColor; + }, + + setUiColor : function( color ) + { + var cssContent, + uiStyle = getStylesheet( CKEDITOR.document ), + cssId = '.' + editor.id; + + var cssSelectors = + [ + cssId + " .cke_wrapper", + cssId + "_dialog .cke_dialog_contents", + cssId + "_dialog a.cke_dialog_tab", + cssId + "_dialog .cke_dialog_footer" + ].join( ',' ); + var cssProperties = "background-color: $color !important;"; + + if ( CKEDITOR.env.webkit ) + cssContent = [ [ cssSelectors, cssProperties ] ]; + else + cssContent = cssSelectors + '{' + cssProperties + '}'; + + return ( this.setUiColor = + function( color ) + { + var replace = [ [ uiColorRegexp, color ] ]; + editor.uiColor = color; + + // Update general style. + updateStylesheets( [ uiStyle ], cssContent, replace ); + + // Update menu styles. + updateStylesheets( uiColorMenus, uiColorMenuCss, replace ); + })( color ); + } + }); + + editor.on( 'menuShow', function( event ) + { + var panel = event.data[ 0 ]; + var iframe = panel.element.getElementsByTag( 'iframe' ).getItem( 0 ).getFrameDocument(); + + // Add stylesheet if missing. + if ( !iframe.getById( 'cke_ui_color' ) ) + { + var node = getStylesheet( iframe ); + uiColorMenus.push( node ); + + var color = editor.getUiColor(); + // Set uiColor for new menu. + if ( color ) + updateStylesheets( [ node ], uiColorMenuCss, [ [ uiColorRegexp, color ] ] ); + } + }); + + // Apply UI color if specified in config. + if ( editor.config.uiColor ) + editor.setUiColor( editor.config.uiColor ); + } + }; +})() ); + +(function() +{ + CKEDITOR.dialog ? dialogSetup() : CKEDITOR.on( 'dialogPluginReady', dialogSetup ); + + function dialogSetup() + { + CKEDITOR.dialog.on( 'resize', function( evt ) + { + var data = evt.data, + width = data.width, + height = data.height, + dialog = data.dialog, + contents = dialog.parts.contents; + + if ( data.skin != 'kama' ) + return; + + contents.setStyles( + { + width : width + 'px', + height : height + 'px' + }); + }); + } +})(); + +/** + * The base user interface color to be used by the editor. Not all skins are + * compatible with this setting. + * @name CKEDITOR.config.uiColor + * @type String + * @default '' (empty) + * @example + * // Using a color code. + * config.uiColor = '#AADC6E'; + * @example + * // Using an HTML color name. + * config.uiColor = 'Gold'; + */ diff --git a/_source/skins/kama/templates.css b/_source/skins/kama/templates.css new file mode 100644 index 0000000..e79adc6 --- /dev/null +++ b/_source/skins/kama/templates.css @@ -0,0 +1,88 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Styles for the "templates" plugin. + */ + +.cke_skin_kama .cke_tpl_list +{ + border: #dcdcdc 2px solid; + background-color: #ffffff; + overflow-y: auto; + overflow-x: hidden; + width: 100%; + height: 220px; +} + +.cke_skin_kama .cke_tpl_item +{ + margin: 5px; + padding: 7px; + border: #eeeeee 1px solid; + *width: 88%; +} + +.cke_skin_kama .cke_tpl_preview +{ + border-collapse: separate; + text-indent:0; + width: 100%; +} +.cke_skin_kama .cke_tpl_preview td +{ + padding: 2px; + vertical-align: middle; +} +.cke_skin_kama .cke_tpl_preview .cke_tpl_preview_img +{ + width: 100px; +} +.cke_skin_kama .cke_tpl_preview span +{ + white-space: normal; +} + +.cke_skin_kama .cke_tpl_title +{ + font-weight: bold; +} + +.cke_skin_kama .cke_tpl_list a:active .cke_tpl_item, +.cke_skin_kama .cke_tpl_list a:hover .cke_tpl_item, +.cke_skin_kama .cke_tpl_list a:focus .cke_tpl_item +{ + border: #ff9933 1px solid; + background-color: #fffacd; +} + +.cke_skin_kama .cke_tpl_list a:active *, +.cke_skin_kama .cke_tpl_list a:hover *, +.cke_skin_kama .cke_tpl_list a:focus * +{ + cursor: pointer; +} + +/* IE6 contextual selectors childs won't get :hover transition until, + the hover style of the link itself contains certain CSS declarations.*/ +.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:active, +.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:hover, +.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:focus +{ + background-position: 0 0; +} + +.cke_skin_kama .cke_hc .cke_tpl_list a:active .cke_tpl_item, +.cke_skin_kama .cke_hc .cke_tpl_list a:hover .cke_tpl_item, +.cke_skin_kama .cke_hc .cke_tpl_list a:focus .cke_tpl_item +{ + border-width: 3px; +} + +.cke_skin_kama .cke_tpl_empty, .cke_tpl_loading +{ + text-align: center; + padding: 5px; +} diff --git a/_source/skins/kama/toolbar.css b/_source/skins/kama/toolbar.css new file mode 100644 index 0000000..898b70a --- /dev/null +++ b/_source/skins/kama/toolbar.css @@ -0,0 +1,407 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@media print +{ + /* For printing, we simply hide the toolbar */ + + .cke_skin_kama .cke_toolbox + { + display: none; + } +} + +.cke_skin_kama .cke_browser_webkit .cke_toolbox, +.cke_skin_kama .cke_browser_webkit .cke_toolbox > span +{ + white-space: normal; +} + +.cke_skin_kama .cke_toolbox +{ + clear: both; + /* Define the padding-bottom otherwise the collapser button will not be clickable #4932*/ + padding-bottom: 1px; +} + +.cke_skin_kama a.cke_toolbox_collapser, +.cke_skin_kama a:hover.cke_toolbox_collapser +{ + /* arrowtop.gif */ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 3px -1366px; /* +3px +4px */ + background-repeat: no-repeat; + width: 11px; + height: 11px; + float: right; + border: 1px outset #D3D3D3; + margin: 11px 0 2px; + cursor: pointer; +} + +.cke_skin_kama .cke_rtl a.cke_toolbox_collapser, +.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser +{ + float: left; +} + +.cke_skin_kama a.cke_toolbox_collapser span +{ + display: none; +} + +.cke_skin_kama .cke_hc a.cke_toolbox_collapser span +{ + font-size: 10px; + font-weight: bold; + font-family: Arial; + display: inline; +} + +.cke_skin_kama a.cke_toolbox_collapser_min, +.cke_skin_kama a:hover.cke_toolbox_collapser_min +{ + /* arrowleft.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 4px -1387px; /* +4px +3px */ + background-repeat: no-repeat; + margin: 2px 4px; +} + +.cke_skin_kama .cke_rtl a.cke_toolbox_collapser_min, +.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser_min +{ + /* arrowright.gif*/ + background-position: 4px -1408px; /* +2px +3px */ +} + +.cke_skin_kama .cke_separator +{ + display: inline-block; + border-left: solid 1px #D3D3D3; + margin: 3px 2px 0; + height: 16px; + + /* These are for IE < 8, but it's ok for the others */ + vertical-align: top; +} + +.cke_skin_kama .cke_break +{ + font-size: 0; + clear: left; +} + +.cke_skin_kama .cke_rtl .cke_break +{ + clear: right; +} + +.cke_skin_kama .cke_toolbar_start +{ + display: none; +} + +.cke_skin_kama .cke_toolgroup +{ + -moz-border-radius:5px; + -webkit-border-radius: 5px; + border-radius: 5px; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: repeat-x; + background-position: 0 -500px; + float: left; + margin-right: 6px; + margin-bottom: 5px; + padding: 2px; + display: inline; +} + +.cke_skin_kama .cke_rtl .cke_toolgroup +{ + float: right; + margin-right: 0; + margin-left: 6px; +} + +.cke_skin_kama .cke_button a, +.cke_skin_kama .cke_button a:hover, +.cke_skin_kama .cke_button a:focus, +.cke_skin_kama .cke_button a:active, +.cke_skin_kama .cke_button a.cke_off +{ + border-radius: 3px; + outline: none; + padding: 2px 4px; + height: 18px; + display: inline-block; + cursor: default; +} + +.cke_skin_kama .cke_button a, +.cke_skin_kama .cke_button a.cke_off +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +.cke_skin_kama .cke_hc .cke_button a, +.cke_skin_kama .cke_hc .cke_button a.cke_off +{ + opacity: 1.0; + filter: alpha(opacity=100); + border: 1px solid white; +} + +.cke_skin_kama .cke_button a.cke_on +{ + background-color: #a3d7ff; + filter: alpha(opacity=100); /* IE */ + opacity: 1; /* Safari, Opera and Mozilla */ + padding: 2px 4px; +} + +.cke_skin_kama .cke_hc .cke_button a.cke_on +{ + padding: 0 2px !important; + border-width: 3px; +} + +.cke_skin_kama .cke_button a.cke_disabled * +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.3; /* Safari, Opera and Mozilla */ +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_kama .cke_browser_ie .cke_button a.cke_disabled *, +.cke_skin_kama .cke_browser_ie a:hover.cke_button .cke_disabled * +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30); +} +.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *, +.cke_skin_kama .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled * +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30); +} +.cke_skin_kama .cke_browser_ie6 .cke_button a.cke_disabled *, +.cke_skin_kama .cke_browser_ie6 a:hover.cke_button .cke_disabled *, +.cke_skin_kama .cke_browser_ie .cke_button.cke_noalphafix a.cke_disabled * +{ + filter: alpha(opacity=30); +} + +.cke_skin_kama .cke_hc .cke_button a.cke_disabled *, +.cke_skin_kama .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled * +{ + filter: alpha(opacity=60); + opacity: 0.6; +} + +.cke_skin_kama .cke_button a:hover.cke_on, +.cke_skin_kama .cke_button a:focus.cke_on, +.cke_skin_kama .cke_button a:active.cke_on, /* IE */ +.cke_skin_kama .cke_button a:hover.cke_off, +.cke_skin_kama .cke_button a:focus.cke_off, +.cke_skin_kama .cke_button a:active.cke_off /* IE */ +{ + filter: alpha(opacity=100); /* IE */ + opacity: 1; /* Safari, Opera and Mozilla */ + padding: 2px 4px; +} + +.cke_skin_kama .cke_button a:hover, +.cke_skin_kama .cke_button a:focus, +.cke_skin_kama .cke_button a:active /* IE */ +{ + background-color: #dff1ff; +} + +.cke_skin_kama .cke_button a:hover.cke_on, +.cke_skin_kama .cke_button a:focus.cke_on, +.cke_skin_kama .cke_button a:active.cke_on /* IE */ +{ + background-color: #86caff; +} + +.cke_skin_kama .cke_hc .cke_button a:hover, +.cke_skin_kama .cke_hc .cke_button a:focus, +.cke_skin_kama .cke_hc .cke_button a:active /* IE */ +{ + padding: 0 2px !important; + border-width: 3px; +} + +.cke_skin_kama .cke_button .cke_icon +{ + background-image: url(icons.png); + background-position: 100px; + background-repeat: no-repeat; + margin-top: 1px; + width: 16px; + height: 16px; + display: inline-block; + cursor: default; +} + +.cke_skin_kama .cke_rtl .cke_button .cke_icon +{ + background-image: url(icons_rtl.png); +} +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_kama .cke_browser_ie .cke_button .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_kama .cke_browser_ie6 .cke_button .cke_icon, +.cke_skin_kama .cke_browser_ie6 .cke_rtl .cke_button .cke_icon, +.cke_skin_kama .cke_browser_ie .cke_button.cke_noalphafix .cke_icon, +.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button.cke_noalphafix .cke_icon +{ + filter: ; +} + + +.cke_skin_kama .cke_button .cke_label +{ + cursor: default; + display: none; + padding-left: 3px; + line-height: 18px; +} + +.cke_skin_kama .cke_hc .cke_button .cke_label +{ + padding: 0; + display: inline-block; +} + +.cke_skin_kama .cke_hc .cke_button .cke_icon +{ + display: none; +} + +.cke_skin_kama .cke_accessibility +{ + position: absolute; + display: block; + width: 0; + height: 0; + overflow: hidden; +} + +.cke_skin_kama .cke_button .cke_buttonarrow +{ + display: inline-block; + height: 17px; + width: 8px; + background-position: 2px -1469px; /* (+2, -5) */ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: no-repeat; + cursor: default; +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_kama .cke_browser_ie .cke_button .cke_buttonarrow +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_kama .cke_browser_ie6 .cke_button .cke_buttonarrow +{ + filter: ; +} + +/*** Firefox 2 ***/ + +.cke_skin_kama .cke_browser_gecko .cke_toolbar, +.cke_skin_kama .cke_browser_gecko .cke_button a, +.cke_skin_kama .cke_browser_gecko .cke_button a.cke_off, +.cke_skin_kama .cke_browser_gecko .cke_button .cke_icon, +.cke_skin_kama .cke_browser_gecko .cke_button .cke_buttonarrow, +.cke_skin_kama .cke_browser_gecko .cke_separator, +.cke_skin_kama .cke_browser_gecko .cke_toolbar_start +{ + display: block; + float: left; +} + +.cke_skin_kama .cke_browser_gecko.cke_hc .cke_button .cke_icon +{ + display: none; +} + +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar, +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button a, +.cke_skin_kama .cke_browser_gecko .cke_rtl.cke_button a.cke_off, +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_icon, +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_buttonarrow, +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_separator, +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar_start +{ + float: right; +} + +.cke_skin_kama .cke_browser_gecko .cke_button .cke_label, +.cke_skin_kama .cke_browser_gecko .cke_break +{ + float: left; +} + +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_label, +.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_break +{ + float: right; +} + +/*** WebKit ***/ + +/* We have originally used display:inline-block+float for cke_toolbar and it + worked well in all browsers, except IE+RTL. We had to change it to inline + and remove the float. This change didn't play well with Safari. */ + +.cke_skin_kama .cke_browser_webkit .cke_toolbar +{ + float: left; +} + +.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_toolbar +{ + float: right; +} + +/*** Mixed Fixes ***/ + +.cke_skin_kama .cke_browser_ie .cke_button .cke_label +{ + line-height: 16px; +} + +/* Fix cursor shape consistency on toolbar combos (#4031) */ +.cke_skin_kama .cke_browser_ie .cke_rcombo, +.cke_skin_kama .cke_browser_ie .cke_rcombo * +{ + cursor: default; +} + +.cke_skin_kama .cke_browser_ie .cke_toolbox +{ + padding-bottom: 5px; + _padding-bottom: 6px; +} + +.cke_shared .cke_skin_kama .cke_browser_ie .cke_toolbox +{ + padding-bottom: 0; +} diff --git a/_source/skins/office2003/dialog.css b/_source/skins/office2003/dialog.css new file mode 100644 index 0000000..91fe47b --- /dev/null +++ b/_source/skins/office2003/dialog.css @@ -0,0 +1,844 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/* Restore the dialog visibility */ +body .cke_dialog +{ + visibility: visible; +} + +/* Force Gecko to consider table as positioned */ +.cke_skin_office2003 table.cke_dialog.cke_browser_gecko +{ + display:block; +} + +.cke_skin_office2003 .cke_dialog_body +{ + margin-left: 16px; + margin-right: 16px; + margin-top: 2px; + margin-bottom: 20px; + z-index: 1; + + /* 'cke_dialog' element has been fixed positioned in all but IE6, while we + need it to be positioned to hold e.g. close button. */ + position: relative; + _position: static; +} + +.cke_skin_office2003 .cke_dialog_tl, +.cke_skin_office2003 .cke_dialog_tr, +.cke_skin_office2003 .cke_dialog_tc, +.cke_skin_office2003 .cke_dialog_bl, +.cke_skin_office2003 .cke_dialog_br, +.cke_skin_office2003 .cke_dialog_bc +{ + background-image: url(images/sprites.png); + background-repeat: no-repeat; + position: absolute; + + /* IE6 does not support full color transparent PNG. */ + _background-image: url(images/sprites_ie6.png); + /* Dialog corner parts require a negative z-index to avoid covering dialog body. (#4954) */ + _z-index: -1; +} + +.cke_skin_office2003 .cke_dialog_tl +{ + background-position: -16px -16px; + height: 16px; + width: 16px; + top: 0; + left: 0; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_tl +{ + background-position: -16px -397px; +} + +.cke_skin_office2003 .cke_dialog_tr +{ + background-position: -16px -76px; + height: 16px; + width: 16px; + top: 0; + right: 0; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_tr +{ + background-position: -16px -457px; +} + +.cke_skin_office2003 .cke_dialog_tc +{ + background-position: 0 -136px; + background-repeat: repeat-x; + height: 16px; + top: 0; + left: 16px; + right: 16px; +} + +.cke_skin_office2003 .cke_dialog_bl +{ + background-position: -16px -196px; + height: 51px; + width: 30px; + bottom: 0; + left: 0; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_bl +{ + background-position: -16px -517px; +} + +.cke_skin_office2003 .cke_dialog_br +{ + background-position: -16px -263px; + height: 51px; + width: 30px; + bottom: 0; + right: 0; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_br +{ + background-position: -16px -584px; +} + +.cke_skin_office2003 .cke_dialog_bc +{ + background-position: 0 -330px; + background-repeat: repeat-x; + height: 51px; + bottom: 0; + left: 30px; + right: 30px; +} + +.cke_skin_office2003 .cke_dialog_ml, +.cke_skin_office2003 .cke_dialog_mr +{ + background-image: url(images/dialog_sides.png); + background-repeat: repeat-y; + position: absolute; + width: 16px; + top: 16px; + bottom: 51px; + + /* IE6 does not support full color transparent PNG. */ + _background-image: url(images/dialog_sides.gif); + + /* IE quirks gets confused when we have both top and bottom. */ + _top: auto; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_ml, +.cke_skin_office2003 .cke_rtl .cke_dialog_mr +{ + background-image: url(images/dialog_sides_rtl.png); + + /* IE6 does not support full color transparent PNG. */ + _background-image: url(images/dialog_sides.gif); +} + +.cke_skin_office2003 .cke_dialog_ml +{ + background-position: 0 0; + left: 0; +} + +.cke_skin_office2003 .cke_dialog_mr +{ + background-position: -16px 0; + right: 0; +} + +.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_ml, +.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_mr +{ + margin-top: 3px; +} + +.cke_skin_office2003 .cke_dialog_title +{ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -678px; + background-repeat: repeat-x; + font-weight: bold; + font-size: 14pt; + color: #0E3460; + background-color: #8db1ff; + padding: 3px 10px 26px 10px; + cursor: move; + position: relative; +} + +.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_title +{ + position: static; +} + +.cke_skin_office2003 .cke_dialog_contents +{ + background-color: #f7f8fd; + border: #2b66c9 1px solid; + overflow: auto; + padding: 5px 10px; +} + +.cke_skin_office2003 .cke_dialog_footer +{ + background-color: #8db1ff; + text-align: right; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_footer +{ + text-align: left; +} + +.cke_skin_office2003 .cke_dialog_footer .cke_resizer { + margin-top: 21px; +} + +/* tabs */ + +.cke_skin_office2003 .cke_dialog_tabs +{ + height: 23px; + background-color: #8db1ff; + display: inline-block; + margin-left:10px; + margin-right:10px; + margin-top:-23px; + position: absolute; + z-index: 2; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_tabs +{ + right: 10px; +} + +.cke_skin_office2003 a.cke_dialog_tab, +.cke_skin_office2003 a:link.cke_dialog_tab, +.cke_skin_office2003 a:active.cke_dialog_tab, +.cke_skin_office2003 a:hover.cke_dialog_tab, +.cke_skin_office2003 a:visited.cke_dialog_tab +{ + color: #0E3460; + border-left: 1px solid #2b66c9; + border-right: 1px solid #2b66c9; + border-top: 1px solid #2b66c9; + height: 14px; + padding: 4px 5px; + display: inline-block; + cursor: pointer; +} + +/* Gecko 1.8 layout workaround. */ +.cke_skin_office2003 .cke_browser_gecko18 a.cke_dialog_tab, +.cke_skin_office2003 .cke_browser_gecko18 a:link.cke_dialog_tab, +.cke_skin_office2003 .cke_browser_gecko18 a:active.cke_dialog_tab, +.cke_skin_office2003 .cke_browser_gecko18 a:hover.cke_dialog_tab, +.cke_skin_office2003 .cke_browser_gecko18 a:visited.cke_dialog_tab +{ + display: inline; + position: relative; + top: 6px; +} + +.cke_skin_office2003 a:hover.cke_dialog_tab +{ + background-color: #f7f8fd; +} +.cke_skin_office2003 .cke_hc a:hover.cke_dialog_tab +{ + padding: 2px 3px !important; + border-width: 3px; +} + +.cke_skin_office2003 a.cke_dialog_tab_selected, +.cke_skin_office2003 a:link.cke_dialog_tab_selected, +.cke_skin_office2003 a:active.cke_dialog_tab_selected, +.cke_skin_office2003 a:hover.cke_dialog_tab_selected, +.cke_skin_office2003 a:visited.cke_dialog_tab_selected +{ + border-bottom: 1px solid #f7f8fd; + background-color: #f7f8fd; + font-weight: bold; + cursor: default; +} +.cke_skin_office2003 .cke_hc a.cke_dialog_tab_selected, +.cke_skin_office2003 .cke_hc a:link.cke_dialog_tab_selected, +.cke_skin_office2003 .cke_hc a:active.cke_dialog_tab_selected, +.cke_skin_office2003 .cke_hc a:hover.cke_dialog_tab_selected, +.cke_skin_office2003 .cke_hc a:visited.cke_dialog_tab_selected +{ + padding: 2px 3px !important; + border-width: 3px; +} + +/* single_page */ + +.cke_skin_office2003 .cke_single_page .cke_dialog_tabs +{ + display: none; +} + +.cke_skin_office2003 .cke_hc .cke_dialog_tabs a, +.cke_skin_office2003 .cke_hc .cke_dialog_footer a +{ + opacity: 1.0; + filter: alpha(opacity=100); + border: 1px solid white; +} + +.cke_skin_office2003 .cke_single_page .cke_dialog_title +{ + padding-bottom: 3px; +} + +.cke_skin_office2003 .cke_dialog_ui_vbox table, +.cke_skin_office2003 .cke_dialog_ui_hbox table +{ + margin: auto; +} + +.cke_skin_office2003 .cke_dialog_ui_vbox_child +{ + padding: 5px 0px; +} + +.cke_skin_office2003 input.cke_dialog_ui_input_text, +.cke_skin_office2003 input.cke_dialog_ui_input_password +{ + background-color: white; + border: none; + padding: 0px; + width: 100%; + height: 14px; +} + +.cke_skin_office2003 div.cke_dialog_ui_input_text, +.cke_skin_office2003 div.cke_dialog_ui_input_password +{ + background-color: white; + border: 1px solid #a0a0a0; + padding: 1px 0px; + /* IE6/Quirks - make sure the content does not overflow (#7321) */ + _width: 99.9%; +} + +/* Opera/IE doesn't leave enough padding in text input for cursor to blink in RTL. (#6087) */ +.cke_skin_office2003 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text, +.cke_skin_office2003 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text, +.cke_skin_office2003 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password, +.cke_skin_office2003 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password +{ + padding-right: 2px +} + +/* Compensate the padding added above on container. */ +.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text, +.cke_skin_office2003 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text, +.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password, +.cke_skin_office2003 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password +{ + padding-left: 2px; +} + +.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child, +.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child, +.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first, +.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last +{ + padding-right: 2px !important; +} + +.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text { + padding-right: 1px; +} + +.cke_skin_office2003 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text, +.cke_skin_office2003 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password +{ + border-width: 0px; +} + +.cke_skin_office2003 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text, +.cke_skin_office2003 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password +{ + border-width: 1px; +} + +.cke_skin_office2003 textarea.cke_dialog_ui_input_textarea +{ + background-color: white; + border: none; + padding: 0px; + width: 100%; + /* + * IE6 BUG: Scrollbars in textareas can overflow even if the outer DIV is set to overflow:hidden. + * So leave 1% width for the scrollbar. In most situations the 1% isn't noticeable by users. + */ + _width: 99%; + overflow: auto; + resize: none; +} + +.cke_skin_office2003 div.cke_dialog_ui_input_textarea +{ + background-color: white; + border: 1px solid #a0a0a0; + padding: 1px 0px; +} + +/* RTL + IE6: Input overflows dialog element. (#7321) */ +.cke_skin_office2003 .cke_rtl .cke_dialog_ui_labeled_content +{ + _width: 95%; +} + +.cke_skin_office2003 div.cke_disabled .cke_dialog_ui_labeled_content * +{ + background-color : #a0a0a0; + cursor : default; +} + +.cke_skin_office2003 .cke_dialog_ui_hbox +{ + width: 100%; +} + +.cke_skin_office2003 .cke_dialog_ui_hbox_first, +.cke_skin_office2003 .cke_dialog_ui_hbox_child, +.cke_skin_office2003 .cke_dialog_ui_hbox_last +{ + vertical-align: top; +} + +.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_first, +.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_child +{ + padding-right: 10px; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_first, +.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_child +{ + padding-left: 10px; +} + +/* button */ + +.cke_skin_office2003 a.cke_dialog_ui_button +{ + border-collapse: separate; + cursor: default; +} + +.cke_skin_office2003 a.cke_dialog_ui_button_ok span, +.cke_skin_office2003 a.cke_dialog_ui_button_cancel span +{ + width:60px; +} + +.cke_skin_office2003 span.cke_dialog_ui_button +{ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -678px; + background-repeat: repeat-x; + border: #0E3460 1px solid; + padding: 2px 10px; + text-align: center; + color: #0E3460; + background-color: #8db1ff; + display: inline-block; + cursor: default; +} + +/* Gecko 1.8 does not support display: inline-block */ +.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button +{ + display: block; +} + +.cke_skin_office2003 a.cke_dialog_ui_button span.cke_disabled +{ + border: #898980 1px solid; + color: #5e5e55; + background-color: #c5c5b3; +} + +.cke_skin_office2003 a:focus span.cke_dialog_ui_button, +.cke_skin_office2003 a:active span.cke_dialog_ui_button +{ + background-color: #8db1ff; +} +.cke_skin_office2003 .cke_hc a:focus span.cke_dialog_ui_button, +.cke_skin_office2003 .cke_hc a:active span.cke_dialog_ui_button +{ + border-width: 2px; +} + +.cke_skin_office2003 .cke_dialog_footer_buttons +{ + display: inline-table; + margin-right: 12px; + margin-left: 12px; + width: auto; + position: relative; +} + +/* Gecko 1.8 does not support for display: inline-table */ +.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons +{ + display: inline; +} + +.cke_skin_office2003 .cke_dialog_footer_buttons span.cke_dialog_ui_button +{ + margin: 7px 0; +} + +.cke_skin_office2003 .cke_browser_ie7 .cke_dialog_footer_buttons +{ + position: static; +} + +.cke_skin_office2003 strong +{ + font-weight: bold; +} + +/* close_button */ + +.cke_skin_office2003 a.cke_dialog_close_button, +.cke_skin_office2003 a:hover.cke_dialog_close_button, +.cke_skin_office2003 .cke_browser_ie6 a.cke_dialog_close_button, +.cke_skin_office2003 .cke_browser_ie6 a:hover.cke_dialog_close_button +{ + background-image: url(images/sprites.png); + background-repeat: no-repeat; + background-position: -20px -655px; + position: absolute; + cursor: pointer; + text-align: center; + height: 21px; + width: 21px; + top: 4px; + + /* IE6 does not support full color transparent PNG. */ + _background-image: url(images/sprites_ie6.png); +} + +.cke_skin_office2003 a.cke_dialog_close_button span +{ + display: none; +} + +.cke_skin_office2003 .cke_ltr a.cke_dialog_close_button +{ + right: 10px; + _right: 22px; +} + +.cke_skin_office2003 .cke_rtl a.cke_dialog_close_button, +.cke_skin_office2003 .cke_rtl a:hover.cke_dialog_close_button +{ + left: 10px; + _left: 16px; + _top: 6px; +} + +.cke_skin_office2003 .cke_browser_ie6.cke_rtl a.cke_dialog_close_button, +.cke_skin_office2003 .cke_browser_ie6.cke_rtl a:hover.cke_dialog_close_button +{ + position: relative; + float: left; + margin-top: -55px; + margin-left: -7px; +} + +.cke_skin_office2003 .cke_browser_iequirks.cke_rtl.cke_single_page a.cke_dialog_close_button, +.cke_skin_office2003 .cke_browser_iequirks.cke_rtl.cke_single_page a:hover.cke_dialog_close_button +{ + margin-top: -32px; +} + +.cke_skin_office2003 .cke_browser_iequirks.cke_ltr a.cke_dialog_close_button, +.cke_skin_office2003 .cke_browser_iequirks.cke_ltr a:hover.cke_dialog_close_button +{ + margin-top: 0; +} + +.cke_skin_office2003 .cke_dialog_ui_input_select +{ + border: 1px solid #a0a0a0; + background-color: white; +} + +.cke_skin_office2003 .cke_dialog_ui_input_file +{ + width: 100%; + height: 25px; +} + +/* + * Some utility CSS classes for dialog authors. + */ +.cke_skin_office2003 .cke_dialog .cke_dark_background +{ + background-color: #eaead1; +} + +.cke_skin_office2003 .cke_dialog .cke_hand +{ + cursor: pointer; +} + +.cke_skin_office2003 .cke_dialog .cke_centered +{ + text-align: center; +} + +.cke_skin_office2003 .cke_dialog a.cke_btn_reset +{ + float: right; + background-position: 0 -32px; + background-image: url(images/mini.gif); + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: 1px none; + font-size: 1px; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_reset +{ + float: left; +} + +.cke_skin_office2003 .cke_dialog a.cke_btn_locked, +.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked +{ + float: left; + background-position: 0 0; + background-image: url(images/mini.gif); + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: none 1px; + font-size: 1px; +} +.cke_skin_office2003 .cke_dialog a.cke_btn_locked .cke_icon +{ + display:none; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_locked, +.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_unlocked +{ + float: right; +} + +.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked +{ + background-position: 0 -16px; + background-image: url(images/mini.gif); +} + +.cke_skin_office2003 .cke_dialog .cke_btn_over +{ + border: outset 1px; + cursor: pointer; +} + +.cke_skin_office2003 .cke_dialog .ImagePreviewBox +{ + border : 2px ridge black; + overflow : scroll; + height : 210px; + width : 230px; + padding : 2px; + background-color : white; +} + +.cke_skin_office2003 .cke_dialog .ImagePreviewBox table td { + white-space: normal; +} + +/* Fix iframedialog's height doesn't stretch to 100% #4863.*/ +.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_page_contents +{ + _position: absolute; +} + +.cke_skin_office2003 .cke_dialog .ImagePreviewLoader +{ + position: absolute; + white-space : normal; + overflow : hidden; + height : 160px; + width : 230px; + margin : 2px; + padding : 2px; + opacity : 0.9; + filter : alpha(opacity=90); + + background-color : #e4e4e4; +} + +.cke_skin_office2003 .cke_dialog .FlashPreviewBox +{ + white-space : normal; + border : 2px ridge black; + overflow : auto; + height : 160px; + width : 390px; + padding : 2px; + background-color : white; +} + +.cke_skin_office2003 .cke_dialog .cke_pastetext +{ + width: 346px; + height: 170px; +} + +.cke_skin_office2003 .cke_dialog .cke_pastetext textarea +{ + width: 340px; + height: 170px; + resize: none; +} + +.cke_skin_office2003 .cke_dialog iframe.cke_pasteframe +{ + width: 346px; + height: 130px; + background-color: white; + border: 1px solid black; +} + +.cke_skin_office2003 .cke_dialog .cke_dark_background +{ + text-align : center; + background-color: #eaead1; + font-size : 14px; +} + +.cke_skin_office2003 .cke_dialog .cke_light_background +{ + text-align : center; + background-color: #ffffbe; +} + +.cke_skin_office2003 .cke_dialog .cke_hand +{ + cursor: pointer; +} + +.cke_skin_office2003 .cke_disabled +{ + color: #a0a0a0; +} + +/* High Contrast Mode */ +.cke_skin_office2003 .cke_hc .cke_dialog_title, +.cke_skin_office2003 .cke_hc .cke_dialog_tabs, +.cke_skin_office2003 .cke_hc .cke_dialog_contents, +.cke_skin_office2003 .cke_hc .cke_dialog_footer +{ + border-left: 1px solid; + border-right: 1px solid; +} + +.cke_skin_office2003 .cke_hc .cke_dialog_title +{ + border-top: 1px solid; +} + +.cke_skin_office2003 .cke_hc .cke_dialog_footer +{ + border-bottom: 1px solid; +} + +.cke_skin_office2003 .cke_hc .cke_dialog_close_button span +{ + display: inline; + cursor: pointer; + font-weight: bold; + position: relative; + top: 3px; +} + +.cke_skin_office2003 .cke_dialog_body .cke_label +{ + display: none; +} + +.cke_skin_office2003 .cke_dialog_body label.cke_required +{ + font-weight: bold; +} + +.cke_skin_office2003 .cke_hc .cke_dialog_body .cke_label +{ + display: inline; + cursor: inherit; +} + +.cke_skin_office2003 .cke_hc a.cke_btn_locked, +.cke_skin_office2003 .cke_hc a.cke_btn_unlocked, +.cke_skin_office2003 .cke_hc a.cke_btn_reset +{ + border-style: solid; + float: left; + width: auto; + height: auto; + padding: 0 2px; +} +.cke_skin_office2003 .cke_hc a.cke_btn_locked .cke_icon +{ + display:inline; +} + +.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_locked, +.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_unlocked, +.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_reset +{ + float: right; +} + +/** + * Styles specific to "cellProperties" dialog. + */ + +.cke_skin_office2003 .cke_dialog_contents a.colorChooser +{ + display:block; + margin-top:12px; + margin-left: 10px; + width: 40px; +} + +.cke_skin_office2003 .cke_dialog_contents a.colorChooser .cke_dialog_ui_button +{ + width:100%; +} + +.cke_skin_office2003 .cke_rtl .cke_dialog_contents a.colorChooser +{ + margin-right: 10px; +} diff --git a/_source/skins/office2003/editor.css b/_source/skins/office2003/editor.css new file mode 100644 index 0000000..f9c9eb7 --- /dev/null +++ b/_source/skins/office2003/editor.css @@ -0,0 +1,25 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@import url("reset.css"); +@import url("mainui.css"); +@import url("panel.css"); +@import url("toolbar.css"); +@import url("menu.css"); +@import url("richcombo.css"); +@import url("elementspath.css"); +@import url("icons.css"); +@import url("presets.css"); + +/* Restore the container visibility */ +html .cke_skin_office2003 +{ + visibility: inherit; +} + +html.cke_skin_office2003_container +{ + visibility: visible; +} diff --git a/_source/skins/office2003/elementspath.css b/_source/skins/office2003/elementspath.css new file mode 100644 index 0000000..17d15ea --- /dev/null +++ b/_source/skins/office2003/elementspath.css @@ -0,0 +1,74 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@media print +{ + .cke_path + { + display: none; + } +} + +.cke_skin_office2003 .cke_path +{ + padding: 3px 3px 0 3px; + display: inline-block; + float: left; +} + +.cke_skin_office2003 .cke_rtl .cke_path +{ + float: right; +} + +.cke_skin_office2003 .cke_path a, +.cke_skin_office2003 .cke_path .cke_empty +{ + display: inline-block; + float: left; + border: solid 1px #f7f8fd; + background-color: #f7f8fd; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 4px; + padding-right: 4px; + margin-bottom : 3px; + cursor: default; +} + +.cke_skin_office2003 .cke_path .cke_empty +{ + visibility: hidden; +} + +.cke_skin_office2003 .cke_rtl .cke_path a, +.cke_skin_office2003 .cke_rtl .cke_path cke_empty +{ + float: right; +} + +.cke_skin_office2003 .cke_path a:hover, +.cke_skin_office2003 .cke_path a:focus, +.cke_skin_office2003 .cke_path a:active /* IE */ +{ + border: solid 1px #316ac5; + background-color: #dff1ff; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 4px; + padding-right: 4px; + outline: none; +} + +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path a, +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path .cke_empty +{ + float: none; +} + +.cke_skin_office2003 .cke_path .cke_label +{ + display: none; +} diff --git a/_source/skins/office2003/icons.css b/_source/skins/office2003/icons.css new file mode 100644 index 0000000..31f5451 --- /dev/null +++ b/_source/skins/office2003/icons.css @@ -0,0 +1,363 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_office2003 .cke_button_source .cke_icon +{ + background-position: 0 0; +} + +.cke_skin_office2003 .cke_button_docProps .cke_icon +{ + background-position: 0 -16px; +} + +.cke_skin_office2003 .cke_button_newpage .cke_icon +{ + background-position: 0 -48px; +} + +.cke_skin_office2003 .cke_button_preview .cke_icon +{ + background-position: 0 -64px; +} + +.cke_skin_office2003 .cke_button_cut .cke_icon +{ + background-position: 0 -96px; +} + +.cke_skin_office2003 .cke_button_copy .cke_icon +{ + background-position: 0 -112px; +} + +.cke_skin_office2003 .cke_button_paste .cke_icon +{ + background-position: 0 -128px; +} + +.cke_skin_office2003 .cke_button_pastetext .cke_icon +{ + background-position: 0 -144px; +} + +.cke_skin_office2003 .cke_button_find .cke_icon +{ + background-position: 0 -240px; +} + +.cke_skin_office2003 .cke_button_replace .cke_icon +{ + background-position: 0 -256px; +} + +.cke_skin_office2003 .cke_button_selectAll .cke_icon +{ + background-position: 0 -272px; +} + +.cke_skin_office2003 .cke_button_removeFormat .cke_icon +{ + background-position: 0 -288px; +} + +.cke_skin_office2003 .cke_button_bold .cke_icon +{ + background-position: 0 -304px; +} + +.cke_skin_office2003 .cke_button_italic .cke_icon +{ + background-position: 0 -320px; +} + +.cke_skin_office2003 .cke_button_underline .cke_icon +{ + background-position: 0 -336px; +} + +.cke_skin_office2003 .cke_button_strike .cke_icon +{ + background-position: 0 -352px; +} + +.cke_skin_office2003 .cke_button_subscript .cke_icon +{ + background-position: 0 -368px; +} + +.cke_skin_office2003 .cke_button_superscript .cke_icon +{ + background-position: 0 -384px; +} + +.cke_skin_office2003 .cke_button_table .cke_icon +{ + background-position: 0 -608px; +} + +.cke_skin_office2003 .cke_button_horizontalrule .cke_icon +{ + background-position: 0 -624px; +} + +.cke_skin_office2003 .cke_button_smiley .cke_icon +{ + background-position: 0 -640px; +} + +.cke_skin_office2003 .cke_button_link .cke_icon +{ + background-position: 0 -528px; +} + +.cke_skin_office2003 .cke_button_unlink .cke_icon +{ + background-position: 0 -544px; +} + +.cke_skin_office2003 .cke_button_anchor .cke_icon +{ + background-position: 0 -560px; +} + +.cke_skin_office2003 .cke_button_image .cke_icon +{ + background-position: 0 -576px; +} + +.cke_skin_office2003 .cke_button_flash .cke_icon +{ + background-position: 0 -592px; +} + +.cke_skin_office2003 .cke_button_specialchar .cke_icon +{ + background-position: 0 -656px; +} + +.cke_skin_office2003 .cke_button_pagebreak .cke_icon +{ + background-position: 0 -672px; +} + +.cke_skin_office2003 .cke_button_print .cke_icon +{ + background-position: 0 -176px; +} + +.cke_skin_office2003 .cke_button_checkspell .cke_icon, +.cke_skin_office2003 .cke_button_scayt .cke_icon +{ + background-position: 0 -192px; +} + +.cke_skin_office2003 .cke_button_pagebreak .cke_icon +{ + background-position: 0 -672px; +} + +.cke_skin_office2003 .cke_button_textcolor .cke_icon +{ + background-position: 0 -704px; +} + +.cke_skin_office2003 .cke_button_bgcolor .cke_icon +{ + background-position: 0 -720px; +} + +.cke_skin_office2003 .cke_button_form .cke_icon +{ + background-position: 0 -752px; +} + +.cke_skin_office2003 .cke_button_checkbox .cke_icon +{ + background-position: 0 -768px; +} + +.cke_skin_office2003 .cke_button_radio .cke_icon +{ + background-position: 0 -784px; +} + +.cke_skin_office2003 .cke_button_textfield .cke_icon +{ + background-position: 0 -800px; +} + +.cke_skin_office2003 .cke_button_textarea .cke_icon +{ + background-position: 0 -816px; +} +.cke_skin_office2003 .cke_button_showblocks .cke_icon +{ + background-position: 0 -1136px; +} + +.cke_skin_office2003 .cke_button_select .cke_icon +{ + background-position: 0 -832px; +} + +.cke_skin_office2003 .cke_button_button .cke_icon +{ + background-position: 0 -848px; +} + +.cke_skin_office2003 .cke_button_imagebutton .cke_icon +{ + background-position: 0 -864px; +} + +.cke_skin_office2003 .cke_button_hiddenfield .cke_icon +{ + background-position: 0 -880px; +} + +.cke_skin_office2003 .cke_button_undo .cke_icon +{ + background-position: 0 -208px; +} + +.cke_skin_office2003 .cke_rtl .cke_button_undo .cke_icon +{ + background-position: 0 -224px; +} + +.cke_skin_office2003 .cke_button_redo .cke_icon +{ + background-position: 0 -224px; +} + +.cke_skin_office2003 .cke_rtl .cke_button_redo .cke_icon +{ + background-position: 0 -208px; +} + +.cke_skin_office2003 .cke_button_templates .cke_icon +{ + background-position: 0 -80px; +} + +.cke_skin_office2003 .cke_button_numberedlist .cke_icon +{ + background-position: 0 -400px; +} + +.cke_skin_office2003 .cke_button_bulletedlist .cke_icon +{ + background-position: 0 -416px; +} + +.cke_skin_office2003 .cke_mixed_dir_content .cke_button_numberedlist .cke_icon +{ + background-position: 0 -1217px; +} + +.cke_skin_office2003 .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon +{ + background-position: 0 -1233px; +} + +.cke_skin_office2003 .cke_button_outdent .cke_icon +{ + background-position: 0 -432px; +} + +.cke_skin_office2003 .cke_button_indent .cke_icon +{ + background-position: 0 -448px; +} + +.cke_skin_office2003 .cke_mixed_dir_content .cke_button_indent .cke_icon +{ + background-position: 0 -1265px; +} + +.cke_skin_office2003 .cke_mixed_dir_content .cke_button_outdent .cke_icon +{ + background-position: 0 -1249px; +} + +.cke_skin_office2003 .cke_button_justifyleft .cke_icon +{ + background-position: 0 -464px; +} + +.cke_skin_office2003 .cke_button_justifycenter .cke_icon +{ + background-position: 0 -480px; +} + +.cke_skin_office2003 .cke_button_justifyright .cke_icon +{ + background-position: 0 -496px; +} + +.cke_skin_office2003 .cke_button_justifyblock .cke_icon +{ + background-position: 0 -512px; +} + +.cke_skin_office2003 .cke_button_blockquote .cke_icon +{ + background-position: 0 -1152px; +} + +.cke_skin_office2003 .cke_button_flash .cke_icon +{ + background-position: 0 -592px; +} + +.cke_skin_office2003 .cke_button_pastefromword .cke_icon +{ + background-position: 0 -160px; +} + +.cke_skin_office2003 .cke_button_save .cke_icon +{ + background-position: 0 -32px; +} + +.cke_skin_office2003 .cke_button_about .cke_icon +{ + background-position: 0 -736px; +} + +.cke_skin_office2003 .cke_button_maximize .cke_icon +{ + background-position: 0 -1040px; +} + +.cke_skin_office2003 .cke_button_creatediv .cke_icon +{ + background-position: 0 -1168px; +} + +.cke_skin_office2003 .cke_button_editdiv .cke_icon +{ + background-position: 0 -1184px; +} + +.cke_skin_office2003 .cke_button_removediv .cke_icon +{ + background-position: 0 -1200px; +} + +.cke_skin_office2003 .cke_button_bidirtl .cke_icon +{ + background-position: 0 -1072px; +} + +.cke_skin_office2003 .cke_button_bidiltr .cke_icon +{ + background-position: 0 -1056px; +} +.cke_skin_office2003 .cke_button_iframe .cke_icon +{ + background-position: 0 -1279px; +} diff --git a/_source/skins/office2003/icons.png b/_source/skins/office2003/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3bf195dd35a2dd3773a5cae7e4712a1133a5d5 GIT binary patch literal 5598 zcmX|FbySq!)4#imfaKDPfD0%gAt}w0i!@S#APoW{upkJMOGrzobeAAVs^k}0QE5a% zX({Pgy5qOLf4rY_?wPrB=bq=8JI|f@oG1F8?p;c<Yh(ZbN)2^Y1A>GDaD|!_M$n>? z6PpO)Dn|XmQvk^6{tXDo$U+c|>~`t~Iso`_0e}qy;P{dtR{-!924K}10GTuZnA~4k zeOChj2JUGap$U7gtEgOF0+>z*0}7RvmUfuL4-*zPT(@OI7Kn+7QA$Y_kpX5&fodwi z%K5hH*Y4=(7%zXmk;ywAvC8cl!{izymzvty+1aHdWMjm9{mso`83?Pga*r`_a$092 zBOo%}(@$7G4W#PehB{|&&P-OhxK$}A7yt1g_2^uA5%u5npLOa?*h}mk|FUgIOL326 zs>2R)9`tt_S=sF*Rze6#!<$=MJA;k62nEHn%S$~EVj@HYez~(P1T*eLSy)tbXvrUQ z6X-c~%yqOeqEHCu&HkmurXF8f-TvE}nns(}lg|)aF(!HjD$P~CNQcQL6V=t#4N7#+ z;o)KH#8^q`dz`uy5bM1-hn}6mmLn0wQXNgWDgAZJ#D=}Onbj+zqL&wtrLo~VI@(cD zQAejIV%pje4hz*O!<|iv#l^*`QQGqN?=LQ(hx<#uzCJyf*n<Q{5ly{Y>ga<42{xs> zi*s}$+Ugvts-B*n85tRV6^_g(-J|_oDu(Q>g}M6220p$XfW1^sQxPiA3gyzPsK`g% zy9cDDOG@5vZPJj6Ra5a<b1JLm=jWWA5|K!@(#y+}sr;muQ<M(bsHmv8iAF2x>t9}8 zvR%)cnVCsVO{MUt`&d_ZoO#1bgz_SZD6@5c&=qi6Er@7o-B8ttN`1?7_wL2TMQbbW zO+^ibq$DP_%IkT^lk}ncrluCIJ{|L&8%<A+kB?cDl&+_Ykg653nSXd&*>IT-blcX^ zPvf1OoOZ@DB(sL5Rz{m%8T<PBrZ%qS=H}ANDIBC;@9yr-Gev$IJrZ%6kk!+(_l!a5 znG1bdVvtq2d;<*%3It+e<u!d57YB6a<1E*bU&JLrm46&(-GJTw>FgQsyU289d;TW+ zE{XQ9{r&yhS~0Y0Eo9mQiEq+r<>VxMmn0JFnGAauS7sMC&Z;WPOG``3%HHGg_^qw2 z?d|QIot@p?-Mzg%!rp^}145RMj*bYioSdATo}LoE)${XnLhOX&3X&fvA>09omw~P! zP+S~+1OTm;hN_a0@A!JwsXyIFdWRK<ac!cj0J&^C;t54NwowY=IZNv)qM<Q9sXjhA z!M);|`E0^%qQ%eW!+Np5-G_{Hu^nkxoS?ayC^XBOE{gK1E>48|Hcjl9+lS@@w}rvs zW0r%+r|Duh9@Iq(f9(I9fb7CMeqNGa`cG!5*XcI2^CRSOjj2F8Smee{xVO5JFvl42 zC2JN}CMc&W@g>)WQCw+n`k~Y-nwH;p6Y1*eI`mgXpB}A`Dl7;yPrD`4&<>pyc5`w0 zD$Ov9k<wNYVEn)j*aZa4WfC2XLJByQBfFJ2lhkk0Hr!Adm^IR-%tFgNnYugRM9(oi zFfgE0z7eIS@BR;3k=;PKWn<&*SV7sWFz{jz_nXieTEG95wY24}^Yt}{mJQOLl-6wz zyAYIlV&pMxv?`}{)%P@F3IaN<al#aVI4F#`J>rX5J9ZXC*dYAAL7UtVO+*;&5pQ{J z2y3h=XHuO6nG=wQR#dnG9CX!>DDRWbUzOF#JqeA9;^N{LkZq-_KYvFsppz6CU)Y*_ zT+qvxWoY`qMwPe5`q4B+mOPT}qFCiw@YY`q*`qz2hI!+cFp_wHQ_^?a+HyyQf2j;3 zkzSTL>QUjDR&e?*JrF$GDHP9||KoT!mFLg3R?ojGi^vwgqvgws4s-XG@4qhTA}~j) zN7GmGTok3wrg>CxTUVuMP&QV~Z8lOiR(zr(@$W`xMa*#`(l-e&Ci0srk2i*sffa|a zQ{n5RZ>ZRqmdYb*icO+7NFt;v0%hGd4EZYTm3=FYRPpA&GlIo8YLj1!Ao^Bh%Q!26 z)<s<$%_k@@{z(^eZ2t!{bMtq>CwtCh+8>fb?hlFU7!p@h45C(hSB5&`(>urev!w&q z)0{a|*vWpRbGL=Vl`)8!-kPThk`u+8NLI1FgJ&AsA<lL6PhZdwAK{+3Gm+h(0LXx! z<Kr==sBdsZ0i+FP6I11aB0Px;vz~TLEH-nzj9<f_8ehsXVVCTJtq7Rj_Q5XAFJFBA zoRl<=XI(h<eHuL7Nx(KLCqa@Lk7Q<MmJWKeG_No{sURxq8E_etli)Kgulv$x`K49s z>0*dV<R7^Fn`_U`cWl_cRR?VK%Y5k|X~WmgxJ{m;kVsM%!3Gwe+_`z!Y=RlpH}eR( zfPlPj?@~5>wI0S%hc`!3f14)}Cir!j)2^hbh9)FnLdSZkT5B^Z*P1GOfL&ZRu9K4D zYoZ-{c%mkCQR%c=MKWFTF)MqKXCV<K`W=UA2wwnIk)6hXkA%zDc>7*XHY!7Lp!09& zgFM3_8Kogbh#>SDaLRbAk4Z@eIxro>kGhnEUU>&SAajRO`~_5JzL+zE8>R!}m@Ch= zb&vmhmy@RB85h)ggg<6(ow_%~TZVDz(qKJrXyCoB&QQ>Sn9j<_I{u8e&i6%S7#7wa zpbhEM0dVSmkOUWO`{3+;muJ$qXVeNU?)X7G+Us#f0dGvFd3ey5A#pW&bpF_kbYUSK zy&xyb&rElCBE5wz_t*0J{8Ko9Q^lHavjc3KO`D<~b<H0D_PuD<D8c@o7ftxRhLSaU zo6x|b@^b#kPYDoZL2Xi-n4G|HcqqkJYwPJ-%2@WVqmGa!n1eNv<P<>~dDW(e_*h$- zqY-d~OED0Ua@bNXktx3)e5T0o9uLnckl_HF-<y25=g@U8e|sglGB4b*cvDs!6U!uI zX~;?Zgz<H&V=X=dCY5e)DcbeLAJ4Tye&tBs&9|Ms>+J6v>v070MyJ!e4?-fD3m&g( zED8~KR)7Bdc~87s!RTIOL`1;=uM$ORE(N-fpuCSd>Eg)^pnXaE&9+p9lq1||Gwd3g zl+ZERp5QfAv%@E{gtB+jA7FDPwE9v3C^EQ3WkAuJimf0bkw70HZaF3mzfoH1Hh6cu zYk0s~Y#_{rd2|QQwb-vGZP)vKE6>~PWn&I|^3_Gzh=l+Q#qh)2LOXQ_tlR@Rrl^j2 zj}z#&Z<c!k?6eR%Hku-Z6O=QkLr9i<mlFXKtLxjoxcTkTI}%9N2?%appVdY_2N5`r z@|6?W^2O2Fp}^E~w6vYhlA}>D<<yU5eKlEMEp(_UO%gjzC|Bn^jdPlFs6Eo2lZQ7r zMb{Ay)Wzu7RYZF75_7nnWU_MtwX&76^-Er+SEP7xSJwv|=m-0U>Ta_IXH<~!_STYV zU%ZHOm0-h(>%11#Z!-|qCvJ#%_IKm-+_9G=?I7Ui#bS445xgLi7a6b5tJC=~=AE&m zR$OCOr}ntVhi_@IalP-^2nM-g+f}n5fBF$8xB7{Vl&MfCb7L@`--<UcF(foJ6k6Y$ zmxm2?usT*&3dw{@0-Pvco(#bD^q8tk!g^9H9^rJ9MAIpVCN~w?;iN=>J@FfY1R4U` zEkf*R+2LEq0bPph&#U@VwNC(4Dt*r;ZoB2PJ?$xgb`>S<9S5Ltg$S!8iQ3#ZXmb0P zcF~-uTxt-2Iz8R*ifqOuQP+zhIg8AJWIu@@Eh!NcQlFft2<%uf%~Ni19EsYs0S!}b zl3JvFBv-m_9@PB*3;?~TPL=rZyy)ncwXN`M_tA!=Y^h>JYGO&$(M%W}-4YJ~jJjub zn0q6whb?*vzuwu-^?XsXz>^V^NFRwKhP~wx6c=i|UStinP}j+Z?Vc~z@PRyX2#`P> zu@`(2WtSA7wmy)M`v-xI#mMbLegd{L2$hkBjPIYW^?Oec&+;6Ai29(<wFKB7@Az-7 z7y@hGwVz8Sm1l!H3q7eqW@P|}DJUu``b+)!=(~T)?P4(P(ZS~PzHzOx<GOik5FMbH zzvJ?IZ+|M#d!ajdtsjaF_1PHzRDQhKjJIs`Y=Hu@+d}`)y8qjCqAvRiDE=?&wRycO z6uVc^HdQA`304%@vvv7fT3V=iS01pY(latLj!%}AmGO}?+&4BhX26f?KXf|QiuJkp z&i|dC><aJ2tR&vApy4eX<YCYRk8Kwp2BxagcejYJZ4CVP=`Vj7%KFIZ-w0{896SD6 z;_^6#nfK3jA5Tt@A6iGGqNLilWAsN`+qF%V+4zbo`jO#bdZyS2IeqQE$B%71JUnU& zB_$5Wb%nJYACee#*$&=v(h3pTY(uQs+1ce9)<UO5^QD9(Bp&hG!bBXC5adp`L~%<u z4FNl2?5&i(($l6stVQ#8hO50*v#X=yZl+|<=D%n&)RShC^>UUbY1!Nx`rz#rvAFNo zLS>@%=Wchm{hT0wxq!ba=O02QG~XrGQ`lu~`H8fTt`*N9Et@9Rrj7@-DCBmcOh!51 z=~j(2I}LFDjw!YzXnUyDu#vTv;FZB*E&LMr&k}!rIPHE6+*<>u0}lmj1AwW$PgP&e z^Tl)l6Q-Nf_`}n4^7A&UWk=H|_2-3U%1s!v>Ld$~typsMbtL1PmXO@@wL{p^3b6t# zsIn_EnuW}}W9lRAOyR4(Zb;blcnQEgU(>xS<KCa^W8@L!HB6O-id$@A7*1q)L=vDT zo$1!QzB=^0i<IE^Ooab_xCo4hPTST2O*BF8fJVRKREuF`Vql;FpiM&PHXlD9pKWS< z(BA9Xg74)_Ovwz}O|jjC1^&}6TS%VM_FP{qQ&k-#Q!kqCeO*`qr<u#=-shE^J!7o9 zS<btXUswBRMfxiu4t_1&tY!xHGd;tXOca9MrkcDlryKP{a0N*nLohV?kQg|u{jLa` zFqx#X&hh_D0lFn}pMHEcR_lP7aINnnCe3uLzxAc3U;eO`;+nrjrP@`w`oHGWp8J}4 zauR2yuP!RV<@nBFje@4TpAk0L&-ZA+vA&1_at-+`x!+~-jb%U1=ko;y56c`}(Fs=h zf=^XA<GCCh9bMKaX%%z7j{DCMd0ta{vGBZK;_c8&qk&VbsQaJ)o=@wP)c;+MC3+Mn z&%!!_Wmac(<t+Y{DuB%-<p|obh3?KLs6r)a4D@(JUvAsdaR`~Qi+FvE4yS!pa8lap zwQ-;PiR;em2%?l20#zfjq97J-H)l~NwR?g%OT02d6H2K9R1mTk@bWZKp2MrrQwhHL zCMCr$$CNgGAH>3y|E97yuK$s8Nr?RhI2$1x5tQ&yK}BJ1A}v6tU46wU?wt_KPn;V} zSJ139SX13T8Hv=?GWpdLv_D>Dtaa1qrAYfPb?o4$H28lKB%Qnl$TG|3x@*a!W$0Q3 zNu<2k$?*+aF`}qZH$D%jhLW<h;w_H-v^TVz^gh2|6W!7ghik)2iK;k*LN!S3Ai~^f z@7q$P*u$%th}S7!yS1uD<=#p2ICQ4Dd8MeOSUz7-WSv0LiAqBfjX%0Xy@f~Kr_o-e z`$c5)q!g>El4d=K74oPq`}oFsPKb*bh8Pl3r^QiK$G{)zkX|9W=S*s+eeE|b%;qaQ zR$ab5&1m|TV(6QcYx_k;z{R`Rr})9N)>u||I&~S2yX8ifwS5M64Zn6|C_~cI$D<5V z_M;3Oj)D=h_e#rTCd`yMGTRi>dU=u0Yx4gOuU@^PWLaed;EihGz;XnoxA&)I4zkZD zzX;aV)yD(#dZPDC2r!Sm-um94I=`;2?%-@b!Rqr_8x&xh%Bd|{PJXKBp^n?ggPQ@c z4tXNEyFv9}ha>y?4FI?XS47B)hV1CoOF9TQOO`Ng+nu$lw*CTby_8v;PnpS<XE;ka zBm!r<NEV+1BO}w9u8~%^IAaVH(6vjN#mP!T0R8yIhG79c7!IoNI;}q>VuoO&2O`Mx zHx0v@{r&j(Xn}CeW3ST}+pVWgm_tK(1_p4?JPFrK5>}JYWEsduLxdf#K-jUeo_$4n zG0Q7m+Y>4uiFcd6emn$Ig9C0&77W_S7-Mv~i(C!^!b)W#R4<;TTAr*SeJ+{7F!A|C zgjTWr-r%oXH%*x0M!8qr*@@Qj>GY_5pq`1bs7zBJo)X3Owyf;jD~-bK=Snq2p<chn z;f(>upPmqpgdqXf=)zjA+i6CGqA!h+hBSB@KeNclsmk-XMw&vJN9Y;4p)S#M4Xhpy zk00Mf?c|SA0Q%>jc^@$RSV_8?6=r2Kq+)FBO_sOTv}vRb%i85CEFSS(>d0DD@mW-< zU-<e!)rYYrY%M9F*F#3|=yKn#>A4HDg~EGC`)_I%OvnbY(ev}PtXS_r;xN?{^&OHY z&Oc<VAKJP)>~P&KM_f9-;^9DAtI=`0xuAqxuJjRe8{a{ZW5QnbE-iR18jadEggZo8 ztS9GkR)fIFFi0x-Pq;~gldpI<fm0iqrS@Fm<+}wQVhbKZpi+-#9g821v7`*__5N_! z2(s*z_8+5MI-9#nGPuAXYyIslc*fKm#Q{qrBhd3?^6DkqVaT@^Jj80n{Q6WcmQR+m zmf98`{;@#V#XSv;3y}`=_1IhWyx!83b+=0HKNq)5-LS^2=1&i;C8DeQ&HNqaFm{@t za_ml^nef-QdYU?&$m&n_+^6PD6VpvcOEb0KyGYVjAdh`~eCl20te=>&Ur(4&l#8GD za8A^1pWi+zvO$~_@rLrO;1|4laEYM(^`5QLBy{i4QvloSZ86f!g>9ZEu+|I9A2%;s zvZPL1vNVG9<$nYTm1LUbB#bXRQ?FgkGZkPo9OWl5r;qw>OHEph)<-<DkL`fLCu{?& zj*_4N{^7GD@1ToB@Q;d@g0m^pi(8QKQJB?UpTRdakvWg;@U&48d)RNcX!isyy*Q7= z8k6)Nt(CGP=|^>JHjk)-Qfa-|c9M>z^64f6j;nK|=Om-_E+<X>4wS@@tUbK12;{cJ zWz5kxQQPSC{_~3IvAp=9M?<;#Fs{h%3q%@aT5Y_7w1dBAZ@56hD+_bkollY7CMa!^ z&Va|g>C|r%cWl~NmkJy6->v+-JzMGS7Icoe98gJ+Z^z|yWK@aYxx+T;9rb4h;}G~X zxU{vkb!Cf#Z$-hgI!JDKc(43xUtbjr#3dwHHF_4eDj2m^9hU&$e|V7l*v$=vSap{P zfCKBZuiNr{Fa0aCNcSTNl_CKD$4XoRzk<YD?em*$MEaky=<O#YBpmLhyu`cy*_}N) zYH(UDVQLqOORzfPdTKS{OhlrWBL^1`t-^G<G+Rxz_#e6f>?I43rJn0kPD!~+_{Rh^ M(7LLX%GRO(1EjHd^8f$< literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/icons_rtl.png b/_source/skins/office2003/icons_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..83eee28ac79d5e00e8ec9136ba491c8c0a2b8352 GIT binary patch literal 5600 zcmX|_by!s2)4=a8ARPh%N-P3Ox4_cfB@H5qGy($By+|l4A=2H5fJk>NjkN4n7U}Np zWr^SV{_%dE=iZrf&YeHz+?hLbPt<cARZ^lyL;wJgs;epKV<iOu;E@yHV6{(4Uz)Lk z&`r(E0|1Dr{#_s-J(CVQ$!x8ruMGhHPXGWG1_0<gtlR<sF9879wgdo)Q~;oL{rb9B z1psh>=URr!SQ{oq#k)HIN4x)lj7(~3>P0*^j(~u{t`#FBUsza}6bdaQ0v?L-RFVM< zEX6<noJ>vq<>1aUH2KahTya!okW>YEqM~wreSK#S+C!P|CbIn}0b)>47&5w-lseEv z1K^sT>c#D1g2?)xf*rH=7iWJuz56MvP&DsD;6AVw@u_uTewRE0Ck7@GP<mwl>X~~I z*+oAwyK?V+Ny(#l2CNJ5|Lq?h9#1so(8<bO-`(lD-@~PgJlGuQ3U!-yAT1~?ym-Y8 zX9IL?`<MH>Xk=vQ9QVgI)|-cXDRsv9G&BtNEoZ&y4&f%c`id<-eId59%_d6Q+k2$S zLl+kp9W#Hwm6RjYpn&l3?G5<)8fWt(-92c3Gh$9}_tlri)8)l&JRzaGThPYe|3tL4 zK7IOhiMbNi(gHoUP?|G1-X~dKU!R+zEGsX+y#-&KZTR~73}wL1<7fmmbUD?O&+|nY z<yF_0sRXsu9xExmfB!x`J>CC@{X-d@%d-=*2U&+}%MEY!eSF;k<`O9lIWSKL_=)b1 zA9*s*p9A9J-@cU}?%yX6t|a5KWKmGc%gesT;NpvQP)kb_DUMT1$%%*V{rK^NO<7q^ zPw(#Tj*%&Mad9yvC56PjzP7#|ox$oUNO~KOo6&JL;R3L{UK7;RWK~lClv2#Ds(O2S z+tGnY{82?BCgzs%)6*~1ISpxSYHH!))4wvX*X)c&qv_@4nUYZiDg}(@HN_Q;cWHo5 z*RHZhtb>EY@pQUaCUS0Ts`;ytudi=P(@suK4z-l*c?#3u;9#yPq-W|<&|yYWSJ&n} zTt?TNzi#7!q~cv7I5;>65Ed@08o9kar!t?Wf0Psv9S>F*MQ5_&sE#|n51cGC-8x!f zQ&z>-`g3-6#-|CVRB0p9`u!y_jZ#WV)OSPlO9QRJ@cP!$`rh@=A7v#aC8ee12L}g- zhlfW;N5{v<CnqPTr>9uk^Ye4;TfV%!#QJh|b%nuTu(5h`bA$CAyIsN3zrSH~0OYB! zV*tplPuT$grM9|~yrJ*(ZYDaw0F~C?p-^G-c*d0GsU=NV=k8}JW@60&tFK>c|Ef*z zx+HjJ6lc{Vy^Y7TBGViti4&TJnvTV38|y2hZE&F=s!!T9>~hgjno5F5N4vi4?+ob@ zA>G$*qZYP9#9iYXTbRrEK$(kx`IBsu4L*sBmmpR%mUuN!4=PytI@q-x{dA;Yz(y!d zt2mcvq-@;bX@Wb>PX**GLNprLml21JyuhG%TeIXfb?!nMWVnKmSVJn&^z5wGlV70s z)L+@uS-F&C*oIWp?^VToR%`8jpP$N{q*0{LIsLW3;fPBGf1az}og$7(;RP1o8r~!5 z)+QDQXFXizLhHNWZU;kZb?~?X!Pb;3ok|N!n%tHE$%@0rO}EdhwP5nN@A%Vfh(8B> zpL(qX?PVyCb3ax;?C<ZtW8a+gv^c1jS3r7coV}wR&tfj#YA&$`YokO)K$Pjlj)X&w z9v(b2pP!W5Wn`rLKCwXI0aoeEbFrh^JdhYH-LtrrG92^+)mj-Dj=>R`We)9+BG!!@ z3OIJ5<wt_fJ~~sI5234g`27BeUkUbe+X)z%nm_me!@LjTD+6@gn+9^b|HWcsHS|K4 z>3SqobY^9#yF(_heJ8virW?Z4E_K;AUgWXCbJ|DmdcASSDDJuT3GY@>;<5UdTa!fH z>o~SfKY=fWR1<`mUwHZ_2pi+5n^a@n8Pr<?NUX9MaRp=a2XzIKr=-kHtt<?q^fW^L z&T26dxxaPi;wVB>TS4|FJ*fyHijQtO^?R(UOnL70cv_(5<Xe20dbH?SA&`*kqkf2a zQE_o`=s$cGf>KgQ!@?To{dX*==px_HX}h+a@iD7Y$|{P85HkB~Mi;2^9uBSBX^^aJ z>XFe|N9$S9*~d1Q?urF_t(O>7g><}OxB<R+{+|{Is5KW&b>!e=lTZBj-)Sd4z!p!w z%)qlEj(TY!16}Ovbm|%oT)dvK$no^{@=ik|X8I-nagmOO9-kkzw~vmtsSXEvG9Bz- znZ-1x#j*Bduo-mD<UcpuKi~FmaNd6V+D<0cBVdD37~;FP*ctS*<75U^UXd1Rfef6Y z6<~oV1x|6QuZE3Z&^t=HguJFiGaI@V?$zETvK`BBs>Wcx#<cxgFVqpKXQxjv#ID!2 z`Meftiql|$gg>P>_}gcwA=Iy`k!lkg7xgN@4f#wP`HVd`QJ;3aA2+>Xhm4sMu0T+w z`qn^L%nBq=-2xWVQ)git{m~D8s>j2uRppKEZp+zp5f@e5^QM}pq_iAd%7f!z^vAe_ z%cexI1TZu*5{L4>l{3mKt)4Cg122rsjLnT6ln#fMrq@}OZsV2`Y1%Ly+l=MC@@6`d zo>`+?oE)m&-6JnXypUGiyi1<T{X=D3R$AI|8Nt;sJ!5NRWF-0UM|I#;ZTVnz0s!O6 zsi(~E8+LA9ap*m3$V@QSI*TllP%A4PtmZNI`+Vf;Q_A&;XGn_PZuD|9yu7bGE*n)d z?ZPM?TP6}kv6F<OQEmcQepLblG`nIMS<mT#$v*iEVApU)Fp8pUIy^jU8u_%YuC7X2 zp^MI%a-}b{Vkca%?>yD$d{g3$<?eq>_>1jYmHoH@p9l=U0s{AsR%6z1q6OED1O)oZ z%ajZ{Q!Qpl8$U!<Khy9?28Ne*x*~{adqn3a@T!UyoVPv{m{l~oEp-)A{@$y`9oNoE z2AUlucr~_a3Fia&M_xm757JcnNhk6%nI1%Mv9iZzs<j2FH<rUB)1YE63RJeRMD>r5 zKhV(C)s<qhR|3|M*}nf2Lp_<BQ>5;SyGl5D(Z?LI5urrr<8TVQx;zR{s`ZpmfRc8e zHmx0wOjSzSJ^%=%MH32vwR`{*QmRI3R?L8JnT?8<gi-P@t(<K44UU9PQ$)s}52#cb z>6J6V2i;)}j`$wD@=s~CE=Y#94oUtC%qg%}TZ4hkgdl296Vz`%*a$hk(^a^34@LGQ zv$-W~IkG{-il4wKVLO{I4GqKd^I01Dj3VtNVfie7SL#bRIv0k8;BZO~E(JY>L{NJb z$I_XIvG_N%x~JqfRdM&!_!oqfM&-C>d`chS@bYKTV)COxnLTN_UFM?P^NpZ^b+tZR zYsr!C2?nEf>`Ysx@iAK-g~n1NtGLNoji?34x0PER9^$Y})!qj{G=nA73;P*}TylHM z_0sa#oq8J+lz05b7q+xz{!S*mE1nz&B@4;!wA<T7KPV`BM-4GZh(GFaFStyFM@RF= z()X%{>I?dFcgVuk(-#gdFj>9JR_w=jzfIbo59a~BSb{^`-39SKw;x9=Tgl=F1ExKA zFY$pC8p4!d5DjlL8!RWxQ-YBUbF<_IWgx>L_{Ld;)wCSVp;`C3mMjHQ$vz@|@WZw| zDF~3B5^9`9KKMw-N4Q;Ewb^9%!a6Mlf_wxB3Xxl;Jai=Y!m3OK=x`}Wniqa*%Ut(n z2VS<JD_>smE{dIWmW6jOxlOsUvoRDWM&1N><miVZ9plM677l0$m(YvMS;g}IKLP;Z z$Hq*@?6|-rIq4Cns-Svv@J*?Q%~OCRi~dpb-7N;C%JK+b3A0;s5TuJ7Rk`(3gVn^V zVJme^pc!mIndQDVk|lmj3lBg2I~}&%t`6;>ezGevz$o6|-RyuY*R^z=QMl1a|A2om zqHx+yG1#Ow^0c+Le+|L^ry8wsOVawB&*A6#oNQoozjTn6zkR1d=b_xediEH<#Z^)7 zXIlR38o7Jp8C?AQ{C5fb!ABK%#L(P^Iqw-4?t{jac-6^@IUqNs;$>5H&B-XYW(uE0 zz$2KJ&+b%J!P2PY!OLdPA0%?cHFhKEB2JSdVy=Iy*Pa1>lROEtt+qI@-4SE=p=2JI zGc<F=ZY?%87PGpGTcN3e<z=tm$@)l*-mg}yOmdkqHnvKkO?0`-NEu8{G|k=pxX`*% zRUPpJcwTKY-|A=kb5_r|-e#$b5_qDS%)^OkVXt=$aL&V-J(@U&$TYdVNds(W+R;-9 zx_oA)eKVY#GoqDkg*JI+D!=MS_>*{FHddAo6RlPWz4I=4Vv8kvz7d{~Vd*{G=*>;0 z2`$cb!7Hkb(Jv(>AqmuBy6;eL1`oo)!KvWl`*LWkPVljw1wU}~jSx(U<?)PY#l90? zSfh`o{kIZ7a+88{?>S>PWPe%Xuj=0j+{|q>wS<^U;b;sJ94dz}@XSXjCMD@mmXw#5 z1`f!Blai8*Vl_fFG#t4oauX-yU|}KtOQUj@7-D{c!*NB>&^mOQ1Q+bFK73z~hX5BG zig$4+1P(>C5!3LPy8R@iAi&*kyLi<?(u!V}zL*v6=fg=|;nNw-_TT<~f1eLJnD?B6 zI{jhwps*s?e8%FA1O6mS{HZDbJ~X_Xo_HCuWZ3$c?UpnGMzKIa$!znsB3Se}vdxLk z>q6m$8I|J1JuAl8CIR(iTMXbiibRN$ZysE5U165Y?oE?3=LOK3Y$qNk1=AcxRs<+O zW=6%MK?reoVQxK*??ANBAZ1cfbTf5QQ4yK)hon(nUS3-O(X-xEgq<l`p8OpbtZyda z(>pscs9&=;F&N{)%^f0y0&`?Z`mD@0alb?ut@jWcH_AJ5y4K~|`L6Tz3`gK(y5m@{ z5IK8(73My-?tO?aU<^z-0EizA^Kfj~W%_yd*35neBHvuYC7Zl{{V=Vu(|!WenAuB< zNdmZXq^*I5+4saWyf17p5PDyi^cfXAewmZu&pOXhODBKC5yB@OXS}aJ;tXq?%JA5C zIE99|Ui&SNRns%oBRZs}Fo(#D>T0}grqhvh<A%pA#;}9Ho6cB_s7($1ZD^Qm_Sxd= zYjX<=3q4UxmLn48s4IJI?YH+CnO!ktx6_!vBI7q*>xgX67<o5{q{UA?ym9v32N8df z&>!O}<)4O43im1OqNzoG%Ib5z7@HC*W#@s6p@h#{N%f^wx6PidJvW398kNsGhmD*) zuIEx_G}8ZW2-lx8F1Nz&c|}GFPi?Yb=?={}FBJ+h+ZS@9SCTO^N!%g1Hw6_MIB@OZ ziWb}$IulkPaL;m&5`mcpBU1Ol(R%a(8V?J|<R04ocaNy3br<*g?J#(GdI${9=P+<X zhM3jnTcL&QoBYpErHpJZv^k6Zoabl4|0D`FOOOwIujYBt=I<rK=_8_<x%M5sIr8K) z){uGF7B{?!CdoHcu`}OK4$pdsqs($xf3`ik$W;05gMw(eH=g3ef`j>qFJSsAf8YE6 z#*G#{Vu48tL^Qfs&21PF6eTwLmkoghs5YC4IpFzUjG}or=2)M5Y7oZo*(dU98VQ5A z@)Pyy;jf-`9>a-L%t}6N**zHSU=s)G03_!VPjTzobU`vt4eV3;^>6F&ri3&&%i8C_ zoW^>2{MHY^n>{jJlvN-4ZoShp$ouF#*1{e}%3n^ntB`6SQkV1u`eupd5)6t}zxU&R z_NQ*%H|Br~{Wdmzwyh_i;pxilccMqJ^RHjn;^gOl-B96u4@m4^Il652s;d)O1(CI1 z{qfp)>*VA#P!LD_+#HL6B2!zTTV(~djb5KEh<nw1I!gkSv>hXoxXGmsFIUE-FXDs& z%ShzA)ipBK)owxQJ|K4%dk?ktkH+agrNe<WFe0sohgBW=q8|z?<T<6rWw10rGF<oq zbU~LWS(K}+Xh1zFQ^?uQ6~Z|IpquFUU9#|w5@2gSoB3A$0(jeQTy-|n!tw#2+kWjO zGabCWJ8Io;H>LxkdokZ}cD<-8E75WiWnE*BQ<9dIFFB?{38`zlR^kHZ+6fmWs*K)l zkx!pm-`_uVEi<`roqL2C3i8KAJn!X_kZhKk_<3_iURwi1nu-+t-W-L04!K)7?*Koi zB8)J$D7U<!{dw)INFz5g6sU{dOBuN6sOr4UuHY!|2-(@+kzy?7fCoqn6ILKSO=FMn zHyC!}BRPu_*KsBveIuL>)U`edqBEve*3()%0bd@Acxx;0Cn5`dS=`(4u(OG8F4qG> z$5#4HN}xpX<bQ1en~htRxRS$trY3~srEOIJHin|X*oM3nE(r4p`4#0U#4TI=43aJe zN#};lbEP-H>0f>hT#ZEvc0yty)_V>0M=Kwt5j{uUc!6%ba$Zcbk>8dZWn$%*FV%?f zUpg|mBQDFW%f5_V{QWZ=5;?*~4UTsDsNUQqwll4x3hst~%>){C)I~3bs)ozl(1&Kp ztmjcCJKt4^5BsHY57Bb|S`l$A?9yyH%SuZw=s;%okKn`59&J3HMaSN2rgeJp%FJ;O zNinMnVypQ!6CUV>&vWO+#-inW9~!AC%BFZBI<Vh}vxdMXm?Z5D)A)j`=9gzwE4z+l za(9UvT^rJ^n9Pnxf<gliQ>|MXDqaQ6mzm^TZ2$2*$e12)63)4(O(xf3yT9KyIhX3y zB*+DGwaSYl?0a}s$r|1TGGSX0U%2W)Pud5Q$)w~cz>Z9@{Y8t@aNW-SYl|i3G_4nw z*mD$UTH&ukpd0&d)BUTEa2kEEMq*H-A$ixvK+lF|JbY7@#D>-J9Z=7-of?)M-swC| z_~p%AxnBJAl{(4`1S|A&3YwD9sPo{S?TpY3n9>EFP)3FGywa{zS7C{790O<Am|4n; zK6n6%(mua{Lw*5YDm&~4Vo~vf2Jc3eDc+@INZaO`NgehsI4e)Au%^{!Q`G2?u!1nP zHt%#Lvgw57N6l=@-#;EJTH$ON4QK-0J%;$5#A8l#X=f2=I`k4ZO5#Xe7P|gD0kzc# zVK||<fS-3sL)XFk1MGLvsF(xKM8_Jz`oRH7Qd?64*Zf_O%Klr{ZgKOCbHQyJRH{4m zE{RtX8n!fwf8g342&GQm^j|A@V-$4L$!P5EqS#&bu{o9@aP>aOTYAE+slELc5gQg5 z+PzjsYVo_GqT)&szo~HNFw{2e_tljynaHzNA|Na*EQSB|{x+O%26-q9OtrP_7%D1u zhdP+t<lz7UmrIKkk<At<x=Jni0IYMaCBy<%S>{yfgl2F3OYY<ICu{o=1H-NmEB)+T z<xY2Jr#$z6W25BR5C*9`dc8o~7AEn4<JI<0On$!-TdPmjuqAgN7j_2$eh(~<z|M5n Ru%}Fby0VT^g@WaW{{hG4-#P#Q literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/images/dialog_sides.gif b/_source/skins/office2003/images/dialog_sides.gif new file mode 100644 index 0000000000000000000000000000000000000000..5840d01738024e136c0e3f7fc112fa70845dcc31 GIT binary patch literal 48 zcmZ?wbhEHbRA69aXkcW}PCNPk|9{1wEQ}050UZV)0Ld^gvG??IaK8*^V6X-NBb^Gt literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/images/dialog_sides.png b/_source/skins/office2003/images/dialog_sides.png new file mode 100644 index 0000000000000000000000000000000000000000..7da9821879b9c5b9753084e6a461f44b3c8bc171 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xp=xbhE&{2`t$$4J+q;L(WV)a z9vhhqtp$qXpK;fB>8$^q`BYcoD`Urf=8xG5b(}}eFZ`0d!ouSpw?IAXqxlYhq!kV@ YSm=tX`_u_20nKCZboFyt=akR{0IIAxQUCw| literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/images/dialog_sides_rtl.png b/_source/skins/office2003/images/dialog_sides_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..24fe13aedb4cd5f95a3bbda0eef1588e8f915246 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xqG@ehE&{2>gmu(N=rycU`;Ah zc*d3_ry$0V<ftIVnpCJTt>x09fWpSpH4n3RJRH7X_R3WFD%w%c^zr@E)7Aft1Q;2Z aco=4cbNyGg|8*N^B!j1`pUXO@geCx)^*J*D literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/images/mini.gif b/_source/skins/office2003/images/mini.gif new file mode 100644 index 0000000000000000000000000000000000000000..54d910741607aeef28fb9b5882f77f14a3d975ab GIT binary patch literal 183 zcmV;o07(BwNk%w1VGsZ?0HOx~nVHN00DyOQcc7r80DypIW|;s0|NsC0A^8LW000L7 zEC2ui01yB$000Agc)HyFFv{5oF_bJUwc?N^8lWRyWF#Iz8eXjXprlOQc&_jKVd<V* zkW!KqD<>P$Qd9j}#|1MMRnVHftai)I0hk4V(@-do3I{afTNt=~7q!&zhQ}M^!I~t% lw;gm1W_k-^4+91Sga8FY3}$4Fii8ejXLS&6nq4;u06XFIMo9nw literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/images/noimage.png b/_source/skins/office2003/images/noimage.png new file mode 100644 index 0000000000000000000000000000000000000000..159811305af7fc78662a53949f9c62bd702785af GIT binary patch literal 2115 zcmV-J2)y@+P)<h;3K|Lk000e1NJLTq001Ze001Zm0{{R3yC6tk00093P)t-s+g4WG zTwL2!RN|kX+gMoQprGyM<>Ho>++t$jfPmRaN!?~<++bkXLqpg`M%qnH+*(@WuCC*= zv+nTj+f!5FhKAvZiQ<}?-*<Q0S6AP7c;J41<HW?`k&)xc$>EHQ<H*S4t*zsuqwn+a z*+fL+ySwe><KAv=;;5+MkdW{9_2QG0;?B<7US8Z-SmM#q;g^@%PEOu$Z`n&r*g-+v zY;50jblg={;*^x^-`?6vO5u)<<HpA2(9q+xwd1j|<GsD($H(4vcHCuU<Fc~k&CTF} zf#8CI;-#hIyu9!9^4m~Q<IK$Ajg8}~s@q#z<GQ-zwzl4FZR5Va-f?l@eSPid=HtS` z-+6iC#l_lCP})&Z?(gmI^6=xZu;aJ4;DdwWo15a8nBH@9;+>t|a&q5ubK|eC;+&k} zgoNRWitg>}<EyLTi;M2@@8Yek;fRRaU0vXOeB+&++DAv?nVI95nBHV$-DzpvYis7c zz1?td-+Fr5NJ!$Ip6>4K<<ipQ!NKLv&)H5+<e#47w6x^Y)8eC}++JSl*Vga(_t-x_ z>ekfk+}q{E#Me7J>(bHOVPWE?rr?K%;Dm(Xm6h64Q}6Nb*FHY!#>MR6-{6IX-+X-I z%F5>4+~J3Z;f00e!NKCVxZ<&~;;O3SqN3ugtl@%!<hr`sQBmW#xZ}&q<gu~izrWpR zXyd1++fq{Ej*i`GYVPal<D8uC@a^N&)Z@d$-C<(t&CBMmuI}>i<fWzW^6%ow$>P1e z;;ydZ#KhvOtLC({;-aGCtgP(Y+2*ma<h8Zrx3}V_r{kuk<+{1$$;se`hUdGw>)hMx z+uH5p;oyjf;E9RksHoz~%Hqq*<G{e-goEIUir|Zj+EP;M)YIXUljFI$<e;D0RaNN7 z$JRMH*g!zpN=oI<&ek_K<f^LKQ&ZVcP~K){=(@S&yu9Sr*5tCX;hdb}!NKCg!{V~C z<j>FIou1*CnBt3z=eoJ#jg8})n&6C#;Ej#qx3}JMbKrV<S#Yci000F3Nkl<ZcwRlw z1F-Z+6oAnl+cutU+qP}n#&6rUZQHiZwe7vh%<flHneNKzTS?H$uc3*fP*Bj=v130% zQBfbUU>7tBO*{x<B|7Nh;^-KaxNXG>tyZfK3kwUxgN0tN*J@X6OH7P%ba6R|MjaCq zA3fCS^<jZ|d202c|5K~gd2qmlqefBCqmx<;sSoAkjCuTc2mG+G#h5WU;PU{VeE1`Z z(gy~fIRs|Mj*N`Z(9pQAOoc)jZ~!!BqtFfY_n68Ejf=CgN=<zQZQY7pQ#Yqt#l@L$ z&Y2r1@H<>trNaG^w6x&h;0X}?rKOdWz!A`Z9|xkD8K>f`UV#Y?778OHBSXx=QYf4d zoK}L{Q!~*TtJJk6Fh&?D5QJPX2q1&OfL$*X3k0A6uYHxe2KBE^0~AtRv$6lS_4Mtw zjmdb8w%ey$-|jzKQydZk_OE`ld4h0VagD&R{(3`^$bu@Iv<q*NkZK_+YPfD|5P<zb zxEWnpSA4o<V`K8%DHbCmBSq92k`W@+P>Wz|F(np;w+L$1T|t*mx13G3-F40Aw`c@9 zL2Z;#D6&TC32e8>&v@;sZF2I)mdogy^|n{%#!lK$`8FOL+{->kqn*o!Q&9ZdT8hya zJJ)vob|e5rp^%1ahwoV6vbpfmrNU;DyYo|7C5b{g9~)~xp8^}MtSyt#I%b%psG&iG zJBt||G?}cda+pLp|0#Mv83t8ePNQkM%(Af1?7Hn1&|J&A%4#b~576<-vaWL11-=d% zjn3E4Bu&oGSEtcv9DHfzU9xYFqYbj3X$xMyv<nDG(n&h9oBwmo*&PyHQb2&6=A|#q zwQB<+x#CQxtCvb!8Qs|;lM`ikGgh@q>zk620x(KK`!SZ(ByE*QR@b!~_Z6C8;XY$~ zUEONQDrvnAqx;eCz@ACxt*$HG6s>%H00x>89eAybjwzilk+fp83w8hb?EbuE^JAhJ z4EY}FF(BrSQGb)G7>t<GW%KSm{ey-ap5D8OF;%;F(_Qn2G=Ijszj(K2sc?GV0omQ0 zUmDHGY9FkYnq85#b&*+0|NdvN9jA6^4=~kWuCiL?7mvGm>XRo_^U^P?TAn+Y1rHE_ zni#6(xk`Dp*RS@tv%k3M@Zn7t&6_X1D#9_Usz<Aq4=TeeGTpsiSm17UI-#eBkUkri z@h|$^2dXeCL3O$E@TvhDubx{|ao0;=L;PM`+TWu0rMqW(hbv1_3^p#kua~Y|I@Nya z5tf30r}*LsY?sREJNJ6oz|a`PsDN>MSrI*i%%e-j6MXo5XJ>^opYKB$zvO6U3O$0= z3qz|IC~Lr`ua^};XHRw(6BB$8(H!zg5bq|pvFFeuV5s|YG-%VelSQAyCZv#&k664V zAt7N4cG)c!6Me{hf)g7X>XnP+d$Dm&DP%HHygT2`jc3lyEx$laRFL^?xRj&toe^}W zHa;0GEXa4`dHDM?hdMhuhnW8UJfP3tD98k-IT0*xQ~{2_R}dFsjM>TMT3T{AmK;ki zcZli18~1!6BBy|?LIZR*fvg}FjN^S6;&M40&uLiiJvkf>m&x=PS74Iv$cEj9I}aw8 z3u^H!bBh<h=Ww|oKmQDq>8Q6YMezoAmY&mQ&3gCl6I1WNV$>{I@G?DfCd0dk^LaeL t9L{?@PmZPK&<CDd0a3vxu<5Moe*xgDR7U()XIcON002ovPDHLkV1lp=pwR#T literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/images/sprites.png b/_source/skins/office2003/images/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d3a727b7456eb6c6942ba967dd64cad948aba5 GIT binary patch literal 6119 zcmdT|cUV)|w#TuHiYO527=%y+MnHNQC3FaaV59_)D!l{}T3~DtS`bk~kJ1T4s6r?q zqx2R8L<EFr2qjb@gd**sbKiI0+`03;^4~k>JA3W3&)NIid+oh`>$g_yO^E)PQ+%h` z*x1e(8h|Yhq!t_7(N8Ci9n`{tH9Zf+A-IM94K@NrfN}70%*j|E%(nmien~1!IcPcQ zZ(t2)V`IPY{W-*zo_X=0@pzD-sqXQSV;9*^u$SNNUuR<jxEq46TZW7-W@#n}=p%lm zX80^w7z>J7=ds|3oL`juX}ZS_7eY>t-3<Kc$WL1OF`E2mWzQ{rzL|VC^VRRkmmVYw zo>N@<=}>e)=OKWg$kDTy)29!;NK`lGY8^_p35aq-7Ia^SvKsNl)`3_B^+6c*_!?zl zX$QrcBjM-Lmds}|pLP6l>S#a<r@p{HixsPvY9*k0#A4R$#u$K#00NN{WW1QJo$<n) zO%Cyel)VddctDg;@^ix37ne0fXpgN}ug}Miy`-a4Cc&9?YPW6!C$L|<#a@<RkI~Sg z7?r;%_UIDrFM$90c{7dqzWqhh%5G97y5o74E#nJM-Q&IYRNsk+vJ6@@T(2ih2DG3i z9MBvFv~wqvCG2Rl;#M9Y__vKs`J5Q5OfIq`Sbr~!D3Gx~gqokD{+y%VSz!1qc*Go6 zxCxJ4c<1*pp=kaVhWz9NG&YDZ%L2B`g?>5AIif&wdgSwF-W21YG{8SyQCdD;El0y9 z1f{kn_V5HoIa>U(ee;w3*OXKdO{J~K&+Z5-;CMV*8=HJq^K<4tRpi!G_*KktMl)Cq z9A28lNp{TJxWKR^LOG+_jBy)vO}=?hd`4fm{-fuwVc{~jI>UqW?mj6M5*57TdHD47 z&YijrJm+&Q1PgNi?=<#ZSK6uqwsC*?!T3&6l-InDev5IOO1R^>|GJ<5+}Zz4Epu50 zrZG$)Rf+dP<Gj%wj}MN*-uwM|OKMKQ%x($zzZ{sq8+NC~Qu-?&BwWu<j3yXIY^a3K zbAaipoLhpNb(ev1u^rNTt54C5BEY`*jw)cKByc8w%ke(Phan2OA<s63>P1f6Rgxbw z4@CKrs%<PF!XOmAR)>5hap4a5gWC9z!ocnI-~HzGs@KbqrE;9Y84?_%uaQ8_^)rEl z5|}2pkZazCn?c$3@EAj&EajdpBQYVUXx2&?n5`H7B4~E~x?O|#5+)YmS|j4a?>x?> zv>4dp6B+YGD(H(j5JmCxg7IKYt_fdE8%59L9fx5;79DmzI(V*<ljVX`8Fi&HF9cVt zNg^kpdLd5~EeqpprPPcyPQ+wpm#j&dSP!1;Rf#R<{t)_GGd68<z21#}YozX!oO-*v z3{)627EjQcN5bAO70lk>JTLKQ3p`M$Hat5_zlEQ=KU<9q1_Gf7U(^*Khc5j-`V$~I z92hw4FtHI8B>_wVyFk-XOZv)wP0HebV`qP|Fp#Sd4vGXf=Aj)%>VgN9XT3Zyil>hE ze{h3$il=oyXUypra`k1My?Z$&H+i6~ym;#N^@xzSV=<FP96P9H>z^<tqCHQMC0r|{ zTX7uus^BmO@j|`w#3v~Z#e_YUWJ8#WQpB+GL=)qvzFwrO=-yW@nrK?)5oa@T+`ZB6 zjwJar<>zS}5J@4aaP+rf1v+40eCAT*KG%ipWX95^xdvdRGkvhA%&uiQ>qdlk{r1nv z`=j)o--^mw{1F?^Xmw2TLfWx%+NC~q;gzuH2(=bLH+;A|-0pHzeQx!kx2ak-;QO|E zR%T}L7W{R&F8r?1RTRu*aifBh=&jAR&V}AyI8cFOMZeIF+`!vkmO{`RzU!S$YcQ)j z-0aGC2?=v)#ee%MnU~~s#G0NS!8^awev(-Ak<?mz{{LuJfVjvXrpcaDUkUdz11n9@ z+wUXOdX2=7*9vi8j=a-J_bQJO%MY1qAf`-*P%QkPE5^vgJp5?<rRaQenM>eBxa4VR zkF#;(5?9)lr8q};l7k&ajPH`pC(Gq+MQ=Qfu7W>TEL1DXQw^$1jkQH@rYpwCV&B?y ztN>euH`8okqdkk#9!;I3ys6^b1DSI#4OU1Nt;XqiNL$rgaoLn7aQu;fcLKj<CLSO_ z3T#Gu$*)$fNt1`Oj=5*Gn74Vl?o+<o-o!W>G*CS2*v6Vbd%5wa`p9gd-W8&afsJl8 zU3Ss?!S)&ehKRKxlc#$81JAq9#(e?OC`dYoz;DLP*!aY}Lt!bC55XEIaDZg@9XI}$ zSWb?9Ejb`yr-o6>v~Pl1jU$+6gs0enf#%?*yL_J`aB*WIu_5QEYXg8?9(p+U%5{rQ z<wp8ZQ6V6;LBK3Ga-t)qLwgK6lt#Ho30&>_c5Jq{Qc*e9a0++z%)1g+h;NrCNPfoj z@R}0sp$j2W*5eT+zOcJzlD@b@Lc&lV&YpnfyGp9_|H&Wz3%sqgzpcpsi&u+W*I>;I zQ8)MWAz*qJrF3@oO@=a6TAXI%2_2U0gtEsGrDbRqo-OJZSZ^|gOBBp;wIS~G*iC^u z^8-(6iU<TTL~vjxS^?_bWz@1QGEsc&zjvSh-jaVYd7LJ5bHZYqr2j=aDjSdt0Mjec zjhBICo88@e%YD?Q&Gq@axZgdpHz?cC*uS`uzpM+h8C!h&^R>)%_@q$_RD>oA_o!9# zK7gZL9NIgsBh*9dj{jQ`J6Ju@xZX=jb$zVETfdW~u#6hY%td9cB~#DtDk)Yvdr($K z7=&yi+mXZMQvUu?GUjy?IKn$eW9{vB?Ak}=jyeK@Wf}4;c_QNyX~{vq5Z(yM@yS<~ zA9$4mMWI9Z7Oe+fjU5kIOed;~k3JuHQ0<cteCuO%H)rjZV06j5$NI5rs^rpOYdiU& zPuWk2N;Fl*b*!lUHbDEuCRe`F28WvgZY%w+IVWz2{ei#hBWxgLI+VNCGU!FfxwERI z>I+tKo?YpXdu@h~O3NwEC{m9=?eH~GT$ikFh`FkkSKT+25&IyPHF-V<A)4h$<}Nh) z<zHRkih{e4Lo;f$A-ZgNuK>MZRModTJKej{_CIl!5#~MHsa(K`?eDnEJ<(B?uR0(h z0NyqL3&nLDkQ1IiP~SJc!%vr9;>t=54PxbjHIQnLl1(srr`lgq)LL)2x5Vtp3qZp@ z@AFX3`@8VnebG4Y)Ut7Y<&|QL!E!hK{fQdRz}2jUIR_9-Q-Hr|p5K+a_CQpWx`ozO z`~lOVT*P;5#XAy%Y+2`{o}gp8gmU&+r?>JE8=+{bvQ?-{{Q+td&<hv06z8%MH#J4I zl*Uo19Z^1kk+<KgU&|afZGq23jVPRPY}Ls|YS9k*2BFn^EH^0AM1#E`eUHPBuA-`Y zep2qkYX#5Aiz1(S=l1x27zxmLj@0vZIYm`TBh|T@xJ+N#ld#7A0nnspKLA<*VM3=& zU>jry`te#CZhj^NPI_uLgwQSw`h44?_TTNuKTLP#?b{}HMwRgXJH~qU>{mD^XE74w zM<h1y&epIdAZy#B6R53)k?vLfeT4g65FXZH|Di8(N2hjc)N64$92X%U`gW1Dd2}<n zB2ghS#H=ZzTxNf_XSoZxw+kIjBV>13f6DLO+(^WN<fh*;d#9##c}XFL>rvrlwlGpG zjb9-*OHcLNGwPSfK^DLc#k2nPV9)`hGV&HIl%>Bfp|+#ZwH3DUir9<_h}mA9OT=|g z<C?BLU(O=TVfVg{0fDQl+PjKfQ|HG0_PXVC!St=#y@Ijkw9?P@BoH!ct#)zwx|ZcS zb-y!fJ&GJUpSYAXSx*8?t<7j}Lbl0Jza2YpUSiM_`>_V9PXLlA%w7KLbF=(H{1SF- zyf?tMXY}e`c+~mbY@@Lv?S_Wo3IXi``50fJa@FjVWxE!i`^N0Hd|On7@g`<#ui%pY zsw%^5e=aHG*~iAz#E6*|A8093n37Qa9KadM(q0PIrXA>2{kGr!a9Kg#;wc#}VvP3I zjIW$A`69lNIMTrZcG=vBlEG;eoQqs{mt#3=?oB=P30-+?Y^JyYDcJ<*ED}PVM7`yV znv>gaAW0|5ddvD^DvFZAch}^a7C%HXwF{f}bJ;UivE;_WtP2joAG>Y%h6=}GFb5E} z>BRGMe%$;iH1zcabMt_t*oSJulH0pgp0a~u_!fsLmHBlD*eX8_qGEmx$)1#g0Awk? zGGe~X+{#b^XvP>ZLEE)>!XTy4FvdF)IhXF$KV0F-Tpl$g%VIx4OuSTLZ7(<8bmuqV zXWD>D&j}5W@E6|qUxDM($)?$reCpTmly>_R7jOI2xHvdv?c7Xm{@!b){gPJQGr5FN zlf*_V%PbXP{Ca3}ykG9La7lKxDbX4(m#ji3piZBGcmnN}H%i(j{gK?}*Ek2)D=e#H z@en@UEOKcQSo-CwyC}1O-uQtUD&(8(q!I(~DOxrFw$=INhI0vapmTR@%|FLC5H}sF zqhmA=0$L<yVavxaH!h5>>2del<XW1VWC#Z{Ydd{R;4!nc`?ycaYxH&1d6jw}=bE1i zLbGZTscwd|XSB`?adCivL&O@hqQTZTh89EOjN*c^8kh;V8WV1BR}o|Z8pr_%)k2~* zhD>C=K1n@&f6RSp#w1~f<*AqrCiadgO}^JC=;rok5-T3-ZB#B6bvn29do_5kDMSij zNtT1M0W0tTVQ%i{o^~ME&^7M&Ta7_A>SE0|J67(k-NXtrGsX9j;)fLp3pJ<kaz&nc z7Xu=Ts!UUA9<}M<2B+8ef;Z9b$2&K}WIx?<uA&e<R#PcyOZ>j5PaBG$eJ}Qpzj?GK zG>shV%ct=Hu8h^191U#3o3$BU_*hg@EZo*}abo&aTUDH*c5jOMn6!7TRczEo*<i7f z=%dsL=V+QZjTJ;tbdqHR_ofO8pY=SN#Y^+Ph6N8K^tquchQK$J5jFnP1p#g<{+-}L zpA*VyzdnxU_5n_uKCEOuei<+BK6y#EpzCHzts3J9#5Asi*L}Q)cl&+92h&r~QAelf zmY?m_uQdl)M(Dt9nu9D7+xT>C<cHysny}(RIHW*Nrq}ZGT2zv4*S#A2jJ?;+4&Qi< z8efcMzmn6dlR8L%p}S1Vbbtq?t~03mB!)MEme%KDq<Zag^vReyoJ<@=w@f521w~r< ztU@|ntmoXzQ@(ybD>gA}+~Yl9%%fOA_ezi#!1Rq>CbQs)5){tPYsd%99gBHo+H+38 z%+XG5@~Nk#*>tt+)7Q?vY67jzP>qbIj8|P^Rhp*4pw87ArP;NQT2?0(7GWCQ#wooT z_7_$_pIl#p#>1UrTJKTYuO{U@3{fnCxseThc}wN9z)wk8(I-s?i2?EWHsg1UEN(Z8 zwD@TDP|%7LWZ-0<OM;*L@2y*9kyC}fo_-HT>vR>@zfA>(pk&jS>dBs#W2B4eFH(!s z1>N7|xfXtC&*}WlDA)SAvD*^jcJ_R*$5fI#a}XZf@WEjCne1=vRSK^qY6Az`6#G&- zjS)-fCN~D!A<)Ns@eot=;<rmMKZ9=?{d66CGL9>DywI&d?_<hckm@V9p)~P+6>@b= zu!&gJ%OoC-{+`=3zF~-AiVfDba^#v>#znU`1K<d}NUDcZ2GjScbXtWvJ*V_Yol_Cw zRLS`ykykYzzg)4wW$+aBUKnoTdCymNzBl2j&25z#q*BeGrca3(BJ5SaG>iR&wksDF ztnvOVQ-xtKq|oMtkX)ciIU+@Q-_%T~z^RA?q|bG$6#F5Sh1Us)r0KRha*MPf%UP}9 zhIXr`+)(-CayZL|>E*A!9|#PVsHd1cc`vH~3s(oQf=#Cd1LW{?qfJlBzv3(z5-X^n zTqEl~DZ5_EjTwHO#Ut%X_A;FdQdy505DqrBUvfKh-4MSJ8RHh`l_RaxV;#yfZ2DVe zhMORod%MYW7rmv5nce<{-39*_r0{jRq1x_d=j2MkrN1!Hzfbu5DG>cZH9?Q7f`FJ1 zaxrDK^K3NB^13Sd>N^^+=?Wu1PVQDZE&70=%4H(`J_RpN5a*3Bn`vD*2Cx<4`1H#a z&098PH{bT7zY2ibI|BkU|11PK(V~$xj|oJy+^y`5_P=NJ+DF|{_w<(fj8*NNxq$>R zBrB3^8WHI%vj4SgW3<~TeoTIfmtqwEEiInBO@c1`JZ%(Dl&&e+?!dy)Qw_>Xap>8D z@<lLOOcjDjnWU@yQ{WO@1=IUa?T;fJq~Q83m3QXaYf^R>sxUX_^jjV-Bq#&EjSM9v z%dQ&eK<zL9Rm{K9oqKmXE`EE&C*XMVsLcEkUSrOvUDy6$+4vpW<n>V4E(@zm4zu*f zM193QlyAkhT9|nu6rEIbzO&OpJkq|Az|Kuo7is5|%Oxg$XZ#BHf9zSv@z$uXGr`t0 z;Rp#|%Yz8<AxG=@*6R*+KUqImS4_yi(^xo2NULI}YK*3}*I3T{{a^<78xeI|B7WvH z2TdEonneqi<>4BaG1Eg8x1Y9c{y}^T@f)x4xVjJ+K&q+7>`KZcS8df5U+3?MKNCmv z_Yh>_>WVAMCR7Zl#iuMxmx1hLDSOp1=cl@u4A;NJrGHLsUBK@?9OXP%>argusjbm8 z;Xgwfr1wu%;WsaQXMl}Stv*o(0pB$ee&<uPzUxvLUWp<J6Z{7~{9~mKyp__=ERrOT zALMG;?o`y(hYzSm2m>Suml?&nyeHYN+S=NZ0(hTEpmGcVAWV>?s?g;!2eLf`GXoqC z56Cm_T(MRipBIRFYOn!mG+;Ot=3Htwel7>M@kD~T#FkxQAB~<O8Mhzo`~nX0@-nWi zsj*BKOti6lBkhZ^r_;p*+vC#<0h&HC_CnvM;P_f{u37ux`TU0=749^vK!NX#2bbd; zu3fR41j`i~y;Mb?^YD+xpa-R;r4v`~9TPLcNer~cio%RA$2;eT%e=0tX2%CDw<gPq zwYyIRmBDumf#d2c!2Cl$`mx=1)U?mpc<HiLxlzdla+uqDEzuqy)*u03<kX`AR`Zu` tX)Cpd<CwbSjJLLifAsl(Ro>*<=inz_>#DDms{B52LtO}%aKrJze*mAuuRj0) literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/images/sprites_ie6.png b/_source/skins/office2003/images/sprites_ie6.png new file mode 100644 index 0000000000000000000000000000000000000000..94073b2a454b6f0d0a46b981971173c95d02c54c GIT binary patch literal 2715 zcma)7X;_oT8jaV5x?x+Zh`3x!Z(XR0TDc0M7D0AGSp@~Xpg~YUSriZi+X^Zo3I-%3 zK!7Ma#3Y0*A&5j`0t5*OArO`j0z{D=zAxW$qiyf+d!94rJ@0vD=9wS!%sg;*vR=Dt z^C}Dmv)0ze(nVX3V=&8mzgntwjwP*Uv}H+{i?s!&ylu-E2J??=&JJ!?+E9y%eQWZM zZfv*EE4ANigyZ3GIHm1IzPr(otI@E}QKi3yD%fQtA}B6vMEM~6k7D$G8JbK*AHPCV zULh&3(8n}1g@&Zi(5E!yDGg248ancnj;7L)R63f*K++iKGY0aEfu>a<X;tX6D&$!e zn$AShnP>(R$zY=C)ku0Zno*5pRHK<SNM;R6s6hxdXl5<)sU$tK7A4dogj$qXhmh)E zQXN99*AgYw!=!qI%tEr+Xf7MhWg}!ZOlBhm9JqjkP&hD!gA_Ev1&s)$5vDXE`LEH! zCb+N(DQbd?nvlXbaN!%Iv>7UGh6}l9nbvT%gv+>aWeZf<qE(ctRUTBygQ+}-%7f{A zh|Y%@e2Bq^=>mu@fEfaaA%Lsfpqe(QUI?*-8kP`ZzDMgjH1!=2t3$);fH<8RPAAmZ zscGzlI3f*41T~5@jUwocSo1~<HH$UPV(5)T^F{(SOEk?Ah}RABx-~6Q4NnU4q#A(? z6v#BKGO$&q5%hv;Nr#|U)7lHR_G*N3P$<`Q$iWV|Ml=A51~gp*pk!b{Gzf|YHC=<C zWC)N9f!#wu_Yf#i01^e*tpK_eV9zknGYrax0ogFvqXc@CpiBwKl%QO>*f#?7jeznI zKt2LWRcN0I=u?4m6(CoE{iDFZXM+7>z`$pMLu0_u7^u+dxR#(|98hRg4GgOR)dz5T z7DDEx<`>|FMHod<;}&t8_O>kvcX4vXoE+)KeQx~htt~P4mv6PvHY=~&c!gmwtJi-X zOE3iDCT*w_ZtG~JBh^{AV$Hq)n+?~s3BlI#7q`fskHqA&XS=q>hZwC&a4u<b;J#Z7 z+Cib?cK;-MPMZG4<D{%+t@ZNdYehkU)US1(AGvP4x5{nDcW&qOlh>@eSU^a}?=TR@ zrZxmNgr(igX{YTxca|{CUKl3!1EiVx>r2~ttc=8<&6xPM*adR_-+0T^#q=`r{%-Tb zB&#q6H`;@i<(q0xs|6?HR$|iQFSw&Ko{+t2##vt*M=r+y8MY}_e3^&AR8uBZ5n5lF zSso+o_!~g`BqqMjBm94u@Lm#c=KZCet@BlV>R5uo#3!yB{S)Vl|JtycH-BySZXE5X zm+?y5g||38J-v{Ac5K#@JY=iuYZi4>_C4r$0zhv2b-3mwsqOhkpZkfd?)<xy&*KgH zb(+pzKT>)%jZPiM&Eb<?ial<Y)*|T-ie$Fbao%oFwozAoB`N#s{Br-tF-lw87k`vd zM_=5(<3CqWuqh%;ls<=6>6%NoP+P}YNnThxldK4{X;P9`hO$4odpgW@OG);Hga5Mb z=&w05x2)4K+{^<$(Y?7dCHdwjahxi<E))yXc1&D^vCQbXuKgbQ(2YwG5mvez%F9bF z75M!~WvI_3xB6NTh<I?^bE(9g;<G+IU8G*%?|~eO`^RjLy2U!a=iBq`?fLxZ)7YPU zG!E<NMoCHJ5>JcOjrW8@uXnCqoz#f6NFqB=zEchiDenz*U6>4YPB=vtzE<8d^3<#N z<F|wELnSUcjIm7nyEPn2O$|o?_4ZQ60AQ?t8E)xa=@<}iY<A+1*`X7M;%q}{VYIt} znTL%?V;sogLa@^e7ToVUi*<Bz^d%CX6Q56F7by+^toI|-knZ7k_{bo7#<6x3jSLF% zbD7rL=iulFFs7!cQz=|7<=01X#`Em(<IYm5jlP8D4?dfsF1ULZrxd_l-Ooo1^yh%n zvH6CEs#w(qLqqmA{ZY1dk-p0f^WSfuDtd&aoVK<;-E}M{vS)H&a&kbJNnUU>J{E}^ z6%0tpgM;Kja^o*W@~Du-4??f8H4TQ+uz>cl^*Ryi-ho^bW8>@Ix`TUJrey@CVdmZQ zx|YB13gO*<#>86Re#zKom9vKx8yhljCzH&a4#Bp!YutJ(R@}Z+%~ZACDT)R`&Bc-Z z(b1p=yhIoon-9Nz{!>hACqR%WrXtPd6XiKkERv6lsd={3C-t@pW=WmB>Gb%AX&b{C zQ!}%=x?{d&iZ?vnTW^c1beVO1eLr>;J$}4?V&3G|*}ClTI<t$pO|f}pt$jCKxY%lJ zcF?Vo2iHDc^HxuZ714pomc{9IO7DF0!y5-9)yYLqrxb(|B|am|=dJg-@{Du)Jj3j1 zs|e?V1A~8kFp^)sF{8lusr-QCK!&=|KIb;wYUTbKdcuo@1TOc5p24^QVO*WHS#4n8 zd$}+q23g(}Qta8Z-{kPS%fCM=UX02ViiAI$N}ikZ_W4M&&Mqq}Gs`RNI?s47Dgs|V z6+Er=#=9TgAb~A&N&*<C(BVY%ThzuqF`u+utrQL#z^Aa*FSgzB4nuNli{AkSGr3!w z0xlJtRhAw<<K^o5v9!3nI9z<hXr1YmJtY@KQI#*aUVCRsf{1P7<921G(A29}4`01{ z|1h*@d&RE(X;t*nJd4yl#k<_~^-Fi*ExiJxiXOV1`_<R?1wN+1^5GWK;@yDL&qthH z@?JLFK3UtJrijn>v`Q|__86{|J-k{Kvf(H@@K*O$ldQgAv?{-_W#Y*<iGA#b%MGj+ z98*fU!sPMESeoprNuqxPjxn*ja-wSEM(+hL3d63hjuV9czAJyZ=3)zYnLK<+EPvf6 zW*uY)w6lL>9i&#C<n#DaJPDtbM#AHB(z1+5#9pZ0Cn{Bn$CF4e?d0VU@#@$o!MnDe zOv4-H4&9mfw492MEjH~>B)Ua63tk2k1mNuO*=$4eQ(%yD!o5co0T*LVg{HoHR;0fN z^o~xzMg7p4njU0JJG0G+R&YGeJISi{ydz$ir=r-=juH2;L~iCzuDk6CKlga9x%=ni z`$e~9m_k_bcieFQk}IQX$@WN2?lzOz=ENqVnX0XZ=G8ZyveI9@6vOd}v-X>%C1gFE zBk$vjD-zd^|EG-<rs|cJ26w()cIyYsb%VuOcYm|w#RPF2Hy06{9><#BV;=z5V>i9u zep~P)J5&E{ZDYR&mw^aRjjFrWUK6#OSK|aDp_?!hkz%ngEV>`uA{Lv>MnC5V?t587 z90}bFqamUdb2>SP=675Y=wLA2Hc0UOMKK!m)vRMN+Wd8vH(IvCgn^KEM5;PE{5zMJ z7@Yl%8{@B@*^7ynQGGVa$EzxRmYh8HA;N&^y4i=sx4=}JXEmoM*B6Sa<5qP4^V?+U zgQ=@KH`CTDq)tEMc5<`UVzN|eyh#%(ncaA8-+}Dd-(@j=M9p6x)&Ex}&qGTq=|6Qs S_4=cqSJ+xPS(aN|`0c;amm`}1 literal 0 HcmV?d00001 diff --git a/_source/skins/office2003/mainui.css b/_source/skins/office2003/mainui.css new file mode 100644 index 0000000..d15a1f4 --- /dev/null +++ b/_source/skins/office2003/mainui.css @@ -0,0 +1,153 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_office2003 .cke_editor +{ + display: inline-table; + width: 100%; +} +.cke_skin_office2003 .cke_browser_webkit .cke_editor +{ + display: table; /* #6684 */ +} + +.cke_skin_office2003 span.cke_browser_webkit, +.cke_skin_office2003 span.cke_browser_gecko18 +{ + display: block; +} + +.cke_skin_office2003, +.cke_skin_office2003 .cke_wrapper +{ + display: block; +} + +.cke_skin_office2003 .cke_top, +.cke_skin_office2003 .cke_bottom, + .cke_shared .cke_skin_office2003 +{ + background-color: #f7f8fd; +} + +.cke_skin_office2003 .cke_top +{ + border-top: solid 1px #fafaf5; + border-left: solid 1px #fafaf5; + border-right: solid 1px #696969; + border-bottom: solid 2px #696969; +} + +.cke_skin_office2003 .cke_rtl .cke_top +{ + border-left: solid 1px #696969; + border-right: solid 1px #fafaf5; +} + +.cke_skin_office2003 .cke_bottom +{ + border-left: solid 1px #696969; + border-right: solid 1px #696969; + border-bottom: solid 1px #696969; +} + +.cke_skin_office2003 .cke_contents +{ + border: solid 1px #696969; + /* Prevent background content from penetrate through when switching between editing modes. (#4918) */ + background-color: white; +} + +.cke_skin_office2003 .cke_focus +{ + outline: auto 5px -webkit-focus-ring-color; +} + +.cke_skin_office2003 textarea.cke_source +{ + font-family: 'Courier New' , Monospace; + font-size: small; + white-space: pre; + background-color: #fff; +} + +.cke_skin_office2003 .cke_browser_iequirks textarea.cke_source +{ + /* For IE6+Quirks only */ + _white-space: normal; +} + +.cke_skin_office2003 .cke_resizer +{ + width: 12px; + height: 12px; + margin-top: 16px; + display: block; + float: right; + /* resizer.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -1088px; + background-repeat: no-repeat; + cursor: se-resize; +} + +/* Adobe AIR doesn't support *-resize cursor shape. */ +.cke_skin_office2003 .cke_browser_air .cke_resizer, +.cke_skin_office2003 .cke_browser_air .cke_rtl .cke_resizer +{ + cursor: move; +} + +.cke_skin_office2003 .cke_resizer_rtl +{ + cursor: sw-resize; + /* resizer_rtl.gif*/ + background-position: 0 -1115px; + float: left; +} + +.cke_skin_office2003 .cke_resizer_horizontal, +.cke_skin_office2003 .cke_rtl .cke_resizer_horizontal +{ + cursor: e-resize; +} + +.cke_skin_office2003 .cke_resizer_vertical, +.cke_skin_office2003 .cke_rtl .cke_resizer_vertical +{ + cursor: n-resize; +} + +.cke_skin_office2003 .cke_maximized .cke_resizer +{ + display: none; +} + +.cke_skin_office2003 .cke_browser_ie6 .cke_contents textarea, +.cke_skin_office2003 .cke_browser_ie7 .cke_contents textarea +{ + position: absolute; +} + +/* All voice labels are not displayed. */ +.cke_skin_office2003 .cke_voice_label +{ + display: none; +} + +.cke_skin_office2003 legend.cke_voice_label +{ + display: none; +} + +.cke_skin_office2003 .cke_browser_ie legend.cke_voice_label +{ + position: absolute; + display: block; + width: 0; + height: 0; + overflow: hidden; +} diff --git a/_source/skins/office2003/menu.css b/_source/skins/office2003/menu.css new file mode 100644 index 0000000..ed602d9 --- /dev/null +++ b/_source/skins/office2003/menu.css @@ -0,0 +1,229 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_office2003 .cke_contextmenu +{ + padding: 2px; +} + +.cke_skin_office2003 .cke_menuitem a +{ + display:block; +} + +.cke_skin_office2003 .cke_menuitem span +{ + cursor: default; +} + +.cke_skin_office2003 .cke_menuitem a:hover, +.cke_skin_office2003 .cke_menuitem a:focus, +.cke_skin_office2003 .cke_menuitem a:active +{ + background-color: #8db1ff; + display:block; +} + +.cke_hc .cke_menuitem a:hover, +.cke_hc .cke_menuitem a:focus, +.cke_hc .cke_menuitem a:active +{ + border: 2px solid; +} + +.cke_skin_office2003 .cke_menuitem .cke_icon +{ + background-image: url(icons.png); + background-position: 100px; + background-repeat:no-repeat; + background-color: transparent; + width: 16px; + height: 16px; + float: left; +} + +.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon +{ + background-image: url(icons_rtl.png); +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_browser_ie .cke_skin_office2003 .cke_menuitem .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie6 .cke_skin_office2003 .cke_menuitem .cke_icon, +.cke_browser_ie .cke_skin_office2003 .cke_menuitem.cke_noalphafix .cke_icon +{ + filter: ; +} + +.cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_browser_ie .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie6 .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon, +.cke_browser_ie .cke_skin_office2003 .cke_menuitem.cke_noalphafix .cke_disabled .cke_icon +{ + filter: ; +} + +.cke_skin_office2003 .cke_menuitem .cke_icon_wrapper +{ + background-color: #f7f8fd; + border: solid 4px #f7f8fd; + width: 16px; + height: 16px; + float: left; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + clear: both; +} + +.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon_wrapper +{ + float: right; +} + +.cke_skin_office2003 .cke_menuitem a:hover .cke_icon_wrapper, +.cke_skin_office2003 .cke_menuitem a:focus .cke_icon_wrapper, +.cke_skin_office2003 .cke_menuitem a:active .cke_icon_wrapper +{ + background-color: #9d9d9d; + border: solid 4px #9d9d9d; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.cke_skin_office2003 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper, +.cke_skin_office2003 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper, +.cke_skin_office2003 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper +{ + background-color: #f7f8fd; + border: solid 4px #f7f8fd; +} + +.cke_skin_office2003 .cke_menuitem .cke_label +{ + display:block; + padding-right: 3px; + padding-top: 5px; + padding-left: 4px; + height:19px; + margin-left: 24px; + background-color: #fff; +} +/* Set these after the document has been loaded and we know the dimensions*/ +.cke_skin_office2003 .cke_frameLoaded .cke_menuitem .cke_label +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_label +{ + padding-right: 0; + margin-left: 0; + padding-left: 3px; + margin-right: 28px; +} + +.cke_skin_office2003 .cke_menuitem a.cke_disabled .cke_label +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.30; /* Safari, Opera and Mozilla */ +} + +.cke_skin_office2003 .cke_menuitem a:hover .cke_label, +.cke_skin_office2003 .cke_menuitem a:focus .cke_label, +.cke_skin_office2003 .cke_menuitem a:active .cke_label +{ + background-color: #8db1ff; +} + +.cke_skin_office2003 .cke_menuitem a.cke_disabled:hover .cke_label, +.cke_skin_office2003 .cke_menuitem a.cke_disabled:focus .cke_label, +.cke_skin_office2003 .cke_menuitem a.cke_disabled:active .cke_label +{ + background-color: transparent; +} + +.cke_skin_office2003 .cke_menuseparator +{ + background-color: #f7f8fd; + height: 2px; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + + _font-size: 0; +} + +.cke_skin_office2003 .cke_menuarrow +{ + /* arrowright.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -1071px; + background-repeat: no-repeat; + height: 5px; + width: 3px; + float: right; + margin-right: 2px; + margin-top: 3px; +} + +.cke_rtl .cke_skin_office2003 .cke_menuarrow +{ + float: left; + margin-right: 0; + margin-left: 2px; + /* arrowleft.gif*/ + background-position: 0 -1050px; +} + +.cke_skin_office2003 .cke_menuarrow span +{ + display: none; +} + +.cke_hc .cke_skin_office2003 .cke_menuarrow +{ + width: auto; + margin-top: 0; +} + +.cke_hc .cke_skin_office2003 .cke_menuarrow span +{ + display: inline; +} + +/* #3766 In the context menu, long labels with second level menu get wrapped */ +.cke_browser_ie.cke_ltr .cke_skin_office2003 .cke_menuarrow +{ + position: absolute; + right: 2px; +} + +.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuarrow +{ + position: absolute; + left: 2px; +} +/* END #3766 */ diff --git a/_source/skins/office2003/panel.css b/_source/skins/office2003/panel.css new file mode 100644 index 0000000..3aef3e3 --- /dev/null +++ b/_source/skins/office2003/panel.css @@ -0,0 +1,212 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_office2003 .cke_panel +{ + border: 1px solid #8f8f73; + background-color: #fff; + + width: 120px; + height: 100px; + + overflow:hidden; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Ideally we would use "inherit here"... but you know... IE :( */ +.cke_skin_office2003 .cke_panel iframe +{ + width: 100%; + height: 100%; +} + +cke_skin_office2003 .cke_panel_frame .cke_label +{ + display: none; +} + +/* + * All the following styles are to be used inside the iframe that holds panel + * contents. We don't use the cke_skin_default there to avoid the reset to be + * active. + * This is not an issue as we'll never have two skins running inside the same + * panel iframe. + */ + +html.cke_skin_office2003_container +{ + overflow: auto; + overflow-x: hidden; +} + +body.cke_panel_frame +{ + overflow: auto; +} + +ul.cke_panel_list +{ + list-style-type: none; + margin: 3px; + padding: 0px; + white-space: nowrap; +} + +li.cke_panel_listItem +{ + margin: 0px; +} + +.cke_panel_listItem a +{ + padding: 2px; + display: block; + border: 1px solid #fff; + color: inherit !important; + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; +} + +/* IE6 */ +* html .cke_panel_listItem a +{ + width : 100%; + + /* IE is not able to inherit the color, so we must force it to black */ + color: #000; +} + +/* IE7 */ +*:first-child+html .cke_panel_listItem a +{ + /* IE is not able to inherit the color, so we must force it to black */ + color: #000; +} + +.cke_panel_listItem.cke_selected a +{ + border: 1px solid #ccc; + background-color: #e9f5ff; +} + +.cke_panel_listItem a:hover, +.cke_panel_listItem a:focus, +.cke_panel_listItem a:active +{ + border-color: #316ac5; + background-color: #dff1ff; +} + +.cke_hc .cke_panel_listItem.cke_selected a, +.cke_hc .cke_panel_listItem a:hover, +.cke_hc .cke_panel_listItem a:focus, +.cke_hc .cke_panel_listItem a:active +{ + border-width: 3px; + padding: 0px; +} + +.cke_panel_grouptitle +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; + font-weight: bold; + white-space: nowrap; + background-color: #dcdcdc; + color: #000; + margin:0px; + padding:3px; +} + +.cke_panel_listItem p, +.cke_panel_listItem h1, +.cke_panel_listItem h2, +.cke_panel_listItem h3, +.cke_panel_listItem h4, +.cke_panel_listItem h5, +.cke_panel_listItem h6, +.cke_panel_listItem pre +{ + margin-top: 3px; + margin-bottom: 3px; +} + +.cke_skin_office2003 .cke_button_textcolor_panel, +.cke_skin_office2003 .cke_button_bgcolor_panel +{ + width: 150px; + height: 135px; +} + +.cke_colorblock +{ + padding: 3px; + font-size: 11px; + font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif; +} + +.cke_colorblock, +.cke_colorblock a +{ + text-decoration: none; + color: #000; +} + +span.cke_colorbox +{ + width: 10px; + height: 10px; + border: #808080 1px solid; + float: left; +} + +.cke_rtl span.cke_colorbox +{ + float: right; +} + +a.cke_colorbox +{ + border: #fff 1px solid; + padding: 2px; + float: left; +} + +.cke_rtl a.cke_colorbox +{ + float: right; +} + +a:hover.cke_colorbox, +a:focus.cke_colorbox, +a:active.cke_colorbox +{ + border: #316ac5 1px solid; + background-color: #dff1ff; +} + +a.cke_colorauto, +a.cke_colormore +{ + border: #fff 1px solid; + padding: 2px; + display: block; + cursor: pointer; +} + +a:hover.cke_colorauto, +a:hover.cke_colormore, +a:focus.cke_colorauto, +a:focus.cke_colormore, +a:active.cke_colorauto, +a:active.cke_colormore +{ + border: #316ac5 1px solid; + background-color: #dff1ff; +} diff --git a/_source/skins/office2003/presets.css b/_source/skins/office2003/presets.css new file mode 100644 index 0000000..d83fe75 --- /dev/null +++ b/_source/skins/office2003/presets.css @@ -0,0 +1,49 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/* "Source" button label */ +.cke_skin_office2003 .cke_button_source .cke_label +{ + display: inline; +} + +/* "Styles" panel size */ +.cke_skin_office2003 .cke_styles_panel +{ + width: 150px; + height: 170px; +} + +/* "Format" panel size */ +.cke_skin_office2003 .cke_format_panel +{ + width: 150px; + height: 170px; +} + +/* "Font" panel size */ +.cke_skin_office2003 .cke_font_panel +{ + width: 150px; + height: 170px; +} + +/* "Font Size" panel size */ +.cke_skin_office2003 .cke_fontSize_panel +{ + height: 170px; +} + +/* "Font Size" combo width */ +.cke_skin_office2003 .cke_fontSize .cke_text +{ + width: 20px; +} + +/* "Font Size" combo width (IE Quirks) */ +.cke_skin_office2003 .cke_browser_iequirks .cke_fontSize .cke_text +{ + width: 32px; +} diff --git a/_source/skins/office2003/reset.css b/_source/skins/office2003/reset.css new file mode 100644 index 0000000..6fd2492 --- /dev/null +++ b/_source/skins/office2003/reset.css @@ -0,0 +1,84 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Reset and Default Values + */ +.cke_skin_office2003 *, +.cke_skin_office2003 a:hover, +.cke_skin_office2003 a:link, +.cke_skin_office2003 a:visited, +.cke_skin_office2003 a:active +{ + margin: 0; + padding: 0; + border: 0; + background: transparent; + text-decoration: none; + font: normal normal normal 100% Sans-Serif; + width: auto; + height: auto; + border-collapse: collapse; + text-align: left; + vertical-align: baseline; + white-space: nowrap; + cursor: auto; + color: #000; + + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; +} + +.cke_skin_office2003 .cke_rtl *, +.cke_skin_office2003 .cke_rtl a:hover, +.cke_skin_office2003 .cke_rtl a:link, +.cke_skin_office2003 .cke_rtl a:visited, +.cke_skin_office2003 .cke_rtl a:active, +.cke_rtl .cke_skin_office2003 *, +.cke_rtl .cke_skin_office2003 a:hover, +.cke_rtl .cke_skin_office2003 a:link, +.cke_rtl .cke_skin_office2003 a:visited, +.cke_rtl .cke_skin_office2003 a:active +{ + text-align: right; +} + +.cke_skin_office2003 iframe +{ + vertical-align: inherit; /** For IE */ +} + +.cke_skin_office2003 textarea +{ + white-space: pre; +} + +.cke_skin_office2003 .cke_browser_gecko textarea +{ + cursor: text; +} + +.cke_skin_office2003 .cke_browser_gecko textarea[disabled] +{ + cursor: default; +} + +.cke_skin_office2003 input[type="text"], +.cke_skin_office2003 input[type="password"] +{ + cursor: text; +} + +.cke_skin_office2003 input[type="text"][disabled], +.cke_skin_office2003 input[type="password"][disabled] +{ + cursor: default; +} + +.cke_skin_office2003 fieldset +{ + padding: 10px; + border: 2px groove #E0DFE3; +} diff --git a/_source/skins/office2003/richcombo.css b/_source/skins/office2003/richcombo.css new file mode 100644 index 0000000..9d63314 --- /dev/null +++ b/_source/skins/office2003/richcombo.css @@ -0,0 +1,309 @@ +/* Special Combo */ + +.cke_skin_office2003 .cke_rcombo +{ + display: inline-block; + margin-left: 2px; + margin-right: 2px; + margin-top: 2px; + vertical-align: top; +} + +.cke_skin_office2003 .cke_browser_ie .cke_rcombo +{ + #display: inline; +} + +.cke_skin_office2003 .cke_rcombopanel +{ + border: 1px solid #316ac5; + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + /*margin-left: 1px;*/ + /*_margin-left: 0;*/ +} + +.cke_skin_office2003 .cke_rcombo a +{ + display: inline-block; + float: left; + + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.cke_skin_office2003 .cke_rtl .cke_rcombo a +{ + float: right; +} + +.cke_skin_office2003 .cke_hc .cke_rcombo a +{ + filter: alpha(opacity=100); /* IE */ + opacity: 1.0; /* Safari, Opera and Mozilla */ +} + +.cke_skin_office2003 .cke_rcombo .cke_label +{ + display: inline-block; + float: left; + cursor: default; + + line-height: 24px; + height: 24px; + + vertical-align: top; + padding-left: 4px; + padding-right: 5px; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + + _background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + _background-position: 0 -962px; + _background-repeat: repeat-x; +} + +.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_label +{ + float: right; + padding-right: 4px; + padding-left: 5px; +} + +.cke_skin_office2003 .cke_hc .cke_rcombo .cke_label +{ + filter: alpha(opacity=100); + opacity: 1.0; +} + +.cke_skin_office2003 .cke_rcombo .cke_inline_label +{ + color: #fff; +} + +.cke_skin_office2003 .cke_rcombo .cke_text +{ + border: 1px solid #8f8f73; + background-color: #fff; + height: 14px; + width:60px; + padding-top: 4px; + padding-bottom: 4px; + padding-left: 5px; + padding-right: 5px; + text-overflow: ellipsis; + overflow: hidden; + display: inline-block; + vertical-align: top; + cursor: default; +} + +.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_text +{ + -moz-border-radius-topleft: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_text +{ + -moz-border-radius-topright: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +/* Fix for IE height */ +.cke_skin_office2003 .cke_browser_iequirks .cke_rcombo .cke_text +{ + height: 22px; +} + +.cke_skin_office2003 .cke_rcombo .cke_openbutton +{ + display: inline-block; + border-top: 1px solid #8f8f73; + border-bottom: 1px solid #8f8f73; +} + +.cke_skin_office2003 .cke_rcombo .cke_openbutton .cke_icon +{ + display: inline-block; + background-position: 5px -1002px; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: no-repeat; + width: 14px; + height: 22px; +} + +.cke_skin_office2003 .cke_browser_iequirks .cke_rcombo .cke_openbutton .cke_icon +{ + height: 20px; +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_openbutton .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_openbutton .cke_icon +{ + filter: ; +} +.cke_skin_office2003 .cke_hc .cke_rcombo .cke_openbutton .cke_icon +{ + background: none; + filter: ; +} + +.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_openbutton +{ + border-right: 1px solid #8f8f73; + -moz-border-radius-topright: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_openbutton +{ + border-left: 1px solid #8f8f73; + -moz-border-radius-topleft: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +.cke_skin_office2003 .cke_rcombo .cke_off a:hover, +.cke_skin_office2003 .cke_rcombo .cke_off a:focus, +.cke_skin_office2003 .cke_rcombo .cke_off a:active, +.cke_skin_office2003 .cke_rcombo .cke_on a +{ + filter: alpha(opacity=100); /* IE */ + opacity: 1; /* Safari, Opera and Mozilla */ +} + +.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_text, +.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_text, +.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_text, +.cke_skin_office2003 .cke_rcombo .cke_on .cke_text +{ + border-color: #316ac5; +} + +.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_openbutton, +.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_openbutton, +.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_openbutton, +.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton +{ + border-color: #316ac5; + background-color: #dff1ff; +} + +.cke_skin_office2003 .cke_rcombo .cke_on .cke_text +{ + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton +{ + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; +} + +.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_label +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.3; /* Safari, Opera and Mozilla */ +} + +.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_label +{ + filter: alpha(opacity=70); + opacity: 0.7; +} + +.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text, +.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=50); /* IE */ + opacity: 0.5; /* Safari, Opera and Mozilla */ +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50); +} +.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=50); +} + +.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_text, +.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=80); + opacity: 0.8; +} + + +.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text +{ + color: #fff; +} + +/* Firefox 2 & WebKit Section */ + +.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_label, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_text, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_openbutton, +.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_label, +.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_text, +.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_openbutton +{ + display: block; + float: left; +} + +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton, +.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label, +.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text, +.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton +{ + float: right; +} + +/*** IE ***/ + +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo, +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo a, +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label +{ + float: none; +} + +.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_font .cke_text, +.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_fontSize .cke_text +{ + direction: ltr; +} diff --git a/_source/skins/office2003/skin.js b/_source/skins/office2003/skin.js new file mode 100644 index 0000000..506427a --- /dev/null +++ b/_source/skins/office2003/skin.js @@ -0,0 +1,74 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.skins.add( 'office2003', (function() +{ + return { + editor : { css : [ 'editor.css' ] }, + dialog : { css : [ 'dialog.css' ] }, + separator : { canGroup: false }, + templates : { css : [ 'templates.css' ] }, + margins : [ 0, 14, 18, 14 ] + }; +})() ); + +(function() +{ + CKEDITOR.dialog ? dialogSetup() : CKEDITOR.on( 'dialogPluginReady', dialogSetup ); + + function dialogSetup() + { + CKEDITOR.dialog.on( 'resize', function( evt ) + { + var data = evt.data, + width = data.width, + height = data.height, + dialog = data.dialog, + contents = dialog.parts.contents; + + if ( data.skin != 'office2003' ) + return; + + contents.setStyles( + { + width : width + 'px', + height : height + 'px' + }); + + if ( !CKEDITOR.env.ie || CKEDITOR.env.ie9Compat ) + return; + + // Fix the size of the elements which have flexible lengths. + var fixSize = function() + { + var innerDialog = dialog.parts.dialog.getChild( [ 0, 0, 0 ] ), + body = innerDialog.getChild( 0 ), + bodyWidth = body.getSize( 'width' ); + height += body.getChild( 0 ).getSize( 'height' ) + 1; + + // tc + var el = innerDialog.getChild( 2 ); + el.setSize( 'width', bodyWidth ); + + // bc + el = innerDialog.getChild( 7 ); + el.setSize( 'width', bodyWidth - 28 ); + + // ml + el = innerDialog.getChild( 4 ); + el.setSize( 'height', height ); + + // mr + el = innerDialog.getChild( 5 ); + el.setSize( 'height', height ); + }; + setTimeout( fixSize, 100 ); + + // Ensure size is correct for RTL mode. (#4003) + if ( evt.editor.lang.dir == 'rtl' ) + setTimeout( fixSize, 1000 ); + }); + } +})(); diff --git a/_source/skins/office2003/templates.css b/_source/skins/office2003/templates.css new file mode 100644 index 0000000..d14406e --- /dev/null +++ b/_source/skins/office2003/templates.css @@ -0,0 +1,87 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Styles for the "templates" plugin. + */ + +.cke_skin_office2003 .cke_tpl_list +{ + border: #dcdcdc 2px solid; + background-color: #ffffff; + overflow: auto; + width: 100%; + height: 220px; +} + +.cke_skin_office2003 .cke_tpl_item +{ + margin: 5px; + padding: 7px; + border: #eeeeee 1px solid; + *width: 88%; +} + +.cke_skin_office2003 .cke_tpl_preview +{ + border-collapse: separate; + text-indent:0; + width: 100%; +} +.cke_skin_office2003 .cke_tpl_preview td +{ + padding: 2px; + vertical-align: middle; +} +.cke_skin_office2003 .cke_tpl_preview .cke_tpl_preview_img +{ + width: 100px; +} +.cke_skin_office2003 .cke_tpl_preview span +{ + white-space: normal; +} + +.cke_skin_office2003 .cke_tpl_title +{ + font-weight: bold; +} + +.cke_skin_office2003 .cke_tpl_list a:active .cke_tpl_item, +.cke_skin_office2003 .cke_tpl_list a:hover .cke_tpl_item, +.cke_skin_office2003 .cke_tpl_list a:focus .cke_tpl_item +{ + border: #ff9933 1px solid !important; + background-color: #fffacd !important; +} + +.cke_skin_office2003 .cke_tpl_list a:active *, +.cke_skin_office2003 .cke_tpl_list a:hover *, +.cke_skin_office2003 .cke_tpl_list a:focus * +{ + cursor: pointer; +} + +/* IE6 contextual selectors childs won't get :hover transition until, + the hover style of the link itself contains certain CSS declarations.*/ +.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:active, +.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:hover, +.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:focus +{ + background-position: 0 0; +} + +.cke_skin_office2003 .cke_tpl_list a:active .cke_tpl_item, +.cke_skin_office2003 .cke_tpl_list a:hover .cke_tpl_item, +.cke_skin_office2003 .cke_tpl_list a:focus .cke_tpl_item +{ + border-width: 3px; +} + +.cke_skin_office2003 .cke_tpl_empty, .cke_tpl_loading +{ + text-align: center; + padding: 5px; +} diff --git a/_source/skins/office2003/toolbar.css b/_source/skins/office2003/toolbar.css new file mode 100644 index 0000000..ff5ae7f --- /dev/null +++ b/_source/skins/office2003/toolbar.css @@ -0,0 +1,522 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@media print +{ + .cke_skin_office2003 .cke_toolbox + { + display: none; + } +} + +.cke_skin_office2003 .cke_browser_webkit .cke_toolbox, +.cke_skin_office2003 .cke_browser_webkit .cke_toolbox > span +{ + white-space: normal; +} + +.cke_skin_office2003 .cke_toolbox +{ + clear: both; + /* Define the padding-bottom otherwise the collapser button will not be clickable #4932*/ + padding-bottom: 1px; +} + +.cke_skin_office2003 a.cke_toolbox_collapser, +.cke_skin_office2003 a:hover.cke_toolbox_collapser +{ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 3px -1026px; /* +3px +4px */ + background-repeat: no-repeat; + width: 11px; + height: 11px; + float: right; + border: outset 1px; + margin: 11px 2px 2px; + cursor: pointer; +} + +.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser, +.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser +{ + float: left; +} + +.cke_skin_office2003 a.cke_toolbox_collapser span +{ + display: none; +} + +.cke_skin_office2003 .cke_hc a.cke_toolbox_collapser span +{ + font-size: 10px; + font-weight: bold; + font-family: Arial; + display: inline; +} + +.cke_skin_office2003 a.cke_toolbox_collapser_min, +.cke_skin_office2003 a:hover.cke_toolbox_collapser_min +{ + /* arrowleft.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 4px -1047px; /* +4px +3px */ + background-repeat: no-repeat; + margin: 2px; +} + +.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser_min, +.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser_min +{ + /* arrowright.gif*/ + background-position: 4px -1068px; /* +2px +3px */ +} + +.cke_skin_office2003 .cke_toolbar +{ + background-color: #d6dff7; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -962px; + background-repeat: repeat-x; + display: inline-block; + float: left; + !height: 28px; + !line-height: 28px; +} + +.cke_skin_office2003 .cke_rtl .cke_toolbar +{ + float: right; +} + +.cke_skin_office2003 .cke_toolgroup +{ + display: inline-block; + float: left; + height: 28px; +} + +.cke_skin_office2003 .cke_browser_ie .cke_toolgroup +{ + #float: none; + #display: inline; +} + +.cke_skin_office2003 .cke_rtl .cke_toolgroup +{ + float: right; +} + +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup +{ + #float: none; +} + +.cke_skin_office2003 .cke_separator +{ + display: inline-block; + float: left; + border-left: solid 1px #B2CBFF; + margin: 6px 2px; + height: 16px; +} + +.cke_skin_office2003 .cke_browser_ie .cke_separator +{ + #float: none; + #display: inline; +} + +.cke_skin_office2003 .cke_rtl .cke_separator +{ + float: right; +} + +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator +{ + #float: none; +} + +.cke_skin_office2003 .cke_break +{ + clear: left; +} + +.cke_skin_office2003 .cke_rtl .cke_break +{ + clear: right; +} + +.cke_skin_office2003 .cke_toolbar_start +{ + display: inline-block; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: no-repeat; + background-position: -27px -765px; + width: 10px; + height: 28px; + float: left; +} + +.cke_skin_office2003 .cke_browser_ie .cke_toolbar_start +{ + #float: none; + #display: inline; +} + +.cke_skin_office2003 .cke_rtl .cke_toolbar_start +{ + background-position: -27px -816px; + float: right; +} + +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start +{ + #float: none; +} + +.cke_skin_office2003 .cke_toolbar_end +{ + display: inline-block; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: no-repeat; + background-position: -29px -861px; + width: 4px; + height: 28px; + float: left; +} + +.cke_skin_office2003 .cke_browser_ie .cke_toolbar_end +{ + #float: none; + #display: inline; +} + +.cke_skin_office2003 .cke_rtl .cke_toolbar_end +{ + background-position: -29px -907px; + float: right; +} + +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end +{ + #float: none; +} + +/*#7181*/ +.cke_skin_office2003 .cke_browser_ie9 .cke_rtl .cke_separator, +.cke_skin_office2003 .cke_browser_ie9 .cke_rtl .cke_toolbar_start, +.cke_skin_office2003 .cke_browser_ie9 .cke_rtl .cke_toolbar_end +{ + vertical-align:middle; +} + +.cke_skin_office2003 .cke_button a, +.cke_skin_office2003 .cke_button a:hover, +.cke_skin_office2003 .cke_button a:focus, +.cke_skin_office2003 .cke_button a:active, +.cke_skin_office2003 .cke_button a.cke_off +{ + border: solid 1px transparent; + border-radius: 3px; + outline: none; + padding-top: 2px; + padding-left: 4px; + padding-right: 4px; + padding-bottom: 2px; + margin-top: 2px; + height: 18px; + vertical-align: top; + + _border: none; + _margin: 3px 1px 1px 1px; + cursor: default; + display: inline-block; +} + +.cke_skin_office2003 .cke_button a, +.cke_skin_office2003 .cke_button a.cke_off +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +.cke_skin_office2003 .cke_hc .cke_button a, +.cke_skin_office2003 .cke_hc .cke_button a.cke_off +{ + opacity: 1.0; + filter: alpha(opacity=100); + _border: 1px solid transparent; +} + +.cke_skin_office2003 .cke_button a.cke_on +{ + border: solid 1px #316ac5; + background-color: #c1d2ee; + filter: alpha(opacity=100); /* IE */ + opacity: 1; /* Safari, Opera and Mozilla */ + + _margin: 2px 0 0 0; +} + +.cke_skin_office2003 .cke_hc .cke_button a:hover, +.cke_skin_office2003 .cke_hc .cke_button a:focus, +.cke_skin_office2003 .cke_hc .cke_button a:active /* IE */ +{ + padding: 0 2px !important; + border-width: 3px; +} + +.cke_skin_office2003 .cke_button a.cke_disabled * +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.3; /* Safari, Opera and Mozilla */ +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_office2003 .cke_browser_ie .cke_button a.cke_disabled *, +.cke_skin_office2003 .cke_browser_ie a:hover.cke_button .cke_disabled * +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30); +} +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *, +.cke_skin_office2003 .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled * +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30); +} +.cke_skin_office2003 .cke_browser_ie6 .cke_button a.cke_disabled *, +.cke_skin_office2003 .cke_browser_ie6 a:hover.cke_button .cke_disabled *, +.cke_skin_office2003 .cke_browser_ie .cke_button.cke_noalphafix a.cke_disabled * +{ + filter: alpha(opacity=30); +} + +.cke_skin_office2003 .cke_hc .cke_button a.cke_disabled *, +.cke_skin_office2003 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled * +{ + filter: alpha(opacity=60); + opacity: 0.6; +} + +.cke_skin_office2003 .cke_button a:hover, +.cke_skin_office2003 .cke_button a:focus, +.cke_skin_office2003 .cke_button a:active /* IE */ +{ + border: solid 1px #316ac5; + background-color: #dff1ff; + filter: alpha(opacity=100); /* IE */ + opacity: 1; /* Safari, Opera and Mozilla */ + vertical-align: top; + + _margin: 2px 0 0 0; + padding: 2px 4px; +} + +.cke_skin_office2003 .cke_button .cke_icon +{ + background-image: url(icons.png); + background-position: 100px; + background-repeat:no-repeat; + margin-top:1px; + width: 16px; + height: 16px; + display: inline-block; + cursor: default; +} + +.cke_skin_office2003 .cke_rtl .cke_button .cke_icon +{ + background-image: url(icons_rtl.png); +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_office2003 .cke_browser_ie .cke_button .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_office2003 .cke_browser_ie6 .cke_button .cke_icon, +.cke_skin_office2003 .cke_browser_ie6 .cke_rtl .cke_button .cke_icon, +.cke_skin_office2003 .cke_browser_ie .cke_button.cke_noalphafix .cke_icon, +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button.cke_noalphafix .cke_icon +{ + filter: ; +} + +.cke_skin_office2003 .cke_button .cke_label +{ + display: none; + padding-left: 3px; + cursor: default; + vertical-align:middle; + _background-image: url(images/sprites_ie6.png); + _background-position: 0 -970px; + _background-repeat: repeat-x; +} + +.cke_skin_office2003 .cke_button a:hover .cke_label +{ + _background-color: #dff1ff; + _background-image: none; +} + +.cke_skin_office2003 .cke_button a.cke_on .cke_label +{ + _background-color: #c1d2ee; + _background-image: none; +} + +.cke_skin_office2003 .cke_hc .cke_button .cke_label +{ + padding: 0; + display: inline-block; +} + +.cke_skin_office2003 .cke_hc .cke_button .cke_icon +{ + display: none; +} + +.cke_skin_office2003 .cke_accessibility +{ + position: absolute; + display: block; + width: 0; + height: 0; + overflow: hidden; +} + +.cke_skin_office2003 .cke_button .cke_buttonarrow +{ + display: inline-block; + height: 18px; + width: 8px; + background-position: 2px -1004px; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: no-repeat; + cursor: default; +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_office2003 .cke_browser_ie .cke_button .cke_buttonarrow +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_office2003 .cke_browser_ie6 .cke_button .cke_buttonarrow +{ + filter: ; +} + +.cke_skin_office2003 .cke_rtl .cke_button .cke_buttonarrow +{ + background-position: 0 -1004px; +} + +/*** Firefox 2 ***/ + +.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar, +.cke_skin_office2003 .cke_browser_gecko18 .cke_button a, +.cke_skin_office2003 .cke_browser_gecko18 .cke_button a.cke_off, +.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_icon, +.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_buttonarrow, +.cke_skin_office2003 .cke_browser_gecko18 .cke_separator, +.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_start, +.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_end +{ + display: block; + float: left; +} + +.cke_skin_office2003 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon +{ + display: none; +} + +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_separator, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_end +{ + float: right; +} + +.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label, +.cke_skin_office2003 .cke_browser_gecko18 .cke_break +{ + float: left; +} + +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl span.cke_inline_label +{ + float: right; +} + +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label, +.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_break +{ + float: right; +} + +.cke_skin_office2003 .cke_browser_gecko18 .cke_separator +{ + margin-top: 4px; +} + +.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label +{ + padding-top: 3px; +} + +/*** IE6 ***/ + +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup, +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator, +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start, +.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end +{ + float: none; +} + +/*** IE8 ***/ + +.cke_skin_office2003 .cke_browser_ie8 .cke_toolbar, +.cke_skin_office2003 .cke_browser_ie8 .cke_toolgroup +{ + vertical-align: top; +} + +.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar, +.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup +{ + /* revert previous */ + vertical-align: baseline; +} + +/* Separator + Combo penetrate toolbar in IE quirks. (#4461) */ +.cke_skin_office2003 .cke_browser_iequirks .cke_separator +{ + vertical-align: text-bottom; +} +/* Fix cursor shape consistency on toolbar combos (#4031) */ +.cke_skin_office2003 .cke_browser_ie .cke_rcombo, +.cke_skin_office2003 .cke_browser_ie .cke_rcombo * +{ + cursor: default; +} diff --git a/_source/skins/v2/dialog.css b/_source/skins/v2/dialog.css new file mode 100644 index 0000000..915959a --- /dev/null +++ b/_source/skins/v2/dialog.css @@ -0,0 +1,861 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/* Restore the dialog visibility */ +body .cke_dialog +{ + visibility: visible; +} + +/* Force Gecko to consider table as positioned */ +.cke_skin_v2 table.cke_dialog.cke_browser_gecko +{ + display:block; +} + +.cke_skin_v2 .cke_dialog_body +{ + margin-left: 16px; + margin-right: 16px; + margin-top: 2px; + margin-bottom: 20px; + z-index: 1; + + /* 'cke_dialog' element has been fixed positioned in all but IE6, while we + need it to be positioned to hold e.g. close button. */ + position: relative; + _position: static; + +} + +.cke_skin_v2 .cke_dialog_tl, +.cke_skin_v2 .cke_dialog_tr, +.cke_skin_v2 .cke_dialog_tc, +.cke_skin_v2 .cke_dialog_bl, +.cke_skin_v2 .cke_dialog_br, +.cke_skin_v2 .cke_dialog_bc +{ + background-image: url(images/sprites.png); + background-repeat: no-repeat; + position: absolute; + + /* IE6 does not support full color transparent PNG. */ + _background-image: url(images/sprites_ie6.png); + /* Dialog corner parts require a negative z-index to avoid covering dialog body. (#4954) */ + _z-index: -1; +} + +.cke_skin_v2 .cke_dialog_tl +{ + background-position: -16px -16px; + height: 16px; + width: 16px; + top: 0; + left: 0; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_tl +{ + background-position: -16px -397px; +} + +.cke_skin_v2 .cke_dialog_tr +{ + background-position: -16px -76px; + height: 16px; + width: 16px; + top: 0; + right: 0; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_tr +{ + background-position: -16px -457px; +} + +.cke_skin_v2 .cke_dialog_tc +{ + background-position: 0 -136px; + background-repeat: repeat-x; + height: 16px; + top: 0; + left: 16px; + right: 16px; +} + +.cke_skin_v2 .cke_dialog_bl +{ + background-position: -16px -196px; + height: 51px; + width: 30px; + bottom: 0; + left: 0; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_bl +{ + background-position: -16px -517px; +} + +.cke_skin_v2 .cke_dialog_br +{ + background-position: -16px -263px; + height: 51px; + width: 30px; + bottom: 0; + right: 0; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_br +{ + background-position: -16px -584px; +} + +.cke_skin_v2 .cke_dialog_bc +{ + background-position: 0 -330px; + background-repeat: repeat-x; + height: 51px; + bottom: 0; + left: 30px; + right: 30px; +} + +.cke_skin_v2 .cke_dialog_ml, +.cke_skin_v2 .cke_dialog_mr +{ + background-image: url(images/dialog_sides.png); + background-repeat: repeat-y; + position: absolute; + width: 16px; + top: 16px; + bottom: 51px; + + /* IE6 does not support full color transparent PNG. */ + _background-image: url(images/dialog_sides.gif); + + /* IE quirks gets confused when we have both top and bottom. */ + _top: auto; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_ml, +.cke_skin_v2 .cke_rtl .cke_dialog_mr +{ + background-image: url(images/dialog_sides_rtl.png); + + /* IE6 does not support full color transparent PNG. */ + _background-image: url(images/dialog_sides.gif); +} + +.cke_skin_v2 .cke_dialog_ml +{ + background-position: 0 0; + left: 0; +} + +.cke_skin_v2 .cke_dialog_mr +{ + background-position: -16px 0; + right: 0; +} + +.cke_skin_v2 .cke_browser_iequirks .cke_dialog_ml, +.cke_skin_v2 .cke_browser_iequirks .cke_dialog_mr +{ + margin-top: 3px; +} + +.cke_skin_v2 .cke_dialog_title +{ + font-weight: bold; + font-size: 14pt; + color: #737357; + background-color: #e3e3c7; + padding: 3px 10px 26px 10px; + cursor: move; + position: relative; +} + +.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_title +{ + position: static; +} + +.cke_skin_v2 .cke_dialog_contents +{ + background-color: #f1f1e3; + border: #d5d59d 1px solid; + overflow: auto; + padding: 5px 10px; +} + +.cke_skin_v2 .cke_dialog_footer +{ + background-color: #e3e3c7; + text-align: right; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_footer +{ + text-align: left; +} + +.cke_skin_v2 .cke_dialog_footer .cke_resizer { + margin-top: 21px; +} + +/* tabs */ + +.cke_skin_v2 .cke_dialog_tabs +{ + height: 23px; + background-color: #e3e3c7; + display: inline-block; + margin-left:10px; + margin-right:10px; + margin-top:-23px; + position: absolute; + z-index: 2; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_tabs +{ + right: 10px; +} + +.cke_skin_v2 a.cke_dialog_tab, +.cke_skin_v2 a:link.cke_dialog_tab, +.cke_skin_v2 a:active.cke_dialog_tab, +.cke_skin_v2 a:hover.cke_dialog_tab, +.cke_skin_v2 a:visited.cke_dialog_tab +{ + color: #737357; + border-left: 1px solid #d5d59d; + border-right: 1px solid #d5d59d; + border-top: 1px solid #d5d59d; + height: 14px; + padding: 4px 5px; + display: inline-block; + cursor: pointer; +} + +/* Gecko 1.8 layout workaround. */ +.cke_skin_v2 .cke_browser_gecko18 a.cke_dialog_tab, +.cke_skin_v2 .cke_browser_gecko18 a:link.cke_dialog_tab, +.cke_skin_v2 .cke_browser_gecko18 a:active.cke_dialog_tab, +.cke_skin_v2 .cke_browser_gecko18 a:hover.cke_dialog_tab, +.cke_skin_v2 .cke_browser_gecko18 a:visited.cke_dialog_tab +{ + display: inline; + position: relative; + top: 6px; +} + +.cke_skin_v2 a:hover.cke_dialog_tab +{ + background-color: #f1f1e3; +} + +.cke_skin_v2 .cke_hc a:hover.cke_dialog_tab +{ + padding: 2px 3px !important; + border-width: 3px; +} + +.cke_skin_v2 a.cke_dialog_tab_selected, +.cke_skin_v2 a:link.cke_dialog_tab_selected, +.cke_skin_v2 a:active.cke_dialog_tab_selected, +.cke_skin_v2 a:hover.cke_dialog_tab_selected, +.cke_skin_v2 a:visited.cke_dialog_tab_selected +{ + border-bottom: 1px solid #f1f1e3; + background-color: #f1f1e3; + font-weight: bold; + cursor: default; +} + +.cke_skin_v2 .cke_hc a.cke_dialog_tab_selected, +.cke_skin_v2 .cke_hc a:link.cke_dialog_tab_selected, +.cke_skin_v2 .cke_hc a:active.cke_dialog_tab_selected, +.cke_skin_v2 .cke_hc a:hover.cke_dialog_tab_selected, +.cke_skin_v2 .cke_hc a:visited.cke_dialog_tab_selected +{ + padding: 2px 3px !important; + border-width: 3px; +} + +.cke_skin_v2 .cke_hc .cke_dialog_tabs a, +.cke_skin_v2 .cke_hc .cke_dialog_footer a +{ + opacity: 1.0; + filter: alpha(opacity=100); + border: 1px solid white; +} + +/* single_page */ + +.cke_skin_v2 .cke_single_page .cke_dialog_tabs +{ + display: none; +} + +.cke_skin_v2 .cke_single_page .cke_dialog_title +{ + padding-bottom: 3px; +} + +.cke_skin_v2 .cke_dialog_ui_vbox table, +.cke_skin_v2 .cke_dialog_ui_hbox table +{ + margin: auto; +} + +.cke_skin_v2 .cke_dialog_ui_vbox_child +{ + padding: 5px 0px; +} + +.cke_skin_v2 input.cke_dialog_ui_input_text, +.cke_skin_v2 input.cke_dialog_ui_input_password +{ + background-color: white; + border: none; + padding: 0px; + width: 100%; + height: 14px; +} + +.cke_skin_v2 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text, +.cke_skin_v2 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password +{ + border-width: 0px; +} + +.cke_skin_v2 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text, +.cke_skin_v2 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password +{ + border-width: 1px; +} + +/* Opera/IE doesn't leave enough padding in text input for cursor to blink in RTL. (#6087) */ +.cke_skin_v2 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text, +.cke_skin_v2 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text, +.cke_skin_v2 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password, +.cke_skin_v2 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password +{ + padding-right: 2px +} + +/* Compensate the padding added above on container. */ +.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text, +.cke_skin_v2 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text, +.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password, +.cke_skin_v2 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password +{ + padding-left: 2px; +} + +.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child, +.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child, +.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first, +.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last +{ + padding-right: 2px !important; +} + +.cke_skin_v2 div.cke_dialog_ui_input_text, +.cke_skin_v2 div.cke_dialog_ui_input_password +{ + background-color: white; + border: 1px solid #a0a0a0; + padding: 1px 0px; + /* IE6/Quirks - make sure the content does not overflow (#7321) */ + _width: 99.9%; +} + +.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text { + padding-right: 1px; +} + +.cke_skin_v2 textarea.cke_dialog_ui_input_textarea +{ + background-color: white; + border: none; + padding: 0px; + width: 100%; + /* + * IE6 BUG: Scrollbars in textareas can overflow even if the outer DIV is set to overflow:hidden. + * So leave 1% width for the scrollbar. In most situations the 1% isn't noticeable by users. + */ + _width: 99%; + overflow: auto; + resize: none; +} + +.cke_skin_v2 div.cke_dialog_ui_input_textarea +{ + background-color: white; + border: 1px solid #a0a0a0; + padding: 1px 0px; +} + +/* RTL + IE6: Input overflows dialog element. (#7321) */ +.cke_skin_v2 .cke_rtl .cke_dialog_ui_labeled_content +{ + _width: 95%; +} + +.cke_skin_v2 div.cke_disabled .cke_dialog_ui_labeled_content * +{ + background-color : #a0a0a0; + cursor : default; +} + +.cke_skin_v2 .cke_dialog_ui_hbox +{ + width: 100%; +} + +.cke_skin_v2 .cke_dialog_ui_hbox_first, +.cke_skin_v2 .cke_dialog_ui_hbox_child, +.cke_skin_v2 .cke_dialog_ui_hbox_last +{ + vertical-align: top; +} + +.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_first, +.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_child +{ + padding-right: 10px; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_first, +.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_child +{ + padding-left: 10px; +} + +/* button */ + +.cke_skin_v2 a.cke_dialog_ui_button +{ + border-collapse: separate; + cursor: default; +} + +.cke_skin_v2 a.cke_dialog_ui_button_ok span, +.cke_skin_v2 a.cke_dialog_ui_button_cancel span +{ + width:60px; +} + +.cke_skin_v2 span.cke_dialog_ui_button +{ + border: #737357 1px solid; + padding: 2px 10px; + text-align: center; + color: #3b3b1f; + background-color: #c7c78f; + display: inline-block; + cursor: default; +} + +/* Gecko 1.8 does not support display: inline-block */ +.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button +{ + display: block; +} + +.cke_skin_v2 a.cke_dialog_ui_button span.cke_disabled +{ + border: #898980 1px solid; + color: #5e5e55; + background-color: #c5c5b3; +} + +.cke_skin_v2 a:focus span.cke_dialog_ui_button, +.cke_skin_v2 a:active span.cke_dialog_ui_button +{ + background-color: #e3e3c7; +} + +.cke_skin_v2 .cke_hc a:focus span.cke_dialog_ui_button, +.cke_skin_v2 .cke_hc a:active span.cke_dialog_ui_button +{ + border-width: 2px; +} + +.cke_skin_v2 .cke_dialog_footer_buttons +{ + display: inline-table; + margin-right: 12px; + margin-left: 12px; + width: auto; + position: relative; +} + +/* Gecko 1.8 does not support for display: inline-table */ +.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons +{ + display: inline; +} + +.cke_skin_v2 .cke_dialog_footer_buttons span.cke_dialog_ui_button +{ + margin: 7px 0; +} + +.cke_skin_v2 .cke_browser_ie7 .cke_dialog_footer_buttons +{ + position: static; +} + +.cke_skin_v2 strong +{ + font-weight: bold; +} + +/* close_button */ + +.cke_skin_v2 a.cke_dialog_close_button, +.cke_skin_v2 a:hover.cke_dialog_close_button, +.cke_skin_v2 .cke_browser_ie6 a.cke_dialog_close_button, +.cke_skin_v2 .cke_browser_ie6 a:hover.cke_dialog_close_button +{ + background-image: url(images/sprites.png); + background-repeat: no-repeat; + background-position: -16px -651px; + position: absolute; + cursor: pointer; + text-align: center; + height: 20px; + width: 20px; + top: 5px; + + /* IE6 does not support full color transparent PNG. */ + _background-image: url(images/sprites_ie6.png); +} + +.cke_skin_v2 a.cke_dialog_close_button span +{ + display: none; +} + +.cke_skin_v2 a:hover.cke_dialog_close_button +{ + background-position: -16px -687px; +} + +.cke_skin_v2 .cke_ltr a.cke_dialog_close_button, +.cke_skin_v2 .cke_ltr a:hover.cke_dialog_close_button +{ + right: 10px; + _right: 22px; +} + +.cke_skin_v2 .cke_rtl a.cke_dialog_close_button, +.cke_skin_v2 .cke_rtl a:hover.cke_dialog_close_button +{ + left: 10px; + _left: 16px; + _top: 7px; +} + +.cke_skin_v2 .cke_browser_ie6.cke_rtl a.cke_dialog_close_button, +.cke_skin_v2 .cke_browser_ie6.cke_rtl a:hover.cke_dialog_close_button +{ + position: relative; + float: left; + margin-top: -55px; + margin-left: -7px; +} + +.cke_skin_v2 .cke_browser_iequirks.cke_rtl.cke_single_page a.cke_dialog_close_button, +.cke_skin_v2 .cke_browser_iequirks.cke_rtl.cke_single_page a:hover.cke_dialog_close_button +{ + margin-top: -32px; +} + +.cke_skin_v2 .cke_browser_iequirks.cke_ltr a.cke_dialog_close_button, +.cke_skin_v2 .cke_browser_iequirks.cke_ltr a:hover.cke_dialog_close_button +{ + margin-top: 0; +} + +.cke_skin_v2 .cke_dialog_ui_input_select +{ + border: 1px solid #a0a0a0; + background-color: white; +} + +.cke_skin_v2 .cke_dialog_ui_input_file +{ + width: 100%; + height: 25px; +} + +/* + * Some utility CSS classes for dialog authors. + */ +.cke_skin_v2 .cke_dialog .cke_dark_background +{ + background-color: #eaead1; +} + +.cke_skin_v2 .cke_dialog .cke_hand +{ + cursor: pointer; +} + +.cke_skin_v2 .cke_dialog .cke_centered +{ + text-align: center; +} + +.cke_skin_v2 .cke_dialog a.cke_btn_reset +{ + float: right; + background-position: 0 -32px; + background-image: url(images/mini.gif); + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: 1px none; + font-size: 1px; +} + +.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_reset +{ + float: left; +} + +.cke_skin_v2 .cke_dialog a.cke_btn_locked, +.cke_skin_v2 .cke_dialog a.cke_btn_unlocked +{ + float: left; + background-position: 0 0; + background-image: url(images/mini.gif); + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: none 1px; + font-size: 1px; +} +.cke_skin_v2 .cke_dialog a.cke_btn_locked .cke_icon +{ + display:none; +} + + +.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_locked, +.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_unlocked +{ + float: right; +} + +.cke_skin_v2 .cke_dialog a.cke_btn_unlocked +{ + background-position: 0 -16px; + background-image: url(images/mini.gif); +} + +.cke_skin_v2 .cke_dialog .cke_btn_over +{ + border: outset 1px; + cursor: pointer; +} + +.cke_skin_v2 .cke_dialog .ImagePreviewBox +{ + border : 2px ridge black; + overflow : scroll; + height : 210px; + width : 230px; + padding : 2px; + background-color : white; +} + +.cke_skin_v2 .cke_dialog .ImagePreviewBox table td { + white-space: normal; +} + +/* Fix iframedialog's height doesn't stretch to 100% #4863.*/ +.cke_skin_v2 .cke_browser_iequirks .cke_dialog_page_contents +{ + _position: absolute; +} + +.cke_skin_v2 .cke_dialog .ImagePreviewLoader +{ + position: absolute; + white-space : normal; + overflow : hidden; + height : 160px; + width : 230px; + margin : 2px; + padding : 2px; + opacity : 0.9; + filter : alpha(opacity=90); + + background-color : #e4e4e4; +} + +.cke_skin_v2 .cke_dialog .FlashPreviewBox +{ + white-space : normal; + border : 2px ridge black; + overflow : auto; + height : 160px; + width : 390px; + padding : 2px; + background-color : white; +} + +.cke_skin_v2 .cke_dialog .cke_pastetext +{ + width: 346px; + height: 170px; +} + +.cke_skin_v2 .cke_dialog .cke_pastetext textarea +{ + width: 340px; + height: 170px; + resize: none; +} + +.cke_skin_v2 .cke_dialog iframe.cke_pasteframe +{ + width: 346px; + height: 130px; + background-color: white; + border: 1px solid black; +} + +.cke_skin_v2 .cke_dialog .cke_dark_background +{ + text-align : center; + background-color: #eaead1; + font-size : 14px; +} + +.cke_skin_v2 .cke_dialog .cke_light_background +{ + text-align : center; + background-color: #ffffbe; +} + +.cke_skin_v2 .cke_dialog .cke_hand +{ + cursor: pointer; +} + +.cke_skin_v2 .cke_disabled +{ + color: #a0a0a0; +} + +/* High Contrast Mode */ +.cke_skin_v2 .cke_hc .cke_dialog_title, +.cke_skin_v2 .cke_hc .cke_dialog_tabs, +.cke_skin_v2 .cke_hc .cke_dialog_contents, +.cke_skin_v2 .cke_hc .cke_dialog_footer +{ + border-left: 1px solid; + border-right: 1px solid; +} + +.cke_skin_v2 .cke_hc .cke_dialog_title +{ + border-top: 1px solid; +} + +.cke_skin_v2 .cke_hc .cke_dialog_footer +{ + border-bottom: 1px solid; +} + +.cke_skin_v2 .cke_hc .cke_dialog_close_button span +{ + display: inline; + cursor: pointer; + font-weight: bold; + position: relative; + top: 3px; +} + +.cke_skin_v2 .cke_dialog_body .cke_label +{ + display: none; +} + +.cke_skin_v2 .cke_dialog_body label.cke_required +{ + font-weight: bold; +} + +.cke_skin_v2 .cke_hc .cke_dialog_body .cke_label +{ + display: inline; + cursor: inherit; +} + +.cke_skin_v2 .cke_hc a.cke_btn_locked, +.cke_skin_v2 .cke_hc a.cke_btn_unlocked, +.cke_skin_v2 .cke_hc a.cke_btn_reset +{ + border-style: solid; + float:left; + width:auto; + height:auto; + padding: 0 2px; +} +.cke_skin_v2 .cke_hc a.cke_btn_locked .cke_icon +{ + display:inline; +} + +.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_locked, +.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_unlocked, +.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_reset +{ + float:right; +} + +.cke_skin_v2 a.cke_smile img +{ + /* IE6 does not support transparent borders */ + border: 2px solid #eaead1; +} + +.cke_skin_v2 a.cke_smile:focus img, +.cke_skin_v2 a.cke_smile:active img, +.cke_skin_v2 a.cke_smile:hover img +{ + border-color: #C7C78F; +} + + +/** + * Styles specific to "cellProperties" dialog. + */ + +.cke_skin_v2 .cke_dialog_contents a.colorChooser +{ + display:block; + margin-top:12px; + margin-left: 10px; + width: 40px; +} + +.cke_skin_v2 .cke_dialog_contents a.colorChooser .cke_dialog_ui_button +{ + width:100%; +} + +.cke_skin_v2 .cke_rtl .cke_dialog_contents a.colorChooser +{ + margin-right: 10px; +} diff --git a/_source/skins/v2/editor.css b/_source/skins/v2/editor.css new file mode 100644 index 0000000..3988d64 --- /dev/null +++ b/_source/skins/v2/editor.css @@ -0,0 +1,25 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@import url("reset.css"); +@import url("mainui.css"); +@import url("panel.css"); +@import url("toolbar.css"); +@import url("menu.css"); +@import url("richcombo.css"); +@import url("elementspath.css"); +@import url("icons.css"); +@import url("presets.css"); + +/* Restore the container visibility */ +html .cke_skin_v2 +{ + visibility: inherit; +} + +html.cke_skin_v2_container +{ + visibility: visible; +} diff --git a/_source/skins/v2/elementspath.css b/_source/skins/v2/elementspath.css new file mode 100644 index 0000000..3c3cd8e --- /dev/null +++ b/_source/skins/v2/elementspath.css @@ -0,0 +1,74 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@media print +{ + .cke_path + { + display: none; + } +} + +.cke_skin_v2 .cke_path +{ + padding: 3px 3px 0 3px; + display: inline-block; + float: left; +} + +.cke_skin_v2 .cke_rtl .cke_path +{ + float: right; +} + +.cke_skin_v2 .cke_path a, +.cke_skin_v2 .cke_path .cke_empty +{ + display: inline-block; + float: left; + border: solid 1px #efefde; + background-color: #efefde; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 4px; + padding-right: 4px; + margin-bottom : 3px; + cursor: default; +} + +.cke_skin_v2 .cke_path .cke_empty +{ + visibility: hidden; +} + +.cke_skin_v2 .cke_rtl .cke_path a, +.cke_skin_v2 .cke_rtl .cke_path cke_empty +{ + float: right; +} + +.cke_skin_v2 .cke_path a:hover, +.cke_skin_v2 .cke_path a:focus, +.cke_skin_v2 .cke_path a:active /* IE */ +{ + border: solid 1px #316ac5; + background-color: #dff1ff; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 4px; + padding-right: 4px; + outline: none; +} + +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path a, +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path .cke_empty +{ + float: none; +} + +.cke_skin_v2 .cke_path .cke_label +{ + display: none; +} diff --git a/_source/skins/v2/icons.css b/_source/skins/v2/icons.css new file mode 100644 index 0000000..c627b19 --- /dev/null +++ b/_source/skins/v2/icons.css @@ -0,0 +1,363 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_v2 .cke_button_source .cke_icon +{ + background-position: 0 0; +} + +.cke_skin_v2 .cke_button_docProps .cke_icon +{ + background-position: 0 -16px; +} + +.cke_skin_v2 .cke_button_newpage .cke_icon +{ + background-position: 0 -48px; +} + +.cke_skin_v2 .cke_button_preview .cke_icon +{ + background-position: 0 -64px; +} + +.cke_skin_v2 .cke_button_cut .cke_icon +{ + background-position: 0 -96px; +} + +.cke_skin_v2 .cke_button_copy .cke_icon +{ + background-position: 0 -112px; +} + +.cke_skin_v2 .cke_button_paste .cke_icon +{ + background-position: 0 -128px; +} + +.cke_skin_v2 .cke_button_pastetext .cke_icon +{ + background-position: 0 -144px; +} + +.cke_skin_v2 .cke_button_find .cke_icon +{ + background-position: 0 -240px; +} + +.cke_skin_v2 .cke_button_replace .cke_icon +{ + background-position: 0 -256px; +} + +.cke_skin_v2 .cke_button_selectAll .cke_icon +{ + background-position: 0 -272px; +} + +.cke_skin_v2 .cke_button_removeFormat .cke_icon +{ + background-position: 0 -288px; +} + +.cke_skin_v2 .cke_button_bold .cke_icon +{ + background-position: 0 -304px; +} + +.cke_skin_v2 .cke_button_italic .cke_icon +{ + background-position: 0 -320px; +} + +.cke_skin_v2 .cke_button_underline .cke_icon +{ + background-position: 0 -336px; +} + +.cke_skin_v2 .cke_button_strike .cke_icon +{ + background-position: 0 -352px; +} + +.cke_skin_v2 .cke_button_subscript .cke_icon +{ + background-position: 0 -368px; +} + +.cke_skin_v2 .cke_button_superscript .cke_icon +{ + background-position: 0 -384px; +} + +.cke_skin_v2 .cke_button_table .cke_icon +{ + background-position: 0 -608px; +} + +.cke_skin_v2 .cke_button_horizontalrule .cke_icon +{ + background-position: 0 -624px; +} + +.cke_skin_v2 .cke_button_smiley .cke_icon +{ + background-position: 0 -640px; +} + +.cke_skin_v2 .cke_button_link .cke_icon +{ + background-position: 0 -528px; +} + +.cke_skin_v2 .cke_button_unlink .cke_icon +{ + background-position: 0 -544px; +} + +.cke_skin_v2 .cke_button_anchor .cke_icon +{ + background-position: 0 -560px; +} + +.cke_skin_v2 .cke_button_image .cke_icon +{ + background-position: 0 -576px; +} + +.cke_skin_v2 .cke_button_flash .cke_icon +{ + background-position: 0 -592px; +} + +.cke_skin_v2 .cke_button_specialchar .cke_icon +{ + background-position: 0 -656px; +} + +.cke_skin_v2 .cke_button_pagebreak .cke_icon +{ + background-position: 0 -672px; +} + +.cke_skin_v2 .cke_button_print .cke_icon +{ + background-position: 0 -176px; +} + +.cke_skin_v2 .cke_button_checkspell .cke_icon, +.cke_skin_v2 .cke_button_scayt .cke_icon +{ + background-position: 0 -192px; +} + +.cke_skin_v2 .cke_button_pagebreak .cke_icon +{ + background-position: 0 -672px; +} + +.cke_skin_v2 .cke_button_textcolor .cke_icon +{ + background-position: 0 -704px; +} + +.cke_skin_v2 .cke_button_bgcolor .cke_icon +{ + background-position: 0 -720px; +} + +.cke_skin_v2 .cke_button_form .cke_icon +{ + background-position: 0 -752px; +} + +.cke_skin_v2 .cke_button_checkbox .cke_icon +{ + background-position: 0 -768px; +} + +.cke_skin_v2 .cke_button_radio .cke_icon +{ + background-position: 0 -784px; +} + +.cke_skin_v2 .cke_button_textfield .cke_icon +{ + background-position: 0 -800px; +} + +.cke_skin_v2 .cke_button_textarea .cke_icon +{ + background-position: 0 -816px; +} +.cke_skin_v2 .cke_button_showblocks .cke_icon +{ + background-position: 0 -1136px; +} + +.cke_skin_v2 .cke_button_select .cke_icon +{ + background-position: 0 -832px; +} + +.cke_skin_v2 .cke_button_button .cke_icon +{ + background-position: 0 -848px; +} + +.cke_skin_v2 .cke_button_imagebutton .cke_icon +{ + background-position: 0 -864px; +} + +.cke_skin_v2 .cke_button_hiddenfield .cke_icon +{ + background-position: 0 -880px; +} + +.cke_skin_v2 .cke_button_undo .cke_icon +{ + background-position: 0 -208px; +} + +.cke_skin_v2 .cke_rtl .cke_button_undo .cke_icon +{ + background-position: 0 -224px; +} + +.cke_skin_v2 .cke_button_redo .cke_icon +{ + background-position: 0 -224px; +} + +.cke_skin_v2 .cke_rtl .cke_button_redo .cke_icon +{ + background-position: 0 -208px; +} + +.cke_skin_v2 .cke_button_templates .cke_icon +{ + background-position: 0 -80px; +} + +.cke_skin_v2 .cke_button_numberedlist .cke_icon +{ + background-position: 0 -400px; +} + +.cke_skin_v2 .cke_button_bulletedlist .cke_icon +{ + background-position: 0 -416px; +} + +.cke_skin_v2 .cke_mixed_dir_content .cke_button_numberedlist .cke_icon +{ + background-position: 0 -1217px; +} + +.cke_skin_v2 .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon +{ + background-position: 0 -1233px; +} + +.cke_skin_v2 .cke_button_outdent .cke_icon +{ + background-position: 0 -432px; +} + +.cke_skin_v2 .cke_button_indent .cke_icon +{ + background-position: 0 -448px; +} + +.cke_skin_v2 .cke_mixed_dir_content .cke_button_indent .cke_icon +{ + background-position: 0 -1265px; +} + +.cke_skin_v2 .cke_mixed_dir_content .cke_button_outdent .cke_icon +{ + background-position: 0 -1249px; +} + +.cke_skin_v2 .cke_button_justifyleft .cke_icon +{ + background-position: 0 -464px; +} + +.cke_skin_v2 .cke_button_justifycenter .cke_icon +{ + background-position: 0 -480px; +} + +.cke_skin_v2 .cke_button_justifyright .cke_icon +{ + background-position: 0 -496px; +} + +.cke_skin_v2 .cke_button_justifyblock .cke_icon +{ + background-position: 0 -512px; +} + +.cke_skin_v2 .cke_button_blockquote .cke_icon +{ + background-position: 0 -1152px; +} + +.cke_skin_v2 .cke_button_flash .cke_icon +{ + background-position: 0 -592px; +} + +.cke_skin_v2 .cke_button_pastefromword .cke_icon +{ + background-position: 0 -160px; +} + +.cke_skin_v2 .cke_button_save .cke_icon +{ + background-position: 0 -32px; +} + +.cke_skin_v2 .cke_button_about .cke_icon +{ + background-position: 0 -736px; +} + +.cke_skin_v2 .cke_button_maximize .cke_icon +{ + background-position: 0 -1040px; +} + +.cke_skin_v2 .cke_button_creatediv .cke_icon +{ + background-position: 0 -1168px; +} + +.cke_skin_v2 .cke_button_editdiv .cke_icon +{ + background-position: 0 -1184px; +} + +.cke_skin_v2 .cke_button_removediv .cke_icon +{ + background-position: 0 -1200px; +} +.cke_skin_v2 .cke_button_bidirtl .cke_icon +{ + background-position: 0 -1072px; +} + +.cke_skin_v2 .cke_button_bidiltr .cke_icon +{ + background-position: 0 -1056px; +} + +.cke_skin_v2 .cke_button_iframe .cke_icon +{ + background-position: 0 -1279px; +} diff --git a/_source/skins/v2/icons.png b/_source/skins/v2/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3bf195dd35a2dd3773a5cae7e4712a1133a5d5 GIT binary patch literal 5598 zcmX|FbySq!)4#imfaKDPfD0%gAt}w0i!@S#APoW{upkJMOGrzobeAAVs^k}0QE5a% zX({Pgy5qOLf4rY_?wPrB=bq=8JI|f@oG1F8?p;c<Yh(ZbN)2^Y1A>GDaD|!_M$n>? z6PpO)Dn|XmQvk^6{tXDo$U+c|>~`t~Iso`_0e}qy;P{dtR{-!924K}10GTuZnA~4k zeOChj2JUGap$U7gtEgOF0+>z*0}7RvmUfuL4-*zPT(@OI7Kn+7QA$Y_kpX5&fodwi z%K5hH*Y4=(7%zXmk;ywAvC8cl!{izymzvty+1aHdWMjm9{mso`83?Pga*r`_a$092 zBOo%}(@$7G4W#PehB{|&&P-OhxK$}A7yt1g_2^uA5%u5npLOa?*h}mk|FUgIOL326 zs>2R)9`tt_S=sF*Rze6#!<$=MJA;k62nEHn%S$~EVj@HYez~(P1T*eLSy)tbXvrUQ z6X-c~%yqOeqEHCu&HkmurXF8f-TvE}nns(}lg|)aF(!HjD$P~CNQcQL6V=t#4N7#+ z;o)KH#8^q`dz`uy5bM1-hn}6mmLn0wQXNgWDgAZJ#D=}Onbj+zqL&wtrLo~VI@(cD zQAejIV%pje4hz*O!<|iv#l^*`QQGqN?=LQ(hx<#uzCJyf*n<Q{5ly{Y>ga<42{xs> zi*s}$+Ugvts-B*n85tRV6^_g(-J|_oDu(Q>g}M6220p$XfW1^sQxPiA3gyzPsK`g% zy9cDDOG@5vZPJj6Ra5a<b1JLm=jWWA5|K!@(#y+}sr;muQ<M(bsHmv8iAF2x>t9}8 zvR%)cnVCsVO{MUt`&d_ZoO#1bgz_SZD6@5c&=qi6Er@7o-B8ttN`1?7_wL2TMQbbW zO+^ibq$DP_%IkT^lk}ncrluCIJ{|L&8%<A+kB?cDl&+_Ykg653nSXd&*>IT-blcX^ zPvf1OoOZ@DB(sL5Rz{m%8T<PBrZ%qS=H}ANDIBC;@9yr-Gev$IJrZ%6kk!+(_l!a5 znG1bdVvtq2d;<*%3It+e<u!d57YB6a<1E*bU&JLrm46&(-GJTw>FgQsyU289d;TW+ zE{XQ9{r&yhS~0Y0Eo9mQiEq+r<>VxMmn0JFnGAauS7sMC&Z;WPOG``3%HHGg_^qw2 z?d|QIot@p?-Mzg%!rp^}145RMj*bYioSdATo}LoE)${XnLhOX&3X&fvA>09omw~P! zP+S~+1OTm;hN_a0@A!JwsXyIFdWRK<ac!cj0J&^C;t54NwowY=IZNv)qM<Q9sXjhA z!M);|`E0^%qQ%eW!+Np5-G_{Hu^nkxoS?ayC^XBOE{gK1E>48|Hcjl9+lS@@w}rvs zW0r%+r|Duh9@Iq(f9(I9fb7CMeqNGa`cG!5*XcI2^CRSOjj2F8Smee{xVO5JFvl42 zC2JN}CMc&W@g>)WQCw+n`k~Y-nwH;p6Y1*eI`mgXpB}A`Dl7;yPrD`4&<>pyc5`w0 zD$Ov9k<wNYVEn)j*aZa4WfC2XLJByQBfFJ2lhkk0Hr!Adm^IR-%tFgNnYugRM9(oi zFfgE0z7eIS@BR;3k=;PKWn<&*SV7sWFz{jz_nXieTEG95wY24}^Yt}{mJQOLl-6wz zyAYIlV&pMxv?`}{)%P@F3IaN<al#aVI4F#`J>rX5J9ZXC*dYAAL7UtVO+*;&5pQ{J z2y3h=XHuO6nG=wQR#dnG9CX!>DDRWbUzOF#JqeA9;^N{LkZq-_KYvFsppz6CU)Y*_ zT+qvxWoY`qMwPe5`q4B+mOPT}qFCiw@YY`q*`qz2hI!+cFp_wHQ_^?a+HyyQf2j;3 zkzSTL>QUjDR&e?*JrF$GDHP9||KoT!mFLg3R?ojGi^vwgqvgws4s-XG@4qhTA}~j) zN7GmGTok3wrg>CxTUVuMP&QV~Z8lOiR(zr(@$W`xMa*#`(l-e&Ci0srk2i*sffa|a zQ{n5RZ>ZRqmdYb*icO+7NFt;v0%hGd4EZYTm3=FYRPpA&GlIo8YLj1!Ao^Bh%Q!26 z)<s<$%_k@@{z(^eZ2t!{bMtq>CwtCh+8>fb?hlFU7!p@h45C(hSB5&`(>urev!w&q z)0{a|*vWpRbGL=Vl`)8!-kPThk`u+8NLI1FgJ&AsA<lL6PhZdwAK{+3Gm+h(0LXx! z<Kr==sBdsZ0i+FP6I11aB0Px;vz~TLEH-nzj9<f_8ehsXVVCTJtq7Rj_Q5XAFJFBA zoRl<=XI(h<eHuL7Nx(KLCqa@Lk7Q<MmJWKeG_No{sURxq8E_etli)Kgulv$x`K49s z>0*dV<R7^Fn`_U`cWl_cRR?VK%Y5k|X~WmgxJ{m;kVsM%!3Gwe+_`z!Y=RlpH}eR( zfPlPj?@~5>wI0S%hc`!3f14)}Cir!j)2^hbh9)FnLdSZkT5B^Z*P1GOfL&ZRu9K4D zYoZ-{c%mkCQR%c=MKWFTF)MqKXCV<K`W=UA2wwnIk)6hXkA%zDc>7*XHY!7Lp!09& zgFM3_8Kogbh#>SDaLRbAk4Z@eIxro>kGhnEUU>&SAajRO`~_5JzL+zE8>R!}m@Ch= zb&vmhmy@RB85h)ggg<6(ow_%~TZVDz(qKJrXyCoB&QQ>Sn9j<_I{u8e&i6%S7#7wa zpbhEM0dVSmkOUWO`{3+;muJ$qXVeNU?)X7G+Us#f0dGvFd3ey5A#pW&bpF_kbYUSK zy&xyb&rElCBE5wz_t*0J{8Ko9Q^lHavjc3KO`D<~b<H0D_PuD<D8c@o7ftxRhLSaU zo6x|b@^b#kPYDoZL2Xi-n4G|HcqqkJYwPJ-%2@WVqmGa!n1eNv<P<>~dDW(e_*h$- zqY-d~OED0Ua@bNXktx3)e5T0o9uLnckl_HF-<y25=g@U8e|sglGB4b*cvDs!6U!uI zX~;?Zgz<H&V=X=dCY5e)DcbeLAJ4Tye&tBs&9|Ms>+J6v>v070MyJ!e4?-fD3m&g( zED8~KR)7Bdc~87s!RTIOL`1;=uM$ORE(N-fpuCSd>Eg)^pnXaE&9+p9lq1||Gwd3g zl+ZERp5QfAv%@E{gtB+jA7FDPwE9v3C^EQ3WkAuJimf0bkw70HZaF3mzfoH1Hh6cu zYk0s~Y#_{rd2|QQwb-vGZP)vKE6>~PWn&I|^3_Gzh=l+Q#qh)2LOXQ_tlR@Rrl^j2 zj}z#&Z<c!k?6eR%Hku-Z6O=QkLr9i<mlFXKtLxjoxcTkTI}%9N2?%appVdY_2N5`r z@|6?W^2O2Fp}^E~w6vYhlA}>D<<yU5eKlEMEp(_UO%gjzC|Bn^jdPlFs6Eo2lZQ7r zMb{Ay)Wzu7RYZF75_7nnWU_MtwX&76^-Er+SEP7xSJwv|=m-0U>Ta_IXH<~!_STYV zU%ZHOm0-h(>%11#Z!-|qCvJ#%_IKm-+_9G=?I7Ui#bS445xgLi7a6b5tJC=~=AE&m zR$OCOr}ntVhi_@IalP-^2nM-g+f}n5fBF$8xB7{Vl&MfCb7L@`--<UcF(foJ6k6Y$ zmxm2?usT*&3dw{@0-Pvco(#bD^q8tk!g^9H9^rJ9MAIpVCN~w?;iN=>J@FfY1R4U` zEkf*R+2LEq0bPph&#U@VwNC(4Dt*r;ZoB2PJ?$xgb`>S<9S5Ltg$S!8iQ3#ZXmb0P zcF~-uTxt-2Iz8R*ifqOuQP+zhIg8AJWIu@@Eh!NcQlFft2<%uf%~Ni19EsYs0S!}b zl3JvFBv-m_9@PB*3;?~TPL=rZyy)ncwXN`M_tA!=Y^h>JYGO&$(M%W}-4YJ~jJjub zn0q6whb?*vzuwu-^?XsXz>^V^NFRwKhP~wx6c=i|UStinP}j+Z?Vc~z@PRyX2#`P> zu@`(2WtSA7wmy)M`v-xI#mMbLegd{L2$hkBjPIYW^?Oec&+;6Ai29(<wFKB7@Az-7 z7y@hGwVz8Sm1l!H3q7eqW@P|}DJUu``b+)!=(~T)?P4(P(ZS~PzHzOx<GOik5FMbH zzvJ?IZ+|M#d!ajdtsjaF_1PHzRDQhKjJIs`Y=Hu@+d}`)y8qjCqAvRiDE=?&wRycO z6uVc^HdQA`304%@vvv7fT3V=iS01pY(latLj!%}AmGO}?+&4BhX26f?KXf|QiuJkp z&i|dC><aJ2tR&vApy4eX<YCYRk8Kwp2BxagcejYJZ4CVP=`Vj7%KFIZ-w0{896SD6 z;_^6#nfK3jA5Tt@A6iGGqNLilWAsN`+qF%V+4zbo`jO#bdZyS2IeqQE$B%71JUnU& zB_$5Wb%nJYACee#*$&=v(h3pTY(uQs+1ce9)<UO5^QD9(Bp&hG!bBXC5adp`L~%<u z4FNl2?5&i(($l6stVQ#8hO50*v#X=yZl+|<=D%n&)RShC^>UUbY1!Nx`rz#rvAFNo zLS>@%=Wchm{hT0wxq!ba=O02QG~XrGQ`lu~`H8fTt`*N9Et@9Rrj7@-DCBmcOh!51 z=~j(2I}LFDjw!YzXnUyDu#vTv;FZB*E&LMr&k}!rIPHE6+*<>u0}lmj1AwW$PgP&e z^Tl)l6Q-Nf_`}n4^7A&UWk=H|_2-3U%1s!v>Ld$~typsMbtL1PmXO@@wL{p^3b6t# zsIn_EnuW}}W9lRAOyR4(Zb;blcnQEgU(>xS<KCa^W8@L!HB6O-id$@A7*1q)L=vDT zo$1!QzB=^0i<IE^Ooab_xCo4hPTST2O*BF8fJVRKREuF`Vql;FpiM&PHXlD9pKWS< z(BA9Xg74)_Ovwz}O|jjC1^&}6TS%VM_FP{qQ&k-#Q!kqCeO*`qr<u#=-shE^J!7o9 zS<btXUswBRMfxiu4t_1&tY!xHGd;tXOca9MrkcDlryKP{a0N*nLohV?kQg|u{jLa` zFqx#X&hh_D0lFn}pMHEcR_lP7aINnnCe3uLzxAc3U;eO`;+nrjrP@`w`oHGWp8J}4 zauR2yuP!RV<@nBFje@4TpAk0L&-ZA+vA&1_at-+`x!+~-jb%U1=ko;y56c`}(Fs=h zf=^XA<GCCh9bMKaX%%z7j{DCMd0ta{vGBZK;_c8&qk&VbsQaJ)o=@wP)c;+MC3+Mn z&%!!_Wmac(<t+Y{DuB%-<p|obh3?KLs6r)a4D@(JUvAsdaR`~Qi+FvE4yS!pa8lap zwQ-;PiR;em2%?l20#zfjq97J-H)l~NwR?g%OT02d6H2K9R1mTk@bWZKp2MrrQwhHL zCMCr$$CNgGAH>3y|E97yuK$s8Nr?RhI2$1x5tQ&yK}BJ1A}v6tU46wU?wt_KPn;V} zSJ139SX13T8Hv=?GWpdLv_D>Dtaa1qrAYfPb?o4$H28lKB%Qnl$TG|3x@*a!W$0Q3 zNu<2k$?*+aF`}qZH$D%jhLW<h;w_H-v^TVz^gh2|6W!7ghik)2iK;k*LN!S3Ai~^f z@7q$P*u$%th}S7!yS1uD<=#p2ICQ4Dd8MeOSUz7-WSv0LiAqBfjX%0Xy@f~Kr_o-e z`$c5)q!g>El4d=K74oPq`}oFsPKb*bh8Pl3r^QiK$G{)zkX|9W=S*s+eeE|b%;qaQ zR$ab5&1m|TV(6QcYx_k;z{R`Rr})9N)>u||I&~S2yX8ifwS5M64Zn6|C_~cI$D<5V z_M;3Oj)D=h_e#rTCd`yMGTRi>dU=u0Yx4gOuU@^PWLaed;EihGz;XnoxA&)I4zkZD zzX;aV)yD(#dZPDC2r!Sm-um94I=`;2?%-@b!Rqr_8x&xh%Bd|{PJXKBp^n?ggPQ@c z4tXNEyFv9}ha>y?4FI?XS47B)hV1CoOF9TQOO`Ng+nu$lw*CTby_8v;PnpS<XE;ka zBm!r<NEV+1BO}w9u8~%^IAaVH(6vjN#mP!T0R8yIhG79c7!IoNI;}q>VuoO&2O`Mx zHx0v@{r&j(Xn}CeW3ST}+pVWgm_tK(1_p4?JPFrK5>}JYWEsduLxdf#K-jUeo_$4n zG0Q7m+Y>4uiFcd6emn$Ig9C0&77W_S7-Mv~i(C!^!b)W#R4<;TTAr*SeJ+{7F!A|C zgjTWr-r%oXH%*x0M!8qr*@@Qj>GY_5pq`1bs7zBJo)X3Owyf;jD~-bK=Snq2p<chn z;f(>upPmqpgdqXf=)zjA+i6CGqA!h+hBSB@KeNclsmk-XMw&vJN9Y;4p)S#M4Xhpy zk00Mf?c|SA0Q%>jc^@$RSV_8?6=r2Kq+)FBO_sOTv}vRb%i85CEFSS(>d0DD@mW-< zU-<e!)rYYrY%M9F*F#3|=yKn#>A4HDg~EGC`)_I%OvnbY(ev}PtXS_r;xN?{^&OHY z&Oc<VAKJP)>~P&KM_f9-;^9DAtI=`0xuAqxuJjRe8{a{ZW5QnbE-iR18jadEggZo8 ztS9GkR)fIFFi0x-Pq;~gldpI<fm0iqrS@Fm<+}wQVhbKZpi+-#9g821v7`*__5N_! z2(s*z_8+5MI-9#nGPuAXYyIslc*fKm#Q{qrBhd3?^6DkqVaT@^Jj80n{Q6WcmQR+m zmf98`{;@#V#XSv;3y}`=_1IhWyx!83b+=0HKNq)5-LS^2=1&i;C8DeQ&HNqaFm{@t za_ml^nef-QdYU?&$m&n_+^6PD6VpvcOEb0KyGYVjAdh`~eCl20te=>&Ur(4&l#8GD za8A^1pWi+zvO$~_@rLrO;1|4laEYM(^`5QLBy{i4QvloSZ86f!g>9ZEu+|I9A2%;s zvZPL1vNVG9<$nYTm1LUbB#bXRQ?FgkGZkPo9OWl5r;qw>OHEph)<-<DkL`fLCu{?& zj*_4N{^7GD@1ToB@Q;d@g0m^pi(8QKQJB?UpTRdakvWg;@U&48d)RNcX!isyy*Q7= z8k6)Nt(CGP=|^>JHjk)-Qfa-|c9M>z^64f6j;nK|=Om-_E+<X>4wS@@tUbK12;{cJ zWz5kxQQPSC{_~3IvAp=9M?<;#Fs{h%3q%@aT5Y_7w1dBAZ@56hD+_bkollY7CMa!^ z&Va|g>C|r%cWl~NmkJy6->v+-JzMGS7Icoe98gJ+Z^z|yWK@aYxx+T;9rb4h;}G~X zxU{vkb!Cf#Z$-hgI!JDKc(43xUtbjr#3dwHHF_4eDj2m^9hU&$e|V7l*v$=vSap{P zfCKBZuiNr{Fa0aCNcSTNl_CKD$4XoRzk<YD?em*$MEaky=<O#YBpmLhyu`cy*_}N) zYH(UDVQLqOORzfPdTKS{OhlrWBL^1`t-^G<G+Rxz_#e6f>?I43rJn0kPD!~+_{Rh^ M(7LLX%GRO(1EjHd^8f$< literal 0 HcmV?d00001 diff --git a/_source/skins/v2/icons_rtl.png b/_source/skins/v2/icons_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..83eee28ac79d5e00e8ec9136ba491c8c0a2b8352 GIT binary patch literal 5600 zcmX|_by!s2)4=a8ARPh%N-P3Ox4_cfB@H5qGy($By+|l4A=2H5fJk>NjkN4n7U}Np zWr^SV{_%dE=iZrf&YeHz+?hLbPt<cARZ^lyL;wJgs;epKV<iOu;E@yHV6{(4Uz)Lk z&`r(E0|1Dr{#_s-J(CVQ$!x8ruMGhHPXGWG1_0<gtlR<sF9879wgdo)Q~;oL{rb9B z1psh>=URr!SQ{oq#k)HIN4x)lj7(~3>P0*^j(~u{t`#FBUsza}6bdaQ0v?L-RFVM< zEX6<noJ>vq<>1aUH2KahTya!okW>YEqM~wreSK#S+C!P|CbIn}0b)>47&5w-lseEv z1K^sT>c#D1g2?)xf*rH=7iWJuz56MvP&DsD;6AVw@u_uTewRE0Ck7@GP<mwl>X~~I z*+oAwyK?V+Ny(#l2CNJ5|Lq?h9#1so(8<bO-`(lD-@~PgJlGuQ3U!-yAT1~?ym-Y8 zX9IL?`<MH>Xk=vQ9QVgI)|-cXDRsv9G&BtNEoZ&y4&f%c`id<-eId59%_d6Q+k2$S zLl+kp9W#Hwm6RjYpn&l3?G5<)8fWt(-92c3Gh$9}_tlri)8)l&JRzaGThPYe|3tL4 zK7IOhiMbNi(gHoUP?|G1-X~dKU!R+zEGsX+y#-&KZTR~73}wL1<7fmmbUD?O&+|nY z<yF_0sRXsu9xExmfB!x`J>CC@{X-d@%d-=*2U&+}%MEY!eSF;k<`O9lIWSKL_=)b1 zA9*s*p9A9J-@cU}?%yX6t|a5KWKmGc%gesT;NpvQP)kb_DUMT1$%%*V{rK^NO<7q^ zPw(#Tj*%&Mad9yvC56PjzP7#|ox$oUNO~KOo6&JL;R3L{UK7;RWK~lClv2#Ds(O2S z+tGnY{82?BCgzs%)6*~1ISpxSYHH!))4wvX*X)c&qv_@4nUYZiDg}(@HN_Q;cWHo5 z*RHZhtb>EY@pQUaCUS0Ts`;ytudi=P(@suK4z-l*c?#3u;9#yPq-W|<&|yYWSJ&n} zTt?TNzi#7!q~cv7I5;>65Ed@08o9kar!t?Wf0Psv9S>F*MQ5_&sE#|n51cGC-8x!f zQ&z>-`g3-6#-|CVRB0p9`u!y_jZ#WV)OSPlO9QRJ@cP!$`rh@=A7v#aC8ee12L}g- zhlfW;N5{v<CnqPTr>9uk^Ye4;TfV%!#QJh|b%nuTu(5h`bA$CAyIsN3zrSH~0OYB! zV*tplPuT$grM9|~yrJ*(ZYDaw0F~C?p-^G-c*d0GsU=NV=k8}JW@60&tFK>c|Ef*z zx+HjJ6lc{Vy^Y7TBGViti4&TJnvTV38|y2hZE&F=s!!T9>~hgjno5F5N4vi4?+ob@ zA>G$*qZYP9#9iYXTbRrEK$(kx`IBsu4L*sBmmpR%mUuN!4=PytI@q-x{dA;Yz(y!d zt2mcvq-@;bX@Wb>PX**GLNprLml21JyuhG%TeIXfb?!nMWVnKmSVJn&^z5wGlV70s z)L+@uS-F&C*oIWp?^VToR%`8jpP$N{q*0{LIsLW3;fPBGf1az}og$7(;RP1o8r~!5 z)+QDQXFXizLhHNWZU;kZb?~?X!Pb;3ok|N!n%tHE$%@0rO}EdhwP5nN@A%Vfh(8B> zpL(qX?PVyCb3ax;?C<ZtW8a+gv^c1jS3r7coV}wR&tfj#YA&$`YokO)K$Pjlj)X&w z9v(b2pP!W5Wn`rLKCwXI0aoeEbFrh^JdhYH-LtrrG92^+)mj-Dj=>R`We)9+BG!!@ z3OIJ5<wt_fJ~~sI5234g`27BeUkUbe+X)z%nm_me!@LjTD+6@gn+9^b|HWcsHS|K4 z>3SqobY^9#yF(_heJ8virW?Z4E_K;AUgWXCbJ|DmdcASSDDJuT3GY@>;<5UdTa!fH z>o~SfKY=fWR1<`mUwHZ_2pi+5n^a@n8Pr<?NUX9MaRp=a2XzIKr=-kHtt<?q^fW^L z&T26dxxaPi;wVB>TS4|FJ*fyHijQtO^?R(UOnL70cv_(5<Xe20dbH?SA&`*kqkf2a zQE_o`=s$cGf>KgQ!@?To{dX*==px_HX}h+a@iD7Y$|{P85HkB~Mi;2^9uBSBX^^aJ z>XFe|N9$S9*~d1Q?urF_t(O>7g><}OxB<R+{+|{Is5KW&b>!e=lTZBj-)Sd4z!p!w z%)qlEj(TY!16}Ovbm|%oT)dvK$no^{@=ik|X8I-nagmOO9-kkzw~vmtsSXEvG9Bz- znZ-1x#j*Bduo-mD<UcpuKi~FmaNd6V+D<0cBVdD37~;FP*ctS*<75U^UXd1Rfef6Y z6<~oV1x|6QuZE3Z&^t=HguJFiGaI@V?$zETvK`BBs>Wcx#<cxgFVqpKXQxjv#ID!2 z`Meftiql|$gg>P>_}gcwA=Iy`k!lkg7xgN@4f#wP`HVd`QJ;3aA2+>Xhm4sMu0T+w z`qn^L%nBq=-2xWVQ)git{m~D8s>j2uRppKEZp+zp5f@e5^QM}pq_iAd%7f!z^vAe_ z%cexI1TZu*5{L4>l{3mKt)4Cg122rsjLnT6ln#fMrq@}OZsV2`Y1%Ly+l=MC@@6`d zo>`+?oE)m&-6JnXypUGiyi1<T{X=D3R$AI|8Nt;sJ!5NRWF-0UM|I#;ZTVnz0s!O6 zsi(~E8+LA9ap*m3$V@QSI*TllP%A4PtmZNI`+Vf;Q_A&;XGn_PZuD|9yu7bGE*n)d z?ZPM?TP6}kv6F<OQEmcQepLblG`nIMS<mT#$v*iEVApU)Fp8pUIy^jU8u_%YuC7X2 zp^MI%a-}b{Vkca%?>yD$d{g3$<?eq>_>1jYmHoH@p9l=U0s{AsR%6z1q6OED1O)oZ z%ajZ{Q!Qpl8$U!<Khy9?28Ne*x*~{adqn3a@T!UyoVPv{m{l~oEp-)A{@$y`9oNoE z2AUlucr~_a3Fia&M_xm757JcnNhk6%nI1%Mv9iZzs<j2FH<rUB)1YE63RJeRMD>r5 zKhV(C)s<qhR|3|M*}nf2Lp_<BQ>5;SyGl5D(Z?LI5urrr<8TVQx;zR{s`ZpmfRc8e zHmx0wOjSzSJ^%=%MH32vwR`{*QmRI3R?L8JnT?8<gi-P@t(<K44UU9PQ$)s}52#cb z>6J6V2i;)}j`$wD@=s~CE=Y#94oUtC%qg%}TZ4hkgdl296Vz`%*a$hk(^a^34@LGQ zv$-W~IkG{-il4wKVLO{I4GqKd^I01Dj3VtNVfie7SL#bRIv0k8;BZO~E(JY>L{NJb z$I_XIvG_N%x~JqfRdM&!_!oqfM&-C>d`chS@bYKTV)COxnLTN_UFM?P^NpZ^b+tZR zYsr!C2?nEf>`Ysx@iAK-g~n1NtGLNoji?34x0PER9^$Y})!qj{G=nA73;P*}TylHM z_0sa#oq8J+lz05b7q+xz{!S*mE1nz&B@4;!wA<T7KPV`BM-4GZh(GFaFStyFM@RF= z()X%{>I?dFcgVuk(-#gdFj>9JR_w=jzfIbo59a~BSb{^`-39SKw;x9=Tgl=F1ExKA zFY$pC8p4!d5DjlL8!RWxQ-YBUbF<_IWgx>L_{Ld;)wCSVp;`C3mMjHQ$vz@|@WZw| zDF~3B5^9`9KKMw-N4Q;Ewb^9%!a6Mlf_wxB3Xxl;Jai=Y!m3OK=x`}Wniqa*%Ut(n z2VS<JD_>smE{dIWmW6jOxlOsUvoRDWM&1N><miVZ9plM677l0$m(YvMS;g}IKLP;Z z$Hq*@?6|-rIq4Cns-Svv@J*?Q%~OCRi~dpb-7N;C%JK+b3A0;s5TuJ7Rk`(3gVn^V zVJme^pc!mIndQDVk|lmj3lBg2I~}&%t`6;>ezGevz$o6|-RyuY*R^z=QMl1a|A2om zqHx+yG1#Ow^0c+Le+|L^ry8wsOVawB&*A6#oNQoozjTn6zkR1d=b_xediEH<#Z^)7 zXIlR38o7Jp8C?AQ{C5fb!ABK%#L(P^Iqw-4?t{jac-6^@IUqNs;$>5H&B-XYW(uE0 zz$2KJ&+b%J!P2PY!OLdPA0%?cHFhKEB2JSdVy=Iy*Pa1>lROEtt+qI@-4SE=p=2JI zGc<F=ZY?%87PGpGTcN3e<z=tm$@)l*-mg}yOmdkqHnvKkO?0`-NEu8{G|k=pxX`*% zRUPpJcwTKY-|A=kb5_r|-e#$b5_qDS%)^OkVXt=$aL&V-J(@U&$TYdVNds(W+R;-9 zx_oA)eKVY#GoqDkg*JI+D!=MS_>*{FHddAo6RlPWz4I=4Vv8kvz7d{~Vd*{G=*>;0 z2`$cb!7Hkb(Jv(>AqmuBy6;eL1`oo)!KvWl`*LWkPVljw1wU}~jSx(U<?)PY#l90? zSfh`o{kIZ7a+88{?>S>PWPe%Xuj=0j+{|q>wS<^U;b;sJ94dz}@XSXjCMD@mmXw#5 z1`f!Blai8*Vl_fFG#t4oauX-yU|}KtOQUj@7-D{c!*NB>&^mOQ1Q+bFK73z~hX5BG zig$4+1P(>C5!3LPy8R@iAi&*kyLi<?(u!V}zL*v6=fg=|;nNw-_TT<~f1eLJnD?B6 zI{jhwps*s?e8%FA1O6mS{HZDbJ~X_Xo_HCuWZ3$c?UpnGMzKIa$!znsB3Se}vdxLk z>q6m$8I|J1JuAl8CIR(iTMXbiibRN$ZysE5U165Y?oE?3=LOK3Y$qNk1=AcxRs<+O zW=6%MK?reoVQxK*??ANBAZ1cfbTf5QQ4yK)hon(nUS3-O(X-xEgq<l`p8OpbtZyda z(>pscs9&=;F&N{)%^f0y0&`?Z`mD@0alb?ut@jWcH_AJ5y4K~|`L6Tz3`gK(y5m@{ z5IK8(73My-?tO?aU<^z-0EizA^Kfj~W%_yd*35neBHvuYC7Zl{{V=Vu(|!WenAuB< zNdmZXq^*I5+4saWyf17p5PDyi^cfXAewmZu&pOXhODBKC5yB@OXS}aJ;tXq?%JA5C zIE99|Ui&SNRns%oBRZs}Fo(#D>T0}grqhvh<A%pA#;}9Ho6cB_s7($1ZD^Qm_Sxd= zYjX<=3q4UxmLn48s4IJI?YH+CnO!ktx6_!vBI7q*>xgX67<o5{q{UA?ym9v32N8df z&>!O}<)4O43im1OqNzoG%Ib5z7@HC*W#@s6p@h#{N%f^wx6PidJvW398kNsGhmD*) zuIEx_G}8ZW2-lx8F1Nz&c|}GFPi?Yb=?={}FBJ+h+ZS@9SCTO^N!%g1Hw6_MIB@OZ ziWb}$IulkPaL;m&5`mcpBU1Ol(R%a(8V?J|<R04ocaNy3br<*g?J#(GdI${9=P+<X zhM3jnTcL&QoBYpErHpJZv^k6Zoabl4|0D`FOOOwIujYBt=I<rK=_8_<x%M5sIr8K) z){uGF7B{?!CdoHcu`}OK4$pdsqs($xf3`ik$W;05gMw(eH=g3ef`j>qFJSsAf8YE6 z#*G#{Vu48tL^Qfs&21PF6eTwLmkoghs5YC4IpFzUjG}or=2)M5Y7oZo*(dU98VQ5A z@)Pyy;jf-`9>a-L%t}6N**zHSU=s)G03_!VPjTzobU`vt4eV3;^>6F&ri3&&%i8C_ zoW^>2{MHY^n>{jJlvN-4ZoShp$ouF#*1{e}%3n^ntB`6SQkV1u`eupd5)6t}zxU&R z_NQ*%H|Br~{Wdmzwyh_i;pxilccMqJ^RHjn;^gOl-B96u4@m4^Il652s;d)O1(CI1 z{qfp)>*VA#P!LD_+#HL6B2!zTTV(~djb5KEh<nw1I!gkSv>hXoxXGmsFIUE-FXDs& z%ShzA)ipBK)owxQJ|K4%dk?ktkH+agrNe<WFe0sohgBW=q8|z?<T<6rWw10rGF<oq zbU~LWS(K}+Xh1zFQ^?uQ6~Z|IpquFUU9#|w5@2gSoB3A$0(jeQTy-|n!tw#2+kWjO zGabCWJ8Io;H>LxkdokZ}cD<-8E75WiWnE*BQ<9dIFFB?{38`zlR^kHZ+6fmWs*K)l zkx!pm-`_uVEi<`roqL2C3i8KAJn!X_kZhKk_<3_iURwi1nu-+t-W-L04!K)7?*Koi zB8)J$D7U<!{dw)INFz5g6sU{dOBuN6sOr4UuHY!|2-(@+kzy?7fCoqn6ILKSO=FMn zHyC!}BRPu_*KsBveIuL>)U`edqBEve*3()%0bd@Acxx;0Cn5`dS=`(4u(OG8F4qG> z$5#4HN}xpX<bQ1en~htRxRS$trY3~srEOIJHin|X*oM3nE(r4p`4#0U#4TI=43aJe zN#};lbEP-H>0f>hT#ZEvc0yty)_V>0M=Kwt5j{uUc!6%ba$Zcbk>8dZWn$%*FV%?f zUpg|mBQDFW%f5_V{QWZ=5;?*~4UTsDsNUQqwll4x3hst~%>){C)I~3bs)ozl(1&Kp ztmjcCJKt4^5BsHY57Bb|S`l$A?9yyH%SuZw=s;%okKn`59&J3HMaSN2rgeJp%FJ;O zNinMnVypQ!6CUV>&vWO+#-inW9~!AC%BFZBI<Vh}vxdMXm?Z5D)A)j`=9gzwE4z+l za(9UvT^rJ^n9Pnxf<gliQ>|MXDqaQ6mzm^TZ2$2*$e12)63)4(O(xf3yT9KyIhX3y zB*+DGwaSYl?0a}s$r|1TGGSX0U%2W)Pud5Q$)w~cz>Z9@{Y8t@aNW-SYl|i3G_4nw z*mD$UTH&ukpd0&d)BUTEa2kEEMq*H-A$ixvK+lF|JbY7@#D>-J9Z=7-of?)M-swC| z_~p%AxnBJAl{(4`1S|A&3YwD9sPo{S?TpY3n9>EFP)3FGywa{zS7C{790O<Am|4n; zK6n6%(mua{Lw*5YDm&~4Vo~vf2Jc3eDc+@INZaO`NgehsI4e)Au%^{!Q`G2?u!1nP zHt%#Lvgw57N6l=@-#;EJTH$ON4QK-0J%;$5#A8l#X=f2=I`k4ZO5#Xe7P|gD0kzc# zVK||<fS-3sL)XFk1MGLvsF(xKM8_Jz`oRH7Qd?64*Zf_O%Klr{ZgKOCbHQyJRH{4m zE{RtX8n!fwf8g342&GQm^j|A@V-$4L$!P5EqS#&bu{o9@aP>aOTYAE+slELc5gQg5 z+PzjsYVo_GqT)&szo~HNFw{2e_tljynaHzNA|Na*EQSB|{x+O%26-q9OtrP_7%D1u zhdP+t<lz7UmrIKkk<At<x=Jni0IYMaCBy<%S>{yfgl2F3OYY<ICu{o=1H-NmEB)+T z<xY2Jr#$z6W25BR5C*9`dc8o~7AEn4<JI<0On$!-TdPmjuqAgN7j_2$eh(~<z|M5n Ru%}Fby0VT^g@WaW{{hG4-#P#Q literal 0 HcmV?d00001 diff --git a/_source/skins/v2/images/dialog_sides.gif b/_source/skins/v2/images/dialog_sides.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f91b4753ad672ecbbda36ddd0522f6f93dadd1d GIT binary patch literal 48 zcmZ?wbhEHbRA69aXkcWxdUfvq|Nj+#vM@3L1#}pI03^e}#NN}-!TmCvfx#L8L+uN$ literal 0 HcmV?d00001 diff --git a/_source/skins/v2/images/dialog_sides.png b/_source/skins/v2/images/dialog_sides.png new file mode 100644 index 0000000000000000000000000000000000000000..1042a61cf9f3c3839d1c4fafa0ad9d83396253ef GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xp=xbhE&{2`t$$4J+tA0B`Qsl z9vhhqtp$qJRd?FDPMdF@e_dDMD`Urf=8xG5b(}}eFZ`0d!ouSpw?IAXqxlYhq!kV@ Y*liGXlBs6f3N(+w)78&qol`;+0EeeJRsaA1 literal 0 HcmV?d00001 diff --git a/_source/skins/v2/images/dialog_sides_rtl.png b/_source/skins/v2/images/dialog_sides_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f7b49fcc3ed5a8fa763d0ad0372f86c8582b20 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xqG@ehE&{2($V8fPfJKhU`;Ah zc*d3_ry$0V<ftIVnpCJTt>x09fWpQlD(0qaDhB!Y^fDE`igwg9eSAM}o@l*f2hbU8 Z4D<GL{eSw`^aRjI22WQ%mvv4FO#tQFHbwvd literal 0 HcmV?d00001 diff --git a/_source/skins/v2/images/mini.gif b/_source/skins/v2/images/mini.gif new file mode 100644 index 0000000000000000000000000000000000000000..54d910741607aeef28fb9b5882f77f14a3d975ab GIT binary patch literal 183 zcmV;o07(BwNk%w1VGsZ?0HOx~nVHN00DyOQcc7r80DypIW|;s0|NsC0A^8LW000L7 zEC2ui01yB$000Agc)HyFFv{5oF_bJUwc?N^8lWRyWF#Iz8eXjXprlOQc&_jKVd<V* zkW!KqD<>P$Qd9j}#|1MMRnVHftai)I0hk4V(@-do3I{afTNt=~7q!&zhQ}M^!I~t% lw;gm1W_k-^4+91Sga8FY3}$4Fii8ejXLS&6nq4;u06XFIMo9nw literal 0 HcmV?d00001 diff --git a/_source/skins/v2/images/noimage.png b/_source/skins/v2/images/noimage.png new file mode 100644 index 0000000000000000000000000000000000000000..159811305af7fc78662a53949f9c62bd702785af GIT binary patch literal 2115 zcmV-J2)y@+P)<h;3K|Lk000e1NJLTq001Ze001Zm0{{R3yC6tk00093P)t-s+g4WG zTwL2!RN|kX+gMoQprGyM<>Ho>++t$jfPmRaN!?~<++bkXLqpg`M%qnH+*(@WuCC*= zv+nTj+f!5FhKAvZiQ<}?-*<Q0S6AP7c;J41<HW?`k&)xc$>EHQ<H*S4t*zsuqwn+a z*+fL+ySwe><KAv=;;5+MkdW{9_2QG0;?B<7US8Z-SmM#q;g^@%PEOu$Z`n&r*g-+v zY;50jblg={;*^x^-`?6vO5u)<<HpA2(9q+xwd1j|<GsD($H(4vcHCuU<Fc~k&CTF} zf#8CI;-#hIyu9!9^4m~Q<IK$Ajg8}~s@q#z<GQ-zwzl4FZR5Va-f?l@eSPid=HtS` z-+6iC#l_lCP})&Z?(gmI^6=xZu;aJ4;DdwWo15a8nBH@9;+>t|a&q5ubK|eC;+&k} zgoNRWitg>}<EyLTi;M2@@8Yek;fRRaU0vXOeB+&++DAv?nVI95nBHV$-DzpvYis7c zz1?td-+Fr5NJ!$Ip6>4K<<ipQ!NKLv&)H5+<e#47w6x^Y)8eC}++JSl*Vga(_t-x_ z>ekfk+}q{E#Me7J>(bHOVPWE?rr?K%;Dm(Xm6h64Q}6Nb*FHY!#>MR6-{6IX-+X-I z%F5>4+~J3Z;f00e!NKCVxZ<&~;;O3SqN3ugtl@%!<hr`sQBmW#xZ}&q<gu~izrWpR zXyd1++fq{Ej*i`GYVPal<D8uC@a^N&)Z@d$-C<(t&CBMmuI}>i<fWzW^6%ow$>P1e z;;ydZ#KhvOtLC({;-aGCtgP(Y+2*ma<h8Zrx3}V_r{kuk<+{1$$;se`hUdGw>)hMx z+uH5p;oyjf;E9RksHoz~%Hqq*<G{e-goEIUir|Zj+EP;M)YIXUljFI$<e;D0RaNN7 z$JRMH*g!zpN=oI<&ek_K<f^LKQ&ZVcP~K){=(@S&yu9Sr*5tCX;hdb}!NKCg!{V~C z<j>FIou1*CnBt3z=eoJ#jg8})n&6C#;Ej#qx3}JMbKrV<S#Yci000F3Nkl<ZcwRlw z1F-Z+6oAnl+cutU+qP}n#&6rUZQHiZwe7vh%<flHneNKzTS?H$uc3*fP*Bj=v130% zQBfbUU>7tBO*{x<B|7Nh;^-KaxNXG>tyZfK3kwUxgN0tN*J@X6OH7P%ba6R|MjaCq zA3fCS^<jZ|d202c|5K~gd2qmlqefBCqmx<;sSoAkjCuTc2mG+G#h5WU;PU{VeE1`Z z(gy~fIRs|Mj*N`Z(9pQAOoc)jZ~!!BqtFfY_n68Ejf=CgN=<zQZQY7pQ#Yqt#l@L$ z&Y2r1@H<>trNaG^w6x&h;0X}?rKOdWz!A`Z9|xkD8K>f`UV#Y?778OHBSXx=QYf4d zoK}L{Q!~*TtJJk6Fh&?D5QJPX2q1&OfL$*X3k0A6uYHxe2KBE^0~AtRv$6lS_4Mtw zjmdb8w%ey$-|jzKQydZk_OE`ld4h0VagD&R{(3`^$bu@Iv<q*NkZK_+YPfD|5P<zb zxEWnpSA4o<V`K8%DHbCmBSq92k`W@+P>Wz|F(np;w+L$1T|t*mx13G3-F40Aw`c@9 zL2Z;#D6&TC32e8>&v@;sZF2I)mdogy^|n{%#!lK$`8FOL+{->kqn*o!Q&9ZdT8hya zJJ)vob|e5rp^%1ahwoV6vbpfmrNU;DyYo|7C5b{g9~)~xp8^}MtSyt#I%b%psG&iG zJBt||G?}cda+pLp|0#Mv83t8ePNQkM%(Af1?7Hn1&|J&A%4#b~576<-vaWL11-=d% zjn3E4Bu&oGSEtcv9DHfzU9xYFqYbj3X$xMyv<nDG(n&h9oBwmo*&PyHQb2&6=A|#q zwQB<+x#CQxtCvb!8Qs|;lM`ikGgh@q>zk620x(KK`!SZ(ByE*QR@b!~_Z6C8;XY$~ zUEONQDrvnAqx;eCz@ACxt*$HG6s>%H00x>89eAybjwzilk+fp83w8hb?EbuE^JAhJ z4EY}FF(BrSQGb)G7>t<GW%KSm{ey-ap5D8OF;%;F(_Qn2G=Ijszj(K2sc?GV0omQ0 zUmDHGY9FkYnq85#b&*+0|NdvN9jA6^4=~kWuCiL?7mvGm>XRo_^U^P?TAn+Y1rHE_ zni#6(xk`Dp*RS@tv%k3M@Zn7t&6_X1D#9_Usz<Aq4=TeeGTpsiSm17UI-#eBkUkri z@h|$^2dXeCL3O$E@TvhDubx{|ao0;=L;PM`+TWu0rMqW(hbv1_3^p#kua~Y|I@Nya z5tf30r}*LsY?sREJNJ6oz|a`PsDN>MSrI*i%%e-j6MXo5XJ>^opYKB$zvO6U3O$0= z3qz|IC~Lr`ua^};XHRw(6BB$8(H!zg5bq|pvFFeuV5s|YG-%VelSQAyCZv#&k664V zAt7N4cG)c!6Me{hf)g7X>XnP+d$Dm&DP%HHygT2`jc3lyEx$laRFL^?xRj&toe^}W zHa;0GEXa4`dHDM?hdMhuhnW8UJfP3tD98k-IT0*xQ~{2_R}dFsjM>TMT3T{AmK;ki zcZli18~1!6BBy|?LIZR*fvg}FjN^S6;&M40&uLiiJvkf>m&x=PS74Iv$cEj9I}aw8 z3u^H!bBh<h=Ww|oKmQDq>8Q6YMezoAmY&mQ&3gCl6I1WNV$>{I@G?DfCd0dk^LaeL t9L{?@PmZPK&<CDd0a3vxu<5Moe*xgDR7U()XIcON002ovPDHLkV1lp=pwR#T literal 0 HcmV?d00001 diff --git a/_source/skins/v2/images/sprites.png b/_source/skins/v2/images/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..982717bf33ee787a446a3cfab6d0d966a75a193b GIT binary patch literal 5389 zcmb`Lc|4Te`^TxIQi($Glt<auB8oyLOTsAoU`7iSV=QG~+hk8@>M48DFw9JbF_uAD zlC5bNhLMp$m@&p!#?E*2_5AmJp5H&e`;T+(*E!egI_J7y*XKU(>%?CJnjP3DxsQ*J z?|}IgV;f#?z{j_9V$W{g+cTgQlaKER+1%L3E`-X;a*MMc?};TQp`uDrorW3CmZzT- zO~k}~iF&+Cu({&0eEJ*RGUC~{myUfk9_h$5Y(xYD4DQP$)gHp^G8B-)Jgz+?+9l+x zCvj42U)rrMslAWByY8uYe^!2X{lWkg_CPc1m9BY4X6@qKCwfQH!HzP@YTas<{#_K_ zhM%_^-t(|)rp0h$2yD_%2yauQ-6px{aP0KV(>w}}u-WWQhc``ZkMR5V2k;gOXm4w4 z;Sxo7B^Fjn=(n6!$*RPzHwYQ71B;rpJEE7{H#Rkw?L9=<J@0gMbt|!?qjmLm^tVHj zzjRupRkN1bH57($C5Eob{%YQb4__X-;CEwGu;4JI!2u(zZ*$dOYTA%zHR?XQZhAYw z%CiX<O428g>9)3)4FP}nH;I`2bMxO=_%_zd^{-8U59ucwbD9=*gKI_H@<jLd<QVsm zuqNuJ{=BgWd+EY?K%m0)fOJUG)JfG!zUD)YJ&&%c+xfn`B~`1T&#<1J!$YGD_U)6& ziMO_rOCfg1rdV00pnIe^2t<01ps>OEr6B&ZJFrs{R|yb|k50eULKrrWbd&|fWk=dc z{QRDm8awZ<o$mNcD0RV-(Emp`vIoifSmN7lG9z@F08B~K7SIemunKV3KkSQ3%QL<0 zolCkBbWReN^=bi?{N<~u6@RPBoFw<{T<MC2N?Zu6p=ogdYA^9=SFm<QkAfVg1KJ1u zb{C|P6jBDda0?rFIGO}m1oh^m5;QS4F}fH5YY@dXWf&5dM0_)$!VT+FZ{UAT`Ho?c zGbxV|B}@mzDnY#Jukla`X+v0-f;YNeIn;v|8;Ko|Ah<vA39KeUE1}sEfFIbk>iBH< zw$~CUj)DR%hN5Pu!(!%ZYOk%e3=vz471#O%N=`cu;~KlU4nnR*&%$6d`hmnb`S32y zD6)EkMQPjOz>A@Gq3CKGH9r&4dM{9&dxL~3&=Wntd>M)A^-5-u7(O|eMV5DI6Gn+C zA4Z}lMMiXthq82C`nZg211;M~z!;p`%v-m**&{u&yNT$T?b7Sw{FAXjB{CK`EL87I ziWX<7zyl=GG=!^sXYvga4a2mk-C>Q4%lSx*Du^!DUZBUFdVc<&nvi2n+oH&QfEC>9 zkvN;Mb33vASGP8P{j!Q7Rb#nM5)A)97WwxK{XNSG;xq(znfz#yN+xOR?Jb5#524db zC6i0nQ4U>RIIjntcUZ1vZwQ{!ZWWb2IrYAnb7~uRIPuNLO|nhH+4J+C5-cO`d{{9q z14UvX)?6J)+_+_h51_?zKB?JcHH1cg+k7BVSk1?rw!va2{D^lc30oc;jg_yasekHq zfO@CIlc(mC+E<FXVQuusk*u_M2ri_BUi+f{n8Z&9^=9Tmo|$DehIFN(?=<^ds#mf0 zM%rF!?d5dta%keYmw`2W(R-Gq&P*9z8wEz(x-}6lcra=0hL>{amJob&TCz3!WzyfA zE<N>jJV*pM(1L0444q5m<vP<pjaE}7iWl&yIxxou0uLHo)Jngoqo3ui8GroM0>7Hy z+i`JB9|h=?$xAos#wY`Ef(kEy`k4mn`rG$~fjj}?Vqj0e4`Di^!K;3l+I#*^4+h6t ztf74^ne~M|ko-%jDxB6<*ieNx#{29uHf0AQ6g})yyaMzXY~sEl^S7G)8b3Q8`Pss8 z^?{zEO{xMXdt+n6cM^gY`1Wj>;lS)Sg9oCf<?-$6pS02(e?|6Do;N*4i1?{a&*>eX z3qd#G;z>IY!%;IoyM;q~V=3B_r=$X{gO^MB4}=eq$?~^wIkT$~U0tcUyp2P%GnyjX zR`M>N682n0ia}=E2*RuGc(;cEI1Ix8V+C|g8W*b)rCg-=5wU1+rbEcK<eg{AsZ59Q z#pP0c>ab^chRJjjJW%caTjrbp%8)Gt!5ZQ9+?L8)Ns_rN)>2SbNb%PJU&JC7EtAu_ z^=E*7?iTpIrPQ1q`H@tbmoLW68~e4O6008S0cnIhFsR|H?wK^eDCHi{uE6^<UGitN zZ%&wnM#!hO;obN=+$26l!;ZTaCH|g|VoEuUF+Y!|QUo>ig)}a$Dt?dos%{!S(cqrC zs9?kU*Rl;0r*`;9oZD7OfHC*g^Cjjue5ri`Gom3^78ZnV`5N{P8JigP?SmOGY$c5; zDDrPg+?MFF_$Cs*88>cq5eoip6d?)|_A%A3yqd3J_IawRPytp{`3>6f1#jURa~>?0 zjZ=5>dODAq;PX4hXc(_`t_=DzASWAWFOK{QT)3lL+ty^CVZ*UW_PscQ*GtNfS%(Dd zs6?*#X~2O%lbWYWaC>CK>3u$waD8XzRI)Z*IzaRc0X`Z0?m$CCxygBHxo$K2D^fAI z_3NH}h?O#*!_oN0$`g&NUi&$Cg4QKxSwjhysJz{^VyX=sgrr|<4!$1St4(**OKO*i zP@?`>c)S4=xaV3afygdhzYeUuto=b5Z#R~gFk_d}D@F$~9~YQahZVCv3rN#EKUf?4 zuMOXOea&78hfJvb6cm7JQ@4NAr~TXRSupqdz>@%(3zLl(V2OTCFj4ZEPZ=KMpfGLD zJ+~u$Lzr0$`;$QyUs8faqjDU0rV9p=tV0aaiJNZa7JUUhuKf<4IAjv;<KzjnW=Ddf zY}5$7EbA%$!j*w+%VvhYNERQG^ylr@(}Ogl8zEU(lqj=M2O^U3I@{+cgBUDY=U0SJ zpYHa0l(v8QyF>UcocXnyr>V)#tvD<D>$O;v4O6j#b&$j53RtALV|;;MR%++0VX+$S zJ)JZ;_mC`hr=WDNk6L@s{yCcZF$S&rM$s_q;Mte(e)mN8S~UPwyukW_bEC_fZ|`f- z7u7Hj-iKtdgkDL~x>Q-yJqQ^VE5($uQgIf<f*s!N;L#;X2g6~hTPfhKCM;V7D-3d% z?5ehAzJl*HYkw)$77!rj)N4-{ayhE1jTPTRedcBM>o{Pyqv_pTG0>}lr!{8I<#-Jz zFIDeHFL0*!h|?z<22ZI`2P9Orl{eoV2Y7I}d;ixVz{mGOtIn%A8j??-BY);(9j}*y zuNCZBz9Y7YuQwix&K{{~GW6DgMkjLxc*73wV4rhFaH^cU@or@*Gl+X`*Aia%HfPw% z)~Cpe$;FQ@A~);qNw4Xwe0+Iw)P++afTPfP=FW0d@wGO$cF|UhGOgkgY=0M5KrWu@ zZ2}V_#2B%vuumgYXjhb%t03*7v#3JYBm9}~P|(R`bDjZ~E8wwr*@0Y<TN`6^3{dA; zywg`<e$4sA=$TO$P+vu^Y97M6R_?%dc#3-x7r<)`PacN*wkrPRr~FzQVK?46@jfGH zgq)vqGCtbqJT>V<8VwNQR}h9l3KoZziklD+V5ffg$LdMb#tHi{Y>`h5qq=yyCPtKq zE!ls!fo7%)VnxEuC`cl9MNPtJ4N?K0v~(t7dd|2sFmhRDQ4<$;1@@wS)RQW)sNpPg z=#^Esd(SB5PFO}B8p2={LH2N*YG0ehPT9AW2UCD27Eke$Ex?1bJ=$(94`naMh!C+T z-Qx(?lJtPJ!26Dw;Wo*0qVoG>&^J$j%N;#sx-*|2Ty_EL>F>SmmYI|nEc=Jj;}DFv z_8=m#ebyT)(|t@qk~V36bTwdiLQYItcD$zJ9{*1E#N*9eA5dF`xMruP;jvTttY3ba zQ4au!;UlK57c^0$Q6~Uc^J2X8PR$BKTEJX_1?3xKEgujEz1gi}w`CytD{B80&G#{? z!1A}YALLM4sryc$W2|D0?nSL0^SHfk(9z;HtJTr<Amv+2|DCxQQA&e&%R}!T{?mHv zUs5*AiTZkDh`xfBNU&N`WqtFlfaIJ<Hjy^I#k2X*T|2X%H@hfle3A0Rj6qy8BsOu~ z%?r;@W<}-aM@N*UmD5M7ALubv4~Er16#Zega?@s;<fsq9hrSd!wv3dN;ps1Hg8z-G z{hJas4sNG~n_)p@?ss{btpkT<(|VU4#&u9$wse(qDmap|GBe9VSw}da2%8;Wj6SQk zLsbPHLQcdeW>q3z%uB$JPLGK!eyDh&g8ORU_I;xa_S~>=7##{x_V0ls>&gS@NEQ1? z&+<jJluE|cTE9AXI&J#>Q@S#SoU!w&3OYR0`&OF_8vp3ee}=cMBjfMA4ygt#{$CZt z7LO5jax|pkf}d2b=$jLGET+!kp?GvLyxcP2+k0ZaKxnr?owxs>LG%#B*LkgzemL<$ zmhrhHE+lZit?BL^r1e=IjWZYAee<t}e{*MYpPbMlX^Bg)MnV&z;^$Ni$}8nUSMl}1 zqTo|#h!11(&O0V+hc^uOh1)0WR7OOoGBH%9QlbzSXCWWfLqDFl2-vve`cTfyF}^r4 z$9z#+vQ=E_*E)BngA0oD+H$F|HK&|NbRp!G3<xY;{yG$QbJIwHq)lf~3hR<>ZCghc z!U7+Z>2hDT9_$y^y?M**ERl6Gvm(VU#l**eR~bZug&+zfF*>88=wKFuth-HMSZSYF zkH||xnZK%<Rk*mr;&*u!M$5;X6an_t-|kzHw36=bd?@VZzzvBT83&dJ4Sqm1od4)` z4PNGSOLEVQYk1)(iW9Qc0N26bo*2i$5ZouvY-r^Gvd$KCt~8R{c;ZEbdlc{iO@a`B zGeoRLD3A`&^%?k*@T%ZRO9#9&(EwQj4Lnx`4&u+|RWa<wx*%Eci^&gf`{x+a%mZR7 zb<Q~dJo`iVM8pa|ab>33^tOBc^rX6>PVP;1##^d!3D-6%$J)8H(dB+Xa^<h8uo4w! z?7`%V?^(sa$;x0VeK3l@tEUdRO3=~uKa<Vg+U%TbqkemJkiYZrc1^`2Cohak*3fth z_g*Z51w-(@Zd<juZs&p}<PGH`C38_gqd(UrOCy3hdhft@Zcs!`ROzH_^%%Z897K6R z9MzuE9>@I*O{9}>)x^~!M_IgzC_H@qR<~yWuWtS~{+c9N5oK+bxk9;9%pFS@)Dx9J zk@CjGpi!@DwQZCq-|`1ee4SS%@Uim$1ok+cs3-pr0{;cfcgeZ3pekCssfraMo7??; zM7`Q)rT*{A{yqCZX~SM+Q-qii;<EbK`W@?YXQ7~@=lq!BU-}XY@72U8p{%~8Ap65b zhZJ6KfyawFvEzI`#^5D_qY&j=NX^st=r({@e-X{H!0}C`m#s1cnVOMwmnG!$Y(AW{ z_a~CkSZk-JE5;K2VCPV@uTilQ%wD+XX<{?o)ZHuaZ*)aS;CVr}%+yI<UQ=W5e<9vV z<T2V_F*35k&f^vGyd4Kj&Km<>gu40ZKGiUh+J(D(zW5-&@~g#V{R+djqTs?Wc4M!Q z7wtr{8KnDi8=<R@0~UB7BxFG7w#<p6FEx_X^N==P_G00WSQE~0FmlJ4U|xtj*i-ox zf|G!tuGnCz`0z)nY~k&P=h_Qd^ImjPo#MxOx3Skq;|`ZEDP|f7UElB*Xqs96aezMc z)Kp^7-kS2aDg(+W2Y9Kt&S0bcGY}`C=|>y_B}5oBqH^7p9oX>`yRIegK2{UJ<{sS9 z$b1QdJDK4)34Mh5QO`o2VZ^YFufiarXNTOe**p|?k5_tb(B4y0xHM=6@?DsROF{2- z?+gu&M#bqX+?8MMB|{fB$w5m1hruZ@;2C9^7BO>^)r<9RInD0uzqZ&bK%2gF8T7`g z;!5wp$@j49D`yefJf^jzGTXXm86H)KeSO`2s&#fvLn0-+XdCweP`(!FJv5!0H|*t6 zGTH6ki6wzXy|b6nwt(q_3~II92lU3T+!B;$Y3BIIqw0uTU&Ei!N4Z<PMU!#&^9b1O zoa#|!bw0Z5U2Wv&2Jt;0=u_^L`pHZ~&(hpTBX)gUGgaa5Eal@<{WdkVGzffmjn2D1 zTD3?3Brq3(>%&>n?h82XrtNu-<wtPTFlFBb@_>m%&7qj=kvB89E=&7A(@T`XYw4W! z25ndDJeRqb2<zN|cEgp4d^3ZMr4i|&y2$Wu8^EUHP(Hg8Rk_PxeZKqd^pC1J!<<NN zKdIp92BywzD8t3y!}?_XQgieWOLks=h4v!>I-#7H24dvAn2%oI4K&0t7tYl$4@JM| zp-?xihnuuM2QA0Ask~nTkebzvZ#EB%Nl2~4X^}xcDzi!--E42uP+D`|y8rwAeE0YP zmc6Rv*4FX&Z9;_FOYWpaQ4Su?t&-Zd`a}T~<y66K-X>|a{2kLq=gXB=A-0$7NQeJ# zvxn*)K|yOiN(B}Q&jUaO7XJL=>FR{@T~{PRo@<y?`_Zqw4t&17O2p3kl-CY_gpOM1 zv{=ZwF=7+HzBaEbCz37J1qDWzZAG^i{(tE{ML*pXjCFRQsy@sHZ+SE~0UDzLHy-~7 Dw9Jf5 literal 0 HcmV?d00001 diff --git a/_source/skins/v2/images/sprites_ie6.png b/_source/skins/v2/images/sprites_ie6.png new file mode 100644 index 0000000000000000000000000000000000000000..4389b65b8a3a1064dc31b992d48600a1fd9310ca GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^b_@*6FIbp?tdfL)8$gP&ILO_JVcj{Imq3nmfKQ0) zMIeKLAtJ&&EiJ9MIDFl@rbCC8T)jH?<HyI-Hu3ET$}yG%`2{mLJiCzw;v{*yyD)UH z%6b4foCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#Cc6N)w$hfF_Dg_zY&~5ZLn>~)z3G_6 zWXRAKcsl05PN&2Lry17=w5>~j%9!?$cb9%>(VJ~~yNv85TrYm#CeLZ5GPz^5=%3$L zN@K6*Un>0YYS+5gd~xe)-(5S($M8dP&FiW?dGl{G-qA0KE#Jt%p!dJ|;Q!_WbNBR> z#9se8yF_LWQ2nlE@#7oTy%vA<?-)Bs;r<Yy(s|c^Uwrv5u&y@zSIDWL*QehZT>X_8 zRkk&5+R80oOzMBty!_qzeDXYfo6Xl3U;g_xzrHr~SHP*5*PqMmul%Z;v3+aYvxO)M z@66v9AO720UM-@!ZO(qXOTWBc3(vY1|DyJB#e4UtY3^2amw%Pi*f;2X@s+SM<9mPT z0}?&Yb`HDww%oNlwqIgNEIxAerm3I6HupR7v9DQxVaae{@h`?Ze-)qp+ZFi+#P@Xd Kb6Mw<&;$Td5Zy`u literal 0 HcmV?d00001 diff --git a/_source/skins/v2/images/toolbar_start.gif b/_source/skins/v2/images/toolbar_start.gif new file mode 100644 index 0000000000000000000000000000000000000000..1774246c2ef37fa17cdcd971b3db38c713989818 GIT binary patch literal 105 zcmZ?wbhEHbWM&Xx*v!DNYH`cTMJ){#5iK=Q6WWtDtnAH5a-ToFbl$Y$qHMnfGs+q& z!l!hn{{R1<0Spv>vM@3*@G|Itcpx(vSj09kT*<OnVs>=evpCkexyN`q)l}NV7#XYq D|1u-x literal 0 HcmV?d00001 diff --git a/_source/skins/v2/mainui.css b/_source/skins/v2/mainui.css new file mode 100644 index 0000000..a1e920a --- /dev/null +++ b/_source/skins/v2/mainui.css @@ -0,0 +1,162 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_v2 .cke_editor +{ + display: inline-table; + width: 100%; +} +.cke_skin_v2 .cke_browser_webkit .cke_editor +{ + display: table; /* #6684 */ +} + +.cke_skin_v2 +{ + display: block; +} + +.cke_skin_v2 span.cke_browser_webkit, +.cke_skin_v2 span.cke_browser_gecko18 +{ + display: block; +} + +.cke_skin_v2 .cke_wrapper +{ + display: block; +} + +.cke_skin_v2 .cke_browser_opera .cke_editor +{ + display: table; +} + +.cke_skin_v2 .cke_top, +.cke_skin_v2 .cke_bottom, + .cke_shared .cke_skin_v2 +{ + background-color: #efefde; +} + +.cke_skin_v2 .cke_top +{ + border-top: solid 1px #fafaf5; + border-left: solid 1px #fafaf5; + border-right: solid 1px #696969; + border-bottom: solid 2px #696969; +} + +.cke_skin_v2 .cke_rtl .cke_top +{ + border-left: solid 1px #696969; + border-right: solid 1px #fafaf5; +} + +.cke_skin_v2 .cke_bottom +{ + border-left: solid 1px #696969; + border-right: solid 1px #696969; + border-bottom: solid 1px #696969; +} + +.cke_skin_v2 .cke_contents +{ + border: solid 1px #696969; + /* Prevent background content from penetrate through when switching between editing modes. (#4918) */ + background-color: white; +} + +.cke_skin_v2 .cke_focus +{ + outline: auto 5px -webkit-focus-ring-color; +} + +.cke_skin_v2 textarea.cke_source +{ + font-family: 'Courier New' , Monospace; + font-size: small; + background-color: #fff; + white-space: pre; +} + +.cke_skin_v2 .cke_browser_iequirks textarea.cke_source +{ + /* For IE6+Quirks only */ + _white-space: normal; +} + +.cke_skin_v2 .cke_resizer +{ + width: 12px; + height: 12px; + margin-top: 16px; + display: block; + float: right; + /* resizer.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -801px; + background-repeat: no-repeat; + cursor: se-resize; +} + +/* Adobe AIR doesn't support *-resize cursor shape. */ +.cke_skin_v2 .cke_browser_air .cke_resizer, +.cke_skin_v2 .cke_browser_air .cke_rtl .cke_resizer +{ + cursor: move; +} + +.cke_skin_v2 .cke_resizer_rtl +{ + cursor: sw-resize; + /* resizer_rtl.gif*/ + background-position: 0 -828px; + float: left; +} + +.cke_skin_v2 .cke_resizer_horizontal, +.cke_skin_v2 .cke_rtl .cke_resizer_horizontal +{ + cursor: e-resize; +} + +.cke_skin_v2 .cke_resizer_vertical, +.cke_skin_v2 .cke_rtl .cke_resizer_vertical +{ + cursor: n-resize; +} + +.cke_skin_v2 .cke_maximized .cke_resizer +{ + display: none; +} + +.cke_skin_v2 .cke_browser_ie6 .cke_contents textarea, +.cke_skin_v2 .cke_browser_ie7 .cke_contents textarea +{ + position: absolute; +} + +/* All voice labels are not displayed. */ +.cke_skin_v2 .cke_voice_label +{ + display: none; +} + +.cke_skin_v2 legend.cke_voice_label +{ + display: none; +} + +.cke_skin_v2 .cke_browser_ie legend.cke_voice_label +{ + position: absolute; + display: block; + width: 0; + height: 0; + overflow: hidden; +} diff --git a/_source/skins/v2/menu.css b/_source/skins/v2/menu.css new file mode 100644 index 0000000..716cc4c --- /dev/null +++ b/_source/skins/v2/menu.css @@ -0,0 +1,232 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_v2 .cke_contextmenu +{ + padding: 2px; +} + +.cke_skin_v2 .cke_menuitem a +{ + display:block; +} + +.cke_skin_v2 .cke_menuitem span +{ + cursor: default; +} + +.cke_skin_v2 .cke_menuitem a:hover, +.cke_skin_v2 .cke_menuitem a:focus, +.cke_skin_v2 .cke_menuitem a:active +{ + background-color: #8f8f73; + display:block; +} +.cke_hc .cke_menuitem a:hover, +.cke_hc .cke_menuitem a:focus, +.cke_hc .cke_menuitem a:active +{ + border: 2px solid; +} + +.cke_skin_v2 .cke_menuitem .cke_icon +{ + background-image: url(icons.png); + background-position: 100px; + background-repeat:no-repeat; + background-color: transparent; + width: 16px; + height: 16px; + float: left; +} + +.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon +{ + background-image: url(icons_rtl.png); +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_browser_ie .cke_skin_v2 .cke_menuitem .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie6 .cke_skin_v2 .cke_menuitem .cke_icon, +.cke_browser_ie .cke_skin_v2 .cke_menuitem.cke_noalphafix .cke_icon +{ + filter: ; +} + +.cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_browser_ie .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_browser_ie6 .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon, +.cke_browser_ie .cke_skin_v2 .cke_menuitem.cke_noalphafix .cke_disabled .cke_icon +{ + filter: ; +} + +.cke_skin_v2 .cke_menuitem .cke_icon_wrapper +{ + background-color: #e3e3c7; + border: solid 4px #e3e3c7; + width: 16px; + height: 16px; + float: left; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + clear: both; +} + +.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon_wrapper +{ + float: right; +} + +.cke_skin_v2 .cke_menuitem a:hover .cke_icon_wrapper, +.cke_skin_v2 .cke_menuitem a:focus .cke_icon_wrapper, +.cke_skin_v2 .cke_menuitem a:active .cke_icon_wrapper +{ + background-color: #9d9d9d; + border: solid 4px #9d9d9d; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.cke_skin_v2 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper, +.cke_skin_v2 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper, +.cke_skin_v2 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper +{ + background-color: #e3e3c7; + border: solid 4px #e3e3c7; +} + +.cke_skin_v2 .cke_menuitem .cke_label +{ + display:block; + padding-right: 3px; + padding-top: 5px; + padding-left: 4px; + height:19px; + margin-left: 24px; + background-color: #fff; +} +/* Set these after the document has been loaded and we know the dimensions*/ +.cke_skin_v2 .cke_frameLoaded .cke_menuitem .cke_label +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.cke_rtl .cke_skin_v2 .cke_menuitem .cke_label +{ + padding-right: 0; + margin-left: 0; + padding-left: 3px; + margin-right: 28px; +} + +.cke_skin_v2 .cke_menuitem a.cke_disabled .cke_label +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.30; /* Safari, Opera and Mozilla */ +} + +.cke_skin_v2 .cke_menuitem a:hover .cke_label, +.cke_skin_v2 .cke_menuitem a:focus .cke_label, +.cke_skin_v2 .cke_menuitem a:active .cke_label +{ + background-color: #8f8f73; + color: white; +} + +.cke_skin_v2 .cke_menuitem a.cke_disabled:hover .cke_label, +.cke_skin_v2 .cke_menuitem a.cke_disabled:focus .cke_label, +.cke_skin_v2 .cke_menuitem a.cke_disabled:active .cke_label +{ + background-color: transparent; + color: black; +} + +.cke_skin_v2 .cke_menuseparator +{ + background-color: #e3e3c7; + height: 2px; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + + _font-size: 0; +} + +.cke_skin_v2 .cke_menuarrow +{ + /* arrowright.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 0 -784px; + background-repeat: no-repeat; + height: 5px; + width: 3px; + float: right; + margin-right: 2px; + margin-top: 3px; +} + +/* Never applied */ +.cke_rtl .cke_skin_v2 .cke_menuarrow +{ + float: left; + margin-right: 0; + margin-left: 2px; + /* arrowleft.gif*/ + background-position: 0 -763px; +} + +.cke_skin_v2 .cke_menuarrow span +{ + display: none; +} + +.cke_hc .cke_skin_v2 .cke_menuarrow +{ + width: auto; + margin-top: 0; +} + +.cke_hc .cke_skin_v2 .cke_menuarrow span +{ + display: inline; +} + +/* #3766 In the context menu, long labels with second level menu get wrapped */ +.cke_browser_ie.cke_ltr .cke_skin_v2 .cke_menuarrow +{ + position: absolute; + right: 2px; +} + +.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuarrow +{ + position: absolute; + left: 2px; +} +/* END #3766 */ diff --git a/_source/skins/v2/panel.css b/_source/skins/v2/panel.css new file mode 100644 index 0000000..10cea35 --- /dev/null +++ b/_source/skins/v2/panel.css @@ -0,0 +1,212 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_v2 .cke_panel +{ + border: 1px solid #8f8f73; + background-color: #fff; + + width: 120px; + height: 100px; + + overflow:hidden; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Ideally we would use "inherit here"... but you know... IE :( */ +.cke_skin_v2 .cke_panel iframe +{ + width: 100%; + height: 100%; +} + +.cke_skin_v2 .cke_panel_frame .cke_label +{ + display: none; +} + +/* + * All the following styles are to be used inside the iframe that holds panel + * contents. We don't use the cke_skin_default there to avoid the reset to be + * active. + * This is not an issue as we'll never have two skins running inside the same + * panel iframe. + */ + +html.cke_skin_v2_container +{ + overflow: auto; + overflow-x: hidden; +} + +body.cke_panel_frame +{ + overflow: auto; +} + +ul.cke_panel_list +{ + list-style-type: none; + margin: 3px; + padding: 0px; + white-space: nowrap; +} + +li.cke_panel_listItem +{ + margin: 0px; +} + +.cke_panel_listItem a +{ + padding: 2px; + display: block; + border: 1px solid #fff; + color: inherit !important; + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; +} + +/* IE6 */ +* html .cke_panel_listItem a +{ + width : 100%; + + /* IE is not able to inherit the color, so we must force it to black */ + color: #000; +} + +/* IE7 */ +*:first-child+html .cke_panel_listItem a +{ + /* IE is not able to inherit the color, so we must force it to black */ + color: #000; +} + +.cke_panel_listItem.cke_selected a +{ + border: 1px solid #ccc; + background-color: #e9f5ff; +} + +.cke_panel_listItem a:hover, +.cke_panel_listItem a:focus, +.cke_panel_listItem a:active +{ + border-color: #316ac5; + background-color: #dff1ff; +} + +.cke_hc .cke_panel_listItem.cke_selected a, +.cke_hc .cke_panel_listItem a:hover, +.cke_hc .cke_panel_listItem a:focus, +.cke_hc .cke_panel_listItem a:active +{ + border-width: 3px; + padding: 0px; +} + +.cke_panel_grouptitle +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; + font-weight: bold; + white-space: nowrap; + background-color: #dcdcdc; + color: #000; + margin:0px; + padding:3px; +} + +.cke_panel_listItem p, +.cke_panel_listItem h1, +.cke_panel_listItem h2, +.cke_panel_listItem h3, +.cke_panel_listItem h4, +.cke_panel_listItem h5, +.cke_panel_listItem h6, +.cke_panel_listItem pre +{ + margin-top: 3px; + margin-bottom: 3px; +} + +.cke_skin_v2 .cke_button_textcolor_panel, +.cke_skin_v2 .cke_button_bgcolor_panel +{ + width: 150px; + height: 135px; +} + +.cke_colorblock +{ + padding: 3px; + font-size: 11px; + font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif; +} + +.cke_colorblock, +.cke_colorblock a +{ + text-decoration: none; + color: #000; +} + +span.cke_colorbox +{ + width: 10px; + height: 10px; + border: #808080 1px solid; + float: left; +} + +.cke_rtl span.cke_colorbox +{ + float: right; +} + +a.cke_colorbox +{ + border: #fff 1px solid; + padding: 2px; + float: left; +} + +.cke_rtl a.cke_colorbox +{ + float: right; +} + +a:hover.cke_colorbox, +a:focus.cke_colorbox, +a:active.cke_colorbox +{ + border: #316ac5 1px solid; + background-color: #dff1ff; +} + +a.cke_colorauto, +a.cke_colormore +{ + border: #fff 1px solid; + padding: 2px; + display: block; + cursor: pointer; +} + +a:hover.cke_colorauto, +a:hover.cke_colormore, +a:focus.cke_colorauto, +a:focus.cke_colormore, +a:active.cke_colorauto, +a:active.cke_colormore +{ + border: #316ac5 1px solid; + background-color: #dff1ff; +} diff --git a/_source/skins/v2/presets.css b/_source/skins/v2/presets.css new file mode 100644 index 0000000..775dece --- /dev/null +++ b/_source/skins/v2/presets.css @@ -0,0 +1,50 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/* "Source" button label */ +.cke_skin_v2 .cke_button_source .cke_label +{ + display: inline; /* FF2 */ + display: inline-block; +} + +/* "Styles" panel size */ +.cke_skin_v2 .cke_styles_panel +{ + width: 150px; + height: 170px; +} + +/* "Format" panel size */ +.cke_skin_v2 .cke_format_panel +{ + width: 150px; + height: 170px; +} + +/* "Font" panel size */ +.cke_skin_v2 .cke_font_panel +{ + width: 150px; + height: 170px; +} + +/* "Font Size" panel size */ +.cke_skin_v2 .cke_fontSize_panel +{ + height: 170px; +} + +/* "Font Size" combo width */ +.cke_skin_v2 .cke_fontSize .cke_text +{ + width: 20px; +} + +/* "Font Size" combo width (IE Quirks) */ +.cke_skin_v2 .cke_browser_iequirks .cke_fontSize .cke_text +{ + width: 32px; +} diff --git a/_source/skins/v2/reset.css b/_source/skins/v2/reset.css new file mode 100644 index 0000000..dad15fb --- /dev/null +++ b/_source/skins/v2/reset.css @@ -0,0 +1,84 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Reset and Default Values + */ +.cke_skin_v2 *, +.cke_skin_v2 a:hover, +.cke_skin_v2 a:link, +.cke_skin_v2 a:visited, +.cke_skin_v2 a:active +{ + margin: 0; + padding: 0; + border: 0; + background: transparent; + text-decoration: none; + font: normal normal normal 100% Sans-Serif; + width: auto; + height: auto; + border-collapse: collapse; + text-align: left; + vertical-align: baseline; + white-space: nowrap; + cursor: auto; + color: #000; + + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; +} + +.cke_skin_v2 .cke_rtl *, +.cke_skin_v2 .cke_rtl a:hover, +.cke_skin_v2 .cke_rtl a:link, +.cke_skin_v2 .cke_rtl a:visited, +.cke_skin_v2 .cke_rtl a:active, +.cke_rtl .cke_skin_v2 *, +.cke_rtl .cke_skin_v2 a:hover, +.cke_rtl .cke_skin_v2 a:link, +.cke_rtl .cke_skin_v2 a:visited, +.cke_rtl .cke_skin_v2 a:active +{ + text-align: right; +} + +.cke_skin_v2 iframe +{ + vertical-align: inherit; /** For IE */ +} + +.cke_skin_v2 textarea +{ + white-space: pre; +} + +.cke_skin_v2 .cke_browser_gecko textarea +{ + cursor: text; +} + +.cke_skin_v2 .cke_browser_gecko textarea[disabled] +{ + cursor: default; +} + +.cke_skin_v2 input[type="text"], +.cke_skin_v2 input[type="password"] +{ + cursor: text; +} + +.cke_skin_v2 input[type="text"][disabled], +.cke_skin_v2 input[type="password"][disabled] +{ + cursor: default; +} + +.cke_skin_v2 fieldset +{ + padding: 10px; + border: 2px groove #E0DFE3; +} diff --git a/_source/skins/v2/richcombo.css b/_source/skins/v2/richcombo.css new file mode 100644 index 0000000..8b4fd45 --- /dev/null +++ b/_source/skins/v2/richcombo.css @@ -0,0 +1,302 @@ +/* Special Combo */ + +.cke_skin_v2 .cke_rcombo +{ + display: inline-block; + margin-left: 2px; + margin-right: 2px; + margin-top: 2px; + vertical-align: top; +} + +.cke_skin_v2 .cke_browser_ie .cke_rcombo +{ + #display: inline; +} + +.cke_skin_v2 .cke_rcombopanel +{ + border: 1px solid #316ac5; + -moz-border-radius-topleft: 0; + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + /*margin-left: 1px;*/ + /*_margin-left: 0;*/ +} + +.cke_skin_v2 .cke_rcombo a +{ + display: inline-block; + float: left; + + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.cke_skin_v2 .cke_rtl .cke_rcombo a +{ + float: right; +} + +.cke_skin_v2 .cke_hc .cke_rcombo a +{ + filter: alpha(opacity=100); /* IE */ + opacity: 1.0; /* Safari, Opera and Mozilla */ +} + +.cke_skin_v2 .cke_rcombo .cke_label +{ + float: left; + line-height: 20px; + line-height: 22px\9; + height: 22px; + padding-left: 4px; + padding-right: 5px; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + background-color: #f1f1e3; /* Because of IE6+ClearType */ + cursor: default; +} + +.cke_skin_v2 .cke_rtl .cke_rcombo .cke_label +{ + float: right; + padding-right: 4px; + padding-left: 5px; +} + +.cke_skin_v2 .cke_hc .cke_rcombo .cke_label +{ + filter: alpha(opacity=100); + opacity: 1.0; +} + +.cke_skin_v2 .cke_rcombo .cke_inline_label +{ + color: #fff; +} + +.cke_skin_v2 .cke_rcombo .cke_text +{ + border: 1px solid #8f8f73; + background-color: #fff; + height: 12px; + width:60px; + padding-top: 4px; + padding-bottom: 4px; + padding-left: 5px; + padding-right: 5px; + text-overflow: ellipsis; + overflow: hidden; + display: inline-block; + vertical-align: top; + cursor: default; +} + +.cke_skin_v2 .cke_ltr .cke_rcombo .cke_text +{ + -moz-border-radius-topleft: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +.cke_skin_v2 .cke_rtl .cke_rcombo .cke_text +{ + -moz-border-radius-topright: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +/* Fix for IE height */ +.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_text +{ + height: 22px; +} + +.cke_skin_v2 .cke_rcombo .cke_openbutton +{ + display: inline-block; + border-top: 1px solid #8f8f73; + border-bottom: 1px solid #8f8f73; +} + +.cke_skin_v2 .cke_rcombo .cke_openbutton .cke_icon +{ + display: inline-block; + background-position: 5px -715px; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: no-repeat; + + width: 14px; + height: 20px; +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_openbutton .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_openbutton .cke_icon +{ + filter: ; +} +.cke_skin_v2 .cke_hc .cke_rcombo .cke_openbutton .cke_icon +{ + background: none; + filter: ; +} + +.cke_skin_v2 .cke_ltr .cke_rcombo .cke_openbutton +{ + border-right: 1px solid #8f8f73; + -moz-border-radius-topright: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.cke_skin_v2 .cke_rtl .cke_rcombo .cke_openbutton +{ + border-left: 1px solid #8f8f73; + -moz-border-radius-topleft: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +.cke_skin_v2 .cke_rcombo .cke_off a:hover, +.cke_skin_v2 .cke_rcombo .cke_off a:focus, +.cke_skin_v2 .cke_rcombo .cke_off a:active, +.cke_skin_v2 .cke_rcombo .cke_on a +{ + filter: alpha(opacity=100); /* IE */ + opacity: 1; /* Safari, Opera and Mozilla */ +} + +.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_text, +.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_text, +.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_text, +.cke_skin_v2 .cke_rcombo .cke_on .cke_text +{ + border-color: #316ac5; +} + +.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_openbutton, +.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_openbutton, +.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_openbutton, +.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton +{ + border-color: #316ac5; + background-color: #dff1ff; +} + +.cke_skin_v2 .cke_rcombo .cke_on .cke_text +{ + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton +{ + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; +} + +.cke_skin_v2 .cke_rcombo .cke_disabled .cke_label +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.3; /* Safari, Opera and Mozilla */ +} + +.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_label +{ + filter: alpha(opacity=70); + opacity: 0.7; +} + +.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text, +.cke_skin_v2 .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=50); /* IE */ + opacity: 0.5; /* Safari, Opera and Mozilla */ +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50); +} +.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=50); +} + +.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_text, +.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton +{ + filter: alpha(opacity=80); + opacity: 0.8; +} + +.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text +{ + color: #fff; +} + +/* Firefox 2 & WebKit Section */ + +.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo, +.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_label, +.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_text, +.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_openbutton, +.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_label, +.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_text, +.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_openbutton +{ + display: block; + float: left; +} + +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton, +.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label, +.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text, +.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton +{ + float: right; +} + +/*** IE ***/ + +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo, +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo a, +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label +{ + float: none; +} + +.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_openbutton +{ + height: 22px; +} + +.cke_skin_v2 .cke_rtl .cke_rcombo .cke_font .cke_text, +.cke_skin_v2 .cke_rtl .cke_rcombo .cke_fontSize .cke_text +{ + direction: ltr; +} diff --git a/_source/skins/v2/skin.js b/_source/skins/v2/skin.js new file mode 100644 index 0000000..26d8f09 --- /dev/null +++ b/_source/skins/v2/skin.js @@ -0,0 +1,70 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.skins.add( 'v2', (function() +{ + return { + editor : { css : [ 'editor.css' ] }, + dialog : { css : [ 'dialog.css' ] }, + separator : { canGroup: false }, + templates : { css : [ 'templates.css' ] }, + margins : [ 0, 14, 18, 14 ] + }; +})() ); + +(function() +{ + CKEDITOR.dialog ? dialogSetup() : CKEDITOR.on( 'dialogPluginReady', dialogSetup ); + + function dialogSetup() + { + CKEDITOR.dialog.on( 'resize', function( evt ) + { + var data = evt.data, + width = data.width, + height = data.height, + dialog = data.dialog, + contents = dialog.parts.contents; + + if ( data.skin != 'v2' ) + return; + + contents.setStyles( + { + width : width + 'px', + height : height + 'px' + }); + + if ( !CKEDITOR.env.ie || CKEDITOR.env.ie9Compat ) + return; + + // Fix the size of the elements which have flexible lengths. + setTimeout( function() + { + var innerDialog = dialog.parts.dialog.getChild( [ 0, 0, 0 ] ), + body = innerDialog.getChild( 0 ), + bodyWidth = body.getSize( 'width' ); + height += body.getChild( 0 ).getSize( 'height' ) + 1; + + // tc + var el = innerDialog.getChild( 2 ); + el.setSize( 'width', bodyWidth ); + + // bc + el = innerDialog.getChild( 7 ); + el.setSize( 'width', bodyWidth - 28 ); + + // ml + el = innerDialog.getChild( 4 ); + el.setSize( 'height', height ); + + // mr + el = innerDialog.getChild( 5 ); + el.setSize( 'height', height ); + }, + 100 ); + }); + } +})(); diff --git a/_source/skins/v2/templates.css b/_source/skins/v2/templates.css new file mode 100644 index 0000000..3c686fe --- /dev/null +++ b/_source/skins/v2/templates.css @@ -0,0 +1,87 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * Styles for the "templates" plugin. + */ + +.cke_skin_v2 .cke_tpl_list +{ + border: #dcdcdc 2px solid; + background-color: #ffffff; + overflow: auto; + width: 100%; + height: 220px; +} + +.cke_skin_v2 .cke_tpl_item +{ + margin: 5px; + padding: 7px; + border: #eeeeee 1px solid; + *width: 88%; +} + +.cke_skin_v2 .cke_tpl_preview +{ + border-collapse: separate; + text-indent:0; + width: 100%; +} +.cke_skin_v2 .cke_tpl_preview td +{ + padding: 2px; + vertical-align: middle; +} +.cke_skin_v2 .cke_tpl_preview .cke_tpl_preview_img +{ + width: 100px; +} +.cke_skin_v2 .cke_tpl_preview span +{ + white-space: normal; +} + +.cke_skin_v2 .cke_tpl_title +{ + font-weight: bold; +} + +.cke_skin_v2 .cke_tpl_list a:active .cke_tpl_item, +.cke_skin_v2 .cke_tpl_list a:hover .cke_tpl_item, +.cke_skin_v2 .cke_tpl_list a:focus .cke_tpl_item +{ + border: #ff9933 1px solid !important; + background-color: #fffacd !important; +} + +.cke_skin_v2 .cke_tpl_list a:active *, +.cke_skin_v2 .cke_tpl_list a:hover *, +.cke_skin_v2 .cke_tpl_list a:focus * +{ + cursor: pointer; +} + +/* IE6 contextual selectors childs won't get :hover transition until, + the hover style of the link itself contains certain CSS declarations.*/ +.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:active, +.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:hover, +.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:focus +{ + background-position: 0 0; +} + +.cke_skin_v2 .cke_tpl_list a:active .cke_tpl_item, +.cke_skin_v2 .cke_tpl_list a:hover .cke_tpl_item, +.cke_skin_v2 .cke_tpl_list a:focus .cke_tpl_item +{ + border-width: 3px; +} + +.cke_skin_v2 .cke_tpl_empty, .cke_tpl_loading +{ + text-align: center; + padding: 5px; +} diff --git a/_source/skins/v2/toolbar.css b/_source/skins/v2/toolbar.css new file mode 100644 index 0000000..f6a9512 --- /dev/null +++ b/_source/skins/v2/toolbar.css @@ -0,0 +1,465 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +@media print +{ + .cke_skin_v2 .cke_toolbox + { + display: none; + } +} + +.cke_skin_v2 .cke_browser_webkit .cke_toolbox, +.cke_skin_v2 .cke_browser_webkit .cke_toolbox > span +{ + white-space: normal; +} + +.cke_skin_v2 .cke_toolbox +{ + clear: both; + /* Define the padding-bottom otherwise the collapser button will not be clickable #4932*/ + padding-bottom: 1px; +} + +.cke_skin_v2 a.cke_toolbox_collapser, +.cke_skin_v2 a:hover.cke_toolbox_collapser +{ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 3px -739px; /* +3px +4px */ + background-repeat: no-repeat; + width: 11px; + height: 11px; + float: right; + border: outset 1px; + margin: 11px 2px 2px; + cursor: pointer; +} + +.cke_skin_v2 a.cke_toolbox_collapser span +{ + display: none; +} + +.cke_skin_v2 .cke_hc a.cke_toolbox_collapser span +{ + font-size: 10px; + font-weight: bold; + font-family: Arial; + display: inline; +} + +.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser, +.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser +{ + float: left; +} + +.cke_skin_v2 a.cke_toolbox_collapser_min, +.cke_skin_v2 a:hover.cke_toolbox_collapser_min +{ + /* arrowleft.gif*/ + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-position: 4px -760px; /* +4px +3px */ + background-repeat: no-repeat; + margin: 2px; +} + +.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser_min, +.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser_min +{ + /* arrowright.gif*/ + background-position: 4px -781px; /* +2px +3px */ +} + +.cke_skin_v2 .cke_toolbar +{ + padding-top: 1px; + padding-bottom: 1px; + display: inline-block; + float: left; +} + +.cke_skin_v2 .cke_rtl .cke_toolbar +{ + float: right; +} + +.cke_skin_v2 .cke_toolgroup +{ + display: inline-block; + float: left; +} + +.cke_skin_v2 .cke_browser_ie .cke_toolgroup +{ + #float: none; + #display: inline; +} + +.cke_skin_v2 .cke_rtl .cke_toolgroup +{ + float: right; +} + +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup +{ + #float: none; +} + +.cke_skin_v2 .cke_separator +{ + display: inline-block; + float: left; + border-left: solid 1px #999; + margin: 4px 2px; + height: 16px; +} + +.cke_skin_v2 .cke_browser_ie .cke_separator +{ + #float: none; + #display: inline; +} + +.cke_skin_v2 .cke_rtl .cke_separator +{ + float: right; +} + +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator +{ + #float: none; +} + +.cke_skin_v2 .cke_break +{ + clear: left; +} + +.cke_skin_v2 .cke_rtl .cke_break +{ + clear: right; +} + +.cke_skin_v2 .cke_toolbar_start +{ + display: inline-block; + background-image: url(images/toolbar_start.gif); + background-repeat: no-repeat; + margin: 4px 2px 0 2px; + width: 3px; + height: 20px; + float: left; +} + +.cke_skin_v2 .cke_browser_ie .cke_toolbar_start +{ + #float: none; + #display: inline; +} + +.cke_skin_v2 .cke_rtl .cke_toolbar_start +{ + float: right; +} + +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start +{ + #float: none; +} + +.cke_skin_v2 .cke_toolbar_end +{ + display: inline-block; + float: left; +} + +.cke_skin_v2 .cke_browser_ie .cke_toolbar_end +{ + #float: none; + #display: inline +} + +.cke_skin_v2 .cke_rtl .cke_toolbar_end +{ + float: right; +} + +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end +{ + #float: none; +} + +/*#7181*/ +.cke_skin_v2 .cke_browser_ie9 .cke_rtl .cke_separator, +.cke_skin_v2 .cke_browser_ie9 .cke_rtl .cke_toolbar_start, +.cke_skin_v2 .cke_browser_ie9 .cke_rtl .cke_toolbar_end +{ + vertical-align:middle; +} + +.cke_skin_v2 .cke_button a, +.cke_skin_v2 .cke_button a:hover, +.cke_skin_v2 .cke_button a:focus, +.cke_skin_v2 .cke_button a:active, +.cke_skin_v2 .cke_button a.cke_off +{ + border: solid 1px #efefde; + display: inline-block; + border-radius: 3px; + outline: none; + padding-top: 2px; + padding-left: 4px; + padding-right: 4px; + padding-bottom: 2px; + height: 18px; + cursor: default; +} + +.cke_skin_v2 .cke_button a, +.cke_skin_v2 .cke_button a.cke_off +{ + background-color: #efefde; + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +.cke_skin_v2 .cke_hc .cke_button a, +.cke_skin_v2 .cke_hc .cke_button a.cke_off +{ + opacity: 1.0; + filter: alpha(opacity=100); +} + +.cke_skin_v2 .cke_button a.cke_on +{ + border: solid 1px #316ac5; + background-color: #a3d7ff; + filter: alpha(opacity=100); /* IE */ + opacity: 1; /* Safari, Opera and Mozilla */ +} + +.cke_skin_v2 .cke_button a.cke_disabled * +{ + filter: alpha(opacity=30); /* IE */ + opacity: 0.3; /* Safari, Opera and Mozilla */ +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_v2 .cke_browser_ie .cke_button a.cke_disabled *, +.cke_skin_v2 .cke_browser_ie a:hover.cke_button .cke_disabled * +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30); +} +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *, +.cke_skin_v2 .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled * +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30); +} +.cke_skin_v2 .cke_browser_ie6 .cke_button a.cke_disabled *, +.cke_skin_v2 .cke_browser_ie6 a:hover.cke_button .cke_disabled *, +.cke_skin_v2 .cke_browser_ie .cke_button.cke_noalphafix a.cke_disabled * +{ + filter: alpha(opacity=30); +} + +.cke_skin_v2 .cke_hc .cke_button a.cke_disabled *, +.cke_skin_v2 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled * +{ + filter: alpha(opacity=60); + opacity: 0.6; +} + +.cke_skin_v2 .cke_button a:hover, +.cke_skin_v2 .cke_button a:focus, +.cke_skin_v2 .cke_button a:active /* IE */ +{ + border: solid 1px #316ac5; + background-color: #dff1ff; + padding: 2px 4px; +} + +.cke_skin_v2 .cke_hc .cke_button a:hover, +.cke_skin_v2 .cke_hc .cke_button a:focus, +.cke_skin_v2 .cke_hc .cke_button a:active /* IE */ +{ + padding: 0 2px !important; + border-width: 3px; +} + +.cke_skin_v2 .cke_button .cke_icon +{ + background-image: url(icons.png); + background-position: 100px; + background-repeat:no-repeat; + margin-top:1px; + width: 16px; + height: 16px; + display: inline-block; + cursor: default; +} + +.cke_skin_v2 .cke_rtl .cke_button .cke_icon +{ + background-image: url(icons_rtl.png); +} + +/* IE with zoom != 100% will distort the icons otherwise #4821 */ +.cke_skin_v2 .cke_browser_ie .cke_button .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button .cke_icon +{ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'); +} +.cke_skin_v2 .cke_browser_ie6 .cke_button .cke_icon, +.cke_skin_v2 .cke_browser_ie6 .cke_rtl .cke_button .cke_icon, +.cke_skin_v2 .cke_browser_ie .cke_button.cke_noalphafix .cke_icon, +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button.cke_noalphafix .cke_icon +{ + filter: ; +} + +.cke_skin_v2 .cke_button .cke_label +{ + cursor: default; + display: none; + padding-left: 3px; + vertical-align:middle; +} + +.cke_skin_v2 .cke_hc .cke_button .cke_label +{ + padding: 0; + display: inline-block; +} + +.cke_skin_v2 .cke_hc .cke_button .cke_icon +{ + display: none; +} + +.cke_skin_v2 .cke_accessibility +{ + position: absolute; + display: block; + width: 0; + height: 0; + overflow: hidden; +} + +.cke_skin_v2 .cke_button .cke_buttonarrow +{ + display: inline-block; + height: 17px; + width: 8px; + background-position: 2px -717px; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); + background-repeat: no-repeat; + cursor: default; +} + +.cke_skin_v2 .cke_rtl .cke_button .cke_buttonarrow +{ + background-position: 0 -717px; + background-image: url(images/sprites.png); + _background-image: url(images/sprites_ie6.png); +} + +/*** Firefox 2 ***/ + +.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar, +.cke_skin_v2 .cke_browser_gecko18 .cke_button a, +.cke_skin_v2 .cke_browser_gecko18 .cke_button a.cke_off, +.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_icon, +.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_buttonarrow, +.cke_skin_v2 .cke_browser_gecko18 .cke_separator, +.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar_start +{ + display: block; + float: left; +} + +.cke_skin_v2 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon +{ + display: none; +} + +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_separator, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start +{ + float: right; +} + +.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label, +.cke_skin_v2 .cke_browser_gecko18 .cke_break +{ + float: left; +} + +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl span.cke_inline_label +{ + float: right; +} + +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label, +.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_break +{ + float: right; +} + +.cke_skin_v2 .cke_browser_gecko18 .cke_separator +{ + margin-top: 4px; +} + +.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label +{ + padding-top: 3px; +} + +/*** IE6 ***/ + +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup, +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator, +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start, +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end +{ + float: none; +} + +/*** IE8 ***/ + +.cke_skin_v2 .cke_browser_ie8 .cke_toolbar, +.cke_skin_v2 .cke_browser_ie8 .cke_toolgroup +{ + vertical-align: top; +} + +.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar, +.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup +{ + /* revert previous */ + vertical-align: baseline; +} + +/* Fix cursor shape consistency on toolbar combos (#4031) */ +.cke_skin_v2 .cke_browser_ie .cke_rcombo, +.cke_skin_v2 .cke_browser_ie .cke_rcombo * +{ + cursor: default; +} diff --git a/_source/themes/default/theme.js b/_source/themes/default/theme.js new file mode 100644 index 0000000..f7ff8e4 --- /dev/null +++ b/_source/themes/default/theme.js @@ -0,0 +1,395 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @name CKEDITOR.theme + * @class + */ + +CKEDITOR.themes.add( 'default', (function() +{ + var hiddenSkins = {}; + + function checkSharedSpace( editor, spaceName ) + { + var container, + element; + + // Try to retrieve the target element from the sharedSpaces settings. + element = editor.config.sharedSpaces; + element = element && element[ spaceName ]; + element = element && CKEDITOR.document.getById( element ); + + // If the element is available, we'll then create the container for + // the space. + if ( element ) + { + // Creates an HTML structure that reproduces the editor class hierarchy. + var html = + '<span class="cke_shared "' + + ' dir="'+ editor.lang.dir + '"' + + '>' + + '<span class="' + editor.skinClass + ' ' + editor.id + ' cke_editor_' + editor.name + '">' + + '<span class="' + CKEDITOR.env.cssClass + '">' + + '<span class="cke_wrapper cke_' + editor.lang.dir + '">' + + '<span class="cke_editor">' + + '<div class="cke_' + spaceName + '">' + + '</div></span></span></span></span></span>'; + + var mainContainer = element.append( CKEDITOR.dom.element.createFromHtml( html, element.getDocument() ) ); + + // Only the first container starts visible. Others get hidden. + if ( element.getCustomData( 'cke_hasshared' ) ) + mainContainer.hide(); + else + element.setCustomData( 'cke_hasshared', 1 ); + + // Get the deeper inner <div>. + container = mainContainer.getChild( [0,0,0,0] ); + + // Save a reference to the shared space container. + !editor.sharedSpaces && ( editor.sharedSpaces = {} ); + editor.sharedSpaces[ spaceName ] = container; + + // When the editor gets focus, we show the space container, hiding others. + editor.on( 'focus', function() + { + for ( var i = 0, sibling, children = element.getChildren() ; ( sibling = children.getItem( i ) ) ; i++ ) + { + if ( sibling.type == CKEDITOR.NODE_ELEMENT + && !sibling.equals( mainContainer ) + && sibling.hasClass( 'cke_shared' ) ) + { + sibling.hide(); + } + } + + mainContainer.show(); + }); + + editor.on( 'destroy', function() + { + mainContainer.remove(); + }); + } + + return container; + } + + return /** @lends CKEDITOR.theme */ { + build : function( editor, themePath ) + { + var name = editor.name, + element = editor.element, + elementMode = editor.elementMode; + + if ( !element || elementMode == CKEDITOR.ELEMENT_MODE_NONE ) + return; + + if ( elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ) + element.hide(); + + // Get the HTML for the predefined spaces. + var topHtml = editor.fire( 'themeSpace', { space : 'top', html : '' } ).html; + var contentsHtml = editor.fire( 'themeSpace', { space : 'contents', html : '' } ).html; + var bottomHtml = editor.fireOnce( 'themeSpace', { space : 'bottom', html : '' } ).html; + + var height = contentsHtml && editor.config.height; + + var tabIndex = editor.config.tabIndex || editor.element.getAttribute( 'tabindex' ) || 0; + + // The editor height is considered only if the contents space got filled. + if ( !contentsHtml ) + height = 'auto'; + else if ( !isNaN( height ) ) + height += 'px'; + + var style = ''; + var width = editor.config.width; + + if ( width ) + { + if ( !isNaN( width ) ) + width += 'px'; + + style += "width: " + width + ";"; + } + + var sharedTop = topHtml && checkSharedSpace( editor, 'top' ), + sharedBottoms = checkSharedSpace( editor, 'bottom' ); + + sharedTop && ( sharedTop.setHtml( topHtml ) , topHtml = '' ); + sharedBottoms && ( sharedBottoms.setHtml( bottomHtml ), bottomHtml = '' ); + + var hideSkin = '<style>.' + editor.skinClass + '{visibility:hidden;}</style>'; + if ( hiddenSkins[ editor.skinClass ] ) + hideSkin = ''; + else + hiddenSkins[ editor.skinClass ] = 1; + + var container = CKEDITOR.dom.element.createFromHtml( [ + '<span' + + ' id="cke_', name, '"' + + ' class="', editor.skinClass, ' ', editor.id, ' cke_editor_', name, '"' + + ' dir="', editor.lang.dir, '"' + + ' title="', ( CKEDITOR.env.gecko ? ' ' : '' ), '"' + + ' lang="', editor.langCode, '"' + + ( CKEDITOR.env.webkit? ' tabindex="' + tabIndex + '"' : '' ) + + ' role="application"' + + ' aria-labelledby="cke_', name, '_arialbl"' + + ( style ? ' style="' + style + '"' : '' ) + + '>' + + '<span id="cke_', name, '_arialbl" class="cke_voice_label">' + editor.lang.editor + '</span>' + + '<span class="' , CKEDITOR.env.cssClass, '" role="presentation">' + + '<span class="cke_wrapper cke_', editor.lang.dir, '" role="presentation">' + + '<table class="cke_editor" border="0" cellspacing="0" cellpadding="0" role="presentation"><tbody>' + + '<tr', topHtml ? '' : ' style="display:none"', ' role="presentation"><td id="cke_top_' , name, '" class="cke_top" role="presentation">' , topHtml , '</td></tr>' + + '<tr', contentsHtml ? '' : ' style="display:none"', ' role="presentation"><td id="cke_contents_', name, '" class="cke_contents" style="height:', height, '" role="presentation">', contentsHtml, '</td></tr>' + + '<tr', bottomHtml ? '' : ' style="display:none"', ' role="presentation"><td id="cke_bottom_' , name, '" class="cke_bottom" role="presentation">' , bottomHtml , '</td></tr>' + + '</tbody></table>' + + //Hide the container when loading skins, later restored by skin css. + hideSkin + + '</span>' + + '</span>' + + '</span>' ].join( '' ) ); + + container.getChild( [1, 0, 0, 0, 0] ).unselectable(); + container.getChild( [1, 0, 0, 0, 2] ).unselectable(); + + if ( elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ) + container.insertAfter( element ); + else + element.append( container ); + + /** + * The DOM element that holds the main editor interface. + * @name CKEDITOR.editor.prototype.container + * @type CKEDITOR.dom.element + * @example + * var editor = CKEDITOR.instances.editor1; + * alert( <b>editor.container</b>.getName() ); "span" + */ + editor.container = container; + + // Disable browser context menu for editor's chrome. + container.disableContextMenu(); + + // Use a class to indicate that the current selection is in different direction than the UI. + editor.on( 'contentDirChanged', function( evt ) + { + var func = ( editor.lang.dir != evt.data ? 'add' : 'remove' ) + 'Class'; + + container.getChild( 1 )[ func ]( 'cke_mixed_dir_content' ); + + // Put the mixed direction class on the respective element also for shared spaces. + var toolbarSpace = this.sharedSpaces && this.sharedSpaces[ this.config.toolbarLocation ]; + toolbarSpace && toolbarSpace.getParent().getParent()[ func ]( 'cke_mixed_dir_content' ); + }); + + editor.fireOnce( 'themeLoaded' ); + editor.fireOnce( 'uiReady' ); + }, + + buildDialog : function( editor ) + { + var baseIdNumber = CKEDITOR.tools.getNextNumber(); + + var element = CKEDITOR.dom.element.createFromHtml( [ + '<div class="', editor.id, '_dialog cke_editor_', editor.name.replace('.', '\\.'), '_dialog cke_skin_', editor.skinName, + '" dir="', editor.lang.dir, '"' + + ' lang="', editor.langCode, '"' + + ' role="dialog"' + + ' aria-labelledby="%title#"' + + '>' + + '<table class="cke_dialog', ' ' + CKEDITOR.env.cssClass, + ' cke_', editor.lang.dir, '" style="position:absolute" role="presentation">' + + '<tr><td role="presentation">' + + '<div class="%body" role="presentation">' + + '<div id="%title#" class="%title" role="presentation"></div>' + + '<a id="%close_button#" class="%close_button" href="javascript:void(0)" title="' + editor.lang.common.close+'" role="button"><span class="cke_label">X</span></a>' + + '<div id="%tabs#" class="%tabs" role="tablist"></div>' + + '<table class="%contents" role="presentation">' + + '<tr>' + + '<td id="%contents#" class="%contents" role="presentation"></td>' + + '</tr>' + + '<tr>' + + '<td id="%footer#" class="%footer" role="presentation"></td>' + + '</tr>' + + '</table>' + + '</div>' + + '<div id="%tl#" class="%tl"></div>' + + '<div id="%tc#" class="%tc"></div>' + + '<div id="%tr#" class="%tr"></div>' + + '<div id="%ml#" class="%ml"></div>' + + '<div id="%mr#" class="%mr"></div>' + + '<div id="%bl#" class="%bl"></div>' + + '<div id="%bc#" class="%bc"></div>' + + '<div id="%br#" class="%br"></div>' + + '</td></tr>' + + '</table>', + + //Hide the container when loading skins, later restored by skin css. + ( CKEDITOR.env.ie ? '' : '<style>.cke_dialog{visibility:hidden;}</style>' ), + + '</div>' + ].join( '' ) + .replace( /#/g, '_' + baseIdNumber ) + .replace( /%/g, 'cke_dialog_' ) ); + + var body = element.getChild( [ 0, 0, 0, 0, 0 ] ), + title = body.getChild( 0 ), + close = body.getChild( 1 ); + + // Make the Title and Close Button unselectable. + title.unselectable(); + close.unselectable(); + + + return { + element : element, + parts : + { + dialog : element.getChild( 0 ), + title : title, + close : close, + tabs : body.getChild( 2 ), + contents : body.getChild( [ 3, 0, 0, 0 ] ), + footer : body.getChild( [ 3, 0, 1, 0 ] ) + } + }; + }, + + destroy : function( editor ) + { + var container = editor.container, + element = editor.element; + + if ( container ) + { + container.clearCustomData(); + container.remove(); + } + + if ( element ) + { + element.clearCustomData(); + editor.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && element.show(); + delete editor.element; + } + } + }; +})() ); + +/** + * Returns the DOM element that represents a theme space. The default theme defines + * three spaces, namely "top", "contents" and "bottom", representing the main + * blocks that compose the editor interface. + * @param {String} spaceName The space name. + * @returns {CKEDITOR.dom.element} The element that represents the space. + * @example + * // Hide the bottom space in the UI. + * var bottom = editor.getThemeSpace( 'bottom' ); + * bottom.setStyle( 'display', 'none' ); + */ +CKEDITOR.editor.prototype.getThemeSpace = function( spaceName ) +{ + var spacePrefix = 'cke_' + spaceName; + var space = this._[ spacePrefix ] || + ( this._[ spacePrefix ] = CKEDITOR.document.getById( spacePrefix + '_' + this.name ) ); + return space; +}; + +/** + * Resizes the editor interface. + * @param {Number|String} width The new width. It can be an pixels integer or a + * CSS size value. + * @param {Number|String} height The new height. It can be an pixels integer or + * a CSS size value. + * @param {Boolean} [isContentHeight] Indicates that the provided height is to + * be applied to the editor contents space, not to the entire editor + * interface. Defaults to false. + * @param {Boolean} [resizeInner] Indicates that the first inner interface + * element must receive the size, not the outer element. The default theme + * defines the interface inside a pair of span elements + * (<span><span>...</span></span>). By default the + * first span element receives the sizes. If this parameter is set to + * true, the second span is sized instead. + * @example + * editor.resize( 900, 300 ); + * @example + * editor.resize( '100%', 450, true ); + */ +CKEDITOR.editor.prototype.resize = function( width, height, isContentHeight, resizeInner ) +{ + var container = this.container, + contents = CKEDITOR.document.getById( 'cke_contents_' + this.name ), + outer = resizeInner ? container.getChild( 1 ) : container; + + // Resize the width first. + // WEBKIT BUG: Webkit requires that we put the editor off from display when we + // resize it. If we don't, the browser crashes! + CKEDITOR.env.webkit && outer.setStyle( 'display', 'none' ); + // Set as border box width. (#5353) + outer.setSize( 'width', width, true ); + if ( CKEDITOR.env.webkit ) + { + outer.$.offsetWidth; + outer.setStyle( 'display', '' ); + } + + // Get the height delta between the outer table and the content area. + // If we're setting the content area's height, then we don't need the delta. + var delta = isContentHeight ? 0 : ( outer.$.offsetHeight || 0 ) - ( contents.$.clientHeight || 0 ); + contents.setStyle( 'height', Math.max( height - delta, 0 ) + 'px' ); + + // Emit a resize event. + this.fire( 'resize' ); +}; + +/** + * Gets the element that can be freely used to check the editor size. This method + * is mainly used by the resize plugin, which adds a UI handle that can be used + * to resize the editor. + * @param {Boolean} forContents Whether to return the "contents" part of the theme instead of the container. + * @returns {CKEDITOR.dom.element} The resizable element. + * @example + */ +CKEDITOR.editor.prototype.getResizable = function( forContents ) +{ + return forContents ? CKEDITOR.document.getById( 'cke_contents_' + this.name ) : this.container; +}; + +/** + * Makes it possible to place some of the editor UI blocks, like the toolbar + * and the elements path, into any element in the page. + * The elements used to hold the UI blocks can be shared among several editor + * instances. In that case, only the blocks of the active editor instance will + * display. + * @name CKEDITOR.config.sharedSpaces + * @type Object + * @default undefined + * @example + * // Place the toolbar inside the element with ID "someElementId" and the + * // elements path into the element with ID "anotherId". + * config.sharedSpaces = + * { + * top : 'someElementId', + * bottom : 'anotherId' + * }; + * @example + * // Place the toolbar inside the element with ID "someElementId". The + * // elements path will remain attached to the editor UI. + * config.sharedSpaces = + * { + * top : 'someElementId' + * }; + */ + +/** + * Fired after the editor instance is resized through + * the {@link CKEDITOR.editor.prototype.resize} method. + * @name CKEDITOR.editor#resize + * @event + */ diff --git a/adapters/jquery.js b/adapters/jquery.js new file mode 100644 index 0000000..289de41 --- /dev/null +++ b/adapters/jquery.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){CKEDITOR.config.jqueryOverrideVal=typeof CKEDITOR.config.jqueryOverrideVal=='undefined'?true:CKEDITOR.config.jqueryOverrideVal;var a=window.jQuery;if(typeof a=='undefined')return;a.extend(a.fn,{ckeditorGet:function(){var b=this.eq(0).data('ckeditorInstance');if(!b)throw 'CKEditor not yet initialized, use ckeditor() with callback.';return b;},ckeditor:function(b,c){if(!CKEDITOR.env.isCompatible)return this;if(!a.isFunction(b)){var d=c;c=b;b=d;}c=c||{};this.filter('textarea, div, p').each(function(){var e=a(this),f=e.data('ckeditorInstance'),g=e.data('_ckeditorInstanceLock'),h=this;if(f&&!g){if(b)b.apply(f,[this]);}else if(!g){if(c.autoUpdateElement||typeof c.autoUpdateElement=='undefined'&&CKEDITOR.config.autoUpdateElement)c.autoUpdateElementJquery=true;c.autoUpdateElement=false;e.data('_ckeditorInstanceLock',true);f=CKEDITOR.replace(h,c);e.data('ckeditorInstance',f);f.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}i.removeListener('instanceReady',this.callee);j.on('dataReady',function(){e.trigger('setData.ckeditor',[j]);});j.on('getData',function(l){e.trigger('getData.ckeditor',[j,l.data]);},999);j.on('destroy',function(){e.trigger('destroy.ckeditor',[j]);});if(j.config.autoUpdateElementJquery&&e.is('textarea')&&e.parents('form').length){var k=function(){e.ckeditor(function(){j.updateElement();});};e.parents('form').submit(k);e.parents('form').bind('form-pre-serialize',k);e.bind('destroy.ckeditor',function(){e.parents('form').unbind('submit',k);e.parents('form').unbind('form-pre-serialize',k);});}j.on('destroy',function(){e.data('ckeditorInstance',null);});e.data('_ckeditorInstanceLock',null);e.trigger('instanceReady.ckeditor',[j]);if(b)b.apply(j,[h]);},0);},null,null,9999);}else CKEDITOR.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}if(j.element.$==h)if(b)b.apply(j,[h]);},0);},null,null,9999);});return this;}});if(CKEDITOR.config.jqueryOverrideVal)a.fn.val=CKEDITOR.tools.override(a.fn.val,function(b){return function(c,d){var e=typeof c!='undefined',f;this.each(function(){var g=a(this),h=g.data('ckeditorInstance');if(!d&&g.is('textarea')&&h){if(e)h.setData(c);else{f=h.getData();return null;}}else if(e)b.call(g,c);else{f=b.call(g);return null;}return true;});return e?this:f;};});})(); diff --git a/ckeditor.asp b/ckeditor.asp new file mode 100644 index 0000000..33b9f55 --- /dev/null +++ b/ckeditor.asp @@ -0,0 +1,955 @@ +<% + ' + ' Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. + ' For licensing, see LICENSE.html or http://ckeditor.com/license + +' Shared variable for all instances ("static") +dim CKEDITOR_initComplete +dim CKEDITOR_returnedEvents + + '' + ' \brief CKEditor class that can be used to create editor + ' instances in ASP pages on server side. + ' @see http://ckeditor.com + ' + ' Sample usage: + ' @code + ' editor = new CKEditor + ' editor.editor "editor1", "<p>Initial value.</p>", empty, empty + ' @endcode + +Class CKEditor + + '' + ' The version of %CKEditor. + private version + + '' + ' A constant string unique for each release of %CKEditor. + private mTimeStamp + + '' + ' URL to the %CKEditor installation directory (absolute or relative to document root). + ' If not set, CKEditor will try to guess it's path. + ' + ' Example usage: + ' @code + ' editor.basePath = "/ckeditor/" + ' @endcode + Public basePath + + '' + ' A boolean variable indicating whether CKEditor has been initialized. + ' Set it to true only if you have already included + ' <script> tag loading ckeditor.js in your website. + Public initialized + + '' + ' Boolean variable indicating whether created code should be printed out or returned by a function. + ' + ' Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function. + ' @code + ' editor = new CKEditor + ' editor.returnOutput = true + ' code = editor.editor("editor1", "<p>Initial value.</p>", empty, empty) + ' response.write "<p>Editor 1:</p>" + ' response.write code + ' @endcode + Public returnOutput + + '' + ' A Dictionary with textarea attributes. + ' + ' When %CKEditor is created with the editor() method, a HTML <textarea> element is created, + ' it will be displayed to anyone with JavaScript disabled or with incompatible browser. + public textareaAttributes + + '' + ' A string indicating the creation date of %CKEditor. + ' Do not change it unless you want to force browsers to not use previously cached version of %CKEditor. + public timestamp + + '' + ' A dictionary that holds the instance configuration. + private oInstanceConfig + + '' + ' A dictionary that holds the configuration for all the instances. + private oAllInstancesConfig + + '' + ' A dictionary that holds event listeners for the instance. + private oInstanceEvents + + '' + ' A dictionary that holds event listeners for all the instances. + private oAllInstancesEvents + + '' + ' A Dictionary that holds global event listeners (CKEDITOR object) + private oGlobalEvents + + + Private Sub Class_Initialize() + version = "3.6.1" + timeStamp = "B5GJ5GG" + mTimeStamp = "B5GJ5GG" + + Set oInstanceConfig = CreateObject("Scripting.Dictionary") + Set oAllInstancesConfig = CreateObject("Scripting.Dictionary") + + Set oInstanceEvents = CreateObject("Scripting.Dictionary") + Set oAllInstancesEvents = CreateObject("Scripting.Dictionary") + Set oGlobalEvents = CreateObject("Scripting.Dictionary") + + Set textareaAttributes = CreateObject("Scripting.Dictionary") + textareaAttributes.Add "rows", 8 + textareaAttributes.Add "cols", 60 + End Sub + + '' + ' Creates a %CKEditor instance. + ' In incompatible browsers %CKEditor will downgrade to plain HTML <textarea> element. + ' + ' @param name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element). + ' @param value (string) Initial value. + ' + ' Example usage: + ' @code + ' set editor = New CKEditor + ' editor.editor "field1", "<p>Initial value.</p>" + ' @endcode + ' + ' Advanced example: + ' @code + ' set editor = new CKEditor + ' set config = CreateObject("Scripting.Dictionary") + ' config.Add "toolbar", Array( _ + ' Array( "Source", "-", "Bold", "Italic", "Underline", "Strike" ), _ + ' Array( "Image", "Link", "Unlink", "Anchor" ) _ + ' ) + ' set events = CreateObject("Scripting.Dictionary") + ' events.Add "instanceReady", "function (evt) { alert('Loaded second editor: ' + evt.editor.name );}" + + ' editor.editor "field1", "<p>Initial value.</p>", config, events + ' @endcode + ' + public function editor(name, value) + dim attr, out, js, customConfig, extraConfig + dim attribute + + attr = "" + + for each attribute in textareaAttributes + attr = attr & " " & attribute & "=""" & replace( textareaAttributes( attribute ), """", """ ) & """" + next + + out = "<textarea name=""" & name & """" & attr & ">" & Server.HtmlEncode(value) & "</textarea>" & vbcrlf + + if not(initialized) then + out = out & init() + end if + + set customConfig = configSettings() + js = returnGlobalEvents() + + extraConfig = (new JSON)( empty, customConfig, false ) + if extraConfig<>"" then extraConfig = ", " & extraConfig + js = js & "CKEDITOR.replace('" & name & "'" & extraConfig & ");" + + out = out & script(js) + + if not(returnOutput) then + response.write out + out = "" + end if + + editor = out + + oInstanceConfig.RemoveAll + oInstanceEvents.RemoveAll + end function + + '' + ' Replaces a <textarea> with a %CKEditor instance. + ' + ' @param id (string) The id or name of textarea element. + ' + ' Example 1: adding %CKEditor to <textarea name="article"></textarea> element: + ' @code + ' set editor = New CKEditor + ' editor.replace "article" + ' @endcode + ' + public function replaceInstance(id) + dim out, js, customConfig, extraConfig + + out = "" + if not(initialized) then + out = out & init() + end if + + set customConfig = configSettings() + js = returnGlobalEvents() + + extraConfig = (new JSON)( empty, customConfig, false ) + if extraConfig<>"" then extraConfig = ", " & extraConfig + js = js & "CKEDITOR.replace('" & id & "'" & extraConfig & ");" + + out = out & script(js) + + if not(returnOutput) then + response.write out + out = "" + end if + + replaceInstance = out + + oInstanceConfig.RemoveAll + oInstanceEvents.RemoveAll + end function + + '' + ' Replace all <textarea> elements available in the document with editor instances. + ' + ' @param className (string) If set, replace all textareas with class className in the page. + ' + ' Example 1: replace all <textarea> elements in the page. + ' @code + ' editor = new CKEditor + ' editor.replaceAll empty + ' @endcode + ' + ' Example 2: replace all <textarea class="myClassName"> elements in the page. + ' @code + ' editor = new CKEditor + ' editor.replaceAll 'myClassName' + ' @endcode + ' + function replaceAll(className) + dim out, js, customConfig + + out = "" + if not(initialized) then + out = out & init() + end if + + set customConfig = configSettings() + js = returnGlobalEvents() + + if (customConfig.Count=0) then + if (isEmpty(className)) then + js = js & "CKEDITOR.replaceAll();" + else + js = js & "CKEDITOR.replaceAll('" & className & "');" + end if + else + js = js & "CKEDITOR.replaceAll( function(textarea, config) {\n" + if not(isEmpty(className)) then + js = js & " var classRegex = new RegExp('(?:^| )' + '" & className & "' + '(?:$| )');\n" + js = js & " if (!classRegex.test(textarea.className))\n" + js = js & " return false;\n" + end if + js = js & " CKEDITOR.tools.extend(config, " & (new JSON)( empty, customConfig, false ) & ", true);" + js = js & "} );" + end if + + out = out & script(js) + + if not(returnOutput) then + response.write out + out = "" + end if + + replaceAll = out + + oInstanceConfig.RemoveAll + oInstanceEvents.RemoveAll + end function + + + '' + ' A Dictionary that holds the %CKEditor configuration for all instances + ' For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html + ' + ' Example usage: + ' @code + ' editor.config("height") = 400 + ' // Use @@ at the beggining of a string to ouput it without surrounding quotes. + ' editor.config("width") = "@@screen.width * 0.8" + ' @endcode + Public Property Let Config( configKey, configValue ) + oAllInstancesConfig.Add configKey, configValue + End Property + + '' + ' Configuration options for the next instance + ' + Public Property Let instanceConfig( configKey, configValue ) + oInstanceConfig.Add configKey, configValue + End Property + + '' + ' Adds event listener. + ' Events are fired by %CKEditor in various situations. + ' + ' @param eventName (string) Event name. + ' @param javascriptCode (string) Javascript anonymous function or function name. + ' + ' Example usage: + ' @code + ' editor.addEventHandler "instanceReady", "function (ev) { " & _ + ' " alert('Loaded: ' + ev.editor.name); " & _ + ' "}" + ' @endcode + ' + public sub addEventHandler(eventName, javascriptCode) + if not(oAllInstancesEvents.Exists( eventName ) ) then + oAllInstancesEvents.Add eventName, Array() + end if + + dim listeners, size + listeners = oAllInstancesEvents( eventName ) + size = ubound(listeners) + 1 + redim preserve listeners(size) + listeners(size) = javascriptCode + + oAllInstancesEvents( eventName ) = listeners +' '' Avoid duplicates. fixme... +' if (!in_array($javascriptCode, $this->_events[$event])) { +' $this->_events[$event][] = $javascriptCode; +' } + end sub + + '' + ' Clear registered event handlers. + ' Note: this function will have no effect on already created editor instances. + ' + ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed. + ' + public sub clearEventHandlers( eventName ) + if not(isEmpty( eventName )) then + oAllInstancesEvents.Remove eventName + else + oAllInstancesEvents.RemoveAll + end if + end sub + + + '' + ' Adds event listener only for the next instance. + ' Events are fired by %CKEditor in various situations. + ' + ' @param eventName (string) Event name. + ' @param javascriptCode (string) Javascript anonymous function or function name. + ' + ' Example usage: + ' @code + ' editor.addInstanceEventHandler "instanceReady", "function (ev) { " & _ + ' " alert('Loaded: ' + ev.editor.name); " & _ + ' "}" + ' @endcode + ' + public sub addInstanceEventHandler(eventName, javascriptCode) + if not(oInstanceEvents.Exists( eventName ) ) then + oInstanceEvents.Add eventName, Array() + end if + + dim listeners, size + listeners = oInstanceEvents( eventName ) + size = ubound(listeners) + 1 + redim preserve listeners(size) + listeners(size) = javascriptCode + + oInstanceEvents( eventName ) = listeners +' '' Avoid duplicates. fixme... +' if (!in_array($javascriptCode, $this->_events[$event])) { +' $this->_events[$event][] = $javascriptCode; +' } + end sub + + '' + ' Clear registered event handlers. + ' Note: this function will have no effect on already created editor instances. + ' + ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed. + ' + public sub clearInstanceEventHandlers( eventName ) + if not(isEmpty( eventName )) then + oInstanceEvents.Remove eventName + else + oInstanceEvents.RemoveAll + end if + end sub + + '' + ' Adds global event listener. + ' + ' @param event (string) Event name. + ' @param javascriptCode (string) Javascript anonymous function or function name. + ' + ' Example usage: + ' @code + ' editor.addGlobalEventHandler "dialogDefinition", "function (ev) { " & _ + ' " alert('Loading dialog: ' + ev.data.name); " & _ + ' "}" + ' @endcode + ' + public sub addGlobalEventHandler( eventName, javascriptCode) + if not(oGlobalEvents.Exists( eventName ) ) then + oGlobalEvents.Add eventName, Array() + end if + + dim listeners, size + listeners = oGlobalEvents( eventName ) + size = ubound(listeners) + 1 + redim preserve listeners(size) + listeners(size) = javascriptCode + + oGlobalEvents( eventName ) = listeners + +' // Avoid duplicates. +' if (!in_array($javascriptCode, $this->_globalEvents[$event])) { +' $this->_globalEvents[$event][] = $javascriptCode; +' } + end sub + + '' + ' Clear registered global event handlers. + ' Note: this function will have no effect if the event handler has been already printed/returned. + ' + ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed . + ' + public sub clearGlobalEventHandlers( eventName ) + if not(isEmpty( eventName )) then + oGlobalEvents.Remove eventName + else + oGlobalEvents.RemoveAll + end if + end sub + + '' + ' Prints javascript code. + ' + ' @param string js + ' + private function script(js) + script = "<script type=""text/javascript"">" & _ + "//<![CDATA[" & vbcrlf & _ + js & vbcrlf & _ + "//]]>" & _ + "</script>" & vbcrlf + end function + + '' + ' Returns the configuration array (global and instance specific settings are merged into one array). + ' + ' @param instanceConfig (Dictionary) The specific configurations to apply to editor instance. + ' @param instanceEvents (Dictionary) Event listeners for editor instance. + ' + private function configSettings() + dim mergedConfig, mergedEvents + set mergedConfig = cloneDictionary(oAllInstancesConfig) + set mergedEvents = cloneDictionary(oAllInstancesEvents) + + if not(isEmpty(oInstanceConfig)) then + set mergedConfig = mergeDictionary(mergedConfig, oInstanceConfig) + end if + + if not(isEmpty(oInstanceEvents)) then + for each eventName in oInstanceEvents + code = oInstanceEvents( eventName ) + + if not(mergedEvents.Exists( eventName)) then + mergedEvents.Add eventName, code + else + + dim listeners, size + listeners = mergedEvents( eventName ) + size = ubound(listeners) + if isArray( code ) then + addedCount = ubound(code) + redim preserve listeners( size + addedCount + 1 ) + for i = 0 to addedCount + listeners(size + i + 1) = code (i) + next + else + size = size + 1 + redim preserve listeners(size) + listeners(size) = code + end if + + mergedEvents( eventName ) = listeners + end if + next + + end if + + dim i, eventName, handlers, configON, ub, code + + if mergedEvents.Count>0 then + if mergedConfig.Exists( "on" ) then + set configON = mergedConfig.items( "on" ) + else + set configON = CreateObject("Scripting.Dictionary") + mergedConfig.Add "on", configOn + end if + + for each eventName in mergedEvents + handlers = mergedEvents( eventName ) + code = "" + + if isArray(handlers) then + uB = ubound(handlers) + if (uB = 0) then + code = handlers(0) + else + code = "function (ev) {" + for i=0 to uB + code = code & "(" & handlers(i) & ")(ev);" + next + code = code & "}" + end if + else + code = handlers + end if + ' Using @@ at the beggining to signal JSON that we don't want this quoted. + configON.Add eventName, "@@" & code + next + +' set mergedConfig.Item("on") = configOn + end if + + set configSettings = mergedConfig + end function + + '' + ' Returns a copy of a scripting.dictionary object + ' + private function cloneDictionary( base ) + dim newOne, tmpKey + + Set newOne = CreateObject("Scripting.Dictionary") + for each tmpKey in base + newOne.Add tmpKey , base( tmpKey ) + next + + set cloneDictionary = newOne + end function + + '' + ' Combines two scripting.dictionary objects + ' The base object isn't modified, and extra gets all the properties in base + ' + private function mergeDictionary(base, extra) + dim newOne, tmpKey + + for each tmpKey in base + if not(extra.Exists( tmpKey )) then + extra.Add tmpKey, base( tmpKey ) + end if + next + + set mergeDictionary = extra + end function + + '' + ' Return global event handlers. + ' + private function returnGlobalEvents() + dim out, eventName, handlers + dim handlersForEvent, handler, code, i + out = "" + + if (isempty(CKEDITOR_returnedEvents)) then + set CKEDITOR_returnedEvents = CreateObject("Scripting.Dictionary") + end if + + for each eventName in oGlobalEvents + handlers = oGlobalEvents( eventName ) + + if not(CKEDITOR_returnedEvents.Exists(eventName)) then + CKEDITOR_returnedEvents.Add eventName, CreateObject("Scripting.Dictionary") + end if + + set handlersForEvent = CKEDITOR_returnedEvents.Item( eventName ) + + ' handlersForEvent is another dictionary + ' and handlers is an array + + for i = 0 to ubound(handlers) + code = handlers( i ) + + ' Return only new events + if not(handlersForEvent.Exists( code )) then + if (out <> "") then out = out & vbcrlf + out = out & "CKEDITOR.on('" & eventName & "', " & code & ");" + handlersForEvent.Add code, code + end if + next + next + + returnGlobalEvents = out + end function + + '' + ' Initializes CKEditor (executed only once). + ' + private function init() + dim out, args, path, extraCode, file + out = "" + + if (CKEDITOR_initComplete) then + init = "" + exit function + end if + + if (initialized) then + CKEDITOR_initComplete = true + init = "" + exit function + end if + + args = "" + path = ckeditorPath() + + if (timestamp <> "") and (timestamp <> "%" & "TIMESTAMP%") then + args = "?t=" & timestamp + end if + + ' Skip relative paths... + if (instr(path, "..") <> 0) then + out = out & script("window.CKEDITOR_BASEPATH='" & path & "';") + end if + + out = out & "<scr" & "ipt type=""text/javascript"" src=""" & path & ckeditorFileName() & args & """></scr" & "ipt>" & vbcrlf + + extraCode = "" + if (timestamp <> mTimeStamp) then + extraCode = extraCode & "CKEDITOR.timestamp = '" & timestamp & "';" + end if + if (extraCode <> "") then + out = out & script(extraCode) + end if + + CKEDITOR_initComplete = true + initialized = true + + init = out + end function + + private function ckeditorFileName() + ckeditorFileName = "ckeditor.js" + end function + + '' + ' Return path to ckeditor.js. + ' + private function ckeditorPath() + if (basePath <> "") then + ckeditorPath = basePath + else + ' In classic ASP we can't get the location of this included script + ckeditorPath = "/ckeditor/" + end if + + ' Try to check if that folder contains the CKEditor files: + ' If it's a full URL avoid checking it as it might point to an external server. + if (instr(ckeditorPath, "://") <> 0) then exit function + + dim filename, oFSO, exists + filename = server.mapPath(basePath & ckeditorFileName()) + set oFSO = Server.CreateObject("Scripting.FileSystemObject") + exists = oFSO.FileExists(filename) + set oFSO = nothing + + if not(exists) then + response.clear + response.write "<h1>CKEditor path validation failed</h1>" + response.write "<p>The path "" & ckeditorPath & "" doesn't include the CKEditor main file (" & ckeditorFileName() & ")</p>" + response.write "<p>Please, verify that you have set it correctly and/or adjust the 'basePath' property</p>" + response.write "<p>Checked for physical file: "" & filename & ""</p>" + response.end + end if + end function + +End Class + + + +' URL: http://www.webdevbros.net/2007/04/26/generate-json-from-asp-datatypes/ +'************************************************************************************************************** +'' @CLASSTITLE: JSON +'' @CREATOR: Michal Gabrukiewicz (gabru at grafix.at), Michael Rebec +'' @CONTRIBUTORS: - Cliff Pruitt (opensource at crayoncowboy.com) +'' - Sylvain Lafontaine +'' - Jef Housein +'' - Jeremy Brown +'' @CREATEDON: 2007-04-26 12:46 +'' @CDESCRIPTION: Comes up with functionality for JSON (http://json.org) to use within ASP. +'' Correct escaping of characters, generating JSON Grammer out of ASP datatypes and structures +'' Some examples (all use the <em>toJSON()</em> method but as it is the class' default method it can be left out): +'' <code> +'' <% +'' 'simple number +'' output = (new JSON)("myNum", 2, false) +'' 'generates {"myNum": 2} +'' +'' 'array with different datatypes +'' output = (new JSON)("anArray", array(2, "x", null), true) +'' 'generates "anArray": [2, "x", null] +'' '(note: the last parameter was true, thus no surrounding brackets in the result) +'' % > +'' </code> +'' @REQUIRES: - +'' @OPTIONEXPLICIT: yes +'' @VERSION: 1.5.1 + +'************************************************************************************************************** +class JSON + + 'private members + private output, innerCall + + '********************************************************************************************************** + '* constructor + '********************************************************************************************************** + public sub class_initialize() + newGeneration() + end sub + + '****************************************************************************************** + '' @SDESCRIPTION: STATIC! takes a given string and makes it JSON valid + '' @DESCRIPTION: all characters which needs to be escaped are beeing replaced by their + '' unicode representation according to the + '' RFC4627#2.5 - http://www.ietf.org/rfc/rfc4627.txt?number=4627 + '' @PARAM: val [string]: value which should be escaped + '' @RETURN: [string] JSON valid string + '****************************************************************************************** + public function escape(val) + dim cDoubleQuote, cRevSolidus, cSolidus + cDoubleQuote = &h22 + cRevSolidus = &h5C + cSolidus = &h2F + dim i, currentDigit + for i = 1 to (len(val)) + currentDigit = mid(val, i, 1) + if ascw(currentDigit) > &h00 and ascw(currentDigit) < &h1F then + currentDigit = escapequence(currentDigit) + elseif ascw(currentDigit) >= &hC280 and ascw(currentDigit) <= &hC2BF then + currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC200), 2, 0), 2) + elseif ascw(currentDigit) >= &hC380 and ascw(currentDigit) <= &hC3BF then + currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC2C0), 2, 0), 2) + else + select case ascw(currentDigit) + case cDoubleQuote: currentDigit = escapequence(currentDigit) + case cRevSolidus: currentDigit = escapequence(currentDigit) + case cSolidus: currentDigit = escapequence(currentDigit) + end select + end if + escape = escape & currentDigit + next + end function + + '****************************************************************************************************************** + '' @SDESCRIPTION: generates a representation of a name value pair in JSON grammer + '' @DESCRIPTION: It generates a name value pair which is represented as <em>{"name": value}</em> in JSON. + '' the generation is fully recursive. Thus the value can also be a complex datatype (array in dictionary, etc.) e.g. + '' <code> + '' <% + '' set j = new JSON + '' j.toJSON "n", array(RS, dict, false), false + '' j.toJSON "n", array(array(), 2, true), false + '' % > + '' </code> + '' @PARAM: name [string]: name of the value (accessible with javascript afterwards). leave empty to get just the value + '' @PARAM: val [variant], [int], [float], [array], [object], [dictionary]: value which needs + '' to be generated. Conversation of the data types is as follows:<br> + '' - <strong>ASP datatype -> JavaScript datatype</strong> + '' - NOTHING, NULL -> null + '' - INT, DOUBLE -> number + '' - STRING -> string + '' - BOOLEAN -> bool + '' - ARRAY -> array + '' - DICTIONARY -> Represents it as name value pairs. Each key is accessible as property afterwards. json will look like <code>"name": {"key1": "some value", "key2": "other value"}</code> + '' - <em>multidimensional array</em> -> Generates a 1-dimensional array (flat) with all values of the multidimensional array + '' - <em>request</em> object -> every property and collection (cookies, form, querystring, etc) of the asp request object is exposed as an item of a dictionary. Property names are <strong>lowercase</strong>. e.g. <em>servervariables</em>. + '' - OBJECT -> name of the type (if unknown type) or all its properties (if class implements <em>reflect()</em> method) + '' Implement a <strong>reflect()</strong> function if you want your custom classes to be recognized. The function must return + '' a dictionary where the key holds the property name and the value its value. Example of a reflect function within a User class which has firstname and lastname properties + '' <code> + '' <% + '' function reflect() + '' . set reflect = server.createObject("scripting.dictionary") + '' . reflect.add "firstname", firstname + '' . reflect.add "lastname", lastname + '' end function + '' % > + '' </code> + '' Example of how to generate a JSON representation of the asp request object and access the <em>HTTP_HOST</em> server variable in JavaScript: + '' <code> + '' <script>alert(<%= (new JSON)(empty, request, false) % >.servervariables.HTTP_HOST);</script> + '' </code> + '' @PARAM: nested [bool]: indicates if the name value pair is already nested within another? if yes then the <em>{}</em> are left out. + '' @RETURN: [string] returns a JSON representation of the given name value pair + '****************************************************************************************************************** + public default function toJSON(name, val, nested) + if not nested and not isEmpty(name) then write("{") + if not isEmpty(name) then write("""" & escape(name) & """: ") + generateValue(val) + if not nested and not isEmpty(name) then write("}") + toJSON = output + + if innerCall = 0 then newGeneration() + end function + + '****************************************************************************************************************** + '* generate + '****************************************************************************************************************** + private function generateValue(val) + if isNull(val) then + write("null") + elseif isArray(val) then + generateArray(val) + elseif isObject(val) then + dim tName : tName = typename(val) + if val is nothing then + write("null") + elseif tName = "Dictionary" or tName = "IRequestDictionary" then + generateDictionary(val) + elseif tName = "IRequest" then + set req = server.createObject("scripting.dictionary") + req.add "clientcertificate", val.ClientCertificate + req.add "cookies", val.cookies + req.add "form", val.form + req.add "querystring", val.queryString + req.add "servervariables", val.serverVariables + req.add "totalbytes", val.totalBytes + generateDictionary(req) + elseif tName = "IStringList" then + if val.count = 1 then + toJSON empty, val(1), true + else + generateArray(val) + end if + else + generateObject(val) + end if + else + 'bool + dim varTyp + varTyp = varType(val) + if varTyp = 11 then + if val then write("true") else write("false") + 'int, long, byte + elseif varTyp = 2 or varTyp = 3 or varTyp = 17 or varTyp = 19 then + write(cLng(val)) + 'single, double, currency + elseif varTyp = 4 or varTyp = 5 or varTyp = 6 or varTyp = 14 then + write(replace(cDbl(val), ",", ".")) + else + ' Using @@ at the beggining to signal JSON that we don't want this quoted. + if left(val, 2) = "@@" then + write( mid( val, 3 ) ) + else + write("""" & escape(val & "") & """") + end if + end if + end if + generateValue = output + end function + + '****************************************************************************************************************** + '* generateArray + '****************************************************************************************************************** + private sub generateArray(val) + dim item, i + write("[") + i = 0 + 'the for each allows us to support also multi dimensional arrays + for each item in val + if i > 0 then write(",") + generateValue(item) + i = i + 1 + next + write("]") + end sub + + '****************************************************************************************************************** + '* generateDictionary + '****************************************************************************************************************** + private sub generateDictionary(val) + innerCall = innerCall + 1 + if val.count = 0 then + toJSON empty, null, true + exit sub + end if + dim key, i + write("{") + i = 0 + for each key in val + if i > 0 then write(",") + toJSON key, val(key), true + i = i + 1 + next + write("}") + innerCall = innerCall - 1 + end sub + + '****************************************************************************************************************** + '* generateObject + '****************************************************************************************************************** + private sub generateObject(val) + dim props + on error resume next + set props = val.reflect() + if err = 0 then + on error goto 0 + innerCall = innerCall + 1 + toJSON empty, props, true + innerCall = innerCall - 1 + else + on error goto 0 + write("""" & escape(typename(val)) & """") + end if + end sub + + '****************************************************************************************************************** + '* newGeneration + '****************************************************************************************************************** + private sub newGeneration() + output = empty + innerCall = 0 + end sub + + '****************************************************************************************** + '* JsonEscapeSquence + '****************************************************************************************** + private function escapequence(digit) + escapequence = "\u00" + right(padLeft(hex(ascw(digit)), 2, 0), 2) + end function + + '****************************************************************************************** + '* padLeft + '****************************************************************************************** + private function padLeft(value, totalLength, paddingChar) + padLeft = right(clone(paddingChar, totalLength) & value, totalLength) + end function + + '****************************************************************************************** + '* clone + '****************************************************************************************** + private function clone(byVal str, n) + dim i + for i = 1 to n : clone = clone & str : next + end function + + '****************************************************************************************** + '* write + '****************************************************************************************** + private sub write(val) + output = output & val + end sub + +end class +%> diff --git a/ckeditor.js b/ckeditor.js new file mode 100644 index 0000000..6b5c14c --- /dev/null +++ b/ckeditor.js @@ -0,0 +1,147 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'B5GJ5GG',version:'3.6.1',revision:'7072',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;if(!d)throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/'&&!/[&?]t=/.test(d))d+=(d.indexOf('?')>=0?'&':'?')+'t='+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b){var c=a.event.prototype;for(var d in c){if(b[d]==undefined)b[d]=c[d];}};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e<f.length;e++){if(f[e].fn==d)return e;}return-1;}};return{on:function(d,e,f,g,h){var i=b(this),j=i[d]||(i[d]=new c(d));if(j.getListenerIndex(e)<0){var k=j.listeners;if(!f)f=this;if(isNaN(h))h=10;var l=this,m=function(o,p,q,r){var s={name:d,sender:this,editor:o,data:p,listenerData:g,stop:q,cancel:r,removeListener:function(){l.removeListener(d,e);}};e.call(f,s);return s.data;};m.fn=e;m.priority=h;for(var n=k.length-1;n>=0;n--){if(k[n].priority<=h){k.splice(n+1,0,m);return;}}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o<n.length;o++){var p=n[o].call(this,j,i,e,g);if(typeof p!='undefined')i=p;if(d||f)break;}}}var q=f||(typeof i=='undefined'?false:i);d=l;f=m;return q;};})(),fireOnce:function(d,e,f){var g=this.fire(d,e,f);delete b(this)[d];return g;},removeListener:function(d,e){var f=b(this)[d];if(f){var g=f.getListenerIndex(e);if(g>=0)f.listeners.splice(g,1); +}},hasListeners:function(d){var e=b(this)[d];return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d,e){var f=this;f._={instanceConfig:b,element:c,data:e};f.elementMode=d||0;a.event.call(f);f._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(d&&d.tagName.toLowerCase() in {style:1,script:1,base:1,link:1,meta:1,title:1})d=null;if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&d.tagName.toLowerCase()!='textarea'){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c,d){var e=b;if(typeof e!='object'){e=document.getElementById(b);if(!e)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,e,2,d);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',mobile:b.indexOf('mobile')>-1,isCustomDomain:function(){if(!this.ie)return false;var g=document.domain,h=window.location.hostname;return g!=h&&g!='['+h+']';},secure:location.protocol=='https:'};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie9Compat=document.documentMode==9;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*100+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=!d.mobile&&(d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false);d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.webkit?'webkit':'unknown'); +if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?document.documentMode:'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18';if(d.air)d.cssClass+=' cke_browser_air';return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=1;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=1;var d=function(e,f,g,h){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var i=g(e,f,h);a.add(i);return i;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f,g){return d(e,f,a.editor.appendTo,g);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f<e.length;f++){var g=null,h=e[f];if(!h.name&&!h.id)continue;if(typeof arguments[0]=='string'){var i=new RegExp('(?:^|\\s)'+arguments[0]+'(?:$|\\s)');if(!i.test(h.className))continue;}else if(typeof arguments[0]=='function'){g={};if(arguments[0](h,g)===false)continue;}this.replace(h,g);}};(function(){var e=function(){var f=a.loadFullCore,g=a.loadFullCoreTimeout;if(a.replaceByClassEnabled)a.replaceAll(a.replaceClass);a.status='basic_ready';if(f&&f._load)f();else if(g)setTimeout(function(){if(a.loadFullCore)a.loadFullCore();},g*1000);};if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();a.status='basic_loaded';})();a.dom={};var d=a.dom;(function(){var e=[];a.on('reset',function(){e=[];});a.tools={arrayCompare:function(f,g){if(!f&&!g)return true;if(!f||!g||f.length!=g.length)return false;for(var h=0;h<f.length;h++){if(f[h]!=g[h])return false;}return true;},clone:function(f){var g;if(f&&f instanceof Array){g=[];for(var h=0;h<f.length;h++)g[h]=this.clone(f[h]);return g;}if(f===null||typeof f!='object'||f instanceof String||f instanceof Number||f instanceof Boolean||f instanceof Date||f instanceof RegExp)return f;g=new f.constructor();for(var i in f){var j=f[i];g[i]=this.clone(j);}return g;},capitalize:function(f){return f.charAt(0).toUpperCase()+f.substring(1).toLowerCase();},extend:function(f){var g=arguments.length,h,i; +if(typeof (h=arguments[g-1])=='boolean')g--;else if(typeof (h=arguments[g-2])=='boolean'){i=arguments[g-1];g-=2;}for(var j=1;j<g;j++){var k=arguments[j];for(var l in k){if(h===true||f[l]==undefined)if(!i||l in i)f[l]=k[l];}}return f;},prototypedCopy:function(f){var g=function(){};g.prototype=f;return new g();},isArray:function(f){return!!f&&f instanceof Array;},isEmpty:function(f){for(var g in f){if(f.hasOwnProperty(g))return false;}return true;},cssStyleToDomStyle:(function(){var f=document.createElement('div').style,g=typeof f.cssFloat!='undefined'?'cssFloat':typeof f.styleFloat!='undefined'?'styleFloat':'float';return function(h){if(h=='float')return g;else return h.replace(/-./g,function(i){return i.substr(1).toUpperCase();});};})(),buildStyleHtml:function(f){f=[].concat(f);var g,h=[];for(var i=0;i<f.length;i++){g=f[i];if(/@import|[{}]/.test(g))h.push('<style>'+g+'</style>');else h.push('<link type="text/css" rel=stylesheet href="'+g+'">');}return h.join('');},htmlEncode:function(f){var g=function(k){var l=new d.element('span');l.setText(k);return l.getHtml();},h=g('\n').toLowerCase()=='<br>'?function(k){return g(k).replace(/<br>/gi,'\n');}:g,i=g('>')=='>'?function(k){return h(k).replace(/>/g,'>');}:h,j=g(' ')==' '?function(k){return i(k).replace(/ /g,' ');}:i;this.htmlEncode=j;return this.htmlEncode(f);},htmlEncodeAttr:function(f){return f.replace(/"/g,'"').replace(/</g,'<').replace(/>/g,'>');},getNextNumber:(function(){var f=0;return function(){return++f;};})(),getNextId:function(){return 'cke_'+this.getNextNumber();},override:function(f,g){return g(f);},setTimeout:function(f,g,h,i,j){if(!j)j=window;if(!h)h=j;return j.setTimeout(function(){if(i)f.apply(h,[].concat(i));else f.apply(h);},g||0);},trim:(function(){var f=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(f,'');};})(),ltrim:(function(){var f=/^[ \t\n\r]+/g;return function(g){return g.replace(f,'');};})(),rtrim:(function(){var f=/[ \t\n\r]+$/g;return function(g){return g.replace(f,'');};})(),indexOf:Array.prototype.indexOf?function(f,g){return f.indexOf(g);}:function(f,g){for(var h=0,i=f.length;h<i;h++){if(f[h]===g)return h;}return-1;},bind:function(f,g){return function(){return f.apply(g,arguments);};},createClass:function(f){var g=f.$,h=f.base,i=f.privates||f._,j=f.proto,k=f.statics;if(i){var l=g;g=function(){var p=this;var m=p._||(p._={});for(var n in i){var o=i[n];m[n]=typeof o=='function'?a.tools.bind(o,p):o;}l.apply(p,arguments);};}if(h){g.prototype=this.prototypedCopy(h.prototype); +g.prototype['constructor']=g;g.prototype.base=function(){this.base=h.prototype.base;h.apply(this,arguments);this.base=arguments.callee;};}if(j)this.extend(g.prototype,j,true);if(k)this.extend(g,k,true);return g;},addFunction:function(f,g){return e.push(function(){return f.apply(g||this,arguments);})-1;},removeFunction:function(f){e[f]=null;},callFunction:function(f){var g=e[f];return g&&g.apply(window,Array.prototype.slice.call(arguments,1));},cssLength:(function(){return function(f){return f+(!f||isNaN(Number(f))?'':'px');};})(),convertToPx:(function(){var f;return function(g){if(!f){f=d.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',a.document);a.document.getBody().append(f);}if(!/%$/.test(g)){f.setStyle('width',g);return f.$.clientWidth;}return g;};})(),repeat:function(f,g){return new Array(g+1).join(f);},tryThese:function(){var f;for(var g=0,h=arguments.length;g<h;g++){var i=arguments[g];try{f=i();break;}catch(j){}}return f;},genKey:function(){return Array.prototype.slice.call(arguments).join('-');}};})();var e=a.tools;a.dtd=(function(){var f=e.extend,g={isindex:1,fieldset:1},h={input:1,button:1,select:1,textarea:1,label:1},i=f({a:1},h),j=f({iframe:1},i),k={hr:1,ul:1,menu:1,div:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,mark:1,time:1,meter:1,command:1,keygen:1,output:1,progress:1,audio:1,video:1,details:1,datagrid:1,datalist:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1},l={ins:1,del:1,script:1,style:1},m=f({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1,wbr:1},l),n=f({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1,mark:1},m),o=f({p:1},n),p=f({iframe:1},n,h),q={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,mark:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,audio:1,video:1,details:1,datagrid:1,datalist:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1},r=f({a:1},p),s={tr:1},t={'#':1},u=f({param:1},q),v=f({form:1},g,j,k,o),w={li:1},x={style:1,script:1},y={base:1,link:1,meta:1,title:1},z=f(y,x),A={head:1,body:1},B={html:1},C={address:1,blockquote:1,center:1,dir:1,div:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,audio:1,video:1,details:1,datagrid:1,datalist:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}; +return{$nonBodyContent:f(B,A,y),$block:C,$blockLimit:{body:1,div:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,audio:1,video:1,details:1,datagrid:1,datalist:1,td:1,th:1,caption:1,form:1},$inline:r,$body:f({script:1,style:1},C),$cdata:{script:1,style:1},$empty:{area:1,base:1,br:1,col:1,hr:1,img:1,input:1,link:1,meta:1,param:1,wbr:1},$listItem:{dd:1,dt:1,li:1},$list:{ul:1,ol:1,dl:1},$nonEditable:{applet:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,script:1,textarea:1,param:1,audio:1,video:1},$captionBlock:{caption:1,legend:1},$removeEmpty:{abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1,mark:1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},html:A,head:z,style:t,script:t,body:v,base:{},link:{},meta:{},title:t,col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:v,td:v,br:{},wbr:{},th:v,center:v,kbd:r,button:f(o,k),basefont:{},h5:r,h4:r,samp:r,h6:r,ol:w,h1:r,h3:r,option:t,h2:r,form:f(g,j,k,o),select:{optgroup:1,option:1},font:r,ins:r,menu:w,abbr:r,label:r,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:r,tfoot:s,cite:r,li:v,input:{},iframe:v,strong:r,textarea:t,noframes:v,big:r,small:r,span:r,hr:{},dt:r,sub:r,optgroup:{option:1},param:{},bdo:r,'var':r,div:v,object:u,sup:r,dd:v,strike:r,area:{},dir:w,map:f({area:1,form:1,p:1},g,l,k),applet:u,dl:{dt:1,dd:1},del:r,isindex:{},fieldset:f({legend:1},q),thead:s,ul:w,acronym:r,b:r,a:p,blockquote:v,caption:r,i:r,u:r,tbody:s,s:r,address:f(j,o),tt:r,legend:r,q:r,pre:f(m,i),p:r,em:r,dfn:r,section:v,header:v,footer:v,nav:v,article:v,aside:v,figure:v,dialog:v,hgroup:v,mark:r,time:r,meter:r,menu:r,command:r,keygen:r,output:r,progress:u,audio:u,video:u,details:u,datagrid:u,datalist:u};})();var f=a.dtd;d.event=function(g){this.$=g;};d.event.prototype={getKey:function(){return this.$.keyCode||this.$.which;},getKeystroke:function(){var h=this;var g=h.getKey();if(h.$.ctrlKey||h.$.metaKey)g+=1114112;if(h.$.shiftKey)g+=2228224;if(h.$.altKey)g+=4456448;return g;},preventDefault:function(g){var h=this.$;if(h.preventDefault)h.preventDefault();else h.returnValue=false;if(g)this.stopPropagation();},stopPropagation:function(){var g=this.$;if(g.stopPropagation)g.stopPropagation();else g.cancelBubble=true; +},getTarget:function(){var g=this.$.target||this.$.srcElement;return g?new d.node(g):null;}};a.CTRL=1114112;a.SHIFT=2228224;a.ALT=4456448;d.domObject=function(g){if(g)this.$=g;};d.domObject.prototype=(function(){var g=function(h,i){return function(j){if(typeof a!='undefined')h.fire(i,new d.event(j));};};return{getPrivate:function(){var h;if(!(h=this.getCustomData('_')))this.setCustomData('_',h={});return h;},on:function(h){var k=this;var i=k.getCustomData('_cke_nativeListeners');if(!i){i={};k.setCustomData('_cke_nativeListeners',i);}if(!i[h]){var j=i[h]=g(k,h);if(k.$.attachEvent)k.$.attachEvent('on'+h,j);else if(k.$.addEventListener)k.$.addEventListener(h,j,!!a.event.useCapture);}return a.event.prototype.on.apply(k,arguments);},removeListener:function(h){var k=this;a.event.prototype.removeListener.apply(k,arguments);if(!k.hasListeners(h)){var i=k.getCustomData('_cke_nativeListeners'),j=i&&i[h];if(j){if(k.$.detachEvent)k.$.detachEvent('on'+h,j);else if(k.$.removeEventListener)k.$.removeEventListener(h,j,false);delete i[h];}}},removeAllListeners:function(){var k=this;var h=k.getCustomData('_cke_nativeListeners');for(var i in h){var j=h[i];if(k.$.detachEvent)k.$.detachEvent('on'+i,j);else if(k.$.removeEventListener)k.$.removeEventListener(i,j,false);delete h[i];}}};})();(function(g){var h={};a.on('reset',function(){h={};});g.equals=function(i){return i&&i.$===this.$;};g.setCustomData=function(i,j){var k=this.getUniqueId(),l=h[k]||(h[k]={});l[i]=j;return this;};g.getCustomData=function(i){var j=this.$['data-cke-expando'],k=j&&h[j];return k&&k[i];};g.removeCustomData=function(i){var j=this.$['data-cke-expando'],k=j&&h[j],l=k&&k[i];if(typeof l!='undefined')delete k[i];return l||null;};g.clearCustomData=function(){this.removeAllListeners();var i=this.$['data-cke-expando'];i&&delete h[i];};g.getUniqueId=function(){return this.$['data-cke-expando']||(this.$['data-cke-expando']=e.getNextNumber());};a.event.implementOn(g);})(d.domObject.prototype);d.window=function(g){d.domObject.call(this,g);};d.window.prototype=new d.domObject();e.extend(d.window.prototype,{focus:function(){if(b.webkit&&this.$.parent)this.$.parent.focus();this.$.focus();},getViewPaneSize:function(){var g=this.$.document,h=g.compatMode=='CSS1Compat';return{width:(h?g.documentElement.clientWidth:g.body.clientWidth)||0,height:(h?g.documentElement.clientHeight:g.body.clientHeight)||0};},getScrollPosition:function(){var g=this.$;if('pageXOffset' in g)return{x:g.pageXOffset||0,y:g.pageYOffset||0};else{var h=g.document; +return{x:h.documentElement.scrollLeft||h.body.scrollLeft||0,y:h.documentElement.scrollTop||h.body.scrollTop||0};}}});d.document=function(g){d.domObject.call(this,g);};var g=d.document;g.prototype=new d.domObject();e.extend(g.prototype,{appendStyleSheet:function(h){if(this.$.createStyleSheet)this.$.createStyleSheet(h);else{var i=new d.element('link');i.setAttributes({rel:'stylesheet',type:'text/css',href:h});this.getHead().append(i);}},appendStyleText:function(h){var k=this;if(k.$.createStyleSheet){var i=k.$.createStyleSheet('');i.cssText=h;}else{var j=new d.element('style',k);j.append(new d.text(h,k));k.getHead().append(j);}},createElement:function(h,i){var j=new d.element(h,this);if(i){if(i.attributes)j.setAttributes(i.attributes);if(i.styles)j.setStyles(i.styles);}return j;},createText:function(h){return new d.text(h,this);},focus:function(){this.getWindow().focus();},getById:function(h){var i=this.$.getElementById(h);return i?new d.element(i):null;},getByAddress:function(h,i){var j=this.$.documentElement;for(var k=0;j&&k<h.length;k++){var l=h[k];if(!i){j=j.childNodes[l];continue;}var m=-1;for(var n=0;n<j.childNodes.length;n++){var o=j.childNodes[n];if(i===true&&o.nodeType==3&&o.previousSibling&&o.previousSibling.nodeType==3)continue;m++;if(m==l){j=o;break;}}}return j?new d.node(j):null;},getElementsByTag:function(h,i){if(!(c&&!(document.documentMode>8))&&i)h=i+':'+h;return new d.nodeList(this.$.getElementsByTagName(h));},getHead:function(){var h=this.$.getElementsByTagName('head')[0];if(!h)h=this.getDocumentElement().append(new d.element('head'),true);else h=new d.element(h);return(this.getHead=function(){return h;})();},getBody:function(){var h=new d.element(this.$.body);return(this.getBody=function(){return h;})();},getDocumentElement:function(){var h=new d.element(this.$.documentElement);return(this.getDocumentElement=function(){return h;})();},getWindow:function(){var h=new d.window(this.$.parentWindow||this.$.defaultView);return(this.getWindow=function(){return h;})();},write:function(h){var i=this;i.$.open('text/html','replace');b.isCustomDomain()&&(i.$.domain=document.domain);i.$.write(h);i.$.close();}});d.node=function(h){if(h){switch(h.nodeType){case 9:return new g(h);case 1:return new d.element(h);case 3:return new d.text(h);}d.domObject.call(this,h);}return this;};d.node.prototype=new d.domObject();a.NODE_ELEMENT=1;a.NODE_DOCUMENT=9;a.NODE_TEXT=3;a.NODE_COMMENT=8;a.NODE_DOCUMENT_FRAGMENT=11;a.POSITION_IDENTICAL=0;a.POSITION_DISCONNECTED=1;a.POSITION_FOLLOWING=2; +a.POSITION_PRECEDING=4;a.POSITION_IS_CONTAINED=8;a.POSITION_CONTAINS=16;e.extend(d.node.prototype,{appendTo:function(h,i){h.append(this,i);return h;},clone:function(h,i){var j=this.$.cloneNode(h),k=function(l){if(l.nodeType!=1)return;if(!i)l.removeAttribute('id',false);l.removeAttribute('data-cke-expando',false);if(h){var m=l.childNodes;for(var n=0;n<m.length;n++)k(m[n]);}};k(j);return new d.node(j);},hasPrevious:function(){return!!this.$.previousSibling;},hasNext:function(){return!!this.$.nextSibling;},insertAfter:function(h){h.$.parentNode.insertBefore(this.$,h.$.nextSibling);return h;},insertBefore:function(h){h.$.parentNode.insertBefore(this.$,h.$);return h;},insertBeforeMe:function(h){this.$.parentNode.insertBefore(h.$,this.$);return h;},getAddress:function(h){var i=[],j=this.getDocument().$.documentElement,k=this.$;while(k&&k!=j){var l=k.parentNode;if(l)i.unshift(this.getIndex.call({$:k},h));k=l;}return i;},getDocument:function(){return new g(this.$.ownerDocument||this.$.parentNode.ownerDocument);},getIndex:function(h){var i=this.$,j=0;while(i=i.previousSibling){if(h&&i.nodeType==3&&(!i.nodeValue.length||i.previousSibling&&i.previousSibling.nodeType==3))continue;j++;}return j;},getNextSourceNode:function(h,i,j){if(j&&!j.call){var k=j;j=function(n){return!n.equals(k);};}var l=!h&&this.getFirst&&this.getFirst(),m;if(!l){if(this.type==1&&j&&j(this,true)===false)return null;l=this.getNext();}while(!l&&(m=(m||this).getParent())){if(j&&j(m,true)===false)return null;l=m.getNext();}if(!l)return null;if(j&&j(l)===false)return null;if(i&&i!=l.type)return l.getNextSourceNode(false,i,j);return l;},getPreviousSourceNode:function(h,i,j){if(j&&!j.call){var k=j;j=function(n){return!n.equals(k);};}var l=!h&&this.getLast&&this.getLast(),m;if(!l){if(this.type==1&&j&&j(this,true)===false)return null;l=this.getPrevious();}while(!l&&(m=(m||this).getParent())){if(j&&j(m,true)===false)return null;l=m.getPrevious();}if(!l)return null;if(j&&j(l)===false)return null;if(i&&l.type!=i)return l.getPreviousSourceNode(false,i,j);return l;},getPrevious:function(h){var i=this.$,j;do{i=i.previousSibling;j=i&&new d.node(i);}while(j&&h&&!h(j));return j;},getNext:function(h){var i=this.$,j;do{i=i.nextSibling;j=i&&new d.node(i);}while(j&&h&&!h(j));return j;},getParent:function(){var h=this.$.parentNode;return h&&h.nodeType==1?new d.node(h):null;},getParents:function(h){var i=this,j=[];do j[h?'push':'unshift'](i);while(i=i.getParent());return j;},getCommonAncestor:function(h){var j=this;if(h.equals(j))return j; +if(h.contains&&h.contains(j))return h;var i=j.contains?j:j.getParent();do{if(i.contains(h))return i;}while(i=i.getParent());return null;},getPosition:function(h){var i=this.$,j=h.$;if(i.compareDocumentPosition)return i.compareDocumentPosition(j);if(i==j)return 0;if(this.type==1&&h.type==1){if(i.contains){if(i.contains(j))return 16+4;if(j.contains(i))return 8+2;}if('sourceIndex' in i)return i.sourceIndex<0||j.sourceIndex<0?1:i.sourceIndex<j.sourceIndex?4:2;}var k=this.getAddress(),l=h.getAddress(),m=Math.min(k.length,l.length);for(var n=0;n<=m-1;n++){if(k[n]!=l[n]){if(n<m)return k[n]<l[n]?4:2;break;}}return k.length<l.length?16+4:8+2;},getAscendant:function(h,i){var j=this.$,k;if(!i)j=j.parentNode;while(j){if(j.nodeName&&(k=j.nodeName.toLowerCase(),typeof h=='string'?k==h:k in h))return new d.node(j);j=j.parentNode;}return null;},hasAscendant:function(h,i){var j=this.$;if(!i)j=j.parentNode;while(j){if(j.nodeName&&j.nodeName.toLowerCase()==h)return true;j=j.parentNode;}return false;},move:function(h,i){h.append(this.remove(),i);},remove:function(h){var i=this.$,j=i.parentNode;if(j){if(h)for(var k;k=i.firstChild;)j.insertBefore(i.removeChild(k),i);j.removeChild(i);}return this;},replace:function(h){this.insertBefore(h);h.remove();},trim:function(){this.ltrim();this.rtrim();},ltrim:function(){var k=this;var h;while(k.getFirst&&(h=k.getFirst())){if(h.type==3){var i=e.ltrim(h.getText()),j=h.getLength();if(!i){h.remove();continue;}else if(i.length<j){h.split(j-i.length);k.$.removeChild(k.$.firstChild);}}break;}},rtrim:function(){var k=this;var h;while(k.getLast&&(h=k.getLast())){if(h.type==3){var i=e.rtrim(h.getText()),j=h.getLength();if(!i){h.remove();continue;}else if(i.length<j){h.split(i.length);k.$.lastChild.parentNode.removeChild(k.$.lastChild);}}break;}if(!c&&!b.opera){h=k.$.lastChild;if(h&&h.type==1&&h.nodeName.toLowerCase()=='br')h.parentNode.removeChild(h);}},isReadOnly:function(){var h=this;while(h){if(h.type==1){if(h.is('body')||!!h.data('cke-editable'))break;if(h.getAttribute('contentEditable')=='false')return h;else if(h.getAttribute('contentEditable')=='true')break;}h=h.getParent();}return false;}});d.nodeList=function(h){this.$=h;};d.nodeList.prototype={count:function(){return this.$.length;},getItem:function(h){var i=this.$[h];return i?new d.node(i):null;}};d.element=function(h,i){if(typeof h=='string')h=(i?i.$:document).createElement(h);d.domObject.call(this,h);};var h=d.element;h.get=function(i){return i&&(i.$?i:new h(i));};h.prototype=new d.node(); +h.createFromHtml=function(i,j){var k=new h('div',j);k.setHtml(i);return k.getFirst().remove();};h.setMarker=function(i,j,k,l){var m=j.getCustomData('list_marker_id')||j.setCustomData('list_marker_id',e.getNextNumber()).getCustomData('list_marker_id'),n=j.getCustomData('list_marker_names')||j.setCustomData('list_marker_names',{}).getCustomData('list_marker_names');i[m]=j;n[k]=1;return j.setCustomData(k,l);};h.clearAllMarkers=function(i){for(var j in i)h.clearMarkers(i,i[j],1);};h.clearMarkers=function(i,j,k){var l=j.getCustomData('list_marker_names'),m=j.getCustomData('list_marker_id');for(var n in l)j.removeCustomData(n);j.removeCustomData('list_marker_names');if(k){j.removeCustomData('list_marker_id');delete i[m];}};e.extend(h.prototype,{type:1,addClass:function(i){var j=this.$.className;if(j){var k=new RegExp('(?:^|\\s)'+i+'(?:\\s|$)','');if(!k.test(j))j+=' '+i;}this.$.className=j||i;},removeClass:function(i){var j=this.getAttribute('class');if(j){var k=new RegExp('(?:^|\\s+)'+i+'(?=\\s|$)','i');if(k.test(j)){j=j.replace(k,'').replace(/^\s+/,'');if(j)this.setAttribute('class',j);else this.removeAttribute('class');}}},hasClass:function(i){var j=new RegExp('(?:^|\\s+)'+i+'(?=\\s|$)','');return j.test(this.getAttribute('class'));},append:function(i,j){var k=this;if(typeof i=='string')i=k.getDocument().createElement(i);if(j)k.$.insertBefore(i.$,k.$.firstChild);else k.$.appendChild(i.$);return i;},appendHtml:function(i){var k=this;if(!k.$.childNodes.length)k.setHtml(i);else{var j=new h('div',k.getDocument());j.setHtml(i);j.moveChildren(k);}},appendText:function(i){if(this.$.text!=undefined)this.$.text+=i;else this.append(new d.text(i));},appendBogus:function(){var k=this;var i=k.getLast();while(i&&i.type==3&&!e.rtrim(i.getText()))i=i.getPrevious();if(!i||!i.is||!i.is('br')){var j=b.opera?k.getDocument().createText(''):k.getDocument().createElement('br');b.gecko&&j.setAttribute('type','_moz');k.append(j);}},breakParent:function(i){var l=this;var j=new d.range(l.getDocument());j.setStartAfter(l);j.setEndAfter(i);var k=j.extractContents();j.insertNode(l.remove());k.insertAfterNode(l);},contains:c||b.webkit?function(i){var j=this.$;return i.type!=1?j.contains(i.getParent().$):j!=i.$&&j.contains(i.$);}:function(i){return!!(this.$.compareDocumentPosition(i.$)&16);},focus:(function(){function i(){try{this.$.focus();}catch(j){}};return function(j){if(j)e.setTimeout(i,100,this);else i.call(this);};})(),getHtml:function(){var i=this.$.innerHTML;return c?i.replace(/<\?[^>]*>/g,''):i; +},getOuterHtml:function(){var j=this;if(j.$.outerHTML)return j.$.outerHTML.replace(/<\?[^>]*>/,'');var i=j.$.ownerDocument.createElement('div');i.appendChild(j.$.cloneNode(true));return i.innerHTML;},setHtml:function(i){return this.$.innerHTML=i;},setText:function(i){h.prototype.setText=this.$.innerText!=undefined?function(j){return this.$.innerText=j;}:function(j){return this.$.textContent=j;};return this.setText(i);},getAttribute:(function(){var i=function(j){return this.$.getAttribute(j,2);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){var n=this;switch(j){case 'class':j='className';break;case 'http-equiv':j='httpEquiv';break;case 'name':return n.$.name;case 'tabindex':var k=i.call(n,j);if(k!==0&&n.$.tabIndex===0)k=null;return k;break;case 'checked':var l=n.$.attributes.getNamedItem(j),m=l.specified?l.nodeValue:n.$.checked;return m?'checked':null;case 'hspace':case 'value':return n.$[j];case 'style':return n.$.style.cssText;}return i.call(n,j);};else return i;})(),getChildren:function(){return new d.nodeList(this.$.childNodes);},getComputedStyle:c?function(i){return this.$.currentStyle[e.cssStyleToDomStyle(i)];}:function(i){return this.getWindow().$.getComputedStyle(this.$,'').getPropertyValue(i);},getDtd:function(){var i=f[this.getName()];this.getDtd=function(){return i;};return i;},getElementsByTag:g.prototype.getElementsByTag,getTabIndex:c?function(){var i=this.$.tabIndex;if(i===0&&!f.$tabIndex[this.getName()]&&parseInt(this.getAttribute('tabindex'),10)!==0)i=-1;return i;}:b.webkit?function(){var i=this.$.tabIndex;if(i==undefined){i=parseInt(this.getAttribute('tabindex'),10);if(isNaN(i))i=-1;}return i;}:function(){return this.$.tabIndex;},getText:function(){return this.$.textContent||this.$.innerText||'';},getWindow:function(){return this.getDocument().getWindow();},getId:function(){return this.$.id||null;},getNameAtt:function(){return this.$.name||null;},getName:function(){var i=this.$.nodeName.toLowerCase();if(c&&!(document.documentMode>8)){var j=this.$.scopeName;if(j!='HTML')i=j.toLowerCase()+':'+i;}return(this.getName=function(){return i;})();},getValue:function(){return this.$.value;},getFirst:function(i){var j=this.$.firstChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getNext(i);return k;},getLast:function(i){var j=this.$.lastChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getPrevious(i);return k;},getStyle:function(i){return this.$.style[e.cssStyleToDomStyle(i)];},is:function(){var i=this.getName();for(var j=0;j<arguments.length;j++){if(arguments[j]==i)return true; +}return false;},isEditable:function(){if(this.isReadOnly())return false;var i=this.getName(),j=!f.$nonEditable[i]&&(f[i]||f.span);return j&&j['#'];},isIdentical:function(i){if(this.getName()!=i.getName())return false;var j=this.$.attributes,k=i.$.attributes,l=j.length,m=k.length;for(var n=0;n<l;n++){var o=j[n];if(o.nodeName=='_moz_dirty')continue;if((!c||o.specified&&o.nodeName!='data-cke-expando')&&o.nodeValue!=i.getAttribute(o.nodeName))return false;}if(c)for(n=0;n<m;n++){o=k[n];if(o.specified&&o.nodeName!='data-cke-expando'&&o.nodeValue!=this.getAttribute(o.nodeName))return false;}return true;},isVisible:function(){var i=!!this.$.offsetHeight&&this.getComputedStyle('visibility')!='hidden',j,k;if(i&&(b.webkit||b.opera)){j=this.getWindow();if(!j.equals(a.document.getWindow())&&(k=j.$.frameElement))i=new h(k).isVisible();}return i;},isEmptyInlineRemoveable:function(){if(!f.$removeEmpty[this.getName()])return false;var i=this.getChildren();for(var j=0,k=i.count();j<k;j++){var l=i.getItem(j);if(l.type==1&&l.data('cke-bookmark'))continue;if(l.type==1&&!l.isEmptyInlineRemoveable()||l.type==3&&e.trim(l.getText()))return false;}return true;},hasAttributes:c&&(b.ie7Compat||b.ie6Compat)?function(){var i=this.$.attributes;for(var j=0;j<i.length;j++){var k=i[j];switch(k.nodeName){case 'class':if(this.getAttribute('class'))return true;case 'data-cke-expando':continue;default:if(k.specified)return true;}}return false;}:function(){var i=this.$.attributes,j=i.length,k={'data-cke-expando':1,_moz_dirty:1};return j>0&&(j>2||!k[i[0].nodeName]||j==2&&!k[i[1].nodeName]);},hasAttribute:(function(){function i(j){var k=this.$.attributes.getNamedItem(j);return!!(k&&k.specified);};return c&&b.version<8?function(j){if(j=='name')return!!this.$.name;return i.call(this,j);}:i;})(),hide:function(){this.setStyle('display','none');},moveChildren:function(i,j){var k=this.$;i=i.$;if(k==i)return;var l;if(j)while(l=k.lastChild)i.insertBefore(k.removeChild(l),i.firstChild);else while(l=k.firstChild)i.appendChild(k.removeChild(l));},mergeSiblings:(function(){function i(j,k,l){if(k&&k.type==1){var m=[];while(k.data('cke-bookmark')||k.isEmptyInlineRemoveable()){m.push(k);k=l?k.getNext():k.getPrevious();if(!k||k.type!=1)return;}if(j.isIdentical(k)){var n=l?j.getLast():j.getFirst();while(m.length)m.shift().move(j,!l);k.moveChildren(j,!l);k.remove();if(n&&n.type==1)n.mergeSiblings();}}};return function(j){var k=this;if(!(j===false||f.$removeEmpty[k.getName()]||k.is('a')))return;i(k,k.getNext(),true); +i(k,k.getPrevious());};})(),show:function(){this.setStyles({display:'',visibility:''});},setAttribute:(function(){var i=function(j,k){this.$.setAttribute(j,k);return this;};if(c&&(b.ie7Compat||b.ie6Compat))return function(j,k){var l=this;if(j=='class')l.$.className=k;else if(j=='style')l.$.style.cssText=k;else if(j=='tabindex')l.$.tabIndex=k;else if(j=='checked')l.$.checked=k;else i.apply(l,arguments);return l;};else if(b.ie8Compat&&b.secure)return function(j,k){if(j=='src'&&k.match(/^http:\/\//))try{i.apply(this,arguments);}catch(l){}else i.apply(this,arguments);return this;};else return i;})(),setAttributes:function(i){for(var j in i)this.setAttribute(j,i[j]);return this;},setValue:function(i){this.$.value=i;return this;},removeAttribute:(function(){var i=function(j){this.$.removeAttribute(j);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){if(j=='class')j='className';else if(j=='tabindex')j='tabIndex';i.call(this,j);};else return i;})(),removeAttributes:function(i){if(e.isArray(i))for(var j=0;j<i.length;j++)this.removeAttribute(i[j]);else for(var k in i)i.hasOwnProperty(k)&&this.removeAttribute(k);},removeStyle:function(i){var j=this;j.setStyle(i,'');if(j.$.style.removeAttribute)j.$.style.removeAttribute(e.cssStyleToDomStyle(i));if(!j.$.style.cssText)j.removeAttribute('style');},setStyle:function(i,j){this.$.style[e.cssStyleToDomStyle(i)]=j;return this;},setStyles:function(i){for(var j in i)this.setStyle(j,i[j]);return this;},setOpacity:function(i){if(c){i=Math.round(i*100);this.setStyle('filter',i>=100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+i+')');}else this.setStyle('opacity',i);},unselectable:b.gecko?function(){this.$.style.MozUserSelect='none';this.on('dragstart',function(i){i.data.preventDefault();});}:b.webkit?function(){this.$.style.KhtmlUserSelect='none';this.on('dragstart',function(i){i.data.preventDefault();});}:function(){if(c||b.opera){var i=this.$,j,k=0;i.unselectable='on';while(j=i.all[k++])switch(j.tagName.toLowerCase()){case 'iframe':case 'textarea':case 'input':case 'select':break;default:j.unselectable='on';}}},getPositionedAncestor:function(){var i=this;while(i.getName()!='html'){if(i.getComputedStyle('position')!='static')return i;i=i.getParent();}return null;},getDocumentPosition:function(i){var D=this;var j=0,k=0,l=D.getDocument().getBody(),m=D.getDocument().$.compatMode=='BackCompat',n=D.getDocument();if(document.documentElement.getBoundingClientRect){var o=D.$.getBoundingClientRect(),p=n.$,q=p.documentElement,r=q.clientTop||l.$.clientTop||0,s=q.clientLeft||l.$.clientLeft||0,t=true; +if(c){var u=n.getDocumentElement().contains(D),v=n.getBody().contains(D);t=m&&v||!m&&u;}if(t){j=o.left+(!m&&q.scrollLeft||l.$.scrollLeft);j-=s;k=o.top+(!m&&q.scrollTop||l.$.scrollTop);k-=r;}}else{var w=D,x=null,y;while(w&&!(w.getName()=='body'||w.getName()=='html')){j+=w.$.offsetLeft-w.$.scrollLeft;k+=w.$.offsetTop-w.$.scrollTop;if(!w.equals(D)){j+=w.$.clientLeft||0;k+=w.$.clientTop||0;}var z=x;while(z&&!z.equals(w)){j-=z.$.scrollLeft;k-=z.$.scrollTop;z=z.getParent();}x=w;w=(y=w.$.offsetParent)?new h(y):null;}}if(i){var A=D.getWindow(),B=i.getWindow();if(!A.equals(B)&&A.$.frameElement){var C=new h(A.$.frameElement).getDocumentPosition(i);j+=C.x;k+=C.y;}}if(!document.documentElement.getBoundingClientRect)if(b.gecko&&!m){j+=D.$.clientLeft?1:0;k+=D.$.clientTop?1:0;}return{x:j,y:k};},scrollIntoView:function(i){var o=this;var j=o.getWindow(),k=j.getViewPaneSize().height,l=k*-1;if(i)l+=k;else{l+=o.$.offsetHeight||0;l+=parseInt(o.getComputedStyle('marginBottom')||0,10)||0;}var m=o.getDocumentPosition();l+=m.y;l=l<0?0:l;var n=j.getScrollPosition().y;if(l>n||l<n-k)j.$.scrollTo(0,l);},setState:function(i){var j=this;switch(i){case 1:j.addClass('cke_on');j.removeClass('cke_off');j.removeClass('cke_disabled');break;case 0:j.addClass('cke_disabled');j.removeClass('cke_off');j.removeClass('cke_on');break;default:j.addClass('cke_off');j.removeClass('cke_on');j.removeClass('cke_disabled');break;}},getFrameDocument:function(){var i=this.$;try{i.contentWindow.document;}catch(j){i.src=i.src;if(c&&b.version<7)window.showModalDialog('javascript:document.write("<script>window.setTimeout(function(){window.close();},50);</script>")');}return i&&new g(i.contentWindow.document);},copyAttributes:function(i,j){var p=this;var k=p.$.attributes;j=j||{};for(var l=0;l<k.length;l++){var m=k[l],n=m.nodeName.toLowerCase(),o;if(n in j)continue;if(n=='checked'&&(o=p.getAttribute(n)))i.setAttribute(n,o);else if(m.specified||c&&m.nodeValue&&n=='value'){o=p.getAttribute(n);if(o===null)o=m.nodeValue;i.setAttribute(n,o);}}if(p.$.style.cssText!=='')i.$.style.cssText=p.$.style.cssText;},renameNode:function(i){var l=this;if(l.getName()==i)return;var j=l.getDocument(),k=new h(i,j);l.copyAttributes(k);l.moveChildren(k);l.getParent()&&l.$.parentNode.replaceChild(k.$,l.$);k.$['data-cke-expando']=l.$['data-cke-expando'];l.$=k.$;},getChild:function(i){var j=this.$;if(!i.slice)j=j.childNodes[i];else while(i.length>0&&j)j=j.childNodes[i.shift()];return j?new d.node(j):null;},getChildCount:function(){return this.$.childNodes.length; +},disableContextMenu:function(){this.on('contextmenu',function(i){if(!i.data.getTarget().hasClass('cke_enable_context_menu'))i.data.preventDefault();});},getDirection:function(i){var j=this;return i?j.getComputedStyle('direction')||j.getDirection()||j.getDocument().$.dir||j.getDocument().getBody().getDirection(1):j.getStyle('direction')||j.getAttribute('dir');},data:function(i,j){i='data-'+i;if(j===undefined)return this.getAttribute(i);else if(j===false)this.removeAttribute(i);else this.setAttribute(i,j);return null;}});(function(){var i={width:['border-left-width','border-right-width','padding-left','padding-right'],height:['border-top-width','border-bottom-width','padding-top','padding-bottom']};function j(k){var l=0;for(var m=0,n=i[k].length;m<n;m++)l+=parseInt(this.getComputedStyle(i[k][m])||0,10)||0;return l;};h.prototype.setSize=function(k,l,m){if(typeof l=='number'){if(m&&!(c&&b.quirks))l-=j.call(this,k);this.setStyle(k,l+'px');}};h.prototype.getSize=function(k,l){var m=Math.max(this.$['offset'+e.capitalize(k)],this.$['client'+e.capitalize(k)])||0;if(l)m-=j.call(this,k);return m;};})();a.command=function(i,j){this.uiItems=[];this.exec=function(k){if(this.state==0)return false;if(this.editorFocus)i.focus();return j.exec.call(this,i,k)!==false;};e.extend(this,j,{modes:{wysiwyg:1},editorFocus:1,state:2});a.event.call(this);};a.command.prototype={enable:function(){var i=this;if(i.state==0)i.setState(!i.preserveState||typeof i.previousState=='undefined'?2:i.previousState);},disable:function(){this.setState(0);},setState:function(i){var j=this;if(j.state==i)return false;j.previousState=j.state;j.state=i;j.fire('state');return true;},toggleState:function(){var i=this;if(i.state==2)i.setState(1);else if(i.state==1)i.setState(2);}};a.event.implementOn(a.command.prototype,true);a.ENTER_P=1;a.ENTER_BR=2;a.ENTER_DIV=3;a.config={customConfig:'config.js',autoUpdateElement:true,baseHref:'',contentsCss:a.basePath+'contents.css',contentsLangDirection:'ui',contentsLanguage:'',language:'',defaultLanguage:'en',enterMode:1,forceEnterMode:false,shiftEnterMode:2,corePlugins:'',docType:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',bodyId:'',bodyClass:'',fullPage:false,height:200,plugins:'about,a11yhelp,basicstyles,bidi,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,dialogadvtab,div,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,iframe,image,indent,justify,keystrokes,link,list,liststyle,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,showborders,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',extraPlugins:'',removePlugins:'',protectedSource:[],tabIndex:0,theme:'default',skin:'kama',width:'',baseFloatZIndex:10000}; +var i=a.config;a.focusManager=function(j){if(j.focusManager)return j.focusManager;this.hasFocus=false;this._={editor:j};return this;};a.focusManager.prototype={focus:function(){var k=this;if(k._.timer)clearTimeout(k._.timer);if(!k.hasFocus){if(a.currentInstance)a.currentInstance.focusManager.forceBlur();var j=k._.editor;j.container.getChild(1).addClass('cke_focus');k.hasFocus=true;j.fire('focus');}},blur:function(){var j=this;if(j._.timer)clearTimeout(j._.timer);j._.timer=setTimeout(function(){delete j._.timer;j.forceBlur();},100);},forceBlur:function(){if(this.hasFocus){var j=this._.editor;j.container.getChild(1).removeClass('cke_focus');this.hasFocus=false;j.fire('blur');}}};(function(){var j={};a.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,'en-au':1,'en-ca':1,'en-gb':1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,'fr-ca':1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,lt:1,lv:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,'pt-br':1,pt:1,ro:1,ru:1,sk:1,sl:1,'sr-latn':1,sr:1,sv:1,th:1,tr:1,uk:1,vi:1,'zh-cn':1,zh:1},load:function(k,l,m){if(!k||!a.lang.languages[k])k=this.detect(l,k);if(!this[k])a.scriptLoader.load(a.getUrl('lang/'+k+'.js'),function(){m(k,this[k]);},this);else m(k,this[k]);},detect:function(k,l){var m=this.languages;l=l||navigator.userLanguage||navigator.language;var n=l.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),o=n[1],p=n[2];if(m[o+'-'+p])o=o+'-'+p;else if(!m[o])o=null;a.lang.detect=o?function(){return o;}:function(q){return q;};return o||k;}};})();a.scriptLoader=(function(){var j={},k={};return{load:function(l,m,n,o){var p=typeof l=='string';if(p)l=[l];if(!n)n=a;var q=l.length,r=[],s=[],t=function(y){if(m)if(p)m.call(n,y);else m.call(n,r,s);};if(q===0){t(true);return;}var u=function(y,z){(z?r:s).push(y);if(--q<=0){o&&a.document.getDocumentElement().removeStyle('cursor');t(z);}},v=function(y,z){j[y]=1;var A=k[y];delete k[y];for(var B=0;B<A.length;B++)A[B](y,z);},w=function(y){if(j[y]){u(y,true);return;}var z=k[y]||(k[y]=[]);z.push(u);if(z.length>1)return;var A=new h('script');A.setAttributes({type:'text/javascript',src:y});if(m)if(c)A.$.onreadystatechange=function(){if(A.$.readyState=='loaded'||A.$.readyState=='complete'){A.$.onreadystatechange=null;v(y,true);}};else{A.$.onload=function(){setTimeout(function(){v(y,true);},0);};A.$.onerror=function(){v(y,false);};}A.appendTo(a.document.getHead());};o&&a.document.getDocumentElement().setStyle('cursor','wait');for(var x=0;x<q;x++)w(l[x]);}};})();a.resourceManager=function(j,k){var l=this; +l.basePath=j;l.fileName=k;l.registered={};l.loaded={};l.externals={};l._={waitingList:{}};};a.resourceManager.prototype={add:function(j,k){if(this.registered[j])throw '[CKEDITOR.resourceManager.add] The resource name "'+j+'" is already registered.';a.fire(j+e.capitalize(this.fileName)+'Ready',this.registered[j]=k||{});},get:function(j){return this.registered[j]||null;},getPath:function(j){var k=this.externals[j];return a.getUrl(k&&k.dir||this.basePath+j+'/');},getFilePath:function(j){var k=this.externals[j];return a.getUrl(this.getPath(j)+(k&&typeof k.file=='string'?k.file:this.fileName+'.js'));},addExternal:function(j,k,l){j=j.split(',');for(var m=0;m<j.length;m++){var n=j[m];this.externals[n]={dir:k,file:l};}},load:function(j,k,l){if(!e.isArray(j))j=j?[j]:[];var m=this.loaded,n=this.registered,o=[],p={},q={};for(var r=0;r<j.length;r++){var s=j[r];if(!s)continue;if(!m[s]&&!n[s]){var t=this.getFilePath(s);o.push(t);if(!(t in p))p[t]=[];p[t].push(s);}else q[s]=this.get(s);}a.scriptLoader.load(o,function(u,v){if(v.length)throw '[CKEDITOR.resourceManager.load] Resource name "'+p[v[0]].join(',')+'" was not found at "'+v[0]+'".';for(var w=0;w<u.length;w++){var x=p[u[w]];for(var y=0;y<x.length;y++){var z=x[y];q[z]=this.get(z);m[z]=1;}}k.call(l,q);},this);}};a.plugins=new a.resourceManager('plugins/','plugin');var j=a.plugins;j.load=e.override(j.load,function(k){return function(l,m,n){var o={},p=function(q){k.call(this,q,function(r){e.extend(o,r);var s=[];for(var t in r){var u=r[t],v=u&&u.requires;if(v)for(var w=0;w<v.length;w++){if(!o[v[w]])s.push(v[w]);}}if(s.length)p.call(this,s);else{for(t in o){u=o[t];if(u.onLoad&&!u.onLoad._called){u.onLoad();u.onLoad._called=1;}}if(m)m.call(n||window,o);}},this);};p.call(this,l);};});j.setLang=function(k,l,m){var n=this.get(k),o=n.langEntries||(n.langEntries={}),p=n.lang||(n.lang=[]);if(e.indexOf(p,l)==-1)p.push(l);o[l]=m;};a.skins=(function(){var k={},l={},m=function(n,o,p,q){var r=k[o];if(!n.skin){n.skin=r;if(r.init)r.init(n);}var s=function(B){for(var C=0;C<B.length;C++)B[C]=a.getUrl(l[o]+B[C]);};function t(B,C){return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(D,E,F,G){if(/^\/|^\w?:/.test(F))return D;else return 'url('+C+E+F+G+')';});};p=r[p];var u=!p||!!p._isLoaded;if(u)q&&q();else{var v=p._pending||(p._pending=[]);v.push(q);if(v.length>1)return;var w=!p.css||!p.css.length,x=!p.js||!p.js.length,y=function(){if(w&&x){p._isLoaded=1;for(var B=0;B<v.length;B++){if(v[B])v[B]();}}};if(!w){var z=p.css;if(e.isArray(z)){s(z); +for(var A=0;A<z.length;A++)a.document.appendStyleSheet(z[A]);}else{z=t(z,a.getUrl(l[o]));a.document.appendStyleText(z);}p.css=z;w=1;}if(!x){s(p.js);a.scriptLoader.load(p.js,function(){x=1;y();});}y();}};return{add:function(n,o){k[n]=o;o.skinPath=l[n]||(l[n]=a.getUrl('skins/'+n+'/'));},load:function(n,o,p){var q=n.skinName,r=n.skinPath;if(k[q])m(n,q,o,p);else{l[q]=r;a.scriptLoader.load(a.getUrl(r+'skin.js'),function(){m(n,q,o,p);});}}};})();a.themes=new a.resourceManager('themes/','theme');a.ui=function(k){if(k.ui)return k.ui;this._={handlers:{},items:{},editor:k};return this;};var k=a.ui;k.prototype={add:function(l,m,n){this._.items[l]={type:m,command:n.command||null,args:Array.prototype.slice.call(arguments,2)};},create:function(l){var q=this;var m=q._.items[l],n=m&&q._.handlers[m.type],o=m&&m.command&&q._.editor.getCommand(m.command),p=n&&n.create.apply(q,m.args);m&&(p=e.extend(p,q._.editor.skin[m.type],true));if(o)o.uiItems.push(p);return p;},addHandler:function(l,m){this._.handlers[l]=m;}};a.event.implementOn(k);(function(){var l=0,m=function(){var x='editor'+ ++l;return a.instances&&a.instances[x]?m():x;},n={},o=function(x){var y=x.config.customConfig;if(!y)return false;y=a.getUrl(y);var z=n[y]||(n[y]={});if(z.fn){z.fn.call(x,x.config);if(a.getUrl(x.config.customConfig)==y||!o(x))x.fireOnce('customConfigLoaded');}else a.scriptLoader.load(y,function(){if(a.editorConfig)z.fn=a.editorConfig;else z.fn=function(){};o(x);});return true;},p=function(x,y){x.on('customConfigLoaded',function(){if(y){if(y.on)for(var z in y.on)x.on(z,y.on[z]);e.extend(x.config,y,true);delete x.config.on;}q(x);});if(y&&y.customConfig!=undefined)x.config.customConfig=y.customConfig;if(!o(x))x.fireOnce('customConfigLoaded');},q=function(x){var y=x.config.skin.split(','),z=y[0],A=a.getUrl(y[1]||'skins/'+z+'/');x.skinName=z;x.skinPath=A;x.skinClass='cke_skin_'+z;x.tabIndex=x.config.tabIndex||x.element.getAttribute('tabindex')||0;x.readOnly=!!(x.config.readOnly||x.element.getAttribute('disabled'));x.fireOnce('configLoaded');t(x);},r=function(x){a.lang.load(x.config.language,x.config.defaultLanguage,function(y,z){x.langCode=y;x.lang=e.prototypedCopy(z);if(b.gecko&&b.version<10900&&x.lang.dir=='rtl')x.lang.dir='ltr';x.fire('langLoaded');var A=x.config;A.contentsLangDirection=='ui'&&(A.contentsLangDirection=x.lang.dir);s(x);});},s=function(x){var y=x.config,z=y.plugins,A=y.extraPlugins,B=y.removePlugins;if(A){var C=new RegExp('(?:^|,)(?:'+A.replace(/\s*,\s*/g,'|')+')(?=,|$)','g');z=z.replace(C,''); +z+=','+A;}if(B){C=new RegExp('(?:^|,)(?:'+B.replace(/\s*,\s*/g,'|')+')(?=,|$)','g');z=z.replace(C,'');}b.air&&(z+=',adobeair');j.load(z.split(','),function(D){var E=[],F=[],G=[];x.plugins=D;for(var H in D){var I=D[H],J=I.lang,K=j.getPath(H),L=null;I.path=K;if(J){L=e.indexOf(J,x.langCode)>=0?x.langCode:J[0];if(!I.langEntries||!I.langEntries[L])G.push(a.getUrl(K+'lang/'+L+'.js'));else{e.extend(x.lang,I.langEntries[L]);L=null;}}F.push(L);E.push(I);}a.scriptLoader.load(G,function(){var M=['beforeInit','init','afterInit'];for(var N=0;N<M.length;N++)for(var O=0;O<E.length;O++){var P=E[O];if(N===0&&F[O]&&P.lang)e.extend(x.lang,P.langEntries[F[O]]);if(P[M[N]])P[M[N]](x);}x.fire('pluginsLoaded');u(x);});});},t=function(x){a.skins.load(x,'editor',function(){r(x);});},u=function(x){var y=x.config.theme;a.themes.load(y,function(){var z=x.theme=a.themes.get(y);z.path=a.themes.getPath(y);z.build(x);if(x.config.autoUpdateElement)v(x);});},v=function(x){var y=x.element;if(x.elementMode==1&&y.is('textarea')){var z=y.$.form&&new h(y.$.form);if(z){function A(){x.updateElement();};z.on('submit',A);if(!z.$.submit.nodeName&&!z.$.submit.length)z.$.submit=e.override(z.$.submit,function(B){return function(){x.updateElement();if(B.apply)B.apply(this,arguments);else B();};});x.on('destroy',function(){z.removeListener('submit',A);});}}};function w(){var x,y=this._.commands,z=this.mode;if(!z)return;for(var A in y){x=y[A];x[x.startDisabled?'disable':this.readOnly&&!x.readOnly?'disable':x.modes[z]?'enable':'disable']();}};a.editor.prototype._init=function(){var z=this;var x=h.get(z._.element),y=z._.instanceConfig;delete z._.element;delete z._.instanceConfig;z._.commands={};z._.styles=[];z.element=x;z.name=x&&z.elementMode==1&&(x.getId()||x.getNameAtt())||m();if(z.name in a.instances)throw '[CKEDITOR.editor] The instance "'+z.name+'" already exists.';z.id=e.getNextId();z.config=e.prototypedCopy(i);z.ui=new k(z);z.focusManager=new a.focusManager(z);a.fire('instanceCreated',null,z);z.on('mode',w,null,null,1);z.on('readOnly',w,null,null,1);p(z,y);};})();e.extend(a.editor.prototype,{addCommand:function(l,m){return this._.commands[l]=new a.command(this,m);},addCss:function(l){this._.styles.push(l);},destroy:function(l){var m=this;if(!l)m.updateElement();m.fire('destroy');m.theme&&m.theme.destroy(m);a.remove(m);a.fire('instanceDestroyed',null,m);},execCommand:function(l,m){var n=this.getCommand(l),o={name:l,commandData:m,command:n};if(n&&n.state!=0)if(this.fire('beforeCommandExec',o)!==true){o.returnValue=n.exec(o.commandData); +if(!n.async&&this.fire('afterCommandExec',o)!==true)return o.returnValue;}return false;},getCommand:function(l){return this._.commands[l];},getData:function(){var n=this;n.fire('beforeGetData');var l=n._.data;if(typeof l!='string'){var m=n.element;if(m&&n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();else l='';}l={dataValue:l};n.fire('getData',l);return l.dataValue;},getSnapshot:function(){var l=this.fire('getSnapshot');if(typeof l!='string'){var m=this.element;if(m&&this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();}return l;},loadSnapshot:function(l){this.fire('loadSnapshot',l);},setData:function(l,m,n){if(m)this.on('dataReady',function(p){p.removeListener();m.call(p.editor);});var o={dataValue:l};!n&&this.fire('setData',o);this._.data=o.dataValue;!n&&this.fire('afterSetData',o);},setReadOnly:function(l){l=l==undefined||l;if(this.readOnly!=l){this.readOnly=l;this.fire('readOnly');}},insertHtml:function(l){this.fire('insertHtml',l);},insertText:function(l){this.fire('insertText',l);},insertElement:function(l){this.fire('insertElement',l);},checkDirty:function(){return this.mayBeDirty&&this._.previousValue!==this.getSnapshot();},resetDirty:function(){if(this.mayBeDirty)this._.previousValue=this.getSnapshot();},updateElement:function(){var n=this;var l=n.element;if(l&&n.elementMode==1){var m=n.getData();if(n.config.htmlEncodeOutput)m=e.htmlEncode(m);if(l.is('textarea'))l.setValue(m);else l.setHtml(m);}}});a.on('loaded',function(){var l=a.editor._pending;if(l){delete a.editor._pending;for(var m=0;m<l.length;m++)l[m]._init();}});a.htmlParser=function(){this._={htmlPartsRegex:new RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))",'g')};};(function(){var l=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,m={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};a.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(n){var A=this;var o,p,q=0,r;while(o=A._.htmlPartsRegex.exec(n)){var s=o.index;if(s>q){var t=n.substring(q,s);if(r)r.push(t);else A.onText(t);}q=A._.htmlPartsRegex.lastIndex;if(p=o[1]){p=p.toLowerCase();if(r&&f.$cdata[p]){A.onCDATA(r.join(''));r=null;}if(!r){A.onTagClose(p);continue;}}if(r){r.push(o[0]);continue;}if(p=o[3]){p=p.toLowerCase();if(/="/.test(p))continue; +var u={},v,w=o[4],x=!!(w&&w.charAt(w.length-1)=='/');if(w)while(v=l.exec(w)){var y=v[1].toLowerCase(),z=v[2]||v[3]||v[4]||'';if(!z&&m[y])u[y]=y;else u[y]=z;}A.onTagOpen(p,u,x);if(!r&&f.$cdata[p])r=[];continue;}if(p=o[2])A.onComment(p);}if(n.length>q)A.onText(n.substring(q,n.length));}};})();a.htmlParser.comment=function(l){this.value=l;this._={isBlockLike:false};};a.htmlParser.comment.prototype={type:8,writeHtml:function(l,m){var n=this.value;if(m){if(!(n=m.onComment(n,this)))return;if(typeof n!='string'){n.parent=this.parent;n.writeHtml(l,m);return;}}l.comment(n);}};(function(){var l=/[\t\r\n ]{2,}|[\t\r\n]/g;a.htmlParser.text=function(m){this.value=m;this._={isBlockLike:false};};a.htmlParser.text.prototype={type:3,writeHtml:function(m,n){var o=this.value;if(n&&!(o=n.onText(o,this)))return;m.text(o);}};})();(function(){a.htmlParser.cdata=function(l){this.value=l;};a.htmlParser.cdata.prototype={type:3,writeHtml:function(l){l.write(this.value);}};})();a.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false};};(function(){var l=e.extend({table:1,ul:1,ol:1,dl:1},f.table,f.ul,f.ol,f.dl),m=c&&b.version<8?{dd:1,dt:1}:{},n={ol:1,ul:1},o=e.extend({},{html:1},f.html,f.body,f.head,{style:1,script:1});a.htmlParser.fragment.fromHtml=function(p,q,r){var s=new a.htmlParser(),t=r||new a.htmlParser.fragment(),u=[],v=[],w=t,x=false;function y(B){var C;if(u.length>0)for(var D=0;D<u.length;D++){var E=u[D],F=E.name,G=f[F],H=w.name&&f[w.name];if((!H||H[F])&&(!B||!G||G[B]||!f[B])){if(!C){z();C=1;}E=E.clone();E.parent=w;w=E;u.splice(D,1);D--;}}};function z(){while(v.length)w.add(v.shift());};function A(B,C,D){if(B.previous!==undefined)return;C=C||w||t;var E=w;if(q&&(!C.type||C.name=='body')){var F,G;if(B.attributes&&(G=B.attributes['data-cke-real-element-type']))F=G;else F=B.name;if(F&&!(F in f.$body||F=='body'||B.isOrphan)){w=C;s.onTagOpen(q,{});B.returnPoint=C=w;}}if(B._.isBlockLike&&B.name!='pre'){var H=B.children.length,I=B.children[H-1],J;if(I&&I.type==3)if(!(J=e.rtrim(I.value)))B.children.length=H-1;else I.value=J;}C.add(B);if(B.returnPoint){w=B.returnPoint;delete B.returnPoint;}else w=D?C:E;};s.onTagOpen=function(B,C,D,E){var F=new a.htmlParser.element(B,C);if(F.isUnknown&&D)F.isEmpty=true;F.isOptionalClose=B in m||E;if(f.$removeEmpty[B]){u.push(F);return;}else if(B=='pre')x=true;else if(B=='br'&&x){w.add(new a.htmlParser.text('\n'));return;}if(B=='br'){v.push(F);return;}while(1){var G=w.name,H=G?f[G]||(w._.isBlockLike?f.div:f.span):o; +if(!F.isUnknown&&!w.isUnknown&&!H[B]){if(w.isOptionalClose)s.onTagClose(G);else if(B in n&&G in n){var I=w.children,J=I[I.length-1];if(!(J&&J.name=='li'))A(J=new a.htmlParser.element('li'),w);!F.returnPoint&&(F.returnPoint=w);w=J;}else if(B in f.$listItem&&G!=B)s.onTagOpen(B=='li'?'ul':'dl',{},0,1);else if(G in l&&G!=B){!F.returnPoint&&(F.returnPoint=w);w=w.parent;}else{if(G in f.$inline)u.unshift(w);if(w.parent)A(w,w.parent,1);else{F.isOrphan=1;break;}}}else break;}y(B);z();F.parent=w;if(F.isEmpty)A(F);else w=F;};s.onTagClose=function(B){for(var C=u.length-1;C>=0;C--){if(B==u[C].name){u.splice(C,1);return;}}var D=[],E=[],F=w;while(F!=t&&F.name!=B){if(!F._.isBlockLike)E.unshift(F);D.push(F);F=F.returnPoint||F.parent;}if(F!=t){for(C=0;C<D.length;C++){var G=D[C];A(G,G.parent);}w=F;if(w.name=='pre')x=false;if(F._.isBlockLike)z();A(F,F.parent);if(F==w)w=w.parent;u=u.concat(E);}if(B=='body')q=false;};s.onText=function(B){if((!w._.hasInlineStarted||v.length)&&!x){B=e.ltrim(B);if(B.length===0)return;}z();y();if(q&&(!w.type||w.name=='body')&&e.trim(B))this.onTagOpen(q,{},0,1);if(!x)B=B.replace(/[\t\r\n ]{2,}|[\t\r\n]/g,' ');w.add(new a.htmlParser.text(B));};s.onCDATA=function(B){w.add(new a.htmlParser.cdata(B));};s.onComment=function(B){z();y();w.add(new a.htmlParser.comment(B));};s.parse(p);z(!c&&1);while(w!=t)A(w,w.parent,1);return t;};a.htmlParser.fragment.prototype={add:function(p,q){var s=this;isNaN(q)&&(q=s.children.length);var r=q>0?s.children[q-1]:null;if(r){if(p._.isBlockLike&&r.type==3){r.value=e.rtrim(r.value);if(r.value.length===0){s.children.pop();s.add(p);return;}}r.next=p;}p.previous=r;p.parent=s;s.children.splice(q,0,p);s._.hasInlineStarted=p.type==3||p.type==1&&!p._.isBlockLike;},writeHtml:function(p,q){var r;this.filterChildren=function(){var s=new a.htmlParser.basicWriter();this.writeChildrenHtml.call(this,s,q,true);var t=s.getHtml();this.children=new a.htmlParser.fragment.fromHtml(t).children;r=1;};!this.name&&q&&q.onFragment(this);this.writeChildrenHtml(p,r?null:q);},writeChildrenHtml:function(p,q){for(var r=0;r<this.children.length;r++)this.children[r].writeHtml(p,q);}};})();a.htmlParser.element=function(l,m){var s=this;s.name=l;s.attributes=m||(m={});s.children=[];var n=m['data-cke-real-element-type']||l||'',o=n.match(/^cke:(.*)/);o&&(n=o[1]);var p=f,q=!!(p.$nonBodyContent[n]||p.$block[n]||p.$listItem[n]||p.$tableContent[n]||p.$nonEditable[n]||n=='br'),r=!!p.$empty[l];s.isEmpty=r;s.isUnknown=!p[l];s._={isBlockLike:q,hasInlineStarted:r||!q};}; +a.htmlParser.cssStyle=function(){var l,m=arguments[0],n={};l=m instanceof a.htmlParser.element?m.attributes.style:m;(l||'').replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(o,p,q){p=='font-family'&&(q=q.replace(/["']/g,''));n[p.toLowerCase()]=q;});return{rules:n,populate:function(o){var p=this.toString();if(p)o instanceof h?o.setAttribute('style',p):o instanceof a.htmlParser.element?o.attributes.style=p:o.style=p;},'toString':function(){var o=[];for(var p in n)n[p]&&o.push(p,':',n[p],';');return o.join('');}};};(function(){var l=function(m,n){m=m[0];n=n[0];return m<n?-1:m>n?1:0;};a.htmlParser.element.prototype={type:1,add:a.htmlParser.fragment.prototype.add,clone:function(){return new a.htmlParser.element(this.name,this.attributes);},writeHtml:function(m,n){var o=this.attributes,p=this,q=p.name,r,s,t,u;p.filterChildren=function(){if(!u){var B=new a.htmlParser.basicWriter();a.htmlParser.fragment.prototype.writeChildrenHtml.call(p,B,n);p.children=new a.htmlParser.fragment.fromHtml(B.getHtml(),0,p.clone()).children;u=1;}};if(n){for(;;){if(!(q=n.onElementName(q)))return;p.name=q;if(!(p=n.onElement(p)))return;p.parent=this.parent;if(p.name==q)break;if(p.type!=1){p.writeHtml(m,n);return;}q=p.name;if(!q){for(var v=0,w=this.children.length;v<w;v++)this.children[v].parent=p.parent;this.writeChildrenHtml.call(p,m,u?null:n);return;}}o=p.attributes;}m.openTag(q,o);var x=[];for(var y=0;y<2;y++)for(r in o){s=r;t=o[r];if(y==1)x.push([r,t]);else if(n){for(;;){if(!(s=n.onAttributeName(r))){delete o[r];break;}else if(s!=r){delete o[r];r=s;continue;}else break;}if(s)if((t=n.onAttribute(p,s,t))===false)delete o[s];else o[s]=t;}}if(m.sortAttributes)x.sort(l);var z=x.length;for(y=0;y<z;y++){var A=x[y];m.attribute(A[0],A[1]);}m.openTagClose(q,p.isEmpty);if(!p.isEmpty){this.writeChildrenHtml.call(p,m,u?null:n);m.closeTag(q);}},writeChildrenHtml:function(m,n){a.htmlParser.fragment.prototype.writeChildrenHtml.apply(this,arguments);}};})();(function(){a.htmlParser.filter=e.createClass({$:function(q){this._={elementNames:[],attributeNames:[],elements:{$length:0},attributes:{$length:0}};if(q)this.addRules(q,10);},proto:{addRules:function(q,r){var s=this;if(typeof r!='number')r=10;m(s._.elementNames,q.elementNames,r);m(s._.attributeNames,q.attributeNames,r);n(s._.elements,q.elements,r);n(s._.attributes,q.attributes,r);s._.text=o(s._.text,q.text,r)||s._.text;s._.comment=o(s._.comment,q.comment,r)||s._.comment;s._.root=o(s._.root,q.root,r)||s._.root;},onElementName:function(q){return l(q,this._.elementNames); +},onAttributeName:function(q){return l(q,this._.attributeNames);},onText:function(q){var r=this._.text;return r?r.filter(q):q;},onComment:function(q,r){var s=this._.comment;return s?s.filter(q,r):q;},onFragment:function(q){var r=this._.root;return r?r.filter(q):q;},onElement:function(q){var v=this;var r=[v._.elements['^'],v._.elements[q.name],v._.elements.$],s,t;for(var u=0;u<3;u++){s=r[u];if(s){t=s.filter(q,v);if(t===false)return null;if(t&&t!=q)return v.onNode(t);if(q.parent&&!q.name)break;}}return q;},onNode:function(q){var r=q.type;return r==1?this.onElement(q):r==3?new a.htmlParser.text(this.onText(q.value)):r==8?new a.htmlParser.comment(this.onComment(q.value)):null;},onAttribute:function(q,r,s){var t=this._.attributes[r];if(t){var u=t.filter(s,q,this);if(u===false)return false;if(typeof u!='undefined')return u;}return s;}}});function l(q,r){for(var s=0;q&&s<r.length;s++){var t=r[s];q=q.replace(t[0],t[1]);}return q;};function m(q,r,s){if(typeof r=='function')r=[r];var t,u,v=q.length,w=r&&r.length;if(w){for(t=0;t<v&&q[t].pri<s;t++){}for(u=w-1;u>=0;u--){var x=r[u];if(x){x.pri=s;q.splice(t,0,x);}}}};function n(q,r,s){if(r)for(var t in r){var u=q[t];q[t]=o(u,r[t],s);if(!u)q.$length++;}};function o(q,r,s){if(r){r.pri=s;if(q){if(!q.splice){if(q.pri>s)q=[r,q];else q=[q,r];q.filter=p;}else m(q,r,s);return q;}else{r.filter=r;return r;}}};function p(q){var r=q.type||q instanceof a.htmlParser.fragment;for(var s=0;s<this.length;s++){if(r)var t=q.type,u=q.name;var v=this[s],w=v.apply(window,arguments);if(w===false)return w;if(r){if(w&&(w.name!=u||w.type!=t))return w;}else if(typeof w!='string')return w;w!=undefined&&(q=w);}return q;};})();a.htmlParser.basicWriter=e.createClass({$:function(){this._={output:[]};},proto:{openTag:function(l,m){this._.output.push('<',l);},openTagClose:function(l,m){if(m)this._.output.push(' />');else this._.output.push('>');},attribute:function(l,m){if(typeof m=='string')m=e.htmlEncodeAttr(m);this._.output.push(' ',l,'="',m,'"');},closeTag:function(l){this._.output.push('</',l,'>');},text:function(l){this._.output.push(l);},comment:function(l){this._.output.push('<!--',l,'-->');},write:function(l){this._.output.push(l);},reset:function(){this._.output=[];this._.indent=false;},getHtml:function(l){var m=this._.output.join('');if(l)this.reset();return m;}}});delete a.loadFullCore;a.instances={};a.document=new g(document);a.add=function(l){a.instances[l.name]=l;l.on('focus',function(){if(a.currentInstance!=l){a.currentInstance=l;a.fire('currentInstance'); +}});l.on('blur',function(){if(a.currentInstance==l){a.currentInstance=null;a.fire('currentInstance');}});};a.remove=function(l){delete a.instances[l.name];};a.on('instanceDestroyed',function(){if(e.isEmpty(this.instances))a.fire('reset');});a.TRISTATE_ON=1;a.TRISTATE_OFF=2;a.TRISTATE_DISABLED=0;d.comment=e.createClass({base:d.node,$:function(l,m){if(typeof l=='string')l=(m?m.$:document).createComment(l);this.base(l);},proto:{type:8,getOuterHtml:function(){return '<!--'+this.$.nodeValue+'-->';}}});(function(){var l={address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,dd:1,legend:1,caption:1},m={body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,form:1,fieldset:1},n=function(o){var p=o.getChildren();for(var q=0,r=p.count();q<r;q++){var s=p.getItem(q);if(s.type==1&&f.$block[s.getName()])return true;}return false;};d.elementPath=function(o){var u=this;var p=null,q=null,r=[],s=o;while(s){if(s.type==1){if(!u.lastElement)u.lastElement=s;var t=s.getName();if(c&&s.$.scopeName!='HTML')t=s.$.scopeName.toLowerCase()+':'+t;if(!q){if(!p&&l[t])p=s;if(m[t])if(!p&&t=='div'&&!n(s))p=s;else q=s;}r.push(s);if(t=='body')break;}s=s.getParent();}u.block=p;u.blockLimit=q;u.elements=r;};})();d.elementPath.prototype={compare:function(l){var m=this.elements,n=l&&l.elements;if(!n||m.length!=n.length)return false;for(var o=0;o<m.length;o++){if(!m[o].equals(n[o]))return false;}return true;},contains:function(l){var m=this.elements;for(var n=0;n<m.length;n++){if(m[n].getName() in l)return m[n];}return null;}};d.text=function(l,m){if(typeof l=='string')l=(m?m.$:document).createTextNode(l);this.$=l;};d.text.prototype=new d.node();e.extend(d.text.prototype,{type:3,getLength:function(){return this.$.nodeValue.length;},getText:function(){return this.$.nodeValue;},setText:function(l){this.$.nodeValue=l;},split:function(l){var q=this;if(c&&l==q.getLength()){var m=q.getDocument().createText('');m.insertAfter(q);return m;}var n=q.getDocument(),o=new d.text(q.$.splitText(l),n);if(b.ie8){var p=new d.text('',n);p.insertAfter(o);p.remove();}return o;},substring:function(l,m){if(typeof m!='number')return this.$.nodeValue.substr(l);else return this.$.nodeValue.substring(l,m);}});d.documentFragment=function(l){l=l||a.document;this.$=l.$.createDocumentFragment();};e.extend(d.documentFragment.prototype,h.prototype,{type:11,insertAfterNode:function(l){l=l.$;l.parentNode.insertBefore(this.$,l.nextSibling);}},true,{append:1,appendBogus:1,getFirst:1,getLast:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); +(function(){function l(s,t){if(this._.end)return null;var u,v=this.range,w,x=this.guard,y=this.type,z=s?'getPreviousSourceNode':'getNextSourceNode';if(!this._.start){this._.start=1;v.trim();if(v.collapsed){this.end();return null;}}if(!s&&!this._.guardLTR){var A=v.endContainer,B=A.getChild(v.endOffset);this._.guardLTR=function(F,G){return(!G||!A.equals(F))&&(!B||!F.equals(B))&&(F.type!=1||!G||F.getName()!='body');};}if(s&&!this._.guardRTL){var C=v.startContainer,D=v.startOffset>0&&C.getChild(v.startOffset-1);this._.guardRTL=function(F,G){return(!G||!C.equals(F))&&(!D||!F.equals(D))&&(F.type!=1||!G||F.getName()!='body');};}var E=s?this._.guardRTL:this._.guardLTR;if(x)w=function(F,G){if(E(F,G)===false)return false;return x(F,G);};else w=E;if(this.current)u=this.current[z](false,y,w);else if(s){u=v.endContainer;if(v.endOffset>0){u=u.getChild(v.endOffset-1);if(w(u)===false)u=null;}else u=w(u,true)===false?null:u.getPreviousSourceNode(true,y,w);}else{u=v.startContainer;u=u.getChild(v.startOffset);if(u){if(w(u)===false)u=null;}else u=w(v.startContainer,true)===false?null:v.startContainer.getNextSourceNode(true,y,w);}while(u&&!this._.end){this.current=u;if(!this.evaluator||this.evaluator(u)!==false){if(!t)return u;}else if(t&&this.evaluator)return false;u=u[z](false,y,w);}this.end();return this.current=null;};function m(s){var t,u=null;while(t=l.call(this,s))u=t;return u;};d.walker=e.createClass({$:function(s){this.range=s;this._={};},proto:{end:function(){this._.end=1;},next:function(){return l.call(this);},previous:function(){return l.call(this,1);},checkForward:function(){return l.call(this,0,1)!==false;},checkBackward:function(){return l.call(this,1,1)!==false;},lastForward:function(){return m.call(this);},lastBackward:function(){return m.call(this,1);},reset:function(){delete this.current;this._={};}}});var n={block:1,'list-item':1,table:1,'table-row-group':1,'table-header-group':1,'table-footer-group':1,'table-row':1,'table-column-group':1,'table-column':1,'table-cell':1,'table-caption':1};h.prototype.isBlockBoundary=function(s){var t=s?e.extend({},f.$block,s||{}):f.$block;return this.getComputedStyle('float')=='none'&&n[this.getComputedStyle('display')]||t[this.getName()];};d.walker.blockBoundary=function(s){return function(t,u){return!(t.type==1&&t.isBlockBoundary(s));};};d.walker.listItemBoundary=function(){return this.blockBoundary({br:1});};d.walker.bookmark=function(s,t){function u(v){return v&&v.getName&&v.getName()=='span'&&v.data('cke-bookmark');};return function(v){var w,x; +w=v&&!v.getName&&(x=v.getParent())&&u(x);w=s?w:w||u(v);return!!(t^w);};};d.walker.whitespaces=function(s){return function(t){var u=t&&t.type==3&&!e.trim(t.getText());return!!(s^u);};};d.walker.invisible=function(s){var t=d.walker.whitespaces();return function(u){var v=t(u)||u.is&&!u.$.offsetHeight;return!!(s^v);};};d.walker.nodeType=function(s,t){return function(u){return!!(t^u.type==s);};};var o=/^[\t\r\n ]*(?: |\xa0)$/,p=d.walker.whitespaces(),q=d.walker.bookmark(),r=function(s){return q(s)||p(s)||s.type==1&&s.getName() in f.$inline&&!(s.getName() in f.$empty);};h.prototype.getBogus=function(){var s=this;do s=s.getPreviousSourceNode();while(r(s));if(s&&(!c?s.is&&s.is('br'):s.getText&&o.test(s.getText())))return s;return false;};})();d.range=function(l){var m=this;m.startContainer=null;m.startOffset=null;m.endContainer=null;m.endOffset=null;m.collapsed=true;m.document=l;};(function(){var l=function(t){t.collapsed=t.startContainer&&t.endContainer&&t.startContainer.equals(t.endContainer)&&t.startOffset==t.endOffset;},m=function(t,u,v,w){t.optimizeBookmark();var x=t.startContainer,y=t.endContainer,z=t.startOffset,A=t.endOffset,B,C;if(y.type==3)y=y.split(A);else if(y.getChildCount()>0)if(A>=y.getChildCount()){y=y.append(t.document.createText(''));C=true;}else y=y.getChild(A);if(x.type==3){x.split(z);if(x.equals(y))y=x.getNext();}else if(!z){x=x.getFirst().insertBeforeMe(t.document.createText(''));B=true;}else if(z>=x.getChildCount()){x=x.append(t.document.createText(''));B=true;}else x=x.getChild(z).getPrevious();var D=x.getParents(),E=y.getParents(),F,G,H;for(F=0;F<D.length;F++){G=D[F];H=E[F];if(!G.equals(H))break;}var I=v,J,K,L,M;for(var N=F;N<D.length;N++){J=D[N];if(I&&!J.equals(x))K=I.append(J.clone());L=J.getNext();while(L){if(L.equals(E[N])||L.equals(y))break;M=L.getNext();if(u==2)I.append(L.clone(true));else{L.remove();if(u==1)I.append(L);}L=M;}if(I)I=K;}I=v;for(var O=F;O<E.length;O++){J=E[O];if(u>0&&!J.equals(y))K=I.append(J.clone());if(!D[O]||J.$.parentNode!=D[O].$.parentNode){L=J.getPrevious();while(L){if(L.equals(D[O])||L.equals(x))break;M=L.getPrevious();if(u==2)I.$.insertBefore(L.$.cloneNode(true),I.$.firstChild);else{L.remove();if(u==1)I.$.insertBefore(L.$,I.$.firstChild);}L=M;}}if(I)I=K;}if(u==2){var P=t.startContainer;if(P.type==3){P.$.data+=P.$.nextSibling.data;P.$.parentNode.removeChild(P.$.nextSibling);}var Q=t.endContainer;if(Q.type==3&&Q.$.nextSibling){Q.$.data+=Q.$.nextSibling.data;Q.$.parentNode.removeChild(Q.$.nextSibling);}}else{if(G&&H&&(x.$.parentNode!=G.$.parentNode||y.$.parentNode!=H.$.parentNode)){var R=H.getIndex(); +if(B&&H.$.parentNode==x.$.parentNode)R--;if(w&&G.type==1){var S=h.createFromHtml('<span data-cke-bookmark="1" style="display:none"> </span>',t.document);S.insertAfter(G);G.mergeSiblings(false);t.moveToBookmark({startNode:S});}else t.setStart(H.getParent(),R);}t.collapse(true);}if(B)x.remove();if(C&&y.$.parentNode)y.remove();},n={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1};function o(t){var u=false,v=d.walker.bookmark(true);return function(w){if(v(w))return true;if(w.type==3){if(w.hasAscendant('pre')||e.trim(w.getText()).length)return false;}else if(w.type==1)if(!n[w.getName()])if(!t&&!c&&w.getName()=='br'&&!u)u=true;else return false;return true;};};function p(t){return t.type!=3&&t.getName() in f.$removeEmpty||!e.trim(t.getText())||!!t.getParent().data('cke-bookmark');};var q=new d.walker.whitespaces(),r=new d.walker.bookmark();function s(t){return!q(t)&&!r(t);};d.range.prototype={clone:function(){var u=this;var t=new d.range(u.document);t.startContainer=u.startContainer;t.startOffset=u.startOffset;t.endContainer=u.endContainer;t.endOffset=u.endOffset;t.collapsed=u.collapsed;return t;},collapse:function(t){var u=this;if(t){u.endContainer=u.startContainer;u.endOffset=u.startOffset;}else{u.startContainer=u.endContainer;u.startOffset=u.endOffset;}u.collapsed=true;},cloneContents:function(){var t=new d.documentFragment(this.document);if(!this.collapsed)m(this,2,t);return t;},deleteContents:function(t){if(this.collapsed)return;m(this,0,null,t);},extractContents:function(t){var u=new d.documentFragment(this.document);if(!this.collapsed)m(this,1,u,t);return u;},createBookmark:function(t){var z=this;var u,v,w,x,y=z.collapsed;u=z.document.createElement('span');u.data('cke-bookmark',1);u.setStyle('display','none');u.setHtml(' ');if(t){w='cke_bm_'+e.getNextNumber();u.setAttribute('id',w+'S');}if(!y){v=u.clone();v.setHtml(' ');if(t)v.setAttribute('id',w+'E');x=z.clone();x.collapse();x.insertNode(v);}x=z.clone();x.collapse(true);x.insertNode(u);if(v){z.setStartAfter(u);z.setEndBefore(v);}else z.moveToPosition(u,4);return{startNode:t?w+'S':u,endNode:t?w+'E':v,serializable:t,collapsed:y};},createBookmark2:function(t){var B=this;var u=B.startContainer,v=B.endContainer,w=B.startOffset,x=B.endOffset,y=B.collapsed,z,A;if(!u||!v)return{start:0,end:0};if(t){if(u.type==1){z=u.getChild(w);if(z&&z.type==3&&w>0&&z.getPrevious().type==3){u=z;w=0; +}if(z&&z.type==1)w=z.getIndex(1);}while(u.type==3&&(A=u.getPrevious())&&A.type==3){u=A;w+=A.getLength();}if(!y){if(v.type==1){z=v.getChild(x);if(z&&z.type==3&&x>0&&z.getPrevious().type==3){v=z;x=0;}if(z&&z.type==1)x=z.getIndex(1);}while(v.type==3&&(A=v.getPrevious())&&A.type==3){v=A;x+=A.getLength();}}}return{start:u.getAddress(t),end:y?null:v.getAddress(t),startOffset:w,endOffset:x,normalized:t,collapsed:y,is2:true};},moveToBookmark:function(t){var B=this;if(t.is2){var u=B.document.getByAddress(t.start,t.normalized),v=t.startOffset,w=t.end&&B.document.getByAddress(t.end,t.normalized),x=t.endOffset;B.setStart(u,v);if(w)B.setEnd(w,x);else B.collapse(true);}else{var y=t.serializable,z=y?B.document.getById(t.startNode):t.startNode,A=y?B.document.getById(t.endNode):t.endNode;B.setStartBefore(z);z.remove();if(A){B.setEndBefore(A);A.remove();}else B.collapse(true);}},getBoundaryNodes:function(){var y=this;var t=y.startContainer,u=y.endContainer,v=y.startOffset,w=y.endOffset,x;if(t.type==1){x=t.getChildCount();if(x>v)t=t.getChild(v);else if(x<1)t=t.getPreviousSourceNode();else{t=t.$;while(t.lastChild)t=t.lastChild;t=new d.node(t);t=t.getNextSourceNode()||t;}}if(u.type==1){x=u.getChildCount();if(x>w)u=u.getChild(w).getPreviousSourceNode(true);else if(x<1)u=u.getPreviousSourceNode();else{u=u.$;while(u.lastChild)u=u.lastChild;u=new d.node(u);}}if(t.getPosition(u)&2)t=u;return{startNode:t,endNode:u};},getCommonAncestor:function(t,u){var y=this;var v=y.startContainer,w=y.endContainer,x;if(v.equals(w)){if(t&&v.type==1&&y.startOffset==y.endOffset-1)x=v.getChild(y.startOffset);else x=v;}else x=v.getCommonAncestor(w);return u&&!x.is?x.getParent():x;},optimize:function(){var v=this;var t=v.startContainer,u=v.startOffset;if(t.type!=1)if(!u)v.setStartBefore(t);else if(u>=t.getLength())v.setStartAfter(t);t=v.endContainer;u=v.endOffset;if(t.type!=1)if(!u)v.setEndBefore(t);else if(u>=t.getLength())v.setEndAfter(t);},optimizeBookmark:function(){var v=this;var t=v.startContainer,u=v.endContainer;if(t.is&&t.is('span')&&t.data('cke-bookmark'))v.setStartAt(t,3);if(u&&u.is&&u.is('span')&&u.data('cke-bookmark'))v.setEndAt(u,4);},trim:function(t,u){var B=this;var v=B.startContainer,w=B.startOffset,x=B.collapsed;if((!t||x)&&v&&v.type==3){if(!w){w=v.getIndex();v=v.getParent();}else if(w>=v.getLength()){w=v.getIndex()+1;v=v.getParent();}else{var y=v.split(w);w=v.getIndex()+1;v=v.getParent();if(B.startContainer.equals(B.endContainer))B.setEnd(y,B.endOffset-B.startOffset);else if(v.equals(B.endContainer))B.endOffset+=1; +}B.setStart(v,w);if(x){B.collapse(true);return;}}var z=B.endContainer,A=B.endOffset;if(!(u||x)&&z&&z.type==3){if(!A){A=z.getIndex();z=z.getParent();}else if(A>=z.getLength()){A=z.getIndex()+1;z=z.getParent();}else{z.split(A);A=z.getIndex()+1;z=z.getParent();}B.setEnd(z,A);}},enlarge:function(t,u){switch(t){case 1:if(this.collapsed)return;var v=this.getCommonAncestor(),w=this.document.getBody(),x,y,z,A,B,C=false,D,E,F=this.startContainer,G=this.startOffset;if(F.type==3){if(G){F=!e.trim(F.substring(0,G)).length&&F;C=!!F;}if(F)if(!(A=F.getPrevious()))z=F.getParent();}else{if(G)A=F.getChild(G-1)||F.getLast();if(!A)z=F;}while(z||A){if(z&&!A){if(!B&&z.equals(v))B=true;if(!w.contains(z))break;if(!C||z.getComputedStyle('display')!='inline'){C=false;if(B)x=z;else this.setStartBefore(z);}A=z.getPrevious();}while(A){D=false;if(A.type==3){E=A.getText();if(/[^\s\ufeff]/.test(E))A=null;D=/[\s\ufeff]$/.test(E);}else if((A.$.offsetWidth>0||u&&A.is('br'))&&!A.data('cke-bookmark'))if(C&&f.$removeEmpty[A.getName()]){E=A.getText();if(/[^\s\ufeff]/.test(E))A=null;else{var H=A.$.all||A.$.getElementsByTagName('*');for(var I=0,J;J=H[I++];){if(!f.$removeEmpty[J.nodeName.toLowerCase()]){A=null;break;}}}if(A)D=!!E.length;}else A=null;if(D)if(C){if(B)x=z;else if(z)this.setStartBefore(z);}else C=true;if(A){var K=A.getPrevious();if(!z&&!K){z=A;A=null;break;}A=K;}else z=null;}if(z)z=z.getParent();}F=this.endContainer;G=this.endOffset;z=A=null;B=C=false;if(F.type==3){F=!e.trim(F.substring(G)).length&&F;C=!(F&&F.getLength());if(F)if(!(A=F.getNext()))z=F.getParent();}else{A=F.getChild(G);if(!A)z=F;}while(z||A){if(z&&!A){if(!B&&z.equals(v))B=true;if(!w.contains(z))break;if(!C||z.getComputedStyle('display')!='inline'){C=false;if(B)y=z;else if(z)this.setEndAfter(z);}A=z.getNext();}while(A){D=false;if(A.type==3){E=A.getText();if(/[^\s\ufeff]/.test(E))A=null;D=/^[\s\ufeff]/.test(E);}else if((A.$.offsetWidth>0||u&&A.is('br'))&&!A.data('cke-bookmark'))if(C&&f.$removeEmpty[A.getName()]){E=A.getText();if(/[^\s\ufeff]/.test(E))A=null;else{H=A.$.all||A.$.getElementsByTagName('*');for(I=0;J=H[I++];){if(!f.$removeEmpty[J.nodeName.toLowerCase()]){A=null;break;}}}if(A)D=!!E.length;}else A=null;if(D)if(C)if(B)y=z;else this.setEndAfter(z);if(A){K=A.getNext();if(!z&&!K){z=A;A=null;break;}A=K;}else z=null;}if(z)z=z.getParent();}if(x&&y){v=x.contains(y)?y:x;this.setStartBefore(v);this.setEndAfter(v);}break;case 2:case 3:var L=new d.range(this.document);w=this.document.getBody();L.setStartAt(w,1);L.setEnd(this.startContainer,this.startOffset); +var M=new d.walker(L),N,O,P=d.walker.blockBoundary(t==3?{br:1}:null),Q=function(S){var T=P(S);if(!T)N=S;return T;},R=function(S){var T=Q(S);if(!T&&S.is&&S.is('br'))O=S;return T;};M.guard=Q;z=M.lastBackward();N=N||w;this.setStartAt(N,!N.is('br')&&(!z&&this.checkStartOfBlock()||z&&N.contains(z))?1:4);L=this.clone();L.collapse();L.setEndAt(w,2);M=new d.walker(L);M.guard=t==3?R:Q;N=null;z=M.lastForward();N=N||w;this.setEndAt(N,!z&&this.checkEndOfBlock()||z&&N.contains(z)?2:3);if(O)this.setEndAfter(O);}},shrink:function(t,u){if(!this.collapsed){t=t||2;var v=this.clone(),w=this.startContainer,x=this.endContainer,y=this.startOffset,z=this.endOffset,A=this.collapsed,B=1,C=1;if(w&&w.type==3)if(!y)v.setStartBefore(w);else if(y>=w.getLength())v.setStartAfter(w);else{v.setStartBefore(w);B=0;}if(x&&x.type==3)if(!z)v.setEndBefore(x);else if(z>=x.getLength())v.setEndAfter(x);else{v.setEndAfter(x);C=0;}var D=new d.walker(v),E=d.walker.bookmark();D.evaluator=function(I){return I.type==(t==1?1:3);};var F;D.guard=function(I,J){if(E(I))return true;if(t==1&&I.type==3)return false;if(J&&I.equals(F))return false;if(!J&&I.type==1)F=I;return true;};if(B){var G=D[t==1?'lastForward':'next']();G&&this.setStartAt(G,u?1:3);}if(C){D.reset();var H=D[t==1?'lastBackward':'previous']();H&&this.setEndAt(H,u?2:4);}return!!(B||C);}},insertNode:function(t){var x=this;x.optimizeBookmark();x.trim(false,true);var u=x.startContainer,v=x.startOffset,w=u.getChild(v);if(w)t.insertBefore(w);else u.append(t);if(t.getParent().equals(x.endContainer))x.endOffset++;x.setStartBefore(t);},moveToPosition:function(t,u){this.setStartAt(t,u);this.collapse(true);},selectNodeContents:function(t){this.setStart(t,0);this.setEnd(t,t.type==3?t.getLength():t.getChildCount());},setStart:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])u=t.getIndex(),t=t.getParent();v.startContainer=t;v.startOffset=u;if(!v.endContainer){v.endContainer=t;v.endOffset=u;}l(v);},setEnd:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])u=t.getIndex()+1,t=t.getParent();v.endContainer=t;v.endOffset=u;if(!v.startContainer){v.startContainer=t;v.startOffset=u;}l(v);},setStartAfter:function(t){this.setStart(t.getParent(),t.getIndex()+1);},setStartBefore:function(t){this.setStart(t.getParent(),t.getIndex());},setEndAfter:function(t){this.setEnd(t.getParent(),t.getIndex()+1);},setEndBefore:function(t){this.setEnd(t.getParent(),t.getIndex());},setStartAt:function(t,u){var v=this;switch(u){case 1:v.setStart(t,0);break;case 2:if(t.type==3)v.setStart(t,t.getLength()); +else v.setStart(t,t.getChildCount());break;case 3:v.setStartBefore(t);break;case 4:v.setStartAfter(t);}l(v);},setEndAt:function(t,u){var v=this;switch(u){case 1:v.setEnd(t,0);break;case 2:if(t.type==3)v.setEnd(t,t.getLength());else v.setEnd(t,t.getChildCount());break;case 3:v.setEndBefore(t);break;case 4:v.setEndAfter(t);}l(v);},fixBlock:function(t,u){var x=this;var v=x.createBookmark(),w=x.document.createElement(u);x.collapse(t);x.enlarge(2);x.extractContents().appendTo(w);w.trim();if(!c)w.appendBogus();x.insertNode(w);x.moveToBookmark(v);return w;},splitBlock:function(t){var D=this;var u=new d.elementPath(D.startContainer),v=new d.elementPath(D.endContainer),w=u.blockLimit,x=v.blockLimit,y=u.block,z=v.block,A=null;if(!w.equals(x))return null;if(t!='br'){if(!y){y=D.fixBlock(true,t);z=new d.elementPath(D.endContainer).block;}if(!z)z=D.fixBlock(false,t);}var B=y&&D.checkStartOfBlock(),C=z&&D.checkEndOfBlock();D.deleteContents();if(y&&y.equals(z))if(C){A=new d.elementPath(D.startContainer);D.moveToPosition(z,4);z=null;}else if(B){A=new d.elementPath(D.startContainer);D.moveToPosition(y,3);y=null;}else{z=D.splitElement(y);if(!c&&!y.is('ul','ol'))y.appendBogus();}return{previousBlock:y,nextBlock:z,wasStartOfBlock:B,wasEndOfBlock:C,elementPath:A};},splitElement:function(t){var w=this;if(!w.collapsed)return null;w.setEndAt(t,2);var u=w.extractContents(),v=t.clone(false);u.appendTo(v);v.insertAfter(t);w.moveToPosition(t,4);return v;},checkBoundaryOfElement:function(t,u){var v=u==1,w=this.clone();w.collapse(v);w[v?'setStartAt':'setEndAt'](t,v?1:2);var x=new d.walker(w);x.evaluator=p;return x[v?'checkBackward':'checkForward']();},checkStartOfBlock:function(){var z=this;var t=z.startContainer,u=z.startOffset;if(u&&t.type==3){var v=e.ltrim(t.substring(0,u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.startContainer),x=z.clone();x.collapse(true);x.setStartAt(w.block||w.blockLimit,1);var y=new d.walker(x);y.evaluator=o(true);return y.checkBackward();},checkEndOfBlock:function(){var z=this;var t=z.endContainer,u=z.endOffset;if(t.type==3){var v=e.rtrim(t.substring(u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.endContainer),x=z.clone();x.collapse(false);x.setEndAt(w.block||w.blockLimit,2);var y=new d.walker(x);y.evaluator=o(false);return y.checkForward();},checkReadOnly:(function(){function t(u,v){while(u){if(u.type==1)if(u.getAttribute('contentEditable')=='false'&&!u.data('cke-editable'))return 0;else if(u.is('html')||u.getAttribute('contentEditable')=='true'&&(u.contains(v)||u.equals(v)))break; +u=u.getParent();}return 1;};return function(){var u=this.startContainer,v=this.endContainer;return!(t(u,v)&&t(v,u));};})(),moveToElementEditablePosition:function(t,u){var v;if(f.$empty[t.getName()])return false;while(t&&t.type==1){v=t.isEditable();if(v)this.moveToPosition(t,u?2:1);else if(f.$inline[t.getName()]){this.moveToPosition(t,u?4:3);return true;}if(f.$empty[t.getName()])t=t[u?'getPrevious':'getNext'](s);else t=t[u?'getLast':'getFirst'](s);if(t&&t.type==3){this.moveToPosition(t,u?4:3);return true;}}return v;},moveToElementEditStart:function(t){return this.moveToElementEditablePosition(t);},moveToElementEditEnd:function(t){return this.moveToElementEditablePosition(t,true);},getEnclosedNode:function(){var t=this.clone();t.optimize();if(t.startContainer.type!=1||t.endContainer.type!=1)return null;var u=new d.walker(t),v=d.walker.bookmark(true),w=d.walker.whitespaces(true),x=function(z){return w(z)&&v(z);};t.evaluator=x;var y=u.next();u.reset();return y&&y.equals(u.previous())?y:null;},getTouchedStartNode:function(){var t=this.startContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.startOffset)||t;},getTouchedEndNode:function(){var t=this.endContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.endOffset-1)||t;}};})();a.POSITION_AFTER_START=1;a.POSITION_BEFORE_END=2;a.POSITION_BEFORE_START=3;a.POSITION_AFTER_END=4;a.ENLARGE_ELEMENT=1;a.ENLARGE_BLOCK_CONTENTS=2;a.ENLARGE_LIST_ITEM_CONTENTS=3;a.START=1;a.END=2;a.STARTEND=3;a.SHRINK_ELEMENT=1;a.SHRINK_TEXT=2;(function(){d.rangeList=function(n){if(n instanceof d.rangeList)return n;if(!n)n=[];else if(n instanceof d.range)n=[n];return e.extend(n,l);};var l={createIterator:function(){var n=this,o=d.walker.bookmark(),p=function(s){return!(s.is&&s.is('tr'));},q=[],r;return{getNextRange:function(s){r=r==undefined?0:r+1;var t=n[r];if(t&&n.length>1){if(!r)for(var u=n.length-1;u>=0;u--)q.unshift(n[u].createBookmark(true));if(s){var v=0;while(n[r+v+1]){var w=t.document,x=0,y=w.getById(q[v].endNode),z=w.getById(q[v+1].startNode),A;while(1){A=y.getNextSourceNode(false);if(!z.equals(A)){if(o(A)||A.type==1&&A.isBlockBoundary()){y=A;continue;}}else x=1;break;}if(!x)break;v++;}}t.moveToBookmark(q.shift());while(v--){A=n[++r];A.moveToBookmark(q.shift());t.setEnd(A.endContainer,A.endOffset);}}return t;}};},createBookmarks:function(n){var s=this;var o=[],p;for(var q=0;q<s.length;q++){o.push(p=s[q].createBookmark(n,true));for(var r=q+1;r<s.length;r++){s[r]=m(p,s[r]);s[r]=m(p,s[r],true);}}return o; +},createBookmarks2:function(n){var o=[];for(var p=0;p<this.length;p++)o.push(this[p].createBookmark2(n));return o;},moveToBookmarks:function(n){for(var o=0;o<this.length;o++)this[o].moveToBookmark(n[o]);}};function m(n,o,p){var q=n.serializable,r=o[p?'endContainer':'startContainer'],s=p?'endOffset':'startOffset',t=q?o.document.getById(n.startNode):n.startNode,u=q?o.document.getById(n.endNode):n.endNode;if(r.equals(t.getPrevious())){o.startOffset=o.startOffset-r.getLength()-u.getPrevious().getLength();r=u.getNext();}else if(r.equals(u.getPrevious())){o.startOffset=o.startOffset-r.getLength();r=u.getNext();}r.equals(t.getParent())&&o[s]++;r.equals(u.getParent())&&o[s]++;o[p?'endContainer':'startContainer']=r;return o;};})();(function(){if(b.webkit){b.hc=false;return;}var l=h.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;border: 1px solid;border-color: red blue;"></div>',a.document);l.appendTo(a.document.getHead());try{b.hc=l.getComputedStyle('border-top-color')==l.getComputedStyle('border-right-color');}catch(m){b.hc=false;}if(b.hc)b.cssClass+=' cke_hc';l.remove();})();j.load(i.corePlugins.split(','),function(){a.status='loaded';a.fire('loaded');var l=a._.pending;if(l){delete a._.pending;for(var m=0;m<l.length;m++)a.add(l[m]);}});if(c)try{document.execCommand('BackgroundImageCache',false,true);}catch(l){}a.skins.add('kama',(function(){var m='cke_ui_color';return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},richcombo:{canGroup:false},templates:{css:['templates.css']},margins:[0,0,0,0],init:function(n){if(n.config.width&&!isNaN(n.config.width))n.config.width-=12;var o=[],p=/\$color/g,q='/* UI Color Support */.cke_skin_kama .cke_menuitem .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{\tbackground-color: transparent !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuseparator{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{\tbackground-color: $color !important;}'; +if(b.webkit){q=q.split('}').slice(0,-1);for(var r=0;r<q.length;r++)q[r]=q[r].split('{');}function s(v){var w=v.getById(m);if(!w){w=v.getHead().append('style');w.setAttribute('id',m);w.setAttribute('type','text/css');}return w;};function t(v,w,x){var y,z,A;for(var B=0;B<v.length;B++){if(b.webkit)for(z=0;z<w.length;z++){A=w[z][1];for(y=0;y<x.length;y++)A=A.replace(x[y][0],x[y][1]);v[B].$.sheet.addRule(w[z][0],A);}else{A=w;for(y=0;y<x.length;y++)A=A.replace(x[y][0],x[y][1]);if(c)v[B].$.styleSheet.cssText+=A;else v[B].$.innerHTML+=A;}}};var u=/\$color/g;e.extend(n,{uiColor:null,getUiColor:function(){return this.uiColor;},setUiColor:function(v){var w,x=s(a.document),y='.'+n.id,z=[y+' .cke_wrapper',y+'_dialog .cke_dialog_contents',y+'_dialog a.cke_dialog_tab',y+'_dialog .cke_dialog_footer'].join(','),A='background-color: $color !important;';if(b.webkit)w=[[z,A]];else w=z+'{'+A+'}';return(this.setUiColor=function(B){var C=[[u,B]];n.uiColor=B;t([x],w,C);t(o,q,C);})(v);}});n.on('menuShow',function(v){var w=v.data[0],x=w.element.getElementsByTag('iframe').getItem(0).getFrameDocument();if(!x.getById('cke_ui_color')){var y=s(x);o.push(y);var z=n.getUiColor();if(z)t([y],q,[[u,z]]);}});if(n.config.uiColor)n.setUiColor(n.config.uiColor);}};})());(function(){a.dialog?m():a.on('dialogPluginReady',m);function m(){a.dialog.on('resize',function(n){var o=n.data,p=o.width,q=o.height,r=o.dialog,s=r.parts.contents;if(o.skin!='kama')return;s.setStyles({width:p+'px',height:q+'px'});});};})();j.add('about',{requires:['dialog'],init:function(m){var n=m.addCommand('about',new a.dialogCommand('about'));n.modes={wysiwyg:1,source:1};n.canUndo=false;n.readOnly=1;m.ui.addButton('About',{label:m.lang.about.title,command:'about'});a.dialog.add('about',this.path+'dialogs/about.js');}});(function(){var m='a11yhelp',n='a11yHelp';j.add(m,{availableLangs:{en:1,he:1},init:function(o){var p=this;o.addCommand(n,{exec:function(){var q=o.langCode;q=p.availableLangs[q]?q:'en';a.scriptLoader.load(a.getUrl(p.path+'lang/'+q+'.js'),function(){e.extend(o.lang,p.langEntries[q]);o.openDialog(n);});},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:false});a.dialog.add(n,this.path+'dialogs/a11yhelp.js');}});})();j.add('basicstyles',{requires:['styles','button'],init:function(m){var n=function(q,r,s,t){var u=new a.style(t);m.attachStyleStateChange(u,function(v){!m.readOnly&&m.getCommand(s).setState(v);});m.addCommand(s,new a.styleCommand(u));m.ui.addButton(q,{label:r,command:s});},o=m.config,p=m.lang;n('Bold',p.bold,'bold',o.coreStyles_bold); +n('Italic',p.italic,'italic',o.coreStyles_italic);n('Underline',p.underline,'underline',o.coreStyles_underline);n('Strike',p.strike,'strike',o.coreStyles_strike);n('Subscript',p.subscript,'subscript',o.coreStyles_subscript);n('Superscript',p.superscript,'superscript',o.coreStyles_superscript);}});i.coreStyles_bold={element:'strong',overrides:'b'};i.coreStyles_italic={element:'em',overrides:'i'};i.coreStyles_underline={element:'u'};i.coreStyles_strike={element:'strike'};i.coreStyles_subscript={element:'sub'};i.coreStyles_superscript={element:'sup'};(function(){var m={table:1,ul:1,ol:1,blockquote:1,div:1},n={},o={};e.extend(n,m,{tr:1,p:1,div:1,li:1});e.extend(o,n,{td:1});function p(B){q(B);r(B);};function q(B){var C=B.editor,D=B.data.path;if(C.readOnly)return;var E=C.config.useComputedState,F;E=E===undefined||E;if(!E)F=s(D.lastElement);F=F||D.block||D.blockLimit;if(F.is('body')){var G=C.getSelection().getRanges()[0].getEnclosedNode();G&&G.type==1&&(F=G);}if(!F)return;var H=E?F.getComputedStyle('direction'):F.getStyle('direction')||F.getAttribute('dir');C.getCommand('bidirtl').setState(H=='rtl'?1:2);C.getCommand('bidiltr').setState(H=='ltr'?1:2);};function r(B){var C=B.editor,D=B.data.path.block||B.data.path.blockLimit;C.fire('contentDirChanged',D?D.getComputedStyle('direction'):C.lang.dir);};function s(B){while(B&&!(B.getName() in o||B.is('body'))){var C=B.getParent();if(!C)break;B=C;}return B;};function t(B,C,D,E){if(B.isReadOnly())return;h.setMarker(E,B,'bidi_processed',1);var F=B;while((F=F.getParent())&&!F.is('body')){if(F.getCustomData('bidi_processed')){B.removeStyle('direction');B.removeAttribute('dir');return;}}var G='useComputedState' in D.config?D.config.useComputedState:1,H=G?B.getComputedStyle('direction'):B.getStyle('direction')||B.hasAttribute('dir');if(H==C)return;B.removeStyle('direction');if(G){B.removeAttribute('dir');if(C!=B.getComputedStyle('direction'))B.setAttribute('dir',C);}else B.setAttribute('dir',C);D.forceNextSelectionCheck();};function u(B,C,D){var E=B.getCommonAncestor(false,true);B=B.clone();B.enlarge(D==2?3:2);if(B.checkBoundaryOfElement(E,1)&&B.checkBoundaryOfElement(E,2)){var F;while(E&&E.type==1&&(F=E.getParent())&&F.getChildCount()==1&&!(E.getName() in C))E=F;return E.type==1&&E.getName() in C&&E;}};function v(B){return function(C){var D=C.getSelection(),E=C.config.enterMode,F=D.getRanges();if(F&&F.length){var G={},H=D.createBookmarks(),I=F.createIterator(),J,K=0;while(J=I.getNextRange(1)){var L=J.getEnclosedNode();if(!L||L&&!(L.type==1&&L.getName() in n))L=u(J,m,E); +L&&t(L,B,C,G);var M,N,O=new d.walker(J),P=H[K].startNode,Q=H[K++].endNode;O.evaluator=function(R){return!!(R.type==1&&R.getName() in m&&!(R.getName()==(E==1?'p':'div')&&R.getParent().type==1&&R.getParent().getName()=='blockquote')&&R.getPosition(P)&2&&(R.getPosition(Q)&4+16)==4);};while(N=O.next())t(N,B,C,G);M=J.createIterator();M.enlargeBr=E!=2;while(N=M.getNextParagraph(E==1?'p':'div'))t(N,B,C,G);}h.clearAllMarkers(G);C.forceNextSelectionCheck();D.selectBookmarks(H);C.focus();}};};j.add('bidi',{requires:['styles','button'],init:function(B){var C=function(E,F,G,H){B.addCommand(G,new a.command(B,{exec:H}));B.ui.addButton(E,{label:F,command:G});},D=B.lang.bidi;C('BidiLtr',D.ltr,'bidiltr',v('ltr'));C('BidiRtl',D.rtl,'bidirtl',v('rtl'));B.on('selectionChange',p);B.on('contentDom',function(){B.document.on('dirChanged',function(E){B.fire('dirChanged',{node:E.data,dir:E.data.getDirection(1)});});});}});function w(B){var C=B.getDocument().getBody().getParent();while(B){if(B.equals(C))return false;B=B.getParent();}return true;};function x(B){var C=B==y.setAttribute,D=B==y.removeAttribute,E=/\bdirection\s*:\s*(.*?)\s*(:?$|;)/;return function(F,G){var J=this;if(!J.getDocument().equals(a.document)){var H;if((F==(C||D?'dir':'direction')||F=='style'&&(D||E.test(G)))&&!w(J)){H=J.getDirection(1);var I=B.apply(J,arguments);if(H!=J.getDirection(1)){J.getDocument().fire('dirChanged',J);return I;}}}return B.apply(J,arguments);};};var y=h.prototype,z=['setStyle','removeStyle','setAttribute','removeAttribute'];for(var A=0;A<z.length;A++)y[z[A]]=e.override(y[z[A]],x);})();(function(){function m(q,r){var s=r.block||r.blockLimit;if(!s||s.getName()=='body')return 2;if(s.getAscendant('blockquote',true))return 1;return 2;};function n(q){var r=q.editor;if(r.readOnly)return;var s=r.getCommand('blockquote');s.state=m(r,q.data.path);s.fire('state');};function o(q){for(var r=0,s=q.getChildCount(),t;r<s&&(t=q.getChild(r));r++){if(t.type==1&&t.isBlockBoundary())return false;}return true;};var p={exec:function(q){var r=q.getCommand('blockquote').state,s=q.getSelection(),t=s&&s.getRanges(true)[0];if(!t)return;var u=s.createBookmarks();if(c){var v=u[0].startNode,w=u[0].endNode,x;if(v&&v.getParent().getName()=='blockquote'){x=v;while(x=x.getNext()){if(x.type==1&&x.isBlockBoundary()){v.move(x,true);break;}}}if(w&&w.getParent().getName()=='blockquote'){x=w;while(x=x.getPrevious()){if(x.type==1&&x.isBlockBoundary()){w.move(x);break;}}}}var y=t.createIterator(),z;y.enlargeBr=q.config.enterMode!=2;if(r==2){var A=[]; +while(z=y.getNextParagraph())A.push(z);if(A.length<1){var B=q.document.createElement(q.config.enterMode==1?'p':'div'),C=u.shift();t.insertNode(B);B.append(new d.text('\ufeff',q.document));t.moveToBookmark(C);t.selectNodeContents(B);t.collapse(true);C=t.createBookmark();A.push(B);u.unshift(C);}var D=A[0].getParent(),E=[];for(var F=0;F<A.length;F++){z=A[F];D=D.getCommonAncestor(z.getParent());}var G={table:1,tbody:1,tr:1,ol:1,ul:1};while(G[D.getName()])D=D.getParent();var H=null;while(A.length>0){z=A.shift();while(!z.getParent().equals(D))z=z.getParent();if(!z.equals(H))E.push(z);H=z;}while(E.length>0){z=E.shift();if(z.getName()=='blockquote'){var I=new d.documentFragment(q.document);while(z.getFirst()){I.append(z.getFirst().remove());A.push(I.getLast());}I.replace(z);}else A.push(z);}var J=q.document.createElement('blockquote');J.insertBefore(A[0]);while(A.length>0){z=A.shift();J.append(z);}}else if(r==1){var K=[],L={};while(z=y.getNextParagraph()){var M=null,N=null;while(z.getParent()){if(z.getParent().getName()=='blockquote'){M=z.getParent();N=z;break;}z=z.getParent();}if(M&&N&&!N.getCustomData('blockquote_moveout')){K.push(N);h.setMarker(L,N,'blockquote_moveout',true);}}h.clearAllMarkers(L);var O=[],P=[];L={};while(K.length>0){var Q=K.shift();J=Q.getParent();if(!Q.getPrevious())Q.remove().insertBefore(J);else if(!Q.getNext())Q.remove().insertAfter(J);else{Q.breakParent(Q.getParent());P.push(Q.getNext());}if(!J.getCustomData('blockquote_processed')){P.push(J);h.setMarker(L,J,'blockquote_processed',true);}O.push(Q);}h.clearAllMarkers(L);for(F=P.length-1;F>=0;F--){J=P[F];if(o(J))J.remove();}if(q.config.enterMode==2){var R=true;while(O.length){Q=O.shift();if(Q.getName()=='div'){I=new d.documentFragment(q.document);var S=R&&Q.getPrevious()&&!(Q.getPrevious().type==1&&Q.getPrevious().isBlockBoundary());if(S)I.append(q.document.createElement('br'));var T=Q.getNext()&&!(Q.getNext().type==1&&Q.getNext().isBlockBoundary());while(Q.getFirst())Q.getFirst().remove().appendTo(I);if(T)I.append(q.document.createElement('br'));I.replace(Q);R=false;}}}}s.selectBookmarks(u);q.focus();}};j.add('blockquote',{init:function(q){q.addCommand('blockquote',p);q.ui.addButton('Blockquote',{label:q.lang.blockquote,command:'blockquote'});q.on('selectionChange',n);},requires:['domiterator']});})();j.add('button',{beforeInit:function(m){m.ui.addHandler('button',k.button.handler);}});a.UI_BUTTON='button';k.button=function(m){e.extend(this,m,{title:m.label,className:m.className||m.command&&'cke_button_'+m.command||'',click:m.click||(function(n){n.execCommand(m.command); +})});this._={};};k.button.handler={create:function(m){return new k.button(m);}};(function(){k.button.prototype={render:function(m,n){var o=b,p=this._.id=e.getNextId(),q='',r=this.command,s;this._.editor=m;var t={id:p,button:this,editor:m,focus:function(){var z=a.document.getById(p);z.focus();},execute:function(){if(c&&b.version<7)e.setTimeout(function(){this.button.click(m);},0,this);else this.button.click(m);}},u=e.addFunction(function(z){if(t.onkey){z=new d.event(z);return t.onkey(t,z.getKeystroke())!==false;}}),v=e.addFunction(function(z){var A;if(t.onfocus)A=t.onfocus(t,new d.event(z))!==false;if(b.gecko&&b.version<10900)z.preventBubble();return A;});t.clickFn=s=e.addFunction(t.execute,t);if(this.modes){var w={};function x(){var z=m.mode;if(z){var A=this.modes[z]?w[z]!=undefined?w[z]:2:0;this.setState(m.readOnly&&!this.readOnly?0:A);}};m.on('beforeModeUnload',function(){if(m.mode&&this._.state!=0)w[m.mode]=this._.state;},this);m.on('mode',x,this);!this.readOnly&&m.on('readOnly',x,this);}else if(r){r=m.getCommand(r);if(r){r.on('state',function(){this.setState(r.state);},this);q+='cke_'+(r.state==1?'on':r.state==0?'disabled':'off');}}if(!r)q+='cke_off';if(this.className)q+=' '+this.className;n.push('<span class="cke_button'+(this.icon&&this.icon.indexOf('.png')==-1?' cke_noalphafix':'')+'">','<a id="',p,'" class="',q,'"',o.gecko&&o.version>=10900&&!o.hc?'':'" href="javascript:void(\''+(this.title||'').replace("'",'')+"')\"",' title="',this.title,'" tabindex="-1" hidefocus="true" role="button" aria-labelledby="'+p+'_label"'+(this.hasArrow?' aria-haspopup="true"':''));if(o.opera||o.gecko&&o.mac)n.push(' onkeypress="return false;"');if(o.gecko)n.push(' onblur="this.style.cssText = this.style.cssText;"');n.push(' onkeydown="return CKEDITOR.tools.callFunction(',u,', event);" onfocus="return CKEDITOR.tools.callFunction(',v,', event);" '+(c?'onclick="return false;" onmouseup':'onclick')+'="CKEDITOR.tools.callFunction(',s,', this); return false;"><span class="cke_icon"');if(this.icon){var y=(this.iconOffset||0)*-16;n.push(' style="background-image:url(',a.getUrl(this.icon),');background-position:0 '+y+'px;"');}n.push('> </span><span id="',p,'_label" class="cke_label">',this.label,'</span>');if(this.hasArrow)n.push('<span class="cke_buttonarrow">'+(b.hc?'▼':' ')+'</span>');n.push('</a>','</span>');if(this.onRender)this.onRender();return t;},setState:function(m){if(this._.state==m)return false;this._.state=m;var n=a.document.getById(this._.id);if(n){n.setState(m); +m==0?n.setAttribute('aria-disabled',true):n.removeAttribute('aria-disabled');m==1?n.setAttribute('aria-pressed',true):n.removeAttribute('aria-pressed');return true;}else return false;}};})();k.prototype.addButton=function(m,n){this.add(m,'button',n);};(function(){var m=function(y,z){var A=y.document,B=A.getBody(),C=0,D=function(){C=1;};B.on(z,D);(b.version>7?A.$:A.$.selection.createRange()).execCommand(z);B.removeListener(z,D);return C;},n=c?function(y,z){return m(y,z);}:function(y,z){try{return y.document.$.execCommand(z,false,null);}catch(A){return false;}},o=function(y){var z=this;z.type=y;z.canUndo=z.type=='cut';z.startDisabled=true;};o.prototype={exec:function(y,z){this.type=='cut'&&t(y);var A=n(y,this.type);if(!A)alert(y.lang.clipboard[this.type+'Error']);return A;}};var p={canUndo:false,exec:c?function(y){y.focus();if(!y.document.getBody().fire('beforepaste')&&!m(y,'paste')){y.fire('pasteDialog');return false;}}:function(y){try{if(!y.document.getBody().fire('beforepaste')&&!y.document.$.execCommand('Paste',false,null))throw 0;}catch(z){setTimeout(function(){y.fire('pasteDialog');},0);return false;}}},q=function(y){if(this.mode!='wysiwyg')return;switch(y.data.keyCode){case 1114112+86:case 2228224+45:var z=this.document.getBody();if(!c&&z.fire('beforepaste'))y.cancel();else if(b.opera||b.gecko&&b.version<10900)z.fire('paste');return;case 1114112+88:case 2228224+46:var A=this;this.fire('saveSnapshot');setTimeout(function(){A.fire('saveSnapshot');},0);}};function r(y){y.cancel();};function s(y,z,A){var B=this.document;if(B.getById('cke_pastebin'))return;if(z=='text'&&y.data&&y.data.$.clipboardData){var C=y.data.$.clipboardData.getData('text/plain');if(C){y.data.preventDefault();A(C);return;}}var D=this.getSelection(),E=new d.range(B),F=new h(z=='text'?'textarea':b.webkit?'body':'div',B);F.setAttribute('id','cke_pastebin');b.webkit&&F.append(B.createText('\xa0'));B.getBody().append(F);F.setStyles({position:'absolute',top:D.getStartElement().getDocumentPosition().y+'px',width:'1px',height:'1px',overflow:'hidden'});F.setStyle(this.config.contentsLangDirection=='ltr'?'left':'right','-1000px');var G=D.createBookmarks();this.on('selectionChange',r,null,null,0);if(z=='text')F.$.focus();else{E.setStartAt(F,1);E.setEndAt(F,2);E.select(true);}var H=this;window.setTimeout(function(){z=='text'&&b.gecko&&H.focusGrabber.focus();F.remove();H.removeListener('selectionChange',r);var I;F=b.webkit&&(I=F.getFirst())&&I.is&&I.hasClass('Apple-style-span')?I:F;D.selectBookmarks(G); +A(F['get'+(z=='text'?'Value':'Html')]());},0);};function t(y){if(!c||b.quirks)return;var z=y.getSelection(),A;if(z.getType()==3&&(A=z.getSelectedElement())){var B=z.getRanges()[0],C=y.document.createText('');C.insertBefore(A);B.setStartBefore(C);B.setEndAfter(A);z.selectRanges([B]);setTimeout(function(){if(A.getParent()){C.remove();z.selectElement(A);}},0);}};var u;function v(y,z){c&&(u=1);var A=2;try{A=z.document.$.queryCommandEnabled(y)?2:0;}catch(B){}u=0;return A;};var w;function x(){var z=this;if(z.mode!='wysiwyg')return;z.getCommand('cut').setState(w?0:v('Cut',z));z.getCommand('copy').setState(v('Copy',z));var y=w?0:b.webkit?2:v('Paste',z);z.fire('pasteState',y);};j.add('clipboard',{requires:['dialog','htmldataprocessor'],init:function(y){y.on('paste',function(A){var B=A.data;if(B.html)y.insertHtml(B.html);else if(B.text)y.insertText(B.text);setTimeout(function(){y.fire('afterPaste');},0);},null,null,1000);y.on('pasteDialog',function(A){setTimeout(function(){y.openDialog('paste');},0);});y.on('pasteState',function(A){y.getCommand('paste').setState(A.data);});function z(A,B,C,D){var E=y.lang[B];y.addCommand(B,C);y.ui.addButton(A,{label:E,command:B});if(y.addMenuItems)y.addMenuItem(B,{label:E,command:B,group:'clipboard',order:D});};z('Cut','cut',new o('cut'),1);z('Copy','copy',new o('copy'),4);z('Paste','paste',p,8);a.dialog.add('paste',a.getUrl(this.path+'dialogs/paste.js'));y.on('key',q,y);y.on('contentDom',function(){var A=y.document.getBody();A.on(b.webkit?'paste':'beforepaste',function(B){if(u)return;var C={mode:'html'};y.fire('beforePaste',C);s.call(y,B,C.mode,function(D){if(!(D=e.trim(D.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,''))))return;var E={};E[C.mode]=D;y.fire('paste',E);});});A.on('contextmenu',function(){u=1;setTimeout(function(){u=0;},10);});A.on('beforecut',function(){!u&&t(y);});A.on('mouseup',function(){setTimeout(function(){x.call(y);},0);},y);A.on('keyup',x,y);});y.on('selectionChange',function(A){w=A.data.selection.getRanges()[0].checkReadOnly();x.call(y);});if(y.contextMenu)y.contextMenu.addListener(function(A,B){var C=B.getRanges()[0].checkReadOnly();return{cut:!C&&v('Cut',y),copy:v('Copy',y),paste:!C&&(b.webkit?2:v('Paste',y))};});}});})();j.add('colorbutton',{requires:['panelbutton','floatpanel','styles'],init:function(m){var n=m.config,o=m.lang.colorButton,p;if(!b.hc){q('TextColor','fore',o.textColorTitle);q('BGColor','back',o.bgColorTitle);}function q(t,u,v){var w=e.getNextId()+'_colorBox';m.ui.add(t,'panelbutton',{label:v,title:v,className:'cke_button_'+t.toLowerCase(),modes:{wysiwyg:1},panel:{css:m.skin.editor.css,attributes:{role:'listbox','aria-label':o.panelTitle}},onBlock:function(x,y){y.autoSize=true; +y.element.addClass('cke_colorblock');y.element.setHtml(r(x,u,w));y.element.getDocument().getBody().setStyle('overflow','hidden');k.fire('ready',this);var z=y.keys,A=m.lang.dir=='rtl';z[A?37:39]='next';z[40]='next';z[9]='next';z[A?39:37]='prev';z[38]='prev';z[2228224+9]='prev';z[32]='click';},onOpen:function(){var x=m.getSelection(),y=x&&x.getStartElement(),z=new d.elementPath(y),A;y=z.block||z.blockLimit||m.document.getBody();do A=y&&y.getComputedStyle(u=='back'?'background-color':'color')||'transparent';while(u=='back'&&A=='transparent'&&y&&(y=y.getParent()));if(!A||A=='transparent')A='#ffffff';this._.panel._.iframe.getFrameDocument().getById(w).setStyle('background-color',A);}});};function r(t,u,v){var w=[],x=n.colorButton_colors.split(','),y=x.length+(n.colorButton_enableMore?2:1),z=e.addFunction(function(F,G){if(F=='?'){var H=arguments.callee;function I(K){this.removeListener('ok',I);this.removeListener('cancel',I);K.name=='ok'&&H(this.getContentElement('picker','selectedColor').getValue(),G);};m.openDialog('colordialog',function(){this.on('ok',I);this.on('cancel',I);});return;}m.focus();t.hide(false);m.fire('saveSnapshot');new a.style(n['colorButton_'+G+'Style'],{color:'inherit'}).remove(m.document);if(F){var J=n['colorButton_'+G+'Style'];J.childRule=G=='back'?function(K){return s(K);}:function(K){return K.getName()!='a'||s(K);};new a.style(J,{color:F}).apply(m.document);}m.fire('saveSnapshot');});w.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',o.auto,'" onclick="CKEDITOR.tools.callFunction(',z,",null,'",u,"');return false;\" href=\"javascript:void('",o.auto,'\')" role="option" aria-posinset="1" aria-setsize="',y,'"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" id="',v,'"></span></td><td colspan=7 align=center>',o.auto,'</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">');for(var A=0;A<x.length;A++){if(A%8===0)w.push('</tr><tr>');var B=x[A].split('/'),C=B[0],D=B[1]||C;if(!B[1])C='#'+C.replace(/^(.)(.)(.)$/,'$1$1$2$2$3$3');var E=m.lang.colors[D]||D;w.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="',E,'" onclick="CKEDITOR.tools.callFunction(',z,",'",C,"','",u,"'); return false;\" href=\"javascript:void('",E,'\')" role="option" aria-posinset="',A+2,'" aria-setsize="',y,'"><span class="cke_colorbox" style="background-color:#',D,'"></span></a></td>');}if(n.colorButton_enableMore===undefined||n.colorButton_enableMore)w.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',o.more,'" onclick="CKEDITOR.tools.callFunction(',z,",'?','",u,"');return false;\" href=\"javascript:void('",o.more,"')\"",' role="option" aria-posinset="',y,'" aria-setsize="',y,'">',o.more,'</a></td>'); +w.push('</tr></table>');return w.join('');};function s(t){return t.getAttribute('contentEditable')=='false'||t.getAttribute('data-nostyle');};}});i.colorButton_colors='000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';i.colorButton_foreStyle={element:'span',styles:{color:'#(color)'},overrides:[{element:'font',attributes:{color:null}}]};i.colorButton_backStyle={element:'span',styles:{'background-color':'#(color)'}};j.colordialog={init:function(m){m.addCommand('colordialog',new a.dialogCommand('colordialog'));a.dialog.add('colordialog',this.path+'dialogs/colordialog.js');}};j.add('colordialog',j.colordialog);j.add('contextmenu',{requires:['menu'],onLoad:function(){j.contextMenu=e.createClass({base:a.menu,$:function(m){this.base.call(this,m,{panel:{className:m.skinClass+' cke_contextmenu',attributes:{'aria-label':m.lang.contextmenu.options}}});},proto:{addTarget:function(m,n){if(b.opera&&!('oncontextmenu' in document.body)){var o;m.on('mousedown',function(s){s=s.data;if(s.$.button!=2){if(s.getKeystroke()==1114112+1)m.fire('contextmenu',s);return;}if(n&&(b.mac?s.$.metaKey:s.$.ctrlKey))return;var t=s.getTarget();if(!o){var u=t.getDocument();o=u.createElement('input');o.$.type='button';u.getBody().append(o);}o.setAttribute('style','position:absolute;top:'+(s.$.clientY-2)+'px;left:'+(s.$.clientX-2)+'px;width:5px;height:5px;opacity:0.01');});m.on('mouseup',function(s){if(o){o.remove();o=undefined;m.fire('contextmenu',s.data);}});}m.on('contextmenu',function(s){var t=s.data;if(n&&(b.webkit?p:b.mac?t.$.metaKey:t.$.ctrlKey))return;t.preventDefault();var u=t.getTarget().getDocument().getDocumentElement(),v=t.$.clientX,w=t.$.clientY;e.setTimeout(function(){this.open(u,null,v,w);},0,this);},this);if(b.opera)m.on('keypress',function(s){var t=s.data;if(t.$.keyCode===0)t.preventDefault();});if(b.webkit){var p,q=function(s){p=b.mac?s.data.$.metaKey:s.data.$.ctrlKey;},r=function(){p=0;};m.on('keydown',q);m.on('keyup',r);m.on('contextmenu',r);}},open:function(m,n,o,p){this.editor.focus();m=m||a.document.getDocumentElement();this.show(m,n,o,p);}}});},beforeInit:function(m){m.contextMenu=new j.contextMenu(m);m.addCommand('contextMenu',{exec:function(){m.contextMenu.open(m.document.getBody());}});}});(function(){function m(o){var p=this.att,q=o&&o.hasAttribute(p)&&o.getAttribute(p)||''; +if(q!==undefined)this.setValue(q);};function n(){var o;for(var p=0;p<arguments.length;p++){if(arguments[p] instanceof h){o=arguments[p];break;}}if(o){var q=this.att,r=this.getValue();if(r)o.setAttribute(q,r);else o.removeAttribute(q,r);}};j.add('dialogadvtab',{createAdvancedTab:function(o,p){if(!p)p={id:1,dir:1,classes:1,styles:1};var q=o.lang.common,r={id:'advanced',label:q.advancedTab,title:q.advancedTab,elements:[{type:'vbox',padding:1,children:[]}]},s=[];if(p.id||p.dir){if(p.id)s.push({id:'advId',att:'id',type:'text',label:q.id,setup:m,commit:n});if(p.dir)s.push({id:'advLangDir',att:'dir',type:'select',label:q.langDir,'default':'',style:'width:100%',items:[[q.notSet,''],[q.langDirLTR,'ltr'],[q.langDirRTL,'rtl']],setup:m,commit:n});r.elements[0].children.push({type:'hbox',widths:['50%','50%'],children:[].concat(s)});}if(p.styles||p.classes){s=[];if(p.styles)s.push({id:'advStyles',att:'style',type:'text',label:q.styles,'default':'',onChange:function(){},getStyle:function(t,u){var v=this.getValue().match(new RegExp(t+'\\s*:\\s*([^;]*)','i'));return v?v[1]:u;},updateStyle:function(t,u){var v=this.getValue();if(v)v=v.replace(new RegExp('\\s*'+t+'s*:[^;]*(?:$|;s*)','i'),'').replace(/^[;\s]+/,'').replace(/\s+$/,'');if(u){v&&!/;\s*$/.test(v)&&(v+='; ');v+=t+': '+u;}this.setValue(v,1);},setup:m,commit:n});if(p.classes)s.push({type:'hbox',widths:['45%','55%'],children:[{id:'advCSSClasses',att:'class',type:'text',label:q.cssClasses,'default':'',setup:m,commit:n}]});r.elements[0].children.push({type:'hbox',widths:['50%','50%'],children:[].concat(s)});}return r;}});})();(function(){j.add('div',{requires:['editingblock','domiterator','styles'],init:function(m){var n=m.lang.div;m.addCommand('creatediv',new a.dialogCommand('creatediv'));m.addCommand('editdiv',new a.dialogCommand('editdiv'));m.addCommand('removediv',{exec:function(o){var p=o.getSelection(),q=p&&p.getRanges(),r,s=p.createBookmarks(),t,u=[];function v(x){var y=new d.elementPath(x),z=y.blockLimit,A=z.is('div')&&z;if(A&&!A.data('cke-div-added')){u.push(A);A.data('cke-div-added');}};for(var w=0;w<q.length;w++){r=q[w];if(r.collapsed)v(p.getStartElement());else{t=new d.walker(r);t.evaluator=v;t.lastForward();}}for(w=0;w<u.length;w++)u[w].remove(true);p.selectBookmarks(s);}});m.ui.addButton('CreateDiv',{label:n.toolbar,command:'creatediv'});if(m.addMenuItems){m.addMenuItems({editdiv:{label:n.edit,command:'editdiv',group:'div',order:1},removediv:{label:n.remove,command:'removediv',group:'div',order:5}});if(m.contextMenu)m.contextMenu.addListener(function(o,p){if(!o||o.isReadOnly())return null; +var q=new d.elementPath(o),r=q.blockLimit;if(r&&r.getAscendant('div',true))return{editdiv:2,removediv:2};return null;});}a.dialog.add('creatediv',this.path+'dialogs/div.js');a.dialog.add('editdiv',this.path+'dialogs/div.js');}});})();(function(){var m={toolbarFocus:{editorFocus:false,readOnly:1,exec:function(o){var p=o._.elementsPath.idBase,q=a.document.getById(p+'0');q&&q.focus(c||b.air);}}},n='<span class="cke_empty"> </span>';j.add('elementspath',{requires:['selection'],init:function(o){var p='cke_path_'+o.name,q,r=function(){if(!q)q=a.document.getById(p);return q;},s='cke_elementspath_'+e.getNextNumber()+'_';o._.elementsPath={idBase:s,filters:[]};o.on('themeSpace',function(x){if(x.data.space=='bottom')x.data.html+='<span id="'+p+'_label" class="cke_voice_label">'+o.lang.elementsPath.eleLabel+'</span>'+'<div id="'+p+'" class="cke_path" role="group" aria-labelledby="'+p+'_label">'+n+'</div>';});function t(x){o.focus();var y=o._.elementsPath.list[x];if(y.is('body')){var z=new d.range(o.document);z.selectNodeContents(y);z.select();}else o.getSelection().selectElement(y);};var u=e.addFunction(t),v=e.addFunction(function(x,y){var z=o._.elementsPath.idBase,A;y=new d.event(y);var B=o.lang.dir=='rtl';switch(y.getKeystroke()){case B?39:37:case 9:A=a.document.getById(z+(x+1));if(!A)A=a.document.getById(z+'0');A.focus();return false;case B?37:39:case 2228224+9:A=a.document.getById(z+(x-1));if(!A)A=a.document.getById(z+(o._.elementsPath.list.length-1));A.focus();return false;case 27:o.focus();return false;case 13:case 32:t(x);return false;}return true;});o.on('selectionChange',function(x){var y=b,z=x.data.selection,A=z.getStartElement(),B=[],C=x.editor,D=C._.elementsPath.list=[],E=C._.elementsPath.filters;while(A){var F=0,G;if(A.data('cke-display-name'))G=A.data('cke-display-name');else if(A.data('cke-real-element-type'))G=A.data('cke-real-element-type');else G=A.getName();for(var H=0;H<E.length;H++){var I=E[H](A,G);if(I===false){F=1;break;}G=I||G;}if(!F){var J=D.push(A)-1,K='';if(y.opera||y.gecko&&y.mac)K+=' onkeypress="return false;"';if(y.gecko)K+=' onblur="this.style.cssText = this.style.cssText;"';var L=C.lang.elementsPath.eleTitle.replace(/%1/,G);B.unshift('<a id="',s,J,'" href="javascript:void(\'',G,'\')" tabindex="-1" title="',L,'"'+(b.gecko&&b.version<10900?' onfocus="event.preventBubble();"':'')+' hidefocus="true" '+' onkeydown="return CKEDITOR.tools.callFunction(',v,',',J,', event );"'+K,' onclick="CKEDITOR.tools.callFunction('+u,',',J,'); return false;"',' role="button" aria-labelledby="'+s+J+'_label">',G,'<span id="',s,J,'_label" class="cke_label">'+L+'</span>','</a>'); +}if(G=='body')break;A=A.getParent();}var M=r();M.setHtml(B.join('')+n);C.fire('elementsPathUpdate',{space:M});});function w(){q&&q.setHtml(n);delete o._.elementsPath.list;};o.on('readOnly',w);o.on('contentDomUnload',w);o.addCommand('elementsPathFocus',m.toolbarFocus);}});})();(function(){j.add('enterkey',{requires:['keystrokes','indent'],init:function(t){t.addCommand('enter',{modes:{wysiwyg:1},editorFocus:false,exec:function(v){r(v);}});t.addCommand('shiftEnter',{modes:{wysiwyg:1},editorFocus:false,exec:function(v){q(v);}});var u=t.keystrokeHandler.keystrokes;u[13]='enter';u[2228224+13]='shiftEnter';}});j.enterkey={enterBlock:function(t,u,v,w){v=v||s(t);if(!v)return;var x=v.document,y=v.checkStartOfBlock(),z=v.checkEndOfBlock(),A=new d.elementPath(v.startContainer),B=A.block;if(y&&z){if(B&&(B.is('li')||B.getParent().is('li'))){t.execCommand('outdent');return;}}else if(B&&B.is('pre')){if(!z){n(t,u,v,w);return;}}else if(B&&f.$captionBlock[B.getName()]){n(t,u,v,w);return;}var C=u==3?'div':'p',D=v.splitBlock(C);if(!D)return;var E=D.previousBlock,F=D.nextBlock,G=D.wasStartOfBlock,H=D.wasEndOfBlock,I;if(F){I=F.getParent();if(I.is('li')){F.breakParent(I);F.move(F.getNext(),1);}}else if(E&&(I=E.getParent())&&I.is('li')){E.breakParent(I);I=E.getNext();v.moveToElementEditStart(I);E.move(E.getPrevious());}if(!G&&!H){if(F.is('li')&&(I=F.getFirst(d.walker.invisible(true)))&&I.is&&I.is('ul','ol'))(c?x.createText('\xa0'):x.createElement('br')).insertBefore(I);if(F)v.moveToElementEditStart(F);}else{var J,K;if(E){if(E.is('li')||!(p.test(E.getName())||E.is('pre')))J=E.clone();}else if(F)J=F.clone();if(!J){if(I&&I.is('li'))J=I;else{J=x.createElement(C);if(E&&(K=E.getDirection()))J.setAttribute('dir',K);}}else if(w&&!J.is('li'))J.renameNode(C);var L=D.elementPath;if(L)for(var M=0,N=L.elements.length;M<N;M++){var O=L.elements[M];if(O.equals(L.block)||O.equals(L.blockLimit))break;if(f.$removeEmpty[O.getName()]){O=O.clone();J.moveChildren(O);J.append(O);}}if(!c)J.appendBogus();if(!J.getParent())v.insertNode(J);J.is('li')&&J.removeAttribute('value');if(c&&G&&(!H||!E.getChildCount())){v.moveToElementEditStart(H?E:J);v.select();}v.moveToElementEditStart(G&&!H?F:J);}if(!c)if(F){var P=x.createElement('span');P.setHtml(' ');v.insertNode(P);P.scrollIntoView();v.deleteContents();}else J.scrollIntoView();v.select();},enterBr:function(t,u,v,w){v=v||s(t);if(!v)return;var x=v.document,y=u==3?'div':'p',z=v.checkEndOfBlock(),A=new d.elementPath(t.getSelection().getStartElement()),B=A.block,C=B&&A.block.getName(),D=false; +if(!w&&C=='li'){o(t,u,v,w);return;}if(!w&&z&&p.test(C)){var E,F;if(F=B.getDirection()){E=x.createElement('div');E.setAttribute('dir',F);E.insertAfter(B);v.setStart(E,0);}else{x.createElement('br').insertAfter(B);if(b.gecko)x.createText('').insertAfter(B);v.setStartAt(B.getNext(),c?3:1);}}else{var G;D=C=='pre';if(D&&!b.gecko)G=x.createText(c?'\r':'\n');else G=x.createElement('br');v.deleteContents();v.insertNode(G);if(c)v.setStartAt(G,4);else{x.createText('\ufeff').insertAfter(G);if(z)G.getParent().appendBogus();G.getNext().$.nodeValue='';v.setStartAt(G.getNext(),1);var H=null;if(!b.gecko){H=x.createElement('span');H.setHtml(' ');}else H=x.createElement('br');H.insertBefore(G.getNext());H.scrollIntoView();H.remove();}}v.collapse(true);v.select(D);}};var m=j.enterkey,n=m.enterBr,o=m.enterBlock,p=/^h[1-6]$/;function q(t){if(t.mode!='wysiwyg')return false;return r(t,t.config.shiftEnterMode,1);};function r(t,u,v){v=t.config.forceEnterMode||v;if(t.mode!='wysiwyg')return false;if(!u)u=t.config.enterMode;setTimeout(function(){t.fire('saveSnapshot');if(u==2)n(t,u,null,v);else o(t,u,null,v);},0);return true;};function s(t){var u=t.getSelection().getRanges(true);for(var v=u.length-1;v>0;v--)u[v].deleteContents();return u[0];};})();(function(){var m='nbsp,gt,lt,amp',n='quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro',o='Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml',p='Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv'; +function q(r,s){var t={},u=[],v={nbsp:'\xa0',shy:'Â',gt:'>',lt:'<',amp:'&'};r=r.replace(/\b(nbsp|shy|gt|lt|amp)(?:,|$)/g,function(A,B){var C=s?'&'+B+';':v[B],D=s?v[B]:'&'+B+';';t[C]=D;u.push(C);return '';});if(!s&&r){r=r.split(',');var w=document.createElement('div'),x;w.innerHTML='&'+r.join(';&')+';';x=w.innerHTML;w=null;for(var y=0;y<x.length;y++){var z=x.charAt(y);t[z]='&'+r[y]+';';u.push(z);}}t.regex=u.join(s?'|':'');return t;};j.add('entities',{afterInit:function(r){var s=r.config,t=r.dataProcessor,u=t&&t.htmlFilter;if(u){var v='';if(s.basicEntities!==false)v+=m;if(s.entities){v+=','+n;if(s.entities_latin)v+=','+o;if(s.entities_greek)v+=','+p;if(s.entities_additional)v+=','+s.entities_additional;}var w=q(v),x=w.regex?'['+w.regex+']':'a^';delete w.regex;if(s.entities&&s.entities_processNumerical)x='[^ -~]|'+x;x=new RegExp(x,'g');function y(C){return s.entities_processNumerical=='force'||!w[C]?'&#'+C.charCodeAt(0)+';':w[C];};var z=q([m,'shy'].join(','),true),A=new RegExp(z.regex,'g');function B(C){return z[C];};u.addRules({text:function(C){return C.replace(A,B).replace(x,y);}});}}});})();i.basicEntities=true;i.entities=true;i.entities_latin=true;i.entities_greek=true;i.entities_additional='#39';(function(){function m(v,w){var x=[];if(!w)return v;else for(var y in w)x.push(y+'='+encodeURIComponent(w[y]));return v+(v.indexOf('?')!=-1?'&':'?')+x.join('&');};function n(v){v+='';var w=v.charAt(0).toUpperCase();return w+v.substr(1);};function o(v){var C=this;var w=C.getDialog(),x=w.getParentEditor();x._.filebrowserSe=C;var y=x.config['filebrowser'+n(w.getName())+'WindowWidth']||x.config.filebrowserWindowWidth||'80%',z=x.config['filebrowser'+n(w.getName())+'WindowHeight']||x.config.filebrowserWindowHeight||'70%',A=C.filebrowser.params||{};A.CKEditor=x.name;A.CKEditorFuncNum=x._.filebrowserFn;if(!A.langCode)A.langCode=x.langCode;var B=m(C.filebrowser.url,A);x.popup(B,y,z,x.config.fileBrowserWindowFeatures);};function p(v){var y=this;var w=y.getDialog(),x=w.getParentEditor();x._.filebrowserSe=y;if(!w.getContentElement(y['for'][0],y['for'][1]).getInputElement().$.value)return false;if(!w.getContentElement(y['for'][0],y['for'][1]).getAction())return false;return true;};function q(v,w,x){var y=x.params||{};y.CKEditor=v.name;y.CKEditorFuncNum=v._.filebrowserFn;if(!y.langCode)y.langCode=v.langCode;w.action=m(x.url,y);w.filebrowser=x;};function r(v,w,x,y){var z,A;for(var B in y){z=y[B];if(z.type=='hbox'||z.type=='vbox')r(v,w,x,z.children);if(!z.filebrowser)continue;if(typeof z.filebrowser=='string'){var C={action:z.type=='fileButton'?'QuickUpload':'Browse',target:z.filebrowser}; +z.filebrowser=C;}if(z.filebrowser.action=='Browse'){var D=z.filebrowser.url;if(D===undefined){D=v.config['filebrowser'+n(w)+'BrowseUrl'];if(D===undefined)D=v.config.filebrowserBrowseUrl;}if(D){z.onClick=o;z.filebrowser.url=D;z.hidden=false;}}else if(z.filebrowser.action=='QuickUpload'&&z['for']){D=z.filebrowser.url;if(D===undefined){D=v.config['filebrowser'+n(w)+'UploadUrl'];if(D===undefined)D=v.config.filebrowserUploadUrl;}if(D){var E=z.onClick;z.onClick=function(F){var G=F.sender;if(E&&E.call(G,F)===false)return false;return p.call(G,F);};z.filebrowser.url=D;z.hidden=false;q(v,x.getContents(z['for'][0]).get(z['for'][1]),z.filebrowser);}}}};function s(v,w){var x=w.getDialog(),y=w.filebrowser.target||null;v=v.replace(/#/g,'%23');if(y){var z=y.split(':'),A=x.getContentElement(z[0],z[1]);if(A){A.setValue(v);x.selectPage(z[0]);}}};function t(v,w,x){if(x.indexOf(';')!==-1){var y=x.split(';');for(var z=0;z<y.length;z++){if(t(v,w,y[z]))return true;}return false;}var A=v.getContents(w).get(x).filebrowser;return A&&A.url;};function u(v,w){var A=this;var x=A._.filebrowserSe.getDialog(),y=A._.filebrowserSe['for'],z=A._.filebrowserSe.filebrowser.onSelect;if(y)x.getContentElement(y[0],y[1]).reset();if(typeof w=='function'&&w.call(A._.filebrowserSe)===false)return;if(z&&z.call(A._.filebrowserSe,v,w)===false)return;if(typeof w=='string'&&w)alert(w);if(v)s(v,A._.filebrowserSe);};j.add('filebrowser',{init:function(v,w){v._.filebrowserFn=e.addFunction(u,v);v.on('destroy',function(){e.removeFunction(this._.filebrowserFn);});}});a.on('dialogDefinition',function(v){var w=v.data.definition,x;for(var y in w.contents){if(x=w.contents[y]){r(v.editor,v.data.name,w,x.elements);if(x.hidden&&x.filebrowser)x.hidden=!t(w,x.id,x.filebrowser);}}});})();j.add('find',{init:function(m){var n=j.find;m.ui.addButton('Find',{label:m.lang.findAndReplace.find,command:'find'});var o=m.addCommand('find',new a.dialogCommand('find'));o.canUndo=false;o.readOnly=1;m.ui.addButton('Replace',{label:m.lang.findAndReplace.replace,command:'replace'});var p=m.addCommand('replace',new a.dialogCommand('replace'));p.canUndo=false;a.dialog.add('find',this.path+'dialogs/find.js');a.dialog.add('replace',this.path+'dialogs/find.js');},requires:['styles']});i.find_highlight={element:'span',styles:{'background-color':'#004',color:'#fff'}};(function(){var m=/\.swf(?:$|\?)/i;function n(p){var q=p.attributes;return q.type=='application/x-shockwave-flash'||m.test(q.src||'');};function o(p,q){return p.createFakeParserElement(q,'cke_flash','flash',true); +};j.add('flash',{init:function(p){p.addCommand('flash',new a.dialogCommand('flash'));p.ui.addButton('Flash',{label:p.lang.common.flash,command:'flash'});a.dialog.add('flash',this.path+'dialogs/flash.js');p.addCss('img.cke_flash{background-image: url('+a.getUrl(this.path+'images/placeholder.png')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 80px;'+'height: 80px;'+'}');if(p.addMenuItems)p.addMenuItems({flash:{label:p.lang.flash.properties,command:'flash',group:'flash'}});p.on('doubleclick',function(q){var r=q.data.element;if(r.is('img')&&r.data('cke-real-element-type')=='flash')q.data.dialog='flash';});if(p.contextMenu)p.contextMenu.addListener(function(q,r){if(q&&q.is('img')&&!q.isReadOnly()&&q.data('cke-real-element-type')=='flash')return{flash:2};});},afterInit:function(p){var q=p.dataProcessor,r=q&&q.dataFilter;if(r)r.addRules({elements:{'cke:object':function(s){var t=s.attributes,u=t.classid&&String(t.classid).toLowerCase();if(!u&&!n(s)){for(var v=0;v<s.children.length;v++){if(s.children[v].name=='cke:embed'){if(!n(s.children[v]))return null;return o(p,s);}}return null;}return o(p,s);},'cke:embed':function(s){if(!n(s))return null;return o(p,s);}}},5);},requires:['fakeobjects']});})();e.extend(i,{flashEmbedTagOnly:false,flashAddEmbedTag:true,flashConvertOnEdit:false});(function(){function m(n,o,p,q,r,s,t){var u=n.config,v=r.split(';'),w=[],x={};for(var y=0;y<v.length;y++){var z=v[y];if(z){z=z.split('/');var A={},B=v[y]=z[0];A[p]=w[y]=z[1]||B;x[B]=new a.style(t,A);x[B]._.definition.name=B;}else v.splice(y--,1);}n.ui.addRichCombo(o,{label:q.label,title:q.panelTitle,className:'cke_'+(p=='size'?'fontSize':'font'),panel:{css:n.skin.editor.css.concat(u.contentsCss),multiSelect:false,attributes:{'aria-label':q.panelTitle}},init:function(){this.startGroup(q.panelTitle);for(var C=0;C<v.length;C++){var D=v[C];this.add(D,x[D].buildPreview(),D);}},onClick:function(C){n.focus();n.fire('saveSnapshot');var D=x[C];if(this.getValue()==C)D.remove(n.document);else D.apply(n.document);n.fire('saveSnapshot');},onRender:function(){n.on('selectionChange',function(C){var D=this.getValue(),E=C.data.path,F=E.elements;for(var G=0,H;G<F.length;G++){H=F[G];for(var I in x){if(x[I].checkElementRemovable(H,true)){if(I!=D)this.setValue(I);return;}}}this.setValue('',s);},this);}});};j.add('font',{requires:['richcombo','styles'],init:function(n){var o=n.config;m(n,'Font','family',n.lang.font,o.font_names,o.font_defaultLabel,o.font_style); +m(n,'FontSize','size',n.lang.fontSize,o.fontSize_sizes,o.fontSize_defaultLabel,o.fontSize_style);}});})();i.font_names='Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif';i.font_defaultLabel='';i.font_style={element:'span',styles:{'font-family':'#(family)'},overrides:[{element:'font',attributes:{face:null}}]};i.fontSize_sizes='8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';i.fontSize_defaultLabel='';i.fontSize_style={element:'span',styles:{'font-size':'#(size)'},overrides:[{element:'font',attributes:{size:null}}]};j.add('format',{requires:['richcombo','styles'],init:function(m){var n=m.config,o=m.lang.format,p=n.format_tags.split(';'),q={};for(var r=0;r<p.length;r++){var s=p[r];q[s]=new a.style(n['format_'+s]);q[s]._.enterMode=m.config.enterMode;}m.ui.addRichCombo('Format',{label:o.label,title:o.panelTitle,className:'cke_format',panel:{css:m.skin.editor.css.concat(n.contentsCss),multiSelect:false,attributes:{'aria-label':o.panelTitle}},init:function(){this.startGroup(o.panelTitle);for(var t in q){var u=o['tag_'+t];this.add(t,q[t].buildPreview(u),u);}},onClick:function(t){m.focus();m.fire('saveSnapshot');var u=q[t],v=new d.elementPath(m.getSelection().getStartElement());u[u.checkActive(v)?'remove':'apply'](m.document);setTimeout(function(){m.fire('saveSnapshot');},0);},onRender:function(){m.on('selectionChange',function(t){var u=this.getValue(),v=t.data.path;for(var w in q){if(q[w].checkActive(v)){if(w!=u)this.setValue(w,m.lang.format['tag_'+w]);return;}}this.setValue('');},this);}});}});i.format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div';i.format_p={element:'p'};i.format_div={element:'div'};i.format_pre={element:'pre'};i.format_address={element:'address'};i.format_h1={element:'h1'};i.format_h2={element:'h2'};i.format_h3={element:'h3'};i.format_h4={element:'h4'};i.format_h5={element:'h5'};i.format_h6={element:'h6'};j.add('forms',{init:function(m){var n=m.lang;m.addCss('form{border: 1px dotted #FF0000;padding: 2px;}\n');m.addCss('img.cke_hidden{background-image: url('+a.getUrl(this.path+'images/hiddenfield.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 16px !important;'+'height: 16px !important;'+'}'); +var o=function(q,r,s){m.addCommand(r,new a.dialogCommand(r));m.ui.addButton(q,{label:n.common[q.charAt(0).toLowerCase()+q.slice(1)],command:r});a.dialog.add(r,s);},p=this.path+'dialogs/';o('Form','form',p+'form.js');o('Checkbox','checkbox',p+'checkbox.js');o('Radio','radio',p+'radio.js');o('TextField','textfield',p+'textfield.js');o('Textarea','textarea',p+'textarea.js');o('Select','select',p+'select.js');o('Button','button',p+'button.js');o('ImageButton','imagebutton',j.getPath('image')+'dialogs/image.js');o('HiddenField','hiddenfield',p+'hiddenfield.js');if(m.addMenuItems)m.addMenuItems({form:{label:n.form.menu,command:'form',group:'form'},checkbox:{label:n.checkboxAndRadio.checkboxTitle,command:'checkbox',group:'checkbox'},radio:{label:n.checkboxAndRadio.radioTitle,command:'radio',group:'radio'},textfield:{label:n.textfield.title,command:'textfield',group:'textfield'},hiddenfield:{label:n.hidden.title,command:'hiddenfield',group:'hiddenfield'},imagebutton:{label:n.image.titleButton,command:'imagebutton',group:'imagebutton'},button:{label:n.button.title,command:'button',group:'button'},select:{label:n.select.title,command:'select',group:'select'},textarea:{label:n.textarea.title,command:'textarea',group:'textarea'}});if(m.contextMenu){m.contextMenu.addListener(function(q){if(q&&q.hasAscendant('form',true)&&!q.isReadOnly())return{form:2};});m.contextMenu.addListener(function(q){if(q&&!q.isReadOnly()){var r=q.getName();if(r=='select')return{select:2};if(r=='textarea')return{textarea:2};if(r=='input')switch(q.getAttribute('type')){case 'button':case 'submit':case 'reset':return{button:2};case 'checkbox':return{checkbox:2};case 'radio':return{radio:2};case 'image':return{imagebutton:2};default:return{textfield:2};}if(r=='img'&&q.data('cke-real-element-type')=='hiddenfield')return{hiddenfield:2};}});}m.on('doubleclick',function(q){var r=q.data.element;if(r.is('form'))q.data.dialog='form';else if(r.is('select'))q.data.dialog='select';else if(r.is('textarea'))q.data.dialog='textarea';else if(r.is('img')&&r.data('cke-real-element-type')=='hiddenfield')q.data.dialog='hiddenfield';else if(r.is('input'))switch(r.getAttribute('type')){case 'button':case 'submit':case 'reset':q.data.dialog='button';break;case 'checkbox':q.data.dialog='checkbox';break;case 'radio':q.data.dialog='radio';break;case 'image':q.data.dialog='imagebutton';break;default:q.data.dialog='textfield';break;}});},afterInit:function(m){var n=m.dataProcessor,o=n&&n.htmlFilter,p=n&&n.dataFilter;if(c)o&&o.addRules({elements:{input:function(q){var r=q.attributes,s=r.type; +if(!s)r.type='text';if(s=='checkbox'||s=='radio')r.value=='on'&&delete r.value;}}});if(p)p.addRules({elements:{input:function(q){if(q.attributes.type=='hidden')return m.createFakeParserElement(q,'cke_hidden','hiddenfield');}}});},requires:['image','fakeobjects']});if(c)h.prototype.hasAttribute=e.override(h.prototype.hasAttribute,function(m){return function(n){var q=this;var o=q.$.attributes.getNamedItem(n);if(q.getName()=='input')switch(n){case 'class':return q.$.className.length>0;case 'checked':return!!q.$.checked;case 'value':var p=q.getAttribute('type');return p=='checkbox'||p=='radio'?q.$.value!='on':q.$.value;}return m.apply(q,arguments);};});(function(){var m={canUndo:false,exec:function(o){var p=o.document.createElement('hr'),q=new d.range(o.document);o.insertElement(p);q.moveToPosition(p,4);var r=p.getNext();if(!r||r.type==1&&!r.isEditable())q.fixBlock(true,o.config.enterMode==3?'div':'p');q.select();}},n='horizontalrule';j.add(n,{init:function(o){o.addCommand(n,m);o.ui.addButton('HorizontalRule',{label:o.lang.horizontalrule,command:n});}});})();(function(){var m=/^[\t\r\n ]*(?: |\xa0)$/,n='{cke_protected}';function o(T){var U=T.children.length,V=T.children[U-1];while(V&&V.type==3&&!e.trim(V.value))V=T.children[--U];return V;};function p(T,U){var V=T.children,W=o(T);if(W){if((U||!c)&&W.type==1&&W.name=='br')V.pop();if(W.type==3&&m.test(W.value))V.pop();}};function q(T,U,V){if(!U&&(!V||typeof V=='function'&&V(T)===false))return false;if(U&&c&&(document.documentMode>7||T.name in f.tr||T.name in f.$listItem))return false;var W=o(T);return!W||W&&(W.type==1&&W.name=='br'||T.name=='form'&&W.name=='input');};function r(T,U){return function(V){p(V,!T);if(q(V,!T,U))if(T||c)V.add(new a.htmlParser.text('\xa0'));else V.add(new a.htmlParser.element('br',{}));};};var s=f,t=['caption','colgroup','col','thead','tfoot','tbody'],u=e.extend({},s.$block,s.$listItem,s.$tableContent);for(var v in u){if(!('br' in s[v]))delete u[v];}delete u.pre;var w={elements:{},attributeNames:[[/^on/,'data-cke-pa-on']]},x={elements:{}};for(v in u)x.elements[v]=r();var y={elementNames:[[/^cke:/,''],[/^\?xml:namespace$/,'']],attributeNames:[[/^data-cke-(saved|pa)-/,''],[/^data-cke-.*/,''],['hidefocus','']],elements:{$:function(T){var U=T.attributes;if(U){if(U['data-cke-temp'])return false;var V=['name','href','src'],W;for(var X=0;X<V.length;X++){W='data-cke-saved-'+V[X];W in U&&delete U[V[X]];}}return T;},table:function(T){var U=T.children;U.sort(function(V,W){return V.type==1&&W.type==V.type?e.indexOf(t,V.name)>e.indexOf(t,W.name)?1:-1:0; +});},embed:function(T){var U=T.parent;if(U&&U.name=='object'){var V=U.attributes.width,W=U.attributes.height;V&&(T.attributes.width=V);W&&(T.attributes.height=W);}},param:function(T){T.children=[];T.isEmpty=true;return T;},a:function(T){if(!(T.children.length||T.attributes.name||T.attributes['data-cke-saved-name']))return false;},span:function(T){if(T.attributes['class']=='Apple-style-span')delete T.name;},pre:function(T){c&&p(T);},html:function(T){delete T.attributes.contenteditable;delete T.attributes['class'];},body:function(T){delete T.attributes.spellcheck;delete T.attributes.contenteditable;},style:function(T){var U=T.children[0];U&&U.value&&(U.value=e.trim(U.value));if(!T.attributes.type)T.attributes.type='text/css';},title:function(T){var U=T.children[0];U&&(U.value=T.attributes['data-cke-title']||'');}},attributes:{'class':function(T,U){return e.ltrim(T.replace(/(?:^|\s+)cke_[^\s]*/g,''))||false;}}};if(c)y.attributes.style=function(T,U){return T.replace(/(^|;)([^\:]+)/g,function(V){return V.toLowerCase();});};function z(T){var U=T.attributes;if(U.contenteditable!='false')U['data-cke-editable']=U.contenteditable?'true':1;U.contenteditable='false';};function A(T){var U=T.attributes;switch(U['data-cke-editable']){case 'true':U.contenteditable='true';break;case '1':delete U.contenteditable;break;}};for(v in {input:1,textarea:1}){w.elements[v]=z;y.elements[v]=A;}var B=/<(a|area|img|input)\b([^>]*)>/gi,C=/\b(href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,D=/(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,E=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,F=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,G=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,H=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi;function I(T){return T.replace(B,function(U,V,W){return '<'+V+W.replace(C,function(X,Y){if(W.indexOf('data-cke-saved-'+Y)==-1)return ' data-cke-saved-'+X+' '+X;return X;})+'>';});};function J(T){return T.replace(D,function(U){return '<cke:encoded>'+encodeURIComponent(U)+'</cke:encoded>';});};function K(T){return T.replace(E,function(U,V){return decodeURIComponent(V);});};function L(T){return T.replace(F,'$1cke:$2');};function M(T){return T.replace(G,'$1$2');};function N(T){return T.replace(H,'<cke:$1$2></cke:$1>');};function O(T){return T.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,'$1$2$2');};function P(T){return T.replace(/<!--(?!{cke_protected})[\s\S]+?-->/g,function(U){return '<!--'+n+'{C}'+encodeURIComponent(U).replace(/--/g,'%2D%2D')+'-->'; +});};function Q(T){return T.replace(/<!--\{cke_protected\}\{C\}([\s\S]+?)-->/g,function(U,V){return decodeURIComponent(V);});};function R(T,U){var V=U._.dataStore;return T.replace(/<!--\{cke_protected\}([\s\S]+?)-->/g,function(W,X){return decodeURIComponent(X);}).replace(/\{cke_protected_(\d+)\}/g,function(W,X){return V&&V[X]||'';});};function S(T,U){var V=[],W=U.config.protectedSource,X=U._.dataStore||(U._.dataStore={id:1}),Y=/<\!--\{cke_temp(comment)?\}(\d*?)-->/g,Z=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi].concat(W);T=T.replace(/<!--[\s\S]*?-->/g,function(ab){return '<!--{cke_tempcomment}'+(V.push(ab)-1)+'-->';});for(var aa=0;aa<Z.length;aa++)T=T.replace(Z[aa],function(ab){ab=ab.replace(Y,function(ac,ad,ae){return V[ae];});return/cke_temp(comment)?/.test(ab)?ab:'<!--{cke_temp}'+(V.push(ab)-1)+'-->';});T=T.replace(Y,function(ab,ac,ad){return '<!--'+n+(ac?'{C}':'')+encodeURIComponent(V[ad]).replace(/--/g,'%2D%2D')+'-->';});return T.replace(/(['"]).*?\1/g,function(ab){return ab.replace(/<!--\{cke_protected\}([\s\S]+?)-->/g,function(ac,ad){X[X.id]=decodeURIComponent(ad);return '{cke_protected_'+X.id++ +'}';});});};j.add('htmldataprocessor',{requires:['htmlwriter'],init:function(T){var U=T.dataProcessor=new a.htmlDataProcessor(T);U.writer.forceSimpleAmpersand=T.config.forceSimpleAmpersand;U.dataFilter.addRules(w);U.dataFilter.addRules(x);U.htmlFilter.addRules(y);var V={elements:{}};for(v in u)V.elements[v]=r(true,T.config.fillEmptyBlocks);U.htmlFilter.addRules(V);},onLoad:function(){!('fillEmptyBlocks' in i)&&(i.fillEmptyBlocks=1);}});a.htmlDataProcessor=function(T){var U=this;U.editor=T;U.writer=new a.htmlWriter();U.dataFilter=new a.htmlParser.filter();U.htmlFilter=new a.htmlParser.filter();};a.htmlDataProcessor.prototype={toHtml:function(T,U){T=S(T,this.editor);T=I(T);T=J(T);T=L(T);T=N(T);T=O(T);var V=new h('div');V.setHtml('a'+T);T=V.getHtml().substr(1);T=M(T);T=K(T);T=Q(T);var W=a.htmlParser.fragment.fromHtml(T,U),X=new a.htmlParser.basicWriter();W.writeHtml(X,this.dataFilter);T=X.getHtml(true);T=P(T);return T;},toDataFormat:function(T,U){var V=this.writer,W=a.htmlParser.fragment.fromHtml(T,U);V.reset();W.writeHtml(V,this.htmlFilter);var X=V.getHtml(true);X=Q(X);X=R(X,this.editor);return X;}};})();(function(){j.add('iframe',{requires:['dialog','fakeobjects'],init:function(m){var n='iframe',o=m.lang.iframe;a.dialog.add(n,this.path+'dialogs/iframe.js');m.addCommand(n,new a.dialogCommand(n));m.addCss('img.cke_iframe{background-image: url('+a.getUrl(this.path+'images/placeholder.png')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 80px;'+'height: 80px;'+'}'); +m.ui.addButton('Iframe',{label:o.toolbar,command:n});m.on('doubleclick',function(p){var q=p.data.element;if(q.is('img')&&q.data('cke-real-element-type')=='iframe')p.data.dialog='iframe';});if(m.addMenuItems)m.addMenuItems({iframe:{label:o.title,command:'iframe',group:'image'}});if(m.contextMenu)m.contextMenu.addListener(function(p,q){if(p&&p.is('img')&&p.data('cke-real-element-type')=='iframe')return{iframe:2};});},afterInit:function(m){var n=m.dataProcessor,o=n&&n.dataFilter;if(o)o.addRules({elements:{iframe:function(p){return m.createFakeParserElement(p,'cke_iframe','iframe',true);}}});}});})();j.add('image',{init:function(m){var n='image';a.dialog.add(n,this.path+'dialogs/image.js');m.addCommand(n,new a.dialogCommand(n));m.ui.addButton('Image',{label:m.lang.common.image,command:n});m.on('doubleclick',function(o){var p=o.data.element;if(p.is('img')&&!p.data('cke-realelement')&&!p.isReadOnly())o.data.dialog='image';});if(m.addMenuItems)m.addMenuItems({image:{label:m.lang.image.menu,command:'image',group:'image'}});if(m.contextMenu)m.contextMenu.addListener(function(o,p){if(!o||!o.is('img')||o.data('cke-realelement')||o.isReadOnly())return null;return{image:2};});}});i.image_removeLinkByEmptyURL=true;(function(){var m={ol:1,ul:1},n=d.walker.whitespaces(true),o=d.walker.bookmark(false,true);function p(t){var B=this;if(t.editor.readOnly)return null;var u=t.editor,v=t.data.path,w=v&&v.contains(m),x=v.block||v.blockLimit;if(w)return B.setState(2);if(!B.useIndentClasses&&B.name=='indent')return B.setState(2);if(!x)return B.setState(0);if(B.useIndentClasses){var y=x.$.className.match(B.classNameRegex),z=0;if(y){y=y[1];z=B.indentClassMap[y];}if(B.name=='outdent'&&!z||B.name=='indent'&&z==u.config.indentClasses.length)return B.setState(0);return B.setState(2);}else{var A=parseInt(x.getStyle(r(x)),10);if(isNaN(A))A=0;if(A<=0)return B.setState(0);return B.setState(2);}};function q(t,u){var w=this;w.name=u;w.useIndentClasses=t.config.indentClasses&&t.config.indentClasses.length>0;if(w.useIndentClasses){w.classNameRegex=new RegExp('(?:^|\\s+)('+t.config.indentClasses.join('|')+')(?=$|\\s)');w.indentClassMap={};for(var v=0;v<t.config.indentClasses.length;v++)w.indentClassMap[t.config.indentClasses[v]]=v+1;}w.startDisabled=u=='outdent';};function r(t,u){return(u||t.getComputedStyle('direction'))=='ltr'?'margin-left':'margin-right';};function s(t){return t.type=1&&t.is('li');};q.prototype={exec:function(t){var u=this,v={};function w(M){var N=C.startContainer,O=C.endContainer; +while(N&&!N.getParent().equals(M))N=N.getParent();while(O&&!O.getParent().equals(M))O=O.getParent();if(!N||!O)return;var P=N,Q=[],R=false;while(!R){if(P.equals(O))R=true;Q.push(P);P=P.getNext();}if(Q.length<1)return;var S=M.getParents(true);for(var T=0;T<S.length;T++){if(S[T].getName&&m[S[T].getName()]){M=S[T];break;}}var U=u.name=='indent'?1:-1,V=Q[0],W=Q[Q.length-1],X=j.list.listToArray(M,v),Y=X[W.getCustomData('listarray_index')].indent;for(T=V.getCustomData('listarray_index');T<=W.getCustomData('listarray_index');T++){X[T].indent+=U;var Z=X[T].parent;X[T].parent=new h(Z.getName(),Z.getDocument());}for(T=W.getCustomData('listarray_index')+1;T<X.length&&X[T].indent>Y;T++)X[T].indent+=U;var aa=j.list.arrayToList(X,v,null,t.config.enterMode,M.getDirection());if(u.name=='outdent'){var ab;if((ab=M.getParent())&&ab.is('li')){var ac=aa.listNode.getChildren(),ad=[],ae=ac.count(),af;for(T=ae-1;T>=0;T--){if((af=ac.getItem(T))&&af.is&&af.is('li'))ad.push(af);}}}if(aa)aa.listNode.replace(M);if(ad&&ad.length)for(T=0;T<ad.length;T++){var ag=ad[T],ah=ag;while((ah=ah.getNext())&&ah.is&&ah.getName() in m){if(c&&!ag.getFirst(function(ai){return n(ai)&&o(ai);}))ag.append(C.document.createText('\xa0'));ag.append(ah);}ag.insertAfter(ab);}};function x(){var M=C.createIterator(),N=t.config.enterMode;M.enforceRealBlocks=true;M.enlargeBr=N!=2;var O;while(O=M.getNextParagraph(N==1?'p':'div'))y(O);};function y(M,N){if(M.getCustomData('indent_processed'))return false;if(u.useIndentClasses){var O=M.$.className.match(u.classNameRegex),P=0;if(O){O=O[1];P=u.indentClassMap[O];}if(u.name=='outdent')P--;else P++;if(P<0)return false;P=Math.min(P,t.config.indentClasses.length);P=Math.max(P,0);M.$.className=e.ltrim(M.$.className.replace(u.classNameRegex,''));if(P>0)M.addClass(t.config.indentClasses[P-1]);}else{var Q=r(M,N),R=parseInt(M.getStyle(Q),10);if(isNaN(R))R=0;var S=t.config.indentOffset||40;R+=(u.name=='indent'?1:-1)*S;if(R<0)return false;R=Math.max(R,0);R=Math.ceil(R/S)*S;M.setStyle(Q,R?R+(t.config.indentUnit||'px'):'');if(M.getAttribute('style')==='')M.removeAttribute('style');}h.setMarker(v,M,'indent_processed',1);return true;};var z=t.getSelection(),A=z.createBookmarks(1),B=z&&z.getRanges(1),C,D=B.createIterator();while(C=D.getNextRange()){var E=C.getCommonAncestor(),F=E;while(F&&!(F.type==1&&m[F.getName()]))F=F.getParent();if(!F){var G=C.getEnclosedNode();if(G&&G.type==1&&G.getName() in m){C.setStartAt(G,1);C.setEndAt(G,2);F=G;}}if(F&&C.startContainer.type==1&&C.startContainer.getName() in m){var H=new d.walker(C); +H.evaluator=s;C.startContainer=H.next();}if(F&&C.endContainer.type==1&&C.endContainer.getName() in m){H=new d.walker(C);H.evaluator=s;C.endContainer=H.previous();}if(F){var I=F.getFirst(s),J=!!I.getNext(s),K=C.startContainer,L=I.equals(K)||I.contains(K);if(!(L&&(u.name=='indent'||u.useIndentClasses||parseInt(F.getStyle(r(F)),10))&&y(F,!J&&I.getDirection())))w(F);}else x();}h.clearAllMarkers(v);t.forceNextSelectionCheck();z.selectBookmarks(A);}};j.add('indent',{init:function(t){var u=t.addCommand('indent',new q(t,'indent')),v=t.addCommand('outdent',new q(t,'outdent'));t.ui.addButton('Indent',{label:t.lang.indent,command:'indent'});t.ui.addButton('Outdent',{label:t.lang.outdent,command:'outdent'});t.on('selectionChange',e.bind(p,u));t.on('selectionChange',e.bind(p,v));if(b.ie6Compat||b.ie7Compat)t.addCss('ul,ol{\tmargin-left: 0px;\tpadding-left: 40px;}');t.on('dirChanged',function(w){var x=new d.range(t.document);x.setStartBefore(w.data.node);x.setEndAfter(w.data.node);var y=new d.walker(x),z;while(z=y.next()){if(z.type==1){if(!z.equals(w.data.node)&&z.getDirection()){x.setStartAfter(z);y=new d.walker(x);continue;}var A=t.config.indentClasses;if(A){var B=w.data.dir=='ltr'?['_rtl','']:['','_rtl'];for(var C=0;C<A.length;C++){if(z.hasClass(A[C]+B[0])){z.removeClass(A[C]+B[0]);z.addClass(A[C]+B[1]);}}}var D=z.getStyle('margin-right'),E=z.getStyle('margin-left');D?z.setStyle('margin-left',D):z.removeStyle('margin-left');E?z.setStyle('margin-right',E):z.removeStyle('margin-right');}}});},requires:['domiterator','list']});})();(function(){function m(r,s){var t=s.block||s.blockLimit;if(!t||t.getName()=='body')return 2;return n(t,r.config.useComputedState)==this.value?1:2;};function n(r,s){s=s===undefined||s;var t;if(s)t=r.getComputedStyle('text-align');else{while(!r.hasAttribute||!(r.hasAttribute('align')||r.getStyle('text-align'))){var u=r.getParent();if(!u)break;r=u;}t=r.getStyle('text-align')||r.getAttribute('align')||'';}t&&(t=t.replace(/-moz-|-webkit-|start|auto/i,''));!t&&s&&(t=r.getComputedStyle('direction')=='rtl'?'right':'left');return t;};function o(r){if(r.editor.readOnly)return;var s=r.editor.getCommand(this.name);s.state=m.call(this,r.editor,r.data.path);s.fire('state');};function p(r,s,t){var v=this;v.name=s;v.value=t;var u=r.config.justifyClasses;if(u){switch(t){case 'left':v.cssClassName=u[0];break;case 'center':v.cssClassName=u[1];break;case 'right':v.cssClassName=u[2];break;case 'justify':v.cssClassName=u[3];break;}v.cssClassRegex=new RegExp('(?:^|\\s+)(?:'+u.join('|')+')(?=$|\\s)'); +}};function q(r){var s=r.editor,t=new d.range(s.document);t.setStartBefore(r.data.node);t.setEndAfter(r.data.node);var u=new d.walker(t),v;while(v=u.next()){if(v.type==1){if(!v.equals(r.data.node)&&v.getDirection()){t.setStartAfter(v);u=new d.walker(t);continue;}var w=s.config.justifyClasses;if(w)if(v.hasClass(w[0])){v.removeClass(w[0]);v.addClass(w[2]);}else if(v.hasClass(w[2])){v.removeClass(w[2]);v.addClass(w[0]);}var x='text-align',y=v.getStyle(x);if(y=='left')v.setStyle(x,'right');else if(y=='right')v.setStyle(x,'left');}}};p.prototype={exec:function(r){var D=this;var s=r.getSelection(),t=r.config.enterMode;if(!s)return;var u=s.createBookmarks(),v=s.getRanges(true),w=D.cssClassName,x,y,z=r.config.useComputedState;z=z===undefined||z;for(var A=v.length-1;A>=0;A--){x=v[A].createIterator();x.enlargeBr=t!=2;while(y=x.getNextParagraph(t==1?'p':'div')){y.removeAttribute('align');y.removeStyle('text-align');var B=w&&(y.$.className=e.ltrim(y.$.className.replace(D.cssClassRegex,''))),C=D.state==2&&(!z||n(y,true)!=D.value);if(w){if(C)y.addClass(w);else if(!B)y.removeAttribute('class');}else if(C)y.setStyle('text-align',D.value);}}r.focus();r.forceNextSelectionCheck();s.selectBookmarks(u);}};j.add('justify',{init:function(r){var s=new p(r,'justifyleft','left'),t=new p(r,'justifycenter','center'),u=new p(r,'justifyright','right'),v=new p(r,'justifyblock','justify');r.addCommand('justifyleft',s);r.addCommand('justifycenter',t);r.addCommand('justifyright',u);r.addCommand('justifyblock',v);r.ui.addButton('JustifyLeft',{label:r.lang.justify.left,command:'justifyleft'});r.ui.addButton('JustifyCenter',{label:r.lang.justify.center,command:'justifycenter'});r.ui.addButton('JustifyRight',{label:r.lang.justify.right,command:'justifyright'});r.ui.addButton('JustifyBlock',{label:r.lang.justify.block,command:'justifyblock'});r.on('selectionChange',e.bind(o,s));r.on('selectionChange',e.bind(o,u));r.on('selectionChange',e.bind(o,t));r.on('selectionChange',e.bind(o,v));r.on('dirChanged',q);},requires:['domiterator']});})();j.add('keystrokes',{beforeInit:function(m){m.keystrokeHandler=new a.keystrokeHandler(m);m.specialKeys={};},init:function(m){var n=m.config.keystrokes,o=m.config.blockedKeystrokes,p=m.keystrokeHandler.keystrokes,q=m.keystrokeHandler.blockedKeystrokes;for(var r=0;r<n.length;r++)p[n[r][0]]=n[r][1];for(r=0;r<o.length;r++)q[o[r]]=1;}});a.keystrokeHandler=function(m){var n=this;if(m.keystrokeHandler)return m.keystrokeHandler;n.keystrokes={};n.blockedKeystrokes={};n._={editor:m}; +return n;};(function(){var m,n=function(p){p=p.data;var q=p.getKeystroke(),r=this.keystrokes[q],s=this._.editor;m=s.fire('key',{keyCode:q})===true;if(!m){if(r){var t={from:'keystrokeHandler'};m=s.execCommand(r,t)!==false;}if(!m){var u=s.specialKeys[q];m=u&&u(s)===true;if(!m)m=!!this.blockedKeystrokes[q];}}if(m)p.preventDefault(true);return!m;},o=function(p){if(m){m=false;p.data.preventDefault(true);}};a.keystrokeHandler.prototype={attach:function(p){p.on('keydown',n,this);if(b.opera||b.gecko&&b.mac)p.on('keypress',o,this);}};})();i.blockedKeystrokes=[1114112+66,1114112+73,1114112+85];i.keystrokes=[[4456448+121,'toolbarFocus'],[4456448+122,'elementsPathFocus'],[2228224+121,'contextMenu'],[1114112+2228224+121,'contextMenu'],[1114112+90,'undo'],[1114112+89,'redo'],[1114112+2228224+90,'redo'],[1114112+76,'link'],[1114112+66,'bold'],[1114112+73,'italic'],[1114112+85,'underline'],[4456448+(c||b.webkit?189:109),'toolbarCollapse'],[4456448+48,'a11yHelp']];j.add('link',{init:function(m){m.addCommand('link',new a.dialogCommand('link'));m.addCommand('anchor',new a.dialogCommand('anchor'));m.addCommand('unlink',new a.unlinkCommand());m.addCommand('removeAnchor',new a.removeAnchorCommand());m.ui.addButton('Link',{label:m.lang.link.toolbar,command:'link'});m.ui.addButton('Unlink',{label:m.lang.unlink,command:'unlink'});m.ui.addButton('Anchor',{label:m.lang.anchor.toolbar,command:'anchor'});a.dialog.add('link',this.path+'dialogs/link.js');a.dialog.add('anchor',this.path+'dialogs/anchor.js');var n=m.lang.dir=='rtl'?'right':'left',o='background:url('+a.getUrl(this.path+'images/anchor.gif')+') no-repeat '+n+' center;'+'border:1px dotted #00f;';m.addCss('a.cke_anchor,a.cke_anchor_empty'+(c&&b.version<7?'':',a[name],a[data-cke-saved-name]')+'{'+o+'padding-'+n+':18px;'+'cursor:auto;'+'}'+(c?'a.cke_anchor_empty{display:inline-block;}':'')+'img.cke_anchor'+'{'+o+'width:16px;'+'min-height:15px;'+'height:1.15em;'+'vertical-align:'+(b.opera?'middle':'text-bottom')+';'+'}');m.on('selectionChange',function(p){if(m.readOnly)return;var q=m.getCommand('unlink'),r=p.data.path.lastElement&&p.data.path.lastElement.getAscendant('a',true);if(r&&r.getName()=='a'&&r.getAttribute('href')&&r.getChildCount())q.setState(2);else q.setState(0);});m.on('doubleclick',function(p){var q=j.link.getSelectedLink(m)||p.data.element;if(!q.isReadOnly())if(q.is('a')){p.data.dialog=q.getAttribute('name')&&(!q.getAttribute('href')||!q.getChildCount())?'anchor':'link';m.getSelection().selectElement(q);}else if(j.link.tryRestoreFakeAnchor(m,q))p.data.dialog='anchor'; +});if(m.addMenuItems)m.addMenuItems({anchor:{label:m.lang.anchor.menu,command:'anchor',group:'anchor',order:1},removeAnchor:{label:m.lang.anchor.remove,command:'removeAnchor',group:'anchor',order:5},link:{label:m.lang.link.menu,command:'link',group:'link',order:1},unlink:{label:m.lang.unlink,command:'unlink',group:'link',order:5}});if(m.contextMenu)m.contextMenu.addListener(function(p,q){if(!p||p.isReadOnly())return null;var r=j.link.tryRestoreFakeAnchor(m,p);if(!r&&!(r=j.link.getSelectedLink(m)))return null;var s={};if(r.getAttribute('href')&&r.getChildCount())s={link:2,unlink:2};if(r&&r.hasAttribute('name'))s.anchor=s.removeAnchor=2;return s;});},afterInit:function(m){var n=m.dataProcessor,o=n&&n.dataFilter,p=n&&n.htmlFilter,q=m._.elementsPath&&m._.elementsPath.filters;if(o)o.addRules({elements:{a:function(r){var s=r.attributes;if(!s.name)return null;var t=!r.children.length;if(j.link.synAnchorSelector){var u=t?'cke_anchor_empty':'cke_anchor',v=s['class'];if(s.name&&(!v||v.indexOf(u)<0))s['class']=(v||'')+' '+u;if(t&&j.link.emptyAnchorFix){s.contenteditable='false';s['data-cke-editable']=1;}}else if(j.link.fakeAnchor&&t)return m.createFakeParserElement(r,'cke_anchor','anchor');return null;}}});if(j.link.emptyAnchorFix&&p)p.addRules({elements:{a:function(r){delete r.attributes.contenteditable;}}});if(q)q.push(function(r,s){if(s=='a')if(j.link.tryRestoreFakeAnchor(m,r)||r.getAttribute('name')&&(!r.getAttribute('href')||!r.getChildCount()))return 'anchor';});},requires:['fakeobjects']});j.link={getSelectedLink:function(m){try{var n=m.getSelection();if(n.getType()==3){var o=n.getSelectedElement();if(o.is('a'))return o;}var p=n.getRanges(true)[0];p.shrink(2);var q=p.getCommonAncestor();return q.getAscendant('a',true);}catch(r){return null;}},fakeAnchor:b.opera||b.webkit,synAnchorSelector:c,emptyAnchorFix:c&&b.version<8,tryRestoreFakeAnchor:function(m,n){if(n&&n.data('cke-real-element-type')&&n.data('cke-real-element-type')=='anchor'){var o=m.restoreRealElement(n);if(o.data('cke-saved-name'))return o;}}};a.unlinkCommand=function(){};a.unlinkCommand.prototype={exec:function(m){var n=m.getSelection(),o=n.createBookmarks(),p=n.getRanges(),q,r;for(var s=0;s<p.length;s++){q=p[s].getCommonAncestor(true);r=q.getAscendant('a',true);if(!r)continue;p[s].selectNodeContents(r);}n.selectRanges(p);m.document.$.execCommand('unlink',false,null);n.selectBookmarks(o);},startDisabled:true};a.removeAnchorCommand=function(){};a.removeAnchorCommand.prototype={exec:function(m){var n=m.getSelection(),o=n.createBookmarks(),p; +if(n&&(p=n.getSelectedElement())&&(j.link.fakeAnchor&&!p.getChildCount()?j.link.tryRestoreFakeAnchor(m,p):p.is('a')))p.remove(1);else if(p=j.link.getSelectedLink(m))if(p.hasAttribute('href')){p.removeAttributes({name:1,'data-cke-saved-name':1});p.removeClass('cke_anchor');}else p.remove(1);n.selectBookmarks(o);}};e.extend(i,{linkShowAdvancedTab:true,linkShowTargetTab:true});(function(){var m={ol:1,ul:1},n=/^[\n\r\t ]*$/,o=d.walker.whitespaces(),p=d.walker.bookmark(),q=function(E){return!(o(E)||p(E));};j.list={listToArray:function(E,F,G,H,I){if(!m[E.getName()])return[];if(!H)H=0;if(!G)G=[];for(var J=0,K=E.getChildCount();J<K;J++){var L=E.getChild(J);if(L.type==1&&L.getName() in f.$list)j.list.listToArray(L,F,G,H+1);if(L.$.nodeName.toLowerCase()!='li')continue;var M={parent:E,indent:H,element:L,contents:[]};if(!I){M.grandparent=E.getParent();if(M.grandparent&&M.grandparent.$.nodeName.toLowerCase()=='li')M.grandparent=M.grandparent.getParent();}else M.grandparent=I;if(F)h.setMarker(F,L,'listarray_index',G.length);G.push(M);for(var N=0,O=L.getChildCount(),P;N<O;N++){P=L.getChild(N);if(P.type==1&&m[P.getName()])j.list.listToArray(P,F,G,H+1,M.grandparent);else M.contents.push(P);}}return G;},arrayToList:function(E,F,G,H,I){if(!G)G=0;if(!E||E.length<G+1)return null;var J=E[G].parent.getDocument(),K=new d.documentFragment(J),L=null,M=G,N=Math.max(E[G].indent,0),O=null,P,Q=H==1?'p':'div';while(1){var R=E[M];P=R.element.getDirection(1);if(R.indent==N){if(!L||E[M].parent.getName()!=L.getName()){L=E[M].parent.clone(false,1);I&&L.setAttribute('dir',I);K.append(L);}O=L.append(R.element.clone(0,1));if(P!=L.getDirection(1))O.setAttribute('dir',P);else O.removeAttribute('dir');for(var S=0;S<R.contents.length;S++)O.append(R.contents[S].clone(1,1));M++;}else if(R.indent==Math.max(N,0)+1){var T=E[M-1].element.getDirection(1),U=j.list.arrayToList(E,null,M,H,T!=P?P:null);if(!O.getChildCount()&&c&&!(J.$.documentMode>7))O.append(J.createText('\xa0'));O.append(U.listNode);M=U.nextIndex;}else if(R.indent==-1&&!G&&R.grandparent){if(m[R.grandparent.getName()])O=R.element.clone(false,true);else if(I||R.element.hasAttributes()||H!=2){O=J.createElement(Q);R.element.copyAttributes(O,{type:1,value:1});if(!I&&H==2&&!O.hasAttributes())O=new d.documentFragment(J);}else O=new d.documentFragment(J);if(O.type==1)if(R.grandparent.getDirection(1)!=P)O.setAttribute('dir',P);else O.removeAttribute('dir');for(S=0;S<R.contents.length;S++)O.append(R.contents[S].clone(1,1));if(O.type==11&&M!=E.length-1){var V=O.getLast(); +if(V&&V.type==1&&V.getAttribute('type')=='_moz')V.remove();if(!(V=O.getLast(q)&&V.type==1&&V.getName() in f.$block))O.append(J.createElement('br'));}if(O.type==1&&O.getName()==Q&&O.$.firstChild){O.trim();var W=O.getFirst();if(W.type==1&&W.isBlockBoundary()){var X=new d.documentFragment(J);O.moveChildren(X);O=X;}}var Y=O.$.nodeName.toLowerCase();if(!c&&(Y=='div'||Y=='p'))O.appendBogus();K.append(O);L=null;M++;}else return null;if(E.length<=M||Math.max(E[M].indent,0)<N)break;}if(F){var Z=K.getFirst();while(Z){if(Z.type==1)h.clearMarkers(F,Z);Z=Z.getNextSourceNode();}}return{listNode:K,nextIndex:M};}};function r(E){if(E.editor.readOnly)return null;var F=E.data.path,G=F.blockLimit,H=F.elements,I,J;for(J=0;J<H.length&&(I=H[J])&&!I.equals(G);J++){if(m[H[J].getName()])return this.setState(this.type==H[J].getName()?1:2);}return this.setState(2);};function s(E,F,G,H){var I=j.list.listToArray(F.root,G),J=[];for(var K=0;K<F.contents.length;K++){var L=F.contents[K];L=L.getAscendant('li',true);if(!L||L.getCustomData('list_item_processed'))continue;J.push(L);h.setMarker(G,L,'list_item_processed',true);}var M=F.root,N=M.getDocument().createElement(this.type);M.copyAttributes(N,{start:1,type:1});N.removeStyle('list-style-type');for(K=0;K<J.length;K++){var O=J[K].getCustomData('listarray_index');I[O].parent=N;}var P=j.list.arrayToList(I,G,null,E.config.enterMode),Q,R=P.listNode.getChildCount();for(K=0;K<R&&(Q=P.listNode.getChild(K));K++){if(Q.getName()==this.type)H.push(Q);}P.listNode.replace(F.root);};var t=/^h[1-6]$/;function u(E,F,G){var H=F.contents,I=F.root.getDocument(),J=[];if(H.length==1&&H[0].equals(F.root)){var K=I.createElement('div');H[0].moveChildren&&H[0].moveChildren(K);H[0].append(K);H[0]=K;}var L=F.contents[0].getParent();for(var M=0;M<H.length;M++)L=L.getCommonAncestor(H[M].getParent());var N=E.config.useComputedState,O,P;N=N===undefined||N;for(M=0;M<H.length;M++){var Q=H[M],R;while(R=Q.getParent()){if(R.equals(L)){J.push(Q);if(!P&&Q.getDirection())P=1;var S=Q.getDirection(N);if(O!==null)if(O&&O!=S)O=null;else O=S;break;}Q=R;}}if(J.length<1)return;var T=J[J.length-1].getNext(),U=I.createElement(this.type);G.push(U);var V,W;while(J.length){V=J.shift();W=I.createElement('li');if(V.is('pre')||t.test(V.getName()))V.appendTo(W);else{V.copyAttributes(W);if(O&&V.getDirection()){W.removeStyle('direction');W.removeAttribute('dir');}V.moveChildren(W);V.remove();}W.appendTo(U);}if(O&&P)U.setAttribute('dir',O);if(T)U.insertBefore(T);else U.appendTo(L);};function v(E,F,G){var H=j.list.listToArray(F.root,G),I=[]; +for(var J=0;J<F.contents.length;J++){var K=F.contents[J];K=K.getAscendant('li',true);if(!K||K.getCustomData('list_item_processed'))continue;I.push(K);h.setMarker(G,K,'list_item_processed',true);}var L=null;for(J=0;J<I.length;J++){var M=I[J].getCustomData('listarray_index');H[M].indent=-1;L=M;}for(J=L+1;J<H.length;J++){if(H[J].indent>H[J-1].indent+1){var N=H[J-1].indent+1-H[J].indent,O=H[J].indent;while(H[J]&&H[J].indent>=O){H[J].indent+=N;J++;}J--;}}var P=j.list.arrayToList(H,G,null,E.config.enterMode,F.root.getAttribute('dir')),Q=P.listNode,R,S;function T(U){if((R=Q[U?'getFirst':'getLast']())&&!(R.is&&R.isBlockBoundary())&&(S=F.root[U?'getPrevious':'getNext'](d.walker.whitespaces(true)))&&!(S.is&&S.isBlockBoundary({br:1})))E.document.createElement('br')[U?'insertBefore':'insertAfter'](R);};T(true);T();Q.replace(F.root);};function w(E,F){this.name=E;this.type=F;};w.prototype={exec:function(E){var F=E.document,G=E.config,H=E.getSelection(),I=H&&H.getRanges(true);if(!I||I.length<1)return;if(this.state==2){var J=F.getBody();if(!J.getFirst(q)){G.enterMode==2?J.appendBogus():I[0].fixBlock(1,G.enterMode==1?'p':'div');H.selectRanges(I);}else{var K=I.length==1&&I[0],L=K&&K.getEnclosedNode();if(L&&L.is&&this.type==L.getName())this.setState(1);}}var M=H.createBookmarks(true),N=[],O={},P=I.createIterator(),Q=0;while((K=P.getNextRange())&&++Q){var R=K.getBoundaryNodes(),S=R.startNode,T=R.endNode;if(S.type==1&&S.getName()=='td')K.setStartAt(R.startNode,1);if(T.type==1&&T.getName()=='td')K.setEndAt(R.endNode,2);var U=K.createIterator(),V;U.forceBrBreak=this.state==2;while(V=U.getNextParagraph()){if(V.getCustomData('list_block'))continue;else h.setMarker(O,V,'list_block',1);var W=new d.elementPath(V),X=W.elements,Y=X.length,Z=null,aa=0,ab=W.blockLimit,ac;for(var ad=Y-1;ad>=0&&(ac=X[ad]);ad--){if(m[ac.getName()]&&ab.contains(ac)){ab.removeCustomData('list_group_object_'+Q);var ae=ac.getCustomData('list_group_object');if(ae)ae.contents.push(V);else{ae={root:ac,contents:[V]};N.push(ae);h.setMarker(O,ac,'list_group_object',ae);}aa=1;break;}}if(aa)continue;var af=ab;if(af.getCustomData('list_group_object_'+Q))af.getCustomData('list_group_object_'+Q).contents.push(V);else{ae={root:af,contents:[V]};h.setMarker(O,af,'list_group_object_'+Q,ae);N.push(ae);}}}var ag=[];while(N.length>0){ae=N.shift();if(this.state==2){if(m[ae.root.getName()])s.call(this,E,ae,O,ag);else u.call(this,E,ae,ag);}else if(this.state==1&&m[ae.root.getName()])v.call(this,E,ae,O);}for(ad=0;ad<ag.length;ad++){Z=ag[ad]; +var ah,ai=this;(ah=function(aj){var ak=Z[aj?'getPrevious':'getNext'](d.walker.whitespaces(true));if(ak&&ak.getName&&ak.getName()==ai.type){ak.remove();ak.moveChildren(Z,aj);}})();ah(1);}h.clearAllMarkers(O);H.selectBookmarks(M);E.focus();}};var x=f,y=/[\t\r\n ]*(?: |\xa0)$/;function z(E,F){var G,H=E.children,I=H.length;for(var J=0;J<I;J++){G=H[J];if(G.name&&G.name in F)return J;}return I;};function A(E){return function(F){var G=F.children,H=z(F,x.$list),I=G[H],J=I&&I.previous,K;if(J&&(J.name&&J.name=='br'||J.value&&(K=J.value.match(y)))){var L=J;if(!(K&&K.index)&&L==G[0])G[0]=E||c?new a.htmlParser.text('\xa0'):new a.htmlParser.element('br',{});else if(L.name=='br')G.splice(H-1,1);else L.value=L.value.replace(y,'');}};};var B={elements:{}};for(var C in x.$listItem)B.elements[C]=A();var D={elements:{}};for(C in x.$listItem)D.elements[C]=A(true);j.add('list',{init:function(E){var F=E.addCommand('numberedlist',new w('numberedlist','ol')),G=E.addCommand('bulletedlist',new w('bulletedlist','ul'));E.ui.addButton('NumberedList',{label:E.lang.numberedlist,command:'numberedlist'});E.ui.addButton('BulletedList',{label:E.lang.bulletedlist,command:'bulletedlist'});E.on('selectionChange',e.bind(r,F));E.on('selectionChange',e.bind(r,G));},afterInit:function(E){var F=E.dataProcessor;if(F){F.dataFilter.addRules(B);F.htmlFilter.addRules(D);}},requires:['domiterator']});})();(function(){j.liststyle={requires:['dialog'],init:function(m){m.addCommand('numberedListStyle',new a.dialogCommand('numberedListStyle'));a.dialog.add('numberedListStyle',this.path+'dialogs/liststyle.js');m.addCommand('bulletedListStyle',new a.dialogCommand('bulletedListStyle'));a.dialog.add('bulletedListStyle',this.path+'dialogs/liststyle.js');if(m.addMenuItems){m.addMenuGroup('list',108);m.addMenuItems({numberedlist:{label:m.lang.list.numberedTitle,group:'list',command:'numberedListStyle'},bulletedlist:{label:m.lang.list.bulletedTitle,group:'list',command:'bulletedListStyle'}});}if(m.contextMenu)m.contextMenu.addListener(function(n,o){if(!n||n.isReadOnly())return null;while(n){var p=n.getName();if(p=='ol')return{numberedlist:2};else if(p=='ul')return{bulletedlist:2};n=n.getParent();}return null;});}};j.add('liststyle',j.liststyle);})();(function(){function m(s){if(!s||s.type!=1||s.getName()!='form')return[];var t=[],u=['style','className'];for(var v=0;v<u.length;v++){var w=u[v],x=s.$.elements.namedItem(w);if(x){var y=new h(x);t.push([y,y.nextSibling]);y.remove();}}return t;};function n(s,t){if(!s||s.type!=1||s.getName()!='form')return; +if(t.length>0)for(var u=t.length-1;u>=0;u--){var v=t[u][0],w=t[u][1];if(w)v.insertBefore(w);else v.appendTo(s);}};function o(s,t){var u=m(s),v={},w=s.$;if(!t){v['class']=w.className||'';w.className='';}v.inline=w.style.cssText||'';if(!t)w.style.cssText='position: static; overflow: visible';n(u);return v;};function p(s,t){var u=m(s),v=s.$;if('class' in t)v.className=t['class'];if('inline' in t)v.style.cssText=t.inline;n(u);};function q(s){var t=a.instances;for(var u in t){var v=t[u];if(v.mode=='wysiwyg'&&!v.readOnly){var w=v.document.getBody();w.setAttribute('contentEditable',false);w.setAttribute('contentEditable',true);}}if(s.focusManager.hasFocus){s.toolbox.focus();s.focus();}};function r(s){if(!c||b.version>6)return null;var t=h.createFromHtml('<iframe frameborder="0" tabindex="-1" src="javascript:void((function(){document.open();'+(b.isCustomDomain()?"document.domain='"+this.getDocument().$.domain+"';":'')+'document.close();'+'})())"'+' style="display:block;position:absolute;z-index:-1;'+'progid:DXImageTransform.Microsoft.Alpha(opacity=0);'+'"></iframe>');return s.append(t,true);};j.add('maximize',{init:function(s){var t=s.lang,u=a.document,v=u.getWindow(),w,x,y,z;function A(){var C=v.getViewPaneSize();z&&z.setStyles({width:C.width+'px',height:C.height+'px'});s.resize(C.width,C.height,null,true);};var B=2;s.addCommand('maximize',{modes:{wysiwyg:1,source:1},readOnly:1,editorFocus:false,exec:function(){var C=s.container.getChild(1),D=s.getThemeSpace('contents');if(s.mode=='wysiwyg'){var E=s.getSelection();w=E&&E.getRanges();x=v.getScrollPosition();}else{var F=s.textarea.$;w=!c&&[F.selectionStart,F.selectionEnd];x=[F.scrollLeft,F.scrollTop];}if(this.state==2){v.on('resize',A);y=v.getScrollPosition();var G=s.container;while(G=G.getParent()){G.setCustomData('maximize_saved_styles',o(G));G.setStyle('z-index',s.config.baseFloatZIndex-1);}D.setCustomData('maximize_saved_styles',o(D,true));C.setCustomData('maximize_saved_styles',o(C,true));var H={overflow:b.webkit?'':'hidden',width:0,height:0};u.getDocumentElement().setStyles(H);!b.gecko&&u.getDocumentElement().setStyle('position','fixed');!(b.gecko&&b.quirks)&&u.getBody().setStyles(H);c?setTimeout(function(){v.$.scrollTo(0,0);},0):v.$.scrollTo(0,0);C.setStyle('position',b.gecko&&b.quirks?'fixed':'absolute');C.$.offsetLeft;C.setStyles({'z-index':s.config.baseFloatZIndex-1,left:'0px',top:'0px'});z=r(C);C.addClass('cke_maximized');A();var I=C.getDocumentPosition();C.setStyles({left:-1*I.x+'px',top:-1*I.y+'px'});b.gecko&&q(s); +}else if(this.state==1){v.removeListener('resize',A);var J=[D,C];for(var K=0;K<J.length;K++){p(J[K],J[K].getCustomData('maximize_saved_styles'));J[K].removeCustomData('maximize_saved_styles');}G=s.container;while(G=G.getParent()){p(G,G.getCustomData('maximize_saved_styles'));G.removeCustomData('maximize_saved_styles');}c?setTimeout(function(){v.$.scrollTo(y.x,y.y);},0):v.$.scrollTo(y.x,y.y);C.removeClass('cke_maximized');if(b.webkit){C.setStyle('display','inline');setTimeout(function(){C.setStyle('display','block');},0);}if(z){z.remove();z=null;}s.fire('resize');}this.toggleState();var L=this.uiItems[0];if(L){var M=this.state==2?t.maximize:t.minimize,N=s.element.getDocument().getById(L._.id);N.getChild(1).setHtml(M);N.setAttribute('title',M);N.setAttribute('href','javascript:void("'+M+'");');}if(s.mode=='wysiwyg'){if(w){b.gecko&&q(s);s.getSelection().selectRanges(w);var O=s.getSelection().getStartElement();O&&O.scrollIntoView(true);}else v.$.scrollTo(x.x,x.y);}else{if(w){F.selectionStart=w[0];F.selectionEnd=w[1];}F.scrollLeft=x[0];F.scrollTop=x[1];}w=x=null;B=this.state;},canUndo:false});s.ui.addButton('Maximize',{label:t.maximize,command:'maximize'});s.on('mode',function(){var C=s.getCommand('maximize');C.setState(C.state==0?0:B);},null,null,100);}});})();j.add('newpage',{init:function(m){m.addCommand('newpage',{modes:{wysiwyg:1,source:1},exec:function(n){var o=this;n.setData(n.config.newpage_html||'',function(){setTimeout(function(){n.fire('afterCommandExec',{name:o.name,command:o});n.selectionChange();},200);});n.focus();},async:true});m.ui.addButton('NewPage',{label:m.lang.newPage,command:'newpage'});}});j.add('pagebreak',{init:function(m){m.addCommand('pagebreak',j.pagebreakCmd);m.ui.addButton('PageBreak',{label:m.lang.pagebreak,command:'pagebreak'});var n=['{','background: url('+a.getUrl(this.path+'images/pagebreak.gif')+') no-repeat center center;','clear: both;','width:100%; _width:99.9%;','border-top: #999999 1px dotted;','border-bottom: #999999 1px dotted;','padding:0;','height: 5px;','cursor: default;','}'].join('').replace(/;/g,' !important;');m.addCss('div.cke_pagebreak'+n);b.opera&&m.on('contentDom',function(){m.document.on('click',function(o){var p=o.data.getTarget();if(p.is('div')&&p.hasClass('cke_pagebreak'))m.getSelection().selectElement(p);});});},afterInit:function(m){var n=m.lang.pagebreakAlt,o=m.dataProcessor,p=o&&o.dataFilter,q=o&&o.htmlFilter;if(q)q.addRules({attributes:{'class':function(r,s){var t=r.replace('cke_pagebreak','');if(t!=r){var u=a.htmlParser.fragment.fromHtml('<span style="display: none;"> </span>'); +s.children.length=0;s.add(u);var v=s.attributes;delete v['aria-label'];delete v.contenteditable;delete v.title;}return t;}}},5);if(p)p.addRules({elements:{div:function(r){var s=r.attributes,t=s&&s.style,u=t&&r.children.length==1&&r.children[0],v=u&&u.name=='span'&&u.attributes.style;if(v&&/page-break-after\s*:\s*always/i.test(t)&&/display\s*:\s*none/i.test(v)){s.contenteditable='false';s['class']='cke_pagebreak';s['data-cke-display-name']='pagebreak';s['aria-label']=n;s.title=n;r.children.length=0;}}}});},requires:['fakeobjects']});j.pagebreakCmd={exec:function(m){var n=m.lang.pagebreakAlt,o=h.createFromHtml('<div style="page-break-after: always;"contenteditable="false" title="'+n+'" '+'aria-label="'+n+'" '+'data-cke-display-name="pagebreak" '+'class="cke_pagebreak">'+'</div>',m.document),p=m.getSelection().getRanges(true);m.fire('saveSnapshot');for(var q,r=p.length-1;r>=0;r--){q=p[r];if(r<p.length-1)o=o.clone(true);q.splitBlock('p');q.insertNode(o);if(r==p.length-1){var s=o.getNext();q.moveToPosition(o,4);if(!s||s.type==1&&!s.isEditable())q.fixBlock(true,m.config.enterMode==3?'div':'p');q.select();}}m.fire('saveSnapshot');}};(function(){function m(n){n.data.mode='html';};j.add('pastefromword',{init:function(n){var o=0,p=function(q){q&&q.removeListener();n.removeListener('beforePaste',m);o&&setTimeout(function(){o=0;},0);};n.addCommand('pastefromword',{canUndo:false,exec:function(){o=1;n.on('beforePaste',m);if(n.execCommand('paste','html')===false){n.on('dialogShow',function(q){q.removeListener();q.data.on('cancel',p);});n.on('dialogHide',function(q){q.data.removeListener('cancel',p);});}n.on('afterPaste',p);}});n.ui.addButton('PasteFromWord',{label:n.lang.pastefromword.toolbar,command:'pastefromword'});n.on('pasteState',function(q){n.getCommand('pastefromword').setState(q.data);});n.on('paste',function(q){var r=q.data,s;if((s=r.html)&&(o||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(s))){var t=this.loadFilterRules(function(){if(t)n.fire('paste',r);else if(!n.config.pasteFromWordPromptCleanup||o||confirm(n.lang.pastefromword.confirmCleanup))r.html=a.cleanWord(s,n);});t&&q.cancel();}},this);},loadFilterRules:function(n){var o=a.cleanWord;if(o)n();else{var p=a.getUrl(i.pasteFromWordCleanupFile||this.path+'filter/default.js');a.scriptLoader.load(p,n,null,true);}return!o;},requires:['clipboard']});})();(function(){var m={exec:function(n){var o=e.tryThese(function(){var p=window.clipboardData.getData('Text');if(!p)throw 0;return p;});if(!o){n.openDialog('pastetext'); +return false;}else n.fire('paste',{text:o});return true;}};j.add('pastetext',{init:function(n){var o='pastetext',p=n.addCommand(o,m);n.ui.addButton('PasteText',{label:n.lang.pasteText.button,command:o});a.dialog.add(o,a.getUrl(this.path+'dialogs/pastetext.js'));if(n.config.forcePasteAsPlainText){n.on('beforeCommandExec',function(q){var r=q.data.commandData;if(q.data.name=='paste'&&r!='html'){n.execCommand('pastetext');q.cancel();}},null,null,0);n.on('beforePaste',function(q){q.data.mode='text';});}n.on('pasteState',function(q){n.getCommand('pastetext').setState(q.data);});},requires:['clipboard']});})();j.add('popup');e.extend(a.editor.prototype,{popup:function(m,n,o,p){n=n||'80%';o=o||'70%';if(typeof n=='string'&&n.length>1&&n.substr(n.length-1,1)=='%')n=parseInt(window.screen.width*parseInt(n,10)/100,10);if(typeof o=='string'&&o.length>1&&o.substr(o.length-1,1)=='%')o=parseInt(window.screen.height*parseInt(o,10)/100,10);if(n<640)n=640;if(o<420)o=420;var q=parseInt((window.screen.height-o)/2,10),r=parseInt((window.screen.width-n)/2,10);p=(p||'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes')+',width='+n+',height='+o+',top='+q+',left='+r;var s=window.open('',null,p,true);if(!s)return false;try{s.moveTo(r,q);s.resizeTo(n,o);s.focus();s.location.href=m;}catch(t){s=window.open(m,null,p,true);}return true;}});(function(){var m={modes:{wysiwyg:1,source:1},canUndo:false,readOnly:1,exec:function(o){var p,q=o.config,r=q.baseHref?'<base href="'+q.baseHref+'"/>':'',s=b.isCustomDomain();if(q.fullPage)p=o.getData().replace(/<head>/,'$&'+r).replace(/[^>]*(?=<\/title>)/,'$& — '+o.lang.preview);else{var t='<body ',u=o.document&&o.document.getBody();if(u){if(u.getAttribute('id'))t+='id="'+u.getAttribute('id')+'" ';if(u.getAttribute('class'))t+='class="'+u.getAttribute('class')+'" ';}t+='>';p=o.config.docType+'<html dir="'+o.config.contentsLangDirection+'">'+'<head>'+r+'<title>'+o.lang.preview+'</title>'+e.buildStyleHtml(o.config.contentsCss)+'</head>'+t+o.getData()+'</body></html>';}var v=640,w=420,x=80;try{var y=window.screen;v=Math.round(y.width*0.8);w=Math.round(y.height*0.7);x=Math.round(y.width*0.1);}catch(B){}var z='';if(s){window._cke_htmlToLoad=p;z='javascript:void( (function(){document.open();document.domain="'+document.domain+'";'+'document.write( window.opener._cke_htmlToLoad );'+'document.close();'+'window.opener._cke_htmlToLoad = null;'+'})() )';}var A=window.open(z,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+v+',height='+w+',left='+x); +if(!s){A.document.open();A.document.write(p);A.document.close();}}},n='preview';j.add(n,{init:function(o){o.addCommand(n,m);o.ui.addButton('Preview',{label:o.lang.preview,command:n});}});})();j.add('print',{init:function(m){var n='print',o=m.addCommand(n,j.print);m.ui.addButton('Print',{label:m.lang.print,command:n});}});j.print={exec:function(m){if(b.opera)return;else if(b.gecko)m.window.$.print();else m.document.$.execCommand('Print');},canUndo:false,readOnly:1,modes:{wysiwyg:!b.opera}};j.add('removeformat',{requires:['selection'],init:function(m){m.addCommand('removeFormat',j.removeformat.commands.removeformat);m.ui.addButton('RemoveFormat',{label:m.lang.removeFormat,command:'removeFormat'});m._.removeFormat={filters:[]};}});j.removeformat={commands:{removeformat:{exec:function(m){var n=m._.removeFormatRegex||(m._.removeFormatRegex=new RegExp('^(?:'+m.config.removeFormatTags.replace(/,/g,'|')+')$','i')),o=m._.removeAttributes||(m._.removeAttributes=m.config.removeFormatAttributes.split(',')),p=j.removeformat.filter,q=m.getSelection().getRanges(1),r=q.createIterator(),s;while(s=r.getNextRange()){if(!s.collapsed)s.enlarge(1);var t=s.createBookmark(),u=t.startNode,v=t.endNode,w,x=function(z){var A=new d.elementPath(z),B=A.elements;for(var C=1,D;D=B[C];C++){if(D.equals(A.block)||D.equals(A.blockLimit))break;if(n.test(D.getName())&&p(m,D))z.breakParent(D);}};x(u);if(v){x(v);w=u.getNextSourceNode(true,1);while(w){if(w.equals(v))break;var y=w.getNextSourceNode(false,1);if(!(w.getName()=='img'&&w.data('cke-realelement'))&&p(m,w))if(n.test(w.getName()))w.remove(1);else{w.removeAttributes(o);m.fire('removeFormatCleanup',w);}w=y;}}s.moveToBookmark(t);}m.getSelection().selectRanges(q);}}},filter:function(m,n){var o=m._.removeFormat.filters;for(var p=0;p<o.length;p++){if(o[p](n)===false)return false;}return true;}};a.editor.prototype.addRemoveFormatFilter=function(m){this._.removeFormat.filters.push(m);};i.removeFormatTags='b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var';i.removeFormatAttributes='class,style,lang,width,height,align,hspace,valign';j.add('resize',{init:function(m){var n=m.config,o=m.element.getDirection(1);!n.resize_dir&&(n.resize_dir='both');n.resize_maxWidth==undefined&&(n.resize_maxWidth=3000);n.resize_maxHeight==undefined&&(n.resize_maxHeight=3000);n.resize_minWidth==undefined&&(n.resize_minWidth=750);n.resize_minHeight==undefined&&(n.resize_minHeight=250);if(n.resize_enabled!==false){var p=null,q,r,s=(n.resize_dir=='both'||n.resize_dir=='horizontal')&&n.resize_minWidth!=n.resize_maxWidth,t=(n.resize_dir=='both'||n.resize_dir=='vertical')&&n.resize_minHeight!=n.resize_maxHeight; +function u(x){var y=x.data.$.screenX-q.x,z=x.data.$.screenY-q.y,A=r.width,B=r.height,C=A+y*(o=='rtl'?-1:1),D=B+z;if(s)A=Math.max(n.resize_minWidth,Math.min(C,n.resize_maxWidth));if(t)B=Math.max(n.resize_minHeight,Math.min(D,n.resize_maxHeight));m.resize(A,B);};function v(x){a.document.removeListener('mousemove',u);a.document.removeListener('mouseup',v);if(m.document){m.document.removeListener('mousemove',u);m.document.removeListener('mouseup',v);}};var w=e.addFunction(function(x){if(!p)p=m.getResizable();r={width:p.$.offsetWidth||0,height:p.$.offsetHeight||0};q={x:x.screenX,y:x.screenY};n.resize_minWidth>r.width&&(n.resize_minWidth=r.width);n.resize_minHeight>r.height&&(n.resize_minHeight=r.height);a.document.on('mousemove',u);a.document.on('mouseup',v);if(m.document){m.document.on('mousemove',u);m.document.on('mouseup',v);}});m.on('destroy',function(){e.removeFunction(w);});m.on('themeSpace',function(x){if(x.data.space=='bottom'){var y='';if(s&&!t)y=' cke_resizer_horizontal';if(!s&&t)y=' cke_resizer_vertical';var z='<div class="cke_resizer'+y+' cke_resizer_'+o+'"'+' title="'+e.htmlEncode(m.lang.resize)+'"'+' onmousedown="CKEDITOR.tools.callFunction('+w+', event)"'+'></div>';o=='ltr'&&y=='ltr'?x.data.html+=z:x.data.html=z+x.data.html;}},m,null,100);}}});(function(){var m={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(o){var p=o.element.$.form;if(p)try{p.submit();}catch(q){if(p.submit.click)p.submit.click();}}},n='save';j.add(n,{init:function(o){var p=o.addCommand(n,m);p.modes={wysiwyg:!!o.element.$.form};o.ui.addButton('Save',{label:o.lang.save,command:n});}});})();(function(){var m='scaytcheck',n='';function o(t,u){var v=0,w;for(w in u){if(u[w]==t){v=1;break;}}return v;};var p=function(){var t=this,u=function(){var y=t.config,z={};z.srcNodeRef=t.document.getWindow().$.frameElement;z.assocApp='CKEDITOR.'+a.version+'@'+a.revision;z.customerid=y.scayt_customerid||'1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2';z.customDictionaryIds=y.scayt_customDictionaryIds||'';z.userDictionaryName=y.scayt_userDictionaryName||'';z.sLang=y.scayt_sLang||'en_US';z.onLoad=function(){if(!(c&&b.version<8))this.addStyle(this.selectorCss(),'padding-bottom: 2px !important;');if(t.focusManager.hasFocus&&!q.isControlRestored(t))this.focus();};z.onBeforeChange=function(){if(q.getScayt(t)&&!t.checkDirty())setTimeout(function(){t.resetDirty();},0);};var A=window.scayt_custom_params;if(typeof A=='object')for(var B in A)z[B]=A[B];if(q.getControlId(t))z.id=q.getControlId(t); +var C=new window.scayt(z);C.afterMarkupRemove.push(function(E){new h(E,C.document).mergeSiblings();});var D=q.instances[t.name];if(D){C.sLang=D.sLang;C.option(D.option());C.paused=D.paused;}q.instances[t.name]=C;try{C.setDisabled(q.isPaused(t)===false);}catch(E){}t.fire('showScaytState');};t.on('contentDom',u);t.on('contentDomUnload',function(){var y=a.document.getElementsByTag('script'),z=/^dojoIoScript(\d+)$/i,A=/^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;for(var B=0;B<y.count();B++){var C=y.getItem(B),D=C.getId(),E=C.getAttribute('src');if(D&&E&&D.match(z)&&E.match(A))C.remove();}});t.on('beforeCommandExec',function(y){if((y.data.name=='source'||y.data.name=='newpage')&&t.mode=='wysiwyg'){var z=q.getScayt(t);if(z){q.setPaused(t,!z.disabled);q.setControlId(t,z.id);z.destroy(true);delete q.instances[t.name];}}else if(y.data.name=='source'&&t.mode=='source')q.markControlRestore(t);});t.on('afterCommandExec',function(y){if(!q.isScaytEnabled(t))return;if(t.mode=='wysiwyg'&&(y.data.name=='undo'||y.data.name=='redo'))window.setTimeout(function(){q.getScayt(t).refresh();},10);});t.on('destroy',function(y){var z=y.editor,A=q.getScayt(z);if(!A)return;delete q.instances[z.name];q.setControlId(z,A.id);A.destroy(true);});t.on('afterSetData',function(){if(q.isScaytEnabled(t))window.setTimeout(function(){var y=q.getScayt(t);y&&y.refresh();},10);});t.on('insertElement',function(){var y=q.getScayt(t);if(q.isScaytEnabled(t)){if(c)t.getSelection().unlock(true);window.setTimeout(function(){y.focus();y.refresh();},10);}},this,null,50);t.on('insertHtml',function(){var y=q.getScayt(t);if(q.isScaytEnabled(t)){if(c)t.getSelection().unlock(true);window.setTimeout(function(){y.focus();y.refresh();},10);}},this,null,50);t.on('scaytDialog',function(y){y.data.djConfig=window.djConfig;y.data.scayt_control=q.getScayt(t);y.data.tab=n;y.data.scayt=window.scayt;});var v=t.dataProcessor,w=v&&v.htmlFilter;if(w)w.addRules({elements:{span:function(y){if(y.attributes['data-scayt_word']&&y.attributes['data-scaytid']){delete y.name;return y;}}}});var x=j.undo.Image.prototype;x.equals=e.override(x.equals,function(y){return function(z){var E=this;var A=E.contents,B=z.contents,C=q.getScayt(E.editor);if(C&&q.isScaytReady(E.editor)){E.contents=C.reset(A)||'';z.contents=C.reset(B)||'';}var D=y.apply(E,arguments);E.contents=A;z.contents=B;return D;};});if(t.document)u();};j.scayt={engineLoaded:false,instances:{},controlInfo:{},setControlInfo:function(t,u){if(t&&t.name&&typeof this.controlInfo[t.name]!='object')this.controlInfo[t.name]={}; +for(var v in u)this.controlInfo[t.name][v]=u[v];},isControlRestored:function(t){if(t&&t.name&&this.controlInfo[t.name])return this.controlInfo[t.name].restored;return false;},markControlRestore:function(t){this.setControlInfo(t,{restored:true});},setControlId:function(t,u){this.setControlInfo(t,{id:u});},getControlId:function(t){if(t&&t.name&&this.controlInfo[t.name]&&this.controlInfo[t.name].id)return this.controlInfo[t.name].id;return null;},setPaused:function(t,u){this.setControlInfo(t,{paused:u});},isPaused:function(t){if(t&&t.name&&this.controlInfo[t.name])return this.controlInfo[t.name].paused;return undefined;},getScayt:function(t){return this.instances[t.name];},isScaytReady:function(t){return this.engineLoaded===true&&'undefined'!==typeof window.scayt&&this.getScayt(t);},isScaytEnabled:function(t){var u=this.getScayt(t);return u?u.disabled===false:false;},getUiTabs:function(t){var u=[],v=t.config.scayt_uiTabs||'1,1,1';v=v.split(',');v[3]='1';for(var w=0;w<4;w++)u[w]=typeof window.scayt!='undefined'&&typeof window.scayt.uiTags!='undefined'?parseInt(v[w],10)&&window.scayt.uiTags[w]:parseInt(v[w],10);return u;},loadEngine:function(t){if(b.gecko&&b.version<10900||b.opera||b.air)return t.fire('showScaytState');if(this.engineLoaded===true)return p.apply(t);else if(this.engineLoaded==-1)return a.on('scaytReady',function(){p.apply(t);});a.on('scaytReady',p,t);a.on('scaytReady',function(){this.engineLoaded=true;},this,null,0);this.engineLoaded=-1;var u=document.location.protocol;u=u.search(/https?:/)!=-1?u:'http:';var v='svc.spellchecker.net/scayt26/loader__base.js',w=t.config.scayt_srcUrl||u+'//'+v,x=q.parseUrl(w).path+'/';if(window.scayt==undefined){a._djScaytConfig={baseUrl:x,addOnLoad:[function(){a.fireOnce('scaytReady');}],isDebug:false};a.document.getHead().append(a.document.createElement('script',{attributes:{type:'text/javascript',async:'true',src:w}}));}else a.fireOnce('scaytReady');return null;},parseUrl:function(t){var u;if(t.match&&(u=t.match(/(.*)[\/\\](.*?\.\w+)$/)))return{path:u[1],file:u[2]};else return t;}};var q=j.scayt,r=function(t,u,v,w,x,y,z){t.addCommand(w,x);t.addMenuItem(w,{label:v,command:w,group:y,order:z});},s={preserveState:true,editorFocus:false,canUndo:false,exec:function(t){if(q.isScaytReady(t)){var u=q.isScaytEnabled(t);this.setState(u?2:1);var v=q.getScayt(t);v.focus();v.setDisabled(u);}else if(!t.config.scayt_autoStartup&&q.engineLoaded>=0){this.setState(0);q.loadEngine(t);}}};j.add('scayt',{requires:['menubutton'],beforeInit:function(t){var u=t.config.scayt_contextMenuItemsOrder||'suggest|moresuggest|control',v=''; +u=u.split('|');if(u&&u.length)for(var w=0;w<u.length;w++)v+='scayt_'+u[w]+(u.length!=parseInt(w,10)+1?',':'');t.config.menu_groups=v+','+t.config.menu_groups;},init:function(t){var u=t.dataProcessor&&t.dataProcessor.dataFilter,v={elements:{span:function(E){var F=E.attributes;if(F&&F['data-scaytid'])delete E.name;}}};u&&u.addRules(v);var w={},x={},y=t.addCommand(m,s);a.dialog.add(m,a.getUrl(this.path+'dialogs/options.js'));var z=q.getUiTabs(t),A='scaytButton';t.addMenuGroup(A);var B={},C=t.lang.scayt;B.scaytToggle={label:C.enable,command:m,group:A};if(z[0]==1)B.scaytOptions={label:C.options,group:A,onClick:function(){n='options';t.openDialog(m);}};if(z[1]==1)B.scaytLangs={label:C.langs,group:A,onClick:function(){n='langs';t.openDialog(m);}};if(z[2]==1)B.scaytDict={label:C.dictionariesTab,group:A,onClick:function(){n='dictionaries';t.openDialog(m);}};B.scaytAbout={label:t.lang.scayt.about,group:A,onClick:function(){n='about';t.openDialog(m);}};t.addMenuItems(B);t.ui.add('Scayt','menubutton',{label:C.title,title:b.opera?C.opera_title:C.title,className:'cke_button_scayt',modes:{wysiwyg:1},onRender:function(){y.on('state',function(){this.setState(y.state);},this);},onMenu:function(){var E=q.isScaytEnabled(t);t.getMenuItem('scaytToggle').label=C[E?'disable':'enable'];var F=q.getUiTabs(t);return{scaytToggle:2,scaytOptions:E&&F[0]?2:0,scaytLangs:E&&F[1]?2:0,scaytDict:E&&F[2]?2:0,scaytAbout:E&&F[3]?2:0};}});if(t.contextMenu&&t.addMenuItems)t.contextMenu.addListener(function(E,F){if(!q.isScaytEnabled(t)||F.getRanges()[0].checkReadOnly())return null;var G=q.getScayt(t),H=G.getScaytNode();if(!H)return null;var I=G.getWord(H);if(!I)return null;var J=G.getLang(),K={},L=window.scayt.getSuggestion(I,J);if(!L||!L.length)return null;for(var M in w){delete t._.menuItems[M];delete t._.commands[M];}for(M in x){delete t._.menuItems[M];delete t._.commands[M];}w={};x={};var N=t.config.scayt_moreSuggestions||'on',O=false,P=t.config.scayt_maxSuggestions;typeof P!='number'&&(P=5);!P&&(P=L.length);var Q=t.config.scayt_contextCommands||'all';Q=Q.split('|');for(var R=0,S=L.length;R<S;R+=1){var T='scayt_suggestion_'+L[R].replace(' ','_'),U=(function(Y,Z){return{exec:function(){G.replace(Y,Z);}};})(H,L[R]);if(R<P){r(t,'button_'+T,L[R],T,U,'scayt_suggest',R+1);K[T]=2;x[T]=2;}else if(N=='on'){r(t,'button_'+T,L[R],T,U,'scayt_moresuggest',R+1);w[T]=2;O=true;}}if(O){t.addMenuItem('scayt_moresuggest',{label:C.moreSuggestions,group:'scayt_moresuggest',order:10,getItems:function(){return w;}});x.scayt_moresuggest=2; +}if(o('all',Q)||o('ignore',Q)){var V={exec:function(){G.ignore(H);}};r(t,'ignore',C.ignore,'scayt_ignore',V,'scayt_control',1);x.scayt_ignore=2;}if(o('all',Q)||o('ignoreall',Q)){var W={exec:function(){G.ignoreAll(H);}};r(t,'ignore_all',C.ignoreAll,'scayt_ignore_all',W,'scayt_control',2);x.scayt_ignore_all=2;}if(o('all',Q)||o('add',Q)){var X={exec:function(){window.scayt.addWordToUserDictionary(H);}};r(t,'add_word',C.addWord,'scayt_add_word',X,'scayt_control',3);x.scayt_add_word=2;}if(G.fireOnContextMenu)G.fireOnContextMenu(t);return x;});var D=function(){t.removeListener('showScaytState',D);if(!b.opera&&!b.air)y.setState(q.isScaytEnabled(t)?1:2);else y.setState(0);};t.on('showScaytState',D);if(b.opera||b.air)t.on('instanceReady',function(){D();});if(t.config.scayt_autoStartup)t.on('instanceReady',function(){q.loadEngine(t);});},afterInit:function(t){var u,v=function(w){if(w.hasAttribute('data-scaytid'))return false;};if(t._.elementsPath&&(u=t._.elementsPath.filters))u.push(v);t.addRemoveFormatFilter&&t.addRemoveFormatFilter(v);}});})();j.add('smiley',{requires:['dialog'],init:function(m){m.config.smiley_path=m.config.smiley_path||this.path+'images/';m.addCommand('smiley',new a.dialogCommand('smiley'));m.ui.addButton('Smiley',{label:m.lang.smiley.toolbar,command:'smiley'});a.dialog.add('smiley',this.path+'dialogs/smiley.js');}});i.smiley_images=['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'];i.smiley_descriptions=['smiley','sad','wink','laugh','frown','cheeky','blush','surprise','indecision','angry','angel','cool','devil','crying','enlightened','no','yes','heart','broken heart','kiss','mail'];(function(){var m='.%2 p,.%2 div,.%2 pre,.%2 address,.%2 blockquote,.%2 h1,.%2 h2,.%2 h3,.%2 h4,.%2 h5,.%2 h6{background-repeat: no-repeat;background-position: top %3;border: 1px dotted gray;padding-top: 8px;padding-%3: 8px;}.%2 p{%1p.png);}.%2 div{%1div.png);}.%2 pre{%1pre.png);}.%2 address{%1address.png);}.%2 blockquote{%1blockquote.png);}.%2 h1{%1h1.png);}.%2 h2{%1h2.png);}.%2 h3{%1h3.png);}.%2 h4{%1h4.png);}.%2 h5{%1h5.png);}.%2 h6{%1h6.png);}',n=/%1/g,o=/%2/g,p=/%3/g,q={readOnly:1,preserveState:true,editorFocus:false,exec:function(r){this.toggleState(); +this.refresh(r);},refresh:function(r){if(r.document){var s=this.state==1?'addClass':'removeClass';r.document.getBody()[s]('cke_show_blocks');}}};j.add('showblocks',{requires:['wysiwygarea'],init:function(r){var s=r.addCommand('showblocks',q);s.canUndo=false;if(r.config.startupOutlineBlocks)s.setState(1);r.addCss(m.replace(n,'background-image: url('+a.getUrl(this.path)+'images/block_').replace(o,'cke_show_blocks ').replace(p,r.lang.dir=='rtl'?'right':'left'));r.ui.addButton('ShowBlocks',{label:r.lang.showBlocks,command:'showblocks'});r.on('mode',function(){if(s.state!=0)s.refresh(r);});r.on('contentDom',function(){if(s.state!=0)s.refresh(r);});}});})();(function(){var m='cke_show_border',n,o=(b.ie6Compat?['.%1 table.%2,','.%1 table.%2 td, .%1 table.%2 th','{','border : #d3d3d3 1px dotted','}']:['.%1 table.%2,','.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,','.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,','.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,','.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th','{','border : #d3d3d3 1px dotted','}']).join('');n=o.replace(/%2/g,m).replace(/%1/g,'cke_show_borders ');var p={preserveState:true,editorFocus:false,readOnly:1,exec:function(q){this.toggleState();this.refresh(q);},refresh:function(q){if(q.document){var r=this.state==1?'addClass':'removeClass';q.document.getBody()[r]('cke_show_borders');}}};j.add('showborders',{requires:['wysiwygarea'],modes:{wysiwyg:1},init:function(q){var r=q.addCommand('showborders',p);r.canUndo=false;if(q.config.startupShowBorders!==false)r.setState(1);q.addCss(n);q.on('mode',function(){if(r.state!=0)r.refresh(q);},null,null,100);q.on('contentDom',function(){if(r.state!=0)r.refresh(q);});q.on('removeFormatCleanup',function(s){var t=s.data;if(q.getCommand('showborders').state==1&&t.is('table')&&(!t.hasAttribute('border')||parseInt(t.getAttribute('border'),10)<=0))t.addClass(m);});},afterInit:function(q){var r=q.dataProcessor,s=r&&r.dataFilter,t=r&&r.htmlFilter;if(s)s.addRules({elements:{table:function(u){var v=u.attributes,w=v['class'],x=parseInt(v.border,10);if(!x||x<=0)v['class']=(w||'')+' '+m;}}});if(t)t.addRules({elements:{table:function(u){var v=u.attributes,w=v['class'];w&&(v['class']=w.replace(m,'').replace(/\s{2}/,' ').replace(/^\s+|\s+$/,''));}}});}});a.on('dialogDefinition',function(q){var r=q.data.name;if(r=='table'||r=='tableProperties'){var s=q.data.definition,t=s.getContents('info'),u=t.get('txtBorder'),v=u.commit;u.commit=e.override(v,function(y){return function(z,A){y.apply(this,arguments); +var B=parseInt(this.getValue(),10);A[!B||B<=0?'addClass':'removeClass'](m);};});var w=s.getContents('advanced'),x=w&&w.get('advCSSClasses');if(x){x.setup=e.override(x.setup,function(y){return function(){y.apply(this,arguments);this.setValue(this.getValue().replace(/cke_show_border/,''));};});x.commit=e.override(x.commit,function(y){return function(z,A){y.apply(this,arguments);if(!parseInt(A.getAttribute('border'),10))A.addClass('cke_show_border');};});}}});})();j.add('sourcearea',{requires:['editingblock'],init:function(m){var n=j.sourcearea,o=a.document.getWindow();m.on('editingBlockReady',function(){var p,q;m.addMode('source',{load:function(r,s){if(c&&b.version<8)r.setStyle('position','relative');m.textarea=p=new h('textarea');p.setAttributes({dir:'ltr',tabIndex:b.webkit?-1:m.tabIndex,role:'textbox','aria-label':m.lang.editorTitle.replace('%1',m.name)});p.addClass('cke_source');p.addClass('cke_enable_context_menu');m.readOnly&&p.setAttribute('readOnly','readonly');var t={width:b.ie7Compat?'99%':'100%',height:'100%',resize:'none',outline:'none','text-align':'left'};if(c){q=function(){p.hide();p.setStyle('height',r.$.clientHeight+'px');p.setStyle('width',r.$.clientWidth+'px');p.show();};m.on('resize',q);o.on('resize',q);setTimeout(q,0);}r.setHtml('');r.append(p);p.setStyles(t);m.fire('ariaWidget',p);p.on('blur',function(){m.focusManager.blur();});p.on('focus',function(){m.focusManager.focus();});m.mayBeDirty=true;this.loadData(s);var u=m.keystrokeHandler;if(u)u.attach(p);setTimeout(function(){m.mode='source';m.fire('mode');},b.gecko||b.webkit?100:0);},loadData:function(r){p.setValue(r);m.fire('dataReady');},getData:function(){return p.getValue();},getSnapshotData:function(){return p.getValue();},unload:function(r){p.clearCustomData();m.textarea=p=null;if(q){m.removeListener('resize',q);o.removeListener('resize',q);}if(c&&b.version<8)r.removeStyle('position');},focus:function(){p.focus();}});});m.on('readOnly',function(){if(m.mode=='source')if(m.readOnly)m.textarea.setAttribute('readOnly','readonly');else m.textarea.removeAttribute('readOnly');});m.addCommand('source',n.commands.source);if(m.ui.addButton)m.ui.addButton('Source',{label:m.lang.source,command:'source'});m.on('mode',function(){m.getCommand('source').setState(m.mode=='source'?1:2);});}});j.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:false,readOnly:1,exec:function(m){if(m.mode=='wysiwyg')m.fire('saveSnapshot');m.getCommand('source').setState(0);m.setMode(m.mode=='source'?'wysiwyg':'source'); +},canUndo:false}}};(function(){j.add('stylescombo',{requires:['richcombo','styles'],init:function(n){var o=n.config,p=n.lang.stylesCombo,q={},r=[],s;function t(u){n.getStylesSet(function(v){if(!r.length){var w,x;for(var y=0,z=v.length;y<z;y++){var A=v[y];x=A.name;w=q[x]=new a.style(A);w._name=x;w._.enterMode=o.enterMode;r.push(w);}r.sort(m);}u&&u();});};n.ui.addRichCombo('Styles',{label:p.label,title:p.panelTitle,className:'cke_styles',panel:{css:n.skin.editor.css.concat(o.contentsCss),multiSelect:true,attributes:{'aria-label':p.panelTitle}},init:function(){s=this;t(function(){var u,v,w,x,y,z;for(y=0,z=r.length;y<z;y++){u=r[y];v=u._name;x=u.type;if(x!=w){s.startGroup(p['panelTitle'+String(x)]);w=x;}s.add(v,u.type==3?v:u.buildPreview(),v);}s.commit();});},onClick:function(u){n.focus();n.fire('saveSnapshot');var v=q[u],w=n.getSelection(),x=new d.elementPath(w.getStartElement());v[v.checkActive(x)?'remove':'apply'](n.document);n.fire('saveSnapshot');},onRender:function(){n.on('selectionChange',function(u){var v=this.getValue(),w=u.data.path,x=w.elements;for(var y=0,z=x.length,A;y<z;y++){A=x[y];for(var B in q){if(q[B].checkElementRemovable(A,true)){if(B!=v)this.setValue(B);return;}}}this.setValue('');},this);},onOpen:function(){var B=this;if(c||b.webkit)n.focus();var u=n.getSelection(),v=u.getSelectedElement(),w=new d.elementPath(v||u.getStartElement()),x=[0,0,0,0];B.showAll();B.unmarkAll();for(var y in q){var z=q[y],A=z.type;if(z.checkActive(w))B.mark(y);else if(A==3&&!z.checkApplicable(w)){B.hideItem(y);x[A]--;}x[A]++;}if(!x[1])B.hideGroup(p['panelTitle'+String(1)]);if(!x[2])B.hideGroup(p['panelTitle'+String(2)]);if(!x[3])B.hideGroup(p['panelTitle'+String(3)]);},reset:function(){if(s){delete s._.panel;delete s._.list;s._.committed=0;s._.items={};s._.state=2;}q={};r=[];t();}});n.on('instanceReady',function(){t();});}});function m(n,o){var p=n.type,q=o.type;return p==q?0:p==3?-1:q==3?1:q==1?1:-1;};})();j.add('table',{init:function(m){var n=j.table,o=m.lang.table;m.addCommand('table',new a.dialogCommand('table'));m.addCommand('tableProperties',new a.dialogCommand('tableProperties'));m.ui.addButton('Table',{label:o.toolbar,command:'table'});a.dialog.add('table',this.path+'dialogs/table.js');a.dialog.add('tableProperties',this.path+'dialogs/table.js');if(m.addMenuItems)m.addMenuItems({table:{label:o.menu,command:'tableProperties',group:'table',order:5},tabledelete:{label:o.deleteTable,command:'tableDelete',group:'table',order:1}});m.on('doubleclick',function(p){var q=p.data.element; +if(q.is('table'))p.data.dialog='tableProperties';});if(m.contextMenu)m.contextMenu.addListener(function(p,q){if(!p||p.isReadOnly())return null;var r=p.hasAscendant('table',1);if(r)return{tabledelete:2,table:2};return null;});}});(function(){var m=/^(?:td|th)$/;function n(G){var H=G.createBookmarks(),I=G.getRanges(),J=[],K={};function L(T){if(J.length>0)return;if(T.type==1&&m.test(T.getName())&&!T.getCustomData('selected_cell')){h.setMarker(K,T,'selected_cell',true);J.push(T);}};for(var M=0;M<I.length;M++){var N=I[M];if(N.collapsed){var O=N.getCommonAncestor(),P=O.getAscendant('td',true)||O.getAscendant('th',true);if(P)J.push(P);}else{var Q=new d.walker(N),R;Q.guard=L;while(R=Q.next()){var S=R.getAscendant('td')||R.getAscendant('th');if(S&&!S.getCustomData('selected_cell')){h.setMarker(K,S,'selected_cell',true);J.push(S);}}}}h.clearAllMarkers(K);G.selectBookmarks(H);return J;};function o(G){var H=0,I=G.length-1,J={},K,L,M;while(K=G[H++])h.setMarker(J,K,'delete_cell',true);H=0;while(K=G[H++]){if((L=K.getPrevious())&&!L.getCustomData('delete_cell')||(L=K.getNext())&&!L.getCustomData('delete_cell')){h.clearAllMarkers(J);return L;}}h.clearAllMarkers(J);M=G[0].getParent();if(M=M.getPrevious())return M.getLast();M=G[I].getParent();if(M=M.getNext())return M.getChild(0);return null;};function p(G,H){var I=n(G),J=I[0],K=J.getAscendant('table'),L=J.getDocument(),M=I[0].getParent(),N=M.$.rowIndex,O=I[I.length-1],P=O.getParent().$.rowIndex+O.$.rowSpan-1,Q=new h(K.$.rows[P]),R=H?N:P,S=H?M:Q,T=e.buildTableMap(K),U=T[R],V=H?T[R-1]:T[R+1],W=T[0].length,X=L.createElement('tr');for(var Y=0;Y<W;Y++){var Z;if(U[Y].rowSpan>1&&V&&U[Y]==V[Y]){Z=U[Y];Z.rowSpan+=1;}else{Z=new h(U[Y]).clone();Z.removeAttribute('rowSpan');!c&&Z.appendBogus();X.append(Z);Z=Z.$;}Y+=Z.colSpan-1;}H?X.insertBefore(S):X.insertAfter(S);};function q(G){if(G instanceof d.selection){var H=n(G),I=H[0],J=I.getAscendant('table'),K=e.buildTableMap(J),L=H[0].getParent(),M=L.$.rowIndex,N=H[H.length-1],O=N.getParent().$.rowIndex+N.$.rowSpan-1,P=[];for(var Q=M;Q<=O;Q++){var R=K[Q],S=new h(J.$.rows[Q]);for(var T=0;T<R.length;T++){var U=new h(R[T]),V=U.getParent().$.rowIndex;if(U.$.rowSpan==1)U.remove();else{U.$.rowSpan-=1;if(V==Q){var W=K[Q+1];W[T-1]?U.insertAfter(new h(W[T-1])):new h(J.$.rows[Q+1]).append(U,1);}}T+=U.$.colSpan-1;}P.push(S);}var X=J.$.rows,Y=new h(X[O+1]||(M>0?X[M-1]:null)||J.$.parentNode);for(Q=P.length;Q>=0;Q--)q(P[Q]);return Y;}else if(G instanceof h){J=G.getAscendant('table');if(J.$.rows.length==1)J.remove(); +else G.remove();}return null;};function r(G,H){var I=G.getParent(),J=I.$.cells,K=0;for(var L=0;L<J.length;L++){var M=J[L];K+=H?1:M.colSpan;if(M==G.$)break;}return K-1;};function s(G,H){var I=H?Infinity:0;for(var J=0;J<G.length;J++){var K=r(G[J],H);if(H?K<I:K>I)I=K;}return I;};function t(G,H){var I=n(G),J=I[0],K=J.getAscendant('table'),L=s(I,1),M=s(I),N=H?L:M,O=e.buildTableMap(K),P=[],Q=[],R=O.length;for(var S=0;S<R;S++){P.push(O[S][N]);var T=H?O[S][N-1]:O[S][N+1];T&&Q.push(T);}for(S=0;S<R;S++){var U;if(P[S].colSpan>1&&Q.length&&Q[S]==P[S]){U=P[S];U.colSpan+=1;}else{U=new h(P[S]).clone();U.removeAttribute('colSpan');!c&&U.appendBogus();U[H?'insertBefore':'insertAfter'].call(U,new h(P[S]));U=U.$;}S+=U.rowSpan-1;}};function u(G){var H=n(G),I=H[0],J=H[H.length-1],K=I.getAscendant('table'),L=e.buildTableMap(K),M,N,O=[];for(var P=0,Q=L.length;P<Q;P++)for(var R=0,S=L[P].length;R<S;R++){if(L[P][R]==I.$)M=R;if(L[P][R]==J.$)N=R;}for(P=M;P<=N;P++)for(R=0;R<L.length;R++){var T=L[R],U=new h(K.$.rows[R]),V=new h(T[P]);if(V.$){if(V.$.colSpan==1)V.remove();else V.$.colSpan-=1;R+=V.$.rowSpan-1;if(!U.$.cells.length)O.push(U);}}var W=K.$.rows[0]&&K.$.rows[0].cells,X=new h(W[M]||(M?W[M-1]:K.$.parentNode));if(O.length==Q)K.remove();return X;};function v(G){var H=[],I=G[0]&&G[0].getAscendant('table'),J,K,L,M;for(J=0,K=G.length;J<K;J++)H.push(G[J].$.cellIndex);H.sort();for(J=1,K=H.length;J<K;J++){if(H[J]-H[J-1]>1){L=H[J-1]+1;break;}}if(!L)L=H[0]>0?H[0]-1:H[H.length-1]+1;var N=I.$.rows;for(J=0,K=N.length;J<K;J++){M=N[J].cells[L];if(M)break;}return M?new h(M):I.getPrevious();};function w(G,H){var I=G.getStartElement(),J=I.getAscendant('td',1)||I.getAscendant('th',1);if(!J)return;var K=J.clone();if(!c)K.appendBogus();if(H)K.insertBefore(J);else K.insertAfter(J);};function x(G){if(G instanceof d.selection){var H=n(G),I=H[0]&&H[0].getAscendant('table'),J=o(H);for(var K=H.length-1;K>=0;K--)x(H[K]);if(J)z(J,true);else if(I)I.remove();}else if(G instanceof h){var L=G.getParent();if(L.getChildCount()==1)L.remove();else G.remove();}};function y(G){var H=G.getBogus();H&&H.remove();G.trim();};function z(G,H){var I=new d.range(G.getDocument());if(!I['moveToElementEdit'+(H?'End':'Start')](G)){I.selectNodeContents(G);I.collapse(H?false:true);}I.select(true);};function A(G,H,I){var J=G[H];if(typeof I=='undefined')return J;for(var K=0;J&&K<J.length;K++){if(I.is&&J[K]==I.$)return K;else if(K==I)return new h(J[K]);}return I.is?-1:null;};function B(G,H,I){var J=[];for(var K=0;K<G.length;K++){var L=G[K]; +if(typeof I=='undefined')J.push(L[H]);else if(I.is&&L[H]==I.$)return K;else if(K==I)return new h(L[H]);}return typeof I=='undefined'?J:I.is?-1:null;};function C(G,H,I){var J=n(G),K;if((H?J.length!=1:J.length<2)||(K=G.getCommonAncestor())&&K.type==1&&K.is('table'))return false;var L,M=J[0],N=M.getAscendant('table'),O=e.buildTableMap(N),P=O.length,Q=O[0].length,R=M.getParent().$.rowIndex,S=A(O,R,M);if(H){var T;try{var U=parseInt(M.getAttribute('rowspan'),10)||1,V=parseInt(M.getAttribute('colspan'),10)||1;T=O[H=='up'?R-U:H=='down'?R+U:R][H=='left'?S-V:H=='right'?S+V:S];}catch(an){return false;}if(!T||M.$==T)return false;J[H=='up'||H=='left'?'unshift':'push'](new h(T));}var W=M.getDocument(),X=R,Y=0,Z=0,aa=!I&&new d.documentFragment(W),ab=0;for(var ac=0;ac<J.length;ac++){L=J[ac];var ad=L.getParent(),ae=L.getFirst(),af=L.$.colSpan,ag=L.$.rowSpan,ah=ad.$.rowIndex,ai=A(O,ah,L);ab+=af*ag;Z=Math.max(Z,ai-S+af);Y=Math.max(Y,ah-R+ag);if(!I){if(y(L),L.getChildren().count()){if(ah!=X&&ae&&!(ae.isBlockBoundary&&ae.isBlockBoundary({br:1}))){var aj=aa.getLast(d.walker.whitespaces(true));if(aj&&!(aj.is&&aj.is('br')))aa.append('br');}L.moveChildren(aa);}ac?L.remove():L.setHtml('');}X=ah;}if(!I){aa.moveChildren(M);if(!c)M.appendBogus();if(Z>=Q)M.removeAttribute('rowSpan');else M.$.rowSpan=Y;if(Y>=P)M.removeAttribute('colSpan');else M.$.colSpan=Z;var ak=new d.nodeList(N.$.rows),al=ak.count();for(ac=al-1;ac>=0;ac--){var am=ak.getItem(ac);if(!am.$.cells.length){am.remove();al++;continue;}}return M;}else return Y*Z==ab;};function D(G,H){var I=n(G);if(I.length>1)return false;else if(H)return true;var J=I[0],K=J.getParent(),L=K.getAscendant('table'),M=e.buildTableMap(L),N=K.$.rowIndex,O=A(M,N,J),P=J.$.rowSpan,Q,R,S,T;if(P>1){R=Math.ceil(P/2);S=Math.floor(P/2);T=N+R;var U=new h(L.$.rows[T]),V=A(M,T),W;Q=J.clone();for(var X=0;X<V.length;X++){W=V[X];if(W.parentNode==U.$&&X>O){Q.insertBefore(new h(W));break;}else W=null;}if(!W)U.append(Q,true);}else{S=R=1;U=K.clone();U.insertAfter(K);U.append(Q=J.clone());var Y=A(M,N);for(var Z=0;Z<Y.length;Z++)Y[Z].rowSpan++;}if(!c)Q.appendBogus();J.$.rowSpan=R;Q.$.rowSpan=S;if(R==1)J.removeAttribute('rowSpan');if(S==1)Q.removeAttribute('rowSpan');return Q;};function E(G,H){var I=n(G);if(I.length>1)return false;else if(H)return true;var J=I[0],K=J.getParent(),L=K.getAscendant('table'),M=e.buildTableMap(L),N=K.$.rowIndex,O=A(M,N,J),P=J.$.colSpan,Q,R,S;if(P>1){R=Math.ceil(P/2);S=Math.floor(P/2);}else{S=R=1;var T=B(M,O);for(var U=0;U<T.length;U++)T[U].colSpan++; +}Q=J.clone();Q.insertAfter(J);if(!c)Q.appendBogus();J.$.colSpan=R;Q.$.colSpan=S;if(R==1)J.removeAttribute('colSpan');if(S==1)Q.removeAttribute('colSpan');return Q;};var F={thead:1,tbody:1,tfoot:1,td:1,tr:1,th:1};j.tabletools={init:function(G){var H=G.lang.table;G.addCommand('cellProperties',new a.dialogCommand('cellProperties'));a.dialog.add('cellProperties',this.path+'dialogs/tableCell.js');G.addCommand('tableDelete',{exec:function(I){var J=I.getSelection(),K=J&&J.getStartElement(),L=K&&K.getAscendant('table',1);if(!L)return;var M=L.getParent();if(M.getChildCount()==1&&!M.is('body','td','th'))L=M;var N=new d.range(I.document);N.moveToPosition(L,3);L.remove();N.select();}});G.addCommand('rowDelete',{exec:function(I){var J=I.getSelection();z(q(J));}});G.addCommand('rowInsertBefore',{exec:function(I){var J=I.getSelection();p(J,true);}});G.addCommand('rowInsertAfter',{exec:function(I){var J=I.getSelection();p(J);}});G.addCommand('columnDelete',{exec:function(I){var J=I.getSelection(),K=u(J);K&&z(K,true);}});G.addCommand('columnInsertBefore',{exec:function(I){var J=I.getSelection();t(J,true);}});G.addCommand('columnInsertAfter',{exec:function(I){var J=I.getSelection();t(J);}});G.addCommand('cellDelete',{exec:function(I){var J=I.getSelection();x(J);}});G.addCommand('cellMerge',{exec:function(I){z(C(I.getSelection()),true);}});G.addCommand('cellMergeRight',{exec:function(I){z(C(I.getSelection(),'right'),true);}});G.addCommand('cellMergeDown',{exec:function(I){z(C(I.getSelection(),'down'),true);}});G.addCommand('cellVerticalSplit',{exec:function(I){z(D(I.getSelection()));}});G.addCommand('cellHorizontalSplit',{exec:function(I){z(E(I.getSelection()));}});G.addCommand('cellInsertBefore',{exec:function(I){var J=I.getSelection();w(J,true);}});G.addCommand('cellInsertAfter',{exec:function(I){var J=I.getSelection();w(J);}});if(G.addMenuItems)G.addMenuItems({tablecell:{label:H.cell.menu,group:'tablecell',order:1,getItems:function(){var I=G.getSelection(),J=n(I);return{tablecell_insertBefore:2,tablecell_insertAfter:2,tablecell_delete:2,tablecell_merge:C(I,null,true)?2:0,tablecell_merge_right:C(I,'right',true)?2:0,tablecell_merge_down:C(I,'down',true)?2:0,tablecell_split_vertical:D(I,true)?2:0,tablecell_split_horizontal:E(I,true)?2:0,tablecell_properties:J.length>0?2:0};}},tablecell_insertBefore:{label:H.cell.insertBefore,group:'tablecell',command:'cellInsertBefore',order:5},tablecell_insertAfter:{label:H.cell.insertAfter,group:'tablecell',command:'cellInsertAfter',order:10},tablecell_delete:{label:H.cell.deleteCell,group:'tablecell',command:'cellDelete',order:15},tablecell_merge:{label:H.cell.merge,group:'tablecell',command:'cellMerge',order:16},tablecell_merge_right:{label:H.cell.mergeRight,group:'tablecell',command:'cellMergeRight',order:17},tablecell_merge_down:{label:H.cell.mergeDown,group:'tablecell',command:'cellMergeDown',order:18},tablecell_split_horizontal:{label:H.cell.splitHorizontal,group:'tablecell',command:'cellHorizontalSplit',order:19},tablecell_split_vertical:{label:H.cell.splitVertical,group:'tablecell',command:'cellVerticalSplit',order:20},tablecell_properties:{label:H.cell.title,group:'tablecellproperties',command:'cellProperties',order:21},tablerow:{label:H.row.menu,group:'tablerow',order:1,getItems:function(){return{tablerow_insertBefore:2,tablerow_insertAfter:2,tablerow_delete:2}; +}},tablerow_insertBefore:{label:H.row.insertBefore,group:'tablerow',command:'rowInsertBefore',order:5},tablerow_insertAfter:{label:H.row.insertAfter,group:'tablerow',command:'rowInsertAfter',order:10},tablerow_delete:{label:H.row.deleteRow,group:'tablerow',command:'rowDelete',order:15},tablecolumn:{label:H.column.menu,group:'tablecolumn',order:1,getItems:function(){return{tablecolumn_insertBefore:2,tablecolumn_insertAfter:2,tablecolumn_delete:2};}},tablecolumn_insertBefore:{label:H.column.insertBefore,group:'tablecolumn',command:'columnInsertBefore',order:5},tablecolumn_insertAfter:{label:H.column.insertAfter,group:'tablecolumn',command:'columnInsertAfter',order:10},tablecolumn_delete:{label:H.column.deleteColumn,group:'tablecolumn',command:'columnDelete',order:15}});if(G.contextMenu)G.contextMenu.addListener(function(I,J){if(!I||I.isReadOnly())return null;while(I){if(I.getName() in F)return{tablecell:2,tablerow:2,tablecolumn:2};I=I.getParent();}return null;});},getSelectedCells:n};j.add('tabletools',j.tabletools);})();e.buildTableMap=function(m){var n=m.$.rows,o=-1,p=[];for(var q=0;q<n.length;q++){o++;!p[o]&&(p[o]=[]);var r=-1;for(var s=0;s<n[q].cells.length;s++){var t=n[q].cells[s];r++;while(p[o][r])r++;var u=isNaN(t.colSpan)?1:t.colSpan,v=isNaN(t.rowSpan)?1:t.rowSpan;for(var w=0;w<v;w++){if(!p[o+w])p[o+w]=[];for(var x=0;x<u;x++)p[o+w][r+x]=n[q].cells[s];}r+=u-1;}}return p;};j.add('specialchar',{availableLangs:{en:1},init:function(m){var n='specialchar',o=this;a.dialog.add(n,this.path+'dialogs/specialchar.js');m.addCommand(n,{exec:function(){var p=m.langCode;p=o.availableLangs[p]?p:'en';a.scriptLoader.load(a.getUrl(o.path+'lang/'+p+'.js'),function(){e.extend(m.lang.specialChar,o.langEntries[p]);m.openDialog(n);});},modes:{wysiwyg:1},canUndo:false});m.ui.addButton('SpecialChar',{label:m.lang.specialChar.toolbar,command:n});}});i.specialChars=['!','"','#','$','%','&',"'",'(',')','*','+','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[',']','^','_','`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','€','‘','’','“','”','–','—','¡','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','®','¯','°','&','²','³','´','µ','¶','·','¸','¹','º','&','¼','½','¾','¿','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ü','ý','þ','ÿ','Œ','œ','Ŵ','Ŷ','ŵ','ŷ','‚','‛','„','…','™','►','•','→','⇒','⇔','♦','≈']; +(function(){var m={editorFocus:false,modes:{wysiwyg:1,source:1}},n={exec:function(q){q.container.focusNext(true,q.tabIndex);}},o={exec:function(q){q.container.focusPrevious(true,q.tabIndex);}};function p(q){return{editorFocus:false,canUndo:false,modes:{wysiwyg:1},exec:function(r){if(r.focusManager.hasFocus){var s=r.getSelection(),t=s.getCommonAncestor(),u;if(u=t.getAscendant('td',true)||t.getAscendant('th',true)){var v=new d.range(r.document),w=e.tryThese(function(){var D=u.getParent(),E=D.$.cells[u.$.cellIndex+(q?-1:1)];E.parentNode.parentNode;return E;},function(){var D=u.getParent(),E=D.getAscendant('table'),F=E.$.rows[D.$.rowIndex+(q?-1:1)];return F.cells[q?F.cells.length-1:0];});if(!(w||q)){var x=u.getAscendant('table').$,y=u.getParent().$.cells,z=new h(x.insertRow(-1),r.document);for(var A=0,B=y.length;A<B;A++){var C=z.append(new h(y[A],r.document).clone(false,false));!c&&C.appendBogus();}v.moveToElementEditStart(z);}else if(w){w=new h(w);v.moveToElementEditStart(w);if(!(v.checkStartOfBlock()&&v.checkEndOfBlock()))v.selectNodeContents(w);}else return true;v.select(true);return true;}}return false;}};};j.add('tab',{requires:['keystrokes'],init:function(q){var r=q.config.enableTabKeyTools!==false,s=q.config.tabSpaces||0,t='';while(s--)t+='\xa0';if(t)q.on('key',function(u){if(u.data.keyCode==9){q.insertHtml(t);u.cancel();}});if(r)q.on('key',function(u){if(u.data.keyCode==9&&q.execCommand('selectNextCell')||u.data.keyCode==2228224+9&&q.execCommand('selectPreviousCell'))u.cancel();});if(b.webkit||b.gecko)q.on('key',function(u){var v=u.data.keyCode;if(v==9&&!t){u.cancel();q.execCommand('blur');}if(v==2228224+9){q.execCommand('blurBack');u.cancel();}});q.addCommand('blur',e.extend(n,m));q.addCommand('blurBack',e.extend(o,m));q.addCommand('selectNextCell',p());q.addCommand('selectPreviousCell',p(true));}});})();h.prototype.focusNext=function(m,n){var w=this;var o=w.$,p=n===undefined?w.getTabIndex():n,q,r,s,t,u,v;if(p<=0){u=w.getNextSourceNode(m,1);while(u){if(u.isVisible()&&u.getTabIndex()===0){s=u;break;}u=u.getNextSourceNode(false,1);}}else{u=w.getDocument().getBody().getFirst();while(u=u.getNextSourceNode(false,1)){if(!q)if(!r&&u.equals(w)){r=true;if(m){if(!(u=u.getNextSourceNode(true,1)))break;q=1;}}else if(r&&!w.contains(u))q=1;if(!u.isVisible()||(v=u.getTabIndex())<0)continue;if(q&&v==p){s=u;break;}if(v>p&&(!s||!t||v<t)){s=u;t=v;}else if(!s&&v===0){s=u;t=v;}}}if(s)s.focus();};h.prototype.focusPrevious=function(m,n){var w=this;var o=w.$,p=n===undefined?w.getTabIndex():n,q,r,s,t=0,u,v=w.getDocument().getBody().getLast(); +while(v=v.getPreviousSourceNode(false,1)){if(!q)if(!r&&v.equals(w)){r=true;if(m){if(!(v=v.getPreviousSourceNode(true,1)))break;q=1;}}else if(r&&!w.contains(v))q=1;if(!v.isVisible()||(u=v.getTabIndex())<0)continue;if(p<=0){if(q&&u===0){s=v;break;}if(u>t){s=v;t=u;}}else{if(q&&u==p){s=v;break;}if(u<p&&(!s||u>t)){s=v;t=u;}}}if(s)s.focus();};(function(){j.add('templates',{requires:['dialog'],init:function(o){a.dialog.add('templates',a.getUrl(this.path+'dialogs/templates.js'));o.addCommand('templates',new a.dialogCommand('templates'));o.ui.addButton('Templates',{label:o.lang.templates.button,command:'templates'});}});var m={},n={};a.addTemplates=function(o,p){m[o]=p;};a.getTemplates=function(o){return m[o];};a.loadTemplates=function(o,p){var q=[];for(var r=0,s=o.length;r<s;r++){if(!n[o[r]]){q.push(o[r]);n[o[r]]=1;}}if(q.length)a.scriptLoader.load(q,p);else setTimeout(p,0);};})();i.templates_files=[a.getUrl('plugins/templates/templates/default.js')];i.templates_replaceContent=true;(function(){var m=function(){this.toolbars=[];this.focusCommandExecuted=false;};m.prototype.focus=function(){for(var o=0,p;p=this.toolbars[o++];)for(var q=0,r;r=p.items[q++];){if(r.focus){r.focus();return;}}};var n={toolbarFocus:{modes:{wysiwyg:1,source:1},readOnly:1,exec:function(o){if(o.toolbox){o.toolbox.focusCommandExecuted=true;if(c||b.air)setTimeout(function(){o.toolbox.focus();},100);else o.toolbox.focus();}}}};j.add('toolbar',{init:function(o){var p,q=function(r,s){var t,u,v=o.lang.dir=='rtl',w=o.config.toolbarGroupCycling;w=w===undefined||w;switch(s){case 9:case 2228224+9:while(!u||!u.items.length){u=s==9?(u?u.next:r.toolbar.next)||o.toolbox.toolbars[0]:(u?u.previous:r.toolbar.previous)||o.toolbox.toolbars[o.toolbox.toolbars.length-1];if(u.items.length){r=u.items[p?u.items.length-1:0];while(r&&!r.focus){r=p?r.previous:r.next;if(!r)u=0;}}}if(r)r.focus();return false;case v?37:39:case 40:t=r;do{t=t.next;if(!t&&w)t=r.toolbar.items[0];}while(t&&!t.focus);if(t)t.focus();else q(r,9);return false;case v?39:37:case 38:t=r;do{t=t.previous;if(!t&&w)t=r.toolbar.items[r.toolbar.items.length-1];}while(t&&!t.focus);if(t)t.focus();else{p=1;q(r,2228224+9);p=0;}return false;case 27:o.focus();return false;case 13:case 32:r.execute();return false;}return true;};o.on('themeSpace',function(r){if(r.data.space==o.config.toolbarLocation){o.toolbox=new m();var s=e.getNextId(),t=['<div class="cke_toolbox" role="group" aria-labelledby="',s,'" onmousedown="return false;"'],u=o.config.toolbarStartupExpanded!==false,v; +t.push(u?'>':' style="display:none">');t.push('<span id="',s,'" class="cke_voice_label">',o.lang.toolbars,'</span>');var w=o.toolbox.toolbars,x=o.config.toolbar instanceof Array?o.config.toolbar:o.config['toolbar_'+o.config.toolbar];for(var y=0;y<x.length;y++){var z,A=0,B,C=x[y],D;if(!C)continue;if(v){t.push('</div>');v=0;}if(C==='/'){t.push('<div class="cke_break"></div>');continue;}D=C.items||C;for(var E=0;E<D.length;E++){var F,G=D[E],H;F=o.ui.create(G);if(F){H=F.canGroup!==false;if(!A){z=e.getNextId();A={id:z,items:[]};B=C.name&&(o.lang.toolbarGroups[C.name]||C.name);t.push('<span id="',z,'" class="cke_toolbar"',B?' aria-labelledby="'+z+'_label"':'',' role="toolbar">');B&&t.push('<span id="',z,'_label" class="cke_voice_label">',B,'</span>');t.push('<span class="cke_toolbar_start"></span>');var I=w.push(A)-1;if(I>0){A.previous=w[I-1];A.previous.next=A;}}if(H){if(!v){t.push('<span class="cke_toolgroup" role="presentation">');v=1;}}else if(v){t.push('</span>');v=0;}var J=F.render(o,t);I=A.items.push(J)-1;if(I>0){J.previous=A.items[I-1];J.previous.next=J;}J.toolbar=A;J.onkey=q;J.onfocus=function(){if(!o.toolbox.focusCommandExecuted)o.focus();};}}if(v){t.push('</span>');v=0;}if(A)t.push('<span class="cke_toolbar_end"></span></span>');}t.push('</div>');if(o.config.toolbarCanCollapse){var K=e.addFunction(function(){o.execCommand('toolbarCollapse');});o.on('destroy',function(){e.removeFunction(K);});var L=e.getNextId();o.addCommand('toolbarCollapse',{readOnly:1,exec:function(M){var N=a.document.getById(L),O=N.getPrevious(),P=M.getThemeSpace('contents'),Q=O.getParent(),R=parseInt(P.$.style.height,10),S=Q.$.offsetHeight,T=!O.isVisible();if(!T){O.hide();N.addClass('cke_toolbox_collapser_min');N.setAttribute('title',M.lang.toolbarExpand);}else{O.show();N.removeClass('cke_toolbox_collapser_min');N.setAttribute('title',M.lang.toolbarCollapse);}N.getFirst().setText(T?'â²':'â');var U=Q.$.offsetHeight-S;P.setStyle('height',R-U+'px');M.fire('resize');},modes:{wysiwyg:1,source:1}});t.push('<a title="'+(u?o.lang.toolbarCollapse:o.lang.toolbarExpand)+'" id="'+L+'" tabIndex="-1" class="cke_toolbox_collapser');if(!u)t.push(' cke_toolbox_collapser_min');t.push('" onclick="CKEDITOR.tools.callFunction('+K+')">','<span>▲</span>','</a>');}r.data.html+=t.join('');}});o.on('destroy',function(){var r,s=0,t,u,v;r=this.toolbox.toolbars;for(;s<r.length;s++){u=r[s].items;for(t=0;t<u.length;t++){v=u[t];if(v.clickFn)e.removeFunction(v.clickFn);if(v.keyDownFn)e.removeFunction(v.keyDownFn); +}}});o.addCommand('toolbarFocus',n.toolbarFocus);o.ui.add('-',a.UI_SEPARATOR,{});o.ui.addHandler(a.UI_SEPARATOR,{create:function(){return{render:function(r,s){s.push('<span class="cke_separator" role="separator"></span>');return{};}};}});}});})();a.UI_SEPARATOR='separator';i.toolbarLocation='top';i.toolbar_Basic=[['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','About']];i.toolbar_Full=[{name:'document',items:['Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates']},{name:'clipboard',items:['Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo']},{name:'editing',items:['Find','Replace','-','SelectAll','-','SpellChecker','Scayt']},{name:'forms',items:['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField']},'/',{name:'basicstyles',items:['Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat']},{name:'paragraph',items:['NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl']},{name:'links',items:['Link','Unlink','Anchor']},{name:'insert',items:['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe']},'/',{name:'styles',items:['Styles','Format','Font','FontSize']},{name:'colors',items:['TextColor','BGColor']},{name:'tools',items:['Maximize','ShowBlocks','-','About']}];i.toolbar='Full';i.toolbarCanCollapse=true;(function(){j.add('undo',{requires:['selection','wysiwygarea'],init:function(s){var t=new o(s),u=s.addCommand('undo',{exec:function(){if(t.undo()){s.selectionChange();this.fire('afterUndo');}},state:0,canUndo:false}),v=s.addCommand('redo',{exec:function(){if(t.redo()){s.selectionChange();this.fire('afterRedo');}},state:0,canUndo:false});t.onChange=function(){u.setState(t.undoable()?2:0);v.setState(t.redoable()?2:0);};function w(x){if(t.enabled&&x.data.command.canUndo!==false)t.save();};s.on('beforeCommandExec',w);s.on('afterCommandExec',w);s.on('saveSnapshot',function(){t.save();});s.on('contentDom',function(){s.document.on('keydown',function(x){if(!x.data.$.ctrlKey&&!x.data.$.metaKey)t.type(x);});});s.on('beforeModeUnload',function(){s.mode=='wysiwyg'&&t.save(true);});s.on('mode',function(){t.enabled=s.readOnly?false:s.mode=='wysiwyg';t.onChange();});s.ui.addButton('Undo',{label:s.lang.undo,command:'undo'});s.ui.addButton('Redo',{label:s.lang.redo,command:'redo'});s.resetUndo=function(){t.reset(); +s.fire('saveSnapshot');};s.on('updateSnapshot',function(){if(t.currentImage&&new m(s).equals(t.currentImage))setTimeout(function(){t.update();},0);});}});j.undo={};var m=j.undo.Image=function(s){this.editor=s;s.fire('beforeUndoImage');var t=s.getSnapshot(),u=t&&s.getSelection();c&&t&&(t=t.replace(/\s+data-cke-expando=".*?"/g,''));this.contents=t;this.bookmarks=u&&u.createBookmarks2(true);s.fire('afterUndoImage');},n=/\b(?:href|src|name)="[^"]*?"/gi;m.prototype={equals:function(s,t){var u=this.contents,v=s.contents;if(c&&(b.ie7Compat||b.ie6Compat)){u=u.replace(n,'');v=v.replace(n,'');}if(u!=v)return false;if(t)return true;var w=this.bookmarks,x=s.bookmarks;if(w||x){if(!w||!x||w.length!=x.length)return false;for(var y=0;y<w.length;y++){var z=w[y],A=x[y];if(z.startOffset!=A.startOffset||z.endOffset!=A.endOffset||!e.arrayCompare(z.start,A.start)||!e.arrayCompare(z.end,A.end))return false;}}return true;}};function o(s){this.editor=s;this.reset();};var p={8:1,46:1},q={16:1,17:1,18:1},r={37:1,38:1,39:1,40:1};o.prototype={type:function(s){var t=s&&s.data.getKey(),u=t in q,v=t in p,w=this.lastKeystroke in p,x=v&&t==this.lastKeystroke,y=t in r,z=this.lastKeystroke in r,A=!v&&!y,B=v&&!x,C=!(u||this.typing)||A&&(w||z);if(C||B){var D=new m(this.editor);e.setTimeout(function(){var F=this;var E=F.editor.getSnapshot();if(c)E=E.replace(/\s+data-cke-expando=".*?"/g,'');if(D.contents!=E){F.typing=true;if(!F.save(false,D,false))F.snapshots.splice(F.index+1,F.snapshots.length-F.index-1);F.hasUndo=true;F.hasRedo=false;F.typesCount=1;F.modifiersCount=1;F.onChange();}},0,this);}this.lastKeystroke=t;if(v){this.typesCount=0;this.modifiersCount++;if(this.modifiersCount>25){this.save(false,null,false);this.modifiersCount=1;}}else if(!y){this.modifiersCount=0;this.typesCount++;if(this.typesCount>25){this.save(false,null,false);this.typesCount=1;}}},reset:function(){var s=this;s.lastKeystroke=0;s.snapshots=[];s.index=-1;s.limit=s.editor.config.undoStackSize||20;s.currentImage=null;s.hasUndo=false;s.hasRedo=false;s.resetType();},resetType:function(){var s=this;s.typing=false;delete s.lastKeystroke;s.typesCount=0;s.modifiersCount=0;},fireChange:function(){var s=this;s.hasUndo=!!s.getNextImage(true);s.hasRedo=!!s.getNextImage(false);s.resetType();s.onChange();},save:function(s,t,u){var w=this;var v=w.snapshots;if(!t)t=new m(w.editor);if(t.contents===false)return false;if(w.currentImage&&t.equals(w.currentImage,s))return false;v.splice(w.index+1,v.length-w.index-1);if(v.length==w.limit)v.shift(); +w.index=v.push(t)-1;w.currentImage=t;if(u!==false)w.fireChange();return true;},restoreImage:function(s){var u=this;u.editor.loadSnapshot(s.contents);if(s.bookmarks)u.editor.getSelection().selectBookmarks(s.bookmarks);else if(c){var t=u.editor.document.getBody().$.createTextRange();t.collapse(true);t.select();}u.index=s.index;u.update();u.fireChange();},getNextImage:function(s){var x=this;var t=x.snapshots,u=x.currentImage,v,w;if(u)if(s)for(w=x.index-1;w>=0;w--){v=t[w];if(!u.equals(v,true)){v.index=w;return v;}}else for(w=x.index+1;w<t.length;w++){v=t[w];if(!u.equals(v,true)){v.index=w;return v;}}return null;},redoable:function(){return this.enabled&&this.hasRedo;},undoable:function(){return this.enabled&&this.hasUndo;},undo:function(){var t=this;if(t.undoable()){t.save(true);var s=t.getNextImage(true);if(s)return t.restoreImage(s),true;}return false;},redo:function(){var t=this;if(t.redoable()){t.save(true);if(t.redoable()){var s=t.getNextImage(false);if(s)return t.restoreImage(s),true;}}return false;},update:function(){var s=this;s.snapshots.splice(s.index,1,s.currentImage=new m(s.editor));}};})();(function(){var m=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,n=d.walker.whitespaces(true);function o(C){return C.isBlockBoundary()&&f.$empty[C.getName()];};function p(C){return function(D){if(this.mode=='wysiwyg'){this.focus();this.fire('saveSnapshot');C.call(this,D.data);e.setTimeout(function(){this.fire('saveSnapshot');},0,this);}};};function q(C){var M=this;if(M.dataProcessor)C=M.dataProcessor.toHtml(C);if(!C)return;var D=M.getSelection(),E=D.getRanges()[0];if(E.checkReadOnly())return;if(b.opera){var F=new d.elementPath(E.startContainer);if(F.block){var G=a.htmlParser.fragment.fromHtml(C,false).children;for(var H=0,I=G.length;H<I;H++){if(G[H]._.isBlockLike){E.splitBlock(M.enterMode==3?'div':'p');E.insertNode(E.document.createText(''));E.select();break;}}}}if(c){var J=D.isLocked;if(J)D.unlock();var K=D.getNative();if(K.type=='Control')K.clear();else if(D.getType()==2){E=D.getRanges()[0];var L=E&&E.endContainer;if(L&&L.type==1&&L.getAttribute('contenteditable')=='false'&&E.checkBoundaryOfElement(L,2)){E.setEndAfter(E.endContainer);E.deleteContents();}}try{K.createRange().pasteHTML(C);}catch(N){}if(J)M.getSelection().lock();}else M.document.$.execCommand('inserthtml',false,C);if(b.webkit){D=M.getSelection();D.scrollIntoView();}};function r(C){var D=this.getSelection(),E=D.getStartElement().hasAscendant('pre',true)?2:this.config.enterMode,F=E==2,G=e.htmlEncode(C.replace(/\r\n|\r/g,'\n')); +G=G.replace(/^[ \t]+|[ \t]+$/g,function(M,N,O){if(M.length==1)return ' ';else if(!N)return e.repeat(' ',M.length-1)+' ';else return ' '+e.repeat(' ',M.length-1);});G=G.replace(/[ \t]{2,}/g,function(M){return e.repeat(' ',M.length-1)+' ';});var H=E==1?'p':'div';if(!F)G=G.replace(/(\n{2})([\s\S]*?)(?:$|\1)/g,function(M,N,O){return '<'+H+'>'+O+'</'+H+'>';});G=G.replace(/\n/g,'<br>');if(!(F||c))G=G.replace(new RegExp('<br>(?=</'+H+'>)'),function(M){return e.repeat(M,2);});if(b.gecko||b.webkit){var I=new d.elementPath(D.getStartElement()),J=[];for(var K=0;K<I.elements.length;K++){var L=I.elements[K].getName();if(L in f.$inline)J.unshift(I.elements[K].getOuterHtml().match(/^<.*?>/));else if(L in f.$block)break;}G=J.join('')+G;}q.call(this,G);};function s(C){var D=this.getSelection(),E=D.getRanges(),F=C.getName(),G=f.$block[F],H=D.isLocked;if(H)D.unlock();var I,J,K,L;for(var M=E.length-1;M>=0;M--){I=E[M];if(!I.checkReadOnly()){I.deleteContents(1);J=!M&&C||C.clone(1);var N,O;if(G)while((N=I.getCommonAncestor(0,1))&&(O=f[N.getName()])&&!(O&&O[F])){if(N.getName() in f.span)I.splitElement(N);else if(I.checkStartOfBlock()&&I.checkEndOfBlock()){I.setStartBefore(N);I.collapse(true);N.remove();}else I.splitBlock();}I.insertNode(J);if(!K)K=J;}}if(K){I.moveToPosition(K,4);if(G){var P=K.getNext(n),Q=P&&P.type==1&&P.getName();if(Q&&f.$block[Q]&&f[Q]['#'])I.moveToElementEditStart(P);}}D.selectRanges([I]);if(H)this.getSelection().lock();};function t(C){if(!C.checkDirty())setTimeout(function(){C.resetDirty();},0);};var u=d.walker.whitespaces(true),v=d.walker.bookmark(false,true);function w(C){return u(C)&&v(C);};function x(C){return C.type==3&&e.trim(C.getText()).match(/^(?: |\xa0)$/);};function y(C){if(C.isLocked){C.unlock();setTimeout(function(){C.lock();},0);}};function z(C){return C.getOuterHtml().match(m);};u=d.walker.whitespaces(true);function A(C){var D=C.window,E=C.document,F=C.document.getBody(),G=F.getFirst(),H=F.getChildren().count();if(!H||H==1&&G.type==1&&G.hasAttribute('_moz_editor_bogus_node')){t(C);var I=C.element.getDocument(),J=I.getDocumentElement(),K=J.$.scrollTop,L=J.$.scrollLeft,M=E.$.createEvent('KeyEvents');M.initKeyEvent('keypress',true,true,D.$,false,false,false,false,0,32);E.$.dispatchEvent(M);if(K!=J.$.scrollTop||L!=J.$.scrollLeft)I.getWindow().$.scrollTo(L,K);H&&F.getFirst().remove();E.getBody().appendBogus();var N=new d.range(E);N.setStartAt(F,1);N.select();}};function B(C){var D=C.editor,E=C.data.path,F=E.blockLimit,G=C.data.selection,H=G.getRanges()[0],I=D.document.getBody(),J=D.config.enterMode; +if(b.gecko){A(D);var K=E.block||E.blockLimit,L=K&&K.getLast(w);if(K&&K.isBlockBoundary()&&!(L&&L.type==1&&L.isBlockBoundary())&&!K.is('pre')&&!K.getBogus()){D.fire('updateSnapshot');t(D);K.appendBogus();}}if(D.config.autoParagraph!==false&&J!=2&&H.collapsed&&F.getName()=='body'&&!E.block){D.fire('updateSnapshot');t(D);c&&y(G);var M=H.fixBlock(true,D.config.enterMode==3?'div':'p');if(c){var N=M.getFirst(w);N&&x(N)&&N.remove();}if(z(M)){var O=M.getNext(u);if(O&&O.type==1&&!o(O)){H.moveToElementEditStart(O);M.remove();}else{O=M.getPrevious(u);if(O&&O.type==1&&!o(O)){H.moveToElementEditEnd(O);M.remove();}}}H.select();C.cancel();}var P=new d.range(D.document);P.moveToElementEditEnd(D.document.getBody());var Q=new d.elementPath(P.startContainer);if(!Q.blockLimit.is('body')){D.fire('updateSnapshot');t(D);c&&y(G);var R;if(J!=2)R=I.append(D.document.createElement(J==1?'p':'div'));else R=I;if(!c)R.appendBogus();}};j.add('wysiwygarea',{requires:['editingblock'],init:function(C){var D=C.config.enterMode!=2&&C.config.autoParagraph!==false?C.config.enterMode==3?'div':'p':false,E=C.lang.editorTitle.replace('%1',C.name),F;C.on('editingBlockReady',function(){var L,M,N,O,P,Q,R=b.isCustomDomain(),S=function(V){if(M)M.remove();var W='document.open();'+(R?'document.domain="'+document.domain+'";':'')+'document.close();';W=b.air?'javascript:void(0)':c?'javascript:void(function(){'+encodeURIComponent(W)+'}())':'';M=h.createFromHtml('<iframe style="width:100%;height:100%" frameBorder="0" title="'+E+'"'+' src="'+W+'"'+' tabIndex="'+(b.webkit?-1:C.tabIndex)+'"'+' allowTransparency="true"'+'></iframe>');if(document.location.protocol=='chrome:')a.event.useCapture=true;M.on('load',function(X){P=1;X.removeListener();var Y=M.getFrameDocument();Y.write(V);b.air&&U(Y.getWindow().$);});if(document.location.protocol=='chrome:')a.event.useCapture=false;L.append(M);};F=e.addFunction(U);var T='<script id="cke_actscrpt" type="text/javascript" data-cke-temp="1">'+(R?'document.domain="'+document.domain+'";':'')+'window.parent.CKEDITOR.tools.callFunction( '+F+', window );'+'</script>';function U(V){if(!P)return;P=0;C.fire('ariaWidget',M);var W=V.document,X=W.body,Y=W.getElementById('cke_actscrpt');Y&&Y.parentNode.removeChild(Y);X.spellcheck=!C.config.disableNativeSpellChecker;var Z=!C.readOnly;if(c){X.hideFocus=true;X.disabled=true;X.contentEditable=Z;X.removeAttribute('disabled');}else setTimeout(function(){if(b.gecko&&b.version>=10900||b.opera)W.$.body.contentEditable=Z;else if(b.webkit)W.$.body.parentNode.contentEditable=Z; +else W.$.designMode=Z?'off':'on';},0);Z&&b.gecko&&e.setTimeout(A,0,null,C);V=C.window=new d.window(V);W=C.document=new g(W);Z&&W.on('dblclick',function(af){var ag=af.data.getTarget(),ah={element:ag,dialog:''};C.fire('doubleclick',ah);ah.dialog&&C.openDialog(ah.dialog);});c&&W.on('click',function(af){var ag=af.data.getTarget();if(ag.is('input')){var ah=ag.getAttribute('type');if(ah=='submit'||ah=='reset')af.data.preventDefault();}});if(!(c||b.opera))W.on('mousedown',function(af){var ag=af.data.getTarget();if(ag.is('img','hr','input','textarea','select'))C.getSelection().selectElement(ag);});if(b.gecko)W.on('mouseup',function(af){if(af.data.$.button==2){var ag=af.data.getTarget();if(!ag.getOuterHtml().replace(m,'')){var ah=new d.range(W);ah.moveToElementEditStart(ag);ah.select(true);}}});W.on('click',function(af){af=af.data;if(af.getTarget().is('a')&&af.$.button!=2)af.preventDefault();});if(b.webkit){W.on('mousedown',function(){ac=1;});W.on('click',function(af){if(af.data.getTarget().is('input','select'))af.data.preventDefault();});W.on('mouseup',function(af){if(af.data.getTarget().is('input','textarea'))af.data.preventDefault();});}if(Z&&c&&W.$.compatMode=='CSS1Compat'||b.gecko||b.opera){var aa=W.getDocumentElement();aa.on('mousedown',function(af){if(af.data.getTarget().equals(aa)){if(b.gecko&&b.version>=10900)J();K.focus();}});}var ab=c?M:V;ab.on('blur',function(){C.focusManager.blur();});var ac;ab.on('focus',function(){var af=C.document;if(Z&&b.gecko&&b.version>=10900)J();else if(b.opera)af.getBody().focus();else if(b.webkit)if(!ac){C.document.getDocumentElement().focus();ac=1;}C.focusManager.focus();});var ad=C.keystrokeHandler;ad.blockedKeystrokes[8]=!Z;ad.attach(W);if(c){W.getDocumentElement().addClass(W.$.compatMode);Z&&W.on('keydown',function(af){var ag=af.data.getKeystroke();if(ag in {8:1,46:1}){var ah=C.getSelection(),ai=ah.getSelectedElement();if(ai){C.fire('saveSnapshot');var aj=ah.getRanges()[0].createBookmark();ai.remove();ah.selectBookmarks([aj]);C.fire('saveSnapshot');af.data.preventDefault();}}});if(W.$.compatMode=='CSS1Compat'){var ae={33:1,34:1};W.on('keydown',function(af){if(af.data.getKeystroke() in ae)setTimeout(function(){C.getSelection().scrollIntoView();},0);});}C.config.enterMode!=1&&W.on('selectionchange',function(){var af=W.getBody(),ag=C.getSelection().getRanges()[0];if(af.getHtml().match(/^<p> <\/p>$/i)&&ag.startContainer.equals(af))setTimeout(function(){ag=C.getSelection().getRanges()[0];if(!ag.startContainer.equals('body')){af.getFirst().remove(1); +ag.moveToElementEditEnd(af);ag.select(1);}},0);});}if(C.contextMenu)C.contextMenu.addTarget(W,C.config.browserContextMenuOnCtrl!==false);setTimeout(function(){C.fire('contentDom');if(Q){C.mode='wysiwyg';C.fire('mode');Q=false;}N=false;if(O){C.focus();O=false;}setTimeout(function(){C.fire('dataReady');},0);try{C.document.$.execCommand('enableInlineTableEditing',false,!C.config.disableNativeTableHandles);}catch(af){}if(C.config.disableObjectResizing)try{C.document.$.execCommand('enableObjectResizing',false,false);}catch(ag){C.document.getBody().on(c?'resizestart':'resize',function(ah){ah.data.preventDefault();});}if(c)setTimeout(function(){if(C.document){var ah=C.document.$.body;ah.runtimeStyle.marginBottom='0px';ah.runtimeStyle.marginBottom='';}},1000);},0);};C.addMode('wysiwyg',{load:function(V,W,X){L=V;if(c&&b.quirks)V.setStyle('position','relative');C.mayBeDirty=true;Q=true;if(X)this.loadSnapshotData(W);else this.loadData(W);},loadData:function(V){N=true;C._.dataStore={id:1};var W=C.config,X=W.fullPage,Y=W.docType,Z='<style type="text/css" data-cke-temp="1">'+C._.styles.join('\n')+'</style>';!X&&(Z=e.buildStyleHtml(C.config.contentsCss)+Z);var aa=W.baseHref?'<base href="'+W.baseHref+'" data-cke-temp="1" />':'';if(X)V=V.replace(/<!DOCTYPE[^>]*>/i,function(ab){C.docType=Y=ab;return '';}).replace(/<\?xml\s[^\?]*\?>/i,function(ab){C.xmlDeclaration=ab;return '';});if(C.dataProcessor)V=C.dataProcessor.toHtml(V,D);if(X){if(!/<body[\s|>]/.test(V))V='<body>'+V;if(!/<html[\s|>]/.test(V))V='<html>'+V+'</html>';if(!/<head[\s|>]/.test(V))V=V.replace(/<html[^>]*>/,'$&<head><title></title></head>');else if(!/<title[\s|>]/.test(V))V=V.replace(/<head[^>]*>/,'$&<title></title>');aa&&(V=V.replace(/<head>/,'$&'+aa));V=V.replace(/<\/head\s*>/,Z+'$&');V=Y+V;}else V=W.docType+'<html dir="'+W.contentsLangDirection+'"'+' lang="'+(W.contentsLanguage||C.langCode)+'">'+'<head>'+'<title>'+E+'</title>'+aa+Z+'</head>'+'<body'+(W.bodyId?' id="'+W.bodyId+'"':'')+(W.bodyClass?' class="'+W.bodyClass+'"':'')+'>'+V+'</html>';if(b.gecko)V=V.replace(/<br \/>(?=\s*<\/(:?html|body)>)/,'$&<br type="_moz" />');V+=T;this.onDispose();S(V);},getData:function(){var V=C.config,W=V.fullPage,X=W&&C.docType,Y=W&&C.xmlDeclaration,Z=M.getFrameDocument(),aa=W?Z.getDocumentElement().getOuterHtml():Z.getBody().getHtml();if(b.gecko)aa=aa.replace(/<br>(?=\s*(:?$|<\/body>))/,'');if(C.dataProcessor)aa=C.dataProcessor.toDataFormat(aa,D);if(V.ignoreEmptyParagraph)aa=aa.replace(m,function(ab,ac){return ac;});if(Y)aa=Y+'\n'+aa; +if(X)aa=X+'\n'+aa;return aa;},getSnapshotData:function(){return M.getFrameDocument().getBody().getHtml();},loadSnapshotData:function(V){M.getFrameDocument().getBody().setHtml(V);},onDispose:function(){if(!C.document)return;C.document.getDocumentElement().clearCustomData();C.document.getBody().clearCustomData();C.window.clearCustomData();C.document.clearCustomData();M.clearCustomData();M.remove();},unload:function(V){this.onDispose();C.window=C.document=M=L=O=null;C.fire('contentDomUnload');},focus:function(){var V=C.window;if(N)O=true;else if(b.opera&&C.document){var W=C.window.$.frameElement;W.blur(),W.focus();C.document.getBody().focus();C.selectionChange();}else if(!b.opera&&V){b.air?setTimeout(function(){V.focus();},0):V.focus();C.selectionChange();}}});C.on('insertHtml',p(q),null,null,20);C.on('insertElement',p(s),null,null,20);C.on('insertText',p(r),null,null,20);C.on('selectionChange',B,null,null,1);});var G;C.on('contentDom',function(){var L=C.document.getElementsByTag('title').getItem(0);L.data('cke-title',C.document.$.title);C.document.$.title=E;});C.on('readOnly',function(){if(C.mode=='wysiwyg'){var L=C.getMode();L.loadData(L.getData());}});if(a.document.$.documentMode>=8){C.addCss('html.CSS1Compat [contenteditable=false]{ min-height:0 !important;}');var H=[];for(var I in f.$removeEmpty)H.push('html.CSS1Compat '+I+'[contenteditable=false]');C.addCss(H.join(',')+'{ display:inline-block;}');}else if(b.gecko){C.addCss('html { height: 100% !important; }');C.addCss('img:-moz-broken { -moz-force-broken-image-icon : 1;\twidth : 24px; height : 24px; }');}C.addCss('html {\t_overflow-y: scroll; cursor: text;\t*cursor:auto;}');C.addCss('img, input, textarea { cursor: default;}');function J(L){if(C.readOnly)return;e.tryThese(function(){C.document.$.designMode='on';setTimeout(function(){C.document.$.designMode='off';if(a.currentInstance==C)C.document.getBody().focus();},50);},function(){C.document.$.designMode='off';var M=C.document.getBody();M.setAttribute('contentEditable',false);M.setAttribute('contentEditable',true);!L&&J(1);});};if(b.gecko||c||b.opera){var K;C.on('uiReady',function(){K=C.container.append(h.createFromHtml('<span tabindex="-1" style="position:absolute;" role="presentation"></span>'));K.on('focus',function(){C.focus();});C.focusGrabber=K;});C.on('destroy',function(){e.removeFunction(F);K.clearCustomData();delete C.focusGrabber;});}C.on('insertElement',function(L){var M=L.data;if(M.type==1&&(M.is('input')||M.is('textarea'))){if(!M.isReadOnly())M.data('cke-editable',M.hasAttribute('contenteditable')?'true':'1'); +M.setAttribute('contentEditable',false);}});}});if(b.gecko)(function(){var C=document.body;if(!C)window.addEventListener('load',arguments.callee,false);else{var D=C.getAttribute('onpageshow');C.setAttribute('onpageshow',(D?D+';':'')+'event.persisted && (function(){'+'var allInstances = CKEDITOR.instances, editor, doc;'+'for ( var i in allInstances )'+'{'+'\teditor = allInstances[ i ];'+'\tdoc = editor.document;'+'\tif ( doc )'+'\t{'+'\t\tdoc.$.designMode = "off";'+'\t\tdoc.$.designMode = "on";'+'\t}'+'}'+'})();');}})();})();i.disableObjectResizing=false;i.disableNativeTableHandles=true;i.disableNativeSpellChecker=true;i.ignoreEmptyParagraph=true;j.add('wsc',{requires:['dialog'],init:function(m){var n='checkspell',o=m.addCommand(n,new a.dialogCommand(n));o.modes={wysiwyg:!b.opera&&!b.air&&document.domain==window.location.hostname};m.ui.addButton('SpellChecker',{label:m.lang.spellCheck.toolbar,command:n});a.dialog.add(n,this.path+'dialogs/wsc.js');}});i.wsc_customerId=i.wsc_customerId||'1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk';i.wsc_customLoaderScript=i.wsc_customLoaderScript||null;a.DIALOG_RESIZE_NONE=0;a.DIALOG_RESIZE_WIDTH=1;a.DIALOG_RESIZE_HEIGHT=2;a.DIALOG_RESIZE_BOTH=3;(function(){var m=e.cssLength;function n(S){return!!this._.tabs[S][0].$.offsetHeight;};function o(){var W=this;var S=W._.currentTabId,T=W._.tabIdList.length,U=e.indexOf(W._.tabIdList,S)+T;for(var V=U-1;V>U-T;V--){if(n.call(W,W._.tabIdList[V%T]))return W._.tabIdList[V%T];}return null;};function p(){var W=this;var S=W._.currentTabId,T=W._.tabIdList.length,U=e.indexOf(W._.tabIdList,S);for(var V=U+1;V<U+T;V++){if(n.call(W,W._.tabIdList[V%T]))return W._.tabIdList[V%T];}return null;};function q(S,T){var U=S.$.getElementsByTagName('input');for(var V=0,W=U.length;V<W;V++){var X=new h(U[V]);if(X.getAttribute('type').toLowerCase()=='text')if(T){X.setAttribute('value',X.getCustomData('fake_value')||'');X.removeCustomData('fake_value');}else{X.setCustomData('fake_value',X.getAttribute('value'));X.setAttribute('value','');}}};function r(S,T){var V=this;var U=V.getInputElement();if(U)S?U.removeAttribute('aria-invalid'):U.setAttribute('aria-invalid',true);if(!S)if(V.select)V.select();else V.focus();T&&alert(T);V.fire('validated',{valid:S,msg:T});};function s(){var S=this.getInputElement();S&&S.removeAttribute('aria-invalid');};a.dialog=function(S,T){var U=a.dialog._.dialogDefinitions[T],V=e.clone(u),W=S.config.dialog_buttonsOrder||'OS',X=S.lang.dir;if(W=='OS'&&b.mac||W=='rtl'&&X=='ltr'||W=='ltr'&&X=='rtl')V.buttons.reverse(); +U=e.extend(U(S),V);U=e.clone(U);U=new y(this,U);var Y=a.document,Z=S.theme.buildDialog(S);this._={editor:S,element:Z.element,name:T,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:false,focusList:[],currentFocusIndex:0,hasFocus:false};this.parts=Z.parts;e.setTimeout(function(){S.fire('ariaWidget',this.parts.contents);},0,this);var aa={position:b.ie6Compat?'absolute':'fixed',top:0,visibility:'hidden'};aa[X=='rtl'?'right':'left']=0;this.parts.dialog.setStyles(aa);a.event.call(this);this.definition=U=a.fire('dialogDefinition',{name:T,definition:U},S).definition;var ab={};if(!('removeDialogTabs' in S._)&&S.config.removeDialogTabs){var ac=S.config.removeDialogTabs.split(';');for(i=0;i<ac.length;i++){var ad=ac[i].split(':');if(ad.length==2){var ae=ad[0];if(!ab[ae])ab[ae]=[];ab[ae].push(ad[1]);}}S._.removeDialogTabs=ab;}if(S._.removeDialogTabs&&(ab=S._.removeDialogTabs[T]))for(i=0;i<ab.length;i++)U.removeContents(ab[i]);if(U.onLoad)this.on('load',U.onLoad);if(U.onShow)this.on('show',U.onShow);if(U.onHide)this.on('hide',U.onHide);if(U.onOk)this.on('ok',function(ar){S.fire('saveSnapshot');setTimeout(function(){S.fire('saveSnapshot');},0);if(U.onOk.call(this,ar)===false)ar.data.hide=false;});if(U.onCancel)this.on('cancel',function(ar){if(U.onCancel.call(this,ar)===false)ar.data.hide=false;});var af=this,ag=function(ar){var as=af._.contents,at=false;for(var au in as)for(var av in as[au]){at=ar.call(this,as[au][av]);if(at)return;}};this.on('ok',function(ar){ag(function(as){if(as.validate){var at=as.validate(this),au=typeof at=='string'||at===false;if(au){ar.data.hide=false;ar.stop();}r.call(as,!au,typeof at=='string'?at:undefined);return au;}});},this,null,0);this.on('cancel',function(ar){ag(function(as){if(as.isChanged()){if(!confirm(S.lang.common.confirmCancel))ar.data.hide=false;return true;}});},this,null,0);this.parts.close.on('click',function(ar){if(this.fire('cancel',{hide:true}).hide!==false)this.hide();ar.data.preventDefault();},this);function ah(){var ar=af._.focusList;ar.sort(function(au,av){if(au.tabIndex!=av.tabIndex)return av.tabIndex-au.tabIndex;else return au.focusIndex-av.focusIndex;});var as=ar.length;for(var at=0;at<as;at++)ar[at].focusIndex=at;};function ai(ar){var as=af._.focusList,at=ar?1:-1;if(as.length<1)return;var au=af._.currentFocusIndex;try{as[au].getInputElement().$.blur();}catch(ax){}var av=(au+at+as.length)%as.length,aw=av; +while(!as[aw].isFocusable()){aw=(aw+at+as.length)%as.length;if(aw==av)break;}as[aw].focus();if(as[aw].type=='text')as[aw].select();};this.changeFocus=ai;var aj;function ak(ar){var aw=this;if(af!=a.dialog._.currentTop)return;var as=ar.data.getKeystroke(),at=S.lang.dir=='rtl';aj=0;if(as==9||as==2228224+9){var au=as==2228224+9;if(af._.tabBarMode){var av=au?o.call(af):p.call(af);af.selectPage(av);af._.tabs[av][0].focus();}else ai(!au);aj=1;}else if(as==4456448+121&&!af._.tabBarMode&&af.getPageCount()>1){af._.tabBarMode=true;af._.tabs[af._.currentTabId][0].focus();aj=1;}else if((as==37||as==39)&&af._.tabBarMode){av=as==(at?39:37)?o.call(af):p.call(af);af.selectPage(av);af._.tabs[av][0].focus();aj=1;}else if((as==13||as==32)&&af._.tabBarMode){aw.selectPage(aw._.currentTabId);aw._.tabBarMode=false;aw._.currentFocusIndex=-1;ai(true);aj=1;}if(aj){ar.stop();ar.data.preventDefault();}};function al(ar){aj&&ar.data.preventDefault();};var am=this._.element;this.on('show',function(){am.on('keydown',ak,this,null,0);if(b.opera||b.gecko&&b.mac)am.on('keypress',al,this);});this.on('hide',function(){am.removeListener('keydown',ak);if(b.opera||b.gecko&&b.mac)am.removeListener('keypress',al);ag(function(ar){s.apply(ar);});});this.on('iframeAdded',function(ar){var as=new g(ar.data.iframe.$.contentWindow.document);as.on('keydown',ak,this,null,0);});this.on('show',function(){var av=this;ah();if(S.config.dialog_startupFocusTab&&af._.pageCount>1){af._.tabBarMode=true;af._.tabs[af._.currentTabId][0].focus();}else if(!av._.hasFocus){av._.currentFocusIndex=-1;if(U.onFocus){var ar=U.onFocus.call(av);ar&&ar.focus();}else ai(true);if(av._.editor.mode=='wysiwyg'&&c){var as=S.document.$.selection,at=as.createRange();if(at)if(at.parentElement&&at.parentElement().ownerDocument==S.document.$||at.item&&at.item(0).ownerDocument==S.document.$){var au=document.body.createTextRange();au.moveToElementText(av.getElement().getFirst().$);au.collapse(true);au.select();}}}},this,null,4294967295);if(b.ie6Compat)this.on('load',function(ar){var as=this.getElement(),at=as.getFirst();at.remove();at.appendTo(as);},this);A(this);B(this);new d.text(U.title,a.document).appendTo(this.parts.title);for(var an=0;an<U.contents.length;an++){var ao=U.contents[an];ao&&this.addPage(ao);}this.parts.tabs.on('click',function(ar){var au=this;var as=ar.data.getTarget();if(as.hasClass('cke_dialog_tab')){var at=as.$.id;au.selectPage(at.substring(4,at.lastIndexOf('_')));if(au._.tabBarMode){au._.tabBarMode=false;au._.currentFocusIndex=-1; +ai(true);}ar.data.preventDefault();}},this);var ap=[],aq=a.dialog._.uiElementBuilders.hbox.build(this,{type:'hbox',className:'cke_dialog_footer_buttons',widths:[],children:U.buttons},ap).getChild();this.parts.footer.setHtml(ap.join(''));for(an=0;an<aq.length;an++)this._.buttons[aq[an].id]=aq[an];};function t(S,T,U){this.element=T;this.focusIndex=U;this.tabIndex=0;this.isFocusable=function(){return!T.getAttribute('disabled')&&T.isVisible();};this.focus=function(){S._.currentFocusIndex=this.focusIndex;this.element.focus();};T.on('keydown',function(V){if(V.data.getKeystroke() in {32:1,13:1})this.fire('click');});T.on('focus',function(){this.fire('mouseover');});T.on('blur',function(){this.fire('mouseout');});};a.dialog.prototype={destroy:function(){this.hide();this._.element.remove();},resize:(function(){return function(S,T){var U=this;if(U._.contentSize&&U._.contentSize.width==S&&U._.contentSize.height==T)return;a.dialog.fire('resize',{dialog:U,skin:U._.editor.skinName,width:S,height:T},U._.editor);U.fire('resize',{skin:U._.editor.skinName,width:S,height:T},U._.editor);if(U._.editor.lang.dir=='rtl'&&U._.position)U._.position.x=a.document.getWindow().getViewPaneSize().width-U._.contentSize.width-parseInt(U._.element.getFirst().getStyle('right'),10);U._.contentSize={width:S,height:T};};})(),getSize:function(){var S=this._.element.getFirst();return{width:S.$.offsetWidth||0,height:S.$.offsetHeight||0};},move:(function(){var S;return function(T,U,V){var ac=this;var W=ac._.element.getFirst(),X=ac._.editor.lang.dir=='rtl';if(S===undefined)S=W.getComputedStyle('position')=='fixed';if(S&&ac._.position&&ac._.position.x==T&&ac._.position.y==U)return;ac._.position={x:T,y:U};if(!S){var Y=a.document.getWindow().getScrollPosition();T+=Y.x;U+=Y.y;}if(X){var Z=ac.getSize(),aa=a.document.getWindow().getViewPaneSize();T=aa.width-Z.width-T;}var ab={top:(U>0?U:0)+'px'};ab[X?'right':'left']=(T>0?T:0)+'px';W.setStyles(ab);V&&(ac._.moved=1);};})(),getPosition:function(){return e.extend({},this._.position);},show:function(){var S=this._.element,T=this.definition;if(!(S.getParent()&&S.getParent().equals(a.document.getBody())))S.appendTo(a.document.getBody());else S.setStyle('display','block');if(b.gecko&&b.version<10900){var U=this.parts.dialog;U.setStyle('position','absolute');setTimeout(function(){U.setStyle('position','fixed');},0);}this.resize(this._.contentSize&&this._.contentSize.width||T.width||T.minWidth,this._.contentSize&&this._.contentSize.height||T.height||T.minHeight);this.reset(); +this.selectPage(this.definition.contents[0].id);if(a.dialog._.currentZIndex===null)a.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex;this._.element.getFirst().setStyle('z-index',a.dialog._.currentZIndex+=10);if(a.dialog._.currentTop===null){a.dialog._.currentTop=this;this._.parentDialog=null;G(this._.editor);S.on('keydown',K);S.on(b.opera?'keypress':'keyup',L);for(var V in {keyup:1,keydown:1,keypress:1})S.on(V,R);}else{this._.parentDialog=a.dialog._.currentTop;var W=this._.parentDialog.getElement().getFirst();W.$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2);a.dialog._.currentTop=this;}M(this,this,'\x1b',null,function(){this.getButton('cancel')&&this.getButton('cancel').click();});this._.hasFocus=false;e.setTimeout(function(){this.layout();this.parts.dialog.setStyle('visibility','');this.fireOnce('load',{});k.fire('ready',this);this.fire('show',{});this._.editor.fire('dialogShow',this);this.foreach(function(X){X.setInitValue&&X.setInitValue();});},100,this);},layout:function(){var U=this;var S=a.document.getWindow().getViewPaneSize(),T=U.getSize();U.move(U._.moved?U._.position.x:(S.width-T.width)/2,U._.moved?U._.position.y:(S.height-T.height)/2);},foreach:function(S){var V=this;for(var T in V._.contents)for(var U in V._.contents[T])S.call(V,V._.contents[T][U]);return V;},reset:(function(){var S=function(T){if(T.reset)T.reset(1);};return function(){this.foreach(S);return this;};})(),setupContent:function(){var S=arguments;this.foreach(function(T){if(T.setup)T.setup.apply(T,S);});},commitContent:function(){var S=arguments;this.foreach(function(T){if(c&&this._.currentFocusIndex==T.focusIndex)T.getInputElement().$.blur();if(T.commit)T.commit.apply(T,S);});},hide:function(){if(!this.parts.dialog.isVisible())return;this.fire('hide',{});this._.editor.fire('dialogHide',this);var S=this._.element;S.setStyle('display','none');this.parts.dialog.setStyle('visibility','hidden');N(this);while(a.dialog._.currentTop!=this)a.dialog._.currentTop.hide();if(!this._.parentDialog)H();else{var T=this._.parentDialog.getElement().getFirst();T.setStyle('z-index',parseInt(T.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2));}a.dialog._.currentTop=this._.parentDialog;if(!this._.parentDialog){a.dialog._.currentZIndex=null;S.removeListener('keydown',K);S.removeListener(b.opera?'keypress':'keyup',L);for(var U in {keyup:1,keydown:1,keypress:1})S.removeListener(U,R);var V=this._.editor;V.focus();if(V.mode=='wysiwyg'&&c){var W=V.getSelection(); +W&&W.unlock(true);}}else a.dialog._.currentZIndex-=10;delete this._.parentDialog;this.foreach(function(X){X.resetInitValue&&X.resetInitValue();});},addPage:function(S){var ae=this;var T=[],U=S.label?' title="'+e.htmlEncode(S.label)+'"':'',V=S.elements,W=a.dialog._.uiElementBuilders.vbox.build(ae,{type:'vbox',className:'cke_dialog_page_contents',children:S.elements,expand:!!S.expand,padding:S.padding,style:S.style||'width: 100%;height:100%'},T),X=h.createFromHtml(T.join(''));X.setAttribute('role','tabpanel');var Y=b,Z='cke_'+S.id+'_'+e.getNextNumber(),aa=h.createFromHtml(['<a class="cke_dialog_tab"',ae._.pageCount>0?' cke_last':'cke_first',U,!!S.hidden?' style="display:none"':'',' id="',Z,'"',Y.gecko&&Y.version>=10900&&!Y.hc?'':' href="javascript:void(0)"',' tabIndex="-1"',' hidefocus="true"',' role="tab">',S.label,'</a>'].join(''));X.setAttribute('aria-labelledby',Z);ae._.tabs[S.id]=[aa,X];ae._.tabIdList.push(S.id);!S.hidden&&ae._.pageCount++;ae._.lastTab=aa;ae.updateStyle();var ab=ae._.contents[S.id]={},ac,ad=W.getChild();while(ac=ad.shift()){ab[ac.id]=ac;if(typeof ac.getChild=='function')ad.push.apply(ad,ac.getChild());}X.setAttribute('name',S.id);X.appendTo(ae.parts.contents);aa.unselectable();ae.parts.tabs.append(aa);if(S.accessKey){M(ae,ae,'CTRL+'+S.accessKey,P,O);ae._.accessKeyMap['CTRL+'+S.accessKey]=S.id;}},selectPage:function(S){if(this._.currentTabId==S)return;if(this.fire('selectPage',{page:S,currentPage:this._.currentTabId})===true)return;for(var T in this._.tabs){var U=this._.tabs[T][0],V=this._.tabs[T][1];if(T!=S){U.removeClass('cke_dialog_tab_selected');V.hide();}V.setAttribute('aria-hidden',T!=S);}var W=this._.tabs[S];W[0].addClass('cke_dialog_tab_selected');if(b.ie6Compat||b.ie7Compat){q(W[1]);W[1].show();setTimeout(function(){q(W[1],1);},0);}else W[1].show();this._.currentTabId=S;this._.currentTabIndex=e.indexOf(this._.tabIdList,S);},updateStyle:function(){this.parts.dialog[(this._.pageCount===1?'add':'remove')+'Class']('cke_single_page');},hidePage:function(S){var U=this;var T=U._.tabs[S]&&U._.tabs[S][0];if(!T||U._.pageCount==1||!T.isVisible())return;else if(S==U._.currentTabId)U.selectPage(o.call(U));T.hide();U._.pageCount--;U.updateStyle();},showPage:function(S){var U=this;var T=U._.tabs[S]&&U._.tabs[S][0];if(!T)return;T.show();U._.pageCount++;U.updateStyle();},getElement:function(){return this._.element;},getName:function(){return this._.name;},getContentElement:function(S,T){var U=this._.contents[S];return U&&U[T];},getValueOf:function(S,T){return this.getContentElement(S,T).getValue(); +},setValueOf:function(S,T,U){return this.getContentElement(S,T).setValue(U);},getButton:function(S){return this._.buttons[S];},click:function(S){return this._.buttons[S].click();},disableButton:function(S){return this._.buttons[S].disable();},enableButton:function(S){return this._.buttons[S].enable();},getPageCount:function(){return this._.pageCount;},getParentEditor:function(){return this._.editor;},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement();},addFocusable:function(S,T){var V=this;if(typeof T=='undefined'){T=V._.focusList.length;V._.focusList.push(new t(V,S,T));}else{V._.focusList.splice(T,0,new t(V,S,T));for(var U=T+1;U<V._.focusList.length;U++)V._.focusList[U].focusIndex++;}}};e.extend(a.dialog,{add:function(S,T){if(!this._.dialogDefinitions[S]||typeof T=='function')this._.dialogDefinitions[S]=T;},exists:function(S){return!!this._.dialogDefinitions[S];},getCurrent:function(){return a.dialog._.currentTop;},okButton:(function(){var S=function(T,U){U=U||{};return e.extend({id:'ok',type:'button',label:T.lang.common.ok,'class':'cke_dialog_ui_button_ok',onClick:function(V){var W=V.data.dialog;if(W.fire('ok',{hide:true}).hide!==false)W.hide();}},U,true);};S.type='button';S.override=function(T){return e.extend(function(U){return S(U,T);},{type:'button'},true);};return S;})(),cancelButton:(function(){var S=function(T,U){U=U||{};return e.extend({id:'cancel',type:'button',label:T.lang.common.cancel,'class':'cke_dialog_ui_button_cancel',onClick:function(V){var W=V.data.dialog;if(W.fire('cancel',{hide:true}).hide!==false)W.hide();}},U,true);};S.type='button';S.override=function(T){return e.extend(function(U){return S(U,T);},{type:'button'},true);};return S;})(),addUIElement:function(S,T){this._.uiElementBuilders[S]=T;}});a.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};a.event.implementOn(a.dialog);a.event.implementOn(a.dialog.prototype,true);var u={resizable:3,minWidth:600,minHeight:400,buttons:[a.dialog.okButton,a.dialog.cancelButton]},v=function(S,T,U){for(var V=0,W;W=S[V];V++){if(W.id==T)return W;if(U&&W[U]){var X=v(W[U],T,U);if(X)return X;}}return null;},w=function(S,T,U,V,W){if(U){for(var X=0,Y;Y=S[X];X++){if(Y.id==U){S.splice(X,0,T);return T;}if(V&&Y[V]){var Z=w(Y[V],T,U,V,true);if(Z)return Z;}}if(W)return null;}S.push(T);return T;},x=function(S,T,U){for(var V=0,W;W=S[V];V++){if(W.id==T)return S.splice(V,1);if(U&&W[U]){var X=x(W[U],T,U);if(X)return X;}}return null;},y=function(S,T){this.dialog=S; +var U=T.contents;for(var V=0,W;W=U[V];V++)U[V]=W&&new z(S,W);e.extend(this,T);};y.prototype={getContents:function(S){return v(this.contents,S);},getButton:function(S){return v(this.buttons,S);},addContents:function(S,T){return w(this.contents,S,T);},addButton:function(S,T){return w(this.buttons,S,T);},removeContents:function(S){x(this.contents,S);},removeButton:function(S){x(this.buttons,S);}};function z(S,T){this._={dialog:S};e.extend(this,T);};z.prototype={get:function(S){return v(this.elements,S,'children');},add:function(S,T){return w(this.elements,S,T,'children');},remove:function(S){x(this.elements,S,'children');}};function A(S){var T=null,U=null,V=S.getElement().getFirst(),W=S.getParentEditor(),X=W.config.dialog_magnetDistance,Y=W.skin.margins||[0,0,0,0];if(typeof X=='undefined')X=20;function Z(ab){var ac=S.getSize(),ad=a.document.getWindow().getViewPaneSize(),ae=ab.data.$.screenX,af=ab.data.$.screenY,ag=ae-T.x,ah=af-T.y,ai,aj;T={x:ae,y:af};U.x+=ag;U.y+=ah;if(U.x+Y[3]<X)ai=-Y[3];else if(U.x-Y[1]>ad.width-ac.width-X)ai=ad.width-ac.width+(W.lang.dir=='rtl'?0:Y[1]);else ai=U.x;if(U.y+Y[0]<X)aj=-Y[0];else if(U.y-Y[2]>ad.height-ac.height-X)aj=ad.height-ac.height+Y[2];else aj=U.y;S.move(ai,aj,1);ab.data.preventDefault();};function aa(ab){a.document.removeListener('mousemove',Z);a.document.removeListener('mouseup',aa);if(b.ie6Compat){var ac=E.getChild(0).getFrameDocument();ac.removeListener('mousemove',Z);ac.removeListener('mouseup',aa);}};S.parts.title.on('mousedown',function(ab){T={x:ab.data.$.screenX,y:ab.data.$.screenY};a.document.on('mousemove',Z);a.document.on('mouseup',aa);U=S.getPosition();if(b.ie6Compat){var ac=E.getChild(0).getFrameDocument();ac.on('mousemove',Z);ac.on('mouseup',aa);}ab.data.preventDefault();},S);};function B(S){var T=S.definition,U=T.resizable;if(U==0)return;var V=S.getParentEditor(),W,X,Y,Z,aa,ab,ac=e.addFunction(function(af){aa=S.getSize();var ag=S.parts.contents,ah=ag.$.getElementsByTagName('iframe').length;if(ah){ab=h.createFromHtml('<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>');ag.append(ab);}X=aa.height-S.parts.contents.getSize('height',!(b.gecko||b.opera||c&&b.quirks));W=aa.width-S.parts.contents.getSize('width',1);Z={x:af.screenX,y:af.screenY};Y=a.document.getWindow().getViewPaneSize();a.document.on('mousemove',ad);a.document.on('mouseup',ae);if(b.ie6Compat){var ai=E.getChild(0).getFrameDocument();ai.on('mousemove',ad);ai.on('mouseup',ae);}af.preventDefault&&af.preventDefault(); +});S.on('load',function(){var af='';if(U==1)af=' cke_resizer_horizontal';else if(U==2)af=' cke_resizer_vertical';var ag=h.createFromHtml('<div class="cke_resizer'+af+' cke_resizer_'+V.lang.dir+'"'+' title="'+e.htmlEncode(V.lang.resize)+'"'+' onmousedown="CKEDITOR.tools.callFunction('+ac+', event )"></div>');S.parts.footer.append(ag,1);});V.on('destroy',function(){e.removeFunction(ac);});function ad(af){var ag=V.lang.dir=='rtl',ah=(af.data.$.screenX-Z.x)*(ag?-1:1),ai=af.data.$.screenY-Z.y,aj=aa.width,ak=aa.height,al=aj+ah*(S._.moved?1:2),am=ak+ai*(S._.moved?1:2),an=S._.element.getFirst(),ao=ag&&an.getComputedStyle('right'),ap=S.getPosition();if(ap.y+am>Y.height)am=Y.height-ap.y;if((ag?ao:ap.x)+al>Y.width)al=Y.width-(ag?ao:ap.x);if(U==1||U==3)aj=Math.max(T.minWidth||0,al-W);if(U==2||U==3)ak=Math.max(T.minHeight||0,am-X);S.resize(aj,ak);if(!S._.moved)S.layout();af.data.preventDefault();};function ae(){a.document.removeListener('mouseup',ae);a.document.removeListener('mousemove',ad);if(ab){ab.remove();ab=null;}if(b.ie6Compat){var af=E.getChild(0).getFrameDocument();af.removeListener('mouseup',ae);af.removeListener('mousemove',ad);}};};var C,D={},E;function F(S){S.data.preventDefault(1);};function G(S){var T=a.document.getWindow(),U=S.config,V=U.dialog_backgroundCoverColor||'white',W=U.dialog_backgroundCoverOpacity,X=U.baseFloatZIndex,Y=e.genKey(V,W,X),Z=D[Y];if(!Z){var aa=['<div tabIndex="-1" style="position: ',b.ie6Compat?'absolute':'fixed','; z-index: ',X,'; top: 0px; left: 0px; ',!b.ie6Compat?'background-color: '+V:'','" class="cke_dialog_background_cover">'];if(b.ie6Compat){var ab=b.isCustomDomain(),ac="<html><body style=\\'background-color:"+V+";\\'></body></html>";aa.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:');aa.push('void((function(){document.open();'+(ab?"document.domain='"+document.domain+"';":'')+"document.write( '"+ac+"' );"+'document.close();'+'})())');aa.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>');}aa.push('</div>');Z=h.createFromHtml(aa.join(''));Z.setOpacity(W!=undefined?W:0.5);Z.on('keydown',F);Z.on('keypress',F);Z.on('keyup',F);Z.appendTo(a.document.getBody());D[Y]=Z;}else Z.show();E=Z;var ad=function(){var ag=T.getViewPaneSize();Z.setStyles({width:ag.width+'px',height:ag.height+'px'});},ae=function(){var ag=T.getScrollPosition(),ah=a.dialog._.currentTop;Z.setStyles({left:ag.x+'px',top:ag.y+'px'});if(ah)do{var ai=ah.getPosition(); +ah.move(ai.x,ai.y);}while(ah=ah._.parentDialog)};C=ad;T.on('resize',ad);ad();if(!(b.mac&&b.webkit))Z.focus();if(b.ie6Compat){var af=function(){ae();arguments.callee.prevScrollHandler.apply(this,arguments);};T.$.setTimeout(function(){af.prevScrollHandler=window.onscroll||(function(){});window.onscroll=af;},0);ae();}};function H(){if(!E)return;var S=a.document.getWindow();E.hide();S.removeListener('resize',C);if(b.ie6Compat)S.$.setTimeout(function(){var T=window.onscroll&&window.onscroll.prevScrollHandler;window.onscroll=T||null;},0);C=null;};function I(){for(var S in D)D[S].remove();D={};};var J={},K=function(S){var T=S.data.$.ctrlKey||S.data.$.metaKey,U=S.data.$.altKey,V=S.data.$.shiftKey,W=String.fromCharCode(S.data.$.keyCode),X=J[(T?'CTRL+':'')+(U?'ALT+':'')+(V?'SHIFT+':'')+W];if(!X||!X.length)return;X=X[X.length-1];X.keydown&&X.keydown.call(X.uiElement,X.dialog,X.key);S.data.preventDefault();},L=function(S){var T=S.data.$.ctrlKey||S.data.$.metaKey,U=S.data.$.altKey,V=S.data.$.shiftKey,W=String.fromCharCode(S.data.$.keyCode),X=J[(T?'CTRL+':'')+(U?'ALT+':'')+(V?'SHIFT+':'')+W];if(!X||!X.length)return;X=X[X.length-1];if(X.keyup){X.keyup.call(X.uiElement,X.dialog,X.key);S.data.preventDefault();}},M=function(S,T,U,V,W){var X=J[U]||(J[U]=[]);X.push({uiElement:S,dialog:T,key:U,keyup:W||S.accessKeyUp,keydown:V||S.accessKeyDown});},N=function(S){for(var T in J){var U=J[T];for(var V=U.length-1;V>=0;V--){if(U[V].dialog==S||U[V].uiElement==S)U.splice(V,1);}if(U.length===0)delete J[T];}},O=function(S,T){if(S._.accessKeyMap[T])S.selectPage(S._.accessKeyMap[T]);},P=function(S,T){},Q={27:1,13:1},R=function(S){if(S.data.getKeystroke() in Q)S.data.stopPropagation();};(function(){k.dialog={uiElement:function(S,T,U,V,W,X,Y){if(arguments.length<4)return;var Z=(V.call?V(T):V)||'div',aa=['<',Z,' '],ab=(W&&W.call?W(T):W)||{},ac=(X&&X.call?X(T):X)||{},ad=(Y&&Y.call?Y.call(this,S,T):Y)||'',ae=this.domId=ac.id||e.getNextId()+'_uiElement',af=this.id=T.id,ag;ac.id=ae;var ah={};if(T.type)ah['cke_dialog_ui_'+T.type]=1;if(T.className)ah[T.className]=1;if(T.disabled)ah.cke_disabled=1;var ai=ac['class']&&ac['class'].split?ac['class'].split(' '):[];for(ag=0;ag<ai.length;ag++){if(ai[ag])ah[ai[ag]]=1;}var aj=[];for(ag in ah)aj.push(ag);ac['class']=aj.join(' ');if(T.title)ac.title=T.title;var ak=(T.style||'').split(';');if(T.align){var al=T.align;ab['margin-left']=al=='left'?0:'auto';ab['margin-right']=al=='right'?0:'auto';}for(ag in ab)ak.push(ag+':'+ab[ag]);if(T.hidden)ak.push('display:none'); +for(ag=ak.length-1;ag>=0;ag--){if(ak[ag]==='')ak.splice(ag,1);}if(ak.length>0)ac.style=(ac.style?ac.style+'; ':'')+ak.join('; ');for(ag in ac)aa.push(ag+'="'+e.htmlEncode(ac[ag])+'" ');aa.push('>',ad,'</',Z,'>');U.push(aa.join(''));(this._||(this._={})).dialog=S;if(typeof T.isChanged=='boolean')this.isChanged=function(){return T.isChanged;};if(typeof T.isChanged=='function')this.isChanged=T.isChanged;if(typeof T.setValue=='function')this.setValue=e.override(this.setValue,function(an){return function(ao){an.call(this,T.setValue.call(this,ao));};});if(typeof T.getValue=='function')this.getValue=e.override(this.getValue,function(an){return function(){return T.getValue.call(this,an.call(this));};});a.event.implementOn(this);this.registerEvents(T);if(this.accessKeyUp&&this.accessKeyDown&&T.accessKey)M(this,S,'CTRL+'+T.accessKey);var am=this;S.on('load',function(){if(am.getInputElement())am.getInputElement().on('focus',function(){S._.tabBarMode=false;S._.hasFocus=true;am.fire('focus');},am);});if(this.keyboardFocusable){this.tabIndex=T.tabIndex||0;this.focusIndex=S._.focusList.push(this)-1;this.on('focus',function(){S._.currentFocusIndex=am.focusIndex;});}e.extend(this,T);},hbox:function(S,T,U,V,W){if(arguments.length<4)return;this._||(this._={});var X=this._.children=T,Y=W&&W.widths||null,Z=W&&W.height||null,aa={},ab,ac=function(){var ae=['<tbody><tr class="cke_dialog_ui_hbox">'];for(ab=0;ab<U.length;ab++){var af='cke_dialog_ui_hbox_child',ag=[];if(ab===0)af='cke_dialog_ui_hbox_first';if(ab==U.length-1)af='cke_dialog_ui_hbox_last';ae.push('<td class="',af,'" role="presentation" ');if(Y){if(Y[ab])ag.push('width:'+m(Y[ab]));}else ag.push('width:'+Math.floor(100/U.length)+'%');if(Z)ag.push('height:'+m(Z));if(W&&W.padding!=undefined)ag.push('padding:'+m(W.padding));if(c&&b.quirks&&X[ab].align)ag.push('text-align:'+X[ab].align);if(ag.length>0)ae.push('style="'+ag.join('; ')+'" ');ae.push('>',U[ab],'</td>');}ae.push('</tr></tbody>');return ae.join('');},ad={role:'presentation'};W&&W.align&&(ad.align=W.align);k.dialog.uiElement.call(this,S,W||{type:'hbox'},V,'table',aa,ad,ac);},vbox:function(S,T,U,V,W){if(arguments.length<3)return;this._||(this._={});var X=this._.children=T,Y=W&&W.width||null,Z=W&&W.heights||null,aa=function(){var ab=['<table role="presentation" cellspacing="0" border="0" '];ab.push('style="');if(W&&W.expand)ab.push('height:100%;');ab.push('width:'+m(Y||'100%'),';');ab.push('"');ab.push('align="',e.htmlEncode(W&&W.align||(S.getParentEditor().lang.dir=='ltr'?'left':'right')),'" '); +ab.push('><tbody>');for(var ac=0;ac<U.length;ac++){var ad=[];ab.push('<tr><td role="presentation" ');if(Y)ad.push('width:'+m(Y||'100%'));if(Z)ad.push('height:'+m(Z[ac]));else if(W&&W.expand)ad.push('height:'+Math.floor(100/U.length)+'%');if(W&&W.padding!=undefined)ad.push('padding:'+m(W.padding));if(c&&b.quirks&&X[ac].align)ad.push('text-align:'+X[ac].align);if(ad.length>0)ab.push('style="',ad.join('; '),'" ');ab.push(' class="cke_dialog_ui_vbox_child">',U[ac],'</td></tr>');}ab.push('</tbody></table>');return ab.join('');};k.dialog.uiElement.call(this,S,W||{type:'vbox'},V,'div',null,{role:'presentation'},aa);}};})();k.dialog.uiElement.prototype={getElement:function(){return a.document.getById(this.domId);},getInputElement:function(){return this.getElement();},getDialog:function(){return this._.dialog;},setValue:function(S,T){this.getInputElement().setValue(S);!T&&this.fire('change',{value:S});return this;},getValue:function(){return this.getInputElement().getValue();},isChanged:function(){return false;},selectParentTab:function(){var V=this;var S=V.getInputElement(),T=S,U;while((T=T.getParent())&&T.$.className.search('cke_dialog_page_contents')==-1){}if(!T)return V;U=T.getAttribute('name');if(V._.dialog._.currentTabId!=U)V._.dialog.selectPage(U);return V;},focus:function(){this.selectParentTab().getInputElement().focus();return this;},registerEvents:function(S){var T=/^on([A-Z]\w+)/,U,V=function(X,Y,Z,aa){Y.on('load',function(){X.getInputElement().on(Z,aa,X);});};for(var W in S){if(!(U=W.match(T)))continue;if(this.eventProcessors[W])this.eventProcessors[W].call(this,this._.dialog,S[W]);else V(this,this._.dialog,U[1].toLowerCase(),S[W]);}return this;},eventProcessors:{onLoad:function(S,T){S.on('load',T,this);},onShow:function(S,T){S.on('show',T,this);},onHide:function(S,T){S.on('hide',T,this);}},accessKeyDown:function(S,T){this.focus();},accessKeyUp:function(S,T){},disable:function(){var S=this.getElement(),T=this.getInputElement();T.setAttribute('disabled','true');S.addClass('cke_disabled');},enable:function(){var S=this.getElement(),T=this.getInputElement();T.removeAttribute('disabled');S.removeClass('cke_disabled');},isEnabled:function(){return!this.getElement().hasClass('cke_disabled');},isVisible:function(){return this.getInputElement().isVisible();},isFocusable:function(){if(!this.isEnabled()||!this.isVisible())return false;return true;}};k.dialog.hbox.prototype=e.extend(new k.dialog.uiElement(),{getChild:function(S){var T=this;if(arguments.length<1)return T._.children.concat(); +if(!S.splice)S=[S];if(S.length<2)return T._.children[S[0]];else return T._.children[S[0]]&&T._.children[S[0]].getChild?T._.children[S[0]].getChild(S.slice(1,S.length)):null;}},true);k.dialog.vbox.prototype=new k.dialog.hbox();(function(){var S={build:function(T,U,V){var W=U.children,X,Y=[],Z=[];for(var aa=0;aa<W.length&&(X=W[aa]);aa++){var ab=[];Y.push(ab);Z.push(a.dialog._.uiElementBuilders[X.type].build(T,X,ab));}return new k.dialog[U.type](T,Z,Y,V,U);}};a.dialog.addUIElement('hbox',S);a.dialog.addUIElement('vbox',S);})();a.dialogCommand=function(S){this.dialogName=S;};a.dialogCommand.prototype={exec:function(S){S.openDialog(this.dialogName);},canUndo:false,editorFocus:c||b.webkit};(function(){var S=/^([a]|[^a])+$/,T=/^\d*$/,U=/^\d*(?:\.\d+)?$/,V=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,W=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i;a.VALIDATE_OR=1;a.VALIDATE_AND=2;a.dialog.validate={functions:function(){var X=arguments;return function(){var Y=this&&this.getValue?this.getValue():X[0],Z=undefined,aa=2,ab=[],ac;for(ac=0;ac<X.length;ac++){if(typeof X[ac]=='function')ab.push(X[ac]);else break;}if(ac<X.length&&typeof X[ac]=='string'){Z=X[ac];ac++;}if(ac<X.length&&typeof X[ac]=='number')aa=X[ac];var ad=aa==2?true:false;for(ac=0;ac<ab.length;ac++){if(aa==2)ad=ad&&ab[ac](Y);else ad=ad||ab[ac](Y);}return!ad?Z:true;};},regex:function(X,Y){return function(){var Z=this&&this.getValue?this.getValue():arguments[0];return!X.test(Z)?Y:true;};},notEmpty:function(X){return this.regex(S,X);},integer:function(X){return this.regex(T,X);},number:function(X){return this.regex(U,X);},cssLength:function(X){return this.functions(function(Y){return W.test(e.trim(Y));},X);},htmlLength:function(X){return this.functions(function(Y){return V.test(e.trim(Y));},X);},equals:function(X,Y){return this.functions(function(Z){return Z==X;},Y);},notEqual:function(X,Y){return this.functions(function(Z){return Z!=X;},Y);}};a.on('instanceDestroyed',function(X){if(e.isEmpty(a.instances)){var Y;while(Y=a.dialog._.currentTop)Y.hide();I();}var Z=X.editor._.storedDialogs;for(var aa in Z)Z[aa].destroy();});})();e.extend(a.editor.prototype,{openDialog:function(S,T){if(this.mode=='wysiwyg'&&c){var U=this.getSelection();U&&U.lock();}var V=a.dialog._.dialogDefinitions[S],W=this.skin.dialog;if(a.dialog._.currentTop===null)G(this);if(typeof V=='function'&&W._isLoaded){var X=this._.storedDialogs||(this._.storedDialogs={}),Y=X[S]||(X[S]=new a.dialog(this,S));T&&T.call(Y,Y);Y.show();return Y;}else if(V=='failed'){H(); +throw new Error('[CKEDITOR.dialog.openDialog] Dialog "'+S+'" failed when loading definition.');}var Z=this;function aa(ac){var ad=a.dialog._.dialogDefinitions[S],ae=Z.skin.dialog;if(!ae._isLoaded||ab&&typeof ac=='undefined')return;if(typeof ad!='function')a.dialog._.dialogDefinitions[S]='failed';Z.openDialog(S,T);};if(typeof V=='string'){var ab=1;a.scriptLoader.load(a.getUrl(V),aa,null,0,1);}a.skins.load(this,'dialog',aa);return null;}});})();j.add('dialog',{requires:['dialogui']});j.add('styles',{requires:['selection'],init:function(m){m.on('contentDom',function(){m.document.setCustomData('cke_includeReadonly',!m.config.disableReadonlyStyling);});}});a.editor.prototype.attachStyleStateChange=function(m,n){var o=this._.styleStateChangeCallbacks;if(!o){o=this._.styleStateChangeCallbacks=[];this.on('selectionChange',function(p){for(var q=0;q<o.length;q++){var r=o[q],s=r.style.checkActive(p.data.path)?1:2;r.fn.call(this,s);}});}o.push({style:m,fn:n});};a.STYLE_BLOCK=1;a.STYLE_INLINE=2;a.STYLE_OBJECT=3;(function(){var m={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},n={a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},o=/\s*(?:;\s*|$)/,p=/#\((.+?)\)/g,q=d.walker.bookmark(0,1),r=d.walker.whitespaces(1);a.style=function(T,U){var W=this;if(U){T=e.clone(T);L(T.attributes,U);L(T.styles,U);}var V=W.element=T.element?typeof T.element=='string'?T.element.toLowerCase():T.element:'*';W.type=m[V]?1:n[V]?3:2;if(typeof W.element=='object')W.type=3;W._={definition:T};};a.style.prototype={apply:function(T){S.call(this,T,false);},remove:function(T){S.call(this,T,true);},applyToRange:function(T){var U=this;return(U.applyToRange=U.type==2?t:U.type==1?x:U.type==3?v:null).call(U,T);},removeFromRange:function(T){var U=this;return(U.removeFromRange=U.type==2?u:U.type==1?y:U.type==3?w:null).call(U,T);},applyToObject:function(T){K(T,this);},checkActive:function(T){var Y=this;switch(Y.type){case 1:return Y.checkElementRemovable(T.block||T.blockLimit,true);case 3:case 2:var U=T.elements;for(var V=0,W;V<U.length;V++){W=U[V];if(Y.type==2&&(W==T.block||W==T.blockLimit))continue;if(Y.type==3){var X=W.getName();if(!(typeof Y.element=='string'?X==Y.element:X in Y.element))continue;}if(Y.checkElementRemovable(W,true))return true;}}return false;},checkApplicable:function(T){switch(this.type){case 2:case 1:break; +case 3:return T.lastElement.getAscendant(this.element,true);}return true;},checkElementRemovable:function(T,U){var ae=this;if(!T||T.isReadOnly())return false;var V=ae._.definition,W,X=T.getName();if(typeof ae.element=='string'?X==ae.element:X in ae.element){if(!U&&!T.hasAttributes())return true;W=M(V);if(W._length){for(var Y in W){if(Y=='_length')continue;var Z=T.getAttribute(Y)||'';if(Y=='style'?R(W[Y],P(Z,false)):W[Y]==Z){if(!U)return true;}else if(U)return false;}if(U)return true;}else return true;}var aa=N(ae)[T.getName()];if(aa){if(!(W=aa.attributes))return true;for(var ab=0;ab<W.length;ab++){Y=W[ab][0];var ac=T.getAttribute(Y);if(ac){var ad=W[ab][1];if(ad===null||typeof ad=='string'&&ac==ad||ad.test(ac))return true;}}}return false;},buildPreview:function(T){var U=this._.definition,V=[],W=U.element;if(W=='bdo')W='span';V=['<',W];var X=U.attributes;if(X)for(var Y in X)V.push(' ',Y,'="',X[Y],'"');var Z=a.style.getStyleText(U);if(Z)V.push(' style="',Z,'"');V.push('>',T||U.name,'</',W,'>');return V.join('');}};a.style.getStyleText=function(T){var U=T._ST;if(U)return U;U=T.styles;var V=T.attributes&&T.attributes.style||'',W='';if(V.length)V=V.replace(o,';');for(var X in U){var Y=U[X],Z=(X+':'+Y).replace(o,';');if(Y=='inherit')W+=Z;else V+=Z;}if(V.length)V=P(V);V+=W;return T._ST=V;};function s(T){var U,V;while(T=T.getParent()){if(T.getName()=='body')break;if(T.getAttribute('data-nostyle'))U=T;else if(!V){var W=T.getAttribute('contentEditable');if(W=='false')U=T;else if(W=='true')V=1;}}return U;};function t(T){var ax=this;var U=T.document;if(T.collapsed){var V=J(ax,U);T.insertNode(V);T.moveToPosition(V,2);return;}var W=ax.element,X=ax._.definition,Y,Z=X.includeReadonly;if(Z==undefined)Z=U.getCustomData('cke_includeReadonly');var aa=f[W]||(Y=true,f.span);T.enlarge(1,1);T.trim();var ab=T.createBookmark(),ac=ab.startNode,ad=ab.endNode,ae=ac,af,ag=s(ac),ah=s(ad);if(ag)ae=ag.getNextSourceNode(true);if(ah)ad=ah;if(ae.getPosition(ad)==2)ae=0;while(ae){var ai=false;if(ae.equals(ad)){ae=null;ai=true;}else{var aj=ae.type,ak=aj==1?ae.getName():null,al=ak&&ae.getAttribute('contentEditable')=='false',am=ak&&ae.getAttribute('data-nostyle');if(ak&&ae.data('cke-bookmark')){ae=ae.getNextSourceNode(true);continue;}if(!ak||aa[ak]&&!am&&(!al||Z)&&(ae.getPosition(ad)|4|0|8)==4+0+8&&(!X.childRule||X.childRule(ae))){var an=ae.getParent();if(an&&((an.getDtd()||f.span)[W]||Y)&&(!X.parentRule||X.parentRule(an))){if(!af&&(!ak||!f.$removeEmpty[ak]||(ae.getPosition(ad)|4|0|8)==4+0+8)){af=new d.range(U); +af.setStartBefore(ae);}if(aj==3||al||aj==1&&!ae.getChildCount()){var ao=ae,ap;while((ai=!ao.getNext(q))&&(ap=ao.getParent(),aa[ap.getName()])&&(ap.getPosition(ac)|2|0|8)==2+0+8&&(!X.childRule||X.childRule(ap)))ao=ap;af.setEndAfter(ao);}}else ai=true;}else ai=true;ae=ae.getNextSourceNode(am||al);}if(ai&&af&&!af.collapsed){var aq=J(ax,U),ar=aq.hasAttributes(),as=af.getCommonAncestor(),at={styles:{},attrs:{},blockedStyles:{},blockedAttrs:{}},au,av,aw;while(aq&&as){if(as.getName()==W){for(au in X.attributes){if(at.blockedAttrs[au]||!(aw=as.getAttribute(av)))continue;if(aq.getAttribute(au)==aw)at.attrs[au]=1;else at.blockedAttrs[au]=1;}for(av in X.styles){if(at.blockedStyles[av]||!(aw=as.getStyle(av)))continue;if(aq.getStyle(av)==aw)at.styles[av]=1;else at.blockedStyles[av]=1;}}as=as.getParent();}for(au in at.attrs)aq.removeAttribute(au);for(av in at.styles)aq.removeStyle(av);if(ar&&!aq.hasAttributes())aq=null;if(aq){af.extractContents().appendTo(aq);G(ax,aq);af.insertNode(aq);aq.mergeSiblings();if(!c)aq.$.normalize();}else{aq=new h('span');af.extractContents().appendTo(aq);af.insertNode(aq);G(ax,aq);aq.remove(true);}af=null;}}T.moveToBookmark(ab);T.shrink(2);};function u(T){T.enlarge(1,1);var U=T.createBookmark(),V=U.startNode;if(T.collapsed){var W=new d.elementPath(V.getParent()),X;for(var Y=0,Z;Y<W.elements.length&&(Z=W.elements[Y]);Y++){if(Z==W.block||Z==W.blockLimit)break;if(this.checkElementRemovable(Z)){var aa;if(T.collapsed&&(T.checkBoundaryOfElement(Z,2)||(aa=T.checkBoundaryOfElement(Z,1)))){X=Z;X.match=aa?'start':'end';}else{Z.mergeSiblings();if(Z.getName()==this.element)F(this,Z);else H(Z,N(this)[Z.getName()]);}}}if(X){var ab=V;for(Y=0;true;Y++){var ac=W.elements[Y];if(ac.equals(X))break;else if(ac.match)continue;else ac=ac.clone();ac.append(ab);ab=ac;}ab[X.match=='start'?'insertBefore':'insertAfter'](X);}}else{var ad=U.endNode,ae=this;function af(){var ai=new d.elementPath(V.getParent()),aj=new d.elementPath(ad.getParent()),ak=null,al=null;for(var am=0;am<ai.elements.length;am++){var an=ai.elements[am];if(an==ai.block||an==ai.blockLimit)break;if(ae.checkElementRemovable(an))ak=an;}for(am=0;am<aj.elements.length;am++){an=aj.elements[am];if(an==aj.block||an==aj.blockLimit)break;if(ae.checkElementRemovable(an))al=an;}if(al)ad.breakParent(al);if(ak)V.breakParent(ak);};af();var ag=V.getNext();while(!ag.equals(ad)){var ah=ag.getNextSourceNode();if(ag.type==1&&this.checkElementRemovable(ag)){if(ag.getName()==this.element)F(this,ag);else H(ag,N(this)[ag.getName()]); +if(ah.type==1&&ah.contains(V)){af();ah=V.getNext();}}ag=ah;}}T.moveToBookmark(U);};function v(T){var U=T.getCommonAncestor(true,true),V=U.getAscendant(this.element,true);V&&!V.isReadOnly()&&K(V,this);};function w(T){var U=T.getCommonAncestor(true,true),V=U.getAscendant(this.element,true);if(!V)return;var W=this,X=W._.definition,Y=X.attributes,Z=a.style.getStyleText(X);if(Y)for(var aa in Y)V.removeAttribute(aa,Y[aa]);if(X.styles)for(var ab in X.styles){if(!X.styles.hasOwnProperty(ab))continue;V.removeStyle(ab);}};function x(T){var U=T.createBookmark(true),V=T.createIterator();V.enforceRealBlocks=true;if(this._.enterMode)V.enlargeBr=this._.enterMode!=2;var W,X=T.document,Y;while(W=V.getNextParagraph()){if(!W.isReadOnly()){var Z=J(this,X,W);z(W,Z);}}T.moveToBookmark(U);};function y(T){var Y=this;var U=T.createBookmark(1),V=T.createIterator();V.enforceRealBlocks=true;V.enlargeBr=Y._.enterMode!=2;var W;while(W=V.getNextParagraph()){if(Y.checkElementRemovable(W))if(W.is('pre')){var X=Y._.enterMode==2?null:T.document.createElement(Y._.enterMode==1?'p':'div');X&&W.copyAttributes(X);z(W,X);}else F(Y,W,1);}T.moveToBookmark(U);};function z(T,U){var V=!U;if(V){U=T.getDocument().createElement('div');T.copyAttributes(U);}var W=U&&U.is('pre'),X=T.is('pre'),Y=W&&!X,Z=!W&&X;if(Y)U=E(T,U);else if(Z)U=D(V?[T.getHtml()]:B(T),U);else T.moveChildren(U);U.replace(T);if(W)A(U);else if(V)I(U);};function A(T){var U;if(!((U=T.getPrevious(r))&&U.is&&U.is('pre')))return;var V=C(U.getHtml(),/\n$/,'')+'\n\n'+C(T.getHtml(),/^\n/,'');if(c)T.$.outerHTML='<pre>'+V+'</pre>';else T.setHtml(V);U.remove();};function B(T){var U=/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,V=T.getName(),W=C(T.getOuterHtml(),U,function(Y,Z,aa){return Z+'</pre>'+aa+'<pre>';}),X=[];W.replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(Y,Z){X.push(Z);});return X;};function C(T,U,V){var W='',X='';T=T.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(Y,Z,aa){Z&&(W=Z);aa&&(X=aa);return '';});return W+T.replace(U,V)+X;};function D(T,U){var V;if(T.length>1)V=new d.documentFragment(U.getDocument());for(var W=0;W<T.length;W++){var X=T[W];X=X.replace(/(\r\n|\r)/g,'\n');X=C(X,/^[ \t]*\n/,'');X=C(X,/\n$/,'');X=C(X,/^[ \t]+|[ \t]+$/g,function(Z,aa,ab){if(Z.length==1)return ' ';else if(!aa)return e.repeat(' ',Z.length-1)+' ';else return ' '+e.repeat(' ',Z.length-1);});X=X.replace(/\n/g,'<br>');X=X.replace(/[ \t]{2,}/g,function(Z){return e.repeat(' ',Z.length-1)+' '; +});if(V){var Y=U.clone();Y.setHtml(X);V.append(Y);}else U.setHtml(X);}return V||U;};function E(T,U){var V=T.getBogus();V&&V.remove();var W=T.getHtml();W=C(W,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,'');W=W.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'$1');W=W.replace(/([ \t\n\r]+| )/g,' ');W=W.replace(/<br\b[^>]*>/gi,'\n');if(c){var X=T.getDocument().createElement('div');X.append(U);U.$.outerHTML='<pre>'+W+'</pre>';U.copyAttributes(X.getFirst());U=X.getFirst().remove();}else U.setHtml(W);return U;};function F(T,U){var V=T._.definition,W=e.extend({},V.attributes,N(T)[U.getName()]),X=V.styles,Y=e.isEmpty(W)&&e.isEmpty(X);for(var Z in W){if((Z=='class'||T._.definition.fullMatch)&&U.getAttribute(Z)!=O(Z,W[Z]))continue;Y=U.hasAttribute(Z);U.removeAttribute(Z);}for(var aa in X){if(T._.definition.fullMatch&&U.getStyle(aa)!=O(aa,X[aa],true))continue;Y=Y||!!U.getStyle(aa);U.removeStyle(aa);}if(Y)!f.$block[U.getName()]||T._.enterMode==2&&!U.hasAttributes()?I(U):U.renameNode(T._.enterMode==1?'p':'div');};function G(T,U){var V=T._.definition,W=V.attributes,X=V.styles,Y=N(T),Z=U.getElementsByTag(T.element);for(var aa=Z.count();--aa>=0;)F(T,Z.getItem(aa));for(var ab in Y){if(ab!=T.element){Z=U.getElementsByTag(ab);for(aa=Z.count()-1;aa>=0;aa--){var ac=Z.getItem(aa);H(ac,Y[ab]);}}}};function H(T,U){var V=U&&U.attributes;if(V)for(var W=0;W<V.length;W++){var X=V[W][0],Y;if(Y=T.getAttribute(X)){var Z=V[W][1];if(Z===null||Z.test&&Z.test(Y)||typeof Z=='string'&&Y==Z)T.removeAttribute(X);}}I(T);};function I(T){if(!T.hasAttributes())if(f.$block[T.getName()]){var U=T.getPrevious(r),V=T.getNext(r);if(U&&(U.type==3||!U.isBlockBoundary({br:1})))T.append('br',1);if(V&&(V.type==3||!V.isBlockBoundary({br:1})))T.append('br');T.remove(true);}else{var W=T.getFirst(),X=T.getLast();T.remove(true);if(W){W.type==1&&W.mergeSiblings();if(X&&!W.equals(X)&&X.type==1)X.mergeSiblings();}}};function J(T,U,V){var W,X=T._.definition,Y=T.element;if(Y=='*')Y='span';W=new h(Y,U);if(V)V.copyAttributes(W);W=K(W,T);if(U.getCustomData('doc_processing_style')&&W.hasAttribute('id'))W.removeAttribute('id');else U.setCustomData('doc_processing_style',1);return W;};function K(T,U){var V=U._.definition,W=V.attributes,X=a.style.getStyleText(V);if(W)for(var Y in W)T.setAttribute(Y,W[Y]);if(X)T.setAttribute('style',X);return T;};function L(T,U){for(var V in T)T[V]=T[V].replace(p,function(W,X){return U[X];});};function M(T){var U=T._AC;if(U)return U;U={};var V=0,W=T.attributes;if(W)for(var X in W){V++;U[X]=W[X];}var Y=a.style.getStyleText(T); +if(Y){if(!U.style)V++;U.style=Y;}U._length=V;return T._AC=U;};function N(T){if(T._.overrides)return T._.overrides;var U=T._.overrides={},V=T._.definition.overrides;if(V){if(!e.isArray(V))V=[V];for(var W=0;W<V.length;W++){var X=V[W],Y,Z,aa;if(typeof X=='string')Y=X.toLowerCase();else{Y=X.element?X.element.toLowerCase():T.element;aa=X.attributes;}Z=U[Y]||(U[Y]={});if(aa){var ab=Z.attributes=Z.attributes||[];for(var ac in aa)ab.push([ac.toLowerCase(),aa[ac]]);}}}return U;};function O(T,U,V){var W=new h('span');W[V?'setStyle':'setAttribute'](T,U);return W[V?'getStyle':'getAttribute'](T);};function P(T,U){var V;if(U!==false){var W=new h('span');W.setAttribute('style',T);V=W.getAttribute('style')||'';}else V=T;V=V.replace(/(font-family:)(.*?)(?=;|$)/,function(X,Y,Z){var aa=Z.split(',');for(var ab=0;ab<aa.length;ab++)aa[ab]=e.trim(aa[ab].replace(/["']/g,''));return Y+aa.join(',');});return V.replace(/\s*([;:])\s*/,'$1').replace(/([^\s;])$/,'$1;').replace(/,\s+/g,',').replace(/\"/g,'').toLowerCase();};function Q(T){var U={};T.replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(V,W,X){U[W]=X;});return U;};function R(T,U){typeof T=='string'&&(T=Q(T));typeof U=='string'&&(U=Q(U));for(var V in T){if(!(V in U&&(U[V]==T[V]||T[V]=='inherit'||U[V]=='inherit')))return false;}return true;};function S(T,U){var V=T.getSelection(),W=V.createBookmarks(1),X=V.getRanges(),Y=U?this.removeFromRange:this.applyToRange,Z,aa=X.createIterator();while(Z=aa.getNextRange())Y.call(this,Z);if(W.length==1&&W[0].collapsed){V.selectRanges(X);T.getById(W[0].startNode).remove();}else V.selectBookmarks(W);T.removeCustomData('doc_processing_style');};})();a.styleCommand=function(m){this.style=m;};a.styleCommand.prototype.exec=function(m){var o=this;m.focus();var n=m.document;if(n)if(o.state==2)o.style.apply(n);else if(o.state==1)o.style.remove(n);return!!n;};a.stylesSet=new a.resourceManager('','stylesSet');a.addStylesSet=e.bind(a.stylesSet.add,a.stylesSet);a.loadStylesSet=function(m,n,o){a.stylesSet.addExternal(m,n,'');a.stylesSet.load(m,o);};a.editor.prototype.getStylesSet=function(m){if(!this._.stylesDefinitions){var n=this,o=n.config.stylesCombo_stylesSet||n.config.stylesSet||'default';if(o instanceof Array){n._.stylesDefinitions=o;m(o);return;}var p=o.split(':'),q=p[0],r=p[1],s=j.registered.styles.path;a.stylesSet.addExternal(q,r?p.slice(1).join(':'):s+'styles/'+q+'.js','');a.stylesSet.load(q,function(t){n._.stylesDefinitions=t[q];m(n._.stylesDefinitions);});}else m(this._.stylesDefinitions); +};j.add('domiterator');(function(){function m(s){var t=this;if(arguments.length<1)return;t.range=s;t.forceBrBreak=0;t.enlargeBr=1;t.enforceRealBlocks=0;t._||(t._={});};var n=/^[\r\n\t ]+$/,o=d.walker.bookmark(false,true),p=d.walker.whitespaces(true),q=function(s){return o(s)&&p(s);};function r(s,t,u){var v=s.getNextSourceNode(t,null,u);while(!o(v))v=v.getNextSourceNode(t,null,u);return v;};m.prototype={getNextParagraph:function(s){var S=this;var t,u,v,w,x,y;if(!S._.lastNode){u=S.range.clone();u.shrink(1,true);w=u.endContainer.hasAscendant('pre',true)||u.startContainer.hasAscendant('pre',true);u.enlarge(S.forceBrBreak&&!w||!S.enlargeBr?3:2);var z=new d.walker(u),A=d.walker.bookmark(true,true);z.evaluator=A;S._.nextNode=z.next();z=new d.walker(u);z.evaluator=A;var B=z.previous();S._.lastNode=B.getNextSourceNode(true);if(S._.lastNode&&S._.lastNode.type==3&&!e.trim(S._.lastNode.getText())&&S._.lastNode.getParent().isBlockBoundary()){var C=new d.range(u.document);C.moveToPosition(S._.lastNode,4);if(C.checkEndOfBlock()){var D=new d.elementPath(C.endContainer),E=D.block||D.blockLimit;S._.lastNode=E.getNextSourceNode(true);}}if(!S._.lastNode){S._.lastNode=S._.docEndMarker=u.document.createText('');S._.lastNode.insertAfter(B);}u=null;}var F=S._.nextNode;B=S._.lastNode;S._.nextNode=null;while(F){var G=0,H=F.hasAscendant('pre'),I=F.type!=1,J=0;if(!I){var K=F.getName();if(F.isBlockBoundary(S.forceBrBreak&&!H&&{br:1})){if(K=='br')I=1;else if(!u&&!F.getChildCount()&&K!='hr'){t=F;v=F.equals(B);break;}if(u){u.setEndAt(F,3);if(K!='br')S._.nextNode=F;}G=1;}else{if(F.getFirst()){if(!u){u=new d.range(S.range.document);u.setStartAt(F,3);}F=F.getFirst();continue;}I=1;}}else if(F.type==3)if(n.test(F.getText()))I=0;if(I&&!u){u=new d.range(S.range.document);u.setStartAt(F,3);}v=(!G||I)&&F.equals(B);if(u&&!G)while(!F.getNext(q)&&!v){var L=F.getParent();if(L.isBlockBoundary(S.forceBrBreak&&!H&&{br:1})){G=1;I=0;v=v||L.equals(B);u.setEndAt(L,2);break;}F=L;I=1;v=F.equals(B);J=1;}if(I)u.setEndAt(F,4);F=r(F,J,B);v=!F;if(v||G&&u)break;}if(!t){if(!u){S._.docEndMarker&&S._.docEndMarker.remove();S._.nextNode=null;return null;}var M=new d.elementPath(u.startContainer),N=M.blockLimit,O={div:1,th:1,td:1};t=M.block;if(!t&&!S.enforceRealBlocks&&O[N.getName()]&&u.checkStartOfBlock()&&u.checkEndOfBlock())t=N;else if(!t||S.enforceRealBlocks&&t.getName()=='li'){t=S.range.document.createElement(s||'p');u.extractContents().appendTo(t);t.trim();u.insertNode(t);x=y=true;}else if(t.getName()!='li'){if(!u.checkStartOfBlock()||!u.checkEndOfBlock()){t=t.clone(false); +u.extractContents().appendTo(t);t.trim();var P=u.splitBlock();x=!P.wasStartOfBlock;y=!P.wasEndOfBlock;u.insertNode(t);}}else if(!v)S._.nextNode=t.equals(B)?null:r(u.getBoundaryNodes().endNode,1,B);}if(x){var Q=t.getPrevious();if(Q&&Q.type==1)if(Q.getName()=='br')Q.remove();else if(Q.getLast()&&Q.getLast().$.nodeName.toLowerCase()=='br')Q.getLast().remove();}if(y){var R=t.getLast();if(R&&R.type==1&&R.getName()=='br')if(c||R.getPrevious(o)||R.getNext(o))R.remove();}if(!S._.nextNode)S._.nextNode=v||t.equals(B)?null:r(t,1,B);return t;}};d.range.prototype.createIterator=function(){return new m(this);};})();j.add('panelbutton',{requires:['button'],onLoad:function(){function m(n){var p=this;var o=p._;if(o.state==0)return;p.createPanel(n);if(o.on){o.panel.hide();return;}o.panel.showBlock(p._.id,p.document.getById(p._.id),4);};k.panelButton=e.createClass({base:k.button,$:function(n){var p=this;var o=n.panel;delete n.panel;p.base(n);p.document=o&&o.parent&&o.parent.getDocument()||a.document;o.block={attributes:o.attributes};p.hasArrow=true;p.click=m;p._={panelDefinition:o};},statics:{handler:{create:function(n){return new k.panelButton(n);}}},proto:{createPanel:function(n){var o=this._;if(o.panel)return;var p=this._.panelDefinition||{},q=this._.panelDefinition.block,r=p.parent||a.document.getBody(),s=this._.panel=new k.floatPanel(n,r,p),t=s.addBlock(o.id,q),u=this;s.onShow=function(){if(u.className)this.element.getFirst().addClass(u.className+'_panel');u.setState(1);o.on=1;if(u.onOpen)u.onOpen();};s.onHide=function(v){if(u.className)this.element.getFirst().removeClass(u.className+'_panel');u.setState(u.modes&&u.modes[n.mode]?2:0);o.on=0;if(!v&&u.onClose)u.onClose();};s.onEscape=function(){s.hide();u.document.getById(o.id).focus();};if(this.onBlock)this.onBlock(s,t);t.onHide=function(){o.on=0;u.setState(2);};}}});},beforeInit:function(m){m.ui.addHandler('panelbutton',k.panelButton.handler);}});a.UI_PANELBUTTON='panelbutton';j.add('floatpanel',{requires:['panel']});(function(){var m={},n=false;function o(p,q,r,s,t){var u=e.genKey(q.getUniqueId(),r.getUniqueId(),p.skinName,p.lang.dir,p.uiColor||'',s.css||'',t||''),v=m[u];if(!v){v=m[u]=new k.panel(q,s);v.element=r.append(h.createFromHtml(v.renderHtml(p),q));v.element.setStyles({display:'none',position:'absolute'});}return v;};k.floatPanel=e.createClass({$:function(p,q,r,s){r.forceIFrame=1;var t=q.getDocument(),u=o(p,t,q,r,s||0),v=u.element,w=v.getFirst().getFirst();this.element=v;this._={editor:p,panel:u,parentElement:q,definition:r,document:t,iframe:w,children:[],dir:p.lang.dir}; +p.on('mode',function(){this.hide();},this);},proto:{addBlock:function(p,q){return this._.panel.addBlock(p,q);},addListBlock:function(p,q){return this._.panel.addListBlock(p,q);},getBlock:function(p){return this._.panel.getBlock(p);},showBlock:function(p,q,r,s,t){var u=this._.panel,v=u.showBlock(p);this.allowBlur(false);n=1;this._.returnFocus=this._.editor.focusManager.hasFocus?this._.editor:new h(a.document.$.activeElement);var w=this.element,x=this._.iframe,y=this._.definition,z=q.getDocumentPosition(w.getDocument()),A=this._.dir=='rtl',B=z.x+(s||0),C=z.y+(t||0);if(A&&(r==1||r==4))B+=q.$.offsetWidth;else if(!A&&(r==2||r==3))B+=q.$.offsetWidth-1;if(r==3||r==4)C+=q.$.offsetHeight-1;this._.panel._.offsetParentId=q.getId();w.setStyles({top:C+'px',left:0,display:''});w.setOpacity(0);w.getFirst().removeStyle('width');if(!this._.blurSet){var D=c?x:new d.window(x.$.contentWindow);a.event.useCapture=true;D.on('blur',function(E){var G=this;if(!G.allowBlur())return;var F=E.data.getTarget();if(F.getName&&F.getName()!='iframe')return;if(G.visible&&!G._.activeChild&&!n){delete G._.returnFocus;G.hide();}},this);D.on('focus',function(){this._.focused=true;this.hideChild();this.allowBlur(true);},this);a.event.useCapture=false;this._.blurSet=1;}u.onEscape=e.bind(function(E){if(this.onEscape&&this.onEscape(E)===false)return false;},this);e.setTimeout(function(){if(A)B-=w.$.offsetWidth;var E=e.bind(function(){var F=w.getFirst();if(v.autoSize){var G=v.element.$;if(b.gecko||b.opera)G=G.parentNode;if(c)G=G.document.body;var H=G.scrollWidth;if(c&&b.quirks&&H>0)H+=(F.$.offsetWidth||0)-(F.$.clientWidth||0)+3;H+=4;F.setStyle('width',H+'px');v.element.addClass('cke_frameLoaded');var I=v.element.$.scrollHeight;if(c&&b.quirks&&I>0)I+=(F.$.offsetHeight||0)-(F.$.clientHeight||0)+3;F.setStyle('height',I+'px');u._.currentBlock.element.setStyle('display','none').removeStyle('display');}else F.removeStyle('height');var J=u.element,K=J.getWindow(),L=K.getScrollPosition(),M=K.getViewPaneSize(),N={height:J.$.offsetHeight,width:J.$.offsetWidth};if(A?B<0:B+N.width>M.width+L.x)B+=N.width*(A?1:-1);if(C+N.height>M.height+L.y)C-=N.height;if(c){var O=new h(w.$.offsetParent),P=O;if(P.getName()=='html')P=P.getDocument().getBody();if(P.getComputedStyle('direction')=='rtl')if(b.ie8Compat)B-=w.getDocument().getDocumentElement().$.scrollLeft*2;else B-=O.$.scrollWidth-O.$.clientWidth;}var Q=w.getFirst(),R;if(R=Q.getCustomData('activePanel'))R.onHide&&R.onHide.call(this,1);Q.setCustomData('activePanel',this); +w.setStyles({top:C+'px',left:B+'px'});w.setOpacity(1);},this);u.isLoaded?E():u.onLoad=E;e.setTimeout(function(){x.$.contentWindow.focus();this.allowBlur(true);},0,this);},b.air?200:0,this);this.visible=1;if(this.onShow)this.onShow.call(this);n=0;},hide:function(p){var r=this;if(r.visible&&(!r.onHide||r.onHide.call(r)!==true)){r.hideChild();b.gecko&&r._.iframe.getFrameDocument().$.activeElement.blur();r.element.setStyle('display','none');r.visible=0;r.element.getFirst().removeCustomData('activePanel');var q=p!==false&&r._.returnFocus;if(q){if(b.webkit&&q.type)q.getWindow().$.focus();q.focus();}}},allowBlur:function(p){var q=this._.panel;if(p!=undefined)q.allowBlur=p;return q.allowBlur;},showAsChild:function(p,q,r,s,t,u){if(this._.activeChild==p&&p._.panel._.offsetParentId==r.getId())return;this.hideChild();p.onHide=e.bind(function(){e.setTimeout(function(){if(!this._.focused)this.hide();},0,this);},this);this._.activeChild=p;this._.focused=false;p.showBlock(q,r,s,t,u);if(b.ie7Compat||b.ie8&&b.ie6Compat)setTimeout(function(){p.element.getChild(0).$.style.cssText+='';},100);},hideChild:function(){var p=this._.activeChild;if(p){delete p.onHide;delete p._.returnFocus;delete this._.activeChild;p.hide();}}}});a.on('instanceDestroyed',function(){var p=e.isEmpty(a.instances);for(var q in m){var r=m[q];if(p)r.destroy();else r.element.hide();}p&&(m={});});})();j.add('menu',{beforeInit:function(m){var n=m.config.menu_groups.split(','),o=m._.menuGroups={},p=m._.menuItems={};for(var q=0;q<n.length;q++)o[n[q]]=q+1;m.addMenuGroup=function(r,s){o[r]=s||100;};m.addMenuItem=function(r,s){if(o[s.group])p[r]=new a.menuItem(this,r,s);};m.addMenuItems=function(r){for(var s in r)this.addMenuItem(s,r[s]);};m.getMenuItem=function(r){return p[r];};m.removeMenuItem=function(r){delete p[r];};},requires:['floatpanel']});(function(){a.menu=e.createClass({$:function(n,o){var r=this;o=r._.definition=o||{};r.id=e.getNextId();r.editor=n;r.items=[];r._.listeners=[];r._.level=o.level||1;var p=e.extend({},o.panel,{css:n.skin.editor.css,level:r._.level-1,block:{}}),q=p.block.attributes=p.attributes||{};!q.role&&(q.role='menu');r._.panelDefinition=p;},_:{onShow:function(){var v=this;var n=v.editor.getSelection();if(c)n&&n.lock();var o=n&&n.getStartElement(),p=v._.listeners,q=[];v.removeAll();for(var r=0;r<p.length;r++){var s=p[r](o,n);if(s)for(var t in s){var u=v.editor.getMenuItem(t);if(u&&(!u.command||v.editor.getCommand(u.command).state)){u.state=s[t];v.add(u);}}}},onClick:function(n){this.hide(false); +if(n.onClick)n.onClick();else if(n.command)this.editor.execCommand(n.command);},onEscape:function(n){var o=this.parent;if(o){o._.panel.hideChild();var p=o._.panel._.panel._.currentBlock,q=p._.focusIndex;p._.markItem(q);}else if(n==27)this.hide();return false;},onHide:function(){if(c){var n=this.editor.getSelection();n&&n.unlock();}this.onHide&&this.onHide();},showSubMenu:function(n){var v=this;var o=v._.subMenu,p=v.items[n],q=p.getItems&&p.getItems();if(!q){v._.panel.hideChild();return;}var r=v._.panel.getBlock(v.id);r._.focusIndex=n;if(o)o.removeAll();else{o=v._.subMenu=new a.menu(v.editor,e.extend({},v._.definition,{level:v._.level+1},true));o.parent=v;o._.onClick=e.bind(v._.onClick,v);}for(var s in q){var t=v.editor.getMenuItem(s);if(t){t.state=q[s];o.add(t);}}var u=v._.panel.getBlock(v.id).element.getDocument().getById(v.id+String(n));o.show(u,2);}},proto:{add:function(n){if(!n.order)n.order=this.items.length;this.items.push(n);},removeAll:function(){this.items=[];},show:function(n,o,p,q){if(!this.parent){this._.onShow();if(!this.items.length)return;}o=o||(this.editor.lang.dir=='rtl'?2:1);var r=this.items,s=this.editor,t=this._.panel,u=this._.element;if(!t){t=this._.panel=new k.floatPanel(this.editor,a.document.getBody(),this._.panelDefinition,this._.level);t.onEscape=e.bind(function(F){if(this._.onEscape(F)===false)return false;},this);t.onHide=e.bind(function(){this._.onHide&&this._.onHide();},this);var v=t.addBlock(this.id,this._.panelDefinition.block);v.autoSize=true;var w=v.keys;w[40]='next';w[9]='next';w[38]='prev';w[2228224+9]='prev';w[s.lang.dir=='rtl'?37:39]=c?'mouseup':'click';w[32]=c?'mouseup':'click';c&&(w[13]='mouseup');u=this._.element=v.element;u.addClass(s.skinClass);var x=u.getDocument();x.getBody().setStyle('overflow','hidden');x.getElementsByTag('html').getItem(0).setStyle('overflow','hidden');this._.itemOverFn=e.addFunction(function(F){var G=this;clearTimeout(G._.showSubTimeout);G._.showSubTimeout=e.setTimeout(G._.showSubMenu,s.config.menu_subMenuDelay||400,G,[F]);},this);this._.itemOutFn=e.addFunction(function(F){clearTimeout(this._.showSubTimeout);},this);this._.itemClickFn=e.addFunction(function(F){var H=this;var G=H.items[F];if(G.state==0){H.hide();return;}if(G.getItems)H._.showSubMenu(F);else H._.onClick(G);},this);}m(r);var y=s.container.getChild(1),z=y.hasClass('cke_mixed_dir_content')?' cke_mixed_dir_content':'',A=['<div class="cke_menu'+z+'" role="presentation">'],B=r.length,C=B&&r[0].group;for(var D=0;D<B;D++){var E=r[D];if(C!=E.group){A.push('<div class="cke_menuseparator" role="separator"></div>'); +C=E.group;}E.render(this,D,A);}A.push('</div>');u.setHtml(A.join(''));k.fire('ready',this);if(this.parent)this.parent._.panel.showAsChild(t,this.id,n,o,p,q);else t.showBlock(this.id,n,o,p,q);s.fire('menuShow',[t]);},addListener:function(n){this._.listeners.push(n);},hide:function(n){var o=this;o._.onHide&&o._.onHide();o._.panel&&o._.panel.hide(n);}}});function m(n){n.sort(function(o,p){if(o.group<p.group)return-1;else if(o.group>p.group)return 1;return o.order<p.order?-1:o.order>p.order?1:0;});};a.menuItem=e.createClass({$:function(n,o,p){var q=this;e.extend(q,p,{order:0,className:'cke_button_'+o});q.group=n._.menuGroups[q.group];q.editor=n;q.name=o;},proto:{render:function(n,o,p){var w=this;var q=n.id+String(o),r=typeof w.state=='undefined'?2:w.state,s=' cke_'+(r==1?'on':r==0?'disabled':'off'),t=w.label;if(w.className)s+=' '+w.className;var u=w.getItems;p.push('<span class="cke_menuitem'+(w.icon&&w.icon.indexOf('.png')==-1?' cke_noalphafix':'')+'">'+'<a id="',q,'" class="',s,'" href="javascript:void(\'',(w.label||'').replace("'",''),'\')" title="',w.label,'" tabindex="-1"_cke_focus=1 hidefocus="true" role="menuitem"'+(u?'aria-haspopup="true"':'')+(r==0?'aria-disabled="true"':'')+(r==1?'aria-pressed="true"':''));if(b.opera||b.gecko&&b.mac)p.push(' onkeypress="return false;"');if(b.gecko)p.push(' onblur="this.style.cssText = this.style.cssText;"');var v=(w.iconOffset||0)*-16;p.push(' onmouseover="CKEDITOR.tools.callFunction(',n._.itemOverFn,',',o,');" onmouseout="CKEDITOR.tools.callFunction(',n._.itemOutFn,',',o,');" '+(c?'onclick="return false;" onmouseup':'onclick')+'="CKEDITOR.tools.callFunction(',n._.itemClickFn,',',o,'); return false;"><span class="cke_icon_wrapper"><span class="cke_icon"'+(w.icon?' style="background-image:url('+a.getUrl(w.icon)+');background-position:0 '+v+'px;"':'')+'></span></span>'+'<span class="cke_label">');if(u)p.push('<span class="cke_menuarrow">','<span>&#',w.editor.lang.dir=='rtl'?'9668':'9658',';</span>','</span>');p.push(t,'</span></a></span>');}}});})();i.menu_groups='clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div';(function(){var m;j.add('editingblock',{init:function(n){if(!n.config.editingBlock)return;n.on('themeSpace',function(o){if(o.data.space=='contents')o.data.html+='<br>';});n.on('themeLoaded',function(){n.fireOnce('editingBlockReady');});n.on('uiReady',function(){n.setMode(n.config.startupMode); +});n.on('afterSetData',function(){if(!m){function o(){m=true;n.getMode().loadData(n.getData());m=false;};if(n.mode)o();else n.on('mode',function(){if(n.mode){o();n.removeListener('mode',arguments.callee);}});}});n.on('beforeGetData',function(){if(!m&&n.mode){m=true;n.setData(n.getMode().getData(),null,1);m=false;}});n.on('getSnapshot',function(o){if(n.mode)o.data=n.getMode().getSnapshotData();});n.on('loadSnapshot',function(o){if(n.mode)n.getMode().loadSnapshotData(o.data);});n.on('mode',function(o){o.removeListener();b.webkit&&n.container.on('focus',function(){n.focus();});if(n.config.startupFocus)n.focus();setTimeout(function(){n.fireOnce('instanceReady');a.fire('instanceReady',null,n);},0);});n.on('destroy',function(){var o=this;if(o.mode)o._.modes[o.mode].unload(o.getThemeSpace('contents'));});}});a.editor.prototype.mode='';a.editor.prototype.addMode=function(n,o){o.name=n;(this._.modes||(this._.modes={}))[n]=o;};a.editor.prototype.setMode=function(n){this.fire('beforeSetMode',{newMode:n});var o,p=this.getThemeSpace('contents'),q=this.checkDirty();if(this.mode){if(n==this.mode)return;this.fire('beforeModeUnload');var r=this.getMode();o=r.getData();r.unload(p);this.mode='';}p.setHtml('');var s=this.getMode(n);if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode "'+n+'".';if(!q)this.on('mode',function(){this.resetDirty();this.removeListener('mode',arguments.callee);});s.load(p,typeof o!='string'?this.getData():o);};a.editor.prototype.getMode=function(n){return this._.modes&&this._.modes[n||this.mode];};a.editor.prototype.focus=function(){this.forceNextSelectionCheck();var n=this.getMode();if(n)n.focus();};})();i.startupMode='wysiwyg';i.editingBlock=true;(function(){function m(){var B=this;try{var y=B.getSelection();if(!y||!y.document.getWindow().$)return;var z=y.getStartElement(),A=new d.elementPath(z);if(!A.compare(B._.selectionPreviousPath)){B._.selectionPreviousPath=A;B.fire('selectionChange',{selection:y,path:A,element:z});}}catch(C){}};var n,o;function p(){o=true;if(n)return;q.call(this);n=e.setTimeout(q,200,this);};function q(){n=null;if(o){e.setTimeout(m,0,this);o=false;}};function r(y){function z(D){return D&&D.type==1&&D.getName() in f.$removeEmpty;};function A(D){var E=y.document.getBody();return!D.is('body')&&E.getChildCount()==1;};var B=y.startContainer,C=y.startOffset;if(B.type==3)return false;return!e.trim(B.getHtml())?z(B)||A(B):z(B.getChild(C-1))||z(B.getChild(C));};var s={modes:{wysiwyg:1,source:1},readOnly:c||b.webkit,exec:function(y){switch(y.mode){case 'wysiwyg':y.document.$.execCommand('SelectAll',false,null); +y.forceNextSelectionCheck();y.selectionChange();break;case 'source':var z=y.textarea.$;if(c)z.createTextRange().execCommand('SelectAll');else{z.selectionStart=0;z.selectionEnd=z.value.length;}z.focus();}},canUndo:false};function t(y){w(y);var z=y.createText('â');y.setCustomData('cke-fillingChar',z);return z;};function u(y){return y&&y.getCustomData('cke-fillingChar');};function v(y){var z=y&&u(y);if(z)if(z.getCustomData('ready'))w(y);else z.setCustomData('ready',1);};function w(y){var z=y&&y.removeCustomData('cke-fillingChar');if(z){z.setText(z.getText().replace(/\u200B/g,''));z=0;}};j.add('selection',{init:function(y){if(b.webkit){y.on('selectionChange',function(){v(y.document);});y.on('beforeSetMode',function(){w(y.document);});y.on('key',function(D){switch(D.data.keyCode){case 13:case 2228224+13:case 37:case 39:case 8:w(y.document);}},null,null,10);var z,A;function B(){var D=y.document,E=u(D);if(E){var F=D.$.defaultView.getSelection();if(F.type=='Caret'&&F.anchorNode==E.$)A=1;z=E.getText();E.setText(z.replace(/\u200B/g,''));}};function C(){var D=y.document,E=u(D);if(E){E.setText(z);if(A){D.$.defaultView.getSelection().setPosition(E.$,E.getLength());A=0;}}};y.on('beforeUndoImage',B);y.on('afterUndoImage',C);y.on('beforeGetData',B,null,null,0);y.on('getData',C);}y.on('contentDom',function(){var D=y.document,E=D.getBody(),F=D.getDocumentElement();if(c){var G,H,I=1;E.on('focusin',function(M){if(M.data.$.srcElement.nodeName!='BODY')return;if(G){if(I){try{G.select();}catch(O){}var N=D.getCustomData('cke_locked_selection');if(N){N.unlock();N.lock();}}G=null;}});E.on('focus',function(){H=1;L();});E.on('beforedeactivate',function(M){if(M.data.$.toElement)return;H=0;I=1;});if(c&&b.version<8)y.on('blur',function(M){try{y.document&&y.document.$.selection.empty();}catch(N){}});F.on('mousedown',function(){I=0;});F.on('mouseup',function(){I=1;});if(c&&(b.ie7Compat||b.version<8||b.quirks))F.on('click',function(M){if(M.data.getTarget().getName()=='html')y.getSelection().getRanges()[0].select();});var J;E.on('mousedown',function(M){if(M.data.$.button==2){var N=y.document.$.selection;if(N.type=='None')J=y.window.getScrollPosition();}K();});E.on('mouseup',function(M){if(M.data.$.button==2&&J){y.document.$.documentElement.scrollLeft=J.x;y.document.$.documentElement.scrollTop=J.y;}J=null;H=1;setTimeout(function(){L(true);},0);});E.on('keydown',K);E.on('keyup',function(){H=1;L();});D.on('selectionchange',L);function K(){H=0;};function L(M){if(H){var N=y.document,O=y.getSelection(),P=O&&O.getNative(); +if(M&&P&&P.type=='None')if(!N.$.queryCommandEnabled('InsertImage')){e.setTimeout(L,50,this,true);return;}var Q;if(P&&P.type&&P.type!='Control'&&(Q=P.createRange())&&(Q=Q.parentElement())&&(Q=Q.nodeName)&&Q.toLowerCase() in {input:1,textarea:1})return;G=P&&O.getRanges()[0];p.call(y);}};}else{D.on('mouseup',p,y);D.on('keyup',p,y);}});y.on('contentDomUnload',y.forceNextSelectionCheck,y);y.addCommand('selectAll',s);y.ui.addButton('SelectAll',{label:y.lang.selectAll,command:'selectAll'});y.selectionChange=p;b.ie9Compat&&y.on('destroy',function(){var D=y.getSelection();D&&D.getNative().clear();},null,null,9);}});a.editor.prototype.getSelection=function(){return this.document&&this.document.getSelection();};a.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath;};g.prototype.getSelection=function(){var y=new d.selection(this);return!y||y.isInvalid?null:y;};a.SELECTION_NONE=1;a.SELECTION_TEXT=2;a.SELECTION_ELEMENT=3;d.selection=function(y){var B=this;var z=y.getCustomData('cke_locked_selection');if(z)return z;B.document=y;B.isLocked=0;B._={cache:{}};if(c){var A=B.getNative().createRange();if(!A||A.item&&A.item(0).ownerDocument!=B.document.$||A.parentElement&&A.parentElement().ownerDocument!=B.document.$)B.isInvalid=true;}return B;};var x={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};d.selection.prototype={getNative:c?function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.$.selection);}:function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.getWindow().$.getSelection());},getType:c?function(){var y=this._.cache;if(y.type)return y.type;var z=1;try{var A=this.getNative(),B=A.type;if(B=='Text')z=2;if(B=='Control')z=3;if(A.createRange().parentElement)z=2;}catch(C){}return y.type=z;}:function(){var y=this._.cache;if(y.type)return y.type;var z=2,A=this.getNative();if(!A)z=1;else if(A.rangeCount==1){var B=A.getRangeAt(0),C=B.startContainer;if(C==B.endContainer&&C.nodeType==1&&B.endOffset-B.startOffset==1&&x[C.childNodes[B.startOffset].nodeName.toLowerCase()])z=3;}return y.type=z;},getRanges:(function(){var y=c?(function(){function z(B){return new d.node(B).getIndex();};var A=function(B,C){B=B.duplicate();B.collapse(C);var D=B.parentElement(),E=D.ownerDocument;if(!D.hasChildNodes())return{container:D,offset:0};var F=D.children,G,H,I=B.duplicate(),J=0,K=F.length-1,L=-1,M,N;while(J<=K){L=Math.floor((J+K)/2); +G=F[L];I.moveToElementText(G);M=I.compareEndPoints('StartToStart',B);if(M>0)K=L-1;else if(M<0)J=L+1;else if(b.ie9Compat&&G.tagName=='BR'){var O='cke_range_marker';B.execCommand('CreateBookmark',false,O);G=E.getElementsByName(O)[0];var P=z(G);D.removeChild(G);return{container:D,offset:P};}else return{container:D,offset:z(G)};}if(L==-1||L==F.length-1&&M<0){I.moveToElementText(D);I.setEndPoint('StartToStart',B);N=I.text.replace(/(\r\n|\r)/g,'\n').length;F=D.childNodes;if(!N){G=F[F.length-1];if(G.nodeType==1)return{container:D,offset:F.length};else return{container:G,offset:G.nodeValue.length};}var Q=F.length;while(N>0)N-=F[--Q].nodeValue.length;return{container:F[Q],offset:-N};}else{I.collapse(M>0?true:false);I.setEndPoint(M>0?'StartToStart':'EndToStart',B);N=I.text.replace(/(\r\n|\r)/g,'\n').length;if(!N)return{container:D,offset:z(G)+(M>0?0:1)};while(N>0)try{H=G[M>0?'previousSibling':'nextSibling'];N-=H.nodeValue.length;G=H;}catch(R){return{container:D,offset:z(G)};}return{container:G,offset:M>0?-N:G.nodeValue.length+N};}};return function(){var L=this;var B=L.getNative(),C=B&&B.createRange(),D=L.getType(),E;if(!B)return[];if(D==2){E=new d.range(L.document);var F=A(C,true);E.setStart(new d.node(F.container),F.offset);F=A(C);E.setEnd(new d.node(F.container),F.offset);if(E.endContainer.getPosition(E.startContainer)&4&&E.endOffset<=E.startContainer.getIndex())E.collapse();return[E];}else if(D==3){var G=[];for(var H=0;H<C.length;H++){var I=C.item(H),J=I.parentNode,K=0;E=new d.range(L.document);for(;K<J.childNodes.length&&J.childNodes[K]!=I;K++){}E.setStart(new d.node(J),K);E.setEnd(new d.node(J),K+1);G.push(E);}return G;}return[];};})():function(){var z=[],A,B=this.document,C=this.getNative();if(!C)return z;if(!C.rangeCount){A=new d.range(B);A.moveToElementEditStart(B.getBody());z.push(A);}for(var D=0;D<C.rangeCount;D++){var E=C.getRangeAt(D);A=new d.range(B);A.setStart(new d.node(E.startContainer),E.startOffset);A.setEnd(new d.node(E.endContainer),E.endOffset);z.push(A);}return z;};return function(z){var A=this._.cache;if(A.ranges&&!z)return A.ranges;else if(!A.ranges)A.ranges=new d.rangeList(y.call(this));if(z){var B=A.ranges;for(var C=0;C<B.length;C++){var D=B[C],E=D.getCommonAncestor();if(E.isReadOnly())B.splice(C,1);if(D.collapsed)continue;var F=D.startContainer,G=D.endContainer,H=D.startOffset,I=D.endOffset,J=D.clone(),K;if(K=F.isReadOnly())D.setStartAfter(K);if(F&&F.type==3)if(H>=F.getLength())J.setStartAfter(F);else J.setStartBefore(F);if(G&&G.type==3)if(!I)J.setEndBefore(G); +else J.setEndAfter(G);var L=new d.walker(J);L.evaluator=function(M){if(M.type==1&&M.isReadOnly()){var N=D.clone();D.setEndBefore(M);if(D.collapsed)B.splice(C--,1);if(!(M.getPosition(J.endContainer)&16)){N.setStartAfter(M);if(!N.collapsed)B.splice(C+1,0,N);}return true;}return false;};L.next();}}return A.ranges;};})(),getStartElement:function(){var F=this;var y=F._.cache;if(y.startElement!==undefined)return y.startElement;var z,A=F.getNative();switch(F.getType()){case 3:return F.getSelectedElement();case 2:var B=F.getRanges()[0];if(B){if(!B.collapsed){B.optimize();while(1){var C=B.startContainer,D=B.startOffset;if(D==(C.getChildCount?C.getChildCount():C.getLength())&&!C.isBlockBoundary())B.setStartAfter(C);else break;}z=B.startContainer;if(z.type!=1)return z.getParent();z=z.getChild(B.startOffset);if(!z||z.type!=1)z=B.startContainer;else{var E=z.getFirst();while(E&&E.type==1){z=E;E=E.getFirst();}}}else{z=B.startContainer;if(z.type!=1)z=z.getParent();}z=z.$;}}return y.startElement=z?new h(z):null;},getSelectedElement:function(){var y=this._.cache;if(y.selectedElement!==undefined)return y.selectedElement;var z=this,A=e.tryThese(function(){return z.getNative().createRange().item(0);},function(){var B=z.getRanges()[0],C,D;for(var E=2;E&&!((C=B.getEnclosedNode())&&C.type==1&&x[C.getName()]&&(D=C));E--)B.shrink(1);return D.$;});return y.selectedElement=A?new h(A):null;},getSelectedText:function(){var y=this._.cache;if(y.selectedText!==undefined)return y.selectedText;var z='',A=this.getNative();if(this.getType()==2)z=c?A.createRange().text:A.toString();return y.selectedText=z;},lock:function(){var y=this;y.getRanges();y.getStartElement();y.getSelectedElement();y.getSelectedText();y._.cache.nativeSel={};y.isLocked=1;y.document.setCustomData('cke_locked_selection',y);},unlock:function(y){var D=this;var z=D.document,A=z.getCustomData('cke_locked_selection');if(A){z.setCustomData('cke_locked_selection',null);if(y){var B=A.getSelectedElement(),C=!B&&A.getRanges();D.isLocked=0;D.reset();z.getBody().focus();if(B)D.selectElement(B);else D.selectRanges(C);}}if(!A||!y){D.isLocked=0;D.reset();}},reset:function(){this._.cache={};},selectElement:function(y){var A=this;if(A.isLocked){var z=new d.range(A.document);z.setStartBefore(y);z.setEndAfter(y);A._.cache.selectedElement=y;A._.cache.startElement=y;A._.cache.ranges=new d.rangeList(z);A._.cache.type=3;return;}z=new d.range(y.getDocument());z.setStartBefore(y);z.setEndAfter(y);z.select();A.document.fire('selectionchange');A.reset(); +},selectRanges:function(y){var M=this;if(M.isLocked){M._.cache.selectedElement=null;M._.cache.startElement=y[0]&&y[0].getTouchedStartNode();M._.cache.ranges=new d.rangeList(y);M._.cache.type=2;return;}if(c){if(y.length>1){var z=y[y.length-1];y[0].setEnd(z.endContainer,z.endOffset);y.length=1;}if(y[0])y[0].select();M.reset();}else{var A=M.getNative();if(!A)return;if(y.length){A.removeAllRanges();b.webkit&&w(M.document);}for(var B=0;B<y.length;B++){if(B<y.length-1){var C=y[B],D=y[B+1],E=C.clone();E.setStart(C.endContainer,C.endOffset);E.setEnd(D.startContainer,D.startOffset);if(!E.collapsed){E.shrink(1,true);var F=E.getCommonAncestor(),G=E.getEnclosedNode();if(F.isReadOnly()||G&&G.isReadOnly()){D.setStart(C.startContainer,C.startOffset);y.splice(B--,1);continue;}}}var H=y[B],I=M.document.$.createRange(),J=H.startContainer;if(H.collapsed&&(b.opera||b.gecko&&b.version<10900)&&J.type==1&&!J.getChildCount())J.appendText('');if(H.collapsed&&b.webkit&&r(H)){var K=t(M.document);H.insertNode(K);var L=K.getNext();if(L&&!K.getPrevious()&&L.type==1&&L.getName()=='br'){w(M.document);H.moveToPosition(L,3);}else H.moveToPosition(K,4);}I.setStart(H.startContainer.$,H.startOffset);try{I.setEnd(H.endContainer.$,H.endOffset);}catch(N){if(N.toString().indexOf('NS_ERROR_ILLEGAL_VALUE')>=0){H.collapse(1);I.setEnd(H.endContainer.$,H.endOffset);}else throw N;}A.addRange(I);}M.reset();}},createBookmarks:function(y){return this.getRanges().createBookmarks(y);},createBookmarks2:function(y){return this.getRanges().createBookmarks2(y);},selectBookmarks:function(y){var z=[];for(var A=0;A<y.length;A++){var B=new d.range(this.document);B.moveToBookmark(y[A]);z.push(B);}this.selectRanges(z);return this;},getCommonAncestor:function(){var y=this.getRanges(),z=y[0].startContainer,A=y[y.length-1].endContainer;return z.getCommonAncestor(A);},scrollIntoView:function(){var y=this.getStartElement();y.scrollIntoView();}};})();(function(){var m=d.walker.whitespaces(true),n=/\ufeff|\u00a0/,o={table:1,tbody:1,tr:1};d.range.prototype.select=c?function(p){var A=this;var q=A.collapsed,r,s,t,u=A.getEnclosedNode();if(u)try{t=A.document.$.body.createControlRange();t.addElement(u.$);t.select();return;}catch(B){}if(A.startContainer.type==1&&A.startContainer.getName() in o||A.endContainer.type==1&&A.endContainer.getName() in o)A.shrink(1,true);var v=A.createBookmark(),w=v.startNode,x;if(!q)x=v.endNode;t=A.document.$.body.createTextRange();t.moveToElementText(w.$);t.moveStart('character',1);if(x){var y=A.document.$.body.createTextRange(); +y.moveToElementText(x.$);t.setEndPoint('EndToEnd',y);t.moveEnd('character',-1);}else{var z=w.getNext(m);r=!(z&&z.getText&&z.getText().match(n))&&(p||!w.hasPrevious()||w.getPrevious().is&&w.getPrevious().is('br'));s=A.document.createElement('span');s.setHtml('');s.insertBefore(w);if(r)A.document.createText('\ufeff').insertBefore(w);}A.setStartBefore(w);w.remove();if(q){if(r){t.moveStart('character',-1);t.select();A.document.$.selection.clear();}else t.select();A.moveToPosition(s,3);s.remove();}else{A.setEndBefore(x);x.remove();t.select();}A.document.fire('selectionchange');}:function(){this.document.getSelection().selectRanges([this]);};})();(function(){var m=a.htmlParser.cssStyle,n=e.cssLength,o=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i;function p(r,s){var t=o.exec(r),u=o.exec(s);if(t){if(!t[2]&&u[2]=='px')return u[1];if(t[2]=='px'&&!u[2])return u[1]+'px';}return s;};var q={elements:{$:function(r){var s=r.attributes,t=s&&s['data-cke-realelement'],u=t&&new a.htmlParser.fragment.fromHtml(decodeURIComponent(t)),v=u&&u.children[0];if(v&&r.attributes['data-cke-resizable']){var w=new m(r).rules,x=v.attributes,y=w.width,z=w.height;y&&(x.width=p(x.width,y));z&&(x.height=p(x.height,z));}return v;}}};j.add('fakeobjects',{requires:['htmlwriter'],afterInit:function(r){var s=r.dataProcessor,t=s&&s.htmlFilter;if(t)t.addRules(q);}});a.editor.prototype.createFakeElement=function(r,s,t,u){var v=this.lang.fakeobjects,w=v[t]||v.unknown,x={'class':s,src:a.getUrl('images/spacer.gif'),'data-cke-realelement':encodeURIComponent(r.getOuterHtml()),'data-cke-real-node-type':r.type,alt:w,title:w,align:r.getAttribute('align')||''};if(t)x['data-cke-real-element-type']=t;if(u){x['data-cke-resizable']=u;var y=new m(),z=r.getAttribute('width'),A=r.getAttribute('height');z&&(y.rules.width=n(z));A&&(y.rules.height=n(A));y.populate(x);}return this.document.createElement('img',{attributes:x});};a.editor.prototype.createFakeParserElement=function(r,s,t,u){var v=this.lang.fakeobjects,w=v[t]||v.unknown,x,y=new a.htmlParser.basicWriter();r.writeHtml(y);x=y.getHtml();var z={'class':s,src:a.getUrl('images/spacer.gif'),'data-cke-realelement':encodeURIComponent(x),'data-cke-real-node-type':r.type,alt:w,title:w,align:r.attributes.align||''};if(t)z['data-cke-real-element-type']=t;if(u){z['data-cke-resizable']=u;var A=r.attributes,B=new m(),C=A.width,D=A.height;C!=undefined&&(B.rules.width=n(C));D!=undefined&&(B.rules.height=n(D));B.populate(z);}return new a.htmlParser.element('img',z);};a.editor.prototype.restoreRealElement=function(r){if(r.data('cke-real-node-type')!=1)return null; +var s=h.createFromHtml(decodeURIComponent(r.data('cke-realelement')),this.document);if(r.data('cke-resizable')){var t=r.getStyle('width'),u=r.getStyle('height');t&&s.setAttribute('width',p(s.getAttribute('width'),t));u&&s.setAttribute('height',p(s.getAttribute('height'),u));}return s;};})();j.add('richcombo',{requires:['floatpanel','listblock','button'],beforeInit:function(m){m.ui.addHandler('richcombo',k.richCombo.handler);}});a.UI_RICHCOMBO='richcombo';k.richCombo=e.createClass({$:function(m){var o=this;e.extend(o,m,{title:m.label,modes:{wysiwyg:1}});var n=o.panel||{};delete o.panel;o.id=e.getNextNumber();o.document=n&&n.parent&&n.parent.getDocument()||a.document;n.className=(n.className||'')+' cke_rcombopanel';n.block={multiSelect:n.multiSelect,attributes:n.attributes};o._={panelDefinition:n,items:{},state:2};},statics:{handler:{create:function(m){return new k.richCombo(m);}}},proto:{renderHtml:function(m){var n=[];this.render(m,n);return n.join('');},render:function(m,n){var o=b,p='cke_'+this.id,q=e.addFunction(function(v){var y=this;var w=y._;if(w.state==0)return;y.createPanel(m);if(w.on){w.panel.hide();return;}y.commit();var x=y.getValue();if(x)w.list.mark(x);else w.list.unmarkAll();w.panel.showBlock(y.id,new h(v),4);},this),r={id:p,combo:this,focus:function(){var v=a.document.getById(p).getChild(1);v.focus();},clickFn:q};function s(){var w=this;var v=w.modes[m.mode]?2:0;w.setState(m.readOnly&&!w.readOnly?0:v);w.setValue('');};m.on('mode',s,this);!this.readOnly&&m.on('readOnly',s,this);var t=e.addFunction(function(v,w){v=new d.event(v);var x=v.getKeystroke();switch(x){case 13:case 32:case 40:e.callFunction(q,w);break;default:r.onkey(r,x);}v.preventDefault();}),u=e.addFunction(function(){r.onfocus&&r.onfocus();});r.keyDownFn=t;n.push('<span class="cke_rcombo" role="presentation">','<span id=',p);if(this.className)n.push(' class="',this.className,' cke_off"');n.push(' role="presentation">','<span id="'+p+'_label" class=cke_label>',this.label,'</span>','<a hidefocus=true title="',this.title,'" tabindex="-1"',o.gecko&&o.version>=10900&&!o.hc?'':" href=\"javascript:void('"+this.label+"')\"",' role="button" aria-labelledby="',p,'_label" aria-describedby="',p,'_text" aria-haspopup="true"');if(b.opera||b.gecko&&b.mac)n.push(' onkeypress="return false;"');if(b.gecko)n.push(' onblur="this.style.cssText = this.style.cssText;"');n.push(' onkeydown="CKEDITOR.tools.callFunction( ',t,', event, this );" onfocus="return CKEDITOR.tools.callFunction(',u,', event);" '+(c?'onclick="return false;" onmouseup':'onclick')+'="CKEDITOR.tools.callFunction(',q,', this); return false;"><span><span id="'+p+'_text" class="cke_text cke_inline_label">'+this.label+'</span>'+'</span>'+'<span class=cke_openbutton><span class=cke_icon>'+(b.hc?'▼':b.air?' ':'')+'</span></span>'+'</a>'+'</span>'+'</span>'); +if(this.onRender)this.onRender();return r;},createPanel:function(m){if(this._.panel)return;var n=this._.panelDefinition,o=this._.panelDefinition.block,p=n.parent||a.document.getBody(),q=new k.floatPanel(m,p,n),r=q.addListBlock(this.id,o),s=this;q.onShow=function(){if(s.className)this.element.getFirst().addClass(s.className+'_panel');s.setState(1);r.focus(!s.multiSelect&&s.getValue());s._.on=1;if(s.onOpen)s.onOpen();};q.onHide=function(t){if(s.className)this.element.getFirst().removeClass(s.className+'_panel');s.setState(s.modes&&s.modes[m.mode]?2:0);s._.on=0;if(!t&&s.onClose)s.onClose();};q.onEscape=function(){q.hide();};r.onClick=function(t,u){s.document.getWindow().focus();if(s.onClick)s.onClick.call(s,t,u);if(u)s.setValue(t,s._.items[t]);else s.setValue('');q.hide(false);};this._.panel=q;this._.list=r;q.getBlock(this.id).onHide=function(){s._.on=0;s.setState(2);};if(this.init)this.init();},setValue:function(m,n){var p=this;p._.value=m;var o=p.document.getById('cke_'+p.id+'_text');if(o){if(!(m||n)){n=p.label;o.addClass('cke_inline_label');}else o.removeClass('cke_inline_label');o.setHtml(typeof n!='undefined'?n:m);}},getValue:function(){return this._.value||'';},unmarkAll:function(){this._.list.unmarkAll();},mark:function(m){this._.list.mark(m);},hideItem:function(m){this._.list.hideItem(m);},hideGroup:function(m){this._.list.hideGroup(m);},showAll:function(){this._.list.showAll();},add:function(m,n,o){this._.items[m]=o||m;this._.list.add(m,n,o);},startGroup:function(m){this._.list.startGroup(m);},commit:function(){var m=this;if(!m._.committed){m._.list.commit();m._.committed=1;k.fire('ready',m);}m._.committed=1;},setState:function(m){var n=this;if(n._.state==m)return;n.document.getById('cke_'+n.id).setState(m);n._.state=m;}}});k.prototype.addRichCombo=function(m,n){this.add(m,'richcombo',n);};j.add('htmlwriter');a.htmlWriter=e.createClass({base:a.htmlParser.basicWriter,$:function(){var o=this;o.base();o.indentationChars='\t';o.selfClosingEnd=' />';o.lineBreakChars='\n';o.forceSimpleAmpersand=0;o.sortAttributes=1;o._.indent=0;o._.indentation='';o._.inPre=0;o._.rules={};var m=f;for(var n in e.extend({},m.$nonBodyContent,m.$block,m.$listItem,m.$tableContent))o.setRules(n,{indent:1,breakBeforeOpen:1,breakAfterOpen:1,breakBeforeClose:!m[n]['#'],breakAfterClose:1});o.setRules('br',{breakAfterOpen:1});o.setRules('title',{indent:0,breakAfterOpen:0});o.setRules('style',{indent:0,breakBeforeClose:1});o.setRules('pre',{indent:0});},proto:{openTag:function(m,n){var p=this; +var o=p._.rules[m];if(p._.indent)p.indentation();else if(o&&o.breakBeforeOpen){p.lineBreak();p.indentation();}p._.output.push('<',m);},openTagClose:function(m,n){var p=this;var o=p._.rules[m];if(n)p._.output.push(p.selfClosingEnd);else{p._.output.push('>');if(o&&o.indent)p._.indentation+=p.indentationChars;}if(o&&o.breakAfterOpen)p.lineBreak();m=='pre'&&(p._.inPre=1);},attribute:function(m,n){if(typeof n=='string'){this.forceSimpleAmpersand&&(n=n.replace(/&/g,'&'));n=e.htmlEncodeAttr(n);}this._.output.push(' ',m,'="',n,'"');},closeTag:function(m){var o=this;var n=o._.rules[m];if(n&&n.indent)o._.indentation=o._.indentation.substr(o.indentationChars.length);if(o._.indent)o.indentation();else if(n&&n.breakBeforeClose){o.lineBreak();o.indentation();}o._.output.push('</',m,'>');m=='pre'&&(o._.inPre=0);if(n&&n.breakAfterClose)o.lineBreak();},text:function(m){var n=this;if(n._.indent){n.indentation();!n._.inPre&&(m=e.ltrim(m));}n._.output.push(m);},comment:function(m){if(this._.indent)this.indentation();this._.output.push('<!--',m,'-->');},lineBreak:function(){var m=this;if(!m._.inPre&&m._.output.length>0)m._.output.push(m.lineBreakChars);m._.indent=1;},indentation:function(){var m=this;if(!m._.inPre)m._.output.push(m._.indentation);m._.indent=0;},setRules:function(m,n){var o=this._.rules[m];if(o)e.extend(o,n,true);else this._.rules[m]=n;}}});j.add('menubutton',{requires:['button','menu'],beforeInit:function(m){m.ui.addHandler('menubutton',k.menuButton.handler);}});a.UI_MENUBUTTON='menubutton';(function(){var m=function(n){var o=this._;if(o.state===0)return;o.previousState=o.state;var p=o.menu;if(!p){p=o.menu=new a.menu(n,{panel:{className:n.skinClass+' cke_contextmenu',attributes:{'aria-label':n.lang.common.options}}});p.onHide=e.bind(function(){this.setState(this.modes&&this.modes[n.mode]?o.previousState:0);},this);if(this.onMenu)p.addListener(this.onMenu);}if(o.on){p.hide();return;}this.setState(1);p.show(a.document.getById(this._.id),4);};k.menuButton=e.createClass({base:k.button,$:function(n){var o=n.panel;delete n.panel;this.base(n);this.hasArrow=true;this.click=m;},statics:{handler:{create:function(n){return new k.menuButton(n);}}}});})();j.add('dialogui');(function(){var m=function(u){var x=this;x._||(x._={});x._['default']=x._.initValue=u['default']||'';x._.required=u.required||false;var v=[x._];for(var w=1;w<arguments.length;w++)v.push(arguments[w]);v.push(true);e.extend.apply(e,v);return x._;},n={build:function(u,v,w){return new k.dialog.textInput(u,v,w); +}},o={build:function(u,v,w){return new k.dialog[v.type](u,v,w);}},p={build:function(u,v,w){var x=v.children,y,z=[],A=[];for(var B=0;B<x.length&&(y=x[B]);B++){var C=[];z.push(C);A.push(a.dialog._.uiElementBuilders[y.type].build(u,y,C));}return new k.dialog[v.type](u,A,z,w,v);}},q={isChanged:function(){return this.getValue()!=this.getInitValue();},reset:function(u){this.setValue(this.getInitValue(),u);},setInitValue:function(){this._.initValue=this.getValue();},resetInitValue:function(){this._.initValue=this._['default'];},getInitValue:function(){return this._.initValue;}},r=e.extend({},k.dialog.uiElement.prototype.eventProcessors,{onChange:function(u,v){if(!this._.domOnChangeRegistered){u.on('load',function(){this.getInputElement().on('change',function(){if(!u.parts.dialog.isVisible())return;this.fire('change',{value:this.getValue()});},this);},this);this._.domOnChangeRegistered=true;}this.on('change',v);}},true),s=/^on([A-Z]\w+)/,t=function(u){for(var v in u){if(s.test(v)||v=='title'||v=='type')delete u[v];}return u;};e.extend(k.dialog,{labeledElement:function(u,v,w,x){if(arguments.length<4)return;var y=m.call(this,v);y.labelId=e.getNextId()+'_label';var z=this._.children=[],A=function(){var B=[],C=v.required?' cke_required':'';if(v.labelLayout!='horizontal')B.push('<label class="cke_dialog_ui_labeled_label'+C+'" ',' id="'+y.labelId+'"',' for="'+y.inputId+'"',(v.labelStyle?' style="'+v.labelStyle+'"':'')+'>',v.label,'</label>','<div class="cke_dialog_ui_labeled_content"'+(v.controlStyle?' style="'+v.controlStyle+'"':'')+' role="presentation">',x.call(this,u,v),'</div>');else{var D={type:'hbox',widths:v.widths,padding:0,children:[{type:'html',html:'<label class="cke_dialog_ui_labeled_label'+C+'"'+' id="'+y.labelId+'"'+' for="'+y.inputId+'"'+(v.labelStyle?' style="'+v.labelStyle+'"':'')+'>'+e.htmlEncode(v.label)+'</span>'},{type:'html',html:'<span class="cke_dialog_ui_labeled_content"'+(v.controlStyle?' style="'+v.controlStyle+'"':'')+'>'+x.call(this,u,v)+'</span>'}]};a.dialog._.uiElementBuilders.hbox.build(u,D,B);}return B.join('');};k.dialog.uiElement.call(this,u,v,w,'div',null,{role:'presentation'},A);},textInput:function(u,v,w){if(arguments.length<3)return;m.call(this,v);var x=this._.inputId=e.getNextId()+'_textInput',y={'class':'cke_dialog_ui_input_'+v.type,id:x,type:'text'},z;if(v.validate)this.validate=v.validate;if(v.maxLength)y.maxlength=v.maxLength;if(v.size)y.size=v.size;if(v.inputStyle)y.style=v.inputStyle;var A=this,B=false;u.on('load',function(){A.getInputElement().on('keydown',function(D){if(D.data.getKeystroke()==13)B=true; +});A.getInputElement().on('keyup',function(D){if(D.data.getKeystroke()==13&&B){u.getButton('ok')&&setTimeout(function(){u.getButton('ok').click();},0);B=false;}},null,null,1000);});var C=function(){var D=['<div class="cke_dialog_ui_input_',v.type,'" role="presentation"'];if(v.width)D.push('style="width:'+v.width+'" ');D.push('><input ');y['aria-labelledby']=this._.labelId;this._.required&&(y['aria-required']=this._.required);for(var E in y)D.push(E+'="'+y[E]+'" ');D.push(' /></div>');return D.join('');};k.dialog.labeledElement.call(this,u,v,w,C);},textarea:function(u,v,w){if(arguments.length<3)return;m.call(this,v);var x=this,y=this._.inputId=e.getNextId()+'_textarea',z={};if(v.validate)this.validate=v.validate;z.rows=v.rows||5;z.cols=v.cols||20;if(typeof v.inputStyle!='undefined')z.style=v.inputStyle;var A=function(){z['aria-labelledby']=this._.labelId;this._.required&&(z['aria-required']=this._.required);var B=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea class="cke_dialog_ui_input_textarea" id="',y,'" '];for(var C in z)B.push(C+'="'+e.htmlEncode(z[C])+'" ');B.push('>',e.htmlEncode(x._['default']),'</textarea></div>');return B.join('');};k.dialog.labeledElement.call(this,u,v,w,A);},checkbox:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v,{'default':!!v['default']});if(v.validate)this.validate=v.validate;var y=function(){var z=e.extend({},v,{id:v.id?v.id+'_checkbox':e.getNextId()+'_checkbox'},true),A=[],B=e.getNextId()+'_label',C={'class':'cke_dialog_ui_checkbox_input',type:'checkbox','aria-labelledby':B};t(z);if(v['default'])C.checked='checked';if(typeof z.inputStyle!='undefined')z.style=z.inputStyle;x.checkbox=new k.dialog.uiElement(u,z,A,'input',null,C);A.push(' <label id="',B,'" for="',C.id,'"'+(v.labelStyle?' style="'+v.labelStyle+'"':'')+'>',e.htmlEncode(v.label),'</label>');return A.join('');};k.dialog.uiElement.call(this,u,v,w,'span',null,null,y);},radio:function(u,v,w){if(arguments.length<3)return;m.call(this,v);if(!this._['default'])this._['default']=this._.initValue=v.items[0][1];if(v.validate)this.validate=v.valdiate;var x=[],y=this,z=function(){var A=[],B=[],C={'class':'cke_dialog_ui_radio_item','aria-labelledby':this._.labelId},D=v.id?v.id+'_radio':e.getNextId()+'_radio';for(var E=0;E<v.items.length;E++){var F=v.items[E],G=F[2]!==undefined?F[2]:F[0],H=F[1]!==undefined?F[1]:F[0],I=e.getNextId()+'_radio_input',J=I+'_label',K=e.extend({},v,{id:I,title:null,type:null},true),L=e.extend({},K,{title:G},true),M={type:'radio','class':'cke_dialog_ui_radio_input',name:D,value:H,'aria-labelledby':J},N=[]; +if(y._['default']==H)M.checked='checked';t(K);t(L);if(typeof K.inputStyle!='undefined')K.style=K.inputStyle;x.push(new k.dialog.uiElement(u,K,N,'input',null,M));N.push(' ');new k.dialog.uiElement(u,L,N,'label',null,{id:J,'for':M.id},F[0]);A.push(N.join(''));}new k.dialog.hbox(u,[],A,B);return B.join('');};k.dialog.labeledElement.call(this,u,v,w,z);this._.children=x;},button:function(u,v,w){if(!arguments.length)return;if(typeof v=='function')v=v(u.getParentEditor());m.call(this,v,{disabled:v.disabled||false});a.event.implementOn(this);var x=this;u.on('load',function(A){var B=this.getElement();(function(){B.on('click',function(C){x.fire('click',{dialog:x.getDialog()});C.data.preventDefault();});B.on('keydown',function(C){if(C.data.getKeystroke() in {32:1}){x.click();C.data.preventDefault();}});})();B.unselectable();},this);var y=e.extend({},v);delete y.style;var z=e.getNextId()+'_label';k.dialog.uiElement.call(this,u,y,w,'a',null,{style:v.style,href:'javascript:void(0)',title:v.label,hidefocus:'true','class':v['class'],role:'button','aria-labelledby':z},'<span id="'+z+'" class="cke_dialog_ui_button">'+e.htmlEncode(v.label)+'</span>');},select:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v);if(v.validate)this.validate=v.validate;x.inputId=e.getNextId()+'_select';var y=function(){var z=e.extend({},v,{id:v.id?v.id+'_select':e.getNextId()+'_select'},true),A=[],B=[],C={id:x.inputId,'class':'cke_dialog_ui_input_select','aria-labelledby':this._.labelId};if(v.size!=undefined)C.size=v.size;if(v.multiple!=undefined)C.multiple=v.multiple;t(z);for(var D=0,E;D<v.items.length&&(E=v.items[D]);D++)B.push('<option value="',e.htmlEncode(E[1]!==undefined?E[1]:E[0]).replace(/"/g,'"'),'" /> ',e.htmlEncode(E[0]));if(typeof z.inputStyle!='undefined')z.style=z.inputStyle;x.select=new k.dialog.uiElement(u,z,A,'select',null,C,B.join(''));return A.join('');};k.dialog.labeledElement.call(this,u,v,w,y);},file:function(u,v,w){if(arguments.length<3)return;if(v['default']===undefined)v['default']='';var x=e.extend(m.call(this,v),{definition:v,buttons:[]});if(v.validate)this.validate=v.validate;var y=function(){x.frameId=e.getNextId()+'_fileInput';var z=b.isCustomDomain(),A=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" id="',x.frameId,'" title="',v.label,'" src="javascript:void('];A.push(z?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');A.push(')"></iframe>');return A.join('');};u.on('load',function(){var z=a.document.getById(x.frameId),A=z.getParent(); +A.addClass('cke_dialog_ui_input_file');});k.dialog.labeledElement.call(this,u,v,w,y);},fileButton:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v),y=this;if(v.validate)this.validate=v.validate;var z=e.extend({},v),A=z.onClick;z.className=(z.className?z.className+' ':'')+'cke_dialog_ui_button';z.onClick=function(B){var C=v['for'];if(!A||A.call(this,B)!==false){u.getContentElement(C[0],C[1]).submit();this.disable();}};u.on('load',function(){u.getContentElement(v['for'][0],v['for'][1])._.buttons.push(y);});k.dialog.button.call(this,u,z,w);},html:(function(){var u=/^\s*<[\w:]+\s+([^>]*)?>/,v=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,w=/\/$/;return function(x,y,z){if(arguments.length<3)return;var A=[],B,C=y.html,D,E;if(C.charAt(0)!='<')C='<span>'+C+'</span>';var F=y.focus;if(F){var G=this.focus;this.focus=function(){G.call(this);typeof F=='function'&&F.call(this);this.fire('focus');};if(y.isFocusable){var H=this.isFocusable;this.isFocusable=H;}this.keyboardFocusable=true;}k.dialog.uiElement.call(this,x,y,A,'span',null,null,'');B=A.join('');D=B.match(u);E=C.match(v)||['','',''];if(w.test(E[1])){E[1]=E[1].slice(0,-1);E[2]='/'+E[2];}z.push([E[1],' ',D[1]||'',E[2]].join(''));};})(),fieldset:function(u,v,w,x,y){var z=y.label,A=function(){var B=[];z&&B.push('<legend>'+z+'</legend>');for(var C=0;C<w.length;C++)B.push(w[C]);return B.join('');};this._={children:v};k.dialog.uiElement.call(this,u,y,x,'fieldset',null,null,A);}},true);k.dialog.html.prototype=new k.dialog.uiElement();k.dialog.labeledElement.prototype=e.extend(new k.dialog.uiElement(),{setLabel:function(u){var v=a.document.getById(this._.labelId);if(v.getChildCount()<1)new d.text(u,a.document).appendTo(v);else v.getChild(0).$.nodeValue=u;return this;},getLabel:function(){var u=a.document.getById(this._.labelId);if(!u||u.getChildCount()<1)return '';else return u.getChild(0).getText();},eventProcessors:r},true);k.dialog.button.prototype=e.extend(new k.dialog.uiElement(),{click:function(){var u=this;if(!u._.disabled)return u.fire('click',{dialog:u._.dialog});u.getElement().$.blur();return false;},enable:function(){this._.disabled=false;var u=this.getElement();u&&u.removeClass('cke_disabled');},disable:function(){this._.disabled=true;this.getElement().addClass('cke_disabled');},isVisible:function(){return this.getElement().getFirst().isVisible();},isEnabled:function(){return!this._.disabled;},eventProcessors:e.extend({},k.dialog.uiElement.prototype.eventProcessors,{onClick:function(u,v){this.on('click',v); +}},true),accessKeyUp:function(){this.click();},accessKeyDown:function(){this.focus();},keyboardFocusable:true},true);k.dialog.textInput.prototype=e.extend(new k.dialog.labeledElement(),{getInputElement:function(){return a.document.getById(this._.inputId);},focus:function(){var u=this.selectParentTab();setTimeout(function(){var v=u.getInputElement();v&&v.$.focus();},0);},select:function(){var u=this.selectParentTab();setTimeout(function(){var v=u.getInputElement();if(v){v.$.focus();v.$.select();}},0);},accessKeyUp:function(){this.select();},setValue:function(u){!u&&(u='');return k.dialog.uiElement.prototype.setValue.apply(this,arguments);},keyboardFocusable:true},q,true);k.dialog.textarea.prototype=new k.dialog.textInput();k.dialog.select.prototype=e.extend(new k.dialog.labeledElement(),{getInputElement:function(){return this._.select.getElement();},add:function(u,v,w){var x=new h('option',this.getDialog().getParentEditor().document),y=this.getInputElement().$;x.$.text=u;x.$.value=v===undefined||v===null?u:v;if(w===undefined||w===null){if(c)y.add(x.$);else y.add(x.$,null);}else y.add(x.$,w);return this;},remove:function(u){var v=this.getInputElement().$;v.remove(u);return this;},clear:function(){var u=this.getInputElement().$;while(u.length>0)u.remove(0);return this;},keyboardFocusable:true},q,true);k.dialog.checkbox.prototype=e.extend(new k.dialog.uiElement(),{getInputElement:function(){return this._.checkbox.getElement();},setValue:function(u,v){this.getInputElement().$.checked=u;!v&&this.fire('change',{value:u});},getValue:function(){return this.getInputElement().$.checked;},accessKeyUp:function(){this.setValue(!this.getValue());},eventProcessors:{onChange:function(u,v){if(!c)return r.onChange.apply(this,arguments);else{u.on('load',function(){var w=this._.checkbox.getElement();w.on('propertychange',function(x){x=x.data.$;if(x.propertyName=='checked')this.fire('change',{value:w.$.checked});},this);},this);this.on('change',v);}return null;}},keyboardFocusable:true},q,true);k.dialog.radio.prototype=e.extend(new k.dialog.uiElement(),{setValue:function(u,v){var w=this._.children,x;for(var y=0;y<w.length&&(x=w[y]);y++)x.getElement().$.checked=x.getValue()==u;!v&&this.fire('change',{value:u});},getValue:function(){var u=this._.children;for(var v=0;v<u.length;v++){if(u[v].getElement().$.checked)return u[v].getValue();}return null;},accessKeyUp:function(){var u=this._.children,v;for(v=0;v<u.length;v++){if(u[v].getElement().$.checked){u[v].getElement().focus();return; +}}u[0].getElement().focus();},eventProcessors:{onChange:function(u,v){if(!c)return r.onChange.apply(this,arguments);else{u.on('load',function(){var w=this._.children,x=this;for(var y=0;y<w.length;y++){var z=w[y].getElement();z.on('propertychange',function(A){A=A.data.$;if(A.propertyName=='checked'&&this.$.checked)x.fire('change',{value:this.getAttribute('value')});});}},this);this.on('change',v);}return null;}},keyboardFocusable:true},q,true);k.dialog.file.prototype=e.extend(new k.dialog.labeledElement(),q,{getInputElement:function(){var u=a.document.getById(this._.frameId).getFrameDocument();return u.$.forms.length>0?new h(u.$.forms[0].elements[0]):this.getElement();},submit:function(){this.getInputElement().getParent().$.submit();return this;},getAction:function(){return this.getInputElement().getParent().$.action;},registerEvents:function(u){var v=/^on([A-Z]\w+)/,w,x=function(z,A,B,C){z.on('formLoaded',function(){z.getInputElement().on(B,C,z);});};for(var y in u){if(!(w=y.match(v)))continue;if(this.eventProcessors[y])this.eventProcessors[y].call(this,this._.dialog,u[y]);else x(this,this._.dialog,w[1].toLowerCase(),u[y]);}return this;},reset:function(){var u=this._,v=a.document.getById(u.frameId),w=v.getFrameDocument(),x=u.definition,y=u.buttons,z=this.formLoadedNumber,A=this.formUnloadNumber,B=u.dialog._.editor.lang.dir,C=u.dialog._.editor.langCode;if(!z){z=this.formLoadedNumber=e.addFunction(function(){this.fire('formLoaded');},this);A=this.formUnloadNumber=e.addFunction(function(){this.getInputElement().clearCustomData();},this);this.getDialog()._.editor.on('destroy',function(){e.removeFunction(z);e.removeFunction(A);});}function D(){w.$.open();if(b.isCustomDomain())w.$.domain=document.domain;var E='';if(x.size)E=x.size-(c?7:0);w.$.write(['<html dir="'+B+'" lang="'+C+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" dir="'+B+'" lang="'+C+'" action="',e.htmlEncode(x.action),'">','<input type="file" name="',e.htmlEncode(x.id||'cke_upload'),'" size="',e.htmlEncode(E>0?E:''),'" />','</form>','</body></html>','<script>window.parent.CKEDITOR.tools.callFunction('+z+');','window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction('+A+')}</script>'].join(''));w.$.close();for(var F=0;F<y.length;F++)y[F].enable();};if(b.gecko)setTimeout(D,500);else D();},getValue:function(){return this.getInputElement().$.value||'';},setInitValue:function(){this._.initValue=''; +},eventProcessors:{onChange:function(u,v){if(!this._.domOnChangeRegistered){this.on('formLoaded',function(){this.getInputElement().on('change',function(){this.fire('change',{value:this.getValue()});},this);},this);this._.domOnChangeRegistered=true;}this.on('change',v);}},keyboardFocusable:true},true);k.dialog.fileButton.prototype=new k.dialog.button();k.dialog.fieldset.prototype=e.clone(k.dialog.hbox.prototype);a.dialog.addUIElement('text',n);a.dialog.addUIElement('password',n);a.dialog.addUIElement('textarea',o);a.dialog.addUIElement('checkbox',o);a.dialog.addUIElement('radio',o);a.dialog.addUIElement('button',o);a.dialog.addUIElement('select',o);a.dialog.addUIElement('file',o);a.dialog.addUIElement('fileButton',o);a.dialog.addUIElement('html',o);a.dialog.addUIElement('fieldset',p);})();j.add('panel',{beforeInit:function(m){m.ui.addHandler('panel',k.panel.handler);}});a.UI_PANEL='panel';k.panel=function(m,n){var o=this;if(n)e.extend(o,n);e.extend(o,{className:'',css:[]});o.id=e.getNextId();o.document=m;o._={blocks:{}};};k.panel.handler={create:function(m){return new k.panel(m);}};k.panel.prototype={renderHtml:function(m){var n=[];this.render(m,n);return n.join('');},render:function(m,n){var p=this;var o=p.id;n.push('<div class="',m.skinClass,'" lang="',m.langCode,'" role="presentation" style="display:none;z-index:'+(m.config.baseFloatZIndex+1)+'">'+'<div'+' id=',o,' dir=',m.lang.dir,' role="presentation" class="cke_panel cke_',m.lang.dir);if(p.className)n.push(' ',p.className);n.push('">');if(p.forceIFrame||p.css.length){n.push('<iframe id="',o,'_frame" frameborder="0" role="application" src="javascript:void(');n.push(b.isCustomDomain()?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');n.push(')"></iframe>');}n.push('</div></div>');return o;},getHolderElement:function(){var m=this._.holder;if(!m){if(this.forceIFrame||this.css.length){var n=this.document.getById(this.id+'_frame'),o=n.getParent(),p=o.getAttribute('dir'),q=o.getParent().getAttribute('class'),r=o.getParent().getAttribute('lang'),s=n.getFrameDocument(),t=e.addFunction(e.bind(function(w){this.isLoaded=true;if(this.onLoad)this.onLoad();},this)),u='<!DOCTYPE html><html dir="'+p+'" class="'+q+'_container" lang="'+r+'">'+'<head>'+'<style>.'+q+'_container{visibility:hidden}</style>'+'</head>'+'<body class="cke_'+p+' cke_panel_frame '+b.cssClass+'" style="margin:0;padding:0"'+' onload="( window.CKEDITOR || window.parent.CKEDITOR ).tools.callFunction('+t+');"></body>'+e.buildStyleHtml(this.css)+'</html>'; +s.write(u);var v=s.getWindow();v.$.CKEDITOR=a;s.on('key'+(b.opera?'press':'down'),function(w){var z=this;var x=w.data.getKeystroke(),y=z.document.getById(z.id).getAttribute('dir');if(z._.onKeyDown&&z._.onKeyDown(x)===false){w.data.preventDefault();return;}if(x==27||x==(y=='rtl'?39:37))if(z.onEscape&&z.onEscape(x)===false)w.data.preventDefault();},this);m=s.getBody();m.unselectable();b.air&&e.callFunction(t);}else m=this.document.getById(this.id);this._.holder=m;}return m;},addBlock:function(m,n){var o=this;n=o._.blocks[m]=n instanceof k.panel.block?n:new k.panel.block(o.getHolderElement(),n);if(!o._.currentBlock)o.showBlock(m);return n;},getBlock:function(m){return this._.blocks[m];},showBlock:function(m){var n=this._.blocks,o=n[m],p=this._.currentBlock,q=this.forceIFrame?this.document.getById(this.id+'_frame'):this._.holder;q.getParent().getParent().disableContextMenu();if(p){q.removeAttributes(p.attributes);p.hide();}this._.currentBlock=o;q.setAttributes(o.attributes);a.fire('ariaWidget',q);o._.focusIndex=-1;this._.onKeyDown=o.onKeyDown&&e.bind(o.onKeyDown,o);o.onMark=function(r){q.setAttribute('aria-activedescendant',r.getId()+'_option');};o.onUnmark=function(){q.removeAttribute('aria-activedescendant');};o.show();return o;},destroy:function(){this.element&&this.element.remove();}};k.panel.block=e.createClass({$:function(m,n){var o=this;o.element=m.append(m.getDocument().createElement('div',{attributes:{tabIndex:-1,'class':'cke_panel_block',role:'presentation'},styles:{display:'none'}}));if(n)e.extend(o,n);if(!o.attributes.title)o.attributes.title=o.attributes['aria-label'];o.keys={};o._.focusIndex=-1;o.element.disableContextMenu();},_:{markItem:function(m){var p=this;if(m==-1)return;var n=p.element.getElementsByTag('a'),o=n.getItem(p._.focusIndex=m);if(b.webkit||b.opera)o.getDocument().getWindow().focus();o.focus();p.onMark&&p.onMark(o);}},proto:{show:function(){this.element.setStyle('display','');},hide:function(){var m=this;if(!m.onHide||m.onHide.call(m)!==true)m.element.setStyle('display','none');},onKeyDown:function(m){var r=this;var n=r.keys[m];switch(n){case 'next':var o=r._.focusIndex,p=r.element.getElementsByTag('a'),q;while(q=p.getItem(++o)){if(q.getAttribute('_cke_focus')&&q.$.offsetWidth){r._.focusIndex=o;q.focus();break;}}return false;case 'prev':o=r._.focusIndex;p=r.element.getElementsByTag('a');while(o>0&&(q=p.getItem(--o))){if(q.getAttribute('_cke_focus')&&q.$.offsetWidth){r._.focusIndex=o;q.focus();break;}}return false;case 'click':case 'mouseup':o=r._.focusIndex; +q=o>=0&&r.element.getElementsByTag('a').getItem(o);if(q)q.$[n]?q.$[n]():q.$['on'+n]();return false;}return true;}}});j.add('listblock',{requires:['panel'],onLoad:function(){k.panel.prototype.addListBlock=function(m,n){return this.addBlock(m,new k.listBlock(this.getHolderElement(),n));};k.listBlock=e.createClass({base:k.panel.block,$:function(m,n){var q=this;n=n||{};var o=n.attributes||(n.attributes={});(q.multiSelect=!!n.multiSelect)&&(o['aria-multiselectable']=true);!o.role&&(o.role='listbox');q.base.apply(q,arguments);var p=q.keys;p[40]='next';p[9]='next';p[38]='prev';p[2228224+9]='prev';p[32]=c?'mouseup':'click';c&&(p[13]='mouseup');q._.pendingHtml=[];q._.items={};q._.groups={};},_:{close:function(){if(this._.started){this._.pendingHtml.push('</ul>');delete this._.started;}},getClick:function(){if(!this._.click)this._.click=e.addFunction(function(m){var o=this;var n=true;if(o.multiSelect)n=o.toggle(m);else o.mark(m);if(o.onClick)o.onClick(m,n);},this);return this._.click;}},proto:{add:function(m,n,o){var r=this;var p=r._.pendingHtml,q=e.getNextId();if(!r._.started){p.push('<ul role="presentation" class=cke_panel_list>');r._.started=1;r._.size=r._.size||0;}r._.items[m]=q;p.push('<li id=',q,' class=cke_panel_listItem role=presentation><a id="',q,'_option" _cke_focus=1 hidefocus=true title="',o||m,'" href="javascript:void(\'',m,"')\" "+(c?'onclick="return false;" onmouseup':'onclick')+'="CKEDITOR.tools.callFunction(',r._.getClick(),",'",m,"'); return false;\"",' role="option" aria-posinset="'+ ++r._.size+'">',n||m,'</a></li>');},startGroup:function(m){this._.close();var n=e.getNextId();this._.groups[m]=n;this._.pendingHtml.push('<h1 role="presentation" id=',n,' class=cke_panel_grouptitle>',m,'</h1>');},commit:function(){var p=this;p._.close();p.element.appendHtml(p._.pendingHtml.join(''));var m=p._.items,n=p.element.getDocument();for(var o in m)n.getById(m[o]+'_option').setAttribute('aria-setsize',p._.size);delete p._.size;p._.pendingHtml=[];},toggle:function(m){var n=this.isMarked(m);if(n)this.unmark(m);else this.mark(m);return!n;},hideGroup:function(m){var n=this.element.getDocument().getById(this._.groups[m]),o=n&&n.getNext();if(n){n.setStyle('display','none');if(o&&o.getName()=='ul')o.setStyle('display','none');}},hideItem:function(m){this.element.getDocument().getById(this._.items[m]).setStyle('display','none');},showAll:function(){var m=this._.items,n=this._.groups,o=this.element.getDocument();for(var p in m)o.getById(m[p]).setStyle('display','');for(var q in n){var r=o.getById(n[q]),s=r.getNext(); +r.setStyle('display','');if(s&&s.getName()=='ul')s.setStyle('display','');}},mark:function(m){var p=this;if(!p.multiSelect)p.unmarkAll();var n=p._.items[m],o=p.element.getDocument().getById(n);o.addClass('cke_selected');p.element.getDocument().getById(n+'_option').setAttribute('aria-selected',true);p.element.setAttribute('aria-activedescendant',n+'_option');p.onMark&&p.onMark(o);},unmark:function(m){var q=this;var n=q.element.getDocument(),o=q._.items[m],p=n.getById(o);p.removeClass('cke_selected');n.getById(o+'_option').removeAttribute('aria-selected');q.onUnmark&&q.onUnmark(p);},unmarkAll:function(){var q=this;var m=q._.items,n=q.element.getDocument();for(var o in m){var p=m[o];n.getById(p).removeClass('cke_selected');n.getById(p+'_option').removeAttribute('aria-selected');}q.onUnmark&&q.onUnmark();},isMarked:function(m){return this.element.getDocument().getById(this._.items[m]).hasClass('cke_selected');},focus:function(m){this._.focusIndex=-1;if(m){var n=this.element.getDocument().getById(this._.items[m]).getFirst(),o=this.element.getElementsByTag('a'),p,q=-1;while(p=o.getItem(++q)){if(p.equals(n)){this._.focusIndex=q;break;}}setTimeout(function(){n.focus();},0);}}}});}});a.themes.add('default',(function(){var m={};function n(o,p){var q,r;r=o.config.sharedSpaces;r=r&&r[p];r=r&&a.document.getById(r);if(r){var s='<span class="cke_shared " dir="'+o.lang.dir+'"'+'>'+'<span class="'+o.skinClass+' '+o.id+' cke_editor_'+o.name+'">'+'<span class="'+b.cssClass+'">'+'<span class="cke_wrapper cke_'+o.lang.dir+'">'+'<span class="cke_editor">'+'<div class="cke_'+p+'">'+'</div></span></span></span></span></span>',t=r.append(h.createFromHtml(s,r.getDocument()));if(r.getCustomData('cke_hasshared'))t.hide();else r.setCustomData('cke_hasshared',1);q=t.getChild([0,0,0,0]);!o.sharedSpaces&&(o.sharedSpaces={});o.sharedSpaces[p]=q;o.on('focus',function(){for(var u=0,v,w=r.getChildren();v=w.getItem(u);u++){if(v.type==1&&!v.equals(t)&&v.hasClass('cke_shared'))v.hide();}t.show();});o.on('destroy',function(){t.remove();});}return q;};return{build:function(o,p){var q=o.name,r=o.element,s=o.elementMode;if(!r||s==0)return;if(s==1)r.hide();var t=o.fire('themeSpace',{space:'top',html:''}).html,u=o.fire('themeSpace',{space:'contents',html:''}).html,v=o.fireOnce('themeSpace',{space:'bottom',html:''}).html,w=u&&o.config.height,x=o.config.tabIndex||o.element.getAttribute('tabindex')||0;if(!u)w='auto';else if(!isNaN(w))w+='px';var y='',z=o.config.width;if(z){if(!isNaN(z))z+='px';y+='width: '+z+';'; +}var A=t&&n(o,'top'),B=n(o,'bottom');A&&(A.setHtml(t),t='');B&&(B.setHtml(v),v='');var C='<style>.'+o.skinClass+'{visibility:hidden;}</style>';if(m[o.skinClass])C='';else m[o.skinClass]=1;var D=h.createFromHtml(['<span id="cke_',q,'" class="',o.skinClass,' ',o.id,' cke_editor_',q,'" dir="',o.lang.dir,'" title="',b.gecko?' ':'','" lang="',o.langCode,'"'+(b.webkit?' tabindex="'+x+'"':'')+' role="application"'+' aria-labelledby="cke_',q,'_arialbl"'+(y?' style="'+y+'"':'')+'>'+'<span id="cke_',q,'_arialbl" class="cke_voice_label">'+o.lang.editor+'</span>'+'<span class="',b.cssClass,'" role="presentation"><span class="cke_wrapper cke_',o.lang.dir,'" role="presentation"><table class="cke_editor" border="0" cellspacing="0" cellpadding="0" role="presentation"><tbody><tr',t?'':' style="display:none"',' role="presentation"><td id="cke_top_',q,'" class="cke_top" role="presentation">',t,'</td></tr><tr',u?'':' style="display:none"',' role="presentation"><td id="cke_contents_',q,'" class="cke_contents" style="height:',w,'" role="presentation">',u,'</td></tr><tr',v?'':' style="display:none"',' role="presentation"><td id="cke_bottom_',q,'" class="cke_bottom" role="presentation">',v,'</td></tr></tbody></table>'+C+'</span>'+'</span>'+'</span>'].join(''));D.getChild([1,0,0,0,0]).unselectable();D.getChild([1,0,0,0,2]).unselectable();if(s==1)D.insertAfter(r);else r.append(D);o.container=D;D.disableContextMenu();o.on('contentDirChanged',function(E){var F=(o.lang.dir!=E.data?'add':'remove')+'Class';D.getChild(1)[F]('cke_mixed_dir_content');var G=this.sharedSpaces&&this.sharedSpaces[this.config.toolbarLocation];G&&G.getParent().getParent()[F]('cke_mixed_dir_content');});o.fireOnce('themeLoaded');o.fireOnce('uiReady');},buildDialog:function(o){var p=e.getNextNumber(),q=h.createFromHtml(['<div class="',o.id,'_dialog cke_editor_',o.name.replace('.','\\.'),'_dialog cke_skin_',o.skinName,'" dir="',o.lang.dir,'" lang="',o.langCode,'" role="dialog" aria-labelledby="%title#"><table class="cke_dialog',' '+b.cssClass,' cke_',o.lang.dir,'" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="%body" role="presentation"><div id="%title#" class="%title" role="presentation"></div><a id="%close_button#" class="%close_button" href="javascript:void(0)" title="'+o.lang.common.close+'" role="button"><span class="cke_label">X</span></a>'+'<div id="%tabs#" class="%tabs" role="tablist"></div>'+'<table class="%contents" role="presentation">'+'<tr>'+'<td id="%contents#" class="%contents" role="presentation"></td>'+'</tr>'+'<tr>'+'<td id="%footer#" class="%footer" role="presentation"></td>'+'</tr>'+'</table>'+'</div>'+'<div id="%tl#" class="%tl"></div>'+'<div id="%tc#" class="%tc"></div>'+'<div id="%tr#" class="%tr"></div>'+'<div id="%ml#" class="%ml"></div>'+'<div id="%mr#" class="%mr"></div>'+'<div id="%bl#" class="%bl"></div>'+'<div id="%bc#" class="%bc"></div>'+'<div id="%br#" class="%br"></div>'+'</td></tr>'+'</table>',c?'':'<style>.cke_dialog{visibility:hidden;}</style>','</div>'].join('').replace(/#/g,'_'+p).replace(/%/g,'cke_dialog_')),r=q.getChild([0,0,0,0,0]),s=r.getChild(0),t=r.getChild(1); +s.unselectable();t.unselectable();return{element:q,parts:{dialog:q.getChild(0),title:s,close:t,tabs:r.getChild(2),contents:r.getChild([3,0,0,0]),footer:r.getChild([3,0,1,0])}};},destroy:function(o){var p=o.container,q=o.element;if(p){p.clearCustomData();p.remove();}if(q){q.clearCustomData();o.elementMode==1&&q.show();delete o.element;}}};})());a.editor.prototype.getThemeSpace=function(m){var n='cke_'+m,o=this._[n]||(this._[n]=a.document.getById(n+'_'+this.name));return o;};a.editor.prototype.resize=function(m,n,o,p){var q=this.container,r=a.document.getById('cke_contents_'+this.name),s=p?q.getChild(1):q;b.webkit&&s.setStyle('display','none');s.setSize('width',m,true);if(b.webkit){s.$.offsetWidth;s.setStyle('display','');}var t=o?0:(s.$.offsetHeight||0)-(r.$.clientHeight||0);r.setStyle('height',Math.max(n-t,0)+'px');this.fire('resize');};a.editor.prototype.getResizable=function(m){return m?a.document.getById('cke_contents_'+this.name):this.container;};})(); diff --git a/ckeditor.pack b/ckeditor.pack new file mode 100644 index 0000000..26c3af0 --- /dev/null +++ b/ckeditor.pack @@ -0,0 +1,211 @@ +/* + * CKPackager - Sample Package file + */ + +header : + '/*' + '\n' + + 'Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.' + '\n' + + 'For licensing, see LICENSE.html or http://ckeditor.com/license' + '\n' + + '*/' + '\n' + + '\n', + +noCheck : false, + +constants : + { + 'CKEDITOR.ELEMENT_MODE_NONE' : 0, + 'CKEDITOR.ELEMENT_MODE_REPLACE' : 1, + 'CKEDITOR.ELEMENT_MODE_APPENDTO' : 2, + 'CKEDITOR.CTRL' : 0x110000, + 'CKEDITOR.SHIFT' : 0x220000, + 'CKEDITOR.ALT' : 0x440000, + 'CKEDITOR.NODE_ELEMENT' : 1, + 'CKEDITOR.NODE_DOCUMENT' : 9, + 'CKEDITOR.NODE_TEXT' : 3, + 'CKEDITOR.NODE_COMMENT' : 8, + 'CKEDITOR.NODE_DOCUMENT_FRAGMENT' : 11, + 'CKEDITOR.POSITION_IDENTICAL' : 0, + 'CKEDITOR.POSITION_DISCONNECTED' : 1, + 'CKEDITOR.POSITION_FOLLOWING' : 2, + 'CKEDITOR.POSITION_PRECEDING' : 4, + 'CKEDITOR.POSITION_IS_CONTAINED' : 8, + 'CKEDITOR.POSITION_CONTAINS' : 16, + 'CKEDITOR.ENTER_P' : 1, + 'CKEDITOR.ENTER_BR' : 2, + 'CKEDITOR.ENTER_DIV' : 3, + 'CKEDITOR.TRISTATE_ON' : 1, + 'CKEDITOR.TRISTATE_OFF' : 2, + 'CKEDITOR.TRISTATE_DISABLED' : 0, + 'CKEDITOR.POSITION_AFTER_START' : 1, + 'CKEDITOR.POSITION_BEFORE_END' : 2, + 'CKEDITOR.POSITION_BEFORE_START' : 3, + 'CKEDITOR.POSITION_AFTER_END' : 4, + 'CKEDITOR.ENLARGE_ELEMENT' : 1, + 'CKEDITOR.ENLARGE_BLOCK_CONTENTS' : 2, + 'CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS' : 3, + 'CKEDITOR.START' : 1, + 'CKEDITOR.END' : 2, + 'CKEDITOR.STARTEND' : 3, + 'CKEDITOR.SHRINK_ELEMENT' : 1, + 'CKEDITOR.SHRINK_TEXT' : 2, + 'CKEDITOR.UI_BUTTON' : '\'button\'', + 'CKEDITOR.DIALOG_RESIZE_NONE' : 0, + 'CKEDITOR.DIALOG_RESIZE_WIDTH' : 1, + 'CKEDITOR.DIALOG_RESIZE_HEIGHT' : 2, + 'CKEDITOR.DIALOG_RESIZE_BOTH' : 3, + 'CKEDITOR.VALIDATE_OR' : 1, + 'CKEDITOR.VALIDATE_AND' : 2, + 'CKEDITOR.STYLE_BLOCK' : 1, + 'CKEDITOR.STYLE_INLINE' : 2, + 'CKEDITOR.STYLE_OBJECT' : 3, + 'CKEDITOR.UI_PANELBUTTON' : '\'panelbutton\'', + 'CKEDITOR.SELECTION_NONE' : 1, + 'CKEDITOR.SELECTION_TEXT' : 2, + 'CKEDITOR.SELECTION_ELEMENT' : 3, + 'CKEDITOR.UI_RICHCOMBO' : '\'richcombo\'', + 'CKEDITOR.UI_MENUBUTTON' : '\'menubutton\'', + 'CKEDITOR.UI_PANEL' : '\'panel\'' + }, + +packages : + [ + { + output : 'ckeditor_basic.js', + wrap : true, + files : + [ + '_source/core/ckeditor_base.js', + '_source/core/event.js', + '_source/core/editor_basic.js', + '_source/core/env.js', + '_source/core/ckeditor_basic.js' + ] + }, + + { + output : 'ckeditor.js', + wrap : true, + files : + [ + '_source/core/ckeditor_base.js', + '_source/core/event.js', + '_source/core/editor_basic.js', + '_source/core/env.js', + '_source/core/ckeditor_basic.js', + '_source/core/dom.js', + '_source/core/tools.js', + '_source/core/dtd.js', + '_source/core/dom/event.js', + '_source/core/dom/domobject.js', + '_source/core/dom/window.js', + '_source/core/dom/document.js', + '_source/core/dom/node.js', + '_source/core/dom/nodelist.js', + '_source/core/dom/element.js', + '_source/core/command.js', + '_source/core/config.js', + '_source/core/focusmanager.js', + '_source/core/lang.js', + '_source/core/scriptloader.js', + '_source/core/resourcemanager.js', + '_source/core/plugins.js', + '_source/core/skins.js', + '_source/core/themes.js', + '_source/core/ui.js', + '_source/core/editor.js', + '_source/core/htmlparser.js', + '_source/core/htmlparser/comment.js', + '_source/core/htmlparser/text.js', + '_source/core/htmlparser/cdata.js', + '_source/core/htmlparser/fragment.js', + '_source/core/htmlparser/element.js', + '_source/core/htmlparser/filter.js', + '_source/core/htmlparser/basicwriter.js', + '_source/core/ckeditor.js', + '_source/core/dom/comment.js', + '_source/core/dom/elementpath.js', + '_source/core/dom/text.js', + '_source/core/dom/documentfragment.js', + '_source/core/dom/walker.js', + '_source/core/dom/range.js', + '_source/core/dom/rangelist.js', + '_source/core/_bootstrap.js', + '_source/skins/kama/skin.js', +// '_source/lang/en.js', + '_source/plugins/about/plugin.js', + '_source/plugins/a11yhelp/plugin.js', + '_source/plugins/basicstyles/plugin.js', + '_source/plugins/bidi/plugin.js', + '_source/plugins/blockquote/plugin.js', + '_source/plugins/button/plugin.js', + '_source/plugins/clipboard/plugin.js', + '_source/plugins/colorbutton/plugin.js', + '_source/plugins/colordialog/plugin.js', + '_source/plugins/contextmenu/plugin.js', + '_source/plugins/dialogadvtab/plugin.js', + '_source/plugins/div/plugin.js', + '_source/plugins/elementspath/plugin.js', + '_source/plugins/enterkey/plugin.js', + '_source/plugins/entities/plugin.js', + '_source/plugins/filebrowser/plugin.js', + '_source/plugins/find/plugin.js', + '_source/plugins/flash/plugin.js', + '_source/plugins/font/plugin.js', + '_source/plugins/format/plugin.js', + '_source/plugins/forms/plugin.js', + '_source/plugins/horizontalrule/plugin.js', + '_source/plugins/htmldataprocessor/plugin.js', + '_source/plugins/iframe/plugin.js', + '_source/plugins/image/plugin.js', + '_source/plugins/indent/plugin.js', + '_source/plugins/justify/plugin.js', + '_source/plugins/keystrokes/plugin.js', + '_source/plugins/link/plugin.js', + '_source/plugins/list/plugin.js', + '_source/plugins/liststyle/plugin.js', + '_source/plugins/maximize/plugin.js', + '_source/plugins/newpage/plugin.js', + '_source/plugins/pagebreak/plugin.js', + '_source/plugins/pastefromword/plugin.js', + '_source/plugins/pastetext/plugin.js', + '_source/plugins/popup/plugin.js', + '_source/plugins/preview/plugin.js', + '_source/plugins/print/plugin.js', + '_source/plugins/removeformat/plugin.js', + '_source/plugins/resize/plugin.js', + '_source/plugins/save/plugin.js', + '_source/plugins/scayt/plugin.js', + '_source/plugins/smiley/plugin.js', + '_source/plugins/showblocks/plugin.js', + '_source/plugins/showborders/plugin.js', + '_source/plugins/sourcearea/plugin.js', + '_source/plugins/stylescombo/plugin.js', + '_source/plugins/table/plugin.js', + '_source/plugins/tabletools/plugin.js', + '_source/plugins/specialchar/plugin.js', + '_source/plugins/tab/plugin.js', + '_source/plugins/templates/plugin.js', + '_source/plugins/toolbar/plugin.js', + '_source/plugins/undo/plugin.js', + '_source/plugins/wysiwygarea/plugin.js', + '_source/plugins/wsc/plugin.js', + '_source/plugins/dialog/plugin.js', + '_source/plugins/styles/plugin.js', + '_source/plugins/domiterator/plugin.js', + '_source/plugins/panelbutton/plugin.js', + '_source/plugins/floatpanel/plugin.js', + '_source/plugins/menu/plugin.js', + '_source/plugins/editingblock/plugin.js', + '_source/plugins/selection/plugin.js', + '_source/plugins/fakeobjects/plugin.js', + '_source/plugins/richcombo/plugin.js', + '_source/plugins/htmlwriter/plugin.js', + '_source/plugins/menubutton/plugin.js', + '_source/plugins/dialogui/plugin.js', + '_source/plugins/panel/plugin.js', + '_source/plugins/listblock/plugin.js', + '_source/themes/default/theme.js' + ] + } + + ] diff --git a/ckeditor.php b/ckeditor.php new file mode 100644 index 0000000..ee89973 --- /dev/null +++ b/ckeditor.php @@ -0,0 +1,29 @@ +<?php +/* + * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +/*! \mainpage CKEditor - PHP server side intergation + * \section intro_sec CKEditor + * Visit <a href="http://ckeditor.com">CKEditor web site</a> to find more information about the editor. + * \section install_sec Installation + * \subsection step1 Include ckeditor.php in your PHP web site. + * @code + * <?php + * include("ckeditor/ckeditor.php"); + * ?> + * @endcode + * \subsection step2 Create CKEditor class instance and use one of available methods to insert CKEditor. + * @code + * <?php + * $CKEditor = new CKEditor(); + * echo $CKEditor->textarea("field1", "<p>Initial value.</p>"); + * ?> + * @endcode + */ + +if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) ) + include_once( 'ckeditor_php4.php' ) ; +else + include_once( 'ckeditor_php5.php' ) ; diff --git a/ckeditor_basic.js b/ckeditor_basic.js new file mode 100644 index 0000000..b52806e --- /dev/null +++ b/ckeditor_basic.js @@ -0,0 +1,8 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'B5GJ5GG',version:'3.6.1',revision:'7072',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;if(!d)throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/'&&!/[&?]t=/.test(d))d+=(d.indexOf('?')>=0?'&':'?')+'t='+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b){var c=a.event.prototype;for(var d in c){if(b[d]==undefined)b[d]=c[d];}};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e<f.length;e++){if(f[e].fn==d)return e;}return-1;}};return{on:function(d,e,f,g,h){var i=b(this),j=i[d]||(i[d]=new c(d));if(j.getListenerIndex(e)<0){var k=j.listeners;if(!f)f=this;if(isNaN(h))h=10;var l=this,m=function(o,p,q,r){var s={name:d,sender:this,editor:o,data:p,listenerData:g,stop:q,cancel:r,removeListener:function(){l.removeListener(d,e);}};e.call(f,s);return s.data;};m.fn=e;m.priority=h;for(var n=k.length-1;n>=0;n--){if(k[n].priority<=h){k.splice(n+1,0,m);return;}}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o<n.length;o++){var p=n[o].call(this,j,i,e,g);if(typeof p!='undefined')i=p;if(d||f)break;}}}var q=f||(typeof i=='undefined'?false:i);d=l;f=m;return q;};})(),fireOnce:function(d,e,f){var g=this.fire(d,e,f);delete b(this)[d];return g;},removeListener:function(d,e){var f=b(this)[d];if(f){var g=f.getListenerIndex(e);if(g>=0)f.listeners.splice(g,1); +}},hasListeners:function(d){var e=b(this)[d];return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d,e){var f=this;f._={instanceConfig:b,element:c,data:e};f.elementMode=d||0;a.event.call(f);f._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(d&&d.tagName.toLowerCase() in {style:1,script:1,base:1,link:1,meta:1,title:1})d=null;if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&d.tagName.toLowerCase()!='textarea'){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c,d){var e=b;if(typeof e!='object'){e=document.getElementById(b);if(!e)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,e,2,d);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',mobile:b.indexOf('mobile')>-1,isCustomDomain:function(){if(!this.ie)return false;var g=document.domain,h=window.location.hostname;return g!=h&&g!='['+h+']';},secure:location.protocol=='https:'};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie9Compat=document.documentMode==9;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*100+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=!d.mobile&&(d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false);d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.webkit?'webkit':'unknown'); +if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?document.documentMode:'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18';if(d.air)d.cssClass+=' cke_browser_air';return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=1;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=1;var d=function(e,f,g,h){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var i=g(e,f,h);a.add(i);return i;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f,g){return d(e,f,a.editor.appendTo,g);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f<e.length;f++){var g=null,h=e[f];if(!h.name&&!h.id)continue;if(typeof arguments[0]=='string'){var i=new RegExp('(?:^|\\s)'+arguments[0]+'(?:$|\\s)');if(!i.test(h.className))continue;}else if(typeof arguments[0]=='function'){g={};if(arguments[0](h,g)===false)continue;}this.replace(h,g);}};(function(){var e=function(){var f=a.loadFullCore,g=a.loadFullCoreTimeout;if(a.replaceByClassEnabled)a.replaceAll(a.replaceClass);a.status='basic_ready';if(f&&f._load)f();else if(g)setTimeout(function(){if(a.loadFullCore)a.loadFullCore();},g*1000);};if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();a.status='basic_loaded';})();})(); diff --git a/ckeditor_basic_source.js b/ckeditor_basic_source.js new file mode 100644 index 0000000..ceae37d --- /dev/null +++ b/ckeditor_basic_source.js @@ -0,0 +1,20 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +// Compressed version of core/ckeditor_base.js. See original for instructions. +/*jsl:ignore*/ +if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.6.1',revision:'7072',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})(); +/*jsl:end*/ + +// Uncomment the following line to have a new timestamp generated for each +// request, having clear cache load of the editor code. +// CKEDITOR.timestamp = ( new Date() ).valueOf(); + +// Set the script name to be loaded by the loader. +CKEDITOR._autoLoad = 'core/ckeditor_basic'; + +// Include the loader script. +document.write( + '<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' ); diff --git a/ckeditor_php4.php b/ckeditor_php4.php new file mode 100644 index 0000000..2caa202 --- /dev/null +++ b/ckeditor_php4.php @@ -0,0 +1,566 @@ +<?php +/* +* Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +* For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * \brief CKEditor class that can be used to create editor + * instances in PHP pages on server side. + * @see http://ckeditor.com + * + * Sample usage: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->editor("editor1", "<p>Initial value.</p>"); + * @endcode + */ +class CKEditor +{ + /** + * The version of %CKEditor. + * \private + */ + var $version = '3.6.1'; + /** + * A constant string unique for each release of %CKEditor. + * \private + */ + var $_timestamp = 'B5GJ5GG'; + + /** + * URL to the %CKEditor installation directory (absolute or relative to document root). + * If not set, CKEditor will try to guess it's path. + * + * Example usage: + * @code + * $CKEditor->basePath = '/ckeditor/'; + * @endcode + */ + var $basePath; + /** + * An array that holds the global %CKEditor configuration. + * For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html + * + * Example usage: + * @code + * $CKEditor->config['height'] = 400; + * // Use @@ at the beggining of a string to ouput it without surrounding quotes. + * $CKEditor->config['width'] = '@@screen.width * 0.8'; + * @endcode + */ + var $config = array(); + /** + * A boolean variable indicating whether CKEditor has been initialized. + * Set it to true only if you have already included + * <script> tag loading ckeditor.js in your website. + */ + var $initialized = false; + /** + * Boolean variable indicating whether created code should be printed out or returned by a function. + * + * Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->returnOutput = true; + * $code = $CKEditor->editor("editor1", "<p>Initial value.</p>"); + * echo "<p>Editor 1:</p>"; + * echo $code; + * @endcode + */ + var $returnOutput = false; + /** + * An array with textarea attributes. + * + * When %CKEditor is created with the editor() method, a HTML <textarea> element is created, + * it will be displayed to anyone with JavaScript disabled or with incompatible browser. + */ + var $textareaAttributes = array( "rows" => 8, "cols" => 60 ); + /** + * A string indicating the creation date of %CKEditor. + * Do not change it unless you want to force browsers to not use previously cached version of %CKEditor. + */ + var $timestamp = "B5GJ5GG"; + /** + * An array that holds event listeners. + * \private + */ + var $_events = array(); + /** + * An array that holds global event listeners. + * \private + */ + var $_globalEvents = array(); + + /** + * Main Constructor. + * + * @param $basePath (string) URL to the %CKEditor installation directory (optional). + */ + function CKEditor($basePath = null) { + if (!empty($basePath)) { + $this->basePath = $basePath; + } + } + + /** + * Creates a %CKEditor instance. + * In incompatible browsers %CKEditor will downgrade to plain HTML <textarea> element. + * + * @param $name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element). + * @param $value (string) Initial value (optional). + * @param $config (array) The specific configurations to apply to this editor instance (optional). + * @param $events (array) Event listeners for this editor instance (optional). + * + * Example usage: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->editor("field1", "<p>Initial value.</p>"); + * @endcode + * + * Advanced example: + * @code + * $CKEditor = new CKEditor(); + * $config = array(); + * $config['toolbar'] = array( + * array( 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike' ), + * array( 'Image', 'Link', 'Unlink', 'Anchor' ) + * ); + * $events['instanceReady'] = 'function (ev) { + * alert("Loaded: " + ev.editor.name); + * }'; + * $CKEditor->editor("field1", "<p>Initial value.</p>", $config, $events); + * @endcode + */ + function editor($name, $value = "", $config = array(), $events = array()) + { + $attr = ""; + foreach ($this->textareaAttributes as $key => $val) { + $attr.= " " . $key . '="' . str_replace('"', '"', $val) . '"'; + } + $out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\n"; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings($config, $events); + + $js = $this->returnGlobalEvents(); + if (!empty($_config)) + $js .= "CKEDITOR.replace('".$name."', ".$this->jsEncode($_config).");"; + else + $js .= "CKEDITOR.replace('".$name."');"; + + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Replaces a <textarea> with a %CKEditor instance. + * + * @param $id (string) The id or name of textarea element. + * @param $config (array) The specific configurations to apply to this editor instance (optional). + * @param $events (array) Event listeners for this editor instance (optional). + * + * Example 1: adding %CKEditor to <textarea name="article"></textarea> element: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replace("article"); + * @endcode + */ + function replace($id, $config = array(), $events = array()) + { + $out = ""; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings($config, $events); + + $js = $this->returnGlobalEvents(); + if (!empty($_config)) { + $js .= "CKEDITOR.replace('".$id."', ".$this->jsEncode($_config).");"; + } + else { + $js .= "CKEDITOR.replace('".$id."');"; + } + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Replace all <textarea> elements available in the document with editor instances. + * + * @param $className (string) If set, replace all textareas with class className in the page. + * + * Example 1: replace all <textarea> elements in the page. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replaceAll(); + * @endcode + * + * Example 2: replace all <textarea class="myClassName"> elements in the page. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replaceAll( 'myClassName' ); + * @endcode + */ + function replaceAll($className = null) + { + $out = ""; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings(); + + $js = $this->returnGlobalEvents(); + if (empty($_config)) { + if (empty($className)) { + $js .= "CKEDITOR.replaceAll();"; + } + else { + $js .= "CKEDITOR.replaceAll('".$className."');"; + } + } + else { + $classDetection = ""; + $js .= "CKEDITOR.replaceAll( function(textarea, config) {\n"; + if (!empty($className)) { + $js .= " var classRegex = new RegExp('(?:^| )' + '". $className ."' + '(?:$| )');\n"; + $js .= " if (!classRegex.test(textarea.className))\n"; + $js .= " return false;\n"; + } + $js .= " CKEDITOR.tools.extend(config, ". $this->jsEncode($_config) .", true);"; + $js .= "} );"; + + } + + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Adds event listener. + * Events are fired by %CKEditor in various situations. + * + * @param $event (string) Event name. + * @param $javascriptCode (string) Javascript anonymous function or function name. + * + * Example usage: + * @code + * $CKEditor->addEventHandler('instanceReady', 'function (ev) { + * alert("Loaded: " + ev.editor.name); + * }'); + * @endcode + */ + function addEventHandler($event, $javascriptCode) + { + if (!isset($this->_events[$event])) { + $this->_events[$event] = array(); + } + // Avoid duplicates. + if (!in_array($javascriptCode, $this->_events[$event])) { + $this->_events[$event][] = $javascriptCode; + } + } + + /** + * Clear registered event handlers. + * Note: this function will have no effect on already created editor instances. + * + * @param $event (string) Event name, if not set all event handlers will be removed (optional). + */ + function clearEventHandlers($event = null) + { + if (!empty($event)) { + $this->_events[$event] = array(); + } + else { + $this->_events = array(); + } + } + + /** + * Adds global event listener. + * + * @param $event (string) Event name. + * @param $javascriptCode (string) Javascript anonymous function or function name. + * + * Example usage: + * @code + * $CKEditor->addGlobalEventHandler('dialogDefinition', 'function (ev) { + * alert("Loading dialog: " + ev.data.name); + * }'); + * @endcode + */ + function addGlobalEventHandler($event, $javascriptCode) + { + if (!isset($this->_globalEvents[$event])) { + $this->_globalEvents[$event] = array(); + } + // Avoid duplicates. + if (!in_array($javascriptCode, $this->_globalEvents[$event])) { + $this->_globalEvents[$event][] = $javascriptCode; + } + } + + /** + * Clear registered global event handlers. + * Note: this function will have no effect if the event handler has been already printed/returned. + * + * @param $event (string) Event name, if not set all event handlers will be removed (optional). + */ + function clearGlobalEventHandlers($event = null) + { + if (!empty($event)) { + $this->_globalEvents[$event] = array(); + } + else { + $this->_globalEvents = array(); + } + } + + /** + * Prints javascript code. + * \private + * + * @param string $js + */ + function script($js) + { + $out = "<script type=\"text/javascript\">"; + $out .= "//<![CDATA[\n"; + $out .= $js; + $out .= "\n//]]>"; + $out .= "</script>\n"; + + return $out; + } + + /** + * Returns the configuration array (global and instance specific settings are merged into one array). + * \private + * + * @param $config (array) The specific configurations to apply to editor instance. + * @param $events (array) Event listeners for editor instance. + */ + function configSettings($config = array(), $events = array()) + { + $_config = $this->config; + $_events = $this->_events; + + if (is_array($config) && !empty($config)) { + $_config = array_merge($_config, $config); + } + + if (is_array($events) && !empty($events)) { + foreach ($events as $eventName => $code) { + if (!isset($_events[$eventName])) { + $_events[$eventName] = array(); + } + if (!in_array($code, $_events[$eventName])) { + $_events[$eventName][] = $code; + } + } + } + + if (!empty($_events)) { + foreach($_events as $eventName => $handlers) { + if (empty($handlers)) { + continue; + } + else if (count($handlers) == 1) { + $_config['on'][$eventName] = '@@'.$handlers[0]; + } + else { + $_config['on'][$eventName] = '@@function (ev){'; + foreach ($handlers as $handler => $code) { + $_config['on'][$eventName] .= '('.$code.')(ev);'; + } + $_config['on'][$eventName] .= '}'; + } + } + } + + return $_config; + } + + /** + * Return global event handlers. + * \private + */ + function returnGlobalEvents() + { + static $returnedEvents; + $out = ""; + + if (!isset($returnedEvents)) { + $returnedEvents = array(); + } + + if (!empty($this->_globalEvents)) { + foreach ($this->_globalEvents as $eventName => $handlers) { + foreach ($handlers as $handler => $code) { + if (!isset($returnedEvents[$eventName])) { + $returnedEvents[$eventName] = array(); + } + // Return only new events + if (!in_array($code, $returnedEvents[$eventName])) { + $out .= ($code ? "\n" : "") . "CKEDITOR.on('". $eventName ."', $code);"; + $returnedEvents[$eventName][] = $code; + } + } + } + } + + return $out; + } + + /** + * Initializes CKEditor (executed only once). + * \private + */ + function init() + { + static $initComplete; + $out = ""; + + if (!empty($initComplete)) { + return ""; + } + + if ($this->initialized) { + $initComplete = true; + return ""; + } + + $args = ""; + $ckeditorPath = $this->ckeditorPath(); + + if (!empty($this->timestamp) && $this->timestamp != "%"."TIMESTAMP%") { + $args = '?t=' . $this->timestamp; + } + + // Skip relative paths... + if (strpos($ckeditorPath, '..') !== 0) { + $out .= $this->script("window.CKEDITOR_BASEPATH='". $ckeditorPath ."';"); + } + + $out .= "<script type=\"text/javascript\" src=\"" . $ckeditorPath . 'ckeditor.js' . $args . "\"></script>\n"; + + $extraCode = ""; + if ($this->timestamp != $this->_timestamp) { + $extraCode .= ($extraCode ? "\n" : "") . "CKEDITOR.timestamp = '". $this->timestamp ."';"; + } + if ($extraCode) { + $out .= $this->script($extraCode); + } + + $initComplete = $this->initialized = true; + + return $out; + } + + /** + * Return path to ckeditor.js. + * \private + */ + function ckeditorPath() + { + if (!empty($this->basePath)) { + return $this->basePath; + } + + /** + * The absolute pathname of the currently executing script. + * Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php, + * $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user. + */ + if (isset($_SERVER['SCRIPT_FILENAME'])) { + $realPath = dirname($_SERVER['SCRIPT_FILENAME']); + } + else { + /** + * realpath - Returns canonicalized absolute pathname + */ + $realPath = realpath( './' ) ; + } + + /** + * The filename of the currently executing script, relative to the document root. + * For instance, $_SERVER['PHP_SELF'] in a script at the address http://example.com/test.php/foo.bar + * would be /test.php/foo.bar. + */ + $selfPath = dirname($_SERVER['PHP_SELF']); + $file = str_replace("\\", "/", __FILE__); + + if (!$selfPath || !$realPath || !$file) { + return "/ckeditor/"; + } + + $documentRoot = substr($realPath, 0, strlen($realPath) - strlen($selfPath)); + $fileUrl = substr($file, strlen($documentRoot)); + $ckeditorUrl = str_replace("ckeditor_php4.php", "", $fileUrl); + + return $ckeditorUrl; + } + + /** + * This little function provides a basic JSON support. + * \private + * + * @param mixed $val + * @return string + */ + function jsEncode($val) + { + if (is_null($val)) { + return 'null'; + } + if (is_bool($val)) { + return $val ? 'true' : 'false'; + } + if (is_int($val)) { + return $val; + } + if (is_float($val)) { + return str_replace(',', '.', $val); + } + if (is_array($val) || is_object($val)) { + if (is_array($val) && (array_keys($val) === range(0,count($val)-1))) { + return '[' . implode(',', array_map(array($this, 'jsEncode'), $val)) . ']'; + } + $temp = array(); + foreach ($val as $k => $v){ + $temp[] = $this->jsEncode("{$k}") . ':' . $this->jsEncode($v); + } + return '{' . implode(',', $temp) . '}'; + } + // String otherwise + if (strpos($val, '@@') === 0) + return substr($val, 2); + if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.') + return $val; + + return '"' . str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val) . '"'; + } +} diff --git a/ckeditor_php5.php b/ckeditor_php5.php new file mode 100644 index 0000000..2556353 --- /dev/null +++ b/ckeditor_php5.php @@ -0,0 +1,556 @@ +<?php +/* +* Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +* For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * \brief CKEditor class that can be used to create editor + * instances in PHP pages on server side. + * @see http://ckeditor.com + * + * Sample usage: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->editor("editor1", "<p>Initial value.</p>"); + * @endcode + */ +class CKEditor +{ + /** + * The version of %CKEditor. + */ + const version = '3.6.1'; + /** + * A constant string unique for each release of %CKEditor. + */ + const timestamp = 'B5GJ5GG'; + + /** + * URL to the %CKEditor installation directory (absolute or relative to document root). + * If not set, CKEditor will try to guess it's path. + * + * Example usage: + * @code + * $CKEditor->basePath = '/ckeditor/'; + * @endcode + */ + public $basePath; + /** + * An array that holds the global %CKEditor configuration. + * For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html + * + * Example usage: + * @code + * $CKEditor->config['height'] = 400; + * // Use @@ at the beggining of a string to ouput it without surrounding quotes. + * $CKEditor->config['width'] = '@@screen.width * 0.8'; + * @endcode + */ + public $config = array(); + /** + * A boolean variable indicating whether CKEditor has been initialized. + * Set it to true only if you have already included + * <script> tag loading ckeditor.js in your website. + */ + public $initialized = false; + /** + * Boolean variable indicating whether created code should be printed out or returned by a function. + * + * Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->returnOutput = true; + * $code = $CKEditor->editor("editor1", "<p>Initial value.</p>"); + * echo "<p>Editor 1:</p>"; + * echo $code; + * @endcode + */ + public $returnOutput = false; + /** + * An array with textarea attributes. + * + * When %CKEditor is created with the editor() method, a HTML <textarea> element is created, + * it will be displayed to anyone with JavaScript disabled or with incompatible browser. + */ + public $textareaAttributes = array( "rows" => 8, "cols" => 60 ); + /** + * A string indicating the creation date of %CKEditor. + * Do not change it unless you want to force browsers to not use previously cached version of %CKEditor. + */ + public $timestamp = "B5GJ5GG"; + /** + * An array that holds event listeners. + */ + private $events = array(); + /** + * An array that holds global event listeners. + */ + private $globalEvents = array(); + + /** + * Main Constructor. + * + * @param $basePath (string) URL to the %CKEditor installation directory (optional). + */ + function __construct($basePath = null) { + if (!empty($basePath)) { + $this->basePath = $basePath; + } + } + + /** + * Creates a %CKEditor instance. + * In incompatible browsers %CKEditor will downgrade to plain HTML <textarea> element. + * + * @param $name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element). + * @param $value (string) Initial value (optional). + * @param $config (array) The specific configurations to apply to this editor instance (optional). + * @param $events (array) Event listeners for this editor instance (optional). + * + * Example usage: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->editor("field1", "<p>Initial value.</p>"); + * @endcode + * + * Advanced example: + * @code + * $CKEditor = new CKEditor(); + * $config = array(); + * $config['toolbar'] = array( + * array( 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike' ), + * array( 'Image', 'Link', 'Unlink', 'Anchor' ) + * ); + * $events['instanceReady'] = 'function (ev) { + * alert("Loaded: " + ev.editor.name); + * }'; + * $CKEditor->editor("field1", "<p>Initial value.</p>", $config, $events); + * @endcode + */ + public function editor($name, $value = "", $config = array(), $events = array()) + { + $attr = ""; + foreach ($this->textareaAttributes as $key => $val) { + $attr.= " " . $key . '="' . str_replace('"', '"', $val) . '"'; + } + $out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\n"; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings($config, $events); + + $js = $this->returnGlobalEvents(); + if (!empty($_config)) + $js .= "CKEDITOR.replace('".$name."', ".$this->jsEncode($_config).");"; + else + $js .= "CKEDITOR.replace('".$name."');"; + + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Replaces a <textarea> with a %CKEditor instance. + * + * @param $id (string) The id or name of textarea element. + * @param $config (array) The specific configurations to apply to this editor instance (optional). + * @param $events (array) Event listeners for this editor instance (optional). + * + * Example 1: adding %CKEditor to <textarea name="article"></textarea> element: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replace("article"); + * @endcode + */ + public function replace($id, $config = array(), $events = array()) + { + $out = ""; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings($config, $events); + + $js = $this->returnGlobalEvents(); + if (!empty($_config)) { + $js .= "CKEDITOR.replace('".$id."', ".$this->jsEncode($_config).");"; + } + else { + $js .= "CKEDITOR.replace('".$id."');"; + } + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Replace all <textarea> elements available in the document with editor instances. + * + * @param $className (string) If set, replace all textareas with class className in the page. + * + * Example 1: replace all <textarea> elements in the page. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replaceAll(); + * @endcode + * + * Example 2: replace all <textarea class="myClassName"> elements in the page. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replaceAll( 'myClassName' ); + * @endcode + */ + public function replaceAll($className = null) + { + $out = ""; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings(); + + $js = $this->returnGlobalEvents(); + if (empty($_config)) { + if (empty($className)) { + $js .= "CKEDITOR.replaceAll();"; + } + else { + $js .= "CKEDITOR.replaceAll('".$className."');"; + } + } + else { + $classDetection = ""; + $js .= "CKEDITOR.replaceAll( function(textarea, config) {\n"; + if (!empty($className)) { + $js .= " var classRegex = new RegExp('(?:^| )' + '". $className ."' + '(?:$| )');\n"; + $js .= " if (!classRegex.test(textarea.className))\n"; + $js .= " return false;\n"; + } + $js .= " CKEDITOR.tools.extend(config, ". $this->jsEncode($_config) .", true);"; + $js .= "} );"; + + } + + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Adds event listener. + * Events are fired by %CKEditor in various situations. + * + * @param $event (string) Event name. + * @param $javascriptCode (string) Javascript anonymous function or function name. + * + * Example usage: + * @code + * $CKEditor->addEventHandler('instanceReady', 'function (ev) { + * alert("Loaded: " + ev.editor.name); + * }'); + * @endcode + */ + public function addEventHandler($event, $javascriptCode) + { + if (!isset($this->events[$event])) { + $this->events[$event] = array(); + } + // Avoid duplicates. + if (!in_array($javascriptCode, $this->events[$event])) { + $this->events[$event][] = $javascriptCode; + } + } + + /** + * Clear registered event handlers. + * Note: this function will have no effect on already created editor instances. + * + * @param $event (string) Event name, if not set all event handlers will be removed (optional). + */ + public function clearEventHandlers($event = null) + { + if (!empty($event)) { + $this->events[$event] = array(); + } + else { + $this->events = array(); + } + } + + /** + * Adds global event listener. + * + * @param $event (string) Event name. + * @param $javascriptCode (string) Javascript anonymous function or function name. + * + * Example usage: + * @code + * $CKEditor->addGlobalEventHandler('dialogDefinition', 'function (ev) { + * alert("Loading dialog: " + ev.data.name); + * }'); + * @endcode + */ + public function addGlobalEventHandler($event, $javascriptCode) + { + if (!isset($this->globalEvents[$event])) { + $this->globalEvents[$event] = array(); + } + // Avoid duplicates. + if (!in_array($javascriptCode, $this->globalEvents[$event])) { + $this->globalEvents[$event][] = $javascriptCode; + } + } + + /** + * Clear registered global event handlers. + * Note: this function will have no effect if the event handler has been already printed/returned. + * + * @param $event (string) Event name, if not set all event handlers will be removed (optional). + */ + public function clearGlobalEventHandlers($event = null) + { + if (!empty($event)) { + $this->globalEvents[$event] = array(); + } + else { + $this->globalEvents = array(); + } + } + + /** + * Prints javascript code. + * + * @param string $js + */ + private function script($js) + { + $out = "<script type=\"text/javascript\">"; + $out .= "//<![CDATA[\n"; + $out .= $js; + $out .= "\n//]]>"; + $out .= "</script>\n"; + + return $out; + } + + /** + * Returns the configuration array (global and instance specific settings are merged into one array). + * + * @param $config (array) The specific configurations to apply to editor instance. + * @param $events (array) Event listeners for editor instance. + */ + private function configSettings($config = array(), $events = array()) + { + $_config = $this->config; + $_events = $this->events; + + if (is_array($config) && !empty($config)) { + $_config = array_merge($_config, $config); + } + + if (is_array($events) && !empty($events)) { + foreach ($events as $eventName => $code) { + if (!isset($_events[$eventName])) { + $_events[$eventName] = array(); + } + if (!in_array($code, $_events[$eventName])) { + $_events[$eventName][] = $code; + } + } + } + + if (!empty($_events)) { + foreach($_events as $eventName => $handlers) { + if (empty($handlers)) { + continue; + } + else if (count($handlers) == 1) { + $_config['on'][$eventName] = '@@'.$handlers[0]; + } + else { + $_config['on'][$eventName] = '@@function (ev){'; + foreach ($handlers as $handler => $code) { + $_config['on'][$eventName] .= '('.$code.')(ev);'; + } + $_config['on'][$eventName] .= '}'; + } + } + } + + return $_config; + } + + /** + * Return global event handlers. + */ + private function returnGlobalEvents() + { + static $returnedEvents; + $out = ""; + + if (!isset($returnedEvents)) { + $returnedEvents = array(); + } + + if (!empty($this->globalEvents)) { + foreach ($this->globalEvents as $eventName => $handlers) { + foreach ($handlers as $handler => $code) { + if (!isset($returnedEvents[$eventName])) { + $returnedEvents[$eventName] = array(); + } + // Return only new events + if (!in_array($code, $returnedEvents[$eventName])) { + $out .= ($code ? "\n" : "") . "CKEDITOR.on('". $eventName ."', $code);"; + $returnedEvents[$eventName][] = $code; + } + } + } + } + + return $out; + } + + /** + * Initializes CKEditor (executed only once). + */ + private function init() + { + static $initComplete; + $out = ""; + + if (!empty($initComplete)) { + return ""; + } + + if ($this->initialized) { + $initComplete = true; + return ""; + } + + $args = ""; + $ckeditorPath = $this->ckeditorPath(); + + if (!empty($this->timestamp) && $this->timestamp != "%"."TIMESTAMP%") { + $args = '?t=' . $this->timestamp; + } + + // Skip relative paths... + if (strpos($ckeditorPath, '..') !== 0) { + $out .= $this->script("window.CKEDITOR_BASEPATH='". $ckeditorPath ."';"); + } + + $out .= "<script type=\"text/javascript\" src=\"" . $ckeditorPath . 'ckeditor.js' . $args . "\"></script>\n"; + + $extraCode = ""; + if ($this->timestamp != self::timestamp) { + $extraCode .= ($extraCode ? "\n" : "") . "CKEDITOR.timestamp = '". $this->timestamp ."';"; + } + if ($extraCode) { + $out .= $this->script($extraCode); + } + + $initComplete = $this->initialized = true; + + return $out; + } + + /** + * Return path to ckeditor.js. + */ + private function ckeditorPath() + { + if (!empty($this->basePath)) { + return $this->basePath; + } + + /** + * The absolute pathname of the currently executing script. + * Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php, + * $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user. + */ + if (isset($_SERVER['SCRIPT_FILENAME'])) { + $realPath = dirname($_SERVER['SCRIPT_FILENAME']); + } + else { + /** + * realpath - Returns canonicalized absolute pathname + */ + $realPath = realpath( './' ) ; + } + + /** + * The filename of the currently executing script, relative to the document root. + * For instance, $_SERVER['PHP_SELF'] in a script at the address http://example.com/test.php/foo.bar + * would be /test.php/foo.bar. + */ + $selfPath = dirname($_SERVER['PHP_SELF']); + $file = str_replace("\\", "/", __FILE__); + + if (!$selfPath || !$realPath || !$file) { + return "/ckeditor/"; + } + + $documentRoot = substr($realPath, 0, strlen($realPath) - strlen($selfPath)); + $fileUrl = substr($file, strlen($documentRoot)); + $ckeditorUrl = str_replace("ckeditor_php5.php", "", $fileUrl); + + return $ckeditorUrl; + } + + /** + * This little function provides a basic JSON support. + * + * @param mixed $val + * @return string + */ + private function jsEncode($val) + { + if (is_null($val)) { + return 'null'; + } + if (is_bool($val)) { + return $val ? 'true' : 'false'; + } + if (is_int($val)) { + return $val; + } + if (is_float($val)) { + return str_replace(',', '.', $val); + } + if (is_array($val) || is_object($val)) { + if (is_array($val) && (array_keys($val) === range(0,count($val)-1))) { + return '[' . implode(',', array_map(array($this, 'jsEncode'), $val)) . ']'; + } + $temp = array(); + foreach ($val as $k => $v){ + $temp[] = $this->jsEncode("{$k}") . ':' . $this->jsEncode($v); + } + return '{' . implode(',', $temp) . '}'; + } + // String otherwise + if (strpos($val, '@@') === 0) + return substr($val, 2); + if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.') + return $val; + + return '"' . str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val) . '"'; + } +} diff --git a/ckeditor_source.js b/ckeditor_source.js new file mode 100644 index 0000000..54be74a --- /dev/null +++ b/ckeditor_source.js @@ -0,0 +1,25 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +// Compressed version of core/ckeditor_base.js. See original for instructions. +/*jsl:ignore*/ +if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.6.1',revision:'7072',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})(); +/*jsl:end*/ + +// Uncomment the following line to have a new timestamp generated for each +// request, having clear cache load of the editor code. +// CKEDITOR.timestamp = ( new Date() ).valueOf(); + +if ( CKEDITOR.loader ) + CKEDITOR.loader.load( 'core/ckeditor' ); +else +{ + // Set the script name to be loaded by the loader. + CKEDITOR._autoLoad = 'core/ckeditor'; + + // Include the loader script. + document.write( + '<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' ); +} diff --git a/config.js b/config.js new file mode 100644 index 0000000..fde512c --- /dev/null +++ b/config.js @@ -0,0 +1,11 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.editorConfig = function( config ) +{ + // Define changes to default configuration here. For example: + // config.language = 'fr'; + // config.uiColor = '#AADC6E'; +}; diff --git a/contents.css b/contents.css new file mode 100644 index 0000000..e6cbc07 --- /dev/null +++ b/contents.css @@ -0,0 +1,25 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +body +{ + /* Font */ + font-family: Arial, Verdana, sans-serif; + font-size: 12px; + + /* Text color */ + color: #222; + + /* Remove the background color to make it transparent */ + background-color: #fff; +} + +ol,ul,dl +{ + /* IE7: reset rtl list margin. (#7334) */ + *margin-right:0px; + /* preserved spaces for rtl list item bullets. (#6249)*/ + padding-right:40px; +} diff --git a/images/spacer.gif b/images/spacer.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bfd67a2d6f72ac3a55cbfcea5866e841d22f5d9 GIT binary patch literal 43 mcmZ?wbhEHbWMp7uXkdT>#h)yUAf^t80Ld^gF}W}@SOWlZ0R#L1 literal 0 HcmV?d00001 diff --git a/lang/_languages.js b/lang/_languages.js new file mode 100644 index 0000000..2bb52e9 --- /dev/null +++ b/lang/_languages.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +var CKEDITOR_LANGS=(function(){var b={af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',cy:'Welsh',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-gb':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',is:'Icelandic',it:'Italian',ja:'Japanese',ka:'Georgian',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},c=[];for(var d in b)c.push({code:d,name:b[d]});c.sort(function(e,f){return e.name<f.name?-1:1;});return c;})(); diff --git a/lang/_translationstatus.txt b/lang/_translationstatus.txt new file mode 100644 index 0000000..1ae0dd8 --- /dev/null +++ b/lang/_translationstatus.txt @@ -0,0 +1,61 @@ +Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license + +af.js Found: 549 Missing: 24 +ar.js Found: 467 Missing: 106 +bg.js Found: 291 Missing: 282 +bn.js Found: 292 Missing: 281 +bs.js Found: 175 Missing: 398 +ca.js Found: 550 Missing: 23 +cs.js Found: 550 Missing: 23 +cy.js Found: 573 Missing: 0 +da.js Found: 417 Missing: 156 +de.js Found: 568 Missing: 5 +el.js Found: 306 Missing: 267 +en-au.js Found: 345 Missing: 228 +en-ca.js Found: 345 Missing: 228 +en-gb.js Found: 518 Missing: 55 +eo.js Found: 270 Missing: 303 +es.js Found: 570 Missing: 3 +et.js Found: 320 Missing: 253 +eu.js Found: 417 Missing: 156 +fa.js Found: 322 Missing: 251 +fi.js Found: 552 Missing: 21 +fo.js Found: 551 Missing: 22 +fr-ca.js Found: 319 Missing: 254 +fr.js Found: 551 Missing: 22 +gl.js Found: 292 Missing: 281 +gu.js Found: 320 Missing: 253 +he.js Found: 573 Missing: 0 +hi.js Found: 322 Missing: 251 +hr.js Found: 419 Missing: 154 +hu.js Found: 542 Missing: 31 +is.js Found: 326 Missing: 247 +it.js Found: 418 Missing: 155 +ja.js Found: 494 Missing: 79 +ka.js Found: 569 Missing: 4 +km.js Found: 286 Missing: 287 +ko.js Found: 304 Missing: 269 +lt.js Found: 326 Missing: 247 +lv.js Found: 294 Missing: 279 +mn.js Found: 320 Missing: 253 +ms.js Found: 276 Missing: 297 +nb.js Found: 550 Missing: 23 +nl.js Found: 570 Missing: 3 +no.js Found: 550 Missing: 23 +pl.js Found: 573 Missing: 0 +pt-br.js Found: 535 Missing: 38 +pt.js Found: 293 Missing: 280 +ro.js Found: 317 Missing: 256 +ru.js Found: 484 Missing: 89 +sk.js Found: 365 Missing: 208 +sl.js Found: 426 Missing: 147 +sr-latn.js Found: 287 Missing: 286 +sr.js Found: 286 Missing: 287 +sv.js Found: 551 Missing: 22 +th.js Found: 298 Missing: 275 +tr.js Found: 536 Missing: 37 +uk.js Found: 544 Missing: 29 +vi.js Found: 493 Missing: 80 +zh-cn.js Found: 548 Missing: 25 +zh.js Found: 419 Missing: 154 diff --git a/lang/af.js b/lang/af.js new file mode 100644 index 0000000..6323580 --- /dev/null +++ b/lang/af.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.af={dir:'ltr',editorTitle:'Teksverwerker, %1, druk op ALT 0 vir hulp.',toolbars:'Editor toolbars',editor:'Teksverwerker',source:'Bron',newPage:'Nuwe bladsy',save:'Bewaar',preview:'Voorbeeld',cut:'Knip',copy:'Kopiëer',paste:'Plak',print:'Druk',underline:'Onderstreep',bold:'Vet',italic:'Skuins',selectAll:'Selekteer alles',removeFormat:'Verwyder opmaak',strike:'Deurstreep',subscript:'Onderskrif',superscript:'Bo-skrif',horizontalrule:'Horisontale lyn invoeg',pagebreak:'Bladsy-einde invoeg',pagebreakAlt:'Bladsy-einde',unlink:'Verwyder skakel',undo:'Ontdoen',redo:'Oordoen',common:{browseServer:'Blaai op bediener',url:'URL',protocol:'Protokol',upload:'Oplaai',uploadSubmit:'Stuur na bediener',image:'Afbeelding',flash:'Flash',form:'Vorm',checkbox:'Merkhokkie',radio:'Radioknoppie',textField:'Teksveld',textarea:'Teks-area',hiddenField:'Blinde veld',button:'Knop',select:'Keuseveld',imageButton:'Afbeeldingsknop',notSet:'<geen instelling>',id:'Id',name:'Naam',langDir:'Skryfrigting',langDirLtr:'Links na regs (LTR)',langDirRtl:'Regs na links (RTL)',langCode:'Taalkode',longDescr:'Lang beskrywing URL',cssClass:'CSS klasse',advisoryTitle:'Aanbevole titel',cssStyle:'Styl',ok:'OK',cancel:'Kanselleer',close:'Sluit',preview:'Voorbeeld',generalTab:'Algemeen',advancedTab:'Gevorderd',validateNumberFailed:"Hierdie waarde is nie 'n getal nie.",confirmNewPage:"Alle wysiginge sal verlore gaan. Is u seker dat u 'n nuwe bladsy wil laai?",confirmCancel:'Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?',options:'Opsies',target:'Doel',targetNew:'Nuwe venster (_blank)',targetTop:'Boonste venster (_top)',targetSelf:'Selfde venster (_self)',targetParent:'Oorspronklike venster (_parent)',langDirLTR:'Links na Regs (LTR)',langDirRTL:'Regs na Links (RTL)',styles:'Styl',cssClasses:'CSS klasse',width:'Breedte',height:'Hoogte',align:'Oplyn',alignLeft:'Links',alignRight:'Regs',alignCenter:'Sentreer',alignTop:'Bo',alignMiddle:'Middel',alignBottom:'Onder',invalidHeight:"Hoogte moet 'n getal wees",invalidWidth:"Breedte moet 'n getal wees.",invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, nie beskikbaar nie</span>'},contextmenu:{options:'Konteks Spyskaart-opsies'},specialChar:{toolbar:'Voeg spesiaale karakter in',title:'Kies spesiale karakter',options:'Spesiale karakter-opsies'},link:{toolbar:'Skakel invoeg/wysig',other:'<ander>',menu:'Wysig skakel',title:'Skakel',info:'Skakel informasie',target:'Doel',upload:'Oplaai',advanced:'Gevorderd',type:'Skakelsoort',toUrl:'URL',toAnchor:'Anker in bladsy',toEmail:'E-pos',targetFrame:'<raam>',targetPopup:'<opspringvenster>',targetFrameName:'Naam van doelraam',targetPopupName:'Naam van opspringvenster',popupFeatures:'Eienskappe van opspringvenster',popupResizable:'Herskaalbaar',popupStatusBar:'Statusbalk',popupLocationBar:'Adresbalk',popupToolbar:'Werkbalk',popupMenuBar:'Spyskaartbalk',popupFullScreen:'Volskerm (IE)',popupScrollBars:'Skuifbalke',popupDependent:'Afhanklik (Netscape)',popupLeft:'Posisie links',popupTop:'Posisie bo',id:'Id',langDir:'Skryfrigting',langDirLTR:'Links na regs (LTR)',langDirRTL:'Regs na links (RTL)',acccessKey:'Toegangsleutel',name:'Naam',langCode:'Taalkode',tabIndex:'Tab indeks',advisoryTitle:'Aanbevole titel',advisoryContentType:'Aanbevole inhoudstipe',cssClasses:'CSS klasse',charset:'Karakterstel van geskakelde bron',styles:'Styl',rel:'Relationship',selectAnchor:"Kies 'n anker",anchorName:'Op ankernaam',anchorId:'Op element Id',emailAddress:'E-posadres',emailSubject:'Berig-onderwerp',emailBody:'Berig-inhoud',noAnchors:'(Geen ankers beskikbaar in dokument)',noUrl:'Gee die skakel se URL',noEmail:'Gee die e-posadres'},anchor:{toolbar:'Anker byvoeg/verander',menu:'Anker-eienskappe',title:'Anker-eienskappe',name:'Ankernaam',errorName:'Voltooi die ankernaam asseblief',remove:'Remove Anchor'},list:{numberedTitle:'Eienskappe van genommerde lys',bulletedTitle:'Eienskappe van ongenommerde lys',type:'Tipe',start:'Begin',validateStartNumber:"Beginnommer van lys moet 'n heelgetal wees.",circle:'Sirkel',disc:'Skyf',square:'Vierkant',none:'Geen',notset:'<nie ingestel nie>',armenian:'Armeense nommering',georgian:'Georgiese nommering (an, ban, gan, ens.)',lowerRoman:'Romeinse kleinletters (i, ii, iii, iv, v, ens.)',upperRoman:'Romeinse hoofletters (I, II, III, IV, V, ens.)',lowerAlpha:'Kleinletters (a, b, c, d, e, ens.)',upperAlpha:'Hoofletters (A, B, C, D, E, ens.)',lowerGreek:'Griekse kleinletters (alpha, beta, gamma, ens.)',decimal:'Desimale syfers (1, 2, 3, ens.)',decimalLeadingZero:'Desimale syfers met voorloopnul (01, 02, 03, ens.)'},findAndReplace:{title:'Soek en vervang',find:'Soek',replace:'Vervang',findWhat:'Soek na:',replaceWith:'Vervang met:',notFoundMsg:'Teks nie gevind nie.',matchCase:'Hoof/kleinletter sensitief',matchWord:'Hele woord moet voorkom',matchCyclic:'Soek deurlopend',replaceAll:'Vervang alles',replaceSuccessMsg:'%1 voorkoms(te) vervang.'},table:{toolbar:'Tabel',title:'Tabel eienskappe',menu:'Tabel eienskappe',deleteTable:'Verwyder tabel',rows:'Rye',columns:'Kolomme',border:'Randbreedte',widthPx:'piksels',widthPc:'persent',widthUnit:'breedte-eenheid',cellSpace:'Sel-afstand',cellPad:'Sel-spasie',caption:'Naam',summary:'Opsomming',headers:'Opskrifte',headersNone:'Geen',headersColumn:'Eerste kolom',headersRow:'Eerste ry',headersBoth:'Beide ',invalidRows:"Aantal rye moet 'n getal groter as 0 wees.",invalidCols:"Aantal kolomme moet 'n getal groter as 0 wees.",invalidBorder:"Randbreedte moet 'n getal wees.",invalidWidth:"Tabelbreedte moet 'n getal wees.",invalidHeight:"Tabelhoogte moet 'n getal wees.",invalidCellSpacing:"Sel-afstand moet 'n getal wees.",invalidCellPadding:"Sel-spasie moet 'n getal wees.",cell:{menu:'Sel',insertBefore:'Voeg sel in voor',insertAfter:'Voeg sel in na',deleteCell:'Verwyder sel',merge:'Voeg selle saam',mergeRight:'Voeg saam na regs',mergeDown:'Voeg saam ondertoe',splitHorizontal:'Splits sel horisontaal',splitVertical:'Splits sel vertikaal',title:'Sel eienskappe',cellType:'Sel tipe',rowSpan:'Omspan rye',colSpan:'Omspan kolomme',wordWrap:'Woord terugloop',hAlign:'Horisontale oplyning',vAlign:'Vertikale oplyning',alignBaseline:'Basislyn',bgColor:'Agtergrondkleur',borderColor:'Randkleur',data:'Inhoud',header:'Opskrif',yes:'Ja',no:'Nee',invalidWidth:"Selbreedte moet 'n getal wees.",invalidHeight:"Selhoogte moet 'n getal wees.",invalidRowSpan:"Omspan rye moet 'n heelgetal wees.",invalidColSpan:"Omspan kolomme moet 'n heelgetal wees.",chooseColor:'Kies'},row:{menu:'Ry',insertBefore:'Voeg ry in voor',insertAfter:'Voeg ry in na',deleteRow:'Verwyder ry'},column:{menu:'Kolom',insertBefore:'Voeg kolom in voor',insertAfter:'Voeg kolom in na',deleteColumn:'Verwyder kolom'}},button:{title:'Knop eienskappe',text:'Teks (Waarde)',type:'Soort',typeBtn:'Knop',typeSbm:'Stuur',typeRst:'Maak leeg'},checkboxAndRadio:{checkboxTitle:'Merkhokkie eienskappe',radioTitle:'Radioknoppie eienskappe',value:'Waarde',selected:'Geselekteer'},form:{title:'Vorm eienskappe',menu:'Vorm eienskappe',action:'Aksie',method:'Metode',encoding:'Kodering'},select:{title:'Keuseveld eienskappe',selectInfo:'Info',opAvail:'Beskikbare opsies',value:'Waarde',size:'Grootte',lines:'Lyne',chkMulti:'Laat meer as een keuse toe',opText:'Teks',opValue:'Waarde',btnAdd:'Byvoeg',btnModify:'Wysig',btnUp:'Op',btnDown:'Af',btnSetValue:'Stel as geselekteerde waarde',btnDelete:'Verwyder'},textarea:{title:'Teks-area eienskappe',cols:'Kolomme',rows:'Rye'},textfield:{title:'Teksveld eienskappe',name:'Naam',value:'Waarde',charWidth:'Breedte (karakters)',maxChars:'Maksimum karakters',type:'Soort',typeText:'Teks',typePass:'Wagwoord'},hidden:{title:'Verborge veld eienskappe',name:'Naam',value:'Waarde'},image:{title:'Afbeelding eienskappe',titleButton:'Afbeeldingsknop eienskappe',menu:'Afbeelding eienskappe',infoTab:'Afbeelding informasie',btnUpload:'Stuur na bediener',upload:'Oplaai',alt:'Alternatiewe teks',lockRatio:'Vaste proporsie',resetSize:'Herstel grootte',border:'Rand',hSpace:'HSpasie',vSpace:'VSpasie',alertUrl:'Gee URL van afbeelding.',linkTab:'Skakel',button2Img:"Wil u die geselekteerde afbeeldingsknop vervang met 'n eenvoudige afbeelding?",img2Button:"Wil u die geselekteerde afbeelding vervang met 'n afbeeldingsknop?",urlMissing:'Die URL na die afbeelding ontbreek.',validateBorder:"Rand moet 'n heelgetal wees.",validateHSpace:"HSpasie moet 'n heelgetal wees.",validateVSpace:"VSpasie moet 'n heelgetal wees."},flash:{properties:'Flash eienskappe',propertiesTab:'Eienskappe',title:'Flash eienskappe',chkPlay:'Speel outomaties',chkLoop:'Herhaal',chkMenu:'Flash spyskaart aan',chkFull:'Laat volledige skerm toe',scale:'Skaal',scaleAll:'Wys alles',scaleNoBorder:'Geen rand',scaleFit:'Presiese pas',access:'Skrip toegang',accessAlways:'Altyd',accessSameDomain:'Selfde domeinnaam',accessNever:'Nooit',alignAbsBottom:'Absoluut-onder',alignAbsMiddle:'Absoluut-middel',alignBaseline:'Basislyn',alignTextTop:'Teks bo',quality:'Kwaliteit',qualityBest:'Beste',qualityHigh:'Hoog',qualityAutoHigh:'Outomaties hoog',qualityMedium:'Gemiddeld',qualityAutoLow:'Outomaties laag',qualityLow:'Laag',windowModeWindow:'Venster',windowModeOpaque:'Ondeursigtig',windowModeTransparent:'Deursigtig',windowMode:'Venster modus',flashvars:'Veranderlikes vir Flash',bgcolor:'Agtergrondkleur',hSpace:'HSpasie',vSpace:'VSpasie',validateSrc:'Voeg die URL in',validateHSpace:"HSpasie moet 'n heelgetal wees.",validateVSpace:"VSpasie moet 'n heelgetal wees."},spellCheck:{toolbar:'Speltoets',title:'Speltoetser',notAvailable:'Jammer, hierdie diens is nie nou beskikbaar nie.',errorLoading:'Fout by inlaai van diens: %s.',notInDic:'Nie in woordeboek nie',changeTo:'Verander na',btnIgnore:'Ignoreer',btnIgnoreAll:'Ignoreer alles',btnReplace:'Vervang',btnReplaceAll:'vervang alles',btnUndo:'Ontdoen',noSuggestions:'- Geen voorstel -',progress:'Spelling word getoets...',noMispell:'Klaar met speltoets: Geen foute nie',noChanges:'Klaar met speltoets: Geen woorde verander nie',oneChange:'Klaar met speltoets: Een woord verander',manyChanges:'Klaar met speltoets: %1 woorde verander',ieSpellDownload:'Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?'},smiley:{toolbar:'Lagbekkie',title:'Voeg lagbekkie by',options:'Lagbekkie opsies'},elementsPath:{eleLabel:'Elemente-pad',eleTitle:'%1 element'},numberedlist:'Genommerde lys',bulletedlist:'Ongenommerde lys',indent:'Vergroot inspring',outdent:'Verklein inspring',justify:{left:'Links oplyn',center:'Sentreer',right:'Regs oplyn',block:'Uitvul'},blockquote:'Sitaatblok',clipboard:{title:'Byvoeg',cutError:'U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).',copyError:'U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).',pasteMsg:'Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.',securityMsg:'Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.',pasteArea:'Plak-area'},pastefromword:{confirmCleanup:'Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?',toolbar:'Plak vanuit Word',title:'Plak vanuit Word',error:"Die geplakte teks kon nie skoongemaak word nie, weens 'n interne fout"},pasteText:{button:'Plak as eenvoudige teks',title:'Plak as eenvoudige teks'},templates:{button:'Sjablone',title:'Inhoud Sjablone',options:'Sjabloon opsies',insertOption:'Vervang huidige inhoud',selectPromptMsg:'Kies die sjabloon om te gebruik in die redigeerder (huidige inhoud gaan verlore):',emptyListMsg:'(Geen sjablone gedefineer nie)'},showBlocks:'Toon blokke',stylesCombo:{label:'Styl',panelTitle:'Opmaak style',panelTitle1:'Blok style',panelTitle2:'Inlyn style',panelTitle3:'Objek style'},format:{label:'Opmaak',panelTitle:'Opmaak',tag_p:'Normaal',tag_pre:'Opgemaak',tag_address:'Adres',tag_h1:'Opskrif 1',tag_h2:'Opskrif 2',tag_h3:'Opskrif 3',tag_h4:'Opskrif 4',tag_h5:'Opskrif 5',tag_h6:'Opskrif 6',tag_div:'Normaal (DIV)'},div:{title:'Skep Div houer',toolbar:'Skep Div houer',cssClassInputLabel:'CSS klasse',styleSelectLabel:'Styl',IdInputLabel:'Id',languageCodeInputLabel:' Taalkode',inlineStyleInputLabel:'Inlyn Styl',advisoryTitleInputLabel:'Aanbevole Titel',langDirLabel:'Skryfrigting',langDirLTRLabel:'Links na regs (LTR)',langDirRTLLabel:'Regs na links (RTL)',edit:'Wysig Div',remove:'Verwyder Div'},iframe:{title:'IFrame Eienskappe',toolbar:'IFrame',noUrl:'Gee die iframe URL',scrolling:'Skuifbalke aan',border:'Wys rand van raam'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Fontnaam'},fontSize:{label:'Grootte',voiceLabel:'Fontgrootte',panelTitle:'Fontgrootte'},colorButton:{textColorTitle:'Tekskleur',bgColorTitle:'Agtergrondkleur',panelTitle:'Kleure',auto:'Outomaties',more:'Meer Kleure...'},colors:{'000':'Swart',800000:'Meroen','8B4513':'Sjokoladebruin','2F4F4F':'Donkerleisteengrys','008080':'Blougroen','000080':'Vlootblou','4B0082':'Indigo',696969:'Donkergrys',B22222:'Rooibaksteen',A52A2A:'Bruin',DAA520:'Donkergeel','006400':'Donkergroen','40E0D0':'Turkoois','0000CD':'Middelblou',800080:'Pers',808080:'Grys',F00:'Rooi',FF8C00:'Donkeroranje',FFD700:'Goud','008000':'Groen','0FF':'Siaan','00F':'Blou',EE82EE:'Viooltjieblou',A9A9A9:'Donkergrys',FFA07A:'Ligsalm',FFA500:'Oranje',FFFF00:'Geel','00FF00':'Lemmetjie',AFEEEE:'Ligturkoois',ADD8E6:'Ligblou',DDA0DD:'Pruim',D3D3D3:'Liggrys',FFF0F5:'Linne',FAEBD7:'Ivoor',FFFFE0:'Liggeel',F0FFF0:'Heuningdou',F0FFFF:'Asuur',F0F8FF:'Ligte hemelsblou',E6E6FA:'Laventel',FFF:'Wit'},scayt:{title:'Speltoets terwyl u tik',opera_title:'Nie ondersteun deur Opera nie',enable:'SCAYT aan',disable:'SCAYT af',about:'SCAYT info',toggle:'SCAYT wissel aan/af',options:'Opsies',langs:'Tale',moreSuggestions:'Meer voorstelle',ignore:'Ignoreer',ignoreAll:'Ignoreer alles',addWord:'Voeg woord by',emptyDic:'Woordeboeknaam mag nie leeg wees nie.',optionsTab:'Opsies',allCaps:'Ignoreer woorde in hoofletters',ignoreDomainNames:'Ignoreer domeinname',mixedCase:'Ignoreer woorde met hoof- en kleinletters',mixedWithDigits:'Ignoreer woorde met syfers',languagesTab:'Tale',dictionariesTab:'Woordeboeke',dic_field_name:'Naam van woordeboek',dic_create:'Skep',dic_restore:'Herstel',dic_delete:'Verwijder',dic_rename:'Hernoem',dic_info:"Aanvanklik word die gebruikerswoordeboek in 'n koekie gestoor. Koekies is egter beperk in grootte. Wanneer die gebruikerswoordeboek te groot vir 'n koekie geword het, kan dit op ons bediener gestoor word. Om u persoonlike woordeboek op ons bediener te stoor, gee asb. 'n naam vir u woordeboek. Indien u alreeds 'n gestoorde woordeboek het, tik die naam en kliek op die Herstel knop.",aboutTab:'Info'},about:{title:'Info oor CKEditor',dlgTitle:'Info oor CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Vir lisensie-informasie, besoek asb. ons webwerf:',copy:'Kopiereg © $1. Alle regte voorbehou.'},maximize:'Maksimaliseer',minimize:'Minimaliseer',fakeobjects:{anchor:'Anker',flash:'Flash animasie',iframe:'IFrame',hiddenfield:'Verborge veld',unknown:'Onbekende objek'},resize:'Sleep om te herskaal',colordialog:{title:'Kies kleur',options:'Kleuropsies',highlight:'Aktief',selected:'Geselekteer',clear:'Herstel'},toolbarCollapse:'Verklein werkbalk',toolbarExpand:'Vergroot werkbalk',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Skryfrigting van links na regs',rtl:'Skryfrigting van regs na links'},docprops:{label:'Dokument Eienskappe',title:'Dokument Eienskappe',design:'Design',meta:'Meta Data',chooseColor:'Kies',other:'<ander>',docTitle:'Bladsy Opskrif',charset:'Karakterstel Kodeering',charsetOther:'Ander Karakterstel Kodeering',charsetASCII:'ASCII',charsetCE:'Sentraal Europa',charsetCT:'Chinees Traditioneel (Big5)',charsetCR:'Cyrillic',charsetGR:'Grieks',charsetJP:'Japanees',charsetKR:'Koreans',charsetTR:'Turks',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Dokument Opskrif Soort',docTypeOther:'Ander Dokument Opskrif Soort',xhtmlDec:'Voeg XHTML verklaring by',bgColor:'Agtergrond kleur',bgImage:'Agtergrond Beeld URL',bgFixed:'Vasgeklemde Agtergrond',txtColor:'Tekskleur',margin:'Bladsy Rante',marginTop:'Bo',marginLeft:'Links',marginRight:'Regs',marginBottom:'Onder',metaKeywords:'Dokument Index Sleutelwoorde(comma verdeelt)',metaDescription:'Dokument Beskrywing',metaAuthor:'Skrywer',metaCopyright:'Kopiereg',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/ar.js b/lang/ar.js new file mode 100644 index 0000000..4c213bc --- /dev/null +++ b/lang/ar.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.ar={dir:'rtl',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'اÙ٠صدر',newPage:'صÙØØ© جدÙدة',save:'ØÙظ',preview:'٠عاÙÙØ© اÙصÙØØ©',cut:'Ùص',copy:'Ùسخ',paste:'ÙصÙ',print:'طباعة',underline:'تسطÙر',bold:'غا٠Ù',italic:'٠ائÙ',selectAll:'تØدÙد اÙÙÙ',removeFormat:'إزاÙØ© اÙتÙسÙÙات',strike:'ÙتÙسط٠خط',subscript:'Ù ÙØ®Ùض',superscript:'٠رتÙع',horizontalrule:'خط ÙاصÙ',pagebreak:'إدخا٠صÙØØ© جدÙدة',pagebreakAlt:'Page Break',unlink:'إزاÙØ© رابط',undo:'تراجع',redo:'إعادة',common:{browseServer:'تصÙØ',url:'اÙرابط',protocol:'اÙبرÙتÙÙÙÙ',upload:'رÙع',uploadSubmit:'أرسÙ',image:'صÙرة',flash:'ÙÙاش',form:'ÙÙ Ùذج',checkbox:'خاÙØ© إختÙار',radio:'زر اختÙار',textField:'٠ربع Ùص',textarea:'٠ساØØ© ÙصÙØ©',hiddenField:'إدراج ØÙÙ Ø®ÙÙ',button:'زر ضغط',select:'اختار',imageButton:'زر صÙرة',notSet:'<بدÙ٠تØدÙد>',id:'اÙرÙÙ ',name:'اÙاس٠',langDir:'إتجا٠اÙÙص',langDirLtr:'اÙÙسار ÙÙÙÙ ÙÙ (LTR)',langDirRtl:'اÙÙÙ ÙÙ ÙÙÙسار (RTL)',langCode:'ر٠ز اÙÙغة',longDescr:'اÙÙص٠اÙتÙصÙÙÙ',cssClass:'Ùئات اÙتÙسÙÙ',advisoryTitle:'عÙÙا٠اÙتÙرÙر',cssStyle:'ÙÙ Ø·',ok:'Ù ÙاÙÙ',cancel:'Ø¥Ùغاء اÙأ٠ر',close:'Close',preview:'Preview',generalTab:'عا٠',advancedTab:'٠تÙد٠',validateNumberFailed:'ÙاÙÙجد ÙتÙجة',confirmNewPage:'ستÙÙد أ٠٠تغÙÙرات اذا Ù٠تÙ٠بØÙظÙا اÙÙا. Ù٠أÙت ٠تأÙد Ø£Ù٠ترÙد صÙØØ© جدÙدةØ',confirmCancel:'بعض اÙØ®Ùارات Ùد تغÙرت. Ù٠أÙت ٠تأÙد ٠٠إغÙا٠٠ربع اÙÙصØ',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'اÙعرض',height:'اÙإرتÙاع',align:'Ù Øاذاة',alignLeft:'Ùسار',alignRight:'ÙÙ ÙÙ',alignCenter:'Ùسط',alignTop:'أعÙÙ',alignMiddle:'Ùسط',alignBottom:'أسÙÙ',invalidHeight:'اÙارتÙاع Ùجب Ø£Ù ÙÙÙ٠عدداÙ.',invalidWidth:'اÙعرض Ùجب Ø£Ù ÙÙÙ٠عدداÙ.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, غÙر ٠تاØ</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'إدراج خاص.Ù',title:'اختر اÙØ®Ùاص',options:'Special Character Options'},link:{toolbar:'رابط',other:'<أخرÙ>',menu:'تØرÙر رابط',title:'إرتباط تشعبÙ',info:'٠عÙÙ٠ات اÙرابط',target:'Ùد٠اÙرابط',upload:'رÙع',advanced:'٠تÙد٠',type:'ÙÙع اÙربط',toUrl:'URL',toAnchor:'Ù Ùا٠ÙÙ Ùذا اÙ٠ستÙد',toEmail:'برÙد Ø¥ÙÙترÙÙÙ',targetFrame:'<إطار>',targetPopup:'<ÙاÙذة Ù ÙبثÙØ©>',targetFrameName:'اس٠اÙإطار اÙ٠ستÙدÙ',targetPopupName:'اس٠اÙÙاÙذة اÙÙ ÙبثÙØ©',popupFeatures:'خصائص اÙÙاÙذة اÙÙ ÙبثÙØ©',popupResizable:'ÙابÙØ© اÙتشÙÙÙ',popupStatusBar:'شرÙØ· اÙØاÙØ©',popupLocationBar:'شرÙØ· اÙعÙÙاÙ',popupToolbar:'شرÙØ· اÙأدÙات',popupMenuBar:'اÙÙÙائ٠اÙرئÙسÙØ©',popupFullScreen:'Ù Ùئ اÙشاشة (IE)',popupScrollBars:'أشرطة اÙت٠رÙر',popupDependent:'تابع (Netscape)',popupLeft:'اÙت٠رÙز ÙÙÙسار',popupTop:'اÙت٠رÙز ÙÙأعÙÙ',id:'ÙÙÙØ©',langDir:'إتجا٠اÙÙص',langDirLTR:'اÙÙسار ÙÙÙÙ ÙÙ (LTR)',langDirRTL:'اÙÙÙ ÙÙ ÙÙÙسار (RTL)',acccessKey:'Ù ÙاتÙØ Ø§Ùإختصار',name:'اÙاس٠',langCode:'ÙÙد اÙÙص',tabIndex:'اÙترتÙب',advisoryTitle:'عÙÙا٠اÙتÙرÙر',advisoryContentType:'ÙÙع اÙتÙرÙر',cssClasses:'Ùئات اÙتÙسÙÙ',charset:'تر٠Ùز اÙ٠ادة اÙÙ Ø·ÙÙبة',styles:'ÙÙ Ø·',rel:'Relationship',selectAnchor:'اختر عÙا٠ة ٠رجعÙØ©',anchorName:'Øسب اÙاس٠',anchorId:'Øسب رÙ٠اÙعÙصر',emailAddress:'عÙÙا٠اÙبرÙد Ø¥ÙÙترÙÙÙ',emailSubject:'Ù ÙضÙع اÙرساÙØ©',emailBody:'Ù ØتÙ٠اÙرساÙØ©',noAnchors:'(Ùا تÙجد عÙا٠ات ٠رجعÙØ© ÙÙ Ùذا اÙ٠ستÙد)',noUrl:'Ù Ù ÙضÙ٠أدخ٠عÙÙا٠اÙÙ ÙÙع اÙØ°Ù ÙØ´Ùر Ø¥ÙÙ٠اÙرابط',noEmail:'Ù Ù ÙضÙ٠أدخ٠عÙÙا٠اÙبرÙد اÙØ¥ÙÙترÙÙÙ'},anchor:{toolbar:'إشارة ٠رجعÙØ©',menu:'تØرÙر اÙإشارة اÙ٠رجعÙØ©',title:'خصائص اÙإشارة اÙ٠رجعÙØ©',name:'اس٠اÙإشارة اÙ٠رجعÙØ©',errorName:'اÙرجاء Ùتابة اس٠اÙإشارة اÙ٠رجعÙØ©',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'بØØ« ÙاستبداÙ',find:'بØØ«',replace:'إستبداÙ',findWhat:'اÙبØØ« بÙ:',replaceWith:'إستبدا٠بÙ:',notFoundMsg:'ÙÙ Ùت٠اÙعثÙر عÙ٠اÙÙص اÙÙ Øدد.',matchCase:'٠طابÙØ© ØاÙØ© اÙØ£ØرÙ',matchWord:'٠طابÙØ© باÙÙا٠Ù',matchCyclic:'٠طابÙØ© دÙرÙØ©',replaceAll:'إستبدا٠اÙÙÙ',replaceSuccessMsg:'ت٠استبدا٠1% ٠٠اÙØاÙات '},table:{toolbar:'جدÙÙ',title:'خصائص اÙجدÙÙ',menu:'خصائص اÙجدÙÙ',deleteTable:'Øذ٠اÙجدÙÙ',rows:'صÙÙÙ',columns:'أع٠دة',border:'اÙØدÙد',widthPx:'بÙسÙ',widthPc:'باÙ٠ئة',widthUnit:'width unit',cellSpace:'تباعد اÙØ®ÙاÙا',cellPad:'اÙ٠ساÙØ© اÙبادئة',caption:'اÙÙصÙ',summary:'اÙØ®Ùاصة',headers:'اÙعÙاÙÙÙ',headersNone:'بدÙÙ',headersColumn:'اÙع٠Ùد اÙØ£ÙÙ',headersRow:'اÙص٠اÙØ£ÙÙ',headersBoth:'ÙÙاÙ٠ا',invalidRows:'عدد اÙصÙÙÙ Ùجب Ø£Ù ÙÙÙ٠عددا٠أÙبر ٠٠صÙر.',invalidCols:'عدد اÙأع٠دة Ùجب Ø£Ù ÙÙÙ٠عددا٠أÙبر ٠٠صÙر.',invalidBorder:'Øج٠اÙØد Ùجب Ø£Ù ÙÙÙ٠عدداÙ.',invalidWidth:'عرض اÙجدÙÙ Ùجب Ø£Ù ÙÙÙ٠عدداÙ.',invalidHeight:'ارتÙاع اÙجدÙÙ Ùجب Ø£Ù ÙÙÙ٠عدداÙ.',invalidCellSpacing:'اÙ٠ساÙØ© بÙ٠اÙØ®ÙاÙا Ùجب أ٠تÙÙ٠عدداÙ.',invalidCellPadding:'اÙ٠ساÙØ© اÙبادئة Ùجب أ٠تÙÙ٠عدداÙ',cell:{menu:'Ø®ÙÙØ©',insertBefore:'إدراج Ø®ÙÙØ© ÙبÙ',insertAfter:'إدراج Ø®ÙÙØ© بعد',deleteCell:'ØØ°Ù Ø®ÙÙØ©',merge:'د٠ج Ø®ÙاÙا',mergeRight:'د٠ج ÙÙÙÙ ÙÙ',mergeDown:'د٠ج ÙÙأسÙÙ',splitHorizontal:'تÙسÙ٠اÙØ®ÙÙØ© Ø£ÙÙÙاÙ',splitVertical:'تÙسÙ٠اÙØ®ÙÙØ© ع٠ÙدÙاÙ',title:'خصائص اÙØ®ÙÙØ©',cellType:'ÙÙع اÙØ®ÙÙØ©',rowSpan:'ا٠تداد اÙصÙÙÙ',colSpan:'ا٠تداد اÙأع٠دة',wordWrap:'اÙتÙا٠اÙÙص',hAlign:'Ù Øاذاة Ø£ÙÙÙØ©',vAlign:'Ù Øاذاة رأسÙØ©',alignBaseline:'خط اÙÙاعدة',bgColor:'ÙÙ٠اÙØ®ÙÙÙØ©',borderColor:'ÙÙ٠اÙØدÙد',data:'بÙاÙات',header:'عÙÙاÙ',yes:'Ùع٠',no:'Ùا',invalidWidth:'عرض اÙØ®ÙÙØ© Ùجب Ø£Ù ÙÙÙ٠عدداÙ.',invalidHeight:'ارتÙاع اÙØ®ÙÙØ© Ùجب Ø£Ù ÙÙÙ٠عدداÙ.',invalidRowSpan:'ا٠تداد اÙصÙÙÙ Ùجب Ø£Ù ÙÙÙ٠عددا٠صØÙØاÙ.',invalidColSpan:'ا٠تداد اÙأع٠دة Ùجب Ø£Ù ÙÙÙ٠عددا٠صØÙØاÙ.',chooseColor:'اختر'},row:{menu:'صÙ',insertBefore:'إدراج ص٠ÙبÙ',insertAfter:'إدراج ص٠بعد',deleteRow:'Øذ٠صÙÙÙ'},column:{menu:'ع٠Ùد',insertBefore:'إدراج ع٠Ùد ÙبÙ',insertAfter:'إدراج ع٠Ùد بعد',deleteColumn:'Øذ٠أع٠دة'}},button:{title:'خصائص زر اÙضغط',text:'اÙÙÙÙ Ø©/اÙتس٠ÙØ©',type:'ÙÙع اÙزر',typeBtn:'زر',typeSbm:'إرساÙ',typeRst:'إعادة تعÙÙÙ'},checkboxAndRadio:{checkboxTitle:'خصائص خاÙØ© اÙإختÙار',radioTitle:'خصائص زر اÙØ®Ùار',value:'اÙÙÙÙ Ø©',selected:'Ù Øدد'},form:{title:'خصائص اÙÙÙ Ùذج',menu:'خصائص اÙÙÙ Ùذج',action:'اس٠اÙÙ ÙÙ',method:'اÙأسÙÙب',encoding:'تشÙÙر'},select:{title:'خصائص اختÙار اÙØÙÙ',selectInfo:'اختار ٠عÙÙ٠ات',opAvail:'اÙØ®Ùارات اÙ٠تاØØ©',value:'اÙÙÙÙ Ø©',size:'اÙØج٠',lines:'اÙأسطر',chkMulti:'اÙØ³Ù Ø§Ø Ø¨ØªØدÙدات ٠تعددة',opText:'اÙÙص',opValue:'اÙÙÙÙ Ø©',btnAdd:'إضاÙØ©',btnModify:'تعدÙÙ',btnUp:'أعÙÙ',btnDown:'أسÙÙ',btnSetValue:'إجعÙÙا Ù Øددة',btnDelete:'إزاÙØ©'},textarea:{title:'خصائص ٠ساØØ© اÙÙص',cols:'اÙأع٠دة',rows:'اÙصÙÙÙ'},textfield:{title:'خصائص ٠ربع اÙÙص',name:'اÙاس٠',value:'اÙÙÙÙ Ø©',charWidth:'عرض اÙس٠ات',maxChars:'اÙص٠عدد ÙÙس٠ات',type:'ÙÙع اÙÙ ØتÙÙ',typeText:'Ùص',typePass:'ÙÙÙ Ø© ٠رÙر'},hidden:{title:'خصائص اÙØÙ٠اÙÙ Ø®ÙÙ',name:'اÙاس٠',value:'اÙÙÙÙ Ø©'},image:{title:'خصائص اÙصÙرة',titleButton:'خصائص زر اÙصÙرة',menu:'خصائص اÙصÙرة',infoTab:'٠عÙÙ٠ات اÙصÙرة',btnUpload:'أرسÙÙا ÙÙخاد٠',upload:'رÙع',alt:'عÙÙا٠اÙصÙرة',lockRatio:'تÙاس٠اÙØج٠',resetSize:'إستعادة اÙØج٠اÙأصÙÙ',border:'س٠٠اÙØدÙد',hSpace:'تباعد Ø£ÙÙÙ',vSpace:'تباعد ع٠ÙدÙ',alertUrl:'ÙضÙا٠أÙتب اÙÙ ÙÙع اÙذ٠تÙجد عÙÙÙ Ùذ٠اÙصÙرة.',linkTab:'اÙرابط',button2Img:'Ù٠ترÙد تØÙÙ٠زر اÙصÙرة اÙ٠ختار Ø¥Ù٠صÙرة بسÙطةØ',img2Button:'Ù٠ترÙد تØÙÙ٠اÙصÙرة اÙ٠ختارة Ø¥Ù٠زر صÙرةØ',urlMissing:'عÙÙا٠٠صدر اÙصÙرة Ù ÙÙÙد',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'خصائص اÙÙÙاش',propertiesTab:'اÙخصائص',title:'خصائص ÙÙÙ٠اÙÙÙاش',chkPlay:'تشغÙ٠تÙÙائÙ',chkLoop:'تÙرار',chkMenu:'ت٠ÙÙÙ Ùائ٠ة ÙÙÙ٠اÙÙÙاش',chkFull:'Ù ÙØ¡ اÙشاشة',scale:'اÙØج٠',scaleAll:'إظÙار اÙÙÙ',scaleNoBorder:'بÙا ØدÙد',scaleFit:'ضبط تا٠',access:'دخÙ٠اÙÙص اÙبر٠جÙ',accessAlways:'دائ٠اÙ',accessSameDomain:'ÙÙس اÙÙطاÙ',accessNever:'Ù Ø·ÙÙاÙ',alignAbsBottom:'أسÙ٠اÙÙص',alignAbsMiddle:'Ùسط اÙسطر',alignBaseline:'عÙ٠اÙسطر',alignTextTop:'أعÙ٠اÙÙص',quality:'جÙدة',qualityBest:'Ø£ÙضÙ',qualityHigh:'عاÙÙØ©',qualityAutoHigh:'عاÙÙØ© تÙÙائÙاÙ',qualityMedium:'٠تÙسطة',qualityAutoLow:'Ù ÙØ®Ùضة تÙÙائÙاÙ',qualityLow:'Ù ÙØ®Ùضة',windowModeWindow:'ÙاÙذة',windowModeOpaque:'غÙر Ø´ÙاÙ',windowModeTransparent:'Ø´ÙاÙ',windowMode:'Ùضع اÙÙاÙذة',flashvars:'٠تغÙرات اÙÙÙاش',bgcolor:'ÙÙ٠اÙØ®ÙÙÙØ©',hSpace:'تباعد Ø£ÙÙÙ',vSpace:'تباعد ع٠ÙدÙ',validateSrc:'ÙضÙا٠أدخ٠عÙÙا٠اÙÙ ÙÙع اÙØ°Ù ÙØ´Ùر Ø¥ÙÙ٠اÙرابط',validateHSpace:'HSpace Ùجب Ø£Ù ÙÙÙ٠عدداÙ.',validateVSpace:'VSpace Ùجب Ø£Ù ÙÙÙ٠عدداÙ.'},spellCheck:{toolbar:'تدÙÙ٠إ٠ÙائÙ',title:'اÙتدÙÙ٠اÙØ¥Ù ÙائÙ',notAvailable:'عÙÙاÙØ ÙÙÙÙ Ùذ٠اÙخد٠ة غÙر ٠تاØØ© اÙاÙ',errorLoading:'خطأ Ù٠تØÙ Ù٠تطبÙ٠خد٠ة اÙاستضاÙØ©: %s.',notInDic:'ÙÙست Ù٠اÙÙا٠Ùس',changeTo:'اÙتغÙÙر Ø¥ÙÙ',btnIgnore:'تجاÙÙ',btnIgnoreAll:'تجاÙ٠اÙÙÙ',btnReplace:'تغÙÙر',btnReplaceAll:'تغÙÙر اÙÙÙ',btnUndo:'تراجع',noSuggestions:'- Ùا تÙجد Ø¥ÙتراØات -',progress:'جار٠اÙتدÙÙ٠اÙا٠ÙائÙ',noMispell:'ت٠اÙتدÙÙ٠اÙØ¥Ù ÙائÙ: ÙÙ Ùت٠اÙعثÙر عÙ٠أ٠أخطاء Ø¥Ù ÙائÙØ©',noChanges:'ت٠اÙتدÙÙ٠اÙØ¥Ù ÙائÙ: ÙÙ Ùت٠تغÙÙر Ø£Ù ÙÙÙ Ø©',oneChange:'ت٠اÙتدÙÙ٠اÙØ¥Ù ÙائÙ: ت٠تغÙÙر ÙÙÙ Ø© ÙاØدة ÙÙØ·',manyChanges:'ت٠إÙ٠ا٠اÙتدÙÙ٠اÙØ¥Ù ÙائÙ: ت٠تغÙÙر %1 Ù Ù ÙÙ٠ات',ieSpellDownload:'اÙ٠دÙ٠اÙØ¥Ù Ùائ٠(اÙØ¥ÙجÙÙزÙ) غÙر ٠ثبÙت. Ù٠تÙد تØÙ ÙÙ٠اÙØ¢ÙØ'},smiley:{toolbar:'ابتسا٠ات',title:'إدراج ابتسا٠ات',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'عÙصر 1%'},numberedlist:'ادخاÙ/Øذ٠تعداد رÙÙ Ù',bulletedlist:'ادخاÙ/Øذ٠تعداد ÙÙØ·Ù',indent:'زÙادة اÙ٠ساÙØ© اÙبادئة',outdent:'Ø¥ÙÙاص اÙ٠ساÙØ© اÙبادئة',justify:{left:'Ù Øاذاة Ø¥Ù٠اÙÙسار',center:'تÙسÙØ·',right:'Ù Øاذاة Ø¥Ù٠اÙÙÙ ÙÙ',block:'ضبط'},blockquote:'اÙتباس',clipboard:{title:'ÙصÙ',cutError:'اÙإعدادات اÙØ£Ù ÙÙØ© ÙÙ٠تصÙØ Ø§Ùذ٠تستخد٠٠ت٠Ùع اÙÙص اÙتÙÙائÙ. ÙضÙا٠إستخد٠ÙÙØØ© اÙÙ ÙاتÙØ ÙÙع٠ذÙÙ (Ctrl/Cmd+X).',copyError:'اÙإعدادات اÙØ£Ù ÙÙØ© ÙÙ٠تصÙØ Ø§Ùذ٠تستخد٠٠ت٠Ùع اÙÙسخ اÙتÙÙائÙ. ÙضÙا٠إستخد٠ÙÙØØ© اÙÙ ÙاتÙØ ÙÙع٠ذÙÙ (Ctrl/Cmd+C).',pasteMsg:'اÙص٠داخ٠اÙصÙدÙ٠بإستخدا٠زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) ÙÙ ÙÙØØ© اÙÙ ÙاتÙØØ Ø«Ù Ø§Ø¶ØºØ· زر <STRONG>Ù ÙاÙÙ</STRONG>.',securityMsg:'Ùظرا٠Ùإعدادات اÙأ٠ا٠اÙخاصة ب٠تصÙØÙØ ÙÙ Ùت٠ÙÙ Ùذا اÙÙ Øرر ٠٠اÙÙصÙÙ ÙÙ ØتÙÙ ØاÙظتÙØ ÙØ°ÙÙ Ùجب عÙÙÙ Ùص٠اÙÙ ØتÙ٠٠رة أخر٠ÙÙ Ùذ٠اÙÙاÙذة.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Ùبد٠أ٠اÙÙص اÙ٠راد ÙصÙÙ Ù ÙسÙØ® ٠٠برÙا٠ج ÙÙرد. Ù٠تÙد تÙظÙÙÙ Ùب٠اÙشرÙع Ù٠ع٠ÙÙØ© اÙÙصÙØ',toolbar:'Ùص٠٠٠ÙÙرد',title:'Ùص٠٠٠ÙÙرد',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Ùص٠ÙÙص بسÙØ·',title:'Ùص٠ÙÙص بسÙØ·'},templates:{button:'اÙÙÙاÙب',title:'ÙÙاÙب اÙÙ ØتÙÙ',options:'Template Options',insertOption:'استبدا٠اÙÙ ØتÙÙ',selectPromptMsg:'اختر اÙÙاÙب اÙذ٠تÙد Ùضع٠Ù٠اÙÙ Øرر',emptyListMsg:'(ÙÙ Ùت٠تعرÙ٠أ٠ÙاÙب)'},showBlocks:'٠خطط تÙصÙÙÙ',stylesCombo:{label:'Ø£Ù٠اط',panelTitle:'Formatting Styles',panelTitle1:'Ø£Ù٠اط اÙÙÙرة',panelTitle2:'Ø£Ù٠اط ٠ض٠ÙØ©',panelTitle3:'Ø£Ù٠اط اÙÙائÙ'},format:{label:'تÙسÙÙ',panelTitle:'تÙسÙ٠اÙÙÙرة',tag_p:'عادÙ',tag_pre:'Ù ÙسÙÙ',tag_address:'عÙÙاÙ',tag_h1:'اÙعÙÙا٠1',tag_h2:'اÙعÙÙا٠2',tag_h3:'اÙعÙÙا٠3',tag_h4:'اÙعÙÙا٠4',tag_h5:'اÙعÙÙا٠5',tag_h6:'اÙعÙÙا٠6',tag_div:'عاد٠(DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'خط',voiceLabel:'Øج٠اÙخط',panelTitle:'Øج٠اÙخط'},fontSize:{label:'Øج٠اÙخط',voiceLabel:'Øج٠اÙخط',panelTitle:'Øج٠اÙخط'},colorButton:{textColorTitle:'ÙÙ٠اÙÙص',bgColorTitle:'ÙÙ٠اÙØ®ÙÙÙØ©',panelTitle:'Colors',auto:'تÙÙائÙ',more:'Ø£ÙÙا٠إضاÙÙØ©...'},colors:{'000':'أسÙد',800000:'ÙستÙائÙ','8B4513':'بÙÙ ÙاتØ','2F4F4F':'ر٠اد٠أردÙاز٠غا٠Ù','008080':'أزر٠٠خضر','000080':'أزر٠داÙÙ','4B0082':'ÙØÙÙ',696969:'ر٠اد٠داÙÙ',B22222:'Ø·ÙبÙ',A52A2A:'بÙÙ',DAA520:'Ø°Ùب٠داÙÙ','006400':'أخضر داÙÙ','40E0D0':'ÙÙرÙزÙ','0000CD':'أزر٠٠تÙسط',800080:'بÙÙسج٠غا٠Ù',808080:'ر٠ادÙ',F00:'Ø£Ø٠ر',FF8C00:'برتÙاÙ٠داÙÙ',FFD700:'Ø°ÙبÙ','008000':'أخضر','0FF':'ترÙÙاز','00F':'أزرÙ',EE82EE:'بÙÙسجÙ',A9A9A9:'ر٠اد٠شاØب',FFA07A:'برتÙاÙÙ ÙردÙ',FFA500:'برتÙاÙÙ',FFFF00:'أصÙر','00FF00':'ÙÙÙ ÙÙÙ',AFEEEE:'ÙÙرÙز٠شاØب',ADD8E6:'أزر٠ÙاتØ',DDA0DD:'بÙÙسج٠ÙاتØ',D3D3D3:'ر٠اد٠ÙاتØ',FFF0F5:'Ùرد٠ÙاتØ',FAEBD7:'أبÙض عتÙÙ',FFFFE0:'أصÙر ÙاتØ',F0FFF0:'أبÙض ٠ائ٠ÙÙأخضر',F0FFFF:'س٠اÙÙ',F0F8FF:'ÙبÙÙ',E6E6FA:'أرجÙاÙÙ',FFF:'أبÙض'},scayt:{title:'تدÙÙ٠إ٠Ùائ٠أثÙاء اÙÙتابة',opera_title:'Not supported by Opera',enable:'تÙعÙÙ SCAYT',disable:'تعطÙÙ SCAYT',about:'ع٠SCAYT',toggle:'تثبÙت SCAYT',options:'Ø®Ùارات',langs:'Ùغات',moreSuggestions:'اÙ٠زÙد ٠٠اÙÙ ÙترØات',ignore:'تجاÙÙ',ignoreAll:'تجاÙ٠اÙÙÙ',addWord:'إضاÙØ© ÙÙÙ Ø©',emptyDic:'اس٠اÙÙا٠Ùس Ùجب Ø£Ùا ÙÙÙÙ ÙارغاÙ.',optionsTab:'Ø®Ùارات',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Ùغات',dictionariesTab:'ÙÙا٠Ùس',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'عÙ'},about:{title:'ع٠CKEditor',dlgTitle:'ع٠CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'ÙÙØصÙ٠عÙ٠٠عÙÙ٠ات اÙترخÙص Ø Ùرج٠زÙارة Ù ÙÙعÙا عÙ٠شبÙØ© اÙاÙترÙت:',copy:'ØÙÙ٠اÙÙشر © $1. ج٠Ùع اÙØÙÙÙ Ù ØÙÙظة.'},maximize:'تÙبÙر',minimize:'تصغÙر',fakeobjects:{anchor:'إرساء',flash:'رس٠٠تØر٠باÙÙÙاش',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Ùائ٠غÙر ٠عرÙÙ'},resize:'اسØب ÙتغÙÙر اÙØج٠',colordialog:{title:'اختر ÙÙÙ',options:'Color Options',highlight:'Ø¥ÙÙاء اÙضÙØ¡',selected:'Ù Ùختار',clear:'٠سØ'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'خصائص اÙصÙØØ©',title:'خصائص اÙصÙØØ©',design:'Design',meta:'اÙ٠عرÙÙات اÙرأسÙØ©',chooseColor:'اختر',other:'<أخرÙ>',docTitle:'عÙÙا٠اÙصÙØØ©',charset:'تر٠Ùز اÙØرÙÙ',charsetOther:'تر٠Ùز آخر',charsetASCII:'ASCII',charsetCE:'Ø£ÙرÙبا اÙÙسطÙ',charsetCT:'اÙصÙÙÙØ© اÙتÙÙÙدÙØ© (Big5)',charsetCR:'اÙسÙرÙÙÙØ©',charsetGR:'اÙÙÙÙاÙÙØ©',charsetJP:'اÙÙاباÙÙØ©',charsetKR:'اÙÙÙرÙØ©',charsetTR:'اÙترÙÙØ©',charsetUN:'Unicode (UTF-8)',charsetWE:'Ø£ÙرÙبا اÙغربÙØ©',docType:'ترÙÙسة ÙÙع اÙصÙØØ©',docTypeOther:'ترÙÙسة ÙÙع صÙØØ© أخرÙ',xhtmlDec:'تض٠Ù٠إعÙاÙات Ùغة XHTMLÙ',bgColor:'ÙÙ٠اÙØ®ÙÙÙØ©',bgImage:'رابط اÙصÙرة اÙØ®ÙÙÙØ©',bgFixed:'جعÙÙا عÙا٠ة ٠ائÙØ©',txtColor:'ÙÙ٠اÙÙص',margin:'ÙÙا٠ش اÙصÙØØ©',marginTop:'عÙÙÙ',marginLeft:'Ø£Ùسر',marginRight:'Ø£ÙÙ Ù',marginBottom:'سÙÙÙ',metaKeywords:'اÙÙÙ٠ات اÙأساسÙØ© (Ù ÙصÙÙØ© بÙÙاصÙ)Ù',metaDescription:'Ùص٠اÙصÙØØ©',metaAuthor:'اÙÙاتب',metaCopyright:'اÙ٠اÙÙ',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/bg.js b/lang/bg.js new file mode 100644 index 0000000..6136f55 --- /dev/null +++ b/lang/bg.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.bg={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Ðод',newPage:'Ðова ÑÑÑаниÑа',save:'Ðапази',preview:'ÐÑедваÑиÑелен изглед',cut:'ÐзÑежи',copy:'ÐапамеÑи',paste:'ÐмÑкни',print:'ÐеÑаÑ',underline:'ÐодÑеÑÑан',bold:'Удебелен',italic:'ÐÑÑÑив',selectAll:'СелекÑиÑай вÑиÑко',removeFormat:'ÐзÑÑий ÑоÑмаÑиÑанеÑо',strike:'ÐаÑеÑÑан',subscript:'ÐÐ½Ð´ÐµÐºÑ Ð·Ð° база',superscript:'ÐÐ½Ð´ÐµÐºÑ Ð·Ð° ÑÑепен',horizontalrule:'ÐмÑкни Ñ Ð¾ÑизонÑална линиÑ',pagebreak:'ÐмÑкни нов Ñед',pagebreakAlt:'Page Break',unlink:'ÐзÑÑий вÑÑзка',undo:'ÐÑмени',redo:'ÐовÑоÑи',common:{browseServer:'Разгледай ÑÑÑвÑÑа',url:'ÐÑлен пÑÑ (URL)',protocol:'ÐÑоÑокол',upload:'ÐаÑи',uploadSubmit:'ÐÑаÑи кÑм ÑÑÑвÑÑа',image:'ÐзобÑажение',flash:'Flash',form:'ФоÑмÑлÑÑ',checkbox:'Ðоле за оÑмеÑка',radio:'Ðоле за опÑиÑ',textField:'ТекÑÑово поле',textarea:'ТекÑÑова облаÑÑ',hiddenField:'СкÑиÑо поле',button:'ÐÑÑон',select:'ÐадаÑо Ð¼ÐµÐ½Ñ Ñ Ð¾Ð¿Ñии',imageButton:'ÐÑÑон-изобÑажение',notSet:'<не е наÑÑÑоен>',id:'ÐденÑиÑикаÑоÑ',name:'Ðме',langDir:'поÑока на ÑеÑÑа',langDirLtr:'ÐÑ Ð»Ñво на дÑÑно',langDirRtl:'ÐÑ Ð´ÑÑно на лÑво',langCode:'Ðод на езика',longDescr:'ÐпиÑание на вÑÑзкаÑа',cssClass:'ÐÐ»Ð°Ñ Ð¾Ñ ÑÑиловиÑе ÑаблиÑи',advisoryTitle:'ÐÑепоÑÑÑиÑелно заглавие',cssStyle:'СÑил',ok:'ÐÐ',cancel:'ÐÑказ',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'ÐодÑобноÑÑи...',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'ШиÑина',height:'ÐиÑоÑина',align:'ÐодÑавнÑване',alignLeft:'ÐÑво',alignRight:'ÐÑÑно',alignCenter:'ЦенÑÑÑ',alignTop:'ÐÑгоÑе',alignMiddle:'Ðо ÑÑедаÑа',alignBottom:'ÐолÑ',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'ÐмÑкни ÑпеÑиален Ñимвол',title:'ÐзбеÑеÑе ÑпеÑиален Ñимвол',options:'Special Character Options'},link:{toolbar:'Ðобави/РедакÑиÑай вÑÑзка',other:'<дÑÑг>',menu:'РедакÑиÑай вÑÑзка',title:'ÐÑÑзка',info:'ÐнÑоÑмаÑÐ¸Ñ Ð·Ð° вÑÑзкаÑа',target:'Цел',upload:'ÐаÑи',advanced:'ÐодÑобноÑÑи...',type:'Ðид на вÑÑзкаÑа',toUrl:'URL',toAnchor:'ÐоÑва в ÑекÑÑаÑа ÑÑÑаниÑа',toEmail:'Ð-поÑа',targetFrame:'<Ñамка>',targetPopup:'<дÑÑеÑен пÑозоÑеÑ>',targetFrameName:'Ðме на ÑÐµÐ»ÐµÐ²Ð¸Ñ Ð¿ÑозоÑеÑ',targetPopupName:'Ðме на дÑÑеÑÐ½Ð¸Ñ Ð¿ÑозоÑеÑ',popupFeatures:'ÐаÑамеÑÑи на дÑÑеÑÐ½Ð¸Ñ Ð¿ÑозоÑеÑ',popupResizable:'Resizable',popupStatusBar:'Ðоле за ÑÑаÑÑÑ',popupLocationBar:'Ðоле за адÑеÑ',popupToolbar:'Ðанел Ñ Ð±ÑÑони',popupMenuBar:'ÐенÑ',popupFullScreen:'ÐолÑм екÑан (MS IE)',popupScrollBars:'ÐлÑзгаÑ',popupDependent:'ÐавиÑим (Netscape)',popupLeft:'ÐооÑдинаÑи - X',popupTop:'ÐооÑдинаÑи - Y',id:'Id',langDir:'поÑока на ÑеÑÑа',langDirLTR:'ÐÑ Ð»Ñво на дÑÑно',langDirRTL:'ÐÑ Ð´ÑÑно на лÑво',acccessKey:'ÐÑÑз клавиÑ',name:'Ðме',langCode:'поÑока на ÑеÑÑа',tabIndex:'Ред на доÑÑÑп',advisoryTitle:'ÐÑепоÑÑÑиÑелно заглавие',advisoryContentType:'ÐÑепоÑÑÑиÑелен Ñип на ÑÑдÑÑжаниеÑо',cssClasses:'ÐÐ»Ð°Ñ Ð¾Ñ ÑÑиловиÑе ÑаблиÑи',charset:'Тип на ÑвÑÑÐ·Ð°Ð½Ð¸Ñ ÑеÑÑÑÑ',styles:'СÑил',rel:'Relationship',selectAnchor:'ÐзбеÑеÑе коÑва',anchorName:'Ðо име на коÑваÑа',anchorId:'Ðо иденÑиÑикаÑÐ¾Ñ Ð½Ð° елеменÑ',emailAddress:'ÐдÑÐµÑ Ð·Ð° е-поÑа',emailSubject:'Тема на пиÑмоÑо',emailBody:'ТекÑÑ Ð½Ð° пиÑмоÑо',noAnchors:'(ÐÑма коÑви в ÑекÑÑÐ¸Ñ Ð´Ð¾ÐºÑменÑ)',noUrl:'ÐолÑ, напиÑеÑе пÑÐ»Ð½Ð¸Ñ Ð¿ÑÑ (URL)',noEmail:'ÐолÑ, напиÑеÑе адÑеÑа за е-поÑа'},anchor:{toolbar:'Ðобави/РедакÑиÑай коÑва',menu:'ÐаÑамеÑÑи на коÑваÑа',title:'ÐаÑамеÑÑи на коÑваÑа',name:'Ðме на коÑваÑа',errorName:'ÐолÑ, вÑведеÑе име на коÑваÑа',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'ТÑÑÑи',replace:'ÐамеÑÑи',findWhat:'ТÑÑÑи:',replaceWith:'ÐамеÑÑи Ñ:',notFoundMsg:'Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑекÑÑ Ð½Ðµ беÑе намеÑен.',matchCase:'СÑÑ ÑÑÑÐ¸Ñ ÑегиÑÑÑÑ',matchWord:'ТÑÑÑи ÑÑÑаÑа дÑма',matchCyclic:'Match cyclic',replaceAll:'ÐамеÑÑи вÑиÑки',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'ТаблиÑа',title:'ÐаÑамеÑÑи на ÑаблиÑаÑа',menu:'ÐаÑамеÑÑи на ÑаблиÑаÑа',deleteTable:'ÐзÑÑий ÑаблиÑаÑа',rows:'Редове',columns:'Ðолони',border:'Ð Ð°Ð·Ð¼ÐµÑ Ð½Ð° ÑамкаÑа',widthPx:'пикÑели',widthPc:'пÑоÑенÑи',widthUnit:'width unit',cellSpace:'РазÑÑоÑние Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»ÐµÑкиÑе',cellPad:'ÐÑÑÑÑп на ÑÑдÑÑжаниеÑо в клеÑкиÑе',caption:'Ðаглавие',summary:'РезÑме',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'ÐзÑÑий клеÑкиÑе',merge:'Ðбедини клеÑкиÑе',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'ÐзÑÑий ÑедовеÑе'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'ÐзÑÑий колониÑе'}},button:{title:'ÐаÑамеÑÑи на бÑÑона',text:'ТекÑÑ (СÑойноÑÑ)',type:'Тип',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'ÐаÑамеÑÑи на полеÑо за оÑмеÑка',radioTitle:'ÐаÑамеÑÑи на полеÑо за опÑиÑ',value:'СÑойноÑÑ',selected:'ÐÑмеÑнаÑо'},form:{title:'ÐаÑамеÑÑи на ÑоÑмÑлÑÑа',menu:'ÐаÑамеÑÑи на ÑоÑмÑлÑÑа',action:'ÐейÑÑвие',method:'ÐеÑод',encoding:'Encoding'},select:{title:'ÐаÑамеÑÑи на падаÑоÑо Ð¼ÐµÐ½Ñ Ñ Ð¾Ð¿Ñии',selectInfo:'ÐнÑоÑмаÑиÑ',opAvail:'ÐÑзможни опÑии',value:'СÑойноÑÑ',size:'РазмеÑ',lines:'линии',chkMulti:'РазÑеÑено множеÑÑвено ÑелекÑиÑане',opText:'ТекÑÑ',opValue:'СÑойноÑÑ',btnAdd:'Ðобави',btnModify:'ÐÑомени',btnUp:'ÐагоÑе',btnDown:'ÐадолÑ',btnSetValue:'ÐаÑÑÑой каÑо избÑана ÑÑойноÑÑ',btnDelete:'ÐзÑÑий'},textarea:{title:'ÐаÑамеÑÑи на ÑекÑÑоваÑа облаÑÑ',cols:'Ðолони',rows:'Редове'},textfield:{title:'ÐаÑамеÑÑи на ÑекÑÑовоÑо-поле',name:'Ðме',value:'СÑойноÑÑ',charWidth:'ШиÑина на ÑимволиÑе',maxChars:'ÐакÑимÑм Ñимволи',type:'Тип',typeText:'ТекÑÑ',typePass:'ÐаÑола'},hidden:{title:'ÐаÑамеÑÑи на ÑкÑиÑоÑо поле',name:'Ðме',value:'СÑойноÑÑ'},image:{title:'ÐаÑамеÑÑи на изобÑажениеÑо',titleButton:'ÐаÑамеÑÑи на бÑÑона-изобÑажение',menu:'ÐаÑамеÑÑи на изобÑажениеÑо',infoTab:'ÐнÑоÑмаÑÐ¸Ñ Ð·Ð° изобÑажениеÑо',btnUpload:'ÐÑаÑи кÑм ÑÑÑвÑÑа',upload:'ÐаÑи',alt:'ÐлÑеÑнаÑивен ÑекÑÑ',lockRatio:'Ðапази пÑопоÑÑиÑÑа',resetSize:'ÐÑзÑÑанови ÑазмеÑа',border:'Рамка',hSpace:'ХоÑизонÑален оÑÑÑÑп',vSpace:'ÐеÑÑикален оÑÑÑÑп',alertUrl:'ÐолÑ, вÑведеÑе пÑÐ»Ð½Ð¸Ñ Ð¿ÑÑ Ð´Ð¾ изобÑажениеÑо',linkTab:'ÐÑÑзка',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ÐаÑамеÑÑи на Flash обекÑа',propertiesTab:'Properties',title:'ÐаÑамеÑÑи на Flash обекÑа',chkPlay:'ÐвÑомаÑиÑно ÑÑаÑÑиÑане',chkLoop:'Ðово ÑÑаÑÑиÑане Ñлед завÑÑÑванеÑо',chkMenu:'РазÑеÑено Flash менÑ',chkFull:'Allow Fullscreen',scale:'ÐÑазмеÑÑване',scaleAll:'Ðокажи ÑÐµÐ»Ð¸Ñ Ð¾Ð±ÐµÐºÑ',scaleNoBorder:'Ðез Ñамка',scaleFit:'СпоÑед мÑÑÑоÑо',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Ðай-долÑ',alignAbsMiddle:'ТоÑно по ÑÑедаÑа',alignBaseline:'Ðо базоваÑа линиÑ',alignTextTop:'ÐÑÑÑ Ñ ÑекÑÑа',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'ЦвÑÑ Ð½Ð° Ñона',hSpace:'ХоÑизонÑален оÑÑÑÑп',vSpace:'ÐеÑÑикален оÑÑÑÑп',validateSrc:'ÐолÑ, напиÑеÑе пÑÐ»Ð½Ð¸Ñ Ð¿ÑÑ (URL)',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'ÐÑовеÑи пÑавопиÑа',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'ÐипÑва в ÑеÑника',changeTo:'ÐÑомени на',btnIgnore:'ÐгноÑиÑай',btnIgnoreAll:'ÐгноÑиÑай вÑиÑки',btnReplace:'ÐамеÑÑи',btnReplaceAll:'ÐамеÑÑи вÑиÑки',btnUndo:'ÐÑмени',noSuggestions:'- ÐÑма пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ -',progress:'ÐзвÑÑÑване на пÑовеÑкаÑа за пÑавопиÑ...',noMispell:'ÐÑовеÑкаÑа за пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑÑÑена: не Ñа оÑкÑиÑи пÑавопиÑни гÑеÑки',noChanges:'ÐÑовеÑкаÑа за пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑÑÑена: нÑма пÑоменени дÑми',oneChange:'ÐÑовеÑкаÑа за пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑÑÑена: една дÑма е пÑоменена',manyChanges:'ÐÑовеÑкаÑа за пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð²ÑÑÑена: %1 дÑми Ñа пÑоменени',ieSpellDownload:'ÐнÑÑÑÑменÑÑÑ Ð·Ð° пÑовеÑка на пÑÐ°Ð²Ð¾Ð¿Ð¸Ñ Ð½Ðµ е инÑÑалиÑан. ÐелаеÑе ли да го инÑÑалиÑаÑе ?'},smiley:{toolbar:'УÑмивка',title:'Ðобави ÑÑмивка',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ÐÑмеÑиÑан ÑпиÑÑк',bulletedlist:'ÐенÑмеÑиÑан ÑпиÑÑк',indent:'УвелиÑи оÑÑÑÑпа',outdent:'Ðамали оÑÑÑÑпа',justify:{left:'ÐодÑавнÑване в лÑво',center:'ÐодÑавнÑвне в ÑÑедаÑа',right:'ÐодÑавнÑване в дÑÑно',block:'ÐвÑÑÑÑанно подÑавнÑване'},blockquote:'Block Quote',clipboard:{title:'ÐмÑкни',cutError:'ÐаÑÑÑойкиÑе за ÑигÑÑноÑÑ Ð½Ð° ваÑÐ¸Ñ Ð±ÑазÑÑÑ Ð½Ðµ ÑазÑеÑÐ°Ð²Ð°Ñ Ð½Ð° ÑедакÑоÑа да изпÑлни изÑÑзванеÑо. Ðа ÑелÑа използвайÑе клавиаÑÑÑаÑа (Ctrl/Cmd+X).',copyError:'ÐаÑÑÑойкиÑе за ÑигÑÑноÑÑ Ð½Ð° ваÑÐ¸Ñ Ð±ÑазÑÑÑ Ð½Ðµ ÑазÑеÑÐ°Ð²Ð°Ñ Ð½Ð° ÑедакÑоÑа да изпÑлни запамеÑÑванеÑо. Ðа ÑелÑа използвайÑе клавиаÑÑÑаÑа (Ctrl/Cmd+C).',pasteMsg:'ÐмÑкнеÑе ÑÑк ÑÑдÑжаниеÑо Ñ ÐºÐ»Ð°Ð²Ð¸Ð°ÑÑаÑаÑа (<STRONG>Ctrl/Cmd+V</STRONG>) и наÑиÑнеÑе <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'ÐмÑкни Ð¾Ñ MS Word',title:'ÐмÑкни Ð¾Ñ MS Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'ÐмÑкни каÑо ÑиÑÑ ÑекÑÑ',title:'ÐмÑкни каÑо ÑиÑÑ ÑекÑÑ'},templates:{button:'Шаблони',title:'Шаблони',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'ÐзбеÑеÑе Ñаблон <br>(ÑекÑÑоÑо ÑÑдÑÑжание на ÑедакÑоÑа Ñе бÑде загÑбено):',emptyListMsg:'(ÐÑма деÑиниÑани Ñаблони)'},showBlocks:'Show Blocks',stylesCombo:{label:'СÑил',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ФоÑмаÑ',panelTitle:'ФоÑмаÑ',tag_p:'ÐоÑмален',tag_pre:'ФоÑмаÑиÑан',tag_address:'ÐдÑеÑ',tag_h1:'Ðаглавие 1',tag_h2:'Ðаглавие 2',tag_h3:'Ðаглавие 3',tag_h4:'Ðаглавие 4',tag_h5:'Ðаглавие 5',tag_h6:'Ðаглавие 6',tag_div:'ÐаÑагÑÐ°Ñ (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ШÑиÑÑ',voiceLabel:'Font',panelTitle:'ШÑиÑÑ'},fontSize:{label:'РазмеÑ',voiceLabel:'Font Size',panelTitle:'РазмеÑ'},colorButton:{textColorTitle:'ЦвÑÑ Ð½Ð° ÑекÑÑа',bgColorTitle:'ЦвÑÑ Ð½Ð° Ñона',panelTitle:'Colors',auto:'Ðо подÑазбиÑане',more:'ÐÑÑги ÑвеÑове...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'ÐаÑамеÑÑи на докÑменÑа',title:'ÐаÑамеÑÑи на докÑменÑа',design:'Design',meta:'ÐеÑа данни',chooseColor:'Choose',other:'<дÑÑг>',docTitle:'Ðаглавие на ÑÑÑаниÑаÑа',charset:'ÐодиÑане на ÑимволиÑе',charsetOther:'ÐÑÑго кодиÑане на ÑимволиÑе',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Тип на докÑменÑа',docTypeOther:'ÐÑÑг Ñип на докÑменÑа',xhtmlDec:'ÐклÑÑи XHTML деклаÑаÑиÑ',bgColor:'ЦвÑÑ Ð½Ð° Ñона',bgImage:'ÐÑлен пÑÑ Ð´Ð¾ ÑоновоÑо изобÑажение',bgFixed:'Ðе-повÑаÑÑÑо Ñе Ñоново изобÑажение',txtColor:'ЦвÑÑ Ð½Ð° ÑекÑÑа',margin:'ÐÑÑÑÑпи на ÑÑÑаниÑаÑа',marginTop:'ÐоÑе',marginLeft:'ÐÑво',marginRight:'ÐÑÑно',marginBottom:'ÐолÑ',metaKeywords:'ÐлÑÑови дÑми за докÑменÑа (Ñазделени ÑÑÑ Ð·Ð°Ð¿ÐµÑаи)',metaDescription:'ÐпиÑание на докÑменÑа',metaAuthor:'ÐвÑоÑ',metaCopyright:'ÐвÑоÑÑки пÑава',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/bn.js b/lang/bn.js new file mode 100644 index 0000000..4edae7f --- /dev/null +++ b/lang/bn.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.bn={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'সà§à¦°à§à¦¸',newPage:'নতà§à¦¨ পà§à¦',save:'সà¦à¦°à¦à§à¦·à¦¨ à¦à¦°',preview:'পà§à¦°à¦¿à¦à¦¿à¦',cut:'à¦à¦¾à¦',copy:'à¦à¦ªà¦¿',paste:'পà§à¦¸à§à¦',print:'পà§à¦°à¦¿à¦¨à§à¦',underline:'à¦à¦¨à§à¦¡à¦¾à¦°à¦²à¦¾à¦à¦¨',bold:'বà§à¦²à§à¦¡',italic:'à¦à¦à¦¾à¦²à¦¿à¦',selectAll:'সব সিলà§à¦à§à¦ à¦à¦°',removeFormat:'ফরমà§à¦ সরাà¦',strike:'সà§à¦à§à¦°à¦¾à¦à¦ থà§à¦°à§',subscript:'ঠধà§à¦²à§à¦',superscript:'ঠà¦à¦¿à¦²à§à¦',horizontalrule:'রà§à¦à¦¾ যà§à¦à§à¦¤ à¦à¦°',pagebreak:'পà§à¦ বà§à¦°à§à¦',pagebreakAlt:'Page Break',unlink:'লিà¦à¦ সরাà¦',undo:'à¦à¦¨à¦¡à§',redo:'রি-ডà§',common:{browseServer:'বà§à¦°à¦¾à¦à¦ সারà§à¦à¦¾à¦°',url:'URL',protocol:'পà§à¦°à§à¦à§à¦à¦²',upload:'à¦à¦ªà¦²à§à¦¡',uploadSubmit:'à¦à¦¹à¦¾à¦à§ সারà§à¦à¦¾à¦°à§ পà§à¦°à§à¦°à¦¨ à¦à¦°',image:'à¦à¦¬à¦¿à¦° লà§à¦¬à§à¦² যà§à¦à§à¦¤ à¦à¦°',flash:'ফà§à¦²à¦¾à¦¶ লà§à¦¬à§à¦² যà§à¦à§à¦¤ à¦à¦°',form:'ফরà§à¦®',checkbox:'à¦à§à¦ বাà¦à§à¦¸',radio:'রà§à¦¡à¦¿à¦ বাà¦à¦¨',textField:'à¦à§à¦à§à¦¸à¦ ফà§à¦²à§à¦¡',textarea:'à¦à§à¦à§à¦¸à¦ à¦à¦°à¦¿à§à¦¾',hiddenField:'à¦à§à¦ªà§à¦¤ ফà§à¦²à§à¦¡',button:'বাà¦à¦¨',select:'বাà¦à¦¾à¦ ফà§à¦²à§à¦¡',imageButton:'à¦à¦¬à¦¿à¦° বাà¦à¦¨',notSet:'<সà§à¦ নà§à¦>',id:'à¦à¦à¦¡à¦¿',name:'নাম',langDir:'à¦à¦¾à¦·à¦¾ লà§à¦à¦¾à¦° দিà¦',langDirLtr:'বাম থà§à¦à§ ডান (LTR)',langDirRtl:'ডান থà§à¦à§ বাম (RTL)',langCode:'à¦à¦¾à¦·à¦¾ à¦à§à¦¡',longDescr:'URL à¦à¦° লমà§à¦¬à¦¾ বরà§à¦£à¦¨à¦¾',cssClass:'সà§à¦à¦¾à¦à¦²-শà§à¦ à¦à§à¦²à¦¾à¦¸',advisoryTitle:'পরামরà§à¦¶ শà§à¦°à§à¦·à¦',cssStyle:'সà§à¦à¦¾à¦à¦²',ok:'à¦à¦à§',cancel:'বাতিল',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'à¦à¦¡à¦à¦¾à¦¨à§à¦¸à¦¡',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'পà§à¦°à¦¸à§à¦¥',height:'দà§à¦°à§à¦à§à¦¯',align:'à¦à¦²à¦¾à¦à¦¨',alignLeft:'বামà§',alignRight:'ডানà§',alignCenter:'মাà¦à¦à¦¾à¦¨à§',alignTop:'à¦à¦ªà¦°',alignMiddle:'মধà§à¦¯',alignBottom:'নà§à¦à§',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'বিশà§à¦· ঠà¦à§à¦·à¦° যà§à¦à§à¦¤ à¦à¦°',title:'বিশà§à¦· à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦° বাà¦à¦¾à¦ à¦à¦°',options:'Special Character Options'},link:{toolbar:'লিà¦à¦ যà§à¦à§à¦¤ à¦à¦°',other:'<other>',menu:'লিà¦à¦ সমà§à¦ªà¦¾à¦¦à¦¨',title:'লিà¦à¦',info:'লিà¦à¦ তথà§à¦¯',target:'à¦à¦¾à¦°à§à¦à§à¦',upload:'à¦à¦ªà¦²à§à¦¡',advanced:'à¦à¦¡à¦à¦¾à¦¨à§à¦¸à¦¡',type:'লিà¦à¦ পà§à¦°à¦à¦¾à¦°',toUrl:'URL',toAnchor:'à¦à¦ পà§à¦à§ নà§à¦à¦° à¦à¦°',toEmail:'à¦à¦®à§à¦à¦²',targetFrame:'<ফà§à¦°à§à¦®>',targetPopup:'<পপà¦à¦ª à¦à¦à¦¨à§à¦¡à§>',targetFrameName:'à¦à¦¾à¦°à§à¦à§à¦ ফà§à¦°à§à¦®à§à¦° নাম',targetPopupName:'পপà¦à¦ª à¦à¦à¦¨à§à¦¡à§à¦° নাম',popupFeatures:'পপà¦à¦ª à¦à¦à¦¨à§à¦¡à§ ফà§à¦à¦¾à¦° সমà§à¦¹',popupResizable:'Resizable',popupStatusBar:'সà§à¦à§à¦¯à¦¾à¦à¦¾à¦¸ বার',popupLocationBar:'লà§à¦à§à¦¶à¦¨ বার',popupToolbar:'à¦à§à¦² বার',popupMenuBar:'মà§à¦¨à§à¦¯à§ বার',popupFullScreen:'পà§à¦°à§à¦£ পরà§à¦¦à¦¾ à¦à§à§à§ (IE)',popupScrollBars:'সà§à¦à§à¦°à¦² বার',popupDependent:'ডিপà§à¦¨à§à¦¡à§à¦¨à§à¦ (Netscape)',popupLeft:'বামà§à¦° পà¦à¦¿à¦¶à¦¨',popupTop:'ডানà§à¦° পà¦à¦¿à¦¶à¦¨',id:'Id',langDir:'à¦à¦¾à¦·à¦¾ লà§à¦à¦¾à¦° দিà¦',langDirLTR:'বাম থà§à¦à§ ডান (LTR)',langDirRTL:'ডান থà§à¦à§ বাম (RTL)',acccessKey:'à¦à¦à§à¦¸à§à¦¸ à¦à§',name:'নাম',langCode:'à¦à¦¾à¦·à¦¾ লà§à¦à¦¾à¦° দিà¦',tabIndex:'à¦à§à¦¯à¦¾à¦¬ à¦à¦¨à§à¦¡à§à¦à§à¦¸',advisoryTitle:'পরামরà§à¦¶ শà§à¦°à§à¦·à¦',advisoryContentType:'পরামরà§à¦¶ à¦à¦¨à§à¦à§à¦¨à§à¦à§à¦° পà§à¦°à¦à¦¾à¦°',cssClasses:'সà§à¦à¦¾à¦à¦²-শà§à¦ à¦à§à¦²à¦¾à¦¸',charset:'লিà¦à¦ রিসà§à¦°à§à¦¸ à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦° সà§à¦',styles:'সà§à¦à¦¾à¦à¦²',rel:'Relationship',selectAnchor:'নà§à¦à¦° বাà¦à¦¾à¦',anchorName:'নà§à¦à¦°à§à¦° নাম দিà§à§',anchorId:'নà§à¦à¦°à§à¦° à¦à¦à¦¡à¦¿ দিà§à§',emailAddress:'à¦à¦®à§à¦à¦² ঠিà¦à¦¾à¦¨à¦¾',emailSubject:'মà§à¦¸à§à¦à§à¦° বিষà§',emailBody:'মà§à¦¸à§à¦à§à¦° দà§à¦¹',noAnchors:'(No anchors available in the document)',noUrl:'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ URL লিà¦à¦ à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨',noEmail:'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦à¦®à§à¦à¦² à¦à¦¡à§à¦°à§à¦¸ à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨'},anchor:{toolbar:'নà§à¦à§à¦à¦°',menu:'নà§à¦à¦° পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',title:'নà§à¦à¦° পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',name:'নà§à¦à¦°à§à¦° নাম',errorName:'নà§à¦à¦°à§à¦° নাম à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'à¦à§à¦à§',replace:'রিপà§à¦²à§à¦¸',findWhat:'যা à¦à§à¦à¦à¦¤à§ হবà§:',replaceWith:'যার সাথৠবদলাতৠহবà§:',notFoundMsg:'à¦à¦ªà¦¨à¦¾à¦° à¦à¦²à§à¦²à§à¦à¦¿à¦¤ à¦à§à¦à¦¸à§à¦ পাà¦à§à¦¾ যাà§à¦¨à¦¿',matchCase:'à¦à§à¦¸ মিলাà¦',matchWord:'পà§à¦°à¦¾ শবà§à¦¦ মà§à¦²à¦¾à¦',matchCyclic:'Match cyclic',replaceAll:'সব বদলৠদাà¦',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'à¦à§à¦¬à¦¿à¦²à§à¦° লà§à¦¬à§à¦² যà§à¦à§à¦¤ à¦à¦°',title:'à¦à§à¦¬à¦¿à¦² পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',menu:'à¦à§à¦¬à¦¿à¦² পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',deleteTable:'à¦à§à¦¬à¦¿à¦² ডিলà§à¦ à¦à¦°',rows:'রà§',columns:'à¦à¦²à¦¾à¦®',border:'বরà§à¦¡à¦¾à¦° সাà¦à¦',widthPx:'পিà¦à§à¦¸à§à¦²',widthPc:'শতà¦à¦°à¦¾',widthUnit:'width unit',cellSpace:'সà§à¦² সà§à¦ªà§à¦¸',cellPad:'সà§à¦² পà§à¦¯à¦¾à¦¡à¦¿à¦',caption:'শà§à¦°à§à¦·à¦',summary:'সারাà¦à¦¶',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'সà§à¦²',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'সà§à¦² মà§à¦à§ দাà¦',merge:'সà§à¦² à¦à§à§à¦¾ দাà¦',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'রà§',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'রৠমà§à¦à§ দাà¦'},column:{menu:'à¦à¦²à¦¾à¦®',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'à¦à¦²à¦¾à¦® মà§à¦à§ দাà¦'}},button:{title:'বাà¦à¦¨ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',text:'à¦à§à¦à§à¦¸à¦ (à¦à§à¦¯à¦¾à¦²à§)',type:'পà§à¦°à¦à¦¾à¦°',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'à¦à§à¦ বà¦à§à¦¸ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',radioTitle:'রà§à¦¡à¦¿à¦ বাà¦à¦¨ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',value:'à¦à§à¦¯à¦¾à¦²à§',selected:'সিলà§à¦à§à¦à§à¦¡'},form:{title:'ফরà§à¦® পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',menu:'ফরà§à¦® পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',action:'à¦à¦à¦¶à§à¦¯à¦¨',method:'পদà§à¦§à¦¤à¦¿',encoding:'Encoding'},select:{title:'বাà¦à¦¾à¦ ফà§à¦²à§à¦¡ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',selectInfo:'তথà§à¦¯',opAvail:'ঠনà§à¦¯à¦¾à¦¨à§à¦¯ বিà¦à¦²à§à¦ª',value:'à¦à§à¦¯à¦¾à¦²à§',size:'সাà¦à¦',lines:'লাà¦à¦¨ সমà§à¦¹',chkMulti:'à¦à¦à¦¾à¦§à¦¿à¦ সিলà§à¦à¦¶à¦¨ à¦à¦²à¦¾à¦ à¦à¦°',opText:'à¦à§à¦à§à¦¸à¦',opValue:'à¦à§à¦¯à¦¾à¦²à§',btnAdd:'যà§à¦à§à¦¤',btnModify:'বদলৠদাà¦',btnUp:'à¦à¦ªà¦°',btnDown:'নà§à¦à§',btnSetValue:'বাà¦à¦¾à¦ à¦à¦°à¦¾ à¦à§à¦¯à¦¾à¦²à§ হিসà§à¦¬à§ সà§à¦ à¦à¦°',btnDelete:'ডিলà§à¦'},textarea:{title:'à¦à§à¦à§à¦¸à¦ à¦à¦°à¦¿à§à¦¾ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',cols:'à¦à¦²à¦¾à¦®',rows:'রà§'},textfield:{title:'à¦à§à¦à§à¦¸à¦ ফà§à¦²à§à¦¡ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',name:'নাম',value:'à¦à§à¦¯à¦¾à¦²à§',charWidth:'à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦° পà§à¦°à¦¶à¦¸à§à¦¤à¦¤à¦¾',maxChars:'সরà§à¦¬à¦¾à¦§à¦¿à¦ à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦°',type:'à¦à¦¾à¦à¦ª',typeText:'à¦à§à¦à§à¦¸à¦',typePass:'পাসà¦à§à¦¾à¦°à§à¦¡'},hidden:{title:'à¦à§à¦ªà§à¦¤ ফà§à¦²à§à¦¡ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',name:'নাম',value:'à¦à§à¦¯à¦¾à¦²à§'},image:{title:'à¦à¦¬à¦¿à¦° পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',titleButton:'à¦à¦¬à¦¿ বাà¦à¦¨ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',menu:'à¦à¦¬à¦¿à¦° পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',infoTab:'à¦à¦¬à¦¿à¦° তথà§à¦¯',btnUpload:'à¦à¦¹à¦¾à¦à§ সারà§à¦à¦¾à¦°à§ পà§à¦°à§à¦°à¦¨ à¦à¦°',upload:'à¦à¦ªà¦²à§à¦¡',alt:'বিà¦à¦²à§à¦ª à¦à§à¦à§à¦¸à¦',lockRatio:'ঠনà§à¦ªà¦¾à¦¤ লঠà¦à¦°',resetSize:'সাà¦à¦ পà§à¦°à§à¦¬à¦¾à¦¬à¦¸à§à¦¥à¦¾à§ ফিরিà§à§ দাà¦',border:'বরà§à¦¡à¦¾à¦°',hSpace:'হরাà¦à¦à¦¨à§à¦à¦¾à¦² সà§à¦ªà§à¦¸',vSpace:'à¦à¦¾à¦°à§à¦à¦¿à¦à§à¦² সà§à¦ªà§à¦¸',alertUrl:'ঠনà§à¦à§à¦°à¦¹à¦ à¦à¦°à§ à¦à¦¬à¦¿à¦° URL à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨',linkTab:'লিà¦à¦',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ফà§à¦²à¦¾à¦¶ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',propertiesTab:'Properties',title:'ফà§à¦²à§à¦¯à¦¾à¦¶ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',chkPlay:'ঠà¦à§ পà§à¦²à§',chkLoop:'লà§à¦ª',chkMenu:'ফà§à¦²à§à¦¯à¦¾à¦¶ মà§à¦¨à§ à¦à¦¨à¦¾à¦¬à¦² à¦à¦°',chkFull:'Allow Fullscreen',scale:'সà§à¦à§à¦²',scaleAll:'সব দà§à¦à¦¾à¦',scaleNoBorder:'à¦à§à¦¨à§ বরà§à¦¡à¦¾à¦° নà§à¦',scaleFit:'নিà¦à§à¦à¦¤ ফিà¦',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs নà§à¦à§',alignAbsMiddle:'Abs à¦à¦ªà¦°',alignBaseline:'মà§à¦² রà§à¦à¦¾',alignTextTop:'à¦à§à¦à§à¦¸à¦ à¦à¦ªà¦°',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'বà§à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡ রà¦',hSpace:'হরাà¦à¦à¦¨à§à¦à¦¾à¦² সà§à¦ªà§à¦¸',vSpace:'à¦à¦¾à¦°à§à¦à¦¿à¦à§à¦² সà§à¦ªà§à¦¸',validateSrc:'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ URL লিà¦à¦ à¦à¦¾à¦à¦ª à¦à¦°à§à¦¨',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'বানান à¦à§à¦',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'শবà§à¦¦à¦à§à¦·à§ নà§à¦',changeTo:'à¦à¦¤à§ বদলাà¦',btnIgnore:'à¦à¦à¦¨à§à¦° à¦à¦°',btnIgnoreAll:'সব à¦à¦à¦¨à§à¦° à¦à¦°',btnReplace:'বদলৠদাà¦',btnReplaceAll:'সব বদলৠদাà¦',btnUndo:'à¦à¦¨à§à¦¡à§',noSuggestions:'- à¦à§à¦¨ সাà¦à§à¦¶à¦¨ নà§à¦ -',progress:'বানান পরà§à¦à§à¦·à¦¾ à¦à¦²à¦à§...',noMispell:'বানান পরà§à¦à§à¦·à¦¾ শà§à¦·: à¦à§à¦¨ à¦à§à¦² বানান পাà¦à§à¦¾ যাà§à¦¨à¦¿',noChanges:'বানান পরà§à¦à§à¦·à¦¾ শà§à¦·: à¦à§à¦¨ শবà§à¦¦ পরিবরà§à¦¤à¦¨ à¦à¦°à¦¾ হà§à¦¨à¦¿',oneChange:'বানান পরà§à¦à§à¦·à¦¾ শà§à¦·: à¦à¦à¦à¦¿ মাতà§à¦° শবà§à¦¦ পরিবরà§à¦¤à¦¨ à¦à¦°à¦¾ হà§à§à¦à§',manyChanges:'বানান পরà§à¦à§à¦·à¦¾ শà§à¦·: %1 à¦à§à¦²à§ শবà§à¦¦ বদলৠà¦à§à¦¯à¦¾à¦à§',ieSpellDownload:'বানান পরà§à¦à§à¦·à¦ à¦à¦¨à¦¸à§à¦à¦² à¦à¦°à¦¾ নà§à¦à¥¤ à¦à¦ªà¦¨à¦¿ à¦à¦¿ à¦à¦à¦¨à¦ à¦à¦à¦¾ ডাà¦à¦¨à¦²à§à¦¡ à¦à¦°à¦¤à§ à¦à¦¾à¦¨?'},smiley:{toolbar:'সà§à¦®à¦¾à¦à¦²à§',title:'সà§à¦®à¦¾à¦à¦²à§ যà§à¦à§à¦¤ à¦à¦°',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'সাà¦à¦à§à¦¯à¦¿à¦ লিসà§à¦à§à¦° লà§à¦¬à§à¦²',bulletedlist:'বà§à¦²à§à¦ লিসà§à¦ লà§à¦¬à§à¦²',indent:'à¦à¦¨à¦¡à§à¦¨à§à¦ বাà§à¦¾à¦',outdent:'à¦à¦¨à¦¡à§à¦¨à§à¦ à¦à¦®à¦¾à¦',justify:{left:'বা দিà¦à§ à¦à§à¦à¦·à¦¾',center:'মাঠবরাবর à¦à§à¦·à¦¾',right:'ডান দিà¦à§ à¦à§à¦à¦·à¦¾',block:'বà§à¦²à¦ à¦à¦¾à¦¸à§à¦à¦¿à¦«à¦¾à¦'},blockquote:'Block Quote',clipboard:{title:'পà§à¦¸à§à¦',cutError:'à¦à¦ªà¦¨à¦¾à¦° বà§à¦°à¦¾à¦à¦à¦¾à¦°à§à¦° সà§à¦°à¦à§à¦·à¦¾ সà§à¦à¦¿à¦à¦¸ à¦à¦¡à¦¿à¦à¦°à¦à§ ঠà¦à§à¦®à§à¦à¦¿à¦ à¦à¦¾à¦ à¦à¦°à¦¾à¦° ঠনà§à¦®à¦¤à¦¿ দà§à§à¦¨à¦¿à¥¤ দà§à¦¾ à¦à¦°à§ à¦à¦ à¦à¦¾à¦à§à¦° à¦à¦¨à§à¦¯ à¦à¦¿à¦¬à§à¦°à§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à§à¦¨ (Ctrl/Cmd+X)।',copyError:'à¦à¦ªà¦¨à¦¾à¦° বà§à¦°à¦¾à¦à¦à¦¾à¦°à§à¦° সà§à¦°à¦à§à¦·à¦¾ সà§à¦à¦¿à¦à¦¸ à¦à¦¡à¦¿à¦à¦°à¦à§ ঠà¦à§à¦®à§à¦à¦¿à¦ à¦à¦ªà¦¿ à¦à¦°à¦¾à¦° ঠনà§à¦®à¦¤à¦¿ দà§à§à¦¨à¦¿à¥¤ দà§à¦¾ à¦à¦°à§ à¦à¦ à¦à¦¾à¦à§à¦° à¦à¦¨à§à¦¯ à¦à¦¿à¦¬à§à¦°à§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à§à¦¨ (Ctrl/Cmd+C)।',pasteMsg:'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ নà§à¦à§à¦° বাà¦à§à¦¸à§ à¦à¦¿à¦¬à§à¦°à§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à§ (<STRONG>Ctrl/Cmd+V</STRONG>) পà§à¦¸à§à¦ à¦à¦°à§à¦¨ à¦à¦¬à¦ <STRONG>OK</STRONG> à¦à¦¾à¦ª দিন',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'পà§à¦¸à§à¦ (শবà§à¦¦)',title:'পà§à¦¸à§à¦ (শবà§à¦¦)',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'সাদা à¦à§à¦à§à¦¸à¦ হিসà§à¦¬à§ পà§à¦¸à§à¦ à¦à¦°',title:'সাদা à¦à§à¦à§à¦¸à¦ হিসà§à¦¬à§ পà§à¦¸à§à¦ à¦à¦°'},templates:{button:'à¦à§à¦®à¦ªà§à¦²à§à¦',title:'à¦à¦¨à¦à§à¦¨à§à¦ à¦à§à¦®à¦ªà§à¦²à§à¦',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'ঠনà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦à¦¡à¦¿à¦à¦°à§ à¦à¦ªà§à¦¨ à¦à¦°à¦¾à¦° à¦à¦¨à§à¦¯ à¦à§à¦®à¦ªà§à¦²à§à¦ বাà¦à¦¾à¦ à¦à¦°à§à¦¨<br>(à¦à¦¸à¦² à¦à¦¨à¦à§à¦¨à§à¦ হারিà§à§ যাবà§):',emptyListMsg:'(à¦à§à¦¨ à¦à§à¦®à¦ªà§à¦²à§à¦ ডিফাà¦à¦¨ à¦à¦°à¦¾ নà§à¦)'},showBlocks:'Show Blocks',stylesCombo:{label:'সà§à¦à¦¾à¦à¦²',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ফনà§à¦ ফরমà§à¦',panelTitle:'ফনà§à¦ ফরমà§à¦',tag_p:'সাধারণ',tag_pre:'ফরà§à¦®à§à¦à§à¦¡',tag_address:'ঠিà¦à¦¾à¦¨à¦¾',tag_h1:'শà§à¦°à§à¦·à¦ ১',tag_h2:'শà§à¦°à§à¦·à¦ ২',tag_h3:'শà§à¦°à§à¦·à¦ ৩',tag_h4:'শà§à¦°à§à¦·à¦ ৪',tag_h5:'শà§à¦°à§à¦·à¦ ৫',tag_h6:'শà§à¦°à§à¦·à¦ ৬',tag_div:'শà§à¦°à§à¦·à¦ (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ফনà§à¦',voiceLabel:'Font',panelTitle:'ফনà§à¦'},fontSize:{label:'সাà¦à¦',voiceLabel:'Font Size',panelTitle:'সাà¦à¦'},colorButton:{textColorTitle:'à¦à§à¦à§à¦¸à§à¦ রà¦',bgColorTitle:'বà§à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡ রà¦',panelTitle:'Colors',auto:'ঠà¦à§à¦®à§à¦à¦¿à¦',more:'à¦à¦°à¦ রà¦...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',title:'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ পà§à¦°à§à¦ªà¦¾à¦°à§à¦à¦¿',design:'Design',meta:'মà§à¦à¦¾à¦¡à§à¦à¦¾',chooseColor:'Choose',other:'<other>',docTitle:'পà§à¦ শà§à¦°à§à¦·à¦',charset:'à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦° সà§à¦ à¦à¦¨à¦à§à¦¡à¦¿à¦',charsetOther:'ঠনà§à¦¯ à¦à§à¦¯à¦¾à¦°à§à¦à§à¦à¦¾à¦° সà§à¦ à¦à¦¨à¦à§à¦¡à¦¿à¦',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ à¦à¦¾à¦à¦ª হà§à¦¡à¦¿à¦',docTypeOther:'ঠনà§à¦¯ ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ à¦à¦¾à¦à¦ª হà§à¦¡à¦¿à¦',xhtmlDec:'XHTML ডà§à¦à§à¦²à¦¾à¦°à§à¦¶à¦¨ যà§à¦à§à¦¤ à¦à¦°',bgColor:'বà§à¦¯à¦¾à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡ রà¦',bgImage:'বà§à¦¯à¦¾à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡ à¦à¦¬à¦¿à¦° URL',bgFixed:'সà§à¦à§à¦°à¦²à¦¹à§à¦¨ বà§à¦¯à¦¾à¦à¦à§à¦°à¦¾à¦à¦¨à§à¦¡',txtColor:'à¦à§à¦à§à¦¸à§à¦ রà¦',margin:'পà§à¦ মারà§à¦à¦¿à¦¨',marginTop:'à¦à¦ªà¦°',marginLeft:'বামà§',marginRight:'ডানà§',marginBottom:'নà§à¦à§',metaKeywords:'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ à¦à¦¿à¦à§à¦¾à¦°à§à¦¡ (à¦à¦®à¦¾ দà§à¦¬à¦¾à¦°à¦¾ বিà¦à§à¦à¦¿à¦¨à§à¦¨)',metaDescription:'ডà¦à§à¦¯à§à¦®à§à¦¨à§à¦ বরà§à¦£à¦¨à¦¾',metaAuthor:'লà§à¦à¦',metaCopyright:'à¦à¦ªà§à¦°à¦¾à¦à¦',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/bs.js b/lang/bs.js new file mode 100644 index 0000000..c443757 --- /dev/null +++ b/lang/bs.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.bs={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'HTML kôd',newPage:'Novi dokument',save:'Snimi',preview:'Prikaži',cut:'Izreži',copy:'Kopiraj',paste:'Zalijepi',print:'Å tampaj',underline:'Podvuci',bold:'Boldiraj',italic:'Ukosi',selectAll:'Selektuj sve',removeFormat:'PoniÅ¡ti format',strike:'Precrtaj',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Ubaci horizontalnu liniju',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'IzbriÅ¡i link',undo:'Vrati',redo:'Ponovi',common:{browseServer:'Browse Server',url:'URL',protocol:'Protokol',upload:'Å alji',uploadSubmit:'Å alji na server',image:'Slika',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<nije podeÅ¡eno>',id:'Id',name:'Naziv',langDir:'Smjer pisanja',langDirLtr:'S lijeva na desno (LTR)',langDirRtl:'S desna na lijevo (RTL)',langCode:'Jezièni kôd',longDescr:'Dugaèki opis URL-a',cssClass:'Klase CSS stilova',advisoryTitle:'Advisory title',cssStyle:'Stil',ok:'OK',cancel:'Odustani',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Naprednije',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Å irina',height:'Visina',align:'Poravnanje',alignLeft:'Lijevo',alignRight:'Desno',alignCenter:'Centar',alignTop:'Vrh',alignMiddle:'Sredina',alignBottom:'Dno',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Ubaci specijalni karater',title:'Izaberi specijalni karakter',options:'Special Character Options'},link:{toolbar:'Ubaci/Izmjeni link',other:'<other>',menu:'Izmjeni link',title:'Link',info:'Link info',target:'Prozor',upload:'Å alji',advanced:'Naprednije',type:'Tip linka',toUrl:'URL',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',targetFrame:'<frejm>',targetPopup:'<popup prozor>',targetFrameName:'Target Frame Name',targetPopupName:'Naziv popup prozora',popupFeatures:'Moguænosti popup prozora',popupResizable:'Resizable',popupStatusBar:'Statusna traka',popupLocationBar:'Traka za lokaciju',popupToolbar:'Traka sa alatima',popupMenuBar:'Izborna traka',popupFullScreen:'Cijeli ekran (IE)',popupScrollBars:'Scroll traka',popupDependent:'Ovisno (Netscape)',popupLeft:'Lijeva pozicija',popupTop:'Gornja pozicija',id:'Id',langDir:'Smjer pisanja',langDirLTR:'S lijeva na desno (LTR)',langDirRTL:'S desna na lijevo (RTL)',acccessKey:'Pristupna tipka',name:'Naziv',langCode:'Smjer pisanja',tabIndex:'Tab indeks',advisoryTitle:'Advisory title',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Klase CSS stilova',charset:'Linked Resource Charset',styles:'Stil',rel:'Relationship',selectAnchor:'Izaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id-u elementa',emailAddress:'E-Mail Adresa',emailSubject:'Subjekt poruke',emailBody:'Poruka',noAnchors:'(Nema dostupnih sidra na stranici)',noUrl:'Molimo ukucajte URL link',noEmail:'Molimo ukucajte e-mail adresu'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Naði',replace:'Zamjeni',findWhat:'Naði Å¡ta:',replaceWith:'Zamjeni sa:',notFoundMsg:'Traženi tekst nije pronaðen.',matchCase:'Uporeðuj velika/mala slova',matchWord:'Uporeðuj samo cijelu rijeè',matchCyclic:'Match cyclic',replaceAll:'Zamjeni sve',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Svojstva tabele',menu:'Svojstva tabele',deleteTable:'Delete Table',rows:'Redova',columns:'Kolona',border:'Okvir',widthPx:'piksela',widthPc:'posto',widthUnit:'width unit',cellSpace:'Razmak æelija',cellPad:'Uvod æelija',caption:'Naslov',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'BriÅ¡i æelije',merge:'Spoji æelije',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'BriÅ¡i redove'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'BriÅ¡i kolone'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Svojstva slike',titleButton:'Image Button Properties',menu:'Svojstva slike',infoTab:'Info slike',btnUpload:'Å alji na server',upload:'Å alji',alt:'Tekst na slici',lockRatio:'Zakljuèaj odnos',resetSize:'Resetuj dimenzije',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Molimo ukucajte URL od slike.',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs dole',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignTextTop:'Vrh teksta',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Boja pozadine',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Molimo ukucajte URL link',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'SmjeÅ¡ko',title:'Ubaci smjeÅ¡ka',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numerisana lista',bulletedlist:'Lista',indent:'Poveæaj uvod',outdent:'Smanji uvod',justify:{left:'Lijevo poravnanje',center:'Centralno poravnanje',right:'Desno poravnanje',block:'Puno poravnanje'},blockquote:'Block Quote',clipboard:{title:'Zalijepi',cutError:'Sigurnosne postavke vaÅ¡eg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).',copyError:'Sigurnosne postavke VaÅ¡eg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Zalijepi iz Word-a',title:'Zalijepi iz Word-a',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Zalijepi kao obièan tekst',title:'Zalijepi kao obièan tekst'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stil',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Velièina',voiceLabel:'Font Size',panelTitle:'Velièina'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',panelTitle:'Colors',auto:'Automatska',more:'ViÅ¡e boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Document Properties',title:'Document Properties',design:'Design',meta:'Meta Tags',chooseColor:'Choose',other:'Other...',docTitle:'Page Title',charset:'Character Set Encoding',charsetOther:'Other Character Set Encoding',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Document Type Heading',docTypeOther:'Other Document Type Heading',xhtmlDec:'Include XHTML Declarations',bgColor:'Background Color',bgImage:'Background Image URL',bgFixed:'Non-scrolling (Fixed) Background',txtColor:'Text Color',margin:'Page Margins',marginTop:'Top',marginLeft:'Left',marginRight:'Right',marginBottom:'Bottom',metaKeywords:'Document Indexing Keywords (comma separated)',metaDescription:'Document Description',metaAuthor:'Author',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/ca.js b/lang/ca.js new file mode 100644 index 0000000..a8e934b --- /dev/null +++ b/lang/ca.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.ca={dir:'ltr',editorTitle:'Editor de text enriquit, %1, prem ALT 0 per obtenir ajuda.',toolbars:'Editor toolbars',editor:'Editor de text enriquit',source:'Codi font',newPage:'Nova pà gina',save:'Desa',preview:'Visualització prèvia',cut:'Retalla',copy:'Copia',paste:'Enganxa',print:'Imprimeix',underline:'Subratllat',bold:'Negreta',italic:'Cursiva',selectAll:'Selecciona-ho tot',removeFormat:'Elimina Format',strike:'Barrat',subscript:'SubÃndex',superscript:'SuperÃndex',horizontalrule:'Insereix lÃnia horitzontal',pagebreak:'Insereix salt de pà gina',pagebreakAlt:'Salt de pà gina',unlink:"Elimina l'enllaç",undo:'Desfés',redo:'Refés',common:{browseServer:'Veure servidor',url:'URL',protocol:'Protocol',upload:'Puja',uploadSubmit:'Envia-la al servidor',image:'Imatge',flash:'Flash',form:'Formulari',checkbox:'Casella de verificació',radio:"Botó d'opció",textField:'Camp de text',textarea:'Ãrea de text',hiddenField:'Camp ocult',button:'Botó',select:'Camp de selecció',imageButton:"Botó d'imatge",notSet:'<no definit>',id:'Id',name:'Nom',langDir:"Direcció de l'idioma",langDirLtr:"D'esquerra a dreta (LTR)",langDirRtl:'De dreta a esquerra (RTL)',langCode:"Codi d'idioma",longDescr:'Descripció llarga de la URL',cssClass:"Classes del full d'estil",advisoryTitle:'TÃtol consultiu',cssStyle:'Estil',ok:"D'acord",cancel:'Cancel·la',close:'Tanca',preview:'Previsualitza',generalTab:'General',advancedTab:'Avançat',validateNumberFailed:'Aquest valor no és un número.',confirmNewPage:'Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pà gina nova?',confirmCancel:"Algunes opcions s'han canviat. Esteu segur que voleu tancar la finestra de dià leg?",options:'Opcions',target:'DestÃ',targetNew:'Nova finestra (_blank)',targetTop:'Finestra major (_top)',targetSelf:'Mateixa finestra (_self)',targetParent:'Finestra pare (_parent)',langDirLTR:"D'esquerra a dreta (LTR)",langDirRTL:'De dreta a esquerra (RTL)',styles:'Estil',cssClasses:"Classes del full d'estil",width:'Amplada',height:'Alçada',align:'Alineació',alignLeft:"Ajusta a l'esquerra",alignRight:'Ajusta a la dreta',alignCenter:'Centre',alignTop:'Superior',alignMiddle:'Centre',alignBottom:'Inferior',invalidHeight:"L'alçada ha de ser un nombre.",invalidWidth:"L'amplada ha de ser un nombre.",invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, no disponible</span>'},contextmenu:{options:'Opcions del menú contextual'},specialChar:{toolbar:'Insereix carà cter especial',title:'Selecciona el carà cter especial',options:'Opcions de carà cters especials'},link:{toolbar:'Insereix/Edita enllaç',other:'<altre>',menu:"Edita l'enllaç",title:'Enllaç',info:"Informació de l'enllaç",target:'DestÃ',upload:'Puja',advanced:'Avançat',type:"Tipus d'enllaç",toUrl:'URL',toAnchor:'Ãncora en aquesta pà gina',toEmail:'Correu electrònic',targetFrame:'<marc>',targetPopup:'<finestra emergent>',targetFrameName:'Nom del marc de destÃ',targetPopupName:'Nom finestra popup',popupFeatures:'CaracterÃstiques finestra popup',popupResizable:'Redimensionable',popupStatusBar:"Barra d'estat",popupLocationBar:"Barra d'adreça",popupToolbar:"Barra d'eines",popupMenuBar:'Barra de menú',popupFullScreen:'Pantalla completa (IE)',popupScrollBars:"Barres d'scroll",popupDependent:'Depenent (Netscape)',popupLeft:'Posició esquerra',popupTop:'Posició dalt',id:'Id',langDir:"Direcció de l'idioma",langDirLTR:"D'esquerra a dreta (LTR)",langDirRTL:'De dreta a esquerra (RTL)',acccessKey:"Clau d'accés",name:'Nom',langCode:"Direcció de l'idioma",tabIndex:'Index de Tab',advisoryTitle:'TÃtol consultiu',advisoryContentType:'Tipus de contingut consultiu',cssClasses:"Classes del full d'estil",charset:'Conjunt de carà cters font enllaçat',styles:'Estil',rel:'Relationship',selectAnchor:'Selecciona una à ncora',anchorName:"Per nom d'à ncora",anchorId:"Per Id d'element",emailAddress:'Adreça de correu electrònic',emailSubject:'Assumpte del missatge',emailBody:'Cos del missatge',noAnchors:'(No hi ha à ncores disponibles en aquest document)',noUrl:"Si us plau, escrigui l'enllaç URL",noEmail:"Si us plau, escrigui l'adreça correu electrònic"},anchor:{toolbar:'Insereix/Edita à ncora',menu:"Propietats de l'à ncora",title:"Propietats de l'à ncora",name:"Nom de l'à ncora",errorName:"Si us plau, escriviu el nom de l'ancora",remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Cerca i reemplaça',find:'Cerca',replace:'Reemplaça',findWhat:'Cerca:',replaceWith:'Remplaça amb:',notFoundMsg:"El text especificat no s'ha trobat.",matchCase:'Distingeix majúscules/minúscules',matchWord:'Només paraules completes',matchCyclic:'Match cyclic',replaceAll:'Reemplaça-ho tot',replaceSuccessMsg:'%1 ocurrència/es reemplaçada/es.'},table:{toolbar:'Taula',title:'Propietats de la taula',menu:'Propietats de la taula',deleteTable:'Suprimeix la taula',rows:'Files',columns:'Columnes',border:'Mida vora',widthPx:'pÃxels',widthPc:'percentatge',widthUnit:"unitat d'amplada",cellSpace:'Espaiat de cel·les',cellPad:'Encoixinament de cel·les',caption:'TÃtol',summary:'Resum',headers:'Capçaleres',headersNone:'Cap',headersColumn:'Primera columna',headersRow:'Primera fila',headersBoth:'Ambdues',invalidRows:'El nombre de files ha de ser un nombre major que 0.',invalidCols:'El nombre de columnes ha de ser un nombre major que 0.',invalidBorder:'El gruix de la vora ha de ser un nombre.',invalidWidth:"L'amplada de la taula ha de ser un nombre.",invalidHeight:"L'alçada de la taula ha de ser un nombre.",invalidCellSpacing:"L'espaiat de cel·la ha de ser un nombre.",invalidCellPadding:"L'encoixinament de cel·la ha de ser un nombre.",cell:{menu:'Cel·la',insertBefore:'Insereix abans',insertAfter:'Insereix després',deleteCell:'Suprimeix',merge:'Fusiona',mergeRight:'Fusiona a la dreta',mergeDown:'Fusiona avall',splitHorizontal:'Divideix horitzontalment',splitVertical:'Divideix verticalment',title:'Propietats de la cel·la',cellType:'Tipus de cel·la',rowSpan:'Expansió de files',colSpan:'Expansió de columnes',wordWrap:'Ajustar al contingut',hAlign:'Alineació Horizontal',vAlign:'Alineació Vertical',alignBaseline:'A la lÃnia base',bgColor:'Color de fons',borderColor:'Color de la vora',data:'Dades',header:'Capçalera',yes:'SÃ',no:'No',invalidWidth:"L'amplada de cel·la ha de ser un nombre.",invalidHeight:"L'alçada de cel·la ha de ser un nombre.",invalidRowSpan:"L'expansió de files ha de ser un nombre enter.",invalidColSpan:"L'expansió de columnes ha de ser un nombre enter.",chooseColor:'Trieu'},row:{menu:'Fila',insertBefore:'Insereix fila abans de',insertAfter:'Insereix fila darrera',deleteRow:'Suprimeix una fila'},column:{menu:'Columna',insertBefore:'Insereix columna abans de',insertAfter:'Insereix columna darrera',deleteColumn:'Suprimeix una columna'}},button:{title:'Propietats del botó',text:'Text (Valor)',type:'Tipus',typeBtn:'Botó',typeSbm:'Transmet formulari',typeRst:'Reinicia formulari'},checkboxAndRadio:{checkboxTitle:'Propietats de la casella de verificació',radioTitle:"Propietats del botó d'opció",value:'Valor',selected:'Seleccionat'},form:{title:'Propietats del formulari',menu:'Propietats del formulari',action:'Acció',method:'Mètode',encoding:'Codificació'},select:{title:'Propietats del camp de selecció',selectInfo:'Info',opAvail:'Opcions disponibles',value:'Valor',size:'Mida',lines:'LÃnies',chkMulti:'Permet múltiples seleccions',opText:'Text',opValue:'Valor',btnAdd:'Afegeix',btnModify:'Modifica',btnUp:'Amunt',btnDown:'Avall',btnSetValue:'Selecciona per defecte',btnDelete:'Elimina'},textarea:{title:"Propietats de l'à rea de text",cols:'Columnes',rows:'Files'},textfield:{title:'Propietats del camp de text',name:'Nom',value:'Valor',charWidth:'Amplada',maxChars:'Nombre mà xim de carà cters',type:'Tipus',typeText:'Text',typePass:'Contrasenya'},hidden:{title:'Propietats del camp ocult',name:'Nom',value:'Valor'},image:{title:'Propietats de la imatge',titleButton:"Propietats del botó d'imatge",menu:'Propietats de la imatge',infoTab:'Informació de la imatge',btnUpload:'Envia-la al servidor',upload:'Puja',alt:'Text alternatiu',lockRatio:'Bloqueja les proporcions',resetSize:'Restaura la mida',border:'Vora',hSpace:'Espaiat horit.',vSpace:'Espaiat vert.',alertUrl:'Si us plau, escriviu la URL de la imatge',linkTab:'Enllaç',button2Img:"Voleu transformar el botó d'imatge seleccionat en una simple imatge?",img2Button:"Voleu transformar la imatge seleccionada en un botó d'imatge?",urlMissing:'Falta la URL de la imatge.',validateBorder:'La vora ha de ser un nombre enter.',validateHSpace:'HSpace ha de ser un nombre enter.',validateVSpace:'VSpace ha de ser un nombre enter.'},flash:{properties:'Propietats del Flash',propertiesTab:'Propietats',title:'Propietats del Flash',chkPlay:'Reprodució automà tica',chkLoop:'Bucle',chkMenu:'Habilita menú Flash',chkFull:'Permetre la pantalla completa',scale:'Escala',scaleAll:'Mostra-ho tot',scaleNoBorder:'Sense vores',scaleFit:'Mida exacta',access:'Accés a scripts',accessAlways:'Sempre',accessSameDomain:'El mateix domini',accessNever:'Mai',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Qualitat',qualityBest:'La millor',qualityHigh:'Alta',qualityAutoHigh:'Alta automà tica',qualityMedium:'Mitjana',qualityAutoLow:'Baixa automà tica',qualityLow:'Baixa',windowModeWindow:'Finestra',windowModeOpaque:'Opaca',windowModeTransparent:'Transparent',windowMode:'Mode de la finestra',flashvars:'Variables de Flash',bgcolor:'Color de Fons',hSpace:'Espaiat horit.',vSpace:'Espaiat vert.',validateSrc:"Si us plau, escrigui l'enllaç URL",validateHSpace:"L'espaiat horitzonatal ha de ser un nombre.",validateVSpace:"L'espaiat vertical ha de ser un nombre."},spellCheck:{toolbar:"Revisa l'ortografia",title:"Comprova l'ortografia",notAvailable:'El servei no es troba disponible ara.',errorLoading:'Error carregant el servidor: %s.',notInDic:'No és al diccionari',changeTo:'Reemplaça amb',btnIgnore:'Ignora',btnIgnoreAll:'Ignora-les totes',btnReplace:'Canvia',btnReplaceAll:'Canvia-les totes',btnUndo:'Desfés',noSuggestions:'Cap suggeriment',progress:'Verificació ortogrà fica en curs...',noMispell:'Verificació ortogrà fica acabada: no hi ha cap paraula mal escrita',noChanges:"Verificació ortogrà fica: no s'ha canviat cap paraula",oneChange:"Verificació ortogrà fica: s'ha canviat una paraula",manyChanges:"Verificació ortogrà fica: s'han canviat %1 paraules",ieSpellDownload:'Verificació ortogrà fica no instal·lada. Voleu descarregar-ho ara?'},smiley:{toolbar:'Icona',title:'Insereix una icona',options:"Opcions d'emoticones"},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Llista numerada',bulletedlist:'Llista de pics',indent:'Augmenta el sagnat',outdent:'Redueix el sagnat',justify:{left:"Alinea a l'esquerra",center:'Centrat',right:'Alinea a la dreta',block:'Justificat'},blockquote:'Bloc de cita',clipboard:{title:'Enganxa',cutError:'La seguretat del vostre navegador no permet executar automà ticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).',copyError:'La seguretat del vostre navegador no permet executar automà ticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).',pasteMsg:'Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.',securityMsg:"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.",pasteArea:"Ãrea d'enganxat"},pastefromword:{confirmCleanup:'El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?',toolbar:'Enganxa des del Word',title:'Enganxa des del Word',error:'No ha estat possible netejar les dades enganxades degut a un error intern'},pasteText:{button:'Enganxa com a text no formatat',title:'Enganxa com a text no formatat'},templates:{button:'Plantilles',title:'Plantilles de contingut',options:'Opcions de plantilla',insertOption:'Reemplaça el contingut actual',selectPromptMsg:"Seleccioneu una plantilla per usar a l'editor<br>(per defecte s'elimina el contingut actual):",emptyListMsg:'(No hi ha plantilles definides)'},showBlocks:'Mostra els blocs',stylesCombo:{label:'Estil',panelTitle:'Estils de format',panelTitle1:'Estils de bloc',panelTitle2:'Estils incrustats',panelTitle3:"Estils d'objecte"},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatejat',tag_address:'Adreça',tag_h1:'Encapçalament 1',tag_h2:'Encapçalament 2',tag_h3:'Encapçalament 3',tag_h4:'Encapçalament 4',tag_h5:'Encapçalament 5',tag_h6:'Encapçalament 6',tag_div:'Normal (DIV)'},div:{title:'Crea un contenidor Div',toolbar:'Crea un contenidor Div',cssClassInputLabel:"Classes de la fulla d'estils",styleSelectLabel:'Estil',IdInputLabel:'Id',languageCodeInputLabel:" Codi d'idioma",inlineStyleInputLabel:'Estil en lÃnia',advisoryTitleInputLabel:'TÃtol de guia',langDirLabel:"Direcció de l'idioma",langDirLTRLabel:"D'esquerra a dreta (LTR)",langDirRTLLabel:'De dreta a esquerra (RTL)',edit:'Edita Div',remove:'Elimina Div'},iframe:{title:'Propietats IFrame',toolbar:'IFrame',noUrl:"Si us plau, introduïu la URL de l'iframe URL",scrolling:'Activa les barrres de desplaçament',border:'Mostra la vora del marc'},font:{label:'Tipus de lletra',voiceLabel:'Tipus de lletra',panelTitle:'Tipus de lletra'},fontSize:{label:'Mida',voiceLabel:'Mida de la lletra',panelTitle:'Mida'},colorButton:{textColorTitle:'Color de Text',bgColorTitle:'Color de Fons',panelTitle:'Colors',auto:'Automà tic',more:'Més colors...'},colors:{'000':'Negre',800000:'Granat','8B4513':'Marró sella','2F4F4F':'Gris pissarra fosca','008080':'Blau xarxet','000080':'Blau marÃ','4B0082':'Indi',696969:'Gris intens',B22222:'Maó',A52A2A:'Marró (web)',DAA520:'Solidago','006400':'Verd fosc','40E0D0':'Turquesa','0000CD':'Atzur',800080:'Lila',808080:'Gris',F00:'Vermell',FF8C00:'Taronja fosc',FFD700:'Or','008000':'Verd','0FF':'Cian','00F':'Blau',EE82EE:'Lavanda rosat',A9A9A9:'Gris clar',FFA07A:'Salmó clar',FFA500:'Taronja',FFFF00:'Groc','00FF00':'Verd llima',AFEEEE:'Blau pà lid',ADD8E6:'Blau clar',DDA0DD:'Pruna',D3D3D3:'Gris clar',FFF0F5:'Lavanda rosat',FAEBD7:'Blanc antic',FFFFE0:'Groc clar',F0FFF0:'Verd pà lid',F0FFFF:'Blau cel pà lid',F0F8FF:'Cian pà lid',E6E6FA:'Lavanda',FFF:'Blanc'},scayt:{title:'Spell Check As You Type',opera_title:"No és compatible amb l'Opera",enable:"Habilitat l'SCAYT",disable:'Deshabilita SCAYT',about:"Quant a l'SCAYT",toggle:"Commuta l'SCAYT",options:'Opcions',langs:'Idiomes',moreSuggestions:'Més suggerències',ignore:'Ignora',ignoreAll:"Ignora'ls tots",addWord:'Afegeix una paraula',emptyDic:"El nom del diccionari no hauria d'estar buit.",optionsTab:'Opcions',allCaps:'Ignora paraules en majúscules',ignoreDomainNames:'Ignora els noms de domini',mixedCase:'Ignora paraules amb majúscules i minúscules',mixedWithDigits:'Ignora paraules amb números ',languagesTab:'Idiomes',dictionariesTab:'Diccionaris',dic_field_name:'Nom del diccionari',dic_create:'Crea',dic_restore:'Restaura',dic_delete:'Elimina',dic_rename:'Canvia el nom',dic_info:"Inicialment el diccionari d'usuari s'emmagatzema en una galeta. De totes maneres, les galetes tenen la mida limitada. Quan el diccionari creix massa, llavors el diccionari es pot emmagatzemar al nostre servidor. Per desar el vostre diccionari personal al nostre servidor heu d.'especificar un nom pel diccionari. Si ja heu desat un diccionari, teclegeu si us plau el seu nom i cliqueu el botó de restauració.",aboutTab:'Quant a'},about:{title:'Quant al CKEditor',dlgTitle:'Quant al CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Per informació sobre llicències visiteu el web:',copy:'Copyright © $1. Tots els drets reservats.'},maximize:'Maximitza',minimize:'Minimitza',fakeobjects:{anchor:'Ãncora',flash:'Animació Flash',iframe:'IFrame',hiddenfield:'Camp ocult',unknown:'Objecte desconegut'},resize:'Arrossegueu per redimensionar',colordialog:{title:'Selecciona el color',options:'Opcions del color',highlight:'Destacat',selected:'Seleccionat',clear:'Neteja'},toolbarCollapse:"Redueix la barra d'eines",toolbarExpand:"Amplia la barra d'eines",toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:"Direcció del text d'esquerra a dreta",rtl:'Direcció del text de dreta a esquerra'},docprops:{label:'Propietats del document',title:'Propietats del document',design:'Design',meta:'Metadades',chooseColor:'Trieu',other:'<altre>',docTitle:'TÃtol de la pà gina',charset:'Codificació de conjunt de carà cters',charsetOther:'Una altra codificació de carà cters',charsetASCII:'ASCII',charsetCE:'Centreeuropeu',charsetCT:'Xinès tradicional (Big5)',charsetCR:'CirÃl·lic',charsetGR:'Grec',charsetJP:'Japonès',charsetKR:'Coreà ',charsetTR:'Turc',charsetUN:'Unicode (UTF-8)',charsetWE:'Europeu occidental',docType:'Capçalera de tipus de document',docTypeOther:'Un altra capçalera de tipus de document',xhtmlDec:'Incloure declaracions XHTML',bgColor:'Color de fons',bgImage:'URL de la imatge de fons',bgFixed:'Fons fixe',txtColor:'Color de Text',margin:'Marges de pà gina',marginTop:'Cap',marginLeft:'Esquerra',marginRight:'Dreta',marginBottom:'Peu',metaKeywords:'Mots clau per a indexació (separats per coma)',metaDescription:'Descripció del document',metaAuthor:'Autor',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/cs.js b/lang/cs.js new file mode 100644 index 0000000..a64e231 --- /dev/null +++ b/lang/cs.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.cs={dir:'ltr',editorTitle:'Textový editor, %1, nápovÄdu zobrazÃte stiskem ALT 0.',toolbars:'Editor toolbars',editor:'Textový editor',source:'Zdroj',newPage:'Nová stránka',save:'Uložit',preview:'Náhled',cut:'Vyjmout',copy:'KopÃrovat',paste:'Vložit',print:'Tisk',underline:'Podtržené',bold:'TuÄné',italic:'KurzÃva',selectAll:'Vybrat vÅ¡e',removeFormat:'Odstranit formátovánÃ',strike:'PÅeÅ¡krtnuté',subscript:'Dolnà index',superscript:'Hornà index',horizontalrule:'Vložit vodorovnou linku',pagebreak:'Vložit konec stránky',pagebreakAlt:'Konec stránky',unlink:'Odstranit odkaz',undo:'ZpÄt',redo:'Znovu',common:{browseServer:'Vybrat na serveru',url:'URL',protocol:'Protokol',upload:'Odeslat',uploadSubmit:'Odeslat na server',image:'Obrázek',flash:'Flash',form:'FormuláÅ',checkbox:'ZaÅ¡krtávacà polÃÄko',radio:'PÅepÃnaÄ',textField:'Textové pole',textarea:'Textová oblast',hiddenField:'Skryté pole',button:'TlaÄÃtko',select:'Seznam',imageButton:'Obrázkové tlaÄÃtko',notSet:'<nenastaveno>',id:'Id',name:'Jméno',langDir:'Orientace jazyka',langDirLtr:'Zleva do prava (LTR)',langDirRtl:'Zprava do leva (RTL)',langCode:'Kód jazyka',longDescr:'Dlouhý popis URL',cssClass:'TÅÃda stylu',advisoryTitle:'Pomocný titulek',cssStyle:'Styl',ok:'OK',cancel:'Storno',close:'ZavÅÃt',preview:'Náhled',generalTab:'Obecné',advancedTab:'RozÅ¡ÃÅené',validateNumberFailed:'Zadaná hodnota nenà ÄÃselná.',confirmNewPage:'Jakékoliv neuložené zmÄny obsahu budou ztraceny. SkuteÄnÄ chete otevrÃt novou stránku?',confirmCancel:'NÄkterá z nastavenà byla zmÄnÄna. SkuteÄnÄ chete zavÅÃt dialogové okno?',options:'NastavenÃ',target:'CÃl',targetNew:'Nové okno (_blank)',targetTop:'Okno nejvyššà úrovnÄ (_top)',targetSelf:'Stejné okno (_self)',targetParent:'RodiÄovské onko (_parent)',langDirLTR:'Zleva doprava (LTR)',langDirRTL:'Zprava doleva (RTL)',styles:'Styly',cssClasses:'TÅÃdy stylů',width:'Å ÃÅka',height:'Výška',align:'ZarovnánÃ',alignLeft:'Vlevo',alignRight:'Vpravo',alignCenter:'Na stÅed',alignTop:'Nahoru',alignMiddle:'Na stÅed',alignBottom:'Dolů',invalidHeight:'Zadaná výška musà být ÄÃslo.',invalidWidth:'Zadaná Å¡ÃÅka musà být ÄÃslo.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, nedostupné</span>'},contextmenu:{options:'Nastavenà kontextové nabÃdky'},specialChar:{toolbar:'Vložit speciálnà znaky',title:'VýbÄr speciálnÃho znaku',options:'Nastavenà speciálnÃch znaků'},link:{toolbar:'Vložit/zmÄnit odkaz',other:'<jiný>',menu:'ZmÄnit odkaz',title:'Odkaz',info:'Informace o odkazu',target:'CÃl',upload:'Odeslat',advanced:'RozÅ¡ÃÅené',type:'Typ odkazu',toUrl:'URL',toAnchor:'Kotva v této stránce',toEmail:'E-Mail',targetFrame:'<rámec>',targetPopup:'<vyskakovacà okno>',targetFrameName:'Název cÃlového rámu',targetPopupName:'Název vyskakovacÃho okna',popupFeatures:'Vlastnosti vyskakovacÃho okna',popupResizable:'UmožÅujÃcà mÄnit velikost',popupStatusBar:'Stavový Åádek',popupLocationBar:'Panel umÃstÄnÃ',popupToolbar:'Panel nástrojů',popupMenuBar:'Panel nabÃdky',popupFullScreen:'Celá obrazovka (IE)',popupScrollBars:'PosuvnÃky',popupDependent:'Závislost (Netscape)',popupLeft:'Levý okraj',popupTop:'Hornà okraj',id:'Id',langDir:'Orientace jazyka',langDirLTR:'Zleva do prava (LTR)',langDirRTL:'Zprava do leva (RTL)',acccessKey:'PÅÃstupový klÃÄ',name:'Jméno',langCode:'Orientace jazyka',tabIndex:'PoÅadà prvku',advisoryTitle:'Pomocný titulek',advisoryContentType:'Pomocný typ obsahu',cssClasses:'TÅÃda stylu',charset:'PÅiÅazená znaková sada',styles:'Styl',rel:'Relationship',selectAnchor:'Vybrat kotvu',anchorName:'Podle jména kotvy',anchorId:'Podle Id objektu',emailAddress:'E-Mailová adresa',emailSubject:'PÅedmÄt zprávy',emailBody:'TÄlo zprávy',noAnchors:'(Ve stránce nenà definována žádná kotva!)',noUrl:'Zadejte prosÃm URL odkazu',noEmail:'Zadejte prosÃm e-mailovou adresu'},anchor:{toolbar:'VložÃt/zmÄnit záložku',menu:'Vlastnosti záložky',title:'Vlastnosti záložky',name:'Název záložky',errorName:'Zadejte prosÃm název záložky',remove:'Remove Anchor'},list:{numberedTitle:'Vlastnosti ÄÃslovánÃ',bulletedTitle:'Vlastnosti odrážek',type:'Typ',start:'PoÄátek',validateStartNumber:'ÄÃslovánà musà zaÄÃnat celým ÄÃslem.',circle:'Kroužky',disc:'KoleÄka',square:'Ätverce',none:'Nic',notset:'<nenastaveno>',armenian:'Arménské',georgian:'GruzÃnské (an, ban, gan, atd.)',lowerRoman:'Malé ÅÃmské (i, ii, iii, iv, v, atd.)',upperRoman:'Velké ÅÃmské (I, II, III, IV, V, atd.)',lowerAlpha:'Malá latinka (a, b, c, d, e, atd.)',upperAlpha:'Velká latinka (A, B, C, D, E, atd.)',lowerGreek:'Malé Åecké (alpha, beta, gamma, atd.)',decimal:'Arabská ÄÃsla (1, 2, 3, atd.)',decimalLeadingZero:'Arabská ÄÃsla uvozená nulou (01, 02, 03, atd.)'},findAndReplace:{title:'NajÃt a nahradit',find:'Hledat',replace:'Nahradit',findWhat:'Co hledat:',replaceWith:'ÄÃm nahradit:',notFoundMsg:'Hledaný text nebyl nalezen.',matchCase:'RozliÅ¡ovat velikost pÃsma',matchWord:'Pouze celá slova',matchCyclic:'Procházet opakovanÄ',replaceAll:'Nahradit vÅ¡e',replaceSuccessMsg:'%1 nahrazenÃ.'},table:{toolbar:'Tabulka',title:'Vlastnosti tabulky',menu:'Vlastnosti tabulky',deleteTable:'Smazat tabulku',rows:'Åádky',columns:'Sloupce',border:'OhraniÄenÃ',widthPx:'bodů',widthPc:'procent',widthUnit:'jednotka Å¡ÃÅky',cellSpace:'Vzdálenost bunÄk',cellPad:'Odsazenà obsahu v buÅce',caption:'Popis',summary:'Souhrn',headers:'ZáhlavÃ',headersNone:'Žádné',headersColumn:'Prvnà sloupec',headersRow:'Prvnà Åádek',headersBoth:'ObojÃ',invalidRows:'PoÄet Åádků musà být ÄÃslo vÄtÅ¡Ã než 0.',invalidCols:'PoÄet sloupců musà být ÄÃslo vÄtÅ¡Ã než 0.',invalidBorder:'Zdaná velikost okraje musà být ÄÃselná.',invalidWidth:'Zadaná Å¡ÃÅka tabulky musà být ÄÃselná.',invalidHeight:'zadaná výška tabulky musà být ÄÃselná.',invalidCellSpacing:'Zadaná vzdálenost bunÄk musà být ÄÃselná.',invalidCellPadding:'Zadané odsazenà obsahu v buÅce musà být ÄÃselné.',cell:{menu:'BuÅka',insertBefore:'Vložit buÅku pÅed',insertAfter:'Vložit buÅku za',deleteCell:'Smazat buÅky',merge:'SlouÄit buÅky',mergeRight:'SlouÄit doprava',mergeDown:'SlouÄit dolů',splitHorizontal:'RozdÄlit buÅky vodorovnÄ',splitVertical:'RozdÄlit buÅky svisle',title:'Vlastnosti buÅky',cellType:'Typ buÅky',rowSpan:'Spojit Åádky',colSpan:'Spojit sloupce',wordWrap:'ZalamovánÃ',hAlign:'Vodorovné zarovnánÃ',vAlign:'Svislé zarovnánÃ',alignBaseline:'Na úÄaÅÃ',bgColor:'Barva pozadÃ',borderColor:'Barva okraje',data:'Data',header:'HlaviÄka',yes:'Ano',no:'Ne',invalidWidth:'Zadaná Å¡ÃÅka buÅky musà být ÄÃslená.',invalidHeight:'Zadaná výška buÅky musà být ÄÃslená.',invalidRowSpan:'Zadaný poÄet slouÄených Åádků musà být celé ÄÃslo.',invalidColSpan:'Zadaný poÄet slouÄených sloupců musà být celé ÄÃslo.',chooseColor:'VýbÄr'},row:{menu:'Åádek',insertBefore:'Vložit Åádek pÅed',insertAfter:'Vložit Åádek za',deleteRow:'Smazat Åádky'},column:{menu:'Sloupec',insertBefore:'Vložit sloupec pÅed',insertAfter:'Vložit sloupec za',deleteColumn:'Smazat sloupec'}},button:{title:'Vlastnosti tlaÄÃtka',text:'Popisek',type:'Typ',typeBtn:'TlaÄÃtko',typeSbm:'Odeslat',typeRst:'Obnovit'},checkboxAndRadio:{checkboxTitle:'Vlastnosti zaÅ¡krtávacÃho polÃÄka',radioTitle:'Vlastnosti pÅepÃnaÄe',value:'Hodnota',selected:'ZaÅ¡krtnuto'},form:{title:'Vlastnosti formuláÅe',menu:'Vlastnosti formuláÅe',action:'Akce',method:'Metoda',encoding:'KódovánÃ'},select:{title:'Vlastnosti seznamu',selectInfo:'Info',opAvail:'Dostupná nastavenÃ',value:'Hodnota',size:'Velikost',lines:'Åádků',chkMulti:'Povolit mnohonásobné výbÄry',opText:'Text',opValue:'Hodnota',btnAdd:'PÅidat',btnModify:'ZmÄnit',btnUp:'Nahoru',btnDown:'Dolů',btnSetValue:'Nastavit jako vybranou hodnotu',btnDelete:'Smazat'},textarea:{title:'Vlastnosti textové oblasti',cols:'Sloupců',rows:'Åádků'},textfield:{title:'Vlastnosti textového pole',name:'Název',value:'Hodnota',charWidth:'Å ÃÅka ve znacÃch',maxChars:'Maximálnà poÄet znaků',type:'Typ',typeText:'Text',typePass:'Heslo'},hidden:{title:'Vlastnosti skrytého pole',name:'Název',value:'Hodnota'},image:{title:'Vlastnosti obrázku',titleButton:'Vlastnostà obrázkového tlaÄÃtka',menu:'Vlastnosti obrázku',infoTab:'Informace o obrázku',btnUpload:'Odeslat na server',upload:'Odeslat',alt:'Alternativnà text',lockRatio:'Zámek',resetSize:'Původnà velikost',border:'Okraje',hSpace:'H-mezera',vSpace:'V-mezera',alertUrl:'Zadejte prosÃm URL obrázku',linkTab:'Odkaz',button2Img:'SkuteÄnÄ chcete pÅevést zvolené obrázkové tlaÄÃtko na obyÄejný obrázek?',img2Button:'SkuteÄnÄ chcete pÅevést zvolený obrázek na obrázkové tlaÄÃtko?',urlMissing:'Zadané URL zdroje obrázku nebylo nalezeno.',validateBorder:'Okraj musà být nastaven v celých ÄÃslech.',validateHSpace:'H-mezera musà být nastavena v celých ÄÃslech.',validateVSpace:'V-mezera musà být nastavena v celých ÄÃslech.'},flash:{properties:'Vlastnosti Flashe',propertiesTab:'Vlastnosti',title:'Vlastnosti Flashe',chkPlay:'Automatické spuÅ¡tÄnÃ',chkLoop:'OpakovánÃ',chkMenu:'NabÃdka Flash',chkFull:'Povolit celoobrazovkový režim',scale:'Zobrazit',scaleAll:'Zobrazit vÅ¡e',scaleNoBorder:'Bez okraje',scaleFit:'PÅizpůsobit',access:'PÅÃstup ke skriptu',accessAlways:'Vždy',accessSameDomain:'Ve stejné doménÄ',accessNever:'Nikdy',alignAbsBottom:'Zcela dolů',alignAbsMiddle:'DoprostÅed',alignBaseline:'Na úÄaÅÃ',alignTextTop:'Na hornà okraj textu',quality:'Kvalita',qualityBest:'NejlepÅ¡Ã',qualityHigh:'Vysoká',qualityAutoHigh:'Vysoká - auto',qualityMedium:'StÅednÃ',qualityAutoLow:'NÃzká - auto',qualityLow:'NejnižšÃ',windowModeWindow:'Okno',windowModeOpaque:'Neprůhledné',windowModeTransparent:'Průhledné',windowMode:'Režim okna',flashvars:'PromÄnné pro Flash',bgcolor:'Barva pozadÃ',hSpace:'H-mezera',vSpace:'V-mezera',validateSrc:'Zadejte prosÃm URL odkazu',validateHSpace:'Zadaná H-mezera musà být ÄÃslo.',validateVSpace:'Zadaná V-mezera musà být ÄÃslo.'},spellCheck:{toolbar:'Zkontrolovat pravopis',title:'Kontrola pravopisu',notAvailable:'Omlouváme se, ale služba nynà nenà dostupná.',errorLoading:'Chyba nahrávánà služby aplikace z: %s.',notInDic:'Nenà ve slovnÃku',changeTo:'ZmÄnit na',btnIgnore:'PÅeskoÄit',btnIgnoreAll:'PÅeskakovat vÅ¡e',btnReplace:'ZamÄnit',btnReplaceAll:'ZamÄÅovat vÅ¡e',btnUndo:'ZpÄt',noSuggestions:'- žádné návrhy -',progress:'ProbÃhá kontrola pravopisu...',noMispell:'Kontrola pravopisu dokonÄena: Žádné pravopisné chyby nenalezeny',noChanges:'Kontrola pravopisu dokonÄena: Beze zmÄn',oneChange:'Kontrola pravopisu dokonÄena: Jedno slovo zmÄnÄno',manyChanges:'Kontrola pravopisu dokonÄena: %1 slov zmÄnÄno',ieSpellDownload:'Kontrola pravopisu nenà nainstalována. Chcete ji nynà stáhnout?'},smiley:{toolbar:'SmajlÃky',title:'Vkládánà smajlÃků',options:'Nastavenà smajlÃků'},elementsPath:{eleLabel:'Cesta objektu',eleTitle:'%1 objekt'},numberedlist:'ÄÃslovánÃ',bulletedlist:'Odrážky',indent:'ZvÄtÅ¡it odsazenÃ',outdent:'ZmenÅ¡it odsazenÃ',justify:{left:'Zarovnat vlevo',center:'Zarovnat na stÅed',right:'Zarovnat vpravo',block:'Zarovnat do bloku'},blockquote:'Citace',clipboard:{title:'Vložit',cutError:'BezpeÄnostnà nastavenà VaÅ¡eho prohlÞeÄe nedovolujà editoru spustit funkci pro vyjmutà zvoleného textu do schránky. ProsÃm vyjmÄte zvolený text do schránky pomocà klávesnice (Ctrl/Cmd+X).',copyError:'BezpeÄnostnà nastavenà VaÅ¡eho prohlÞeÄe nedovolujà editoru spustit funkci pro kopÃrovánà zvoleného textu do schránky. ProsÃm zkopÃrujte zvolený text do schránky pomocà klávesnice (Ctrl/Cmd+C).',pasteMsg:'Do následujÃcÃho pole vložte požadovaný obsah pomocà klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stisknÄte <STRONG>OK</STRONG>.',securityMsg:'Z důvodů nastavenà bezpeÄnosti VaÅ¡eho prohlÞeÄe nemůže editor pÅistupovat pÅÃmo do schránky. Obsah schránky prosÃm vložte znovu do tohoto okna.',pasteArea:'Oblast vlkádánÃ'},pastefromword:{confirmCleanup:'Jak je vidÄt, vkládaný text je kopÃrován z Wordu. Chcete jej pÅed vloženÃm vyÄistit?',toolbar:'Vložit z Wordu',title:'Vložit z Wordu',error:'Z důvodu vnitÅnà chyby nebylo možné provést vyÄiÅ¡tÄnà vkládaného textu.'},pasteText:{button:'Vložit jako Äistý text',title:'Vložit jako Äistý text'},templates:{button:'Å ablony',title:'Å ablony obsahu',options:'Nastavenà šablon',insertOption:'Nahradit aktuálnà obsah',selectPromptMsg:'ProsÃm zvolte Å¡ablonu pro otevÅenà v editoru<br>(aktuálnà obsah editoru bude ztracen):',emptyListMsg:'(Nenà definována žádná Å¡ablona)'},showBlocks:'Ukázat bloky',stylesCombo:{label:'Styl',panelTitle:'Formátovacà styly',panelTitle1:'Blokové styly',panelTitle2:'Åádkové styly',panelTitle3:'Objektové styly'},format:{label:'Formát',panelTitle:'Formát',tag_p:'NormálnÃ',tag_pre:'Naformátováno',tag_address:'Adresa',tag_h1:'Nadpis 1',tag_h2:'Nadpis 2',tag_h3:'Nadpis 3',tag_h4:'Nadpis 4',tag_h5:'Nadpis 5',tag_h6:'Nadpis 6',tag_div:'Normálnà (DIV)'},div:{title:'VytvoÅit Div kontejner',toolbar:'VytvoÅit Div kontejner',cssClassInputLabel:'TÅÃdy stylů',styleSelectLabel:'Styly',IdInputLabel:'Id',languageCodeInputLabel:' Kód jazyka',inlineStyleInputLabel:'VnitÅnà styly',advisoryTitleInputLabel:'NápovÄdnà titulek',langDirLabel:'Orientace textu',langDirLTRLabel:'Zleva doprava (LTR)',langDirRTLLabel:'Zprava doleva (RTL)',edit:'ZmÄnit Div',remove:'Odstranit Div'},iframe:{title:'Vlastnosti IFrame',toolbar:'IFrame',noUrl:'Zadejte prosÃm URL obsahu pro IFrame',scrolling:'Zapnout posuvnÃky',border:'Zobrazit okraj'},font:{label:'PÃsmo',voiceLabel:'PÃsmo',panelTitle:'PÃsmo'},fontSize:{label:'Velikost',voiceLabel:'Velikost pÃsma',panelTitle:'Velikost'},colorButton:{textColorTitle:'Barva textu',bgColorTitle:'Barva pozadÃ',panelTitle:'Barvy',auto:'Automaticky',more:'VÃce barev...'},colors:{'000':'Äerná',800000:'KaÅ¡tanová','8B4513':'Sedlová hnÄÄ','2F4F4F':'TmavÄ bledÄ Å¡edá','008080':'ÄÃrka','000080':'NámoÅnická modÅ','4B0082':'Inkoustová',696969:'TmavÄ Å¡edá',B22222:'Pálená cihla',A52A2A:'HnÄdá',DAA520:'Zlatý prut','006400':'TmavÄ zelená','40E0D0':'Tyrkisová','0000CD':'StÅednÄ modrá',800080:'Purpurová',808080:'Å edá',F00:'Äervená',FF8C00:'TmavÄ oranžová',FFD700:'Zlatá','008000':'Zelená','0FF':'Kyanidová','00F':'Modrá',EE82EE:'Fialová',A9A9A9:'KalnÄ Å¡edá',FFA07A:'SvÄtle lososová',FFA500:'Oranžová',FFFF00:'Žlutá','00FF00':'Limetková',AFEEEE:'BledÄ tyrkisová',ADD8E6:'SvÄtle modrá',DDA0DD:'Å vestková',D3D3D3:'SvÄtle Å¡edá',FFF0F5:'LevandulovÄ rumÄnná',FAEBD7:'Antická bÃlá',FFFFE0:'SvÄtle žlutá',F0FFF0:'Medová rosa',F0FFFF:'Azurová',F0F8FF:'AlenÄina modrá',E6E6FA:'Lavendulová',FFF:'BÃlá'},scayt:{title:'Kontrola pravopisu bÄhem psanà (SCAYT)',opera_title:'Not supported by Opera',enable:'Zapnout SCAYT',disable:'Vypnout SCAYT',about:'O aplikaci SCAYT',toggle:'VypÃnaÄ SCAYT',options:'NastavenÃ',langs:'Jazyky',moreSuggestions:'VÃce návrhů',ignore:'PÅeskoÄit',ignoreAll:'PÅeskoÄit vÅ¡e',addWord:'PÅidat slovo',emptyDic:'Název slovnÃku nesmà být prázdný.',optionsTab:'NastavenÃ',allCaps:'Ignorovat slova velkými pÃsmeny',ignoreDomainNames:'Ignorovat doménová jména',mixedCase:'Ignorovat slova obsahujÃcà různou velikost pÃsma',mixedWithDigits:'Ignorovat slova obsahujÃcà ÄÃsla',languagesTab:'Jazyky',dictionariesTab:'SlovnÃky',dic_field_name:'Název slovnÃku',dic_create:'vytvoÅit',dic_restore:'Obnovit',dic_delete:'Smazat',dic_rename:'PÅejmenovat',dic_info:'ZpoÄátku se uživatelský slovnÃk ukládá do cookies ve vaÅ¡em prohlÞeÄi. OvÅ¡em cookies majà omezenou velikost, takže když slovnÃk dosáhne velikosti, kdy se již do cookies nevejde, může být uložen na naÅ¡em serveru. Chcete-li uložit Váš osobnà slovnÃk na naÅ¡em serveru, je tÅeba slovnÃk nejdÅÃve pojmenovat. Máte-li již slovnÃk pojmenován a uložen, zadejte jeho název a klepnÄte na tlaÄÃtko Obnovit.',aboutTab:'O aplikaci'},about:{title:'O aplikaci CKEditor',dlgTitle:'O aplikaci CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Pro informace o lincenci navÅ¡tivte naÅ¡i webovou stránku:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximalizovat',minimize:'Minimalizovat',fakeobjects:{anchor:'Záložka',flash:'Flash animace',iframe:'IFrame',hiddenfield:'Skryté pole',unknown:'Neznámý objekt'},resize:'Uchopit pro zmÄnu velikosti',colordialog:{title:'VýbÄr barvy',options:'Nastavenà barvy',highlight:'Zvýraznit',selected:'Vybráno',clear:'VyÄistit'},toolbarCollapse:'Skrýt panel nástrojů',toolbarExpand:'Zobrazit panel nástrojů',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Orientace textu zleva doprava',rtl:'Orientace textu zprava do leva'},docprops:{label:'Vlastnosti dokumentu',title:'Vlastnosti dokumentu',design:'Design',meta:'Metadata',chooseColor:'VýbÄr',other:'<jiný>',docTitle:'Titulek stránky',charset:'Znaková sada',charsetOther:'DalÅ¡Ã znaková sada',charsetASCII:'ASCII',charsetCE:'StÅedoevropské jazyky',charsetCT:'TradiÄnà ÄÃnÅ¡tina (Big5)',charsetCR:'Cyrilice',charsetGR:'ÅeÄtina',charsetJP:'JaponÅ¡tina',charsetKR:'KorejÅ¡tina',charsetTR:'TureÄtina',charsetUN:'Unicode (UTF-8)',charsetWE:'Západoevropské jazyky',docType:'Typ dokumentu',docTypeOther:'Jiný typ dokumetu',xhtmlDec:'Zahrnou deklarace XHTML',bgColor:'Barva pozadÃ',bgImage:'URL obrázku na pozadÃ',bgFixed:'Nerolovatelné pozadÃ',txtColor:'Barva textu',margin:'Okraje stránky',marginTop:'HornÃ',marginLeft:'Levý',marginRight:'Pravý',marginBottom:'DolnÃ',metaKeywords:'KlÃÄová slova (oddÄlená Äárkou)',metaDescription:'Popis dokumentu',metaAuthor:'Autor',metaCopyright:'Autorská práva',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/cy.js b/lang/cy.js new file mode 100644 index 0000000..839230c --- /dev/null +++ b/lang/cy.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.cy={dir:'ltr',editorTitle:'Golygydd testun cyfoethog, %1, gwasgwch ALT 0 am gymorth.',toolbars:'Bariau offer golygydd',editor:'Golygydd Testun Cyfoethog',source:'Tarddle',newPage:'Tudalen newydd',save:'Cadw',preview:'Rhagolwg',cut:'Torri',copy:'Copïo',paste:'Gludo',print:'Argraffu',underline:'Tanlinellu',bold:'Bras',italic:'Italig',selectAll:'Dewis Popeth',removeFormat:'Tynnu Fformat',strike:'Llinell Trwyddo',subscript:'Is-sgript',superscript:'Uwchsgript',horizontalrule:'Mewnosod Llinell Lorweddol',pagebreak:'Mewnosod Toriad Tudalen i Argraffu',pagebreakAlt:'Toriad Tudalen',unlink:'Datgysylltu',undo:'Dadwneud',redo:'Ailadrodd',common:{browseServer:"Pori'r Gweinydd",url:'URL',protocol:'Protocol',upload:'Lanlwytho',uploadSubmit:"Anfon i'r Gweinydd",image:'Delwedd',flash:'Flash',form:'Ffurflen',checkbox:'Blwch ticio',radio:'Botwm Radio',textField:'Maes Testun',textarea:'Ardal Testun',hiddenField:'Maes Cudd',button:'Botwm',select:'Maes Dewis',imageButton:'Botwm Delwedd',notSet:'<heb osod>',id:'Id',name:'Name',langDir:'Cyfeiriad Iaith',langDirLtr:"Chwith i'r Dde (LTR)",langDirRtl:"Dde i'r Chwith (RTL)",langCode:'Cod Iaith',longDescr:'URL Disgrifiad Hir',cssClass:'Dosbarth Dalen Arddull',advisoryTitle:'Teitl Cynghorol',cssStyle:'Arddull',ok:'Iawn',cancel:'Diddymu',close:'Cau',preview:'Rhagolwg',generalTab:'Cyffredinol',advancedTab:'Uwch',validateNumberFailed:"Nid yw'r gwerth hwn yn rhif.",confirmNewPage:"Byddwch yn colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. A ydych am barhau i lwytho tudalen newydd?",confirmCancel:"Mae rhai o'r opsiynau wedi'u newid. A ydych wir am gau'r deialog?",options:'Opsiynau',target:'Targed',targetNew:'Ffenest Newydd (_blank)',targetTop:'Ffenest ar y Brig (_top)',targetSelf:'Yr un Ffenest (_self)',targetParent:'Ffenest y Rhiant (_parent)',langDirLTR:"Chwith i'r Dde (LTR)",langDirRTL:"Dde i'r Chwith (RTL)",styles:'Arddull',cssClasses:'Dosbarthiadau Ffeil Ddiwyg',width:'Lled',height:'Uchder',align:'Alinio',alignLeft:'Chwith',alignRight:'Dde',alignCenter:'Canol',alignTop:'Brig',alignMiddle:'Canol',alignBottom:'Gwaelod',invalidHeight:"Rhaid i'r Uchder fod yn rhif.",invalidWidth:"Rhaid i'r Lled fod yn rhif.",invalidCssLength:"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).",invalidHtmlLength:"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).",unavailable:'%1<span class="cke_accessibility">, ddim ar gael</span>'},contextmenu:{options:'Opsiynau Dewislen Cyd-destun'},specialChar:{toolbar:'Mewnosod Nodau Arbennig',title:'Dewis Nod Arbennig',options:'Opsiynau Nodau Arbennig'},link:{toolbar:'Dolen',other:'<eraill>',menu:'Golygu Dolen',title:'Dolen',info:'Gwyb ar y Ddolen',target:'Targed',upload:'Lanlwytho',advanced:'Uwch',type:'Math y Ddolen',toUrl:'URL',toAnchor:'Dolen at angor yn y testun',toEmail:'E-bost',targetFrame:'<ffrâm>',targetPopup:'<ffenestr bop>',targetFrameName:'Enw Ffrâm y Targed',targetPopupName:'Enw Ffenestr Bop',popupFeatures:'Nodweddion Ffenestr Bop',popupResizable:'Ailfeintiol',popupStatusBar:'Bar Statws',popupLocationBar:'Bar Safle',popupToolbar:'Bar Offer',popupMenuBar:'Dewislen',popupFullScreen:'Sgrin Llawn (IE)',popupScrollBars:'Barrau Sgrolio',popupDependent:'Dibynnol (Netscape)',popupLeft:'Safle Chwith',popupTop:'Safle Top',id:'Id',langDir:'Cyfeiriad Iaith',langDirLTR:"Chwith i'r Dde (LTR)",langDirRTL:"Dde i'r Chwith (RTL)",acccessKey:'Allwedd Mynediad',name:'Enw',langCode:'Cod Iaith',tabIndex:'Indecs Tab',advisoryTitle:'Teitl Cynghorol',advisoryContentType:'Math y Cynnwys Cynghorol',cssClasses:'Dosbarthiadau Dalen Arddull',charset:"Set nodau'r Adnodd Cysylltiedig",styles:'Arddull',rel:'Perthynas',selectAnchor:'Dewiswch Angor',anchorName:"Gan Enw'r Angor",anchorId:'Gan Id yr Elfen',emailAddress:'Cyfeiriad E-Bost',emailSubject:'Testun y Message Subject',emailBody:'Pwnc y Neges',noAnchors:'(Dim angorau ar gael yn y ddogfen)',noUrl:'Teipiwch URL y ddolen',noEmail:'Teipiwch gyfeiriad yr e-bost'},anchor:{toolbar:'Angor',menu:'Golygwch yr Angor',title:"Priodweddau'r Angor",name:"Enw'r Angor",errorName:"Teipiwch enw'r angor",remove:'Tynnwch yr Angor'},list:{numberedTitle:'Priodweddau Rhestr Rifol',bulletedTitle:'Priodweddau Rhestr Fwled',type:'Math',start:'Dechrau',validateStartNumber:'Rhaid bod y rhif cychwynnol yn gyfanrif.',circle:'Cylch',disc:'Disg',square:'Sgwâr',none:'Dim',notset:'<heb osod>',armenian:'Rhifau Armeneg',georgian:'Rhifau Sioraidd (an, ban, gan, ayyb.)',lowerRoman:'Rhufeinig Is (i, ii, iii, iv, v, ayyb.)',upperRoman:'Rhufeinig Uwch (I, II, III, IV, V, ayyb.)',lowerAlpha:'Alffa Is (a, b, c, d, e, ayyb.)',upperAlpha:'Alffa Uwch (A, B, C, D, E, ayyb.)',lowerGreek:'Groeg Is (alpha, beta, gamma, ayyb.)',decimal:'Degol (1, 2, 3, ayyb.)',decimalLeadingZero:'Degol â sero arweiniol (01, 02, 03, ayyb.)'},findAndReplace:{title:'Chwilio ac Amnewid',find:'Chwilio',replace:'Amnewid',findWhat:"Chwilio'r term:",replaceWith:'Amnewid gyda:',notFoundMsg:"Nid oedd y testun wedi'i ddarganfod.",matchCase:"Cyfateb i'r cas",matchWord:'Cyfateb gair cyfan',matchCyclic:'Cyfateb cylchol',replaceAll:'Amnewid pob un',replaceSuccessMsg:'Amnewidiwyd %1 achlysur.'},table:{toolbar:'Tabl',title:'Nodweddion Tabl',menu:'Nodweddion Tabl',deleteTable:'Dileu Tabl',rows:'Rhesi',columns:'Colofnau',border:'Maint yr Ymyl',widthPx:'picsel',widthPc:'y cant',widthUnit:'uned lled',cellSpace:"Bylchu'r gell",cellPad:"Padio'r gell",caption:'Pennawd',summary:'Crynodeb',headers:'Penynnau',headersNone:'Dim',headersColumn:'Colofn gyntaf',headersRow:'Rhes gyntaf',headersBoth:'Y Ddau',invalidRows:"Mae'n rhaid cael o leiaf un rhes.",invalidCols:"Mae'n rhaid cael o leiaf un golofn.",invalidBorder:"Mae'n rhaid i faint yr ymyl fod yn rhif.",invalidWidth:"Mae'n rhaid i led y tabl fod yn rhif.",invalidHeight:"Mae'n rhaid i uchder y tabl fod yn rhif.",invalidCellSpacing:"Mae'n rhaid i fylchiad y gell fod yn rhif positif.",invalidCellPadding:"Mae'n rhaid i badiad y gell fod yn rhif positif.",cell:{menu:'Cell',insertBefore:'Mewnosod Cell Cyn',insertAfter:'Mewnosod Cell Ar Ãl',deleteCell:'Dileu Celloedd',merge:'Cyfuno Celloedd',mergeRight:"Cyfuno i'r Dde",mergeDown:'Cyfuno i Lawr',splitHorizontal:"Hollti'r Gell yn Lorweddol",splitVertical:"Hollti'r Gell yn Fertigol",title:"Priodweddau'r Gell",cellType:'Math y Gell',rowSpan:'Rhychwant Rhesi',colSpan:'Rhychwant Colofnau',wordWrap:'Lapio Geiriau',hAlign:'Aliniad Llorweddol',vAlign:'Aliniad Fertigol',alignBaseline:'Baslinell',bgColor:'Lliw Cefndir',borderColor:'Lliw Ymyl',data:'Data',header:'Pennyn',yes:'Ie',no:'Na',invalidWidth:"Mae'n rhaid i led y gell fod yn rhif.",invalidHeight:"Mae'n rhaid i uchder y gell fod yn rhif.",invalidRowSpan:"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.",invalidColSpan:"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.",chooseColor:'Choose'},row:{menu:'Rhes',insertBefore:'Mewnosod Rhes Cyn',insertAfter:'Mewnosod Rhes Ar Ãl',deleteRow:'Dileu Rhesi'},column:{menu:'Colofn',insertBefore:'Mewnosod Colofn Cyn',insertAfter:'Mewnosod Colofn Ar Ãl',deleteColumn:'Dileu Colofnau'}},button:{title:'Priodweddau Botymau',text:'Testun (Gwerth)',type:'Math',typeBtn:'Botwm',typeSbm:'Gyrru',typeRst:'Ailosod'},checkboxAndRadio:{checkboxTitle:'Priodweddau Blwch Ticio',radioTitle:'Priodweddau Botwm Radio',value:'Gwerth',selected:'Dewiswyd'},form:{title:'Priodweddau Ffurflen',menu:'Priodweddau Ffurflen',action:'Gweithred',method:'Dull',encoding:'Amgodio'},select:{title:'Priodweddau Maes Dewis',selectInfo:'Gwyb Dewis',opAvail:'Opsiynau ar Gael',value:'Gwerth',size:'Maint',lines:'llinellau',chkMulti:'Caniatà u aml-ddewisiadau',opText:'Testun',opValue:'Gwerth',btnAdd:'Ychwanegu',btnModify:'Newid',btnUp:'Lan',btnDown:'Lawr',btnSetValue:'Gosod fel gwerth a ddewiswyd',btnDelete:'Dileu'},textarea:{title:'Priodweddau Ardal Testun',cols:'Colofnau',rows:'Rhesi'},textfield:{title:'Priodweddau Maes Testun',name:'Enw',value:'Gwerth',charWidth:'Lled Nod',maxChars:'Uchafswm y Nodau',type:'Math',typeText:'Testun',typePass:'Cyfrinair'},hidden:{title:'Priodweddau Maes Cudd',name:'Enw',value:'Gwerth'},image:{title:'Priodweddau Delwedd',titleButton:'Priodweddau Botwm Delwedd',menu:'Priodweddau Delwedd',infoTab:'Gwyb Delwedd',btnUpload:"Anfon i'r Gweinydd",upload:'lanlwytho',alt:'Testun Amgen',lockRatio:'Cloi Cymhareb',resetSize:'Ailosod Maint',border:'Ymyl',hSpace:'BwlchLl',vSpace:'BwlchF',alertUrl:'Rhowch URL y ddelwedd',linkTab:'Dolen',button2Img:"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?",img2Button:"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?",urlMissing:"URL tarddle'r ddelwedd ar goll.",validateBorder:"Rhaid i'r ymyl fod yn gyfanrif.",validateHSpace:"Rhaid i'r HSpace fod yn gyfanrif.",validateVSpace:"Rhaid i'r VSpace fod yn gyfanrif."},flash:{properties:'Priodweddau Flash',propertiesTab:'Priodweddau',title:'Priodweddau Flash',chkPlay:'AwtoChwarae',chkLoop:'Lwpio',chkMenu:'Galluogi Dewislen Flash',chkFull:'Caniatà u Sgrin Llawn',scale:'Graddfa',scaleAll:'Dangos pob',scaleNoBorder:'Dim Ymyl',scaleFit:'Ffit Union',access:'Mynediad Sgript',accessAlways:'Pob amser',accessSameDomain:"R'un parth",accessNever:'Byth',alignAbsBottom:'Gwaelod Abs',alignAbsMiddle:'Canol Abs',alignBaseline:'Baslinell',alignTextTop:'Testun Top',quality:'Ansawdd',qualityBest:'Gorau',qualityHigh:'Uchel',qualityAutoHigh:'Uchel Awto',qualityMedium:'Canolig',qualityAutoLow:'Isel Awto',qualityLow:'Isel',windowModeWindow:'Ffenestr',windowModeOpaque:'Afloyw',windowModeTransparent:'Tryloyw',windowMode:'Modd ffenestr',flashvars:'Newidynnau ar gyfer Flash',bgcolor:'Lliw cefndir',hSpace:'BwlchLl',vSpace:'BwlchF',validateSrc:'Ni all yr URL fod yn wag.',validateHSpace:"Rhaid i'r BwlchLl fod yn rhif.",validateVSpace:"Rhaid i'r BwlchF fod yn rhif."},spellCheck:{toolbar:'Gwirio Sillafu',title:'Gwirio Sillafu',notAvailable:"Nid yw'r gwasanaeth hwn ar gael yn bresennol.",errorLoading:'Error loading application service host: %s.',notInDic:"Nid i'w gael yn y geiriadur",changeTo:'Newid i',btnIgnore:'Anwybyddu Un',btnIgnoreAll:'Anwybyddu Pob',btnReplace:'Amnewid Un',btnReplaceAll:'Amnewid Pob',btnUndo:'Dadwneud',noSuggestions:'- Dim awgrymiadau -',progress:'Gwirio sillafu yn ar y gweill...',noMispell:'Gwirio sillafu wedi gorffen: Dim camsillaf.',noChanges:'Gwirio sillafu wedi gorffen: Dim newidiadau',oneChange:'Gwirio sillafu wedi gorffen: Newidiwyd 1 gair',manyChanges:'Gwirio sillafu wedi gorffen: Newidiwyd %1 gair',ieSpellDownload:'Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?'},smiley:{toolbar:'Gwenoglun',title:'Mewnosod Gwenoglun',options:'Opsiynau Gwenogluniau'},elementsPath:{eleLabel:'Llwybr elfennau',eleTitle:'Elfen %1'},numberedlist:'Mewnosod/Tynnu Rhestr Rhifol',bulletedlist:'Mewnosod/Tynnu Rhestr Bwled',indent:"Cynyddu'r Mewnoliad",outdent:"Lleihau'r Mewnoliad",justify:{left:"Alinio i'r Chwith",center:"Alinio i'r Canol",right:"Alinio i'r Dde",block:'Aliniad Bloc'},blockquote:'Dyfyniad bloc',clipboard:{title:'Gludo',cutError:"Nid yw gosodiadau diogelwch eich porwr yn caniatà u'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).",copyError:"Nid yw gosodiadau diogelwch eich porwr yn caniatà u'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).",pasteMsg:"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.",securityMsg:"Oherwydd gosodiadau diogelwch eich porwr, nid yw'r porwr yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.",pasteArea:'Ardal Gludo'},pastefromword:{confirmCleanup:"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?",toolbar:'Gludo o Word',title:'Gludo o Word',error:'Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol'},pasteText:{button:'Gludo fel testun plaen',title:'Gludo fel Testun Plaen'},templates:{button:'Templedi',title:'Templedi Cynnwys',options:'Opsiynau Templedi',insertOption:'Amnewid y cynnwys go iawn',selectPromptMsg:"Dewiswch dempled i'w agor yn y golygydd",emptyListMsg:"(Dim templedi wedi'u diffinio)"},showBlocks:'Dangos Blociau',stylesCombo:{label:'Arddulliau',panelTitle:'Arddulliau Fformatio',panelTitle1:'Arddulliau Bloc',panelTitle2:'Arddulliau Mewnol',panelTitle3:'Arddulliau Gwrthrych'},format:{label:'Fformat',panelTitle:'Fformat Paragraff',tag_p:'Normal',tag_pre:"Wedi'i Fformatio",tag_address:'Cyfeiriad',tag_h1:'Pennawd 1',tag_h2:'Pennawd 2',tag_h3:'Pennawd 3',tag_h4:'Pennawd 4',tag_h5:'Pennawd 5',tag_h6:'Pennawd 6',tag_div:'Normal (DIV)'},div:{title:'Creu Cynhwysydd Div',toolbar:'Creu Cynhwysydd Div',cssClassInputLabel:'Dosbarthiadau Ffeil Ddiwyg',styleSelectLabel:'Arddull',IdInputLabel:'Id',languageCodeInputLabel:' Cod Iaith',inlineStyleInputLabel:'Arddull Mewn Llinell',advisoryTitleInputLabel:'Teitl Cynghorol',langDirLabel:'Cyfeiriad yr Iaith',langDirLTRLabel:"Chwith i'r Dde (LTR)",langDirRTLLabel:"Dde i'r Chwith (RTL)",edit:'Golygu Div',remove:'Tynnu Div'},iframe:{title:'Priodweddau IFrame',toolbar:'IFrame',noUrl:'Rhowch fath URL yr iframe',scrolling:'Galluogi bariau sgrolio',border:'Dangos ymyl y ffrâm'},font:{label:'Ffont',voiceLabel:'Ffont',panelTitle:"Enw'r Ffont"},fontSize:{label:'Maint',voiceLabel:'Maint y Ffont',panelTitle:'Maint y Ffont'},colorButton:{textColorTitle:'Lliw Testun',bgColorTitle:'Lliw Cefndir',panelTitle:'Lliwiau',auto:'Awtomatig',more:'Mwy o Liwiau...'},colors:{'000':'Du',800000:'Marwn','8B4513':'Brown Cyfrwy','2F4F4F':'Llechen Tywyll','008080':'Corhwyad','000080':'Nefi','4B0082':'Indigo',696969:'Llwyd Pwl',B22222:'Bric Tân',A52A2A:'Brown',DAA520:'Rhoden Aur','006400':'Gwyrdd Tywyll','40E0D0':'Gwyrddlas','0000CD':'Glas Canolig',800080:'Porffor',808080:'Llwyd',F00:'Coch',FF8C00:'Oren Tywyll',FFD700:'Aur','008000':'Gwyrdd','0FF':'Cyan','00F':'Glas',EE82EE:'Fioled',A9A9A9:'Llwyd Tywyll',FFA07A:'Samwn Golau',FFA500:'Oren',FFFF00:'Melyn','00FF00':'Leim',AFEEEE:'Gwyrddlas Golau',ADD8E6:'Glas Golau',DDA0DD:'Eirinen',D3D3D3:'Llwyd Golau',FFF0F5:'Gwrid Lafant',FAEBD7:'Gwyn Hynafol',FFFFE0:'Melyn Golau',F0FFF0:'Melwn Gwyrdd Golau',F0FFFF:'Aswr',F0F8FF:'Glas Alys',E6E6FA:'Lafant',FFF:'Gwyn'},scayt:{title:"Gwirio'r Sillafu Wrth Deipio",opera_title:'Heb ei gynnal gan Opera',enable:'Galluogi SCAYT',disable:'Analluogi SCAYT',about:'Ynghylch SCAYT',toggle:'Togl SCAYT',options:'Opsiynau',langs:'Ieithoedd',moreSuggestions:'Awgrymiadau pellach',ignore:'Anwybyddu',ignoreAll:'Anwybyddu pob',addWord:'Ychwanegu Gair',emptyDic:"Ni ddylai enw'r geiriadur fod yn wag.",optionsTab:'Opsiynau',allCaps:'Anwybyddu Geiriau Nodau Uwch i Gyd',ignoreDomainNames:'Anwybyddu Enwau Parth',mixedCase:'Anwybyddu Geiriau â Chymysgedd Nodau Uwch ac Is',mixedWithDigits:'Anwybyddu Geiriau â Rhifau',languagesTab:'Ieithoedd',dictionariesTab:'Geiriaduron',dic_field_name:"Enw'r geiriadur",dic_create:'Creu',dic_restore:'Adfer',dic_delete:'Dileu',dic_rename:'Ailenwi',dic_info:"Ar y cychwyn, caiff y Geiriadur ei storio mewn Cwci. Er, mae terfyn ar faint cwcis. Pan fydd Gweiriadur Defnyddiwr yn tyfu tu hwnt i gyfyngiadau maint Cwci, caiff y geiriadur ei storio ar ein gweinydd ni. er mwyn storio eich geiriadur poersonol chi ar ein gweinydd, bydd angen i chi osod enw ar gyfer y geiriadur. Os oes geiriadur 'da chi ar ein gweinydd yn barod, teipiwch ei enw a chliciwch y botwm Adfer.",aboutTab:'Ynghylch'},about:{title:'Ynghylch CKEditor',dlgTitle:'Ynghylch CKEditor',help:'Gwirio $1 am gymorth.',userGuide:'Canllawiau Defnyddiwr CKEditor',moreInfo:"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:",copy:'Hawlfraint © $1. Cedwir pob hawl.'},maximize:'Mwyhau',minimize:'Lleihau',fakeobjects:{anchor:'Angor',flash:'Animeiddiant Flash',iframe:'IFrame',hiddenfield:'Maes Cudd',unknown:'Gwrthrych Anhysbys'},resize:'Llusgo i ailfeintio',colordialog:{title:'Dewis lliw',options:'Opsiynau Lliw',highlight:'Uwcholeuo',selected:'Dewiswyd',clear:'Clirio'},toolbarCollapse:"Cyfangu'r Bar Offer",toolbarExpand:"Ehangu'r Bar Offer",toolbarGroups:{document:'Dogfen',clipboard:'Clipfwrdd/Dadwneud',editing:'Golygu',forms:'Ffurflenni',basicstyles:'Arddulliau Sylfaenol',paragraph:'Paragraff',links:'Dolenni',insert:'Mewnosod',styles:'Arddulliau',colors:'Lliwiau',tools:'Offer'},bidi:{ltr:"Cyfeiriad testun o'r chwith i'r dde",rtl:"Cyfeiriad testun o'r dde i'r chwith"},docprops:{label:'Priodweddau Dogfen',title:'Priodweddau Dogfen',design:'Cynllunio',meta:'Tagiau Meta',chooseColor:'Dewis',other:'Arall...',docTitle:'Teitl y Dudalen',charset:'Amgodio Set Nodau',charsetOther:'Amgodio Set Nodau Arall',charsetASCII:'ASCII',charsetCE:'Ewropeaidd Canol',charsetCT:'Tsieinëeg Traddodiadol (Big5)',charsetCR:'Syrilig',charsetGR:'Groeg',charsetJP:'Siapanëeg',charsetKR:'Corëeg',charsetTR:'Tyrceg',charsetUN:'Unicode (UTF-8)',charsetWE:'Ewropeaidd Gorllewinol',docType:'Pennawd Math y Ddogfen',docTypeOther:'Pennawd Math y Ddogfen Arall',xhtmlDec:'Cynnwys Datganiadau XHTML',bgColor:'Lliw Cefndir',bgImage:'URL Delwedd Cefndir',bgFixed:'Cefndir Sefydlog (Ddim yn Sgrolio)',txtColor:'Lliw y Testun',margin:'Ffin y Dudalen',marginTop:'Brig',marginLeft:'Chwith',marginRight:'Dde',marginBottom:'Gwaelod',metaKeywords:'Allweddeiriau Indecsio Dogfen (gwahanu gyda choma)',metaDescription:'Disgrifiad y Ddogfen',metaAuthor:'Awdur',metaCopyright:'Hawlfraint',previewHtml:'<p>Dyma ychydig o <strong>destun sampl</strong>. Rydych chi\'n defnyddio <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/da.js b/lang/da.js new file mode 100644 index 0000000..58cf4b1 --- /dev/null +++ b/lang/da.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.da={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Kilde',newPage:'Ny side',save:'Gem',preview:'Vis eksempel',cut:'Klip',copy:'Kopiér',paste:'Indsæt',print:'Udskriv',underline:'Understreget',bold:'Fed',italic:'Kursiv',selectAll:'Vælg alt',removeFormat:'Fjern formatering',strike:'Gennemstreget',subscript:'Sænket skrift',superscript:'Hævet skrift',horizontalrule:'Indsæt vandret streg',pagebreak:'Indsæt sideskift',pagebreakAlt:'Page Break',unlink:'Fjern hyperlink',undo:'Fortryd',redo:'Annullér fortryd',common:{browseServer:'Gennemse...',url:'URL',protocol:'Protokol',upload:'Upload',uploadSubmit:'Upload',image:'Indsæt billede',flash:'Indsæt Flash',form:'Indsæt formular',checkbox:'Indsæt afkrydsningsfelt',radio:'Indsæt alternativknap',textField:'Indsæt tekstfelt',textarea:'Indsæt tekstboks',hiddenField:'Indsæt skjult felt',button:'Indsæt knap',select:'Indsæt liste',imageButton:'Indsæt billedknap',notSet:'<intet valgt>',id:'Id',name:'Navn',langDir:'Tekstretning',langDirLtr:'Fra venstre mod højre (LTR)',langDirRtl:'Fra højre mod venstre (RTL)',langCode:'Sprogkode',longDescr:'Udvidet beskrivelse',cssClass:'Typografiark (CSS)',advisoryTitle:'Titel',cssStyle:'Typografi (CSS)',ok:'OK',cancel:'Annullér',close:'Close',preview:'Preview',generalTab:'Generelt',advancedTab:'Avanceret',validateNumberFailed:'Værdien er ikke et tal.',confirmNewPage:'Alt indhold, der ikke er blevet gemt, vil gÃ¥ tabt. Er du sikker pÃ¥, at du vil indlæse en ny side?',confirmCancel:'Nogle af indstillingerne er blevet ændret. Er du sikker pÃ¥, at du vil lukke vinduet?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Bredde',height:'Højde',align:'Justering',alignLeft:'Venstre',alignRight:'Højre',alignCenter:'Centreret',alignTop:'Ãverst',alignMiddle:'Centreret',alignBottom:'Nederst',invalidHeight:'Højde skal være et tal.',invalidWidth:'Bredde skal være et tal.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, ikke tilgængelig</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Indsæt symbol',title:'Vælg symbol',options:'Special Character Options'},link:{toolbar:'Indsæt/redigér hyperlink',other:'<anden>',menu:'Redigér hyperlink',title:'Egenskaber for hyperlink',info:'Generelt',target:'MÃ¥l',upload:'Upload',advanced:'Avanceret',type:'Type',toUrl:'URL',toAnchor:'Bogmærke pÃ¥ denne side',toEmail:'E-mail',targetFrame:'<ramme>',targetPopup:'<popup vindue>',targetFrameName:'Destinationsvinduets navn',targetPopupName:'Popup vinduets navn',popupFeatures:'Egenskaber for popup',popupResizable:'Justérbar',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Værktøjslinje',popupMenuBar:'Menulinje',popupFullScreen:'Fuld skærm (IE)',popupScrollBars:'Scrollbar',popupDependent:'Koblet/dependent (Netscape)',popupLeft:'Position fra venstre',popupTop:'Position fra toppen',id:'Id',langDir:'Tekstretning',langDirLTR:'Fra venstre mod højre (LTR)',langDirRTL:'Fra højre mod venstre (RTL)',acccessKey:'Genvejstast',name:'Navn',langCode:'Tekstretning',tabIndex:'Tabulator indeks',advisoryTitle:'Titel',advisoryContentType:'Indholdstype',cssClasses:'Typografiark',charset:'Tegnsæt',styles:'Typografi',rel:'Relationship',selectAnchor:'Vælg et anker',anchorName:'Efter anker navn',anchorId:'Efter element Id',emailAddress:'E-mail adresse',emailSubject:'Emne',emailBody:'Besked',noAnchors:'(Ingen bogmærker i dokumentet)',noUrl:'Indtast hyperlink URL!',noEmail:'Indtast e-mail adresse!'},anchor:{toolbar:'Indsæt/redigér bogmærke',menu:'Egenskaber for bogmærke',title:'Egenskaber for bogmærke',name:'Bogmærke navn',errorName:'Indtast bogmærke navn',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Søg og erstat',find:'Søg',replace:'Erstat',findWhat:'Søg efter:',replaceWith:'Erstat med:',notFoundMsg:'Søgeteksten blev ikke fundet',matchCase:'Forskel pÃ¥ store og smÃ¥ bogstaver',matchWord:'Kun hele ord',matchCyclic:'Match cyklisk',replaceAll:'Erstat alle',replaceSuccessMsg:'%1 forekomst(er) erstattet.'},table:{toolbar:'Tabel',title:'Egenskaber for tabel',menu:'Egenskaber for tabel',deleteTable:'Slet tabel',rows:'Rækker',columns:'Kolonner',border:'Rammebredde',widthPx:'pixels',widthPc:'procent',widthUnit:'width unit',cellSpace:'Celleafstand',cellPad:'Cellemargen',caption:'Titel',summary:'Resumé',headers:'Header',headersNone:'Ingen',headersColumn:'Første kolonne',headersRow:'Første række',headersBoth:'Begge',invalidRows:'Antallet af rækker skal være større end 0.',invalidCols:'Antallet af kolonner skal være større end 0.',invalidBorder:'Rammetykkelse skal være et tal.',invalidWidth:'Tabelbredde skal være et tal.',invalidHeight:'Tabelhøjde skal være et tal.',invalidCellSpacing:'Celleafstand skal være et tal.',invalidCellPadding:'Cellemargen skal være et tal.',cell:{menu:'Celle',insertBefore:'Indsæt celle før',insertAfter:'Indsæt celle efter',deleteCell:'Slet celle',merge:'Flet celler',mergeRight:'Flet til højre',mergeDown:'Flet nedad',splitHorizontal:'Del celle vandret',splitVertical:'Del celle lodret',title:'Celleegenskaber',cellType:'Celletype',rowSpan:'Række span (rows span)',colSpan:'Kolonne span (columns span)',wordWrap:'Tekstombrydning',hAlign:'Vandret justering',vAlign:'Lodret justering',alignBaseline:'Grundlinje',bgColor:'Baggrundsfarve',borderColor:'Rammefarve',data:'Data',header:'Header',yes:'Ja',no:'Nej',invalidWidth:'Cellebredde skal være et tal.',invalidHeight:'Cellehøjde skal være et tal.',invalidRowSpan:'Række span skal være et heltal.',invalidColSpan:'Kolonne span skal være et heltal.',chooseColor:'Choose'},row:{menu:'Række',insertBefore:'Indsæt række før',insertAfter:'Indsæt række efter',deleteRow:'Slet række'},column:{menu:'Kolonne',insertBefore:'Indsæt kolonne før',insertAfter:'Indsæt kolonne efter',deleteColumn:'Slet kolonne'}},button:{title:'Egenskaber for knap',text:'Tekst',type:'Type',typeBtn:'Knap',typeSbm:'Send',typeRst:'Nulstil'},checkboxAndRadio:{checkboxTitle:'Egenskaber for afkrydsningsfelt',radioTitle:'Egenskaber for alternativknap',value:'Værdi',selected:'Valgt'},form:{title:'Egenskaber for formular',menu:'Egenskaber for formular',action:'Handling',method:'Metode',encoding:'Kodning (encoding)'},select:{title:'Egenskaber for liste',selectInfo:'Generelt',opAvail:'Valgmuligheder',value:'Værdi',size:'Størrelse',lines:'Linjer',chkMulti:'Tillad flere valg',opText:'Tekst',opValue:'Værdi',btnAdd:'Tilføj',btnModify:'Redigér',btnUp:'Op',btnDown:'Ned',btnSetValue:'Sæt som valgt',btnDelete:'Slet'},textarea:{title:'Egenskaber for tekstboks',cols:'Kolonner',rows:'Rækker'},textfield:{title:'Egenskaber for tekstfelt',name:'Navn',value:'Værdi',charWidth:'Bredde (tegn)',maxChars:'Max. antal tegn',type:'Type',typeText:'Tekst',typePass:'Adgangskode'},hidden:{title:'Egenskaber for skjult felt',name:'Navn',value:'Værdi'},image:{title:'Egenskaber for billede',titleButton:'Egenskaber for billedknap',menu:'Egenskaber for billede',infoTab:'Generelt',btnUpload:'Upload',upload:'Upload',alt:'Alternativ tekst',lockRatio:'LÃ¥s størrelsesforhold',resetSize:'Nulstil størrelse',border:'Ramme',hSpace:'Vandret margen',vSpace:'Lodret margen',alertUrl:'Indtast stien til billedet',linkTab:'Hyperlink',button2Img:'Vil du lave billedknappen om til et almindeligt billede?',img2Button:'Vil du lave billedet om til en billedknap?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Egenskaber for Flash',propertiesTab:'Egenskaber',title:'Egenskaber for Flash',chkPlay:'Automatisk afspilning',chkLoop:'Gentagelse',chkMenu:'Vis Flash menu',chkFull:'Tillad fuldskærm',scale:'Skalér',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Tilpas størrelse',access:'Script adgang',accessAlways:'Altid',accessSameDomain:'Samme domæne',accessNever:'Aldrig',alignAbsBottom:'Absolut nederst',alignAbsMiddle:'Absolut centreret',alignBaseline:'Grundlinje',alignTextTop:'Toppen af teksten',quality:'Kvalitet',qualityBest:'Bedste',qualityHigh:'Høj',qualityAutoHigh:'Auto høj',qualityMedium:'Medium',qualityAutoLow:'Auto lav',qualityLow:'Lav',windowModeWindow:'Vindue',windowModeOpaque:'Gennemsigtig (opaque)',windowModeTransparent:'Transparent',windowMode:'Vinduestilstand',flashvars:'Variabler for Flash',bgcolor:'Baggrundsfarve',hSpace:'Vandret margen',vSpace:'Lodret margen',validateSrc:'Indtast hyperlink URL!',validateHSpace:'Vandret margen skal være et tal.',validateVSpace:'Lodret margen skal være et tal.'},spellCheck:{toolbar:'Stavekontrol',title:'Stavekontrol',notAvailable:'Stavekontrol er desværre ikke tilgængelig.',errorLoading:'Fejl ved indlæsning af host: %s.',notInDic:'Ikke i ordbogen',changeTo:'Forslag',btnIgnore:'Ignorér',btnIgnoreAll:'Ignorér alle',btnReplace:'Erstat',btnReplaceAll:'Erstat alle',btnUndo:'Tilbage',noSuggestions:'(ingen forslag)',progress:'Stavekontrollen arbejder...',noMispell:'Stavekontrol færdig: Ingen fejl fundet',noChanges:'Stavekontrol færdig: Ingen ord ændret',oneChange:'Stavekontrol færdig: Et ord ændret',manyChanges:'Stavekontrol færdig: %1 ord ændret',ieSpellDownload:'Stavekontrol ikke installeret. Vil du installere den nu?'},smiley:{toolbar:'Smiley',title:'Vælg smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Talopstilling',bulletedlist:'Punktopstilling',indent:'Forøg indrykning',outdent:'Formindsk indrykning',justify:{left:'Venstrestillet',center:'Centreret',right:'Højrestillet',block:'Lige margener'},blockquote:'Blokcitat',clipboard:{title:'Indsæt',cutError:'Din browsers sikkerhedsindstillinger tillader ikke editoren at fÃ¥ automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).',copyError:'Din browsers sikkerhedsindstillinger tillader ikke editoren at fÃ¥ automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).',pasteMsg:'Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik pÃ¥ <STRONG>OK</STRONG>.',securityMsg:'Din browsers sikkerhedsindstillinger tillader ikke editoren at fÃ¥ automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?',toolbar:'Indsæt fra Word',title:'Indsæt fra Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Indsæt som ikke-formateret tekst',title:'Indsæt som ikke-formateret tekst'},templates:{button:'Skabeloner',title:'Indholdsskabeloner',options:'Template Options',insertOption:'Erstat det faktiske indhold',selectPromptMsg:'Vælg den skabelon, som skal Ã¥bnes i editoren (nuværende indhold vil blive overskrevet):',emptyListMsg:'(Der er ikke defineret nogen skabelon)'},showBlocks:'Vis afsnitsmærker',stylesCombo:{label:'Typografi',panelTitle:'Formatting Styles',panelTitle1:'Block typografi',panelTitle2:'Inline typografi',panelTitle3:'Object typografi'},format:{label:'Formatering',panelTitle:'Formatering',tag_p:'Normal',tag_pre:'Formateret',tag_address:'Adresse',tag_h1:'Overskrift 1',tag_h2:'Overskrift 2',tag_h3:'Overskrift 3',tag_h4:'Overskrift 4',tag_h5:'Overskrift 5',tag_h6:'Overskrift 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Skrifttype',voiceLabel:'Skrifttype',panelTitle:'Skrifttype'},fontSize:{label:'Skriftstørrelse',voiceLabel:'Skriftstørrelse',panelTitle:'Skriftstørrelse'},colorButton:{textColorTitle:'Tekstfarve',bgColorTitle:'Baggrundsfarve',panelTitle:'Colors',auto:'Automatisk',more:'Flere farver...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Stavekontrol mens du skriver',opera_title:'Not supported by Opera',enable:'Aktivér SCAYT',disable:'Deaktivér SCAYT',about:'Om SCAYT',toggle:'Skift/toggle SCAYT',options:'Indstillinger',langs:'Sprog',moreSuggestions:'Flere forslag',ignore:'Ignorér',ignoreAll:'Ignorér alle',addWord:'Tilføj ord',emptyDic:'Ordbogsnavn mÃ¥ ikke være tom.',optionsTab:'Indstillinger',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Sprog',dictionariesTab:'Ordbøger',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Om'},about:{title:'Om CKEditor',dlgTitle:'Om CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For informationer omkring licens, se venligst vores hjemmeside (pÃ¥ engelsk):',copy:'Copyright © $1. Alle rettigheder forbeholdes.'},maximize:'Maximér',minimize:'Minimize',fakeobjects:{anchor:'Anker',flash:'Flashanimation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Ukendt objekt'},resize:'Træk for at skalere',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Egenskaber for dokument',title:'Egenskaber for dokument',design:'Design',meta:'Meta Tags',chooseColor:'Choose',other:'<anden>',docTitle:'Sidetitel',charset:'Tegnsæt kode',charsetOther:'Anden tegnsæt kode',charsetASCII:'ASCII',charsetCE:'Centraleuropæisk',charsetCT:'Traditionel kinesisk (Big5)',charsetCR:'Kyrillisk',charsetGR:'Græsk',charsetJP:'Japansk',charsetKR:'Koreansk',charsetTR:'Tyrkisk',charsetUN:'Unicode (UTF-8)',charsetWE:'Vesteuropæisk',docType:'Dokumenttype kategori',docTypeOther:'Anden dokumenttype kategori',xhtmlDec:'Inkludere XHTML deklartion',bgColor:'Baggrundsfarve',bgImage:'Baggrundsbillede URL',bgFixed:'FastlÃ¥st baggrund',txtColor:'Tekstfarve',margin:'Sidemargen',marginTop:'Ãverst',marginLeft:'Venstre',marginRight:'Højre',marginBottom:'Nederst',metaKeywords:'Dokument index nøgleord (kommasepareret)',metaDescription:'Dokument beskrivelse',metaAuthor:'Forfatter',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/de.js b/lang/de.js new file mode 100644 index 0000000..cd96eb6 --- /dev/null +++ b/lang/de.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.de={dir:'ltr',editorTitle:'WYSIWYG-Editor, %1, drücken Sie ALT 0 für Hilfe.',toolbars:'Editor Symbolleisten',editor:'WYSIWYG-Editor',source:'Quellcode',newPage:'Neue Seite',save:'Speichern',preview:'Vorschau',cut:'Ausschneiden',copy:'Kopieren',paste:'Einfügen',print:'Drucken',underline:'Unterstrichen',bold:'Fett',italic:'Kursiv',selectAll:'Alles auswählen',removeFormat:'Formatierungen entfernen',strike:'Durchgestrichen',subscript:'Tiefgestellt',superscript:'Hochgestellt',horizontalrule:'Horizontale Linie einfügen',pagebreak:'Seitenumbruch einfügen',pagebreakAlt:'Seitenumbruch einfügen',unlink:'Link entfernen',undo:'Rückgängig',redo:'Wiederherstellen',common:{browseServer:'Server durchsuchen',url:'URL',protocol:'Protokoll',upload:'Hochladen',uploadSubmit:'Zum Server senden',image:'Bild',flash:'Flash',form:'Formular',checkbox:'Checkbox',radio:'Radiobutton',textField:'Textfeld einzeilig',textarea:'Textfeld mehrzeilig',hiddenField:'Verstecktes Feld',button:'Klickbutton',select:'Auswahlfeld',imageButton:'Bildbutton',notSet:'<nichts>',id:'ID',name:'Name',langDir:'Schreibrichtung',langDirLtr:'Links nach Rechts (LTR)',langDirRtl:'Rechts nach Links (RTL)',langCode:'Sprachenkürzel',longDescr:'Langform URL',cssClass:'Stylesheet Klasse',advisoryTitle:'Titel Beschreibung',cssStyle:'Style',ok:'OK',cancel:'Abbrechen',close:'SchlieÃen',preview:'Vorschau',generalTab:'Allgemein',advancedTab:'Erweitert',validateNumberFailed:'Dieser Wert ist keine Nummer.',confirmNewPage:'Alle nicht gespeicherten Ãnderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?',confirmCancel:'Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schlieÃen?',options:'Optionen',target:'Zielseite',targetNew:'Neues Fenster (_blank)',targetTop:'Oberstes Fenster (_top)',targetSelf:'Gleiches Fenster (_self)',targetParent:'Oberes Fenster (_parent)',langDirLTR:'Links nach Rechts (LNR)',langDirRTL:'Rechts nach Links (RNL)',styles:'Style',cssClasses:'Stylesheet Klasse',width:'Breite',height:'Höhe',align:'Ausrichtung',alignLeft:'Links',alignRight:'Rechts',alignCenter:'Zentriert',alignTop:'Oben',alignMiddle:'Mitte',alignBottom:'Unten',invalidHeight:'Höhe muss eine Zahl sein.',invalidWidth:'Breite muss eine Zahl sein.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, nicht verfügbar</span>'},contextmenu:{options:'Kontextmenü Optionen'},specialChar:{toolbar:'Sonderzeichen einfügen/editieren',title:'Sonderzeichen auswählen',options:'Sonderzeichen Optionen'},link:{toolbar:'Link einfügen/editieren',other:'<andere>',menu:'Link editieren',title:'Link',info:'Link-Info',target:'Zielseite',upload:'Hochladen',advanced:'Erweitert',type:'Link-Typ',toUrl:'URL',toAnchor:'Anker in dieser Seite',toEmail:'E-Mail',targetFrame:'<Frame>',targetPopup:'<Pop-up Fenster>',targetFrameName:'Ziel-Fenster-Name',targetPopupName:'Pop-up Fenster-Name',popupFeatures:'Pop-up Fenster-Eigenschaften',popupResizable:'GröÃe änderbar',popupStatusBar:'Statusleiste',popupLocationBar:'Adress-Leiste',popupToolbar:'Symbolleiste',popupMenuBar:'Menü-Leiste',popupFullScreen:'Vollbild (IE)',popupScrollBars:'Rollbalken',popupDependent:'Abhängig (Netscape)',popupLeft:'Linke Position',popupTop:'Obere Position',id:'Id',langDir:'Schreibrichtung',langDirLTR:'Links nach Rechts (LTR)',langDirRTL:'Rechts nach Links (RTL)',acccessKey:'Zugriffstaste',name:'Name',langCode:'Sprachenkürzel',tabIndex:'Tab-Index',advisoryTitle:'Titel Beschreibung',advisoryContentType:'Inhaltstyp',cssClasses:'Stylesheet Klasse',charset:'Ziel-Zeichensatz',styles:'Style',rel:'Beziehung',selectAnchor:'Anker auswählen',anchorName:'nach Anker Name',anchorId:'nach Element Id',emailAddress:'E-Mail Addresse',emailSubject:'Betreffzeile',emailBody:'Nachrichtentext',noAnchors:'(keine Anker im Dokument vorhanden)',noUrl:'Bitte geben Sie die Link-URL an',noEmail:'Bitte geben Sie e-Mail Adresse an'},anchor:{toolbar:'Anker einfügen/editieren',menu:'Anker-Eigenschaften',title:'Anker-Eigenschaften',name:'Anker Name',errorName:'Bitte geben Sie den Namen des Ankers ein',remove:'Anker entfernen'},list:{numberedTitle:'Nummerierte Listen-Eigenschaften',bulletedTitle:'Listen-Eigenschaften',type:'Typ',start:'Start',validateStartNumber:'List Startnummer muss eine ganze Zahl sein.',circle:'Ring',disc:'Kreis',square:'Quadrat',none:'Keine',notset:'<nicht gesetzt>',armenian:'Armenisch Nummerierung',georgian:'Georgisch Nummerierung (an, ban, gan, etc.)',lowerRoman:'Klein römisch (i, ii, iii, iv, v, etc.)',upperRoman:'Groà römisch (I, II, III, IV, V, etc.)',lowerAlpha:'Klein alpha (a, b, c, d, e, etc.)',upperAlpha:'Groà alpha (A, B, C, D, E, etc.)',lowerGreek:'Klein griechisch (alpha, beta, gamma, etc.)',decimal:'Dezimal (1, 2, 3, etc.)',decimalLeadingZero:'Dezimal mit führende Null (01, 02, 03, etc.)'},findAndReplace:{title:'Suchen und Ersetzen',find:'Suchen',replace:'Ersetzen',findWhat:'Suche nach:',replaceWith:'Ersetze mit:',notFoundMsg:'Der gesuchte Text wurde nicht gefunden.',matchCase:'GroÃ-Kleinschreibung beachten',matchWord:'Nur ganze Worte suchen',matchCyclic:'Zyklische Suche',replaceAll:'Alle ersetzen',replaceSuccessMsg:'%1 vorkommen ersetzt.'},table:{toolbar:'Tabelle',title:'Tabellen-Eigenschaften',menu:'Tabellen-Eigenschaften',deleteTable:'Tabelle löschen',rows:'Zeile',columns:'Spalte',border:'Rahmen',widthPx:'Pixel',widthPc:'%',widthUnit:'Breite Einheit',cellSpace:'Zellenabstand auÃen',cellPad:'Zellenabstand innen',caption:'Ãberschrift',summary:'Inhaltsübersicht',headers:'Kopfzeile',headersNone:'Keine',headersColumn:'Erste Spalte',headersRow:'Erste Zeile',headersBoth:'Beide',invalidRows:'Die Anzahl der Zeilen muà gröÃer als 0 sein.',invalidCols:'Die Anzahl der Spalten muà gröÃer als 0 sein..',invalidBorder:'Die Rahmenbreite muà eine Zahl sein.',invalidWidth:'Die Tabellenbreite muss eine Zahl sein.',invalidHeight:'Die Tabellenbreite muà eine Zahl sein.',invalidCellSpacing:'Der Zellenabstand auÃen muà eine positive Zahl sein.',invalidCellPadding:'Der Zellenabstand innen muà eine positive Zahl sein.',cell:{menu:'Zelle',insertBefore:'Zelle davor einfügen',insertAfter:'Zelle danach einfügen',deleteCell:'Zelle löschen',merge:'Zellen verbinden',mergeRight:'Nach rechts verbinden',mergeDown:'Nach unten verbinden',splitHorizontal:'Zelle horizontal teilen',splitVertical:'Zelle vertikal teilen',title:'Zellen-Eigenschaften',cellType:'Zellart',rowSpan:'Anzahl Zeilen verbinden',colSpan:'Anzahl Spalten verbinden',wordWrap:'Zeilenumbruch',hAlign:'Horizontale Ausrichtung',vAlign:'Vertikale Ausrichtung',alignBaseline:'Grundlinie',bgColor:'Hintergrundfarbe',borderColor:'Rahmenfarbe',data:'Daten',header:'Ãberschrift',yes:'Ja',no:'Nein',invalidWidth:'Zellenbreite muà eine Zahl sein.',invalidHeight:'Zellenhöhe muà eine Zahl sein.',invalidRowSpan:'"Anzahl Zeilen verbinden" muss eine Ganzzahl sein.',invalidColSpan:'"Anzahl Spalten verbinden" muss eine Ganzzahl sein.',chooseColor:'Wählen'},row:{menu:'Zeile',insertBefore:'Zeile oberhalb einfügen',insertAfter:'Zeile unterhalb einfügen',deleteRow:'Zeile entfernen'},column:{menu:'Spalte',insertBefore:'Spalte links davor einfügen',insertAfter:'Spalte rechts danach einfügen',deleteColumn:'Spalte löschen'}},button:{title:'Button-Eigenschaften',text:'Text (Wert)',type:'Typ',typeBtn:'Button',typeSbm:'Absenden',typeRst:'Zurücksetzen'},checkboxAndRadio:{checkboxTitle:'Checkbox-Eigenschaften',radioTitle:'Optionsfeld-Eigenschaften',value:'Wert',selected:'ausgewählt'},form:{title:'Formular-Eigenschaften',menu:'Formular-Eigenschaften',action:'Action',method:'Method',encoding:'Zeichenkodierung'},select:{title:'Auswahlfeld-Eigenschaften',selectInfo:'Info',opAvail:'Mögliche Optionen',value:'Wert',size:'GröÃe',lines:'Linien',chkMulti:'Erlaube Mehrfachauswahl',opText:'Text',opValue:'Wert',btnAdd:'Hinzufügen',btnModify:'Ãndern',btnUp:'Hoch',btnDown:'Runter',btnSetValue:'Setze als Standardwert',btnDelete:'Entfernen'},textarea:{title:'Textfeld (mehrzeilig) Eigenschaften',cols:'Spalten',rows:'Reihen'},textfield:{title:'Textfeld (einzeilig) Eigenschaften',name:'Name',value:'Wert',charWidth:'Zeichenbreite',maxChars:'Max. Zeichen',type:'Typ',typeText:'Text',typePass:'Passwort'},hidden:{title:'Verstecktes Feld-Eigenschaften',name:'Name',value:'Wert'},image:{title:'Bild-Eigenschaften',titleButton:'Bildbutton-Eigenschaften',menu:'Bild-Eigenschaften',infoTab:'Bild-Info',btnUpload:'Zum Server senden',upload:'Hochladen',alt:'Alternativer Text',lockRatio:'GröÃenverhältnis beibehalten',resetSize:'GröÃe zurücksetzen',border:'Rahmen',hSpace:'Horizontal-Abstand',vSpace:'Vertikal-Abstand',alertUrl:'Bitte geben Sie die Bild-URL an',linkTab:'Link',button2Img:'Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?',img2Button:'Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?',urlMissing:'Imagequelle URL fehlt.',validateBorder:'Rahmen muà eine ganze Zahl sein.',validateHSpace:'Horizontal-Abstand muà eine ganze Zahl sein.',validateVSpace:'Vertikal-Abstand muà eine ganze Zahl sein.'},flash:{properties:'Flash-Eigenschaften',propertiesTab:'Eigenschaften',title:'Flash-Eigenschaften',chkPlay:'Automatisch Abspielen',chkLoop:'Endlosschleife',chkMenu:'Flash-Menü aktivieren',chkFull:'Vollbildmodus erlauben',scale:'Skalierung',scaleAll:'Alles anzeigen',scaleNoBorder:'Ohne Rand',scaleFit:'Passgenau',access:'Skript Zugang',accessAlways:'Immer',accessSameDomain:'Gleiche Domain',accessNever:'Nie',alignAbsBottom:'Abs Unten',alignAbsMiddle:'Abs Mitte',alignBaseline:'Baseline',alignTextTop:'Text Oben',quality:'Qualität',qualityBest:'Beste',qualityHigh:'Hoch',qualityAutoHigh:'Auto Hoch',qualityMedium:'Medium',qualityAutoLow:'Auto Niedrig',qualityLow:'Niedrig',windowModeWindow:'Fenster',windowModeOpaque:'Deckend',windowModeTransparent:'Transparent',windowMode:'Fenster Modus',flashvars:'Variablen für Flash',bgcolor:'Hintergrundfarbe',hSpace:'Horizontal-Abstand',vSpace:'Vertikal-Abstand',validateSrc:'Bitte geben Sie die Link-URL an',validateHSpace:'HSpace muss eine Zahl sein.',validateVSpace:'VSpace muss eine Zahl sein.'},spellCheck:{toolbar:'Rechtschreibprüfung',title:'Rechtschreibprüfung',notAvailable:'Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.',errorLoading:'Fehler beim laden des Dienstanbieters: %s.',notInDic:'Nicht im Wörterbuch',changeTo:'Ãndern in',btnIgnore:'Ignorieren',btnIgnoreAll:'Alle Ignorieren',btnReplace:'Ersetzen',btnReplaceAll:'Alle Ersetzen',btnUndo:'Rückgängig',noSuggestions:' - keine Vorschläge - ',progress:'Rechtschreibprüfung läuft...',noMispell:'Rechtschreibprüfung abgeschlossen - keine Fehler gefunden',noChanges:'Rechtschreibprüfung abgeschlossen - keine Worte geändert',oneChange:'Rechtschreibprüfung abgeschlossen - ein Wort geändert',manyChanges:'Rechtschreibprüfung abgeschlossen - %1 Wörter geändert',ieSpellDownload:'Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?'},smiley:{toolbar:'Smiley',title:'Smiley auswählen',options:'Smiley Optionen'},elementsPath:{eleLabel:'Elements Pfad',eleTitle:'%1 Element'},numberedlist:'Nummerierte Liste',bulletedlist:'Liste',indent:'Einzug erhöhen',outdent:'Einzug verringern',justify:{left:'Linksbündig',center:'Zentriert',right:'Rechtsbündig',block:'Blocksatz'},blockquote:'Zitatblock',clipboard:{title:'Einfügen',cutError:'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).',copyError:'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).',pasteMsg:'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.',securityMsg:'Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.',pasteArea:'Einfügebereich'},pastefromword:{confirmCleanup:'Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?',toolbar:'Aus MS-Word einfügen',title:'Aus MS-Word einfügen',error:'Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen'},pasteText:{button:'Als Text einfügen',title:'Als Text einfügen'},templates:{button:'Vorlagen',title:'Vorlagen',options:'Vorlagen Optionen',insertOption:'Aktuellen Inhalt ersetzen',selectPromptMsg:'Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):',emptyListMsg:'(keine Vorlagen definiert)'},showBlocks:'Blöcke anzeigen',stylesCombo:{label:'Stil',panelTitle:'Formatierungenstil',panelTitle1:'Block Stilart',panelTitle2:'Inline Stilart',panelTitle3:'Objekt Stilart'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatiert',tag_address:'Addresse',tag_h1:'Ãberschrift 1',tag_h2:'Ãberschrift 2',tag_h3:'Ãberschrift 3',tag_h4:'Ãberschrift 4',tag_h5:'Ãberschrift 5',tag_h6:'Ãberschrift 6',tag_div:'Normal (DIV)'},div:{title:'Div Container erzeugen',toolbar:'Div Container erzeugen',cssClassInputLabel:'Stylesheet Klasse',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:'Sprachenkürzel',inlineStyleInputLabel:'Inline Stil',advisoryTitleInputLabel:'Tooltip',langDirLabel:'Sprache Richtung',langDirLTRLabel:'Links nach Rechs (LTR)',langDirRTLLabel:'Rechs nach Links (RTL)',edit:'Div bearbeiten',remove:'Div entfernen'},iframe:{title:'IFrame-Eigenschaften',toolbar:'IFrame',noUrl:'Bitte geben Sie die IFrame-URL an',scrolling:'Rollbalken anzeigen',border:'Rahmen anzeigen'},font:{label:'Schriftart',voiceLabel:'Schriftart',panelTitle:'Schriftart'},fontSize:{label:'GröÃe',voiceLabel:'SchrifgröÃe',panelTitle:'GröÃe'},colorButton:{textColorTitle:'Textfarbe',bgColorTitle:'Hintergrundfarbe',panelTitle:'Farben',auto:'Automatisch',more:'Weitere Farben...'},colors:{'000':'Schwarz',800000:'Kastanienbraun','8B4513':'Braun','2F4F4F':'Dunkles Schiefergrau','008080':'Blaugrün','000080':'Navy','4B0082':'Indigo',696969:'Dunkelgrau',B22222:'Ziegelrot',A52A2A:'Braun',DAA520:'Goldgelb','006400':'Dunkelgrün','40E0D0':'Türkis','0000CD':'Medium Blau',800080:'Lila',808080:'Grau',F00:'Rot',FF8C00:'Dunkelorange',FFD700:'Gold','008000':'Grün','0FF':'Cyan','00F':'Blau',EE82EE:'Hellviolett',A9A9A9:'Dunkelgrau',FFA07A:'Helles Lachsrosa',FFA500:'Orange',FFFF00:'Gelb','00FF00':'Lime',AFEEEE:'BlaÃ-Türkis',ADD8E6:'Hellblau',DDA0DD:'Pflaumenblau',D3D3D3:'Hellgrau',FFF0F5:'Lavendel',FAEBD7:'Antik WeiÃ',FFFFE0:'Hellgelb',F0FFF0:'Honigtau',F0FFFF:'Azurblau',F0F8FF:'Alice Blau',E6E6FA:'Lavendel',FFF:'WeiÃ'},scayt:{title:'Rechtschreibprüfung während der Texteingabe (SCAYT)',opera_title:'Nicht von Opera unterstützt',enable:'SCAYT einschalten',disable:'SCAYT ausschalten',about:'Ãber SCAYT',toggle:'SCAYT umschalten',options:'Optionen',langs:'Sprachen',moreSuggestions:'Mehr Vorschläge',ignore:'Ignorieren',ignoreAll:'Alle ignorieren',addWord:'Wort hinzufügen',emptyDic:'Wörterbuchname sollte leer sein.',optionsTab:'Optionen',allCaps:'Groà geschriebenen Wörter ignorieren',ignoreDomainNames:'Domain-Namen ignorieren',mixedCase:'Wörter mit gemischte Setzkasten ignorieren',mixedWithDigits:'Wörter mit Zahlen ignorieren',languagesTab:'Sprachen',dictionariesTab:'Wörterbücher',dic_field_name:'Wörterbuchname',dic_create:'Erzeugen',dic_restore:'Wiederherstellen',dic_delete:'Löschen',dic_rename:'Umbenennen',dic_info:'Anfangs wird das Benutzerwörterbuch in einem Cookie gespeichert. Allerdings sind Cookies in der GröÃe begrenzt. Wenn das Benutzerwörterbuch bis zu einem Punkt wächst, wo es nicht mehr in einem Cookie gespeichert werden kann, wird das Benutzerwörterbuch auf dem Server gespeichert. Um Ihr persönliches Wörterbuch auf dem Server zu speichern, müssen Sie einen Namen für das Wörterbuch angeben. Falls Sie schon ein gespeicherte Wörterbuch haben, geben Sie bitte dessen Namen ein und klicken Sie auf die Schaltfläche Wiederherstellen.',aboutTab:'Ãber'},about:{title:'Ãber CKEditor',dlgTitle:'Ãber CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:',copy:'Copyright © $1. Alle Rechte vorbehalten.'},maximize:'Maximieren',minimize:'Minimieren',fakeobjects:{anchor:'Anker',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Verstecktes Feld',unknown:'Unbekanntes Objekt'},resize:'Zum VergröÃern ziehen',colordialog:{title:'Farbe wählen',options:'Farbeoptionen',highlight:'Hervorheben',selected:'Ausgewählte Farbe',clear:'Entfernen'},toolbarCollapse:'Symbolleiste einklappen',toolbarExpand:'Symbolleiste ausklappen',toolbarGroups:{document:'Dokument',clipboard:'Zwischenablage/Rückgängig',editing:'Editieren',forms:'Formularen',basicstyles:'Grundstile',paragraph:'Absatz',links:'Links',insert:'Einfügen',styles:'Stile',colors:'Farben',tools:'Werkzeuge'},bidi:{ltr:'Leserichtung von Links nach Rechts',rtl:'Leserichtung von Rechts nach Links'},docprops:{label:'Dokument-Eigenschaften',title:'Dokument-Eigenschaften',design:'Design',meta:'Metadaten',chooseColor:'Wählen',other:'<andere>',docTitle:'Seitentitel',charset:'Zeichenkodierung',charsetOther:'Andere Zeichenkodierung',charsetASCII:'ASCII',charsetCE:'Zentraleuropäisch',charsetCT:'traditionell Chinesisch (Big5)',charsetCR:'Kyrillisch',charsetGR:'Griechisch',charsetJP:'Japanisch',charsetKR:'Koreanisch',charsetTR:'Türkisch',charsetUN:'Unicode (UTF-8)',charsetWE:'Westeuropäisch',docType:'Dokumententyp',docTypeOther:'Anderer Dokumententyp',xhtmlDec:'Beziehe XHTML Deklarationen ein',bgColor:'Hintergrundfarbe',bgImage:'Hintergrundbild URL',bgFixed:'feststehender Hintergrund',txtColor:'Textfarbe',margin:'Seitenränder',marginTop:'Oben',marginLeft:'Links',marginRight:'Rechts',marginBottom:'Unten',metaKeywords:'Schlüsselwörter (durch Komma getrennt)',metaDescription:'Dokument-Beschreibung',metaAuthor:'Autor',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/el.js b/lang/el.js new file mode 100644 index 0000000..590cd20 --- /dev/null +++ b/lang/el.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.el={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'HTML κÏδικαÏ',newPage:'ÎÎα Σελίδα',save:'ÎÏÎ¿Î¸Î®ÎºÎµÏ Ïη',preview:'Î ÏοεÏιÏκÏÏιÏη',cut:'ÎÏοκοÏή',copy:'ÎνÏιγÏαÏή',paste:'ÎÏικÏλληÏη',print:'ÎκÏÏÏÏÏη',underline:'Î¥ÏογÏάμμιÏη',bold:'ÎνÏονα',italic:'Πλάγια',selectAll:'ÎÏιλογή ÏλÏν',removeFormat:'ÎÏαίÏεÏη ÎοÏÏοÏοίηÏηÏ',strike:'ÎιαγÏάμμιÏη',subscript:'ÎείκÏηÏ',superscript:'ÎκθÎÏηÏ',horizontalrule:'ÎιÏαγÏγή ÎÏιζÏνÏÎ¹Î±Ï ÎÏαμμήÏ',pagebreak:'ÎιÏαγÏγή ÏÎÎ»Î¿Ï Ï ÏελίδαÏ',pagebreakAlt:'Page Break',unlink:'ÎÏαίÏεÏη Î£Ï Î½Î´ÎÏÎ¼Î¿Ï (Link)',undo:'ÎναίÏεÏη',redo:'ÎÏαναÏοÏά',common:{browseServer:'ÎξεÏεÏνηÏη διακομιÏÏή',url:'URL',protocol:'Î ÏοÏÏκολο',upload:'ÎÏοÏÏολή',uploadSubmit:'ÎÏοÏÏολή ÏÏον ÎιακομιÏÏή',image:'ÎικÏνα',flash:'ÎιÏαγÏγή Flash',form:'ΦÏÏμα',checkbox:'ÎÎ¿Ï Ïί εÏιλογήÏ',radio:'ÎÎ¿Ï Î¼Ïί Radio',textField:'Πεδίο κειμÎÎ½Î¿Ï ',textarea:'ΠεÏιοÏή κειμÎÎ½Î¿Ï ',hiddenField:'ÎÏÏ ÏÏ Ïεδίο',button:'ÎÎ¿Ï Î¼Ïί',select:'Πεδίο εÏιλογήÏ',imageButton:'ÎÎ¿Ï Î¼Ïί εικÏναÏ',notSet:'<ÏÏÏίÏ>',id:'Id',name:'Îνομα',langDir:'ÎαÏεÏÎ¸Ï Î½Ïη κειμÎÎ½Î¿Ï ',langDirLtr:'ÎÏιÏÏεÏά ÏÏÎ¿Ï Îεξιά (LTR)',langDirRtl:'Îεξιά ÏÏÎ¿Ï ÎÏιÏÏεÏά (RTL)',langCode:'ÎÏδικÏÏ ÎλÏÏÏαÏ',longDescr:'ÎÎ½Î±Î»Ï Ïική ÏεÏιγÏαÏή URL',cssClass:'Stylesheet Classes',advisoryTitle:'Î£Ï Î¼Î²Î¿Ï Î»ÎµÏ ÏικÏÏ ÏίÏλοÏ',cssStyle:'ΣÏÏλ',ok:'OK',cancel:'ÎκÏÏÏÏη',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Îια ÏÏοÏÏÏημÎÎ½Î¿Ï Ï',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'ΠλάÏοÏ',height:'ÎÏοÏ',align:'ÎÏ Î¸Ï Î³ÏάμμιÏη (Align)',alignLeft:'ÎÏιÏÏεÏά',alignRight:'Îεξιά (Right)',alignCenter:'ÎÎνÏÏο',alignTop:'Î Î¬Î½Ï (Top)',alignMiddle:'ÎÎÏη (Middle)',alignBottom:'ÎάÏÏ (Bottom)',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'ÎιÏαγÏγή ÎÎ¹Î´Î¹ÎºÎ¿Ï Î£Ï Î¼Î²ÏÎ»Î¿Ï ',title:'ÎÏιλÎξÏε Îνα ÎÎ¹Î´Î¹ÎºÏ Î£Ïμβολο',options:'Special Character Options'},link:{toolbar:'ÎιÏαγÏγή/ÎεÏαβολή Î£Ï Î½Î´ÎÏÎ¼Î¿Ï (Link)',other:'<άλλοÏ>',menu:'ÎεÏαβολή Î£Ï Î½Î´ÎÏÎ¼Î¿Ï (Link)',title:'ΣÏνδεÏÎ¼Î¿Ï (Link)',info:'Link',target:'ΠαÏÎ¬Î¸Ï Ïο ΣÏÏÏÎ¿Ï (Target)',upload:'ÎÏοÏÏολή',advanced:'Îια ÏÏοÏÏÏημÎÎ½Î¿Ï Ï',type:'ΤÏÏÎ¿Ï ÏÏ Î½Î´ÎÏÎ¼Î¿Ï (Link)',toUrl:'URL',toAnchor:'ÎÎ³ÎºÏ Ïα Ïε Î±Ï Ïή Ïη Ïελίδα',toEmail:'E-Mail',targetFrame:'<ÏλαίÏιο>',targetPopup:'<ÏαÏÎ¬Î¸Ï Ïο popup>',targetFrameName:'Îνομα ÏλαιÏÎ¯Î¿Ï ÏÏÏÏÎ¿Ï ',targetPopupName:'Îνομα Popup Window',popupFeatures:'ÎÏιλογÎÏ Popup Window',popupResizable:'Resizable',popupStatusBar:'ÎÏάÏα Status',popupLocationBar:'ÎÏάÏα ΤοÏοθεÏίαÏ',popupToolbar:'ÎÏάÏα ÎÏγαλείÏν',popupMenuBar:'ÎÏάÏα Menu',popupFullScreen:'ÎλÏκληÏη η ÎθÏνη (IE)',popupScrollBars:'ÎÏάÏÎµÏ ÎÏλιÏηÏ',popupDependent:'Dependent (Netscape)',popupLeft:'ΤοÏοθεÏία ÎÏιÏÏεÏÎ®Ï ÎκÏηÏ',popupTop:'ΤοÏοθεÏία Î Î¬Î½Ï ÎκÏηÏ',id:'Id',langDir:'ÎαÏεÏÎ¸Ï Î½Ïη κειμÎÎ½Î¿Ï ',langDirLTR:'ÎÏιÏÏεÏά ÏÏÎ¿Ï Îεξιά (LTR)',langDirRTL:'Îεξιά ÏÏÎ¿Ï ÎÏιÏÏεÏά (RTL)',acccessKey:'Î£Ï Î½ÏÏÎ¼ÎµÏ Ïη (Access Key)',name:'Îνομα',langCode:'ÎαÏεÏÎ¸Ï Î½Ïη κειμÎÎ½Î¿Ï ',tabIndex:'Tab Index',advisoryTitle:'Î£Ï Î¼Î²Î¿Ï Î»ÎµÏ ÏικÏÏ ÏίÏλοÏ',advisoryContentType:'Î£Ï Î¼Î²Î¿Ï Î»ÎµÏ ÏικÏÏ ÏίÏÎ»Î¿Ï ÏεÏιεÏομÎÎ½Î¿Ï ',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'ΣÏÏλ',rel:'Relationship',selectAnchor:'ÎÏιλÎξÏε μια Î¬Î³ÎºÏ Ïα',anchorName:'ÎάÏει ÏÎ¿Ï ÎνÏμαÏÎ¿Ï (Name) ÏÎ·Ï Î¬Î³ÎºÏ ÏαÏ',anchorId:'ÎάÏει ÏÎ¿Ï Element Id',emailAddress:'ÎιεÏÎ¸Ï Î½Ïη ÎλεκÏÏÎ¿Î½Î¹ÎºÎ¿Ï Î¤Î±ÏÏ Î´ÏÎ¿Î¼ÎµÎ¯Î¿Ï ',emailSubject:'ÎÎμα ÎηνÏμαÏοÏ',emailBody:'Îείμενο ÎηνÏμαÏοÏ',noAnchors:'(Îεν Ï ÏάÏÏÎ¿Ï Î½ Î¬Î³ÎºÏ ÏÎµÏ ÏÏο κείμενο)',noUrl:'ÎιÏάγεÏε Ïην ÏοÏοθεÏία (URL) ÏÎ¿Ï Ï ÏεÏÏÏ Î½Î´ÎÏÎ¼Î¿Ï (Link)',noEmail:'ÎιÏάγεÏε Ïην διεÏÎ¸Ï Î½Ïη ηλεκÏÏÎ¿Î½Î¹ÎºÎ¿Ï ÏαÏÏ Î´ÏÎ¿Î¼ÎµÎ¯Î¿Ï '},anchor:{toolbar:'ÎιÏαγÏγή/εÏεξεÏγαÏία Anchor',menu:'ÎδιÏÏηÏÎµÏ Î¬Î³ÎºÏ ÏαÏ',title:'ÎδιÏÏηÏÎµÏ Î¬Î³ÎºÏ ÏαÏ',name:'Îνομα Î¬Î³ÎºÏ ÏαÏ',errorName:'ΠαÏακαλοÏμε ειÏάγεÏε Ïνομα Î¬Î³ÎºÏ ÏαÏ',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'ÎναζήÏηÏη',replace:'ÎνÏικαÏάÏÏαÏη',findWhat:'ÎναζήÏηÏη:',replaceWith:'ÎνÏικαÏάÏÏαÏη με:',notFoundMsg:'Το κείμενο δεν βÏÎθηκε.',matchCase:'ÎλεγÏÎ¿Ï ÏεζÏν/κεÏαλαίÏν',matchWord:'ÎÏÏεÏη ÏλήÏÎ¿Ï Ï Î»ÎξηÏ',matchCyclic:'Match cyclic',replaceAll:'ÎνÏικαÏάÏÏαÏη ÎλÏν',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'ΠίνακαÏ',title:'ÎδιÏÏηÏÎµÏ Î Î¯Î½Î±ÎºÎ±',menu:'ÎδιÏÏηÏÎµÏ Î Î¯Î½Î±ÎºÎ±',deleteTable:'ÎιαγÏαÏή Ïίνακα',rows:'ÎÏαμμÎÏ',columns:'ÎολÏνεÏ',border:'ÎÎÎ³ÎµÎ¸Î¿Ï Î ÎµÏιθÏÏÎ¯Î¿Ï ',widthPx:'pixels',widthPc:'%',widthUnit:'width unit',cellSpace:'ÎÏÏÏÏαÏη κελιÏν',cellPad:'ÎÎμιÏμα κελιÏν',caption:'Î¥ÏÎÏÏιÏλοÏ',summary:'ΠεÏίληÏη',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Îελί',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'ÎιαγÏαÏή ÎελιÏν',merge:'ÎνοÏοίηÏη ÎελιÏν',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'ΣειÏά',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'ÎιαγÏαÏή ÎÏαμμÏν'},column:{menu:'ΣÏήλη',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'ÎιαγÏαÏή ÎολÏνÏν'}},button:{title:'ÎδιÏÏηÏÎµÏ ÎºÎ¿Ï Î¼ÏιοÏ',text:'Îείμενο (Τιμή)',type:'ΤÏÏοÏ',typeBtn:'ÎÎ¿Ï Î¼Ïί',typeSbm:'ÎαÏαÏÏÏηÏη',typeRst:'ÎÏαναÏοÏά'},checkboxAndRadio:{checkboxTitle:'ÎδιÏÏηÏÎµÏ ÎºÎ¿Ï Î¼ÏÎ¹Î¿Ï ÎµÏιλογήÏ',radioTitle:'ÎδιÏÏηÏÎµÏ ÎºÎ¿Ï Î¼ÏÎ¹Î¿Ï radio',value:'Τιμή',selected:'ÎÏιλεγμÎνο'},form:{title:'ÎδιÏÏηÏÎµÏ ÏÏÏμαÏ',menu:'ÎδιÏÏηÏÎµÏ ÏÏÏμαÏ',action:'ÎÏάÏη',method:'ÎάθοδοÏ',encoding:'Encoding'},select:{title:'ÎδιÏÏηÏÎµÏ ÏÎµÎ´Î¯Î¿Ï ÎµÏιλογήÏ',selectInfo:'ΠληÏοÏοÏίεÏ',opAvail:'ÎιαθÎÏÎ¹Î¼ÎµÏ ÎµÏιλογÎÏ',value:'Τιμή',size:'ÎÎγεθοÏ',lines:'γÏαμμÎÏ',chkMulti:'ΠολλαÏλÎÏ ÎµÏιλογÎÏ',opText:'Îείμενο',opValue:'Τιμή',btnAdd:'Î ÏοÏθήκη',btnModify:'Îλλαγή',btnUp:'ΠάνÏ',btnDown:'ÎάÏÏ',btnSetValue:'Î ÏοεÏιλεγμÎνη εÏιλογή',btnDelete:'ÎιαγÏαÏή'},textarea:{title:'ÎδιÏÏηÏÎµÏ ÏεÏιοÏÎ®Ï ÎºÎµÎ¹Î¼ÎÎ½Î¿Ï ',cols:'ΣÏήλεÏ',rows:'ΣειÏÎÏ'},textfield:{title:'ÎδιÏÏηÏÎµÏ ÏÎµÎ´Î¯Î¿Ï ÎºÎµÎ¹Î¼ÎÎ½Î¿Ï ',name:'Îνομα',value:'Τιμή',charWidth:'ÎÎ®ÎºÎ¿Ï ÏαÏακÏήÏÏν',maxChars:'ÎÎγιÏÏοι ÏαÏακÏήÏεÏ',type:'ΤÏÏοÏ',typeText:'Îείμενο',typePass:'ÎÏδικÏÏ'},hidden:{title:'ÎδιÏÏηÏÎµÏ ÎºÏÏ ÏÎ¿Ï ÏÎµÎ´Î¯Î¿Ï ',name:'Îνομα',value:'Τιμή'},image:{title:'ÎδιÏÏηÏÎµÏ ÎικÏναÏ',titleButton:'ÎδιÏÏηÏÎµÏ ÎºÎ¿Ï Î¼ÏÎ¹Î¿Ï ÎµÎ¹ÎºÏναÏ',menu:'ÎδιÏÏηÏÎµÏ ÎικÏναÏ',infoTab:'ΠληÏοÏοÏÎ¯ÎµÏ ÎικÏναÏ',btnUpload:'ÎÏοÏÏολή ÏÏον ÎιακομιÏÏή',upload:'ÎÏοÏÏολή',alt:'ÎναλλακÏÎ¹ÎºÏ Îείμενο (ALT)',lockRatio:'ÎλείδÏμα ÎναλογίαÏ',resetSize:'ÎÏαναÏοÏά ÎÏÏÎ¹ÎºÎ¿Ï ÎεγÎÎ¸Î¿Ï Ï',border:'ΠεÏιθÏÏιο',hSpace:'ÎÏιζÏνÏÎ¹Î¿Ï Î§ÏÏÎ¿Ï (HSpace)',vSpace:'ÎάθεÏÎ¿Ï Î§ÏÏÎ¿Ï (VSpace)',alertUrl:'ÎιÏάγεÏε Ïην ÏοÏοθεÏία (URL) ÏÎ·Ï ÎµÎ¹ÎºÏναÏ',linkTab:'ΣÏνδεÏμοÏ',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ÎδιÏÏηÏÎµÏ Flash',propertiesTab:'Properties',title:'ÎδιÏÏηÏÎµÏ flash',chkPlay:'ÎÏ ÏÏμαÏη ÎναÏξη',chkLoop:'ÎÏανάληÏη',chkMenu:'ÎνεÏγοÏοίηÏη Flash Menu',chkFull:'Allow Fullscreen',scale:'Îλίμακα',scaleAll:'ÎμÏάνιÏη ÏλÏν',scaleNoBorder:'ΧÏÏÎ¯Ï ÏÏια',scaleFit:'ÎκÏÎ¹Î²Î®Ï ÎµÏαÏμογή',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'ÎÏÏÎ»Ï Ïα ÎάÏÏ (Abs Bottom)',alignAbsMiddle:'ÎÏÏÎ»Ï Ïα ÏÏη ÎÎÏη (Abs Middle)',alignBaseline:'ÎÏαμμή ÎάÏÎ·Ï (Baseline)',alignTextTop:'ÎοÏÏ Ïή ÎειμÎÎ½Î¿Ï (Text Top)',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'ΧÏÏμα Î¥ÏοβάθÏÎ¿Ï ',hSpace:'ÎÏιζÏνÏÎ¹Î¿Ï Î§ÏÏÎ¿Ï (HSpace)',vSpace:'ÎάθεÏÎ¿Ï Î§ÏÏÎ¿Ï (VSpace)',validateSrc:'ÎιÏάγεÏε Ïην ÏοÏοθεÏία (URL) ÏÎ¿Ï Ï ÏεÏÏÏ Î½Î´ÎÏÎ¼Î¿Ï (Link)',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'ÎÏθογÏαÏικÏÏ ÎλεγÏοÏ',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Îεν Ï ÏάÏÏει ÏÏο λεξικÏ',changeTo:'Îλλαγή Ïε',btnIgnore:'ÎγνÏηÏη',btnIgnoreAll:'ÎγνÏηÏη ÏλÏν',btnReplace:'ÎνÏικαÏάÏÏαÏη',btnReplaceAll:'ÎνÏικαÏάÏÏαÏη ÏλÏν',btnUndo:'ÎναίÏεÏη',noSuggestions:'- Îεν Ï ÏάÏÏÎ¿Ï Î½ ÏÏοÏάÏÎµÎ¹Ï -',progress:'ÎÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Ïε εξÎλιξη...',noMispell:'ΠοÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏθηκε: Îεν βÏÎθηκαν λάθη',noChanges:'ΠοÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏθηκε: Îεν άλλαξαν λÎξειÏ',oneChange:'ΠοÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏθηκε: Îια λÎξη άλλαξε',manyChanges:'ΠοÏθογÏαÏικÏÏ ÎλεγÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏθηκε: %1 λÎÎ¾ÎµÎ¹Ï Î¬Î»Î»Î±Î¾Î±Î½',ieSpellDownload:'Îεν Ï ÏάÏÏει εγκαÏεÏÏημÎÎ½Î¿Ï Î¿ÏθογÏάÏοÏ. ÎÎλεÏε να Ïον καÏεβάÏεÏε ÏÏÏα;'},smiley:{toolbar:'Smiley',title:'ÎÏιλÎξÏε Îνα Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ÎίÏÏα με ÎÏιθμοÏÏ',bulletedlist:'ÎίÏÏα με Bullets',indent:'ÎÏξηÏη ÎÏοÏήÏ',outdent:'ÎείÏÏη ÎÏοÏήÏ',justify:{left:'ΣÏοίÏιÏη ÎÏιÏÏεÏά',center:'ΣÏοίÏιÏη ÏÏο ÎÎνÏÏο',right:'ΣÏοίÏιÏη Îεξιά',block:'ΠλήÏÎ·Ï Î£ÏοίÏιÏη (Block)'},blockquote:'Block Quote',clipboard:{title:'ÎÏικÏλληÏη',cutError:'Îι ÏÏ Î¸Î¼Î¯ÏÎµÎ¹Ï Î±ÏÏÎ±Î»ÎµÎ¯Î±Ï ÏÎ¿Ï ÏÏ Î»Î»Î¿Î¼ÎµÏÏηÏή ÏÎ±Ï Î´ÎµÎ½ εÏιÏÏÎÏÎ¿Ï Î½ Ïην εÏιλεγμÎνη εÏγαÏία αÏοκοÏήÏ. ΧÏηÏιμοÏοιείÏÏε Ïο ÏληκÏÏολÏγιο (Ctrl/Cmd+X).',copyError:'Îι ÏÏ Î¸Î¼Î¯ÏÎµÎ¹Ï Î±ÏÏÎ±Î»ÎµÎ¯Î±Ï ÏÎ¿Ï ÏÏ Î»Î»Î¿Î¼ÎµÏÏηÏή ÏÎ±Ï Î´ÎµÎ½ εÏιÏÏÎÏÎ¿Ï Î½ Ïην εÏιλεγμÎνη εÏγαÏία ανÏιγÏαÏήÏ. ΧÏηÏιμοÏοιείÏÏε Ïο ÏληκÏÏολÏγιο (Ctrl/Cmd+C).',pasteMsg:'ΠαÏÎ±ÎºÎ±Î»Ï ÎµÏικολήÏÏε ÏÏο ακÏÎ»Î¿Ï Î¸Î¿ ÎºÎ¿Ï Ïί ÏÏηÏιμοÏοιÏνÏÎ±Ï Ïο ÏληκÏÏολÏγιο (<STRONG>Ctrl/Cmd+V</STRONG>) και ÏαÏήÏÏε <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'ÎÏικÏλληÏη αÏÏ Ïο Word',title:'ÎÏικÏλληÏη αÏÏ Ïο Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'ÎÏικÏλληÏη ÏÏ ÎÏÎ»Ï Îείμενο',title:'ÎÏικÏλληÏη ÏÏ ÎÏÎ»Ï Îείμενο'},templates:{button:'Î ÏÏÏÏ Ïα',title:'Î ÏÏÏÏ Ïα ÏεÏιεÏομÎÎ½Î¿Ï ',options:'Template Options',insertOption:'ÎνÏικαÏάÏÏαÏη Ï ÏάÏÏονÏÏν ÏεÏιεÏομÎνÏν',selectPromptMsg:'ΠαÏÎ±ÎºÎ±Î»Ï ÎµÏιλÎξÏε ÏÏÏÏÏ Ïο για ειÏαγÏγή ÏÏο ÏÏÏγÏαμμα<br>(Ïα Ï ÏάÏÏονÏα ÏεÏιεÏÏμενα θα ÏαθοÏν):',emptyListMsg:'(Îεν ÎÏÎ¿Ï Î½ καθοÏιÏÏεί ÏÏÏÏÏ Ïα)'},showBlocks:'Show Blocks',stylesCombo:{label:'ΣÏÏ Î»',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ÎοÏÏή ÎÏαμμαÏοÏειÏάÏ',panelTitle:'ÎοÏÏή ÎÏαμμαÏοÏειÏάÏ',tag_p:'ÎανονικÏ',tag_pre:'ÎοÏÏοÏοιημÎνο',tag_address:'ÎιεÏÎ¸Ï Î½Ïη',tag_h1:'ÎÏικεÏαλίδα 1',tag_h2:'ÎÏικεÏαλίδα 2',tag_h3:'ÎÏικεÏαλίδα 3',tag_h4:'ÎÏικεÏαλίδα 4',tag_h5:'ÎÏικεÏαλίδα 5',tag_h6:'ÎÏικεÏαλίδα 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ÎÏαμμαÏοÏειÏά',voiceLabel:'Font',panelTitle:'ÎÏαμμαÏοÏειÏά'},fontSize:{label:'ÎÎγεθοÏ',voiceLabel:'Font Size',panelTitle:'ÎÎγεθοÏ'},colorButton:{textColorTitle:'ΧÏÏμα ÎÏαμμάÏÏν',bgColorTitle:'ΧÏÏμα Î¥ÏοβάθÏÎ¿Ï ',panelTitle:'Colors',auto:'ÎÏ ÏÏμαÏο',more:'ΠεÏιÏÏÏÏεÏα ÏÏÏμαÏα...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'ÎδιÏÏηÏÎµÏ ÎµÎ³Î³ÏάÏÎ¿Ï ',title:'ÎδιÏÏηÏÎµÏ ÎµÎ³Î³ÏάÏÎ¿Ï ',design:'Design',meta:'ÎεδομÎνα Meta',chooseColor:'Choose',other:'<άλλοÏ>',docTitle:'ΤίÏÎ»Î¿Ï ÏελίδαÏ',charset:'ÎÏδικοÏοίηÏη ÏαÏακÏήÏÏν',charsetOther:'Îλλη κÏδικοÏοίηÏη ÏαÏακÏήÏÏν',charsetASCII:'ASCII',charsetCE:'ÎενÏÏÎ¹ÎºÎ®Ï ÎÏ ÏÏÏηÏ',charsetCT:'ΠαÏαδοÏιακά κινÎζικα (Big5)',charsetCR:'ÎÏ Ïιλλική',charsetGR:'Îλληνική',charsetJP:'ÎαÏÏνική',charsetKR:'ÎοÏεάÏικη',charsetTR:'Î¤Î¿Ï Ïκική',charsetUN:'ÎÎ¹ÎµÎ¸Î½Î®Ï (UTF-8)',charsetWE:'ÎÏ ÏÎ¹ÎºÎ®Ï ÎÏ ÏÏÏηÏ',docType:'ÎÏικεÏαλίδα ÏÏÏÎ¿Ï ÎµÎ³Î³ÏάÏÎ¿Ï ',docTypeOther:'Îλλη εÏικεÏαλίδα ÏÏÏÎ¿Ï ÎµÎ³Î³ÏάÏÎ¿Ï ',xhtmlDec:'Îα ÏÏ Î¼ÏεÏιληÏθοÏν οι δηλÏÏÎµÎ¹Ï XHTML',bgColor:'ΧÏÏμα ÏÏνÏÎ¿Ï ',bgImage:'ÎιεÏÎ¸Ï Î½Ïη εικÏÎ½Î±Ï ÏÏνÏÎ¿Ï ',bgFixed:'ΦÏνÏο ÏÏÏÎ¯Ï ÎºÏλιÏη',txtColor:'ΧÏÏμα ÎÏαμμάÏÏν',margin:'ΠεÏιθÏÏια ÏελίδαÏ',marginTop:'ÎοÏÏ Ïή',marginLeft:'ÎÏιÏÏεÏά',marginRight:'Îεξιά',marginBottom:'ÎάÏÏ',metaKeywords:'ÎÎÎ¾ÎµÎ¹Ï ÎºÎ»ÎµÎ¹Î´Î¹Î¬ δείκÏÎµÏ ÎµÎ³Î³ÏάÏÎ¿Ï (διαÏÏÏιÏμÏÏ Î¼Îµ κÏμμα)',metaDescription:'ΠεÏιγÏαÏή εγγÏάÏÎ¿Ï ',metaAuthor:'Î£Ï Î³Î³ÏαÏÎαÏ',metaCopyright:'Î Î½ÎµÏ Î¼Î±Ïικά δικαιÏμαÏα',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/en-au.js b/lang/en-au.js new file mode 100644 index 0000000..4158808 --- /dev/null +++ b/lang/en-au.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang['en-au']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Width',height:'Height',align:'Align',alignLeft:'Left',alignRight:'Right',alignCenter:'Centre',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character',options:'Special Character Options'},link:{toolbar:'Link',other:'<other>',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toUrl:'URL',toAnchor:'Link to anchor in the text',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Left Position',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',rel:'Relationship',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',upload:'Upload',alt:'Alternative Text',lockRatio:'Lock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Align Left',center:'Centre',right:'Align Right',block:'Justify'},blockquote:'Block Quote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Paste from Word',title:'Paste from Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Paragraph Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',panelTitle:'Colors',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Document Properties',title:'Document Properties',design:'Design',meta:'Meta Tags',chooseColor:'Choose',other:'Other...',docTitle:'Page Title',charset:'Character Set Encoding',charsetOther:'Other Character Set Encoding',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Document Type Heading',docTypeOther:'Other Document Type Heading',xhtmlDec:'Include XHTML Declarations',bgColor:'Background Color',bgImage:'Background Image URL',bgFixed:'Non-scrolling (Fixed) Background',txtColor:'Text Color',margin:'Page Margins',marginTop:'Top',marginLeft:'Left',marginRight:'Right',marginBottom:'Bottom',metaKeywords:'Document Indexing Keywords (comma separated)',metaDescription:'Document Description',metaAuthor:'Author',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/en-ca.js b/lang/en-ca.js new file mode 100644 index 0000000..c38d2ad --- /dev/null +++ b/lang/en-ca.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang['en-ca']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Width',height:'Height',align:'Align',alignLeft:'Left',alignRight:'Right',alignCenter:'Centre',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character',options:'Special Character Options'},link:{toolbar:'Link',other:'<other>',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toUrl:'URL',toAnchor:'Link to anchor in the text',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Left Position',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',rel:'Relationship',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',upload:'Upload',alt:'Alternative Text',lockRatio:'Lock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Align Left',center:'Centre',right:'Align Right',block:'Justify'},blockquote:'Block Quote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Paste from Word',title:'Paste from Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Paragraph Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',panelTitle:'Colors',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Document Properties',title:'Document Properties',design:'Design',meta:'Meta Tags',chooseColor:'Choose',other:'Other...',docTitle:'Page Title',charset:'Character Set Encoding',charsetOther:'Other Character Set Encoding',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Document Type Heading',docTypeOther:'Other Document Type Heading',xhtmlDec:'Include XHTML Declarations',bgColor:'Background Color',bgImage:'Background Image URL',bgFixed:'Non-scrolling (Fixed) Background',txtColor:'Text Color',margin:'Page Margins',marginTop:'Top',marginLeft:'Left',marginRight:'Right',marginBottom:'Bottom',metaKeywords:'Document Indexing Keywords (comma separated)',metaDescription:'Document Description',metaAuthor:'Author',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/en-gb.js b/lang/en-gb.js new file mode 100644 index 0000000..6464335 --- /dev/null +++ b/lang/en-gb.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang['en-gb']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Width',height:'Height',align:'Align',alignLeft:'Left',alignRight:'Right',alignCenter:'Centre',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character',options:'Special Character Options'},link:{toolbar:'Link',other:'<other>',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toUrl:'URL',toAnchor:'Link to anchor in the text',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Left Position',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',rel:'Relationship',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',upload:'Upload',alt:'Alternative Text',lockRatio:'Lock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Align Left',center:'Centre',right:'Align Right',block:'Justify'},blockquote:'Block Quote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Paste from Word',title:'Paste from Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Paragraph Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',panelTitle:'Colours',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Grey','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Grey',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Grey',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Grey',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximise',minimize:'Minimise',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select colour',options:'Colour Options',highlight:'Highlight',selected:'Selected Colour',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Document Properties',title:'Document Properties',design:'Design',meta:'Meta Tags',chooseColor:'Choose',other:'Other...',docTitle:'Page Title',charset:'Character Set Encoding',charsetOther:'Other Character Set Encoding',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Document Type Heading',docTypeOther:'Other Document Type Heading',xhtmlDec:'Include XHTML Declarations',bgColor:'Background Color',bgImage:'Background Image URL',bgFixed:'Non-scrolling (Fixed) Background',txtColor:'Text Color',margin:'Page Margins',marginTop:'Top',marginLeft:'Left',marginRight:'Right',marginBottom:'Bottom',metaKeywords:'Document Indexing Keywords (comma separated)',metaDescription:'Document Description',metaAuthor:'Author',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/en.js b/lang/en.js new file mode 100644 index 0000000..a12ff56 --- /dev/null +++ b/lang/en.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.en={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Width',height:'Height',align:'Alignment',alignLeft:'Left',alignRight:'Right',alignCenter:'Center',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character',options:'Special Character Options'},link:{toolbar:'Link',other:'<other>',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toUrl:'URL',toAnchor:'Link to anchor in the text',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Left Position',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',rel:'Relationship',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',upload:'Upload',alt:'Alternative Text',lockRatio:'Lock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background color',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Align Left',center:'Center',right:'Align Right',block:'Justify'},blockquote:'Block Quote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Paste from Word',title:'Paste from Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Paragraph Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size'},colorButton:{textColorTitle:'Text Color',bgColorTitle:'Background Color',panelTitle:'Colors',auto:'Automatic',more:'More Colors...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Document Properties',title:'Document Properties',design:'Design',meta:'Meta Tags',chooseColor:'Choose',other:'Other...',docTitle:'Page Title',charset:'Character Set Encoding',charsetOther:'Other Character Set Encoding',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Document Type Heading',docTypeOther:'Other Document Type Heading',xhtmlDec:'Include XHTML Declarations',bgColor:'Background Color',bgImage:'Background Image URL',bgFixed:'Non-scrolling (Fixed) Background',txtColor:'Text Color',margin:'Page Margins',marginTop:'Top',marginLeft:'Left',marginRight:'Right',marginBottom:'Bottom',metaKeywords:'Document Indexing Keywords (comma separated)',metaDescription:'Document Description',metaAuthor:'Author',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/eo.js b/lang/eo.js new file mode 100644 index 0000000..088c741 --- /dev/null +++ b/lang/eo.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.eo={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Fonto',newPage:'Nova PaÄo',save:'Sekurigi',preview:'Vidigi Aspekton',cut:'Eltondi',copy:'Kopii',paste:'Interglui',print:'Presi',underline:'Substreko',bold:'Grasa',italic:'Kursiva',selectAll:'Elekti Äion',removeFormat:'Forigi Formaton',strike:'Trastreko',subscript:'Subskribo',superscript:'Superskribo',horizontalrule:'Enmeti Horizonta Linio',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Forigi Ligilon',undo:'Malfari',redo:'Refari',common:{browseServer:'Foliumi en la Servilo',url:'URL',protocol:'Protokolo',upload:'AlÅuti',uploadSubmit:'Sendu al Servilo',image:'Bildo',flash:'Flash',form:'Formularo',checkbox:'Markobutono',radio:'Radiobutono',textField:'Teksta kampo',textarea:'Teksta Areo',hiddenField:'KaÅita Kampo',button:'Butono',select:'Elekta Kampo',imageButton:'Bildbutono',notSet:'<DefaÅlta>',id:'Id',name:'Nomo',langDir:'Skribdirekto',langDirLtr:'De maldekstro dekstren (LTR)',langDirRtl:'De dekstro maldekstren (RTL)',langCode:'Lingva Kodo',longDescr:'URL de Longa Priskribo',cssClass:'Klasoj de Stilfolioj',advisoryTitle:'Indika Titolo',cssStyle:'Stilo',ok:'Akcepti',cancel:'Rezigni',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Speciala',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'LarÄo',height:'Alto',align:'Äisrandigo',alignLeft:'Maldekstre',alignRight:'Dekstre',alignCenter:'Centre',alignTop:'Supre',alignMiddle:'Centre',alignBottom:'Malsupre',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Enmeti Specialan Signon',title:'Enmeti Specialan Signon',options:'Special Character Options'},link:{toolbar:'Enmeti/ÅanÄi Ligilon',other:'<other>',menu:'Modifier Ligilon',title:'Ligilo',info:'Informoj pri la Ligilo',target:'Celo',upload:'AlÅuti',advanced:'Speciala',type:'Tipo de Ligilo',toUrl:'URL',toAnchor:'Ankri en tiu Äi paÄo',toEmail:'RetpoÅto',targetFrame:'<kadro>',targetPopup:'<Åprucfenestro>',targetFrameName:'Nomo de Kadro',targetPopupName:'Nomo de Åprucfenestro',popupFeatures:'Atributoj de la Åprucfenestro',popupResizable:'Resizable',popupStatusBar:'Statobreto',popupLocationBar:'Adresobreto',popupToolbar:'Ilobreto',popupMenuBar:'Menubreto',popupFullScreen:'Tutekrane (IE)',popupScrollBars:'Rulumlisteloj',popupDependent:'Dependa (Netscape)',popupLeft:'Pozicio de Maldekstro',popupTop:'Pozicio de Supro',id:'Id',langDir:'Skribdirekto',langDirLTR:'De maldekstro dekstren (LTR)',langDirRTL:'De dekstro maldekstren (RTL)',acccessKey:'Fulmoklavo',name:'Nomo',langCode:'Skribdirekto',tabIndex:'Taba Ordo',advisoryTitle:'Indika Titolo',advisoryContentType:'Indika Enhavotipo',cssClasses:'Klasoj de Stilfolioj',charset:'Signaro de la Ligita Rimedo',styles:'Stilo',rel:'Relationship',selectAnchor:'Elekti Ankron',anchorName:'Per Ankronomo',anchorId:'Per Elementidentigilo',emailAddress:'Retadreso',emailSubject:'Temlinio',emailBody:'MesaÄa korpo',noAnchors:'<Ne disponeblas ankroj en la dokumento>',noUrl:'Bonvolu entajpi la URL-on',noEmail:'Bonvolu entajpi la retadreson'},anchor:{toolbar:'Enmeti/ÅanÄi Ankron',menu:'Ankraj Atributoj',title:'Ankraj Atributoj',name:'Ankra Nomo',errorName:'Bv tajpi la ankran nomon',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'SerÄi',replace:'AnstataÅigi',findWhat:'SerÄi:',replaceWith:'AnstataÅigi per:',notFoundMsg:'La celteksto ne estas trovita.',matchCase:'Kongruigi Usklecon',matchWord:'Tuta Vorto',matchCyclic:'Match cyclic',replaceAll:'AnstataÅigi Äiun',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabelo',title:'Atributoj de Tabelo',menu:'Atributoj de Tabelo',deleteTable:'Delete Table',rows:'Linioj',columns:'Kolumnoj',border:'Bordero',widthPx:'Bitbilderoj',widthPc:'elcentoj',widthUnit:'width unit',cellSpace:'Interspacigo de Äeloj',cellPad:'ÄirkaÅenhava Plenigado',caption:'Titolo',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Forigi Äelojn',merge:'Kunfandi Äelojn',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Forigi Liniojn'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Forigi Kolumnojn'}},button:{title:'Butonaj Atributoj',text:'Teksto (Valoro)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Markobutonaj Atributoj',radioTitle:'Radiobutonaj Atributoj',value:'Valoro',selected:'Elektita'},form:{title:'Formularaj Atributoj',menu:'Formularaj Atributoj',action:'Ago',method:'Metodo',encoding:'Encoding'},select:{title:'Atributoj de Elekta Kampo',selectInfo:'Select Info',opAvail:'Elektoj Disponeblaj',value:'Valoro',size:'Grando',lines:'Linioj',chkMulti:'Permesi Plurajn Elektojn',opText:'Teksto',opValue:'Valoro',btnAdd:'Aldoni',btnModify:'Modifi',btnUp:'Supren',btnDown:'Malsupren',btnSetValue:'Agordi kiel Elektitan Valoron',btnDelete:'Forigi'},textarea:{title:'Atributoj de Teksta Areo',cols:'Kolumnoj',rows:'Vicoj'},textfield:{title:'Atributoj de Teksta Kampo',name:'Nomo',value:'Valoro',charWidth:'SignolarÄo',maxChars:'Maksimuma Nombro da Signoj',type:'Tipo',typeText:'Teksto',typePass:'Pasvorto'},hidden:{title:'Atributoj de KaÅita Kampo',name:'Nomo',value:'Valoro'},image:{title:'Atributoj de Bildo',titleButton:'Bildbutonaj Atributoj',menu:'Atributoj de Bildo',infoTab:'Informoj pri Bildo',btnUpload:'Sendu al Servilo',upload:'AlÅuti',alt:'AnstataÅiga Teksto',lockRatio:'Konservi Proporcion',resetSize:'Origina Grando',border:'Bordero',hSpace:'HSpaco',vSpace:'VSpaco',alertUrl:'Bonvolu tajpi la URL de la bildo',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Malsupre',alignAbsMiddle:'Abs Centre',alignBaseline:'Je Malsupro de Teksto',alignTextTop:'Je Supro de Teksto',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fona Koloro',hSpace:'HSpaco',vSpace:'VSpaco',validateSrc:'Bonvolu entajpi la URL-on',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Literumada Kontrolilo',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ne trovita en la vortaro',changeTo:'ÅanÄi al',btnIgnore:'Malatenti',btnIgnoreAll:'Malatenti Äiun',btnReplace:'AnstataÅigi',btnReplaceAll:'AnstataÅigi Äiun',btnUndo:'Malfari',noSuggestions:'- Neniu propono -',progress:'Literumkontrolado daÅras...',noMispell:'Literumkontrolado finita: neniu fuÅo trovita',noChanges:'Literumkontrolado finita: neniu vorto ÅanÄita',oneChange:'Literumkontrolado finita: unu vorto ÅanÄita',manyChanges:'Literumkontrolado finita: %1 vortoj ÅanÄitaj',ieSpellDownload:'Literumada Kontrolilo ne instalita. Äu vi volas elÅuti Äin nun?'},smiley:{toolbar:'Mienvinjeto',title:'Enmeti Mienvinjeton',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numera Listo',bulletedlist:'Bula Listo',indent:'Pligrandigi KrommarÄenon',outdent:'Malpligrandigi KrommarÄenon',justify:{left:'Maldekstrigi',center:'Centrigi',right:'Dekstrigi',block:'Äisrandigi AmbaÅflanke'},blockquote:'Block Quote',clipboard:{title:'Interglui',cutError:'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).',copyError:'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Interglui el Word',title:'Interglui el Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Interglui kiel Tekston',title:'Interglui kiel Tekston'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stilo',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normala',tag_pre:'Formatita',tag_address:'Adreso',tag_h1:'Titolo 1',tag_h2:'Titolo 2',tag_h3:'Titolo 3',tag_h4:'Titolo 4',tag_h5:'Titolo 5',tag_h6:'Titolo 6',tag_div:'Paragrafo (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Tiparo',voiceLabel:'Font',panelTitle:'Tiparo'},fontSize:{label:'Grando',voiceLabel:'Font Size',panelTitle:'Grando'},colorButton:{textColorTitle:'Teksta Koloro',bgColorTitle:'Fona Koloro',panelTitle:'Colors',auto:'AÅtomata',more:'Pli da Koloroj...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Dokumentaj Atributoj',title:'Dokumentaj Atributoj',design:'Design',meta:'Metadatumoj',chooseColor:'Choose',other:'<other>',docTitle:'PaÄotitolo',charset:'Signara Kodo',charsetOther:'Alia Signara Kodo',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Dokumenta Tipo',docTypeOther:'Alia Dokumenta Tipo',xhtmlDec:'Inkluzivi XHTML Deklaroj',bgColor:'Fona Koloro',bgImage:'URL de Fona Bildo',bgFixed:'Neruluma Fono',txtColor:'Teksta Koloro',margin:'PaÄaj MarÄenoj',marginTop:'Supra',marginLeft:'Maldekstra',marginRight:'Dekstra',marginBottom:'Malsupra',metaKeywords:'Ålosilvortoj de la Dokumento (apartigita de komoj)',metaDescription:'Dokumenta Priskribo',metaAuthor:'Verkinto',metaCopyright:'Kopirajto',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/es.js b/lang/es.js new file mode 100644 index 0000000..1f15d05 --- /dev/null +++ b/lang/es.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.es={dir:'ltr',editorTitle:'Editor de texto, %1, pulse ALT 0 para ayuda.',toolbars:'Barras de herramientas del editor',editor:'Editor de texto enriquecido',source:'Fuente HTML',newPage:'Nueva Página',save:'Guardar',preview:'Vista Previa',cut:'Cortar',copy:'Copiar',paste:'Pegar',print:'Imprimir',underline:'Subrayado',bold:'Negrita',italic:'Cursiva',selectAll:'Seleccionar Todo',removeFormat:'Eliminar Formato',strike:'Tachado',subscript:'SubÃndice',superscript:'SuperÃndice',horizontalrule:'Insertar LÃnea Horizontal',pagebreak:'Insertar Salto de Página',pagebreakAlt:'Salto de página',unlink:'Eliminar VÃnculo',undo:'Deshacer',redo:'Rehacer',common:{browseServer:'Ver Servidor',url:'URL',protocol:'Protocolo',upload:'Cargar',uploadSubmit:'Enviar al Servidor',image:'Imagen',flash:'Flash',form:'Formulario',checkbox:'Casilla de Verificación',radio:'Botones de Radio',textField:'Campo de Texto',textarea:'Area de Texto',hiddenField:'Campo Oculto',button:'Botón',select:'Campo de Selección',imageButton:'Botón Imagen',notSet:'<No definido>',id:'Id',name:'Nombre',langDir:'Orientación',langDirLtr:'Izquierda a Derecha (LTR)',langDirRtl:'Derecha a Izquierda (RTL)',langCode:'Cód. de idioma',longDescr:'Descripción larga URL',cssClass:'Clases de hojas de estilo',advisoryTitle:'TÃtulo',cssStyle:'Estilo',ok:'Aceptar',cancel:'Cancelar',close:'Cerrar',preview:'Previsualización',generalTab:'General',advancedTab:'Avanzado',validateNumberFailed:'El valor no es un número.',confirmNewPage:'Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?',confirmCancel:'Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?',options:'Opciones',target:'Destino',targetNew:'Nueva ventana (_blank)',targetTop:'Ventana principal (_top)',targetSelf:'Misma ventana (_self)',targetParent:'Ventana padre (_parent)',langDirLTR:'Izquierda a derecha (LTR)',langDirRTL:'Derecha a izquierda (RTL)',styles:'Estilos',cssClasses:'Clase de la hoja de estilos',width:'Anchura',height:'Altura',align:'Alineación',alignLeft:'Izquierda',alignRight:'Derecha',alignCenter:'Centrado',alignTop:'Tope',alignMiddle:'Centro',alignBottom:'Pie',invalidHeight:'Altura debe ser un número.',invalidWidth:'Anchura debe ser un número.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, no disponible</span>'},contextmenu:{options:'Opciones del menú contextual'},specialChar:{toolbar:'Insertar Caracter Especial',title:'Seleccione un caracter especial',options:'Opciones de caracteres especiales'},link:{toolbar:'Insertar/Editar VÃnculo',other:'<otro>',menu:'Editar VÃnculo',title:'VÃnculo',info:'Información de VÃnculo',target:'Destino',upload:'Cargar',advanced:'Avanzado',type:'Tipo de vÃnculo',toUrl:'URL',toAnchor:'Referencia en esta página',toEmail:'E-Mail',targetFrame:'<marco>',targetPopup:'<ventana emergente>',targetFrameName:'Nombre del Marco Destino',targetPopupName:'Nombre de Ventana Emergente',popupFeatures:'CaracterÃsticas de Ventana Emergente',popupResizable:'Redimensionable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de ubicación',popupToolbar:'Barra de Herramientas',popupMenuBar:'Barra de Menú',popupFullScreen:'Pantalla Completa (IE)',popupScrollBars:'Barras de desplazamiento',popupDependent:'Dependiente (Netscape)',popupLeft:'Posición Izquierda',popupTop:'Posición Derecha',id:'Id',langDir:'Orientación',langDirLTR:'Izquierda a Derecha (LTR)',langDirRTL:'Derecha a Izquierda (RTL)',acccessKey:'Tecla de Acceso',name:'Nombre',langCode:'Código idioma',tabIndex:'Indice de tabulación',advisoryTitle:'TÃtulo',advisoryContentType:'Tipo de Contenido',cssClasses:'Clases de hojas de estilo',charset:'Fuente de caracteres vinculado',styles:'Estilo',rel:'Relación',selectAnchor:'Seleccionar una referencia',anchorName:'Por Nombre de Referencia',anchorId:'Por ID de elemento',emailAddress:'Dirección de E-Mail',emailSubject:'TÃtulo del Mensaje',emailBody:'Cuerpo del Mensaje',noAnchors:'(No hay referencias disponibles en el documento)',noUrl:'Por favor escriba el vÃnculo URL',noEmail:'Por favor escriba la dirección de e-mail'},anchor:{toolbar:'Referencia',menu:'Propiedades de Referencia',title:'Propiedades de Referencia',name:'Nombre de la Referencia',errorName:'Por favor, complete el nombre de la Referencia',remove:'Remove Anchor'},list:{numberedTitle:'Propiedades de lista numerada',bulletedTitle:'Propiedades de viñetas',type:'Tipo',start:'Inicio',validateStartNumber:'El Inicio debe ser un número entero.',circle:'CÃrculo',disc:'Disco',square:'Cuadrado',none:'Ninguno',notset:'<sin establecer>',armenian:'Numeración armenia',georgian:'Numeración georgiana (an, ban, gan, etc.)',lowerRoman:'Números romanos en minúsculas (i, ii, iii, iv, v, etc.)',upperRoman:'Números romanos en mayúsculas (I, II, III, IV, V, etc.)',lowerAlpha:'Alfabeto en minúsculas (a, b, c, d, e, etc.)',upperAlpha:'Alfabeto en mayúsculas (A, B, C, D, E, etc.)',lowerGreek:'Letras griegas (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal con cero inicial (01, 02, 03, etc.)'},findAndReplace:{title:'Buscar y Reemplazar',find:'Buscar',replace:'Reemplazar',findWhat:'Texto a buscar:',replaceWith:'Reemplazar con:',notFoundMsg:'El texto especificado no ha sido encontrado.',matchCase:'Coincidir may/min',matchWord:'Coincidir toda la palabra',matchCyclic:'Buscar en todo el contenido',replaceAll:'Reemplazar Todo',replaceSuccessMsg:'La expresión buscada ha sido reemplazada %1 veces.'},table:{toolbar:'Tabla',title:'Propiedades de Tabla',menu:'Propiedades de Tabla',deleteTable:'Eliminar Tabla',rows:'Filas',columns:'Columnas',border:'Tamaño de Borde',widthPx:'pixeles',widthPc:'porcentaje',widthUnit:'unidad de la anchura',cellSpace:'Esp. e/celdas',cellPad:'Esp. interior',caption:'TÃtulo',summary:'SÃntesis',headers:'Encabezados',headersNone:'Ninguno',headersColumn:'Primera columna',headersRow:'Primera fila',headersBoth:'Ambas',invalidRows:'El número de filas debe ser un número mayor que 0.',invalidCols:'El número de columnas debe ser un número mayor que 0.',invalidBorder:'El tamaño del borde debe ser un número.',invalidWidth:'La anchura de tabla debe ser un número.',invalidHeight:'La altura de tabla debe ser un número.',invalidCellSpacing:'El espaciado entre celdas debe ser un número.',invalidCellPadding:'El espaciado interior debe ser un número.',cell:{menu:'Celda',insertBefore:'Insertar celda a la izquierda',insertAfter:'Insertar celda a la derecha',deleteCell:'Eliminar Celdas',merge:'Combinar Celdas',mergeRight:'Combinar a la derecha',mergeDown:'Combinar hacia abajo',splitHorizontal:'Dividir la celda horizontalmente',splitVertical:'Dividir la celda verticalmente',title:'Propiedades de celda',cellType:'Tipo de Celda',rowSpan:'Expandir filas',colSpan:'Expandir columnas',wordWrap:'Ajustar al contenido',hAlign:'Alineación Horizontal',vAlign:'Alineación Vertical',alignBaseline:'Linea de base',bgColor:'Color de fondo',borderColor:'Color de borde',data:'Datos',header:'Encabezado',yes:'SÃ',no:'No',invalidWidth:'La anchura de celda debe ser un número.',invalidHeight:'La altura de celda debe ser un número.',invalidRowSpan:'La expansión de filas debe ser un número entero.',invalidColSpan:'La expansión de columnas debe ser un número entero.',chooseColor:'Elegir'},row:{menu:'Fila',insertBefore:'Insertar fila en la parte superior',insertAfter:'Insertar fila en la parte inferior',deleteRow:'Eliminar Filas'},column:{menu:'Columna',insertBefore:'Insertar columna a la izquierda',insertAfter:'Insertar columna a la derecha',deleteColumn:'Eliminar Columnas'}},button:{title:'Propiedades de Botón',text:'Texto (Valor)',type:'Tipo',typeBtn:'Boton',typeSbm:'Enviar',typeRst:'Reestablecer'},checkboxAndRadio:{checkboxTitle:'Propiedades de Casilla',radioTitle:'Propiedades de Botón de Radio',value:'Valor',selected:'Seleccionado'},form:{title:'Propiedades de Formulario',menu:'Propiedades de Formulario',action:'Acción',method:'Método',encoding:'Codificación'},select:{title:'Propiedades de Campo de Selección',selectInfo:'Información',opAvail:'Opciones disponibles',value:'Valor',size:'Tamaño',lines:'Lineas',chkMulti:'Permitir múltiple selección',opText:'Texto',opValue:'Valor',btnAdd:'Agregar',btnModify:'Modificar',btnUp:'Subir',btnDown:'Bajar',btnSetValue:'Establecer como predeterminado',btnDelete:'Eliminar'},textarea:{title:'Propiedades de Area de Texto',cols:'Columnas',rows:'Filas'},textfield:{title:'Propiedades de Campo de Texto',name:'Nombre',value:'Valor',charWidth:'Caracteres de ancho',maxChars:'Máximo caracteres',type:'Tipo',typeText:'Texto',typePass:'Contraseña'},hidden:{title:'Propiedades de Campo Oculto',name:'Nombre',value:'Valor'},image:{title:'Propiedades de Imagen',titleButton:'Propiedades de Botón de Imagen',menu:'Propiedades de Imagen',infoTab:'Información de Imagen',btnUpload:'Enviar al Servidor',upload:'Cargar',alt:'Texto Alternativo',lockRatio:'Proporcional',resetSize:'Tamaño Original',border:'Borde',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',alertUrl:'Por favor escriba la URL de la imagen',linkTab:'VÃnculo',button2Img:'¿Desea convertir el botón de imagen en una simple imagen?',img2Button:'¿Desea convertir la imagen en un botón de imagen?',urlMissing:'Debe indicar la URL de la imagen.',validateBorder:'El borde debe ser un número.',validateHSpace:'El espaciado horizontal debe ser un número.',validateVSpace:'El espaciado vertical debe ser un número.'},flash:{properties:'Propiedades de Flash',propertiesTab:'Propiedades',title:'Propiedades de Flash',chkPlay:'Autoejecución',chkLoop:'Repetir',chkMenu:'Activar Menú Flash',chkFull:'Permitir pantalla completa',scale:'Escala',scaleAll:'Mostrar todo',scaleNoBorder:'Sin Borde',scaleFit:'Ajustado',access:'Acceso de scripts',accessAlways:'Siempre',accessSameDomain:'Mismo dominio',accessNever:'Nunca',alignAbsBottom:'Abs inferior',alignAbsMiddle:'Abs centro',alignBaseline:'LÃnea de base',alignTextTop:'Tope del texto',quality:'Calidad',qualityBest:'La mejor',qualityHigh:'Alta',qualityAutoHigh:'Auto Alta',qualityMedium:'Media',qualityAutoLow:'Auto Baja',qualityLow:'Baja',windowModeWindow:'Ventana',windowModeOpaque:'Opaco',windowModeTransparent:'Transparente',windowMode:'WindowMode',flashvars:'Opciones',bgcolor:'Color de Fondo',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',validateSrc:'Por favor escriba el vÃnculo URL',validateHSpace:'Esp.Horiz debe ser un número.',validateVSpace:'Esp.Vert debe ser un número.'},spellCheck:{toolbar:'OrtografÃa',title:'Comprobar ortografÃa',notAvailable:'Lo sentimos pero el servicio no está disponible.',errorLoading:'Error cargando la aplicación del servidor: %s.',notInDic:'No se encuentra en el Diccionario',changeTo:'Cambiar a',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Todo',btnReplace:'Reemplazar',btnReplaceAll:'Reemplazar Todo',btnUndo:'Deshacer',noSuggestions:'- No hay sugerencias -',progress:'Control de OrtografÃa en progreso...',noMispell:'Control finalizado: no se encontraron errores',noChanges:'Control finalizado: no se ha cambiado ninguna palabra',oneChange:'Control finalizado: se ha cambiado una palabra',manyChanges:'Control finalizado: se ha cambiado %1 palabras',ieSpellDownload:'Módulo de Control de OrtografÃa no instalado.\r\n¿Desea descargarlo ahora?'},smiley:{toolbar:'Emoticonos',title:'Insertar un Emoticon',options:'Opciones de emoticonos'},elementsPath:{eleLabel:'Ruta de los elementos',eleTitle:'%1 elemento'},numberedlist:'Numeración',bulletedlist:'Viñetas',indent:'Aumentar SangrÃa',outdent:'Disminuir SangrÃa',justify:{left:'Alinear a Izquierda',center:'Centrar',right:'Alinear a Derecha',block:'Justificado'},blockquote:'Cita',clipboard:{title:'Pegar',cutError:'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).',copyError:'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).',pasteMsg:'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.',securityMsg:'Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.',pasteArea:'Zona de pegado'},pastefromword:{confirmCleanup:'El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?',toolbar:'Pegar desde Word',title:'Pegar desde Word',error:'No ha sido posible limpiar los datos debido a un error interno'},pasteText:{button:'Pegar como Texto Plano',title:'Pegar como Texto Plano'},templates:{button:'Plantillas',title:'Contenido de Plantillas',options:'Opciones de plantillas',insertOption:'Reemplazar el contenido actual',selectPromptMsg:'Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):',emptyListMsg:'(No hay plantillas definidas)'},showBlocks:'Mostrar bloques',stylesCombo:{label:'Estilo',panelTitle:'Estilos para formatear',panelTitle1:'Estilos de párrafo',panelTitle2:'Estilos de carácter',panelTitle3:'Estilos de objeto'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normal',tag_pre:'Con formato',tag_address:'Dirección',tag_h1:'Encabezado 1',tag_h2:'Encabezado 2',tag_h3:'Encabezado 3',tag_h4:'Encabezado 4',tag_h5:'Encabezado 5',tag_h6:'Encabezado 6',tag_div:'Normal (DIV)'},div:{title:'Crear contenedor DIV',toolbar:'Crear contenedor DIV',cssClassInputLabel:'Clase de hoja de estilos',styleSelectLabel:'Estilo',IdInputLabel:'Id',languageCodeInputLabel:' Codigo de idioma',inlineStyleInputLabel:'Estilo',advisoryTitleInputLabel:'TÃtulo',langDirLabel:'Orientación',langDirLTRLabel:'Izquierda a Derecha (LTR)',langDirRTLLabel:'Derecha a Izquierda (RTL)',edit:'Editar Div',remove:'Quitar Div'},iframe:{title:'Propiedades de iframe',toolbar:'IFrame',noUrl:'Por favor, escriba la dirección del iframe',scrolling:'Activar barras de desplazamiento',border:'Mostrar borde del marco'},font:{label:'Fuente',voiceLabel:'Fuente',panelTitle:'Fuente'},fontSize:{label:'Tamaño',voiceLabel:'Tamaño de fuente',panelTitle:'Tamaño'},colorButton:{textColorTitle:'Color de Texto',bgColorTitle:'Color de Fondo',panelTitle:'Colores',auto:'Automático',more:'Más Colores...'},colors:{'000':'Negro',800000:'Marrón oscuro','8B4513':'Marrón tierra','2F4F4F':'Pizarra Oscuro','008080':'Azul verdoso','000080':'Azul marino','4B0082':'Añil',696969:'Gris oscuro',B22222:'Ladrillo',A52A2A:'Marrón',DAA520:'Oro oscuro','006400':'Verde oscuro','40E0D0':'Turquesa','0000CD':'Azul medio-oscuro',800080:'Púrpura',808080:'Gris',F00:'Rojo',FF8C00:'Naranja oscuro',FFD700:'Oro','008000':'Verde','0FF':'Cian','00F':'Azul',EE82EE:'Violeta',A9A9A9:'Gris medio',FFA07A:'Salmón claro',FFA500:'Naranja',FFFF00:'Amarillo','00FF00':'Lima',AFEEEE:'Turquesa claro',ADD8E6:'Azul claro',DDA0DD:'Violeta claro',D3D3D3:'Gris claro',FFF0F5:'Lavanda rojizo',FAEBD7:'Blanco antiguo',FFFFE0:'Amarillo claro',F0FFF0:'Miel',F0FFFF:'Azul celeste',F0F8FF:'Azul pálido',E6E6FA:'Lavanda',FFF:'Blanco'},scayt:{title:'Comprobar OrtografÃa Mientras Escribe',opera_title:'No soportado en Opera',enable:'Activar Corrector',disable:'Desactivar Corrector',about:'Acerca de Corrector',toggle:'Cambiar Corrector',options:'Opciones',langs:'Idiomas',moreSuggestions:'Más sugerencias',ignore:'Ignorar',ignoreAll:'Ignorar Todas',addWord:'Añadir palabra',emptyDic:'El nombre del diccionario no puede estar en blanco.',optionsTab:'Opciones',allCaps:'Omitir palabras en MAYÃSCULAS',ignoreDomainNames:'Omitir nombres de dominio',mixedCase:'Ignorar palabras con combinación de mayúsculas y minúsculas',mixedWithDigits:'Omitir palabras con números',languagesTab:'Idiomas',dictionariesTab:'Diccionarios',dic_field_name:'Nombre del diccionario',dic_create:'Crear',dic_restore:'Recuperar',dic_delete:'Borrar',dic_rename:'Renombrar',dic_info:'Inicialmente el Diccionario de usuario se guarda en una Cookie. Sin embargo, las cookies están limitadas en tamaño. Cuando el diccionario crece a un punto en el que no se puede guardar en una Cookie, el diccionario puede ser almacenado en nuestro servidor. Para almacenar su diccionario personalizado en nuestro servidor debe especificar un nombre para su diccionario. Si ya ha guardado un diccionaro, por favor, escriba su nombre y pulse el botón Recuperar',aboutTab:'Acerca de'},about:{title:'Acerca de CKEditor',dlgTitle:'Acerca de CKEditor',help:'Lea la $1 para resolver sus dudas.',userGuide:'GuÃa de usuario de CKEditor',moreInfo:'Para información de licencia, por favor visite nuestro sitio web:',copy:'Copyright © $1. Todos los derechos reservados.'},maximize:'Maximizar',minimize:'Minimizar',fakeobjects:{anchor:'Ancla',flash:'Animación flash',iframe:'IFrame',hiddenfield:'Campo oculto',unknown:'Objeto desconocido'},resize:'Arrastre para redimensionar',colordialog:{title:'Elegir color',options:'Opciones de colores',highlight:'Muestra',selected:'Elegido',clear:'Borrar'},toolbarCollapse:'Contraer barra de herramientas',toolbarExpand:'Expandir barra de herramientas',toolbarGroups:{document:'Documento',clipboard:'Portapapeles/Deshacer',editing:'Edición',forms:'Formularios',basicstyles:'Estilos básicos',paragraph:'Párrafo',links:'Enlaces',insert:'Insertar',styles:'Estilos',colors:'Colores',tools:'Herramientas'},bidi:{ltr:'Dirección del texto de izquierda a derecha',rtl:'Dirección del texto de derecha a izquierda'},docprops:{label:'Propiedades del documento',title:'Propiedades del documento',design:'Diseño',meta:'Meta Tags',chooseColor:'Elegir',other:'Otro...',docTitle:'TÃtulo de página',charset:'Codificación de caracteres',charsetOther:'Otra codificación de caracteres',charsetASCII:'ASCII',charsetCE:'Centro Europeo',charsetCT:'Chino Tradicional (Big5)',charsetCR:'Ruso',charsetGR:'Griego',charsetJP:'Japonés',charsetKR:'Koreano',charsetTR:'Turco',charsetUN:'Unicode (UTF-8)',charsetWE:'Europeo occidental',docType:'Tipo de documento',docTypeOther:'Otro tipo de documento',xhtmlDec:'Incluir declaración XHTML',bgColor:'Color de fondo',bgImage:'Imagen de fondo',bgFixed:'Fondo fijo (no se desplaza)',txtColor:'Color del texto',margin:'Márgenes',marginTop:'Superior',marginLeft:'Izquierdo',marginRight:'Derecho',marginBottom:'Inferior',metaKeywords:'Palabras claves del documento separadas por coma (meta keywords)',metaDescription:'Descripción del documento',metaAuthor:'Autor',metaCopyright:'Copyright',previewHtml:'<p>Este es un <strong>texto de ejemplo</strong>. Usted está usando <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/et.js b/lang/et.js new file mode 100644 index 0000000..11ffe6d --- /dev/null +++ b/lang/et.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.et={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Lähtekood',newPage:'Uus leht',save:'Salvesta',preview:'Eelvaade',cut:'Lõika',copy:'Kopeeri',paste:'Kleebi',print:'Prindi',underline:'Allajoonitud',bold:'Paks',italic:'Kursiiv',selectAll:'Vali kõik',removeFormat:'Eemalda vorming',strike:'Läbijoonitud',subscript:'Allindeks',superscript:'Ãlaindeks',horizontalrule:'Sisesta horisontaaljoon',pagebreak:'Sisesta lehevahetuskoht',pagebreakAlt:'Page Break',unlink:'Eemalda link',undo:'Võta tagasi',redo:'Korda toimingut',common:{browseServer:'Sirvi serverit',url:'URL',protocol:'Protokoll',upload:'Lae üles',uploadSubmit:'Saada serverissee',image:'Pilt',flash:'Flash',form:'Vorm',checkbox:'Märkeruut',radio:'Raadionupp',textField:'Tekstilahter',textarea:'Tekstiala',hiddenField:'Varjatud lahter',button:'Nupp',select:'Valiklahter',imageButton:'Piltnupp',notSet:'<määramata>',id:'Id',name:'Nimi',langDir:'Keele suund',langDirLtr:'Vasakult paremale (LTR)',langDirRtl:'Paremalt vasakule (RTL)',langCode:'Keele kood',longDescr:'Pikk kirjeldus URL',cssClass:'Stiilistiku klassid',advisoryTitle:'Juhendav tiitel',cssStyle:'Laad',ok:'OK',cancel:'Loobu',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Täpsemalt',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Laius',height:'Kõrgus',align:'Joondus',alignLeft:'Vasak',alignRight:'Paremale',alignCenter:'Kesk',alignTop:'Ãles',alignMiddle:'Keskele',alignBottom:'Alla',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Sisesta erimärk',title:'Vali erimärk',options:'Special Character Options'},link:{toolbar:'Sisesta link / Muuda linki',other:'<muu>',menu:'Muuda linki',title:'Link',info:'Lingi info',target:'Sihtkoht',upload:'Lae üles',advanced:'Täpsemalt',type:'Lingi tüüp',toUrl:'URL',toAnchor:'Ankur sellel lehel',toEmail:'E-post',targetFrame:'<raam>',targetPopup:'<hüpikaken>',targetFrameName:'Sihtmärk raami nimi',targetPopupName:'Hüpikakna nimi',popupFeatures:'Hüpikakna omadused',popupResizable:'Resizable',popupStatusBar:'Olekuriba',popupLocationBar:'Aadressiriba',popupToolbar:'Tööriistariba',popupMenuBar:'Menüüriba',popupFullScreen:'Täisekraan (IE)',popupScrollBars:'Kerimisribad',popupDependent:'Sõltuv (Netscape)',popupLeft:'Vasak asukoht',popupTop:'Ãlemine asukoht',id:'Id',langDir:'Keele suund',langDirLTR:'Vasakult paremale (LTR)',langDirRTL:'Paremalt vasakule (RTL)',acccessKey:'Juurdepääsu võti',name:'Nimi',langCode:'Keele suund',tabIndex:'Tab indeks',advisoryTitle:'Juhendav tiitel',advisoryContentType:'Juhendava sisu tüüp',cssClasses:'Stiilistiku klassid',charset:'Lingitud ressurssi märgistik',styles:'Laad',rel:'Relationship',selectAnchor:'Vali ankur',anchorName:'Ankru nime järgi',anchorId:'Elemendi id järgi',emailAddress:'E-posti aadress',emailSubject:'Sõnumi teema',emailBody:'Sõnumi tekst',noAnchors:'(Selles dokumendis ei ole ankruid)',noUrl:'Palun kirjuta lingi URL',noEmail:'Palun kirjuta E-Posti aadress'},anchor:{toolbar:'Sisesta ankur / Muuda ankrut',menu:'Ankru omadused',title:'Ankru omadused',name:'Ankru nimi',errorName:'Palun sisest ankru nimi',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Otsi ja asenda',find:'Otsi',replace:'Asenda',findWhat:'Leia mida:',replaceWith:'Asenda millega:',notFoundMsg:'Valitud teksti ei leitud.',matchCase:'Erista suur- ja väiketähti',matchWord:'Otsi terviklike sõnu',matchCyclic:'Match cyclic',replaceAll:'Asenda kõik',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'Tabeli atribuudid',menu:'Tabeli atribuudid',deleteTable:'Kustuta tabel',rows:'Read',columns:'Veerud',border:'Joone suurus',widthPx:'pikslit',widthPc:'protsenti',widthUnit:'width unit',cellSpace:'Lahtri vahe',cellPad:'Lahtri täidis',caption:'Tabeli tiitel',summary:'Kokkuvõte',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Lahter',insertBefore:'Sisesta lahter enne',insertAfter:'Sisesta lahter peale',deleteCell:'Eemalda lahtrid',merge:'Ãhenda lahtrid',mergeRight:'Ãhenda paremale',mergeDown:'Ãhenda alla',splitHorizontal:'Poolita lahter horisontaalselt',splitVertical:'Poolita lahter vertikaalselt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Rida',insertBefore:'Sisesta rida enne',insertAfter:'Sisesta rida peale',deleteRow:'Eemalda read'},column:{menu:'Veerg',insertBefore:'Sisesta veerg enne',insertAfter:'Sisesta veerg peale',deleteColumn:'Eemalda veerud'}},button:{title:'Nupu omadused',text:'Tekst (väärtus)',type:'Tüüp',typeBtn:'Nupp',typeSbm:'Saada',typeRst:'Lähtesta'},checkboxAndRadio:{checkboxTitle:'Märkeruudu omadused',radioTitle:'Raadionupu omadused',value:'Väärtus',selected:'Valitud'},form:{title:'Vormi omadused',menu:'Vormi omadused',action:'Toiming',method:'Meetod',encoding:'Encoding'},select:{title:'Valiklahtri omadused',selectInfo:'Info',opAvail:'Võimalikud valikud',value:'Väärtus',size:'Suurus',lines:'ridu',chkMulti:'Võimalda mitu valikut',opText:'Tekst',opValue:'Väärtus',btnAdd:'Lisa',btnModify:'Muuda',btnUp:'Ãles',btnDown:'Alla',btnSetValue:'Sea valitud olekuna',btnDelete:'Kustuta'},textarea:{title:'Tekstiala omadused',cols:'Veerge',rows:'Ridu'},textfield:{title:'Tekstilahtri omadused',name:'Nimi',value:'Väärtus',charWidth:'Laius (tähemärkides)',maxChars:'Maksimaalselt tähemärke',type:'Tüüp',typeText:'Tekst',typePass:'Parool'},hidden:{title:'Varjatud lahtri omadused',name:'Nimi',value:'Väärtus'},image:{title:'Pildi atribuudid',titleButton:'Piltnupu omadused',menu:'Pildi atribuudid',infoTab:'Pildi info',btnUpload:'Saada serverissee',upload:'Lae üles',alt:'Alternatiivne tekst',lockRatio:'Lukusta kuvasuhe',resetSize:'Lähtesta suurus',border:'Joon',hSpace:'H. vaheruum',vSpace:'V. vaheruum',alertUrl:'Palun kirjuta pildi URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash omadused',propertiesTab:'Properties',title:'Flash omadused',chkPlay:'Automaatne start ',chkLoop:'Korduv',chkMenu:'Võimalda flash menüü',chkFull:'Allow Fullscreen',scale:'Mastaap',scaleAll:'Näita kõike',scaleNoBorder:'Ãärist ei ole',scaleFit:'Täpne sobivus',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs alla',alignAbsMiddle:'Abs keskele',alignBaseline:'Baasjoonele',alignTextTop:'Tekstit üles',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Tausta värv',hSpace:'H. vaheruum',vSpace:'V. vaheruum',validateSrc:'Palun kirjuta lingi URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Kontrolli õigekirja',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Puudub sõnastikust',changeTo:'Muuda',btnIgnore:'Ignoreeri',btnIgnoreAll:'Ignoreeri kõiki',btnReplace:'Asenda',btnReplaceAll:'Asenda kõik',btnUndo:'Võta tagasi',noSuggestions:'- Soovitused puuduvad -',progress:'Toimub õigekirja kontroll...',noMispell:'Ãigekirja kontroll sooritatud: õigekirjuvigu ei leitud',noChanges:'Ãigekirja kontroll sooritatud: ühtegi sõna ei muudetud',oneChange:'Ãigekirja kontroll sooritatud: üks sõna muudeti',manyChanges:'Ãigekirja kontroll sooritatud: %1 sõna muudetud',ieSpellDownload:'Ãigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?'},smiley:{toolbar:'Emotikon',title:'Sisesta emotikon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Nummerdatud loetelu',bulletedlist:'Punktiseeritud loetelu',indent:'Suurenda taanet',outdent:'Vähenda taanet',justify:{left:'Vasakjoondus',center:'Keskjoondus',right:'Paremjoondus',block:'Rööpjoondus'},blockquote:'Blokktsitaat',clipboard:{title:'Kleebi',cutError:'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).',copyError:'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).',pasteMsg:'Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.',securityMsg:'Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Kleebi Wordist',title:'Kleebi Wordist',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Kleebi tavalise tekstina',title:'Kleebi tavalise tekstina'},templates:{button:'Å abloon',title:'Sisu Å¡abloonid',options:'Template Options',insertOption:'Asenda tegelik sisu',selectPromptMsg:'Palun vali Å¡abloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):',emptyListMsg:'(Ãhtegi Å¡ablooni ei ole defineeritud)'},showBlocks:'Näita blokke',stylesCombo:{label:'Laad',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Vorming',panelTitle:'Vorming',tag_p:'Tavaline',tag_pre:'Vormindatud',tag_address:'Aadress',tag_h1:'Pealkiri 1',tag_h2:'Pealkiri 2',tag_h3:'Pealkiri 3',tag_h4:'Pealkiri 4',tag_h5:'Pealkiri 5',tag_h6:'Pealkiri 6',tag_div:'Tavaline (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Kiri',voiceLabel:'Font',panelTitle:'Kiri'},fontSize:{label:'Suurus',voiceLabel:'Font Size',panelTitle:'Suurus'},colorButton:{textColorTitle:'Teksti värv',bgColorTitle:'Tausta värv',panelTitle:'Colors',auto:'Automaatne',more:'Rohkem värve...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Dokumendi omadused',title:'Dokumendi omadused',design:'Design',meta:'Meta andmed',chooseColor:'Choose',other:'<muu>',docTitle:'Lehekülje tiitel',charset:'Märgistiku kodeering',charsetOther:'Ãlejäänud märgistike kodeeringud',charsetASCII:'ASCII',charsetCE:'Kesk-Euroopa',charsetCT:'Hiina traditsiooniline (Big5)',charsetCR:'Kirillisa',charsetGR:'Kreeka',charsetJP:'Jaapani',charsetKR:'Korea',charsetTR:'Türgi',charsetUN:'Unicode (UTF-8)',charsetWE:'Lääne-Euroopa',docType:'Dokumendi tüüppäis',docTypeOther:'Teised dokumendi tüüppäised',xhtmlDec:'Arva kaasa XHTML deklaratsioonid',bgColor:'Taustavärv',bgImage:'Taustapildi URL',bgFixed:'Mittekeritav tagataust',txtColor:'Teksti värv',margin:'Lehekülje äärised',marginTop:'Ãlaserv',marginLeft:'Vasakserv',marginRight:'Paremserv',marginBottom:'Alaserv',metaKeywords:'Dokumendi võtmesõnad (eraldatud komadega)',metaDescription:'Dokumendi kirjeldus',metaAuthor:'Autor',metaCopyright:'Autoriõigus',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/eu.js b/lang/eu.js new file mode 100644 index 0000000..06f0b57 --- /dev/null +++ b/lang/eu.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.eu={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'HTML Iturburua',newPage:'Orrialde Berria',save:'Gorde',preview:'Aurrebista',cut:'Ebaki',copy:'Kopiatu',paste:'Itsatsi',print:'Inprimatu',underline:'Azpimarratu',bold:'Lodia',italic:'Etzana',selectAll:'Hautatu dena',removeFormat:'Kendu Formatua',strike:'Marratua',subscript:'Azpi-indize',superscript:'Goi-indize',horizontalrule:'Txertatu Marra Horizontala',pagebreak:'Txertatu Orrialde-jauzia',pagebreakAlt:'Page Break',unlink:'Kendu Esteka',undo:'Desegin',redo:'Berregin',common:{browseServer:'Zerbitzaria arakatu',url:'URL',protocol:'Protokoloa',upload:'Gora kargatu',uploadSubmit:'Zerbitzarira bidalia',image:'Irudia',flash:'Flasha',form:'Formularioa',checkbox:'Kontrol-laukia',radio:'Aukera-botoia',textField:'Testu Eremua',textarea:'Testu-area',hiddenField:'Ezkutuko Eremua',button:'Botoia',select:'Hautespen Eremua',imageButton:'Irudi Botoia',notSet:'<Ezarri gabe>',id:'Id',name:'Izena',langDir:'Hizkuntzaren Norabidea',langDirLtr:'Ezkerretik Eskumara(LTR)',langDirRtl:'Eskumatik Ezkerrera (RTL)',langCode:'Hizkuntza Kodea',longDescr:'URL Deskribapen Luzea',cssClass:'Estilo-orriko Klaseak',advisoryTitle:'Izenburua',cssStyle:'Estiloa',ok:'Ados',cancel:'Utzi',close:'Close',preview:'Preview',generalTab:'Orokorra',advancedTab:'Aurreratua',validateNumberFailed:'Balio hau ez da zenbaki bat.',confirmNewPage:'Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?',confirmCancel:'Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Zabalera',height:'Altuera',align:'Lerrokatu',alignLeft:'Ezkerrera',alignRight:'Eskuman',alignCenter:'Erdian',alignTop:'Goian',alignMiddle:'Erdian',alignBottom:'Behean',invalidHeight:'Altuera zenbaki bat izan behar da.',invalidWidth:'Zabalera zenbaki bat izan behar da.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, erabilezina</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Txertatu Karaktere Berezia',title:'Karaktere Berezia Aukeratu',options:'Special Character Options'},link:{toolbar:'Txertatu/Editatu Esteka',other:'<other>',menu:'Aldatu Esteka',title:'Esteka',info:'Estekaren Informazioa',target:'Target (Helburua)',upload:'Gora kargatu',advanced:'Aurreratua',type:'Esteka Mota',toUrl:'URL',toAnchor:'Aingura orrialde honetan',toEmail:'ePosta',targetFrame:'<marko>',targetPopup:'<popup leihoa>',targetFrameName:'Marko Helburuaren Izena',targetPopupName:'Popup Leihoaren Izena',popupFeatures:'Popup Leihoaren Ezaugarriak',popupResizable:'Tamaina Aldakorra',popupStatusBar:'Egoera Barra',popupLocationBar:'Kokaleku Barra',popupToolbar:'Tresna Barra',popupMenuBar:'Menu Barra',popupFullScreen:'Pantaila Osoa (IE)',popupScrollBars:'Korritze Barrak',popupDependent:'Menpekoa (Netscape)',popupLeft:'Ezkerreko Posizioa',popupTop:'Goiko Posizioa',id:'Id',langDir:'Hizkuntzaren Norabidea',langDirLTR:'Ezkerretik Eskumara(LTR)',langDirRTL:'Eskumatik Ezkerrera (RTL)',acccessKey:'Sarbide-gakoa',name:'Izena',langCode:'Hizkuntzaren Norabidea',tabIndex:'Tabulazio Indizea',advisoryTitle:'Izenburua',advisoryContentType:'Eduki Mota (Content Type)',cssClasses:'Estilo-orriko Klaseak',charset:'Estekatutako Karaktere Multzoa',styles:'Estiloa',rel:'Relationship',selectAnchor:'Aingura bat hautatu',anchorName:'Aingura izenagatik',anchorId:'Elementuaren ID-gatik',emailAddress:'ePosta Helbidea',emailSubject:'Mezuaren Gaia',emailBody:'Mezuaren Gorputza',noAnchors:'(Ez daude aingurak eskuragarri dokumentuan)',noUrl:'Mesedez URL esteka idatzi',noEmail:'Mesedez ePosta helbidea idatzi'},anchor:{toolbar:'Aingura',menu:'Ainguraren Ezaugarriak',title:'Ainguraren Ezaugarriak',name:'Ainguraren Izena',errorName:'Idatzi ainguraren izena',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Bilatu eta Ordeztu',find:'Bilatu',replace:'Ordezkatu',findWhat:'Zer bilatu:',replaceWith:'Zerekin ordeztu:',notFoundMsg:'Idatzitako testua ez da topatu.',matchCase:'Maiuskula/minuskula',matchWord:'Esaldi osoa bilatu',matchCyclic:'Bilaketa ziklikoa',replaceAll:'Ordeztu Guztiak',replaceSuccessMsg:'Zenbat aldiz ordeztua: %1'},table:{toolbar:'Taula',title:'Taularen Ezaugarriak',menu:'Taularen Ezaugarriak',deleteTable:'Ezabatu Taula',rows:'Lerroak',columns:'Zutabeak',border:'Ertzaren Zabalera',widthPx:'pixel',widthPc:'ehuneko',widthUnit:'width unit',cellSpace:'Gelaxka arteko tartea',cellPad:'Gelaxken betegarria',caption:'Epigrafea',summary:'Laburpena',headers:'Goiburuak',headersNone:'Bat ere ez',headersColumn:'Lehen zutabea',headersRow:'Lehen lerroa',headersBoth:'Biak',invalidRows:'Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.',invalidCols:'Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.',invalidBorder:'Ertzaren tamaina zenbaki bat izan behar da.',invalidWidth:'Taularen zabalera zenbaki bat izan behar da.',invalidHeight:'Taularen altuera zenbaki bat izan behar da.',invalidCellSpacing:'Gelaxka arteko tartea zenbaki bat izan behar da.',invalidCellPadding:'Gelaxken betegarria zenbaki bat izan behar da.',cell:{menu:'Gelaxka',insertBefore:'Txertatu Gelaxka Aurretik',insertAfter:'Txertatu Gelaxka Ostean',deleteCell:'Kendu Gelaxkak',merge:'Batu Gelaxkak',mergeRight:'Elkartu Eskumara',mergeDown:'Elkartu Behera',splitHorizontal:'Banatu Gelaxkak Horizontalki',splitVertical:'Banatu Gelaxkak Bertikalki',title:'Gelaxken Ezaugarriak',cellType:'Gelaxka Mota',rowSpan:'Hedatutako Lerroak',colSpan:'Hedatutako Zutabeak',wordWrap:'Itzulbira',hAlign:'Lerrokatze Horizontala',vAlign:'Lerrokatze Bertikala',alignBaseline:'Oinarri-lerroan',bgColor:'Fondoaren Kolorea',borderColor:'Ertzaren Kolorea',data:'Data',header:'Goiburua',yes:'Bai',no:'Ez',invalidWidth:'Gelaxkaren zabalera zenbaki bat izan behar da.',invalidHeight:'Gelaxkaren altuera zenbaki bat izan behar da.',invalidRowSpan:'Lerroen hedapena zenbaki osoa izan behar da.',invalidColSpan:'Zutabeen hedapena zenbaki osoa izan behar da.',chooseColor:'Choose'},row:{menu:'Lerroa',insertBefore:'Txertatu Lerroa Aurretik',insertAfter:'Txertatu Lerroa Ostean',deleteRow:'Ezabatu Lerroak'},column:{menu:'Zutabea',insertBefore:'Txertatu Zutabea Aurretik',insertAfter:'Txertatu Zutabea Ostean',deleteColumn:'Ezabatu Zutabeak'}},button:{title:'Botoiaren Ezaugarriak',text:'Testua (Balorea)',type:'Mota',typeBtn:'Botoia',typeSbm:'Bidali',typeRst:'Garbitu'},checkboxAndRadio:{checkboxTitle:'Kontrol-laukiko Ezaugarriak',radioTitle:'Aukera-botoiaren Ezaugarriak',value:'Balorea',selected:'Hautatuta'},form:{title:'Formularioaren Ezaugarriak',menu:'Formularioaren Ezaugarriak',action:'Ekintza',method:'Metodoa',encoding:'Kodeketa'},select:{title:'Hautespen Eremuaren Ezaugarriak',selectInfo:'Informazioa',opAvail:'Aukera Eskuragarriak',value:'Balorea',size:'Tamaina',lines:'lerro kopurura',chkMulti:'Hautaketa anitzak baimendu',opText:'Testua',opValue:'Balorea',btnAdd:'Gehitu',btnModify:'Aldatu',btnUp:'Gora',btnDown:'Behera',btnSetValue:'Aukeratutako balorea ezarri',btnDelete:'Ezabatu'},textarea:{title:'Testu-arearen Ezaugarriak',cols:'Zutabeak',rows:'Lerroak'},textfield:{title:'Testu Eremuaren Ezaugarriak',name:'Izena',value:'Balorea',charWidth:'Zabalera',maxChars:'Zenbat karaktere gehienez',type:'Mota',typeText:'Testua',typePass:'Pasahitza'},hidden:{title:'Ezkutuko Eremuaren Ezaugarriak',name:'Izena',value:'Balorea'},image:{title:'Irudi Ezaugarriak',titleButton:'Irudi Botoiaren Ezaugarriak',menu:'Irudi Ezaugarriak',infoTab:'Irudi informazioa',btnUpload:'Zerbitzarira bidalia',upload:'Gora Kargatu',alt:'Ordezko Testua',lockRatio:'Erlazioa Blokeatu',resetSize:'Tamaina Berrezarri',border:'Ertza',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Mesedez Irudiaren URLa idatzi',linkTab:'Esteka',button2Img:'Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?',img2Button:'Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flasharen Ezaugarriak',propertiesTab:'Ezaugarriak',title:'Flasharen Ezaugarriak',chkPlay:'Automatikoki Erreproduzitu',chkLoop:'Begizta',chkMenu:'Flasharen Menua Gaitu',chkFull:'Onartu Pantaila osoa',scale:'Eskalatu',scaleAll:'Dena erakutsi',scaleNoBorder:'Ertzik gabe',scaleFit:'Doitu',access:'Scriptak baimendu',accessAlways:'Beti',accessSameDomain:'Domeinu berdinekoak',accessNever:'Inoiz ere ez',alignAbsBottom:'Abs Behean',alignAbsMiddle:'Abs Erdian',alignBaseline:'Oinan',alignTextTop:'Testua Goian',quality:'Kalitatea',qualityBest:'Hoberena',qualityHigh:'Altua',qualityAutoHigh:'Auto Altua',qualityMedium:'Ertaina',qualityAutoLow:'Auto Baxua',qualityLow:'Baxua',windowModeWindow:'Leihoa',windowModeOpaque:'Opakoa',windowModeTransparent:'Gardena',windowMode:'Leihoaren modua',flashvars:'Flash Aldagaiak',bgcolor:'Atzeko kolorea',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Mesedez URL esteka idatzi',validateHSpace:'HSpace zenbaki bat izan behar da.',validateVSpace:'VSpace zenbaki bat izan behar da.'},spellCheck:{toolbar:'Ortografia',title:'Ortografia zuzenketa',notAvailable:'Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.',errorLoading:'Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.',notInDic:'Ez dago hiztegian',changeTo:'Honekin ordezkatu',btnIgnore:'Ezikusi',btnIgnoreAll:'Denak Ezikusi',btnReplace:'Ordezkatu',btnReplaceAll:'Denak Ordezkatu',btnUndo:'Desegin',noSuggestions:'- Iradokizunik ez -',progress:'Zuzenketa ortografikoa martxan...',noMispell:'Zuzenketa ortografikoa bukatuta: Akatsik ez',noChanges:'Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu',oneChange:'Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da',manyChanges:'Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira',ieSpellDownload:'Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?'},smiley:{toolbar:'Aurpegierak',title:'Aurpegiera Sartu',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 elementua'},numberedlist:'Zenbakidun Zerrenda',bulletedlist:'Buletdun Zerrenda',indent:'Handitu Koska',outdent:'Txikitu Koska',justify:{left:'Lerrokatu Ezkerrean',center:'Lerrokatu Erdian',right:'Lerrokatu Eskuman',block:'Justifikatu'},blockquote:'Aipamen blokea',clipboard:{title:'Itsatsi',cutError:'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).',copyError:'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).',pasteMsg:'Mesedez teklatua erabilita (<STRONG>Ctrl/Cmd+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.',securityMsg:'Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?',toolbar:'Itsatsi Word-etik',title:'Itsatsi Word-etik',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Testu Arrunta bezala Itsatsi',title:'Testu Arrunta bezala Itsatsi'},templates:{button:'Txantiloiak',title:'Eduki Txantiloiak',options:'Template Options',insertOption:'Ordeztu oraingo edukiak',selectPromptMsg:'Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):',emptyListMsg:'(Ez dago definitutako txantiloirik)'},showBlocks:'Blokeak erakutsi',stylesCombo:{label:'Estiloa',panelTitle:'Formatting Styles',panelTitle1:'Bloke Estiloak',panelTitle2:'Inline Estiloak',panelTitle3:'Objektu Estiloak'},format:{label:'Formatua',panelTitle:'Formatua',tag_p:'Arrunta',tag_pre:'Formateatua',tag_address:'Helbidea',tag_h1:'Izenburua 1',tag_h2:'Izenburua 2',tag_h3:'Izenburua 3',tag_h4:'Izenburua 4',tag_h5:'Izenburua 5',tag_h6:'Izenburua 6',tag_div:'Paragrafoa (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Letra-tipoa',voiceLabel:'Letra-tipoa',panelTitle:'Letra-tipoa'},fontSize:{label:'Tamaina',voiceLabel:'Tamaina',panelTitle:'Tamaina'},colorButton:{textColorTitle:'Testu Kolorea',bgColorTitle:'Atzeko kolorea',panelTitle:'Colors',auto:'Automatikoa',more:'Kolore gehiago...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Ortografia Zuzenketa Idatzi Ahala (SCAYT)',opera_title:'Not supported by Opera',enable:'Gaitu SCAYT',disable:'Desgaitu SCAYT',about:'SCAYTi buruz',toggle:'SCAYT aldatu',options:'Aukerak',langs:'Hizkuntzak',moreSuggestions:'Iradokizun gehiago',ignore:'Baztertu',ignoreAll:'Denak baztertu',addWord:'Hitza Gehitu',emptyDic:'Hiztegiaren izena ezin da hutsik egon.',optionsTab:'Aukerak',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Hizkuntzak',dictionariesTab:'Hiztegiak',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Honi buruz'},about:{title:'CKEditor(r)i buruz',dlgTitle:'CKEditor(r)i buruz',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Lizentziari buruzko informazioa gure webgunean:',copy:'Copyright © $1. Eskubide guztiak erreserbaturik.'},maximize:'Maximizatu',minimize:'Minimize',fakeobjects:{anchor:'Aingura',flash:'Flash Animazioa',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Objektu ezezaguna'},resize:'Arrastatu tamaina aldatzeko',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Dokumentuaren Ezarpenak',title:'Dokumentuaren Ezarpenak',design:'Design',meta:'Meta Informazioa',chooseColor:'Choose',other:'<other>',docTitle:'Orriaren Izenburua',charset:'Karaktere Multzoaren Kodeketa',charsetOther:'Beste Karaktere Multzoko Kodeketa',charsetASCII:'ASCII',charsetCE:'Erdialdeko Europakoa',charsetCT:'Txinatar Tradizionala (Big5)',charsetCR:'Zirilikoa',charsetGR:'Grekoa',charsetJP:'Japoniarra',charsetKR:'Korearra',charsetTR:'Turkiarra',charsetUN:'Unicode (UTF-8)',charsetWE:'Mendebaldeko Europakoa',docType:'Document Type Goiburua',docTypeOther:'Beste Document Type Goiburua',xhtmlDec:'XHTML Ezarpenak',bgColor:'Atzeko Kolorea',bgImage:'Atzeko Irudiaren URL-a',bgFixed:'Korritze gabeko Atzealdea',txtColor:'Testu Kolorea',margin:'Orrialdearen marjinak',marginTop:'Goian',marginLeft:'Ezkerrean',marginRight:'Eskuman',marginBottom:'Behean',metaKeywords:'Dokumentuaren Gako-hitzak (komarekin bananduta)',metaDescription:'Dokumentuaren Deskribapena',metaAuthor:'Egilea',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/fa.js b/lang/fa.js new file mode 100644 index 0000000..d10869d --- /dev/null +++ b/lang/fa.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.fa={dir:'rtl',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Ù Ùبع',newPage:'برگÙÙ´ تازÙ',save:'ذخÛرÙ',preview:'Ù¾ÛØ´Ù٠اÛØ´',cut:'برش',copy:'Ú©Ù¾Û',paste:'ÚسباÙدÙ',print:'Úاپ',underline:'خطزÛردار',bold:'درشت',italic:'خ٠ÛدÙ',selectAll:'گزÛÙØ´ ÙÙ Ù',removeFormat:'برداشت٠Ùر٠ت',strike:'Ù ÛاÙخط',subscript:'زÛرÙÙÛس',superscript:'باÙاÙÙÛس',horizontalrule:'Ú¯ÙجاÙد٠خط ÙاÙÙÛ',pagebreak:'Ú¯ÙجاÙØ¯Ù Ø´Ú©Ø³ØªÚ¯Û ÙپاÛا٠ÙبرگÙ',pagebreakAlt:'Page Break',unlink:'برداشت٠پÛÙÙد',undo:'ÙاÚÛدÙ',redo:'بازÚÛدÙ',common:{browseServer:'ÙÙرستÙ٠اÛÛ Ø³Ø±Ùر',url:'URL',protocol:'پرÙتکÙ',upload:'اÙتÙا٠ب٠سرÙر',uploadSubmit:'ب٠سرÙر بÙرست',image:'تصÙÛر',flash:'Flash',form:'Ùر٠',checkbox:'خاÙÙÙ´ گزÛÙÙاÛ',radio:'دک٠ÙÙ´ رادÛÙÛÛ',textField:'ÙÛÙد ٠تÙÛ',textarea:'ÙاØÛÙÙ´ ٠تÙÛ',hiddenField:'ÙÛÙد Ù¾ÙÙاÙ',button:'دک٠Ù',select:'ÙÛÙد ÚÙدگزÛÙÙاÛ',imageButton:'دک٠ÙÙ´ تصÙÛرÛ',notSet:'<تعÛÙÙشدÙ>',id:'Ø´ÙاسÙ',name:'Ùا٠',langDir:'جÙتÙÙ Ø§Û Ø²Ø¨Ø§Ù',langDirLtr:'ÚÙ¾ ب٠راست (LTR)',langDirRtl:'راست ب٠ÚÙ¾ (RTL)',langCode:'کد زباÙ',longDescr:'URL تÙصÛÙ Ø·ÙÙاÙÛ',cssClass:'Ú©ÙاسÙØ§Û Ø´ÛÙÙÙا٠Ù(Stylesheet)',advisoryTitle:'عÙÙا٠ک٠کÛ',cssStyle:'Ø´ÛÙÙ(style)',ok:'پذÛرش',cancel:'اÙصراÙ',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Ù¾ÛشرÙتÙ',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Ù¾ÙÙا',height:'درازا',align:'ÚÛÙØ´',alignLeft:'ÚÙ¾',alignRight:'راست',alignCenter:'Ùسط',alignTop:'باÙا',alignMiddle:'Ùسط',alignBottom:'پائÛÙ',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Ú¯ÙجاÙد٠ÙÙÛسÙÙ´ ÙÛÚÙ',title:'گزÛÙØ´ ÙÙÛسÙÙ´ÙÛÚÙ',options:'Special Character Options'},link:{toolbar:'Ú¯ÙجاÙدÙ/ÙÛراÛØ´ ÙÙ¾ÛÙÙد',other:'<ساÛر>',menu:'ÙÛراÛØ´ Ù¾ÛÙÙد',title:'Ù¾ÛÙÙد',info:'اطÙاعات Ù¾ÛÙÙد',target:'Ù Ùصد',upload:'اÙتÙا٠ب٠سرÙر',advanced:'Ù¾ÛشرÙتÙ',type:'ÙÙع Ù¾ÛÙÙد',toUrl:'URL',toAnchor:'ÙÙگر در ÙÙ Û٠صÙØÙ',toEmail:'پست اÙکترÙÙÛÚ©Û',targetFrame:'<ÙرÛÙ >',targetPopup:'<Ù¾ÙجرÙÙ´ پاپاپ>',targetFrameName:'Ùا٠ÙرÛÙ Ù Ùصد',targetPopupName:'Ùا٠پÙجرÙÙ´ پاپاپ',popupFeatures:'ÙÛÚÚ¯ÛÙØ§Û Ù¾ÙجرÙÙ´ پاپاپ',popupResizable:'Resizable',popupStatusBar:'ÙÙار ÙضعÛت',popupLocationBar:'ÙÙار Ù ÙÙعÛت',popupToolbar:'ÙÙارابزار',popupMenuBar:'ÙÙار Ù ÙÙ',popupFullScreen:'ت٠ا٠صÙØÙ (IE)',popupScrollBars:'Ù ÛÙÙÙØ§Û Ù¾Û٠اÛØ´',popupDependent:'Ùابست٠(Netscape)',popupLeft:'Ù ÙÙعÛت ÙÚÙ¾',popupTop:'Ù ÙÙعÛت ÙباÙا',id:'Id',langDir:'جÙتÙÙ Ø§Û Ø²Ø¨Ø§Ù',langDirLTR:'ÚÙ¾ ب٠راست (LTR)',langDirRTL:'راست ب٠ÚÙ¾ (RTL)',acccessKey:'Ú©ÙÛد دستÛابÛ',name:'Ùا٠',langCode:'جÙتÙÙ Ø§Û Ø²Ø¨Ø§Ù',tabIndex:'Ù٠اÛÙÙ´ Ø¯Ø³ØªØ±Ø³Û Ø¨Ø§ Tab',advisoryTitle:'عÙÙا٠ک٠کÛ',advisoryContentType:'ÙÙع Ù ØتÙØ§Û Ú©Ù Ú©Û',cssClasses:'Ú©ÙاسÙØ§Û Ø´ÛÙÙÙا٠Ù(Stylesheet)',charset:'ÙÙÛسÙگا٠٠Ùبع ÙÙ¾ÛÙÙدشدÙ',styles:'Ø´ÛÙÙ(style)',rel:'Relationship',selectAnchor:'ÛÚ© ÙÙگر برگزÛÙÛد',anchorName:'با Ùا٠ÙÙگر',anchorId:'با Ø´ÙاسÙÙ´ اÙ٠اÙ',emailAddress:'ÙشاÙÛ Ù¾Ø³Øª اÙکترÙÙÛÚ©Û',emailSubject:'Ù ÙضÙع Ù¾Ûا٠',emailBody:'٠ت٠پÛا٠',noAnchors:'(در اÛ٠سÙد ÙÙÚ¯Ø±Û Ø¯Ø±Ø¯Ø³ØªØ±Ø³ ÙÛست)',noUrl:'ÙØ·Ùا URL Ù¾ÛÙÙد را بÙÙÛسÛد',noEmail:'ÙØ·Ùا ÙشاÙÛ Ù¾Ø³Øª اÙکترÙÙÛÚ©Û Ø±Ø§ بÙÙÛسÛد'},anchor:{toolbar:'Ú¯ÙجاÙدÙ/ÙÛراÛØ´ ÙÙÙگر',menu:'ÙÛÚÚ¯ÛÙØ§Û ÙÙگر',title:'ÙÛÚÚ¯ÛÙØ§Û ÙÙگر',name:'Ùا٠ÙÙگر',errorName:'ÙØ·Ùا Ùا٠ÙÙگر را بÙÙÛسÛد',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'جستج٠٠جاÛگزÛÙÛ',find:'جستجÙ',replace:'جاÛگزÛÙÛ',findWhat:'ÚÙÚÛز را Ù ÛÛابÛد:',replaceWith:'جاÛگزÛÙÛ Ø¨Ø§:',notFoundMsg:'٠ت٠٠ÙردÙظر ÛاÙت Ùشد.',matchCase:'Ù٠ساÙÛ Ø¯Ø± Ø¨Ø²Ø±Ú¯Û Ù Ú©ÙÚÚ©Û ÙÙÛسÙÙا',matchWord:'Ù٠ساÙÛ Ø¨Ø§ ÙاÚÙÙ´ کا٠Ù',matchCyclic:'Match cyclic',replaceAll:'جاÛگزÛÙÛ ÙÙ ÙÙ´ ÛاÙتÙÙا',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'جدÙÙ',title:'ÙÛÚÚ¯ÛÙØ§Û Ø¬Ø¯ÙÙ',menu:'ÙÛÚÚ¯ÛÙØ§Û Ø¬Ø¯ÙÙ',deleteTable:'پاککرد٠جدÙÙ',rows:'سطرÙا',columns:'ستÙÙÙا',border:'اÙدازÙÙ´ ÙبÙ',widthPx:'Ù¾ÛکسÙ',widthPc:'درصد',widthUnit:'width unit',cellSpace:'ÙاصÙÙÙ´ Ù Ûا٠سÙÙÙÙا',cellPad:'ÙاصÙÙÙ´ پرشد٠در سÙÙÙ',caption:'عÙÙاÙ',summary:'Ø®ÙاصÙ',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'سÙÙÙ',insertBefore:'اÙزÙد٠سÙÙÙ Ùب٠از',insertAfter:'اÙزÙد٠سÙÙ٠بعد از',deleteCell:'Øذ٠سÙÙÙÙا',merge:'ادغا٠سÙÙÙÙا',mergeRight:'ادغا٠ب٠راست',mergeDown:'ادغا٠ب٠پاÛÛÙ',splitHorizontal:'جدا کرد٠اÙÙÛ Ø³ÙÙÙ',splitVertical:'جدا کرد٠ع٠ÙØ¯Û Ø³ÙÙÙ',title:'ÙÛÚÚ¯ÛÙØ§Û Ø³ÙÙÙ',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'سطر',insertBefore:'اÙزÙد٠سطر Ùب٠از',insertAfter:'اÙزÙد٠سطر بعد از',deleteRow:'Øذ٠سطرÙا'},column:{menu:'ستÙÙ',insertBefore:'اÙزÙد٠ستÙÙ Ùب٠از',insertAfter:'اÙزÙد٠ستÙ٠بعد از',deleteColumn:'Øذ٠ستÙÙÙا'}},button:{title:'ÙÛÚÚ¯ÛÙØ§Û Ø¯Ú©Ù Ù',text:'٠ت٠(Ù Ùدار)',type:'ÙÙع',typeBtn:'دک٠Ù',typeSbm:'Submit',typeRst:'بازÙشاÙÛ (Reset)'},checkboxAndRadio:{checkboxTitle:'ÙÛÚÚ¯ÛÙØ§Û Ø®Ø§ÙÙÙ´ گزÛÙÙاÛ',radioTitle:'ÙÛÚÚ¯ÛÙØ§Û Ø¯Ú©Ù ÙÙ´ رادÛÙÛÛ',value:'Ù Ùدار',selected:'برگزÛدÙ'},form:{title:'ÙÛÚÚ¯ÛÙØ§Û Ùر٠',menu:'ÙÛÚÚ¯ÛÙØ§Û Ùر٠',action:'رÙÛداد',method:'٠تد',encoding:'Encoding'},select:{title:'ÙÛÚÚ¯ÛÙØ§Û ÙÛÙد ÚÙدگزÛÙÙاÛ',selectInfo:'اطÙاعات',opAvail:'گزÛÙÙÙØ§Û Ø¯Ø±Ø¯Ø³ØªØ±Ø³',value:'Ù Ùدار',size:'اÙدازÙ',lines:'خطÙØ·',chkMulti:'گزÛÙØ´ ÚÙدگاÙÙ ÙراÙ٠باشد',opText:'٠تÙ',opValue:'Ù Ùدار',btnAdd:'اÙزÙدÙ',btnModify:'ÙÛراÛØ´',btnUp:'باÙا',btnDown:'پائÛÙ',btnSetValue:'تÙظÛ٠ب٠عÙÙا٠٠Ùدار ÙبرگزÛدÙ',btnDelete:'پاککردÙ'},textarea:{title:'ÙÛÚÚ¯ÛÙØ§Û ÙاØÛÙÙ´ ٠تÙÛ',cols:'ستÙÙÙا',rows:'سطرÙا'},textfield:{title:'ÙÛÚÚ¯ÛÙØ§Û ÙÛÙد ٠تÙÛ',name:'Ùا٠',value:'Ù Ùدار',charWidth:'Ù¾ÙÙØ§Û ÙÙÛسÙ',maxChars:'بÛØ´ÛÙÙÙ´ ÙÙÛسÙÙا',type:'ÙÙع',typeText:'٠تÙ',typePass:'گذرÙاÚÙ'},hidden:{title:'ÙÛÚÚ¯ÛÙØ§Û ÙÛÙد Ù¾ÙÙاÙ',name:'Ùا٠',value:'Ù Ùدار'},image:{title:'ÙÛÚÚ¯ÛÙØ§Û ØªØµÙÛر',titleButton:'ÙÛÚÚ¯ÛÙØ§Û Ø¯Ú©Ù ÙÙ´ تصÙÛرÛ',menu:'ÙÛÚÚ¯ÛÙØ§Û ØªØµÙÛر',infoTab:'اطÙاعات تصÙÛر',btnUpload:'ب٠سرÙر بÙرست',upload:'اÙتÙا٠ب٠سرÙر',alt:'٠ت٠جاÛگزÛÙ',lockRatio:'ÙÙÙکرد٠ÙÙسبت',resetSize:'بازÙشاÙÛ Ø§ÙدازÙ',border:'ÙبÙ',hSpace:'ÙاصÙÙÙ´ اÙÙÛ',vSpace:'ÙاصÙÙÙ´ ع٠ÙدÛ',alertUrl:'ÙØ·Ùا URL تصÙÛر را بÙÙÛسÛد',linkTab:'Ù¾ÛÙÙد',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ÙÛÚÚ¯ÛÙØ§Û Flash',propertiesTab:'Properties',title:'ÙÛÚÚ¯ÛÙØ§Û Flash',chkPlay:'آغاز ÙØ®Ùدکار',chkLoop:'Ø§Ø¬Ø±Ø§Û Ù¾ÛاپÛ',chkMenu:'دردسترسبÙد٠٠ÙÙÛ Flash',chkFull:'Allow Fullscreen',scale:'Ù ÙÛاس',scaleAll:'Ù٠اÛØ´ ÙÙ Ù',scaleNoBorder:'بدÙ٠کراÙ',scaleFit:'جاÛÚ¯ÛØ±Û Ú©Ø§Ù Ù',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'پائÛÙ Ù Ø·ÙÙ',alignAbsMiddle:'Ùسط Ù Ø·ÙÙ',alignBaseline:'خطپاÛÙ',alignTextTop:'٠ت٠باÙا',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'رÙÚ¯ پسز٠ÛÙÙ',hSpace:'ÙاصÙÙÙ´ اÙÙÛ',vSpace:'ÙاصÙÙÙ´ ع٠ÙدÛ',validateSrc:'ÙØ·Ùا URL Ù¾ÛÙÙد را بÙÙÛسÛد',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'در ÙاÚÙÙا٠٠ÛاÙت Ùشد',changeTo:'تغÛÛر بÙ',btnIgnore:'ÚØ´Ù Ù¾ÙØ´Û',btnIgnoreAll:'ÚØ´Ù Ù¾ÙØ´Û ÙÙ Ù',btnReplace:'جاÛگزÛÙÛ',btnReplaceAll:'جاÛگزÛÙÛ ÙÙ Ù',btnUndo:'ÙاÚÛÙØ´',noSuggestions:'- Ù¾ÛØ´ÙÙØ§Ø¯Û ÙÛست -',progress:'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا در Øا٠اÙجا٠...',noMispell:'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا اÙجا٠شد. ÙÛÚ ØºÙطا٠ÙØ§Ø¦Û ÛاÙت Ùشد',noChanges:'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا اÙجا٠شد. ÙÛÚ ÙاÚÙØ§Û ØªØºÛÛر ÙÛاÙت',oneChange:'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا اÙجا٠شد. ÛÚ© ÙاÚ٠تغÛÛر ÛاÙت',manyChanges:'Ø¨Ø±Ø±Ø³Û Ø§Ù Ùا اÙجا٠شد. %1 ÙاÚ٠تغÛÛر ÛاÙت',ieSpellDownload:'بررسÛÚ©ÙÙدÙÙ´ ا٠Ùا Ùصب Ùشد٠است. Ø¢Ûا Ù ÛØ®ÙاÙÛد آ٠را Ù٠اکÙÙ٠درÛاÙت Ú©ÙÛدØ'},smiley:{toolbar:'Ø®ÙداÙÚ©',title:'Ú¯ÙجاÙد٠خÙداÙÚ©',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ÙÙرست ش٠ارÙدار',bulletedlist:'ÙÙرست ÙÙØ·ÙاÛ',indent:'اÙزاÛØ´ تÙرÙتگÛ',outdent:'کاÙØ´ تÙرÙتگÛ',justify:{left:'ÚÙ¾ÚÛÙ',center:'Ù ÛاÙÚÛÙ',right:'راستÚÛÙ',block:'بÙÙÚ©ÚÛÙ'},blockquote:'بÙÙÚ© ÙÙÙ ÙÙÙ',clipboard:{title:'ÚسباÙدÙ',cutError:'تÙظÛ٠ات ا٠ÙÛØªÛ Ù Ø±Ùرگر ش٠ا اجاز٠ÙÙ ÛدÙد Ú©Ù ÙÛراÛشگر ب٠طÙر Ø®Ùدکار ع٠ÙکردÙØ§Û Ø¨Ø±Ø´ را اÙجا٠دÙد. ÙØ·Ùا با دک٠ÙÙØ§Û ØµÙØÙÚ©ÙÛد اÛ٠کار را اÙجا٠دÙÛد (Ctrl/Cmd+X).',copyError:'تÙظÛ٠ات ا٠ÙÛØªÛ Ù Ø±Ùرگر ش٠ا اجاز٠ÙÙ ÛدÙد Ú©Ù ÙÛراÛشگر ب٠طÙر Ø®Ùدکار ع٠ÙکردÙØ§Û Ú©Ù¾Ûکرد٠را اÙجا٠دÙد. ÙØ·Ùا با دک٠ÙÙØ§Û ØµÙØÙÚ©ÙÛد اÛ٠کار را اÙجا٠دÙÛد (Ctrl/Cmd+C).',pasteMsg:'ÙØ·Ùا ٠ت٠را با Ú©ÙÛدÙØ§Û (<STRONG>Ctrl/Cmd+V</STRONG>) در اÛ٠جعبÙÙ´ ٠تÙÛ Ø¨ÚسباÙÛد Ù <STRONG>پذÛرش</STRONG> را بزÙÛد.',securityMsg:'ب٠خاطر تÙظÛ٠ات ا٠ÙÛØªÛ Ù Ø±Ùرگر Ø´Ù Ø§Ø ÙÛراÛشگر ÙÙ ÛتÙاÙد Ø¯Ø³ØªØ±Ø³Û Ù Ø³ØªÙÛ٠ب٠دادÙÙØ§Û clipboard داشت٠باشد. ش٠ا باÛد دÙبار٠آÙرا در اÛÙ Ù¾Ùجر٠بÚسباÙÛد.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'ÚسباÙد٠از Word',title:'ÚسباÙد٠از Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'ÚسباÙد٠ب٠عÙÙا٠٠ت٠ÙسادÙ',title:'ÚسباÙد٠ب٠عÙÙا٠٠ت٠ÙسادÙ'},templates:{button:'اÙÚ¯ÙÙا',title:'اÙÚ¯ÙÙØ§Û Ù ØتÙÛات',options:'Template Options',insertOption:'Ù ØتÙÛات Ú©ÙÙÙÛ Ø¬Ø§ÛگزÛÙ Ø´ÙÙد',selectPromptMsg:'ÙØ·Ùا اÙÚ¯ÙÛ Ù ÙردÙظر را Ø¨Ø±Ø§Û Ø¨Ø§Ø²Ú©Ø±Ø¯Ù Ø¯Ø± ÙÛراÛشگر برگزÛÙÛد<br>(Ù ØتÙÛات Ú©ÙÙÙÛ Ø§Ø² دست Ø®ÙاÙÙد رÙت):',emptyListMsg:'(اÙÚ¯ÙØ¦Û ØªØ¹Ø±ÛÙ Ùشد٠است)'},showBlocks:'Ù٠اÛØ´ بÙÙÚ©Ùا',stylesCombo:{label:'سبک',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Ùر٠ت',panelTitle:'Ùر٠ت',tag_p:'Ùر٠اÙ',tag_pre:'Ùر٠تشدÙ',tag_address:'آدرس',tag_h1:'سرÙÙÛس 1',tag_h2:'سرÙÙÛس 2',tag_h3:'سرÙÙÛس 3',tag_h4:'سرÙÙÛس 4',tag_h5:'سرÙÙÛس 5',tag_h6:'سرÙÙÛس 6',tag_div:'بÙد'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ÙÙÙ ',voiceLabel:'Font',panelTitle:'ÙÙÙ '},fontSize:{label:'اÙدازÙ',voiceLabel:'Font Size',panelTitle:'اÙدازÙ'},colorButton:{textColorTitle:'رÙÚ¯ ٠تÙ',bgColorTitle:'رÙÚ¯ پسز٠ÛÙÙ',panelTitle:'Colors',auto:'Ø®Ùدکار',more:'رÙÚ¯ÙØ§Û Ø¨Ûشتر...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'ÙÛÚÚ¯ÛÙØ§Û Ø³Ùد',title:'ÙÛÚÚ¯ÛÙØ§Û Ø³Ùد',design:'Design',meta:'ÙرادادÙ',chooseColor:'Choose',other:'<ساÛر>',docTitle:'عÙÙا٠صÙØÙ',charset:'Ø±Ù Ø²Ú¯Ø°Ø§Ø±Û ÙÙÛسÙگاÙ',charsetOther:'Ø±Ù Ø²Ú¯Ø°Ø§Ø±Û ÙÙÛسÙگا٠دÛگر',charsetASCII:'ASCII',charsetCE:'ارÙÙ¾Ø§Û Ù Ø±Ú©Ø²Û',charsetCT:'ÚÛÙÛ Ø±Ø³Ù Û (Big5)',charsetCR:'سÛرÛÙÛÚ©',charsetGR:'ÛÙÙاÙÛ',charsetJP:'ÚاپÙÛ',charsetKR:'کرÙاÛ',charsetTR:'ترکÛ',charsetUN:'ÛÙÙÛÚ©Ùد (UTF-8)',charsetWE:'ارÙÙ¾Ø§Û ØºØ±Ø¨Û',docType:'عÙÙا٠ÙÙع سÙد',docTypeOther:'عÙÙا٠ÙÙع سÙد دÛگر',xhtmlDec:'شا٠٠تعارÛÙ XHTML',bgColor:'رÙÚ¯ پسز٠ÛÙÙ',bgImage:'URL تصÙÛر پسز٠ÛÙÙ',bgFixed:'پسز٠ÛÙÙÙ´ Ù¾Û٠اÛØ´ÙاپذÛر',txtColor:'رÙÚ¯ ٠تÙ',margin:'ØاشÛÙÙØ§Û ØµÙØÙ',marginTop:'باÙا',marginLeft:'ÚÙ¾',marginRight:'راست',marginBottom:'پاÛÛÙ',metaKeywords:'Ú©ÙÛدÙاÚگا٠Ù٠اÛÙÚ¯Ø°Ø§Ø±Û Ø³Ùد (با کا٠ا جدا Ø´ÙÙد)',metaDescription:'تÙصÛ٠سÙد',metaAuthor:'ÙÙÛسÙدÙ',metaCopyright:'Ú©Ù¾ÛراÛت',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/fi.js b/lang/fi.js new file mode 100644 index 0000000..66b84bc --- /dev/null +++ b/lang/fi.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.fi={dir:'ltr',editorTitle:'Rikastekstieditori, %1, paina ALT 0 nähdäksesi ohjeen.',toolbars:'Editor toolbars',editor:'Rikastekstieditori',source:'Koodi',newPage:'Tyhjennä',save:'Tallenna',preview:'Esikatsele',cut:'Leikkaa',copy:'Kopioi',paste:'Liitä',print:'Tulosta',underline:'Alleviivattu',bold:'Lihavoitu',italic:'Kursivoitu',selectAll:'Valitse kaikki',removeFormat:'Poista muotoilu',strike:'Yliviivattu',subscript:'Alaindeksi',superscript:'Yläindeksi',horizontalrule:'Lisää murtoviiva',pagebreak:'Lisää sivunvaihto',pagebreakAlt:'Sivunvaihto',unlink:'Poista linkki',undo:'Kumoa',redo:'Toista',common:{browseServer:'Selaa palvelinta',url:'Osoite',protocol:'Protokolla',upload:'Lisää tiedosto',uploadSubmit:'Lähetä palvelimelle',image:'Kuva',flash:'Flash',form:'Lomake',checkbox:'Valintaruutu',radio:'Radiopainike',textField:'Tekstikenttä',textarea:'Tekstilaatikko',hiddenField:'Piilokenttä',button:'Painike',select:'Valintakenttä',imageButton:'Kuvapainike',notSet:'<ei asetettu>',id:'Tunniste',name:'Nimi',langDir:'Kielen suunta',langDirLtr:'Vasemmalta oikealle (LTR)',langDirRtl:'Oikealta vasemmalle (RTL)',langCode:'Kielikoodi',longDescr:'Pitkän kuvauksen URL',cssClass:'Tyyliluokat',advisoryTitle:'Avustava otsikko',cssStyle:'Tyyli',ok:'OK',cancel:'Peruuta',close:'Sulje',preview:'Esikatselu',generalTab:'Yleinen',advancedTab:'Lisäominaisuudet',validateNumberFailed:'Arvon pitää olla numero.',confirmNewPage:'Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?',confirmCancel:'Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?',options:'Asetukset',target:'Kohde',targetNew:'Uusi ikkuna (_blank)',targetTop:'Päällimmäinen ikkuna (_top)',targetSelf:'Sama ikkuna (_self)',targetParent:'Ylemmän tason ikkuna (_parent)',langDirLTR:'Vasemmalta oikealle (LTR)',langDirRTL:'Oikealta vasemmalle (RTL)',styles:'Tyyli',cssClasses:'Tyylitiedoston luokat',width:'Leveys',height:'Korkeus',align:'Kohdistus',alignLeft:'Vasemmalle',alignRight:'Oikealle',alignCenter:'Keskelle',alignTop:'Ylös',alignMiddle:'Keskelle',alignBottom:'Alas',invalidHeight:'Korkeuden täytyy olla numero.',invalidWidth:'Leveyden täytyy olla numero.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, ei saatavissa</span>'},contextmenu:{options:'Pikavalikon ominaisuudet'},specialChar:{toolbar:'Lisää erikoismerkki',title:'Valitse erikoismerkki',options:'Erikoismerkin ominaisuudet'},link:{toolbar:'Lisää linkki/muokkaa linkkiä',other:'<muu>',menu:'Muokkaa linkkiä',title:'Linkki',info:'Linkin tiedot',target:'Kohde',upload:'Lisää tiedosto',advanced:'Lisäominaisuudet',type:'Linkkityyppi',toUrl:'Osoite',toAnchor:'Ankkuri tässä sivussa',toEmail:'Sähköposti',targetFrame:'<kehys>',targetPopup:'<popup ikkuna>',targetFrameName:'Kohdekehyksen nimi',targetPopupName:'Popup ikkunan nimi',popupFeatures:'Popup ikkunan ominaisuudet',popupResizable:'Venytettävä',popupStatusBar:'Tilarivi',popupLocationBar:'Osoiterivi',popupToolbar:'Vakiopainikkeet',popupMenuBar:'Valikkorivi',popupFullScreen:'Täysi ikkuna (IE)',popupScrollBars:'Vierityspalkit',popupDependent:'Riippuva (Netscape)',popupLeft:'Vasemmalta (px)',popupTop:'Ylhäältä (px)',id:'Tunniste',langDir:'Kielen suunta',langDirLTR:'Vasemmalta oikealle (LTR)',langDirRTL:'Oikealta vasemmalle (RTL)',acccessKey:'Pikanäppäin',name:'Nimi',langCode:'Kielen suunta',tabIndex:'Tabulaattori indeksi',advisoryTitle:'Avustava otsikko',advisoryContentType:'Avustava sisällön tyyppi',cssClasses:'Tyyliluokat',charset:'Linkitetty kirjaimisto',styles:'Tyyli',rel:'Suhde',selectAnchor:'Valitse ankkuri',anchorName:'Ankkurin nimen mukaan',anchorId:'Ankkurin ID:n mukaan',emailAddress:'Sähköpostiosoite',emailSubject:'Aihe',emailBody:'Viesti',noAnchors:'(Ei ankkureita tässä dokumentissa)',noUrl:'Linkille on kirjoitettava URL',noEmail:'Kirjoita sähköpostiosoite'},anchor:{toolbar:'Lisää ankkuri/muokkaa ankkuria',menu:'Ankkurin ominaisuudet',title:'Ankkurin ominaisuudet',name:'Nimi',errorName:'Ankkurille on kirjoitettava nimi',remove:'Remove Anchor'},list:{numberedTitle:'Numeroidun listan ominaisuudet',bulletedTitle:'Numeroimattoman listan ominaisuudet',type:'Tyyppi',start:'Alku',validateStartNumber:'Listan ensimmäisen numeron tulee olla kokonaisluku.',circle:'Ympyrä',disc:'Levy',square:'Neliö',none:'Ei mikään',notset:'<ei asetettu>',armenian:'Armeenialainen numerointi',georgian:'Georgialainen numerointi (an, ban, gan, etc.)',lowerRoman:'Pienet roomalaiset (i, ii, iii, iv, v, jne.)',upperRoman:'Isot roomalaiset (I, II, III, IV, V, jne.)',lowerAlpha:'Pienet aakkoset (a, b, c, d, e, jne.)',upperAlpha:'Isot aakkoset (A, B, C, D, E, jne.)',lowerGreek:'Pienet kreikkalaiset (alpha, beta, gamma, jne.)',decimal:'Desimaalit (1, 2, 3, jne.)',decimalLeadingZero:'Desimaalit, alussa nolla (01, 02, 03, jne.)'},findAndReplace:{title:'Etsi ja korvaa',find:'Etsi',replace:'Korvaa',findWhat:'Etsi mitä:',replaceWith:'Korvaa tällä:',notFoundMsg:'Etsittyä tekstiä ei löytynyt.',matchCase:'Sama kirjainkoko',matchWord:'Koko sana',matchCyclic:'Kierrä ympäri',replaceAll:'Korvaa kaikki',replaceSuccessMsg:'%1 esiintymä(ä) korvattu.'},table:{toolbar:'Taulu',title:'Taulun ominaisuudet',menu:'Taulun ominaisuudet',deleteTable:'Poista taulu',rows:'Rivit',columns:'Sarakkeet',border:'Rajan paksuus',widthPx:'pikseliä',widthPc:'prosenttia',widthUnit:'leveysyksikkö',cellSpace:'Solujen väli',cellPad:'Solujen sisennys',caption:'Otsikko',summary:'Yhteenveto',headers:'Ylätunnisteet',headersNone:'Ei',headersColumn:'Ensimmäinen sarake',headersRow:'Ensimmäinen rivi',headersBoth:'Molemmat',invalidRows:'Rivien määrän täytyy olla suurempi kuin 0.',invalidCols:'Sarakkeiden määrän täytyy olla suurempi kuin 0.',invalidBorder:'Reunan koon täytyy olla numero.',invalidWidth:'Taulun leveyden täytyy olla numero.',invalidHeight:'Taulun korkeuden täytyy olla numero.',invalidCellSpacing:'Solujen välin täytyy olla numero.',invalidCellPadding:'Solujen sisennyksen täytyy olla numero.',cell:{menu:'Solu',insertBefore:'Lisää solu eteen',insertAfter:'Lisää solu perään',deleteCell:'Poista solut',merge:'Yhdistä solut',mergeRight:'Yhdistä oikealla olevan kanssa',mergeDown:'Yhdistä alla olevan kanssa',splitHorizontal:'Jaa solu vaakasuunnassa',splitVertical:'Jaa solu pystysuunnassa',title:'Solun ominaisuudet',cellType:'Solun tyyppi',rowSpan:'Rivin jatkuvuus',colSpan:'Solun jatkuvuus',wordWrap:'Rivitys',hAlign:'Horisontaali kohdistus',vAlign:'Vertikaali kohdistus',alignBaseline:'Alas (teksti)',bgColor:'Taustan väri',borderColor:'Reunan väri',data:'Data',header:'Ylätunniste',yes:'Kyllä',no:'Ei',invalidWidth:'Solun leveyden täytyy olla numero.',invalidHeight:'Solun korkeuden täytyy olla numero.',invalidRowSpan:'Rivin jatkuvuuden täytyy olla kokonaisluku.',invalidColSpan:'Solun jatkuvuuden täytyy olla kokonaisluku.',chooseColor:'Valitse'},row:{menu:'Rivi',insertBefore:'Lisää rivi yläpuolelle',insertAfter:'Lisää rivi alapuolelle',deleteRow:'Poista rivit'},column:{menu:'Sarake',insertBefore:'Lisää sarake vasemmalle',insertAfter:'Lisää sarake oikealle',deleteColumn:'Poista sarakkeet'}},button:{title:'Painikkeen ominaisuudet',text:'Teksti (arvo)',type:'Tyyppi',typeBtn:'Painike',typeSbm:'Lähetä',typeRst:'Tyhjennä'},checkboxAndRadio:{checkboxTitle:'Valintaruudun ominaisuudet',radioTitle:'Radiopainikkeen ominaisuudet',value:'Arvo',selected:'Valittu'},form:{title:'Lomakkeen ominaisuudet',menu:'Lomakkeen ominaisuudet',action:'Toiminto',method:'Tapa',encoding:'Enkoodaus'},select:{title:'Valintakentän ominaisuudet',selectInfo:'Info',opAvail:'Ominaisuudet',value:'Arvo',size:'Koko',lines:'Rivit',chkMulti:'Salli usea valinta',opText:'Teksti',opValue:'Arvo',btnAdd:'Lisää',btnModify:'Muuta',btnUp:'Ylös',btnDown:'Alas',btnSetValue:'Aseta valituksi',btnDelete:'Poista'},textarea:{title:'Tekstilaatikon ominaisuudet',cols:'Sarakkeita',rows:'Rivejä'},textfield:{title:'Tekstikentän ominaisuudet',name:'Nimi',value:'Arvo',charWidth:'Leveys',maxChars:'Maksimi merkkimäärä',type:'Tyyppi',typeText:'Teksti',typePass:'Salasana'},hidden:{title:'Piilokentän ominaisuudet',name:'Nimi',value:'Arvo'},image:{title:'Kuvan ominaisuudet',titleButton:'Kuvapainikkeen ominaisuudet',menu:'Kuvan ominaisuudet',infoTab:'Kuvan tiedot',btnUpload:'Lähetä palvelimelle',upload:'Lisää kuva',alt:'Vaihtoehtoinen teksti',lockRatio:'Lukitse suhteet',resetSize:'Alkuperäinen koko',border:'Kehys',hSpace:'Vaakatila',vSpace:'Pystytila',alertUrl:'Kirjoita kuvan osoite (URL)',linkTab:'Linkki',button2Img:'Haluatko muuntaa valitun kuvanäppäimen kuvaksi?',img2Button:'Haluatko muuntaa valitun kuvan kuvanäppäimeksi?',urlMissing:'Kuvan lähdeosoite puuttuu.',validateBorder:'Kehyksen täytyy olla kokonaisluku.',validateHSpace:'HSpace-määrityksen täytyy olla kokonaisluku.',validateVSpace:'VSpace-määrityksen täytyy olla kokonaisluku.'},flash:{properties:'Flash-ominaisuudet',propertiesTab:'Ominaisuudet',title:'Flash ominaisuudet',chkPlay:'Automaattinen käynnistys',chkLoop:'Toisto',chkMenu:'Näytä Flash-valikko',chkFull:'Salli kokoruututila',scale:'Levitä',scaleAll:'Näytä kaikki',scaleNoBorder:'Ei rajaa',scaleFit:'Tarkka koko',access:'Skriptien pääsy',accessAlways:'Aina',accessSameDomain:'Sama verkkotunnus',accessNever:'Ei koskaan',alignAbsBottom:'Aivan alas',alignAbsMiddle:'Aivan keskelle',alignBaseline:'Alas (teksti)',alignTextTop:'Ylös (teksti)',quality:'Laatu',qualityBest:'Paras',qualityHigh:'Korkea',qualityAutoHigh:'Automaattinen korkea',qualityMedium:'Keskitaso',qualityAutoLow:'Automaattinen matala',qualityLow:'Matala',windowModeWindow:'Ikkuna',windowModeOpaque:'Läpinäkyvyys',windowModeTransparent:'Läpinäkyvä',windowMode:'Ikkuna tila',flashvars:'Muuttujat Flash:lle',bgcolor:'Taustaväri',hSpace:'Vaakatila',vSpace:'Pystytila',validateSrc:'Linkille on kirjoitettava URL',validateHSpace:'Vaakatilan täytyy olla numero.',validateVSpace:'Pystytilan täytyy olla numero.'},spellCheck:{toolbar:'Tarkista oikeinkirjoitus',title:'Oikoluku',notAvailable:'Valitettavasti oikoluku ei ole käytössä tällä hetkellä.',errorLoading:'Virhe ladattaessa oikolukupalvelua isännältä: %s.',notInDic:'Ei sanakirjassa',changeTo:'Vaihda',btnIgnore:'Jätä huomioimatta',btnIgnoreAll:'Jätä kaikki huomioimatta',btnReplace:'Korvaa',btnReplaceAll:'Korvaa kaikki',btnUndo:'Kumoa',noSuggestions:'Ei ehdotuksia',progress:'Tarkistus käynnissä...',noMispell:'Tarkistus valmis: Ei virheitä',noChanges:'Tarkistus valmis: Yhtään sanaa ei muutettu',oneChange:'Tarkistus valmis: Yksi sana muutettiin',manyChanges:'Tarkistus valmis: %1 sanaa muutettiin',ieSpellDownload:'Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?'},smiley:{toolbar:'Hymiö',title:'Lisää hymiö',options:'Hymiön ominaisuudet'},elementsPath:{eleLabel:'Elementin polku',eleTitle:'%1 elementti'},numberedlist:'Numerointi',bulletedlist:'Luottelomerkit',indent:'Suurenna sisennystä',outdent:'Pienennä sisennystä',justify:{left:'Tasaa vasemmat reunat',center:'Keskitä',right:'Tasaa oikeat reunat',block:'Tasaa molemmat reunat'},blockquote:'Lainaus',clipboard:{title:'Liitä',cutError:'Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).',copyError:'Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).',pasteMsg:'Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.',securityMsg:'Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.',pasteArea:'Leikealue'},pastefromword:{confirmCleanup:'Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)',toolbar:'Liitä Word-dokumentista',title:'Liitä Word-dokumentista',error:'Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia'},pasteText:{button:'Liitä tekstinä',title:'Liitä tekstinä'},templates:{button:'Pohjat',title:'Sisältöpohjat',options:'Sisältöpohjan ominaisuudet',insertOption:'Korvaa editorin koko sisältö',selectPromptMsg:'Valitse pohja editoriin<br>(aiempi sisältö menetetään):',emptyListMsg:'(Ei määriteltyjä pohjia)'},showBlocks:'Näytä elementit',stylesCombo:{label:'Tyyli',panelTitle:'Muotoilujen tyylit',panelTitle1:'Lohkojen tyylit',panelTitle2:'Rivinsisäiset tyylit',panelTitle3:'Objektien tyylit'},format:{label:'Muotoilu',panelTitle:'Muotoilu',tag_p:'Normaali',tag_pre:'Muotoiltu',tag_address:'Osoite',tag_h1:'Otsikko 1',tag_h2:'Otsikko 2',tag_h3:'Otsikko 3',tag_h4:'Otsikko 4',tag_h5:'Otsikko 5',tag_h6:'Otsikko 6',tag_div:'Normaali (DIV)'},div:{title:'Luo div-kehikko',toolbar:'Luo div-kehikko',cssClassInputLabel:'Tyylitiedoston luokat',styleSelectLabel:'Tyyli',IdInputLabel:'Id',languageCodeInputLabel:' Kielen koodi',inlineStyleInputLabel:'Sisätyyli',advisoryTitleInputLabel:'Ohjeistava otsikko',langDirLabel:'Kielen suunta',langDirLTRLabel:'Vasemmalta oikealle (LTR)',langDirRTLLabel:'Oikealta vasemmalle (RTL)',edit:'Muokkaa Diviä',remove:'Poista Div'},iframe:{title:'IFrame-kehyksen ominaisuudet',toolbar:'IFrame-kehys',noUrl:'Anna IFrame-kehykselle lähdeosoite (src)',scrolling:'Näytä vierityspalkit',border:'Näytä kehyksen reunat'},font:{label:'Kirjaisinlaji',voiceLabel:'Kirjaisinlaji',panelTitle:'Kirjaisinlaji'},fontSize:{label:'Koko',voiceLabel:'Kirjaisimen koko',panelTitle:'Koko'},colorButton:{textColorTitle:'Tekstiväri',bgColorTitle:'Taustaväri',panelTitle:'Värit',auto:'Automaattinen',more:'Lisää värejä...'},colors:{'000':'Musta',800000:'Kastanjanruskea','8B4513':'Satulanruskea','2F4F4F':'Tumma liuskekivenharmaa','008080':'Sinivihreä','000080':'Laivastonsininen','4B0082':'Indigonsininen',696969:'Tummanharmaa',B22222:'Tiili',A52A2A:'Ruskea',DAA520:'Kultapiisku','006400':'Tummanvihreä','40E0D0':'Turkoosi','0000CD':'Keskisininen',800080:'Purppura',808080:'Harmaa',F00:'Punainen',FF8C00:'Tumma oranssi',FFD700:'Kulta','008000':'Vihreä','0FF':'Syaani','00F':'Sininen',EE82EE:'Violetti',A9A9A9:'Tummanharmaa',FFA07A:'Vaaleanlohenpunainen',FFA500:'Oranssi',FFFF00:'Keltainen','00FF00':'Limetin vihreä',AFEEEE:'Haalea turkoosi',ADD8E6:'Vaaleansininen',DDA0DD:'Luumu',D3D3D3:'Vaaleanharmaa',FFF0F5:'Laventelinpunainen',FAEBD7:'Antiikinvalkoinen',FFFFE0:'Vaaleankeltainen',F0FFF0:'Hunajameloni',F0FFFF:'Asurinsininen',F0F8FF:'Alice Blue -sininen',E6E6FA:'Lavanteli',FFF:'Valkoinen'},scayt:{title:'Oikolue kirjoitettaessa',opera_title:'Opera ei tue tätä ominaisuutta',enable:'Ota käyttöön oikoluku kirjoitettaessa',disable:'Poista käytöstä oikoluku kirjoitetaessa',about:'Tietoja oikoluvusta kirjoitetaessa',toggle:'Vaihda oikoluku kirjoittaessa tilaa',options:'Asetukset',langs:'Kielet',moreSuggestions:'Lisää ehdotuksia',ignore:'Ohita',ignoreAll:'Ohita kaikki',addWord:'Lisää sana',emptyDic:'Sanakirjan nimi on annettava.',optionsTab:'Asetukset',allCaps:'Ohita sanat, jotka on kirjoitettu kokonaan isoilla kirjaimilla',ignoreDomainNames:'Ohita verkkotunnukset',mixedCase:'Ohita sanat, joissa on sekoitettu isoja ja pieniä kirjaimia',mixedWithDigits:'Ohita sanat, joissa on numeroita',languagesTab:'Kielet',dictionariesTab:'Sanakirjat',dic_field_name:'Sanakirjan nimi',dic_create:'Luo',dic_restore:'Palauta',dic_delete:'Poista',dic_rename:'Nimeä uudelleen',dic_info:'Oletuksena sanakirjat tallennetaan evästeeseen, mutta evästeiden koko on kuitenkin rajallinen. Sanakirjan kasvaessa niin suureksi, ettei se enää mahdu evästeeseen, sanakirja täytyy tallentaa palvelimellemme. Tallentaaksesi sanakirjasi palvelimellemme tulee sinun antaa sille nimi. Jos olet jo tallentanut sanakirjan, anna sen nimi ja klikkaa Palauta-painiketta',aboutTab:'Tietoa'},about:{title:'Tietoa CKEditorista',dlgTitle:'Tietoa CKEditorista',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Lisenssitiedot löytyvät kotisivuiltamme:',copy:'Copyright © $1. Kaikki oikeuden pidätetään.'},maximize:'Suurenna',minimize:'Pienennä',fakeobjects:{anchor:'Ankkuri',flash:'Flash animaatio',iframe:'IFrame-kehys',hiddenfield:'Piilokenttä',unknown:'Tuntematon objekti'},resize:'Raahaa muuttaaksesi kokoa',colordialog:{title:'Valitse väri',options:'Värin ominaisuudet',highlight:'Korostus',selected:'Valittu',clear:'Poista'},toolbarCollapse:'Kutista työkalupalkki',toolbarExpand:'Laajenna työkalupalkki',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Tekstin suunta vasemmalta oikealle',rtl:'Tekstin suunta oikealta vasemmalle'},docprops:{label:'Dokumentin ominaisuudet',title:'Dokumentin ominaisuudet',design:'Design',meta:'Meta-tieto',chooseColor:'Valitse',other:'<muu>',docTitle:'Sivun nimi',charset:'Merkistökoodaus',charsetOther:'Muu merkistökoodaus',charsetASCII:'ASCII',charsetCE:'Keskieurooppalainen',charsetCT:'Kiina, perinteinen (Big5)',charsetCR:'Kyrillinen',charsetGR:'Kreikka',charsetJP:'Japani',charsetKR:'Korealainen',charsetTR:'Turkkilainen',charsetUN:'Unicode (UTF-8)',charsetWE:'Länsieurooppalainen',docType:'Dokumentin tyyppi',docTypeOther:'Muu dokumentin tyyppi',xhtmlDec:'Lisää XHTML julistukset',bgColor:'Taustaväri',bgImage:'Taustakuva',bgFixed:'Paikallaanpysyvä tausta',txtColor:'Tekstiväri',margin:'Sivun marginaalit',marginTop:'Ylä',marginLeft:'Vasen',marginRight:'Oikea',marginBottom:'Ala',metaKeywords:'Hakusanat (pilkulla erotettuna)',metaDescription:'Kuvaus',metaAuthor:'Tekijä',metaCopyright:'Tekijänoikeudet',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/fo.js b/lang/fo.js new file mode 100644 index 0000000..cfbc025 --- /dev/null +++ b/lang/fo.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.fo={dir:'ltr',editorTitle:'Rich text editor, %1, trýst ALT og 0 fyri vegleiðing.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Kelda',newPage:'Nýggj sÃða',save:'Goym',preview:'Frumsýning',cut:'Kvett',copy:'Avrita',paste:'Innrita',print:'Prenta',underline:'Undirstrikað',bold:'Feit skrift',italic:'Skráskrift',selectAll:'Markera alt',removeFormat:'Strika sniðgeving',strike:'Yvirstrikað',subscript:'Lækkað skrift',superscript:'Hækkað skrift',horizontalrule:'Ger vatnrætta linju',pagebreak:'Ger sÃðuskift',pagebreakAlt:'SÃðuskift',unlink:'Strika tilknýti',undo:'Angra',redo:'Vend aftur',common:{browseServer:'Ambætarakagi',url:'URL',protocol:'Protokoll',upload:'Send til ambætaran',uploadSubmit:'Send til ambætaran',image:'Myndir',flash:'Flash',form:'Formur',checkbox:'Flugubein',radio:'Radioknøttur',textField:'Tekstteigur',textarea:'Tekstumráði',hiddenField:'Fjaldur teigur',button:'Knøttur',select:'Valskrá',imageButton:'Myndaknøttur',notSet:'<ikki sett>',id:'Id',name:'Navn',langDir:'Tekstkós',langDirLtr:'Frá vinstru til høgru (LTR)',langDirRtl:'Frá høgru til vinstru (RTL)',langCode:'Málkoda',longDescr:'VÃðkað URL frágreiðing',cssClass:'Typografi klassar',advisoryTitle:'Vegleiðandi heiti',cssStyle:'Typografi',ok:'Góðkent',cancel:'Avlýst',close:'Lat aftur',preview:'Frumsýn',generalTab:'Generelt',advancedTab:'Fjølbroytt',validateNumberFailed:'Hetta er ikki eitt tal.',confirmNewPage:'Allar ikki goymdar broytingar à hesum innihaldið hvørva. Skal nýggj sÃða lesast kortini?',confirmCancel:'Nakrir valmøguleikar eru broyttir. Ert tú vÃsur Ã, at dialogurin skal latast aftur?',options:'Options',target:'Target',targetNew:'Nýtt vindeyga (_blank)',targetTop:'Vindeyga ovast (_top)',targetSelf:'Sama vindeyga (_self)',targetParent:'Upphavligt vindeyga (_parent)',langDirLTR:'Frá vinstru til høgru (LTR)',langDirRTL:'Frá høgru til vinstru (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Breidd',height:'Hædd',align:'Justering',alignLeft:'Vinstra',alignRight:'Høgra',alignCenter:'Miðsett',alignTop:'Ovast',alignMiddle:'Miðja',alignBottom:'Botnur',invalidHeight:'Hædd má vera eitt tal.',invalidWidth:'Breidd má vera eitt tal.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, ikki tøkt</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Set inn sertekn',title:'Vel sertekn',options:'Møguleikar við serteknum'},link:{toolbar:'Ger/broyt tilknýti',other:'<annað>',menu:'Broyt tilknýti',title:'Tilknýti',info:'Tilknýtis upplýsingar',target:'Target',upload:'Send til ambætaran',advanced:'Fjølbroytt',type:'Tilknýtisslag',toUrl:'URL',toAnchor:'Tilknýti til marknastein à tekstinum',toEmail:'Teldupostur',targetFrame:'<ramma>',targetPopup:'<popup vindeyga>',targetFrameName:'VÃs navn vindeygans',targetPopupName:'Popup vindeygans navn',popupFeatures:'Popup vindeygans vÃðkaðu eginleikar',popupResizable:'Stødd kann broytast',popupStatusBar:'Støðufrágreiðingarbjálki',popupLocationBar:'Adressulinja',popupToolbar:'Amboðsbjálki',popupMenuBar:'Skrábjálki',popupFullScreen:'Fullur skermur (IE)',popupScrollBars:'Rullibjálki',popupDependent:'Bundið (Netscape)',popupLeft:'Frástøða frá vinstru',popupTop:'Frástøða frá Ãerva',id:'Id',langDir:'Tekstkós',langDirLTR:'Frá vinstru til høgru (LTR)',langDirRTL:'Frá høgru til vinstru (RTL)',acccessKey:'Snarvegisknöttur',name:'Navn',langCode:'Tekstkós',tabIndex:'Tabulator indeks',advisoryTitle:'Vegleiðandi heiti',advisoryContentType:'Vegleiðandi innihaldsslag',cssClasses:'Typografi klassar',charset:'Atknýtt teknsett',styles:'Typografi',rel:'Relationship',selectAnchor:'Vel ein marknastein',anchorName:'Eftir navni á marknasteini',anchorId:'Eftir element Id',emailAddress:'Teldupost-adressa',emailSubject:'Evni',emailBody:'Breyðtekstur',noAnchors:'(Eingir marknasteinar eru à hesum dokumentið)',noUrl:'Vinarliga skriva tilknýti (URL)',noEmail:'Vinarliga skriva teldupost-adressu'},anchor:{toolbar:'Ger/broyt marknastein',menu:'Eginleikar fyri marknastein',title:'Eginleikar fyri marknastein',name:'Heiti marknasteinsins',errorName:'Vinarliga rita marknasteinsins heiti',remove:'Remove Anchor'},list:{numberedTitle:'Eginleikar fyri lista við tølum',bulletedTitle:'Eginleikar fyri lista við prikkum',type:'Slag',start:'Byrjan',validateStartNumber:'Byrjunartalið fyri lista má vera eitt heiltal.',circle:'Sirkul',disc:'Disc',square:'Fýrkantur',none:'Einki',notset:'<ikki sett>',armenian:'Armensk talskipan',georgian:'Georgisk talskipan (an, ban, gan, osv.)',lowerRoman:'LÃtil rómaratøl (i, ii, iii, iv, v, etc.)',upperRoman:'Stór rómaratøl (I, II, III, IV, V, etc.)',lowerAlpha:'LÃtlir bókstavir (a, b, c, d, e, etc.)',upperAlpha:'Stórir bókstavir (A, B, C, D, E, etc.)',lowerGreek:'Grikskt við lÃtlum (alpha, beta, gamma, etc.)',decimal:'Vanlig tøl (1, 2, 3, etc.)',decimalLeadingZero:'Tøl við null frammanfyri (01, 02, 03, etc.)'},findAndReplace:{title:'Finn og broyt',find:'Leita',replace:'Yvirskriva',findWhat:'Finn:',replaceWith:'Yvirskriva við:',notFoundMsg:'Leititeksturin varð ikki funnin',matchCase:'Munur á stórum og smáum bókstavum',matchWord:'Bert heil orð',matchCyclic:'Match cyclic',replaceAll:'Yvirskriva alt',replaceSuccessMsg:'%1 úrslit broytt.'},table:{toolbar:'Tabell',title:'Eginleikar fyri tabell',menu:'Eginleikar fyri tabell',deleteTable:'Strika tabell',rows:'Røðir',columns:'Kolonnur',border:'Bordabreidd',widthPx:'pixels',widthPc:'prosent',widthUnit:'breiddar unit',cellSpace:'Fjarstøða millum meskar',cellPad:'Meskubreddi',caption:'Tabellfrágreiðing',summary:'Samandráttur',headers:'Yvirskriftir',headersNone:'Eingin',headersColumn:'Fyrsta kolonna',headersRow:'Fyrsta rað',headersBoth:'Báðir',invalidRows:'Talið av røðum má vera eitt tal størri enn 0.',invalidCols:'Talið av kolonnum má vera eitt tal størri enn 0.',invalidBorder:'Borda-stødd má vera eitt tal.',invalidWidth:'Tabell-breidd má vera eitt tal.',invalidHeight:'Tabell-hædd má vera eitt tal.',invalidCellSpacing:'Cell spacing má vera eitt tal.',invalidCellPadding:'Cell padding má vera eitt tal.',cell:{menu:'Meski',insertBefore:'Set meska inn áðrenn',insertAfter:'Set meska inn aftaná',deleteCell:'Strika meskar',merge:'Flætta meskar',mergeRight:'Flætta meskar til høgru',mergeDown:'Flætta saman',splitHorizontal:'Kloyv meska vatnrætt',splitVertical:'Kloyv meska loddrætt',title:'Mesku eginleikar',cellType:'Mesku slag',rowSpan:'Ræð spenni',colSpan:'Kolonnu spenni',wordWrap:'Orðkloyving',hAlign:'Horisontal plasering',vAlign:'Loddrøtt plasering',alignBaseline:'Basislinja',bgColor:'Bakgrundslitur',borderColor:'Bordalitur',data:'Data',header:'Header',yes:'Ja',no:'Nei',invalidWidth:'Meskubreidd má vera eitt tal.',invalidHeight:'Meskuhædd má vera eitt tal.',invalidRowSpan:'Raðspennið má vera eitt heiltal.',invalidColSpan:'Kolonnuspennið má vera eitt heiltal.',chooseColor:'Vel'},row:{menu:'Rað',insertBefore:'Set rað inn áðrenn',insertAfter:'Set rað inn aftaná',deleteRow:'Strika røðir'},column:{menu:'Kolonna',insertBefore:'Set kolonnu inn áðrenn',insertAfter:'Set kolonnu inn aftaná',deleteColumn:'Strika kolonnur'}},button:{title:'Eginleikar fyri knøtt',text:'Tekstur',type:'Slag',typeBtn:'Knøttur',typeSbm:'Send',typeRst:'Nullstilla'},checkboxAndRadio:{checkboxTitle:'Eginleikar fyri flugubein',radioTitle:'Eginleikar fyri radioknøtt',value:'Virði',selected:'Valt'},form:{title:'Eginleikar fyri Form',menu:'Eginleikar fyri Form',action:'Hending',method:'Háttur',encoding:'Encoding'},select:{title:'Eginleikar fyri valskrá',selectInfo:'Upplýsingar',opAvail:'Tøkir møguleikar',value:'Virði',size:'Stødd',lines:'Linjur',chkMulti:'Loyv fleiri valmøguleikum samstundis',opText:'Tekstur',opValue:'Virði',btnAdd:'Legg afturat',btnModify:'Broyt',btnUp:'Upp',btnDown:'Niður',btnSetValue:'Set sum valt virði',btnDelete:'Strika'},textarea:{title:'Eginleikar fyri tekstumráði',cols:'kolonnur',rows:'røðir'},textfield:{title:'Eginleikar fyri tekstteig',name:'Navn',value:'Virði',charWidth:'Breidd (sjónlig tekn)',maxChars:'Mest loyvdu tekn',type:'Slag',typeText:'Tekstur',typePass:'Loyniorð'},hidden:{title:'Eginleikar fyri fjaldan teig',name:'Navn',value:'Virði'},image:{title:'Myndaeginleikar',titleButton:'Eginleikar fyri myndaknøtt',menu:'Myndaeginleikar',infoTab:'Myndaupplýsingar',btnUpload:'Send til ambætaran',upload:'Send',alt:'Alternativur tekstur',lockRatio:'Læs lutfallið',resetSize:'Upprunastødd',border:'Bordi',hSpace:'Høgri breddi',vSpace:'Vinstri breddi',alertUrl:'Rita slóðina til myndina',linkTab:'Tilknýti',button2Img:'Skal valdi myndaknøttur gerast til vanliga mynd?',img2Button:'Skal valda mynd gerast til myndaknøtt?',urlMissing:'URL til mynd manglar.',validateBorder:'Bordi má vera eitt heiltal.',validateHSpace:'HSpace má vera eitt heiltal.',validateVSpace:'VSpace má vera eitt heiltal.'},flash:{properties:'Flash eginleikar',propertiesTab:'Eginleikar',title:'Flash eginleikar',chkPlay:'Avspælingin byrjar sjálv',chkLoop:'Endurspæl',chkMenu:'Ger Flash skrá virkna',chkFull:'Loyv fullan skerm',scale:'Skalering',scaleAll:'VÃs alt',scaleNoBorder:'Eingin bordi',scaleFit:'Neyv skalering',access:'Script atgongd',accessAlways:'AltÃð',accessSameDomain:'Sama navnaøki',accessNever:'OngantÃð',alignAbsBottom:'Abs botnur',alignAbsMiddle:'Abs miðja',alignBaseline:'Basislinja',alignTextTop:'Tekst toppur',quality:'Góðska',qualityBest:'Besta',qualityHigh:'Høg',qualityAutoHigh:'Auto høg',qualityMedium:'Meðal',qualityAutoLow:'Auto Lág',qualityLow:'Lág',windowModeWindow:'Rútur',windowModeOpaque:'Ikki transparent',windowModeTransparent:'Transparent',windowMode:'Slag av rúti',flashvars:'Variablar fyri Flash',bgcolor:'Bakgrundslitur',hSpace:'Høgri breddi',vSpace:'Vinstri breddi',validateSrc:'Vinarliga skriva tilknýti (URL)',validateHSpace:'HSpace má vera eitt tal.',validateVSpace:'VSpace má vera eitt tal.'},spellCheck:{toolbar:'Kanna stavseting',title:'Kanna stavseting',notAvailable:'TÃverri, ikki tøkt à løtuni.',errorLoading:'Feilur við innlesing av application service host: %s.',notInDic:'Finst ikki à orðabókini',changeTo:'Broyt til',btnIgnore:'Forfjóna',btnIgnoreAll:'Forfjóna alt',btnReplace:'Yvirskriva',btnReplaceAll:'Yvirskriva alt',btnUndo:'Angra',noSuggestions:'- Einki uppskot -',progress:'Rættstavarin arbeiðir...',noMispell:'Rættstavarain liðugur: Eingin feilur funnin',noChanges:'Rættstavarain liðugur: Einki orð varð broytt',oneChange:'Rættstavarain liðugur: Eitt orð er broytt',manyChanges:'Rættstavarain liðugur: %1 orð broytt',ieSpellDownload:'Rættstavarin er ikki tøkur à tekstviðgeranum. Vilt tú heinta hann nú?'},smiley:{toolbar:'Smiley',title:'Vel Smiley',options:'Møguleikar fyri Smiley'},elementsPath:{eleLabel:'Slóð til elementir',eleTitle:'%1 element'},numberedlist:'Talmerktur listi',bulletedlist:'Punktmerktur listi',indent:'Ãkja reglubrotarinntriv',outdent:'Minka reglubrotarinntriv',justify:{left:'Vinstrasett',center:'Miðsett',right:'Høgrasett',block:'Javnir tekstkantar'},blockquote:'Blockquote',clipboard:{title:'Innrita',cutError:'Trygdaruppseting alnótskagans forðar tekstviðgeranum à at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).',copyError:'Trygdaruppseting alnótskagans forðar tekstviðgeranum à at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).',pasteMsg:'Vinarliga koyr tekstin à hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.',securityMsg:'Trygdaruppseting alnótskagans forðar tekstviðgeranum à beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur à hesum rútinum.',pasteArea:'Avritingarumráði'},pastefromword:{confirmCleanup:'Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?',toolbar:'Innrita frá Word',title:'Innrita frá Word',error:'Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil'},pasteText:{button:'Innrita som reinan tekst',title:'Innrita som reinan tekst'},templates:{button:'Skabelónir',title:'Innihaldsskabelónir',options:'Møguleikar fyri Template',insertOption:'Yvirskriva núverandi innihald',selectPromptMsg:'Vinarliga vel ta skabelón, ið skal opnast à tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):',emptyListMsg:'(Ongar skabelónir tøkar)'},showBlocks:'VÃs blokkar',stylesCombo:{label:'Typografi',panelTitle:'Formatterings stÃlir',panelTitle1:'Blokk stÃlir',panelTitle2:'Inline stÃlir',panelTitle3:'Object stÃlir'},format:{label:'Skriftsnið',panelTitle:'Skriftsnið',tag_p:'Vanligt',tag_pre:'Sniðgivið',tag_address:'Adressa',tag_h1:'Yvirskrift 1',tag_h2:'Yvirskrift 2',tag_h3:'Yvirskrift 3',tag_h4:'Yvirskrift 4',tag_h5:'Yvirskrift 5',tag_h6:'Yvirskrift 6',tag_div:'Vanligt (DIV)'},div:{title:'Ger Div Container',toolbar:'Ger Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Vinstru til høgru (LTR)',langDirRTLLabel:'Høgru til vinstru (RTL)',edit:'Redigera Div',remove:'Strika Div'},iframe:{title:'Møguleikar fyri IFrame',toolbar:'IFrame',noUrl:'Vinarliga skriva URL til iframe',scrolling:'Loyv scrollbars',border:'VÃs frame kant'},font:{label:'Skrift',voiceLabel:'Skrift',panelTitle:'Skrift'},fontSize:{label:'Skriftstødd',voiceLabel:'Skriftstødd',panelTitle:'Skriftstødd'},colorButton:{textColorTitle:'Tekstlitur',bgColorTitle:'Bakgrundslitur',panelTitle:'Litir',auto:'Automatiskt',more:'Fleiri litir...'},colors:{'000':'Svart',800000:'Maroon','8B4513':'Saðilsbrúnt','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Myrkagrátt',B22222:'Fire Brick',A52A2A:'Brúnt',DAA520:'Gullstavur','006400':'Myrkagrønt','40E0D0':'Turquoise','0000CD':'Meðal blátt',800080:'Purple',808080:'Grátt',F00:'Reytt',FF8C00:'Myrkt appelsingult',FFD700:'Gull','008000':'Grønt','0FF':'Cyan','00F':'Blátt',EE82EE:'Violet',A9A9A9:'Døkt grátt',FFA07A:'Ljósur laksur',FFA500:'Appelsingult',FFFF00:'Gult','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Ljósablátt',DDA0DD:'Plum',D3D3D3:'Ljósagrátt',FFF0F5:'Lavender Blush',FAEBD7:'Klassiskt hvÃtt',FFFFE0:'Ljósagult',F0FFF0:'Hunangsdøggur',F0FFFF:'Azure',F0F8FF:'Alice Blátt',E6E6FA:'Lavender',FFF:'HvÃtt'},scayt:{title:'Kanna stavseting, meðan tú skrivar',opera_title:'Ikki stuðlað à Opera',enable:'Loyv SCAYT',disable:'Nokta SCAYT',about:'Um SCAYT',toggle:'Toggle SCAYT',options:'Uppseting',langs:'Tungumál',moreSuggestions:'Fleiri tilráðingar',ignore:'Ignorera',ignoreAll:'Ignorera alt',addWord:'Legg orð afturat',emptyDic:'Heiti á orðabók eigur ikki at vera tómt.',optionsTab:'Uppseting',allCaps:'Loyp orð við bert stórum stavum um',ignoreDomainNames:'loyp økisnøvn um',mixedCase:'Loyp orð við blandaðum smáum og stórum stavum um',mixedWithDigits:'Loyp orð við tølum um',languagesTab:'Tungumál',dictionariesTab:'Orðabøkur',dic_field_name:'Orðabókanavn',dic_create:'Upprætta nýggja',dic_restore:'Endurskapa',dic_delete:'Strika',dic_rename:'Broyt',dic_info:'Upprunaliga er brúkara-orðabókin goymd à eini cookie à tÃnum egna kaga. Men hesar eru avmarkaðar à stødd. Tá brúkara-orðabókin veksur seg ov stóra til eina cookie, so er møguligt at goyma hana á ambætara okkara. Fyri at goyma persónligu orðabókina á ambætaranum eigur tú at velja eitt navn til tÃna skuffu. Hevur tú longu goymt eina orðabók, so vinarliga skriva navnið og klikk á knøttin Endurskapa.',aboutTab:'Um'},about:{title:'Um CKEditor',dlgTitle:'Um CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Licens upplýsingar finnast á heimasÃðu okkara:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maksimera',minimize:'Minimera',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Fjaldur teigur',unknown:'Ãkent Object'},resize:'Drag fyri at broyta stødd',colordialog:{title:'Vel lit',options:'Litmøguleikar',highlight:'Framheva',selected:'Valdur litur',clear:'Strika'},toolbarCollapse:'Lat Toolbar aftur',toolbarExpand:'VÃs Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Tekstkós frá vinstru til høgru',rtl:'Tekstkós frá høgru til vinstru'},docprops:{label:'Eginleikar fyri dokument',title:'Eginleikar fyri dokument',design:'Design',meta:'META-upplýsingar',chooseColor:'Vel',other:'<annað>',docTitle:'SÃðuheiti',charset:'Teknsett koda',charsetOther:'Onnur teknsett koda',charsetASCII:'ASCII',charsetCE:'Miðeuropa',charsetCT:'Kinesiskt traditionelt (Big5)',charsetCR:'Cyrilliskt',charsetGR:'Grikst',charsetJP:'Japanskt',charsetKR:'Koreanskt',charsetTR:'Turkiskt',charsetUN:'Unicode (UTF-8)',charsetWE:'Vestureuropa',docType:'Dokumentslag yvirskrift',docTypeOther:'Annað dokumentslag yvirskrift',xhtmlDec:'Viðfest XHTML deklaratiónir',bgColor:'Bakgrundslitur',bgImage:'Leið til bakgrundsmynd (URL)',bgFixed:'Læst bakgrund (rullar ikki)',txtColor:'Tekstlitur',margin:'SÃðubreddar',marginTop:'Ovast',marginLeft:'Vinstra',marginRight:'Høgra',marginBottom:'Niðast',metaKeywords:'Dokument index lyklaorð (sundurbýtt við komma)',metaDescription:'Dokumentlýsing',metaAuthor:'Høvundur',metaCopyright:'Upphavsrættindi',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/fr-ca.js b/lang/fr-ca.js new file mode 100644 index 0000000..4c8f0be --- /dev/null +++ b/lang/fr-ca.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang['fr-ca']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Source',newPage:'Nouvelle page',save:'Sauvegarder',preview:'Previsualiser',cut:'Couper',copy:'Copier',paste:'Coller',print:'Imprimer',underline:'Souligné',bold:'Gras',italic:'Italique',selectAll:'Tout sélectionner',removeFormat:'Supprimer le formatage',strike:'Barrer',subscript:'Indice',superscript:'Exposant',horizontalrule:'Insérer un séparateur',pagebreak:'Insérer un saut de page',pagebreakAlt:'Page Break',unlink:'Supprimer le lien',undo:'Annuler',redo:'Refaire',common:{browseServer:'Parcourir le serveur',url:'URL',protocol:'Protocole',upload:'Télécharger',uploadSubmit:'Envoyer sur le serveur',image:'Image',flash:'Animation Flash',form:'Formulaire',checkbox:'Case à cocher',radio:'Bouton radio',textField:'Champ texte',textarea:'Zone de texte',hiddenField:'Champ caché',button:'Bouton',select:'Champ de sélection',imageButton:'Bouton image',notSet:'<Par défaut>',id:'Id',name:'Nom',langDir:"Sens d'écriture",langDirLtr:'De gauche à droite (LTR)',langDirRtl:'De droite à gauche (RTL)',langCode:'Code langue',longDescr:'URL de description longue',cssClass:'Classes de feuilles de style',advisoryTitle:'Titre',cssStyle:'Style',ok:'OK',cancel:'Annuler',close:'Close',preview:'Preview',generalTab:'Général',advancedTab:'Avancée',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largeur',height:'Hauteur',align:'Alignement',alignLeft:'Gauche',alignRight:'Droite',alignCenter:'Centré',alignTop:'Haut',alignMiddle:'Milieu',alignBottom:'Bas',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insérer un caractère spécial',title:'Insérer un caractère spécial',options:'Special Character Options'},link:{toolbar:'Insérer/modifier le lien',other:'<other>',menu:'Modifier le lien',title:'Propriétés du lien',info:'Informations sur le lien',target:'Destination',upload:'Télécharger',advanced:'Avancée',type:'Type de lien',toUrl:'URL',toAnchor:'Ancre dans cette page',toEmail:'E-Mail',targetFrame:'<Cadre>',targetPopup:'<fenêtre popup>',targetFrameName:'Nom du cadre de destination',targetPopupName:'Nom de la fenêtre popup',popupFeatures:'Caractéristiques de la fenêtre popup',popupResizable:'Resizable',popupStatusBar:"Barre d'état",popupLocationBar:"Barre d'adresses",popupToolbar:"Barre d'outils",popupMenuBar:'Barre de menu',popupFullScreen:'Plein écran (IE)',popupScrollBars:'Barres de défilement',popupDependent:'Dépendante (Netscape)',popupLeft:'Position à partir de la gauche',popupTop:'Position à partir du haut',id:'Id',langDir:"Sens d'écriture",langDirLTR:'De gauche à droite (LTR)',langDirRTL:'De droite à gauche (RTL)',acccessKey:'Ãquivalent clavier',name:'Nom',langCode:"Sens d'écriture",tabIndex:'Ordre de tabulation',advisoryTitle:'Titre',advisoryContentType:'Type de contenu',cssClasses:'Classes de feuilles de style',charset:'Encodage de caractère',styles:'Style',rel:'Relationship',selectAnchor:'Sélectionner une ancre',anchorName:'Par nom',anchorId:'Par id',emailAddress:'Adresse E-Mail',emailSubject:'Sujet du message',emailBody:'Corps du message',noAnchors:"(Pas d'ancre disponible dans le document)",noUrl:"Veuillez saisir l'URL",noEmail:"Veuillez saisir l'adresse e-mail"},anchor:{toolbar:"Insérer/modifier l'ancre",menu:"Propriétés de l'ancre",title:"Propriétés de l'ancre",name:"Nom de l'ancre",errorName:"Veuillez saisir le nom de l'ancre",remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Chercher et Remplacer',find:'Chercher',replace:'Remplacer',findWhat:'Rechercher:',replaceWith:'Remplacer par:',notFoundMsg:'Le texte indiqué est introuvable.',matchCase:'Respecter la casse',matchWord:'Mot entier',matchCyclic:'Match cyclic',replaceAll:'Tout remplacer',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tableau',title:'Propriétés du tableau',menu:'Propriétés du tableau',deleteTable:'Supprimer le tableau',rows:'Lignes',columns:'Colonnes',border:'Taille de la bordure',widthPx:'pixels',widthPc:'pourcentage',widthUnit:'width unit',cellSpace:'Espacement',cellPad:'Contour',caption:'Titre',summary:'Résumé',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cellule',insertBefore:'Insérer une cellule avant',insertAfter:'Insérer une cellule après',deleteCell:'Supprimer des cellules',merge:'Fusionner les cellules',mergeRight:'Fusionner à droite',mergeDown:'Fusionner en bas',splitHorizontal:'Scinder la cellule horizontalement',splitVertical:'Scinder la cellule verticalement',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Ligne',insertBefore:'Insérer une ligne avant',insertAfter:'Insérer une ligne après',deleteRow:'Supprimer des lignes'},column:{menu:'Colonne',insertBefore:'Insérer une colonne avant',insertAfter:'Insérer une colonne après',deleteColumn:'Supprimer des colonnes'}},button:{title:'Propriétés du bouton',text:'Texte (Valeur)',type:'Type',typeBtn:'Bouton',typeSbm:'Soumettre',typeRst:'Réinitialiser'},checkboxAndRadio:{checkboxTitle:'Propriétés de la case à cocher',radioTitle:'Propriétés du bouton radio',value:'Valeur',selected:'Sélectionné'},form:{title:'Propriétés du formulaire',menu:'Propriétés du formulaire',action:'Action',method:'Méthode',encoding:'Encoding'},select:{title:'Propriétés de la liste/du menu',selectInfo:'Info',opAvail:'Options disponibles',value:'Valeur',size:'Taille',lines:'lignes',chkMulti:'Sélection multiple',opText:'Texte',opValue:'Valeur',btnAdd:'Ajouter',btnModify:'Modifier',btnUp:'Monter',btnDown:'Descendre',btnSetValue:'Valeur sélectionnée',btnDelete:'Supprimer'},textarea:{title:'Propriétés de la zone de texte',cols:'Colonnes',rows:'Lignes'},textfield:{title:'Propriétés du champ texte',name:'Nom',value:'Valeur',charWidth:'Largeur en caractères',maxChars:'Nombre maximum de caractères',type:'Type',typeText:'Texte',typePass:'Mot de passe'},hidden:{title:'Propriétés du champ caché',name:'Nom',value:'Valeur'},image:{title:"Propriétés de l'image",titleButton:'Propriétés du bouton image',menu:"Propriétés de l'image",infoTab:"Informations sur l'image",btnUpload:'Envoyer sur le serveur',upload:'Télécharger',alt:'Texte de remplacement',lockRatio:'Garder les proportions',resetSize:'Taille originale',border:'Bordure',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',alertUrl:"Veuillez saisir l'URL de l'image",linkTab:'Lien',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:"Propriétés de l'animation Flash",propertiesTab:'Properties',title:"Propriétés de l'animation Flash",chkPlay:'Lecture automatique',chkLoop:'Boucle',chkMenu:'Activer le menu Flash',chkFull:'Allow Fullscreen',scale:'Affichage',scaleAll:'Par défaut (tout montrer)',scaleNoBorder:'Sans bordure',scaleFit:'Ajuster aux dimensions',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bas',alignAbsMiddle:'Abs Milieu',alignBaseline:'Bas du texte',alignTextTop:'Haut du texte',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Couleur de fond',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',validateSrc:"Veuillez saisir l'URL",validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Orthographe',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Pas dans le dictionnaire',changeTo:'Changer en',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer tout',btnReplace:'Remplacer',btnReplaceAll:'Remplacer tout',btnUndo:'Annuler',noSuggestions:'- Pas de suggestion -',progress:"Vérification d'orthographe en cours...",noMispell:"Vérification d'orthographe terminée: pas d'erreur trouvée",noChanges:"Vérification d'orthographe terminée: Pas de modifications",oneChange:"Vérification d'orthographe terminée: Un mot modifié",manyChanges:"Vérification d'orthographe terminée: %1 mots modifiés",ieSpellDownload:"Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?"},smiley:{toolbar:'Emoticon',title:'Insérer un Emoticon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Liste numérotée',bulletedlist:'Liste à puces',indent:'Augmenter le retrait',outdent:'Diminuer le retrait',justify:{left:'Aligner à gauche',center:'Centrer',right:'Aligner à Droite',block:'Texte justifié'},blockquote:'Citation',clipboard:{title:'Coller',cutError:"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).",copyError:"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).",pasteMsg:'Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.',securityMsg:"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.",pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Coller en tant que Word (formaté)',title:'Coller en tant que Word (formaté)',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Coller comme texte',title:'Coller comme texte'},templates:{button:'Modèles',title:'Modèles de contenu',options:'Template Options',insertOption:'Remplacer tout le contenu actuel',selectPromptMsg:"Sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",emptyListMsg:'(Aucun modèle disponible)'},showBlocks:'Afficher les blocs',stylesCombo:{label:'Style',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formaté',tag_address:'Adresse',tag_h1:'En-tête 1',tag_h2:'En-tête 2',tag_h3:'En-tête 3',tag_h4:'En-tête 4',tag_h5:'En-tête 5',tag_h6:'En-tête 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Police',voiceLabel:'Font',panelTitle:'Police'},fontSize:{label:'Taille',voiceLabel:'Font Size',panelTitle:'Taille'},colorButton:{textColorTitle:'Couleur de caractère',bgColorTitle:'Couleur de fond',panelTitle:'Colors',auto:'Automatique',more:'Plus de couleurs...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Propriétés du document',title:'Propriétés du document',design:'Design',meta:'Méta-Données',chooseColor:'Choose',other:'<other>',docTitle:'Titre de la page',charset:'Encodage de caractère',charsetOther:'Autre encodage de caractère',charsetASCII:'ASCII',charsetCE:'Europe Centrale',charsetCT:'Chinois Traditionnel (Big5)',charsetCR:'Cyrillique',charsetGR:'Grecque',charsetJP:'Japonais',charsetKR:'Coréen',charsetTR:'Turcque',charsetUN:'Unicode (UTF-8)',charsetWE:'Occidental',docType:'Type de document',docTypeOther:'Autre type de document',xhtmlDec:'Inclure les déclarations XHTML',bgColor:'Couleur de fond',bgImage:'Image de fond',bgFixed:'Image fixe sans défilement',txtColor:'Couleur de caractère',margin:'Marges',marginTop:'Haut',marginLeft:'Gauche',marginRight:'Droite',marginBottom:'Bas',metaKeywords:'Mots-clés (séparés par des virgules)',metaDescription:'Description',metaAuthor:'Auteur',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/fr.js b/lang/fr.js new file mode 100644 index 0000000..711acfd --- /dev/null +++ b/lang/fr.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.fr={dir:'ltr',editorTitle:"Ãditeur de Texte Enrichi, %1, appuyez sur ALT-0 pour l'aide.",toolbars:'Editor toolbars',editor:'Ãditeur de Texte Enrichi',source:'Source',newPage:'Nouvelle page',save:'Enregistrer',preview:'Aperçu',cut:'Couper',copy:'Copier',paste:'Coller',print:'Imprimer',underline:'Souligné',bold:'Gras',italic:'Italique',selectAll:'Tout sélectionner',removeFormat:'Supprimer la mise en forme',strike:'Barré',subscript:'Indice',superscript:'Exposant',horizontalrule:'Ligne horizontale',pagebreak:'Saut de page',pagebreakAlt:'Saut de page',unlink:'Supprimer le lien',undo:'Annuler',redo:'Rétablir',common:{browseServer:'Explorer le serveur',url:'URL',protocol:'Protocole',upload:'Envoyer',uploadSubmit:'Envoyer sur le serveur',image:'Image',flash:'Flash',form:'Formulaire',checkbox:'Case à cocher',radio:'Bouton Radio',textField:'Champ texte',textarea:'Zone de texte',hiddenField:'Champ caché',button:'Bouton',select:'Liste déroulante',imageButton:'Bouton image',notSet:'<non défini>',id:'Id',name:'Nom',langDir:"Sens d'écriture",langDirLtr:'Gauche à droite (LTR)',langDirRtl:'Droite à gauche (RTL)',langCode:'Code de langue',longDescr:'URL de description longue (longdesc => malvoyant)',cssClass:'Classe CSS',advisoryTitle:'Description (title)',cssStyle:'Style',ok:'OK',cancel:'Annuler',close:'Fermer',preview:'Aperçu',generalTab:'Général',advancedTab:'Avancé',validateNumberFailed:"Cette valeur n'est pas un nombre.",confirmNewPage:'Les changements non sauvegardés seront perdus. Ãtes-vous sûr de vouloir charger une nouvelle page?',confirmCancel:'Certaines options ont été modifiées. Ãtes-vous sûr de vouloir fermer?',options:'Options',target:'Cible (Target)',targetNew:'Nouvelle fenêtre (_blank)',targetTop:'Fenêtre supérieure (_top)',targetSelf:'Même fenêtre (_self)',targetParent:'Fenêtre parent (_parent)',langDirLTR:'Gauche à Droite (LTR)',langDirRTL:'Droite à Gauche (RTL)',styles:'Style',cssClasses:'Classes de style',width:'Largeur',height:'Hauteur',align:'Alignement',alignLeft:'Gauche',alignRight:'Droite',alignCenter:'Centré',alignTop:'Haut',alignMiddle:'Milieu',alignBottom:'Bas',invalidHeight:'La hauteur doit être un nombre.',invalidWidth:'La largeur doit être un nombre.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, Indisponible</span>'},contextmenu:{options:'Options du menu contextuel'},specialChar:{toolbar:'Insérer un caractère spécial',title:'Sélectionnez un caractère',options:'Options des caractères spéciaux'},link:{toolbar:'Lien',other:'<autre>',menu:'Editer le lien',title:'Lien',info:'Infos sur le lien',target:'Cible',upload:'Envoyer',advanced:'Avancé',type:'Type de lien',toUrl:'URL',toAnchor:'Transformer le lien en ancre dans le texte',toEmail:'E-mail',targetFrame:'<cadre>',targetPopup:'<fenêtre popup>',targetFrameName:'Nom du Cadre destination',targetPopupName:'Nom de la fenêtre popup',popupFeatures:'Options de la fenêtre popup',popupResizable:'Redimensionnable',popupStatusBar:'Barre de status',popupLocationBar:"Barre d'adresse",popupToolbar:"Barre d'outils",popupMenuBar:'Barre de menu',popupFullScreen:'Plein écran (IE)',popupScrollBars:'Barres de défilement',popupDependent:'Dépendante (Netscape)',popupLeft:'Position gauche',popupTop:'Position haute',id:'Id',langDir:"Sens d'écriture",langDirLTR:'Gauche à droite',langDirRTL:'Droite à gauche',acccessKey:"Touche d'accessibilité",name:'Nom',langCode:'Code de langue',tabIndex:'Index de tabulation',advisoryTitle:'Description (title)',advisoryContentType:'Type de contenu (ex: text/html)',cssClasses:'Classe CSS',charset:'Charset de la cible',styles:'Style',rel:'Relation',selectAnchor:"Sélectionner l'ancre",anchorName:"Par nom d'ancre",anchorId:"Par ID d'élément",emailAddress:'Adresse E-Mail',emailSubject:'Sujet du message',emailBody:'Corps du message',noAnchors:'(Aucune ancre disponible dans ce document)',noUrl:"Veuillez entrer l'adresse du lien",noEmail:"Veuillez entrer l'adresse e-mail"},anchor:{toolbar:'Ancre',menu:"Editer l'ancre",title:"Propriétés de l'ancre",name:"Nom de l'ancre",errorName:"Veuillez entrer le nom de l'ancre.",remove:'Remove Anchor'},list:{numberedTitle:'Propriétés de la liste numérotée',bulletedTitle:'Propriétés de la liste à puces',type:'Type',start:'Début',validateStartNumber:'Le premier élément de la liste doit être un nombre entier.',circle:'Cercle',disc:'Disque',square:'Carré',none:'Aucun',notset:'<Non défini>',armenian:'Numération arménienne',georgian:'Numération géorgienne (an, ban, gan, etc.)',lowerRoman:'Nombres romains minuscules (i, ii, iii, iv, v, etc.)',upperRoman:'Nombres romains majuscules (I, II, III, IV, V, etc.)',lowerAlpha:'Alphabétique minuscules (a, b, c, d, e, etc.)',upperAlpha:'Alphabétique majuscules (A, B, C, D, E, etc.)',lowerGreek:'Grec minuscule (alpha, beta, gamma, etc.)',decimal:'Décimal (1, 2, 3, etc.)',decimalLeadingZero:'Décimal précédé par un 0 (01, 02, 03, etc.)'},findAndReplace:{title:'Trouver et remplacer',find:'Trouver',replace:'Remplacer',findWhat:'Expression à trouver: ',replaceWith:'Remplacer par: ',notFoundMsg:'Le texte spécifié ne peut être trouvé.',matchCase:'Respecter la casse',matchWord:'Mot entier uniquement',matchCyclic:'Boucler',replaceAll:'Remplacer tout',replaceSuccessMsg:'%1 occurrence(s) replacée(s).'},table:{toolbar:'Tableau',title:'Propriétés du tableau',menu:'Propriétés du tableau',deleteTable:'Supprimer le tableau',rows:'Lignes',columns:'Colonnes',border:'Taille de la bordure',widthPx:'pixels',widthPc:'% pourcents',widthUnit:'unité de largeur',cellSpace:'Espacement des cellules',cellPad:'Marge interne des cellules',caption:'Titre du tableau',summary:'Résumé (description)',headers:'En-Têtes',headersNone:'Aucunes',headersColumn:'Première colonne',headersRow:'Première ligne',headersBoth:'Les deux',invalidRows:'Le nombre de lignes doit être supérieur à 0.',invalidCols:'Le nombre de colonnes doit être supérieur à 0.',invalidBorder:'La taille de la bordure doit être un nombre.',invalidWidth:'La largeur du tableau doit être un nombre.',invalidHeight:'La hauteur du tableau doit être un nombre.',invalidCellSpacing:"L'espacement des cellules doit être un nombre positif.",invalidCellPadding:'La marge intérieure des cellules doit être un nombre positif.',cell:{menu:'Cellule',insertBefore:'Insérer une cellule avant',insertAfter:'Insérer une cellule après',deleteCell:'Supprimer les cellules',merge:'Fusionner les cellules',mergeRight:'Fusionner à droite',mergeDown:'Fusionner en bas',splitHorizontal:'Fractionner horizontalement',splitVertical:'Fractionner verticalement',title:'Propriétés de la cellule',cellType:'Type de cellule',rowSpan:'Fusion de lignes',colSpan:'Fusion de colonnes',wordWrap:'Césure',hAlign:'Alignement Horizontal',vAlign:'Alignement Vertical',alignBaseline:'Bas du texte',bgColor:"Couleur d'arrière-plan",borderColor:'Couleur de Bordure',data:'Données',header:'Entête',yes:'Oui',no:'Non',invalidWidth:'La Largeur de Cellule doit être un nombre.',invalidHeight:'La Hauteur de Cellule doit être un nombre.',invalidRowSpan:'La fusion de lignes doit être un nombre entier.',invalidColSpan:'La fusion de colonnes doit être un nombre entier.',chooseColor:'Choisissez'},row:{menu:'Ligne',insertBefore:'Insérer une ligne avant',insertAfter:'Insérer une ligne après',deleteRow:'Supprimer les lignes'},column:{menu:'Colonnes',insertBefore:'Insérer une colonne avant',insertAfter:'Insérer une colonne après',deleteColumn:'Supprimer les colonnes'}},button:{title:'Propriétés du bouton',text:'Texte (Value)',type:'Type',typeBtn:'Bouton',typeSbm:'Validation (submit)',typeRst:'Remise à zéro'},checkboxAndRadio:{checkboxTitle:'Propriétés de la case à cocher',radioTitle:'Propriétés du bouton Radio',value:'Valeur',selected:'Sélectionné'},form:{title:'Propriétés du formulaire',menu:'Propriétés du formulaire',action:'Action',method:'Méthode',encoding:'Encodage'},select:{title:'Propriétés du menu déroulant',selectInfo:'Informations sur le menu déroulant',opAvail:'Options disponibles',value:'Valeur',size:'Taille',lines:'Lignes',chkMulti:'Permettre les sélections multiples',opText:'Texte',opValue:'Valeur',btnAdd:'Ajouter',btnModify:'Modifier',btnUp:'Haut',btnDown:'Bas',btnSetValue:'Définir comme valeur sélectionnée',btnDelete:'Supprimer'},textarea:{title:'Propriétés de la zone de texte',cols:'Colonnes',rows:'Lignes'},textfield:{title:'Propriétés du champ texte',name:'Nom',value:'Valeur',charWidth:'Taille des caractères',maxChars:'Nombre maximum de caractères',type:'Type',typeText:'Texte',typePass:'Mot de passe'},hidden:{title:'Propriétés du champ caché',name:'Nom',value:'Valeur'},image:{title:"Propriétés de l'image",titleButton:'Propriétés du bouton image',menu:"Propriétés de l'image",infoTab:"Informations sur l'image",btnUpload:'Envoyer sur le serveur',upload:'Envoyer',alt:'Texte de remplacement',lockRatio:'Conserver les proportions',resetSize:"Taille d'origine",border:'Bordure',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',alertUrl:"Veuillez entrer l'adresse de l'image",linkTab:'Lien',button2Img:'Voulez-vous transformer le bouton image sélectionné en simple image?',img2Button:"Voulez-vous transformer l'image en bouton image?",urlMissing:"L'adresse source de l'image est manquante.",validateBorder:'Bordure doit être un entier.',validateHSpace:'HSpace doit être un entier.',validateVSpace:'VSpace doit être un entier.'},flash:{properties:'Propriétés du Flash',propertiesTab:'Propriétés',title:'Propriétés du Flash',chkPlay:'Jouer automatiquement',chkLoop:'Boucle',chkMenu:'Activer le menu Flash',chkFull:'Permettre le plein écran',scale:'Echelle',scaleAll:'Afficher tout',scaleNoBorder:'Pas de bordure',scaleFit:"Taille d'origine",access:'Accès aux scripts',accessAlways:'Toujours',accessSameDomain:'Même domaine',accessNever:'Jamais',alignAbsBottom:'Bas absolu',alignAbsMiddle:'Milieu absolu',alignBaseline:'Bas du texte',alignTextTop:'Haut du texte',quality:'Qualité',qualityBest:'Meilleure',qualityHigh:'Haute',qualityAutoHigh:'Haute Auto',qualityMedium:'Moyenne',qualityAutoLow:'Basse Auto',qualityLow:'Basse',windowModeWindow:'Fenêtre',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Mode fenêtre',flashvars:'Variables du Flash',bgcolor:"Couleur d'arrière-plan",hSpace:'Espacement horizontal',vSpace:'Espacement vertical',validateSrc:"L'adresse ne doit pas être vide.",validateHSpace:"L'espacement horizontal doit être un nombre.",validateVSpace:"L'espacement vertical doit être un nombre."},spellCheck:{toolbar:"Vérifier l'orthographe",title:"Vérifier l'orthographe",notAvailable:'Désolé, le service est indisponible actuellement.',errorLoading:"Erreur du chargement du service depuis l'hôte : %s.",notInDic:"N'existe pas dans le dictionnaire.",changeTo:'Modifier pour',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer tout',btnReplace:'Remplacer',btnReplaceAll:'Remplacer tout',btnUndo:'Annuler',noSuggestions:'- Aucune suggestion -',progress:"Vérification de l'orthographe en cours...",noMispell:"Vérification de l'orthographe terminée : aucune erreur trouvée.",noChanges:"Vérification de l'orthographe terminée : Aucun mot corrigé.",oneChange:"Vérification de l'orthographe terminée : Un seul mot corrigé.",manyChanges:"Vérification de l'orthographe terminée : %1 mots corrigés.",ieSpellDownload:"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?"},smiley:{toolbar:'Ãmoticones',title:'Insérer un émoticone',options:'Options des émoticones'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 éléments'},numberedlist:'Insérer/Supprimer la liste numérotée',bulletedlist:'Insérer/Supprimer la liste à puces',indent:'Augmenter le retrait (tabulation)',outdent:'Diminuer le retrait (tabulation)',justify:{left:'Aligner à gauche',center:'Centrer',right:'Aligner à droite',block:'Justifier'},blockquote:'Citation',clipboard:{title:'Coller',cutError:"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \"couper\". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).",copyError:"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).",pasteMsg:'Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.',securityMsg:"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.",pasteArea:'Coller la zone'},pastefromword:{confirmCleanup:'Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?',toolbar:'Coller depuis Word',title:'Coller depuis Word',error:"Il n'a pas été possible de nettoyer les données collées à la suite d'une erreur interne."},pasteText:{button:'Coller comme texte sans mise en forme',title:'Coller comme texte sans mise en forme'},templates:{button:'Modèles',title:'Contenu des modèles',options:'Options des modèles',insertOption:'Remplacer le contenu actuel',selectPromptMsg:"Veuillez sélectionner le modèle pour l'ouvrir dans l'éditeur",emptyListMsg:'(Aucun modèle disponible)'},showBlocks:'Afficher les blocs',stylesCombo:{label:'Styles',panelTitle:'Styles de mise en page',panelTitle1:'Styles de blocs',panelTitle2:'Styles en ligne',panelTitle3:"Styles d'objet"},format:{label:'Format',panelTitle:'Format de paragraphe',tag_p:'Normal',tag_pre:'Formaté',tag_address:'Adresse',tag_h1:'Titre 1',tag_h2:'Titre 2',tag_h3:'Titre 3',tag_h4:'Titre 4',tag_h5:'Titre 5',tag_h6:'Titre 6',tag_div:'Normal (DIV)'},div:{title:'Créer un container DIV',toolbar:'Créer un container DIV',cssClassInputLabel:'Classe CSS',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:'Code de langue',inlineStyleInputLabel:'Style en ligne',advisoryTitleInputLabel:'Advisory Title',langDirLabel:"Sens d'écriture",langDirLTRLabel:'Gauche à droite (LTR)',langDirRTLLabel:'Droite à gauche (RTL)',edit:'Ãditer la DIV',remove:'Enlever la DIV'},iframe:{title:'Propriétés de la IFrame',toolbar:'IFrame',noUrl:"Veuillez entrer l'adresse du lien de la IFrame",scrolling:'Permettre à la barre de défilement',border:'Afficher une bordure de la IFrame'},font:{label:'Police',voiceLabel:'Police',panelTitle:'Style de police'},fontSize:{label:'Taille',voiceLabel:'Taille de police',panelTitle:'Taille de police'},colorButton:{textColorTitle:'Couleur de texte',bgColorTitle:"Couleur d'arrière plan",panelTitle:'Couleurs',auto:'Automatique',more:'Plus de couleurs...'},colors:{'000':'Noir',800000:'Marron','8B4513':'Brun moyen','2F4F4F':'Vert sombre','008080':'Canard','000080':'Bleu marine','4B0082':'Indigo',696969:'Gris foncé',B22222:'Rouge brique',A52A2A:'Brun',DAA520:'Or terni','006400':'Vert foncé','40E0D0':'Turquoise','0000CD':'Bleu royal',800080:'Pourpre',808080:'Gris',F00:'Rouge',FF8C00:'Orange foncé',FFD700:'Or','008000':'Vert','0FF':'Cyan','00F':'Bleu',EE82EE:'Violet',A9A9A9:'Gris moyen',FFA07A:'Saumon',FFA500:'Orange',FFFF00:'Jaune','00FF00':'Lime',AFEEEE:'Turquoise clair',ADD8E6:'Bleu clair',DDA0DD:'Prune',D3D3D3:'Gris clair',FFF0F5:'Fard Lavande',FAEBD7:'Blanc antique',FFFFE0:'Jaune clair',F0FFF0:'Honeydew',F0FFFF:'Azur',F0F8FF:'Bleu Alice',E6E6FA:'Lavande',FFF:'Blanc'},scayt:{title:"Vérification de l'Orthographe en Cours de Frappe (SCAYT)",opera_title:'Non supporté par Opera',enable:'Activer SCAYT',disable:'Désactiver SCAYT',about:'A propos de SCAYT',toggle:'Activer/Désactiver SCAYT',options:'Options',langs:'Langues',moreSuggestions:'Plus de suggestions',ignore:'Ignorer',ignoreAll:'Ignorer Tout',addWord:'Ajouter le mot',emptyDic:'Le nom du dictionnaire ne devrait pas être vide.',optionsTab:'Options',allCaps:'Ignorer les mots entierement en majuscules',ignoreDomainNames:'Ignorer les noms de domaines',mixedCase:'Ignorer les mots à casse multiple',mixedWithDigits:'Ignorer les mots contenant des chiffres',languagesTab:'Langues',dictionariesTab:'Dictionnaires',dic_field_name:'Nom du dictionnaire',dic_create:'Créer',dic_restore:'Restaurer',dic_delete:'Effacer',dic_rename:'Renommer',dic_info:"Initiallement, le dictionnaire de l'utilisateur est stocké dans un cookie. Cependant, les cookies sont limités en taille. Quand le dictionnaire atteint une taille qu'il n'est plus possible de stocker dans un cookie, il peut alors être stocké sur nos serveurs. Afin de stocker votre dictionnaire personnel sur nos serveurs, vous devez spécifier un nom pour ce dictionnaire. Si vous avez déjà un dictionnaire stocké, merci de taper son nom puis cliquer sur Restaurer pour le récupérer.",aboutTab:'à propos de'},about:{title:'A propos de CKEditor',dlgTitle:'A propos de CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Pour les informations de licence, veuillez visiter notre site web:',copy:'Copyright © $1. Tous droits réservés.'},maximize:'Agrandir',minimize:'Minimiser',fakeobjects:{anchor:'Ancre',flash:'Animation Flash',iframe:'IFrame',hiddenfield:'Champ caché',unknown:'Objet inconnu'},resize:'Déplacer pour modifier la taille',colordialog:{title:'Choisir une couleur',options:'Option des couleurs',highlight:'Détails',selected:'Couleur choisie',clear:'Effacer'},toolbarCollapse:"Enrouler la barre d'outils",toolbarExpand:"Dérouler la barre d'outils",toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Direction du texte de la gauche vers la droite',rtl:'Direction du texte de la droite vers la gauche'},docprops:{label:'Propriétés du document',title:'Propriétés du document',design:'Design',meta:'Métadonnées',chooseColor:'Choisissez',other:'<autre>',docTitle:'Titre de la page',charset:'Encodage de caractère',charsetOther:'Autre encodage de caractère',charsetASCII:'ASCII',charsetCE:'Europe Centrale',charsetCT:'Chinois Traditionnel (Big5)',charsetCR:'Cyrillique',charsetGR:'Grec',charsetJP:'Japonais',charsetKR:'Coréen',charsetTR:'Turc',charsetUN:'Unicode (UTF-8)',charsetWE:'Occidental',docType:'Type de document',docTypeOther:'Autre type de document',xhtmlDec:'Inclure les déclarations XHTML',bgColor:'Couleur de fond',bgImage:'Image de fond',bgFixed:'Image fixe sans défilement',txtColor:'Couleur de texte',margin:'Marges',marginTop:'Haut',marginLeft:'Gauche',marginRight:'Droite',marginBottom:'Bas',metaKeywords:'Mots-clés (séparés par des virgules)',metaDescription:'Description',metaAuthor:'Auteur',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/gl.js b/lang/gl.js new file mode 100644 index 0000000..21ce3d0 --- /dev/null +++ b/lang/gl.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.gl={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Código Fonte',newPage:'Nova Páxina',save:'Gardar',preview:'Vista Previa',cut:'Cortar',copy:'Copiar',paste:'Pegar',print:'Imprimir',underline:'Sub-raiado',bold:'Negrita',italic:'Cursiva',selectAll:'Seleccionar todo',removeFormat:'Eliminar Formato',strike:'Tachado',subscript:'SubÃndice',superscript:'SuperÃndice',horizontalrule:'Inserir Liña Horizontal',pagebreak:'Inserir Salto de Páxina',pagebreakAlt:'Page Break',unlink:'Eliminar Ligazón',undo:'Desfacer',redo:'Refacer',common:{browseServer:'Navegar no Servidor',url:'URL',protocol:'Protocolo',upload:'Carregar',uploadSubmit:'Enviar ó Servidor',image:'Imaxe',flash:'Flash',form:'Formulario',checkbox:'Cadro de Verificación',radio:'Botón de Radio',textField:'Campo de Texto',textarea:'Ãrea de Texto',hiddenField:'Campo Oculto',button:'Botón',select:'Campo de Selección',imageButton:'Botón de Imaxe',notSet:'<non definido>',id:'Id',name:'Nome',langDir:'Orientación do Idioma',langDirLtr:'Esquerda a Dereita (LTR)',langDirRtl:'Dereita a Esquerda (RTL)',langCode:'Código do Idioma',longDescr:'Descrición Completa da URL',cssClass:'Clases da Folla de Estilos',advisoryTitle:'TÃtulo',cssStyle:'Estilo',ok:'OK',cancel:'Cancelar',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanzado',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largura',height:'Altura',align:'Aliñamento',alignLeft:'Esquerda',alignRight:'Dereita',alignCenter:'Centro',alignTop:'Tope',alignMiddle:'Centro',alignBottom:'Pé',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Inserir Carácter Especial',title:'Seleccione Caracter Especial',options:'Special Character Options'},link:{toolbar:'Inserir/Editar Ligazón',other:'<outro>',menu:'Editar Ligazón',title:'Ligazón',info:'Información da Ligazón',target:'Destino',upload:'Carregar',advanced:'Advanzado',type:'Tipo de Ligazón',toUrl:'URL',toAnchor:'Referencia nesta páxina',toEmail:'E-Mail',targetFrame:'<frame>',targetPopup:'<Xanela Emerxente>',targetFrameName:'Nome do Marco Destino',targetPopupName:'Nome da Xanela Emerxente',popupFeatures:'CaracterÃsticas da Xanela Emerxente',popupResizable:'Resizable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de Localización',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menú',popupFullScreen:'A Toda Pantalla (IE)',popupScrollBars:'Barras de Desplazamento',popupDependent:'Dependente (Netscape)',popupLeft:'Posición Esquerda',popupTop:'Posición dende Arriba',id:'Id',langDir:'Orientación do Idioma',langDirLTR:'Esquerda a Dereita (LTR)',langDirRTL:'Dereita a Esquerda (RTL)',acccessKey:'Chave de Acceso',name:'Nome',langCode:'Orientación do Idioma',tabIndex:'Ãndice de Tabulación',advisoryTitle:'TÃtulo',advisoryContentType:'Tipo de Contido',cssClasses:'Clases da Folla de Estilos',charset:'Fonte de Caracteres Vinculado',styles:'Estilo',rel:'Relationship',selectAnchor:'Seleccionar unha Referencia',anchorName:'Por Nome de Referencia',anchorId:'Por Element Id',emailAddress:'Enderezo de E-Mail',emailSubject:'Asunto do Mensaxe',emailBody:'Corpo do Mensaxe',noAnchors:'(Non hai referencias disponibles no documento)',noUrl:'Por favor, escriba a ligazón URL',noEmail:'Por favor, escriba o enderezo de e-mail'},anchor:{toolbar:'Inserir/Editar Referencia',menu:'Propriedades da Referencia',title:'Propriedades da Referencia',name:'Nome da Referencia',errorName:'Por favor, escriba o nome da referencia',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Procurar',replace:'Substituir',findWhat:'Texto a procurar:',replaceWith:'Substituir con:',notFoundMsg:'Non te atopou o texto indicado.',matchCase:'Coincidir Mai./min.',matchWord:'Coincidir con toda a palabra',matchCyclic:'Match cyclic',replaceAll:'Substitiur Todo',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabla',title:'Propiedades da Táboa',menu:'Propiedades da Táboa',deleteTable:'Borrar Táboa',rows:'Filas',columns:'Columnas',border:'Tamaño do Borde',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Marxe entre Celas',cellPad:'Marxe interior',caption:'TÃtulo',summary:'Sumario',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cela',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Borrar Cela',merge:'Unir Celas',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Fila',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Borrar Filas'},column:{menu:'Columna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Borrar Columnas'}},button:{title:'Propriedades do Botón',text:'Texto (Valor)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Propriedades do Cadro de Verificación',radioTitle:'Propriedades do Botón de Radio',value:'Valor',selected:'Seleccionado'},form:{title:'Propriedades do Formulario',menu:'Propriedades do Formulario',action:'Acción',method:'Método',encoding:'Encoding'},select:{title:'Propriedades do Campo de Selección',selectInfo:'Info',opAvail:'Opcións Disponibles',value:'Valor',size:'Tamaño',lines:'liñas',chkMulti:'Permitir múltiples seleccións',opText:'Texto',opValue:'Valor',btnAdd:'Engadir',btnModify:'Modificar',btnUp:'Subir',btnDown:'Baixar',btnSetValue:'Definir como valor por defecto',btnDelete:'Borrar'},textarea:{title:'Propriedades da Ãrea de Texto',cols:'Columnas',rows:'Filas'},textfield:{title:'Propriedades do Campo de Texto',name:'Nome',value:'Valor',charWidth:'Tamaño do Caracter',maxChars:'Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Chave'},hidden:{title:'Propriedades do Campo Oculto',name:'Nome',value:'Valor'},image:{title:'Propriedades da Imaxe',titleButton:'Propriedades do Botón de Imaxe',menu:'Propriedades da Imaxe',infoTab:'Información da Imaxe',btnUpload:'Enviar ó Servidor',upload:'Carregar',alt:'Texto Alternativo',lockRatio:'Proporcional',resetSize:'Tamaño Orixinal',border:'LÃmite',hSpace:'Esp. Horiz.',vSpace:'Esp. Vert.',alertUrl:'Por favor, escriba a URL da imaxe',linkTab:'Ligazón',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Propriedades Flash',propertiesTab:'Properties',title:'Propriedades Flash',chkPlay:'Auto Execución',chkLoop:'Bucle',chkMenu:'Activar Menú Flash',chkFull:'Allow Fullscreen',scale:'Escalar',scaleAll:'Amosar Todo',scaleNoBorder:'Sen Borde',scaleFit:'Encaixar axustando',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Inferior',alignAbsMiddle:'Abs Centro',alignBaseline:'Liña Base',alignTextTop:'Tope do Texto',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Cor do Fondo',hSpace:'Esp. Horiz.',vSpace:'Esp. Vert.',validateSrc:'Por favor, escriba a ligazón URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Corrección Ortográfica',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Non está no diccionario',changeTo:'Cambiar a',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Todas',btnReplace:'Substituir',btnReplaceAll:'Substituir Todas',btnUndo:'Desfacer',noSuggestions:'- Sen candidatos -',progress:'Corrección ortográfica en progreso...',noMispell:'Corrección ortográfica rematada: Non se atoparon erros',noChanges:'Corrección ortográfica rematada: Non se substituiu nengunha verba',oneChange:'Corrección ortográfica rematada: Unha verba substituida',manyChanges:'Corrección ortográfica rematada: %1 verbas substituidas',ieSpellDownload:'O corrector ortográfico non está instalado. ¿Quere descargalo agora?'},smiley:{toolbar:'Smiley',title:'Inserte un Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Lista Numerada',bulletedlist:'Marcas',indent:'Aumentar SangrÃa',outdent:'Disminuir SangrÃa',justify:{left:'Aliñar á Esquerda',center:'Centrado',right:'Aliñar á Dereita',block:'Xustificado'},blockquote:'Block Quote',clipboard:{title:'Pegar',cutError:'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl/Cmd+X).',copyError:'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl/Cmd+C).',pasteMsg:'Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e pulse <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Pegar dende Word',title:'Pegar dende Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Pegar como texto plano',title:'Pegar como texto plano'},templates:{button:'Plantillas',title:'Plantillas de Contido',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):',emptyListMsg:'(Non hai plantillas definidas)'},showBlocks:'Show Blocks',stylesCombo:{label:'Estilo',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normal',tag_pre:'Formateado',tag_address:'Enderezo',tag_h1:'Enacabezado 1',tag_h2:'Encabezado 2',tag_h3:'Encabezado 3',tag_h4:'Encabezado 4',tag_h5:'Encabezado 5',tag_h6:'Encabezado 6',tag_div:'Paragraph (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Tipo',voiceLabel:'Font',panelTitle:'Tipo'},fontSize:{label:'Tamaño',voiceLabel:'Font Size',panelTitle:'Tamaño'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor do Fondo',panelTitle:'Colors',auto:'Automático',more:'Máis Cores...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Propriedades do Documento',title:'Propriedades do Documento',design:'Design',meta:'Meta Tags',chooseColor:'Choose',other:'<outro>',docTitle:'TÃtulo da Páxina',charset:'Codificación do Xogo de Caracteres',charsetOther:'Outra Codificación do Xogo de Caracteres',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Encabezado do Tipo de Documento',docTypeOther:'Outro Encabezado do Tipo de Documento',xhtmlDec:'Incluir Declaracións XHTML',bgColor:'Cor de Fondo',bgImage:'URL da Imaxe de Fondo',bgFixed:'Fondo Fixo',txtColor:'Cor do Texto',margin:'Marxes da Páxina',marginTop:'Arriba',marginLeft:'Esquerda',marginRight:'Dereita',marginBottom:'Abaixo',metaKeywords:'Palabras Chave de Indexación do Documento (separadas por comas)',metaDescription:'Descripción do Documento',metaAuthor:'Autor',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/gu.js b/lang/gu.js new file mode 100644 index 0000000..50ce1a6 --- /dev/null +++ b/lang/gu.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.gu={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'મà«àª³ àªà« પà«àª°àª¾àª¥àª®àª¿àª દસà«àª¤àª¾àªµà«àª',newPage:'નવૠપાનà«àª',save:'સà«àªµ',preview:'પà«àª°à«àªµàª¦àª°à«àª¶àª¨',cut:'àªàª¾àªªàªµà«àª',copy:'નàªàª²',paste:'પà«àª¸à«àª',print:'પà«àª°àª¿àª¨à«àª',underline:'ઠનà«àª¡àª°à«àª²àª¾àªàª¨, નà«àªà« લà«àªà«',bold:'બà«àª²à«àª¡/સà«àªªàª·à«àª',italic:'àªàªà«àª²àª¿àª, તà«àª°àª¾àªàª¸àª¾',selectAll:'બàªà«àª પસàªàª¦ àªàª°àªµà«àª',removeFormat:'ફà«àª°à«àª®àª àªàª¾àª¢àªµà«àª',strike:'àªà«àªà« નાàªàªµà«àª',subscript:'àªàª àªàª¿àª¹à«àª¨àª¨à« નà«àªà« àªàª°à«àª²à«àª બà«àªà«àª àªàª¿àª¹à«àª¨',superscript:'àªàª àªàª¿àª¹à«àª¨ àªàªªàª° àªàª°à«àª²à«àª બà«àªà«àª àªàª¿àª¹à«àª¨.',horizontalrule:'સમસà«àª¤àª°à«àª¯ રà«àªàª¾ àªàª¨à«àª¸àª°à«àª/દાàªàª² àªàª°àªµà«',pagebreak:'àªàª¨à«àª¸àª°à«àª પà«àªàª¬à«àª°à«àª/પાનાનૠઠલઠàªàª°àªµà«àª/દાàªàª² àªàª°àªµà«àª',pagebreakAlt:'Page Break',unlink:'લિàªàª àªàª¾àª¢àªµà«',undo:'રદ àªàª°àªµà«àª; પહà«àª²àª¾àª હતૠàªàªµà« સà«àª¥àª¿àª¤àª¿ પાàªà« લાવવà«',redo:'રિડà«; પàªà« હતૠàªàªµà« સà«àª¥àª¿àª¤àª¿ પાàªà« લાવવà«',common:{browseServer:'સરà«àªµàª° બà«àª°àª¾àªàª àªàª°à«',url:'URL',protocol:'પà«àª°à«àªà«àªà«àª²',upload:'ઠપલà«àª¡',uploadSubmit:'ઠસરà«àªµàª°àª¨à« મà«àªàª²àªµà«àª',image:'àªàª¿àª¤à«àª°',flash:'ફà«àª²à« શ',form:'ફà«àª°à«àª®/પતà«àª°àª',checkbox:'àªà«àª બà«àªà«àª¸',radio:'રà«àª¡àª¿àª બàªàª¨',textField:'àªà«àªà«àª¸à«àª ફà«àª²à«àª¡, શબà«àª¦ àªà«àª·à«àª¤à«àª°',textarea:'àªà«àªà«àª¸à«àª àªàª°àª¿àª, શબà«àª¦ વિસà«àª¤àª¾àª°',hiddenField:'àªà«àªªà«àª¤ àªà«àª·à«àª¤à«àª°',button:'બàªàª¨',select:'પસàªàª¦àªà« àªà«àª·à«àª¤à«àª°',imageButton:'àªàª¿àª¤à«àª° બàªàª¨',notSet:'<સà«àª નથà«>',id:'Id',name:'નામ',langDir:'àªàª¾àª·àª¾ લà«àªàªµàª¾àª¨à« પદà«àª§àª¤àª¿',langDirLtr:'ડાબૠથૠàªàª®àª£à« (LTR)',langDirRtl:'àªàª®àª£à« થૠડાબૠ(RTL)',langCode:'àªàª¾àª·àª¾ àªà«àª¡',longDescr:'વધારૠમાહિતૠમાàªà« URL',cssClass:'સà«àªàª¾àªàª²-શà«àª àªà«àª²àª¾àª¸',advisoryTitle:'મà«àªà«àª¯ મથાળà«àª',cssStyle:'સà«àªàª¾àªàª²',ok:'ઠà«àª àªà«',cancel:'રદ àªàª°àªµà«àª',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'ઠડà«àªµàª¾àª¨à«àª¸àª¡',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'પહà«àª³àª¾àª',height:'àªàªàªàª¾àª',align:'લાàªàª¨àª¦à«àª°à«àª®àª¾àª àªà«àª વવà«àª',alignLeft:'ડાબૠબાàªà« àªà«àª વવà«àª',alignRight:'àªàª®àª£à«',alignCenter:'મધà«àª¯ સà«àª¨à«àªàª°',alignTop:'àªàªªàª°',alignMiddle:'વàªà«àªà«',alignBottom:'નà«àªà«',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'વિશિષà«àª ઠàªà«àª·àª° àªàª¨à«àª¸àª°à«àª/દાàªàª² àªàª°àªµà«àª',title:'સà«àªªà«àª¶àª¿àª લ વિશિષà«àª ઠàªà«àª·àª° પસàªàª¦ àªàª°à«',options:'Special Character Options'},link:{toolbar:'લિàªàª àªàª¨à«àª¸àª°à«àª/દાàªàª² àªàª°àªµà«',other:'<other>',menu:' લિàªàª àªàª¡àª¿àª/માઠફà«àª°àª«àª¾àª° àªàª°àªµà«',title:'લિàªàª',info:'લિàªàª àªàª¨à«àª«à« àªà« બ',target:'àªàª¾àª°à«àªà«àª/લàªà«àª·à«àª¯',upload:'ઠપલà«àª¡',advanced:'ઠડà«àªµàª¾àª¨à«àª¸àª¡',type:'લિàªàª પà«àª°àªàª¾àª°',toUrl:'URL',toAnchor:'ઠપà«àªàª¨à« àªàªàªàª°',toEmail:'àª-મà«àª²',targetFrame:'<ફà«àª°à«àª®>',targetPopup:'<પà«àªª-ઠપ વિનà«àª¡à«>',targetFrameName:'àªàª¾àª°à«àªà«àª ફà«àª°à«àª® નà«àª નામ',targetPopupName:'પà«àªª-ઠપ વિનà«àª¡à« નà«àª નામ',popupFeatures:'પà«àªª-ઠપ વિનà«àª¡à« ફà«àªàª°àª¸à« ',popupResizable:'Resizable',popupStatusBar:'સà«àªà« àªàª¸ બાર',popupLocationBar:'લà«àªà«àª¶àª¨ બાર',popupToolbar:'àªà«àª² બાર',popupMenuBar:'મà«àª¨à«àª¯à« બાર',popupFullScreen:'ફà«àª² સà«àªà«àª°à«àª¨ (IE)',popupScrollBars:'સà«àªà«àª°à«àª² બાર',popupDependent:'ડિપà«àª¨à«àª¡àª¨à«àª (Netscape)',popupLeft:'ડાબૠબાàªà«',popupTop:'àªàª®àª£à« બાàªà«',id:'Id',langDir:'àªàª¾àª·àª¾ લà«àªàªµàª¾àª¨à« પદà«àª§àª¤àª¿',langDirLTR:'ડાબૠથૠàªàª®àª£à« (LTR)',langDirRTL:'àªàª®àª£à« થૠડાબૠ(RTL)',acccessKey:'àªàªà«àª¸à«àª¸ àªà«',name:'નામ',langCode:'àªàª¾àª·àª¾ લà«àªàªµàª¾àª¨à« પદà«àª§àª¤àª¿',tabIndex:'àªà« બ àªàª¨à«àª¡à«àªà«àª¸',advisoryTitle:'મà«àªà«àª¯ મથાળà«àª',advisoryContentType:'મà«àªà«àª¯ àªàª¨à«àªà«àª¨à«àª પà«àª°àªàª¾àª°',cssClasses:'સà«àªàª¾àªàª²-શà«àª àªà«àª²àª¾àª¸',charset:'લિàªàª રિસà«àª°à«àª¸ àªà« રિàªà«àªàª° સà«àª',styles:'સà«àªàª¾àªàª²',rel:'Relationship',selectAnchor:'àªàªàªàª° પસàªàª¦ àªàª°à«',anchorName:'àªàªàªàª° નામથૠપસàªàª¦ àªàª°à«',anchorId:'àªàªàªàª° àªàª²àª¿àª®àª¨à«àª Id થૠપસàªàª¦ àªàª°à«',emailAddress:'àª-મà«àª² સરનામà«àª',emailSubject:'àª-મà«àª² વિષય',emailBody:'સàªàª¦à«àª¶',noAnchors:'(ડà«àªà«àª¯à«àª®àª¨à«àªàª®àª¾àª àªàªàªàª°àª¨à« સàªàªà«àª¯àª¾)',noUrl:'લિàªàª URL àªàª¾àªàªª àªàª°à«',noEmail:'àª-મà«àª² સરનામà«àª àªàª¾àªàªª àªàª°à«'},anchor:{toolbar:'àªàªàªàª° àªàª¨à«àª¸àª°à«àª/દાàªàª² àªàª°àªµà«',menu:'àªàªàªàª°àª¨àª¾ àªà«àª£',title:'àªàªàªàª°àª¨àª¾ àªà«àª£',name:'àªàªàªàª°àª¨à«àª નામ',errorName:'àªàªàªàª°àª¨à«àª નામ àªàª¾àªàªª àªàª°à«',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'શà«àª§àªµà«àª ઠનૠબદલવà«àª',find:'શà«àª§àªµà«àª',replace:'રિપà«àª²à«àª¸/બદલવà«àª',findWhat:'ઠશà«àª§à«',replaceWith:'àªàª¨àª¾àª¥à« બદલà«',notFoundMsg:'તમૠશà«àª§à«àª²à« àªà«àªà«àª¸à«àª નથૠમળà«',matchCase:'àªà«àª¸ સરàªàª¾ રાàªà«',matchWord:'બàªàª¾ શબà«àª¦ સરàªàª¾ રાàªà«',matchCyclic:'Match cyclic',replaceAll:'બàªàª¾ બદલૠ',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'àªà«àª¬àª², àªà«àª à«',title:'àªà«àª¬àª², àªà«àª ાનà«àª મથાળà«àª',menu:'àªà«àª¬àª², àªà«àª ાનà«àª મથાળà«àª',deleteTable:'àªà«àª ૠડિલà«àª/àªàª¾àª¢à« નાàªàªµà«àª',rows:'પàªàªà«àª¤àª¿àª¨àª¾ àªàª¾àª¨àª¾',columns:'àªà«àª²àª®/àªàªà« àªàªàª¾àª°',border:'àªà«àª ાનૠબાàªà«(બà«àª°à«àª¡àª°) સાàªàª',widthPx:'પિàªàª¸àª²',widthPc:'પà«àª°àª¤àª¿àª¶àª¤',widthUnit:'width unit',cellSpace:'સà«àª² ઠàªàª¤àª°',cellPad:'સà«àª² પૠડિàªàª',caption:'મથાળà«àª/àªà« પà«àª¶àª¨ ',summary:'àªà«àªàªà« àªàª¹à«àªµàª¾àª²',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'àªà«àª·àª¨àª¾ àªàª¾àª¨àª¾',insertBefore:'પહà«àª²àª¾àª àªà«àª· àªàª®à«àª°àªµà«',insertAfter:'પàªà« àªà«àª· àªàª®à«àª°àªµà«',deleteCell:'àªà«àª· ડિલà«àª/àªàª¾àª¢à« નાàªàªµà«',merge:'àªà«àª· àªà«àªàª¾ àªàª°àªµàª¾',mergeRight:'àªàª®àª£à« બાàªà« àªà«àªàª¾ àªàª°àªµàª¾',mergeDown:'નà«àªà« àªà«àªàª¾ àªàª°àªµàª¾',splitHorizontal:'àªà«àª·àª¨à« સમસà«àª¤àª°à«àª¯ વિàªàª¾àªàª¨ àªàª°àªµà«àª',splitVertical:'àªà«àª·àª¨à« સà«àª§à«àª નૠàªàªà«àª વિàªàª¾àªàª¨ àªàª°àªµà«àª',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'પàªàªà«àª¤àª¿àª¨àª¾ àªàª¾àª¨àª¾',insertBefore:'પહà«àª²àª¾àª પàªàªà«àª¤àª¿ àªàª®à«àª°àªµà«',insertAfter:'પàªà« પàªàªà«àª¤àª¿ àªàª®à«àª°àªµà«',deleteRow:'પàªàªà«àª¤àª¿àª ડિલà«àª/àªàª¾àª¢à« નાàªàªµà«'},column:{menu:'àªà«àª²àª®/àªàªà« àªàªàª¾àª°',insertBefore:'પહà«àª²àª¾àª àªà«àª²àª®/àªàªà« àªàªàª¾àª° àªàª®à«àª°àªµà«',insertAfter:'પàªà« àªà«àª²àª®/àªàªà« àªàªàª¾àª° àªàª®à«àª°àªµà«',deleteColumn:'àªà«àª²àª®/àªàªà« àªàªàª¾àª° ડિલà«àª/àªàª¾àª¢à« નાàªàªµà«'}},button:{title:'બàªàª¨àª¨àª¾ àªà«àª£',text:'àªà«àªà«àª¸à«àª (વૠલà«àª¯à«)',type:'પà«àª°àªàª¾àª°',typeBtn:'બàªàª¨',typeSbm:'સબà«àª®àª¿àª',typeRst:'રિસà«àª'},checkboxAndRadio:{checkboxTitle:'àªà«àª બà«àªà«àª¸ àªà«àª£',radioTitle:'રà«àª¡àª¿àª બàªàª¨àª¨àª¾ àªà«àª£',value:'વૠલà«àª¯à«',selected:'સિલà«àªà«àªà«àª¡'},form:{title:'ફà«àª°à«àª®/પતà«àª°àªàª¨àª¾ àªà«àª£',menu:'ફà«àª°à«àª®/પતà«àª°àªàª¨àª¾ àªà«àª£',action:'àªà«àª°àª¿àª¯àª¾',method:'પદà«àª§àª¤àª¿',encoding:'Encoding'},select:{title:'પસàªàª¦àªà« àªà«àª·à«àª¤à«àª°àª¨àª¾ àªà«àª£',selectInfo:'સà«àªàª¨àª¾',opAvail:'àªàªªàª²àª¬à«àª§ વિàªàª²à«àªª',value:'વૠલà«àª¯à«',size:'સાàªàª',lines:'લà«àªà«àª',chkMulti:'àªàªàª¥à« વધારૠપસàªàª¦ àªàª°à« શàªà«',opText:'àªà«àªà«àª¸à«àª',opValue:'વૠલà«àª¯à«',btnAdd:'àªàª®à«àª°àªµà«àª',btnModify:'બદલવà«àª',btnUp:'àªàªªàª°',btnDown:'નà«àªà«',btnSetValue:'પસàªàª¦ àªàª°àª²à« વૠલà«àª¯à« સà«àª àªàª°à«',btnDelete:'રદ àªàª°àªµà«àª'},textarea:{title:'àªà«àªà«àª¸à«àª àªàª રિàª, શબà«àª¦ વિસà«àª¤àª¾àª°àª¨àª¾ àªà«àª£',cols:'àªà«àª²àª®/àªàªà« àªàªàª¾àª°',rows:'પàªàªà«àª¤àª¿àª'},textfield:{title:'àªà«àªà«àª¸à«àª ફà«àª²à«àª¡, શબà«àª¦ àªà«àª·à«àª¤à«àª°àª¨àª¾ àªà«àª£',name:'નામ',value:'વૠલà«àª¯à«',charWidth:'àªà«àª°à«àªà«àªàª°àª¨à« પહà«àª³àª¾àª',maxChars:'ઠધિàªàª¤àª® àªà«àª°à«àªà«àªàª°',type:'àªàª¾àªàªª',typeText:'àªà«àªà«àª¸à«àª',typePass:'પાસવરà«àª¡'},hidden:{title:'àªà«àªªà«àª¤ àªà«àª·à«àª¤à«àª°àª¨àª¾ àªà«àª£',name:'નામ',value:'વૠલà«àª¯à«'},image:{title:'àªàª¿àª¤à«àª°àª¨àª¾ àªà«àª£',titleButton:'àªàª¿àª¤à«àª° બàªàª¨àª¨àª¾ àªà«àª£',menu:'àªàª¿àª¤à«àª°àª¨àª¾ àªà«àª£',infoTab:'àªàª¿àª¤à«àª° નૠàªàª¾àª£àªàª¾àª°à«',btnUpload:'ઠસરà«àªµàª°àª¨à« મà«àªàª²àªµà«àª',upload:'ઠપલà«àª¡',alt:'àªàª²à«àªàª°à«àª¨àª àªà«àªà«àª¸à«àª',lockRatio:'લà«àª àªà«àª£à«àª¤à«àª¤àª°',resetSize:'રà«àª¸à«àª સાàªàª',border:'બà«àª°à«àª¡àª°',hSpace:'સમસà«àª¤àª°à«àª¯ àªàªà«àª¯àª¾',vSpace:'લàªàª¬àª°à«àªª àªàªà«àª¯àª¾',alertUrl:'àªàª¿àª¤à«àª°àª¨à« URL àªàª¾àªàªª àªàª°à«',linkTab:'લિàªàª',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ફà«àª²à« શના àªà«àª£',propertiesTab:'Properties',title:'ફà«àª²à« શ àªà«àª£',chkPlay:'àªàªà«/સà«àªµàª¯àª પà«àª²à«',chkLoop:'લà«àªª',chkMenu:'ફà«àª²à« શ મà«àª¨à«àª¯à« નૠપà«àª°àª¯à«àª àªàª°à«',chkFull:'Allow Fullscreen',scale:'સà«àªà«àª²',scaleAll:'સà«àªà«àª² àªàª²/બધૠબતાવà«',scaleNoBorder:'સà«àªà«àª² બà«àª°à«àª¡àª° વàªàª°',scaleFit:'સà«àªà«àª² àªàªàª¦àª® ફà«àª',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs નà«àªà«',alignAbsMiddle:'Abs àªàªªàª°',alignBaseline:'àªàª§àª¾àª° લà«àªà«',alignTextTop:'àªà«àªà«àª¸à«àª àªàªªàª°',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'બૠàªàªà«àª°àª¾àªàª¨à«àª¡ રàªàª,',hSpace:'સમસà«àª¤àª°à«àª¯ àªàªà«àª¯àª¾',vSpace:'લàªàª¬àª°à«àªª àªàªà«àª¯àª¾',validateSrc:'લિàªàª URL àªàª¾àªàªª àªàª°à«',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'àªà«àª¡àª£à« (સà«àªªà«àª²àª¿àªàª) તપાસવà«',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'શબà«àª¦àªà«àª¶àª®àª¾àª નથà«',changeTo:'àªàª¨àª¾àª¥à« બદલવà«àª',btnIgnore:'àªàªà«àª¨à«àª°/ઠવàªàª£àª¨àª¾ àªàª°àªµà«',btnIgnoreAll:'બધાનૠàªàªà«àª¨à«àª°/ઠવàªàª£àª¨àª¾ àªàª°àªµà«',btnReplace:'બદલવà«àª',btnReplaceAll:'બધા બદલૠàªàª°à«',btnUndo:'ઠનà«àª¡à«',noSuggestions:'- àªàª સàªà«àª¶àª¨ નથૠ-',progress:'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª àªàª¾àª²à« àªà«...',noMispell:'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª પà«àª°à«àª£: àªà«àªà« àªà«àª¡àª£à« મળૠનથà«',noChanges:'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª પà«àª°à«àª£: àªàªàªªàª£ શબà«àª¦ બદલયૠનથà«',oneChange:'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª પà«àª°à«àª£: àªàª શબà«àª¦ બદલયૠàªà«',manyChanges:'શબà«àª¦àª¨à« àªà«àª¡àª£à«/સà«àªªà«àª² àªà«àª પà«àª°à«àª£: %1 શબà«àª¦ બદલયા àªà«',ieSpellDownload:'સà«àªªà«àª²-àªà«àªàª° àªàª¨à«àª¸à«àªà«àª² નથà«. શà«àª તમૠડાàªàª¨àª²à«àª¡ àªàª°àªµàª¾ માàªàªà« àªà«?'},smiley:{toolbar:'સà«àª®àª¾àªàª²à«',title:'સà«àª®àª¾àªàª²à« પસàªàª¦ àªàª°à«',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'સàªàªà«àª¯àª¾àªàªàª¨ સà«àªàª¿',bulletedlist:'બà«àª²à«àª સà«àªàª¿',indent:'àªàª¨à«àª¡à«àª¨à«àª, લà«àªà«àª¨àª¾ àªàª°àªàªàª®àª¾àª àªàªà«àª¯àª¾ વધારવà«',outdent:'àªàª¨à«àª¡à«àª¨à«àª લà«àªà«àª¨àª¾ àªàª°àªàªàª®àª¾àª àªàªà«àª¯àª¾ àªàªàª¾àª¡àªµà«',justify:{left:'ડાબૠબાàªà«àª/બાàªà« તરફ',center:'સàªàªà«àªàª¦à«àª°àª£/સà«àªàªàª°àª¿àªàª',right:'àªàª®àª£à« બાàªà«àª/બાàªà« તરફ',block:'બà«àª²à«àª, ઠàªàª¤àª°àª¾àª¯ àªàª¸à«àªàª¿àª«àª¾àª'},blockquote:'બà«àª²à«àª-àªà«àª, ઠવતરણàªàª¿àª¹à«àª¨à«',clipboard:{title:'પà«àª¸à«àª',cutError:'તમારા બà«àª°àª¾àªàªàª° નૠસà«àª°àªà«àª·àª¿àª¤ સà«àªàª¿àªàªàª¸ àªàª àªàª°àªµàª¾àª¨à« પરવાનàªà« નથૠàªàªªàª¤à«. (Ctrl/Cmd+X) નૠàªàªªàª¯à«àª àªàª°à«.',copyError:'તમારા બà«àª°àª¾àªàªàª° નૠસà«àª°àªà«àª·àª¿àª¤ સà«àªàª¿àªàªàª¸ àªà«àªªà« àªàª°àªµàª¾àª¨à« પરવાનàªà« નથૠàªàªªàª¤à«. (Ctrl/Cmd+C) à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤à¥¤',pasteMsg:'Ctrl/Cmd+V નૠપà«àª°àª¯à«àª àªàª°à« પà«àª¸à«àª àªàª°à«',securityMsg:'તમારા બà«àª°àª¾àªàªàª° નૠસà«àª°àªà«àª·àª¿àª¤ સà«àªàª¿àªàªàª¸àª¨àª¾ àªàª¾àª°àª£à«,àªàª¡àª¿àªàª° તમારા àªàª¿àª²à«àªªàª¬à«àª°à«àª¡ ડà«àªàª¾ નૠàªà«àªªà« નથૠàªàª°à« શàªàª¤à«. તમારૠઠવિનà«àª¡à«àª®àª¾àª ફરà«àª¥à« પà«àª¸à«àª àªàª°àªµà«àª પડશà«.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'પà«àª¸à«àª (વડૠàªà«àªà«àª¸à«àª)',title:'પà«àª¸à«àª (વડૠàªà«àªà«àª¸à«àª)',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'પà«àª¸à«àª (àªà«àªà«àª¸à«àª)',title:'પà«àª¸à«àª (àªà«àªà«àª¸à«àª)'},templates:{button:'àªà«àª®à«àªªà«àª²à«àª',title:'àªàª¨à«àªà«àª¨à«àª àªà«àª®à«àªªà«àª²à«àª',options:'Template Options',insertOption:'મà«àª³ શબà«àª¦àª¨à« બદલà«',selectPromptMsg:'àªàª¡àª¿àªàª°àª®àª¾àª àªàªªàª¨ àªàª°àªµàª¾ àªà«àª®à«àªªà«àª²à«àª પસàªàª¦ àªàª°à« (વરà«àª¤àª®àª¾àª¨ àªàª¨à«àªà«àª¨à«àª સà«àªµ નહà«àª થાય):',emptyListMsg:'(àªà«àª àªà«àª®à«àªªà«àª²à«àª ડિફાàªàª¨ નથà«)'},showBlocks:'બà«àª²à«àª બતાવવà«àª',stylesCombo:{label:'શà«àª²à«/રà«àª¤',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ફà«àª¨à«àª ફà«àª°à«àª®àª, રàªàª¨àª¾àª¨à« શà«àª²à«',panelTitle:'ફà«àª¨à«àª ફà«àª°à«àª®àª, રàªàª¨àª¾àª¨à« શà«àª²à«',tag_p:'સામાનà«àª¯',tag_pre:'ફà«àª°à«àª®àªà«àª¡',tag_address:'સરનામà«àª',tag_h1:'શà«àª°à«àª·àª 1',tag_h2:'શà«àª°à«àª·àª 2',tag_h3:'શà«àª°à«àª·àª 3',tag_h4:'શà«àª°à«àª·àª 4',tag_h5:'શà«àª°à«àª·àª 5',tag_h6:'શà«àª°à«àª·àª 6',tag_div:'શà«àª°à«àª·àª (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ફà«àª¨à«àª',voiceLabel:'Font',panelTitle:'ફà«àª¨à«àª'},fontSize:{label:'ફà«àª¨à«àª સાàªàª/àªàª¦',voiceLabel:'Font Size',panelTitle:'ફà«àª¨à«àª સાàªàª/àªàª¦'},colorButton:{textColorTitle:'શબà«àª¦àª¨à« રàªàª',bgColorTitle:'બૠàªàªà«àª°àª¾àªàª¨à«àª¡ રàªàª,',panelTitle:'Colors',auto:'સà«àªµàªàª¾àª²àª¿àª¤',more:'àªàª° રàªàª...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'ડà«àªà«àª¯à«àª®àª¨à«àª àªà«àª£/પà«àª°à«àªªàª°à«àªàª¿àª',title:'ડà«àªà«àª¯à«àª®àª¨à«àª àªà«àª£/પà«àª°à«àªªàª°à«àªàª¿àª',design:'Design',meta:'મà«àªàª¾àª¡à« àªàª¾',chooseColor:'Choose',other:'<other>',docTitle:'પà«àª મથાળà«àª/àªàª¾àªàªàª²',charset:'àªà«àª°à«àªà«àªàª° સà«àª àªàª¨à«àªà«àª¡àª¿àªàª',charsetOther:'ઠનà«àª¯ àªà«àª°à«àªà«àªàª° સà«àª àªàª¨à«àªà«àª¡àª¿àªàª',charsetASCII:'ASCII',charsetCE:'મધà«àª¯ યà«àª°à«àªªàª¿àª ન (Central European)',charsetCT:'àªàª¾àªàª¨à«àª (Chinese Traditional Big5)',charsetCR:'સિરà«àª²àª¿àª (Cyrillic)',charsetGR:'àªà«àª°à«àª (Greek)',charsetJP:'àªàª¾àªªàª¾àª¨àª¿àª (Japanese)',charsetKR:'àªà«àª°à«àª¯àª¨ (Korean)',charsetTR:'àªàª°à«àªàª¿ (Turkish)',charsetUN:'યà«àª¨àª¿àªà«àª¡ (UTF-8)',charsetWE:'પશà«àªàª¿àª® યà«àª°à«àªªàª¿àª ન (Western European)',docType:'ડà«àªà«àª¯à«àª®àª¨à«àª પà«àª°àªàª¾àª° શà«àª°à«àª·àª',docTypeOther:'ઠનà«àª¯ ડà«àªà«àª¯à«àª®àª¨à«àª પà«àª°àªàª¾àª° શà«àª°à«àª·àª',xhtmlDec:'XHTML સà«àªàª¨àª¾ સમાવિષà«àª àªàª°àªµà«',bgColor:'બૠàªàªà«àª°àª¾àªàª¨à«àª¡ રàªàª',bgImage:'બૠàªàªà«àª°àª¾àªàª¨à«àª¡ àªàª¿àª¤à«àª° URL',bgFixed:'સà«àªà«àª°à«àª² ન થાય તà«àªµà«àª બૠàªàªà«àª°àª¾àªàª¨à«àª¡',txtColor:'શબà«àª¦àª¨à« રàªàª',margin:'પà«àª મારà«àªàª¿àª¨',marginTop:'àªàªªàª°',marginLeft:'ડાબà«',marginRight:'àªàª®àª£à«',marginBottom:'નà«àªà«',metaKeywords:'ડà«àªà«àª¯à«àª®àª¨à«àª àªàª¨à«àª¡à«àªà«àª¸ સàªàªà«àª¤àª¶àª¬à«àª¦ (ઠલà«àªªàªµàª¿àª°àª¾àª® (,) થૠઠલઠàªàª°à«)',metaDescription:'ડà«àªà«àª¯à«àª®àª¨à«àª વરà«àª£àª¨',metaAuthor:'લà«àªàª',metaCopyright:'àªà«àªªàª¿àª°àª¾àªàª',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/he.js b/lang/he.js new file mode 100644 index 0000000..56419b1 --- /dev/null +++ b/lang/he.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.he={dir:'rtl',editorTitle:'×¢××¨× ××§×¡× ×¢×©×ר, %1, ×××¥ ××× (ALT) + 0 ××¢×ר×.',toolbars:'סר××× ×××× ×©× ××¢×ר×',editor:'×¢××¨× ××§×¡× ×¢×©×ר',source:'×ק×ר',newPage:'××£ ××ש',save:'ש××ר×',preview:'תצ××× ×ק××××',cut:'×××ר×',copy:'×עתק×',paste:'×××ק×',print:'××פס×',underline:'×§× ×ª×ת××',bold:'××××ש',italic:'× ×××',selectAll:'×××רת ×××',removeFormat:'×סרת ××¢×צ××',strike:'×ת×× ×××ק',subscript:'×ת×× ×ª×ת××',superscript:'×ת×× ×¢××××',horizontalrule:'××ספת ×§× ××פק×',pagebreak:'××ספת ש××רת ××£',pagebreakAlt:'ש××רת ××£',unlink:'×סרת ×ק×ש×ר',undo:'××××× ×¦×¢× ××ר××',redo:'×××¨× ×¢× ×¦×¢× ××ר××',common:{browseServer:'ס××ר ×שרת',url:'×ת××ת (URL)',protocol:'פר×××ק××',upload:'××¢×××',uploadSubmit:'ש×××× ×שרת',image:'ת××× ×',flash:'פ××ש',form:'××פס',checkbox:'ת××ת ס××××',radio:'×××¦× ×פשר×××ת',textField:'ש×× ×קס×',textarea:'××××ר ×קס×',hiddenField:'ש×× ××××',button:'×פת×ר',select:'ש×× ×××ר×',imageButton:'×פת×ר ת××× ×',notSet:'<×× × ×§××¢>',id:'××××× (ID)',name:'ש×',langDir:'××××× ×©×¤×',langDirLtr:'ש××× ××××× (LTR)',langDirRtl:'×××× ×ש××× (RTL)',langCode:'ק×× ×©×¤×',longDescr:'ק×ש×ר ×ת×××ר ×פ×ר×',cssClass:'×××קת ×¢×צ×× (CSS Class)',advisoryTitle:'××תרת ××צעת',cssStyle:'ס×× ××',ok:'××ש×ר',cancel:'×××××',close:'ס××ר×',preview:'תצ××× ×ק××××',generalTab:'××××',advancedTab:'×פשר×××ת ×תק×××ת',validateNumberFailed:'××¢×¨× ×××× ××××ת ×ספר×.',confirmNewPage:'×× ×ש×× ×××× ×©×× × ×©××¨× ×××××. ××× ×××¢××ת ××£ ××ש?',confirmCancel:'××ק ×××פשר×××ת ש×× ×, ××× ×ס××ר ×ת ×××××××?',options:'×פשר×××ת',target:'××ר×',targetNew:'×××× ××ש (_blank)',targetTop:'××××× ××¢×××× ×××תר (_top)',targetSelf:'×××ª× ×××× (_self)',targetParent:'×××× ××× (_parent)',langDirLTR:'ש××× ××××× (LTR)',langDirRTL:'×××× ×ש××× (RTL)',styles:'ס×× ××',cssClasses:'×××ק×ת ××××× ×ת ס×× ××',width:'ר×××',height:'××××',align:'××ש×ר',alignLeft:'×ש×××',alignRight:'×××××',alignCenter:'×ר××',alignTop:'×××¢××',alignMiddle:'×××צע',alignBottom:'×ת×ת×ת',invalidHeight:'××××× ×××× ××××ת ×ספר.',invalidWidth:'×ר××× ×××× ××××ת ×ספר.',invalidCssLength:'××¢×¨× ×©×¦××× ×ש×× "%1" ×××× ××××ת ×ספר ××××× ×¢× ×× ××× ××××ת ×××× ××ק×ת ×©× CSS (px, %, in, cm, mm, em, ex, pt, ×× pc).',invalidHtmlLength:'××¢×¨× ×©×¦××× ×ש×× "%1" ×××× ××××ת ×ספר ××××× ×¢× ×× ××× ××××ת ×××× ××ק×ת ×©× HTML (px ×× %).',unavailable:'%1<span class="cke_accessibility">, ×× ××××</span>'},contextmenu:{options:'×פשר×××ת תפר×× ××קשר'},specialChar:{toolbar:'××ספת ×ª× ×××××',title:'×××רת ×ª× ×××××',options:'×פשר×××ת ת×××× ×××××××'},link:{toolbar:'××ספת/ער××ת ק×ש×ר',other:'<××ר>',menu:'××פ××× × ×§×ש×ר',title:'ק×ש×ר',info:'××××¢ ×¢× ×ק×ש×ר',target:'××ר×',upload:'××¢×××',advanced:'×פשר×××ת ×תק×××ת',type:'ס×× ×§×ש×ר',toUrl:'×ת××ת (URL)',toAnchor:'×¢××× ××¢××× ××',toEmail:'×××"×',targetFrame:'<×ס×רת>',targetPopup:'<×××× ×§×פץ>',targetFrameName:'×©× ×ס×רת ×××¢×',targetPopupName:'×©× ××××× ×ק×פץ',popupFeatures:'ת××× ×ת ××××× ×ק×פץ',popupResizable:'ש×× ×× ××××',popupStatusBar:'סר×× ×××××',popupLocationBar:'סר×× ×ת××ת',popupToolbar:'סר×× ×××××',popupMenuBar:'סר×× ×ª×¤×¨××',popupFullScreen:'××¡× ××× (IE)',popupScrollBars:'× ××ª× ××××××',popupDependent:'ת××× (Netscape)',popupLeft:'××ק×× ×¦× ×©×××',popupTop:'××ק×× ×¦× ×¢××××',id:'××××× (ID)',langDir:'××××× ×©×¤×',langDirLTR:'ש××× ××××× (LTR)',langDirRTL:'×××× ×ש××× (RTL)',acccessKey:'×קש ××ש×',name:'ש×',langCode:'ק×× ×©×¤×',tabIndex:'×ספר ×××',advisoryTitle:'××תרת ××צעת',advisoryContentType:'Content Type ××צע',cssClasses:'×××××× ×ת ×¢×צ×× ×§××צ×ת',charset:'ק×××× ××ש×× ××ק×שר',styles:'ס×× ××',rel:'קשר ××××××',selectAnchor:'×××רת ×¢×××',anchorName:'עפ"× ×©× ××¢×××',anchorId:'עפ"× ××××× (ID) ××××× ×',emailAddress:'×ת××ת ××××"×',emailSubject:'× ××©× ×××××¢×',emailBody:'×××£ ×××××¢×',noAnchors:'(××× ×¢××× ×× ×××× ×× ×××£)',noUrl:'×ש ××ק××× ×ת ×ת××ת ×ק×ש×ר (URL)',noEmail:'×ש ××ק××× ×ת ×ת××ת ××××"×'},anchor:{toolbar:'××ספת/ער××ת × ×§××ת ×¢××××',menu:'××פ××× × × ×§××ת ×¢××××',title:'××פ××× × × ×§××ת ×¢××××',name:'×©× ×× ×§××ת ×¢××××',errorName:'×ש ××ק××× ×©× ×× ×§××ת ×¢××××',remove:'×××קת × ×§××ת ×¢××××'},list:{numberedTitle:'ת××× ×ת רש××× ×××ספרת',bulletedTitle:'ת××× ×ת רש××ת ת××××××',type:'ס××',start:'ת×××ת ×ספ×ר',validateStartNumber:'ש×× ×ª×××ת ××ספ×ר ×××× ××××× ×ספר ש××.',circle:'×¢×××× ×¨×ק',disc:'×¢×××× ×××',square:'ר××××¢',none:'×××',notset:'<×× × ×§××¢>',armenian:'ספר×ת ×ר×× ××ת',georgian:"ספר×ת ××××ר×××ת (an, ban, gan ×××')",lowerRoman:"ספ××¨× ×¨×××ת ×××ת××ת ק×× ×ת (i, ii, iii, iv, v ×××')",upperRoman:"ספ××¨× ×¨××××ת ×××ת××ת ×××××ת (I, II, III, IV, V ×××')",lowerAlpha:"××ת××ת ×× ××××ת ק×× ×ת (a, b, c, d, e ×××')",upperAlpha:"××ת××ת ×× ××××ת ×××××ת (A, B, C, D, E ×××')",lowerGreek:"××ת××ת ×××× ××ת ק×× ×ת (alpha, beta, gamma ×××')",decimal:"ספר×ת (1, 2, 3 ×××')",decimalLeadingZero:"ספר×ת ×¢× 0 ××ת××× (01, 02, 03 ×××')"},findAndReplace:{title:'××פ×ש ××××פ×',find:'××פ×ש',replace:'×××פ×',findWhat:'××פ×ש ××ר××ת:',replaceWith:'××××¤× ×××ר××ת:',notFoundMsg:'×××§×¡× ××××קש ×× × ×צ×.',matchCase:'×××× × ××× ××ת××ת רש××ת ×ק×× ×ת (Case)',matchWord:'×ת××× ××××× ×××××',matchCyclic:'×ת××× ××××ר×ת',replaceAll:'××××¤× ××× ××¢×××',replaceSuccessMsg:'%1 ×קס××× ××××פ×.'},table:{toolbar:'××××',title:'××פ××× × ××××',menu:'××פ××× × ××××',deleteTable:'××ק ××××',rows:'ש×ר×ת',columns:'×¢××××ת',border:'×××× ×ס×רת',widthPx:'פ×קס×××',widthPc:'××××',widthUnit:'××××ת ר×××',cellSpace:'×ר××× ×ª×',cellPad:'ר×פ×× ×ª×',caption:'××ת××',summary:'תקצ×ר',headers:'××תר×ת',headersNone:'×××',headersColumn:'×¢×××× ×¨×ש×× ×',headersRow:'ש××¨× ×¨×ש×× ×',headersBoth:'×©× ×××',invalidRows:'ש×× ×ספר ×ש×ר×ת ×××× ××××ת ×ספר ×××× × 0.',invalidCols:'ש×× ×ספר ××¢××××ת ×××× ××××ת ×ספר ×××× × 0.',invalidBorder:'ש×× ×××× ××ס×רת ×××× ××××ת ×ספר.',invalidWidth:'ש×× ×¨××× ××××× ×××× ××××ת ×ספר.',invalidHeight:'ש×× ×××× ××××× ×××× ××××ת ×ספר.',invalidCellSpacing:'ש×× ×¨×××× ×ת××× ×××× ××××ת ×ספר ×××××.',invalidCellPadding:'ש×× ×¨×פ×× ×ת××× ×××× ××××ת ×ספר ×××××.',cell:{menu:'××פ××× × ×ª×',insertBefore:'××ספת ×ª× ××¤× ×',insertAfter:'××ספת ×ª× ××ר×',deleteCell:'×××קת ת×××',merge:'××××× ×ª×××',mergeRight:'××× ×××× ×',mergeDown:'××× ××××',splitHorizontal:'פ×צ×× ×ª× ××פק×ת',splitVertical:'פ×צ×× ×ª× ×× ××ת',title:'ת××× ×ת ×ת×',cellType:'ס×× ×ת×',rowSpan:'×ת××ת ×ש×ר×ת',colSpan:'×ת××ת ×ת×××',wordWrap:'×× ×עת ×××שת ש×ר×ת',hAlign:'××ש×ר ××פק×',vAlign:'××ש×ר ×× ××',alignBaseline:'ש×רת ×ס×ס',bgColor:'צ××¢ רקע',borderColor:'צ××¢ ×ס×רת',data:'××××¢',header:'××תרת',yes:'××',no:'××',invalidWidth:'ש×× ×¨××× ××ª× ×××× ××××ת ×ספר.',invalidHeight:'ש×× ×××× ××ª× ×××× ××××ת ×ספר.',invalidRowSpan:'ש×× ×ת××ת ×ש×ר×ת ×××× ××××ת ×ספר ש××.',invalidColSpan:'ש×× ×ת××ת ××¢××××ת ×××× ××××ת ×ספר ש××.',chooseColor:'××ר'},row:{menu:'ש×ר×',insertBefore:'××ספת ש××¨× ××¤× ×',insertAfter:'××ספת ש××¨× ××ר×',deleteRow:'×××קת ש×ר×ת'},column:{menu:'×¢××××',insertBefore:'××ספת ×¢×××× ××¤× ×',insertAfter:'××ספת ×¢×××× ××ר×',deleteColumn:'×××קת ×¢××××ת'}},button:{title:'××פ××× × ×פת×ר',text:'××§×¡× (ער×)',type:'ס××',typeBtn:'×פת×ר',typeSbm:'ש××××',typeRst:'××פ×ס'},checkboxAndRadio:{checkboxTitle:'××פ××× × ×ª××ת ס××××',radioTitle:'××פ××× × ×××¦× ×פשר×××ת',value:'ער×',selected:'×ס×××'},form:{title:'××פ×× × ××פס',menu:'××פ×× × ××פס',action:'ש×× ××',method:'ס×× ×©××××',encoding:'ק××××'},select:{title:'××פ××× × ×©×× ×××ר×',selectInfo:'××××¢',opAvail:'×פשר×××ת ×××× ×ת',value:'ער×',size:'××××',lines:'ש×ר×ת',chkMulti:'××פש×ר ×××ר×ת ×ר×××ת',opText:'×קס×',opValue:'ער×',btnAdd:'××ספ×',btnModify:'ש×× ××',btnUp:'×××¢××',btnDown:'××××',btnSetValue:'ק×××¢× ××ר×רת ××××',btnDelete:'×××ק×'},textarea:{title:'××פ××× × ××××ר ×קס×',cols:'×¢××××ת',rows:'ש×ר×ת'},textfield:{title:'××פ××× × ×©×× ×קס×',name:'ש×',value:'ער×',charWidth:'ר××× ××¤× ×ª××××',maxChars:'×קס×××× ×ª××××',type:'ס××',typeText:'×קס×',typePass:'ס×ס××'},hidden:{title:'××פ×× × ×©×× ××××',name:'ש×',value:'ער×'},image:{title:'××פ××× × ×ת××× ×',titleButton:'××פ×× × ×פת×ר ת××× ×',menu:'ת××× ×ת ×ת××× ×',infoTab:'××××¢ ×¢× ×ת××× ×',btnUpload:'ש×××× ×שרת',upload:'××¢×××',alt:'××§×¡× ×××פ×',lockRatio:'× ×¢××ת ×××ס',resetSize:'××פ×ס ×××××',border:'×ס×רת',hSpace:'×ר××× ××פק×',vSpace:'×ר××× ×× ××',alertUrl:'×ש ××ק××× ×ת ×ת××ת ×ת××× ×',linkTab:'ק×ש×ר',button2Img:'××× ××פ×× ×ת ת××× ×ª ××פת×ר ×ת××× × ×¤×©×××?',img2Button:'××× ××פ×× ×ת ×ת××× × ××פת×ר ת××× ×?',urlMissing:'×ת××ת ×ת××× × ×סר×.',validateBorder:'ש×× ××ס×רת ×××× ××××ת ×ספר ש××.',validateHSpace:'ש×× ××ר××× ××××¤×§× ×××× ××××ת ×ספר ש××.',validateVSpace:'ש×× ××ר××× ××× ×× ×××× ××××ת ×ספר ש××.'},flash:{properties:'××פ××× × ×¤××ש',propertiesTab:'××פ××× ××',title:'××פ×× × ×¤××ש',chkPlay:'× ×××× ×××××××',chkLoop:'×××××',chkMenu:'×פשר תפר×× ×¤××ש',chkFull:'×פשר ×××× ×××',scale:'××××',scaleAll:'××¦× ×××',scaleNoBorder:'××× ×××××ת',scaleFit:'×ת××× ××ש××ת',access:'××שת סקר×פ×',accessAlways:'ת×××',accessSameDomain:'×××××× ×××',accessNever:'××£ פע×',alignAbsBottom:'×ת×ת×ת ×××ס×××××ת',alignAbsMiddle:'×ר××× ××ס×××××',alignBaseline:'××§× ×ת×ת×ת',alignTextTop:'×ר×ש ××קס×',quality:'××××ת',qualityBest:'××¢×××',qualityHigh:'×××××',qualityAutoHigh:'××××× ×××××××ת',qualityMedium:'×××צעת',qualityAutoLow:'× ×××× ×××××××ת',qualityLow:'× ××××',windowModeWindow:'××××',windowModeOpaque:'××××',windowModeTransparent:'שק××£',windowMode:'××¦× ××××',flashvars:'××©×ª× ×× ×פ××ש',bgcolor:'צ××¢ רקע',hSpace:'×ר××× ××פק×',vSpace:'×ר××× ×× ××',validateSrc:'×ש ××ק××× ×ת ×ת××ת סר××× ×פ××ש (URL)',validateHSpace:'××ר××× ××××¤×§× ×××× ××××ת ×ספר.',validateVSpace:'××ר××× ××× ×× ×××× ××××ת ×ספר.'},spellCheck:{toolbar:'×××קת ×××ת',title:'×××קת ×××ת',notAvailable:'×× × ××¦× ×©×ר×ת ××××.',errorLoading:'ש×××× ×××¢××ת ×ש×ר×ת: %s.',notInDic:'×× × ××¦× ××××××',changeTo:'ש×× ×× ×',btnIgnore:'×תע×××ת',btnIgnoreAll:'×תע×××ת ××××',btnReplace:'×××פ×',btnReplaceAll:'×××פת ×××',btnUndo:'×××ר×',noSuggestions:'- ××× ×צע×ת -',progress:'×××ק ××××ת ×ת×××× ×××ק×....',noMispell:'×××ק×ת ×××ת ×סת××××: ×× × ×צ×× ×©××××ת ×ת××',noChanges:'×××ק×ת ×××ת ×סת××××: ×× ×©×× ×ª× ××£ ××××',oneChange:'×××ק×ת ×××ת ×סת××××: ש×× ×ª× ×××× ××ת',manyChanges:'×××ק×ת ×××ת ×סת××××: %1 ××××× ×©×× ×',ieSpellDownload:'×××ק ××××ת ×× ××תק×, ××× ×××ר×××?'},smiley:{toolbar:'ס×××××',title:'××ספת ס×××××',options:'×פשר×××ת ס××××××'},elementsPath:{eleLabel:'×¢×¥ ××××× ×××',eleTitle:'%1 ×××× ×'},numberedlist:'רש××× ×××ספרת',bulletedlist:'רש××ת × ×§×××ת',indent:'××××ת ××××',outdent:'×ק×× ×ª ××××',justify:{left:'××ש×ר ×ש×××',center:'×ר×××',right:'××ש×ר ×××××',block:'××ש×ר ×ש×××××'},blockquote:'×××ק צ××××',clipboard:{title:'×××ק×',cutError:'×××ר×ת ×××××× ××פ××¤× ×©×× ×× ××פשר×ת ××¢××¨× ××צע פע×××ת ××××¨× ××××××××ת. ×ש ××שת×ש ××ק××ת ××©× ×× (Ctrl/Cmd+X).',copyError:'×××ר×ת ×××××× ××פ××¤× ×©×× ×× ××פשר×ת ××¢××¨× ××צע פע×××ת ××¢×ª×§× ××××××××ת. ×ש ××שת×ש ××ק××ת ××©× ×× (Ctrl/Cmd+C).',pasteMsg:'× × ×××××ק ×ת×× ×ק××¤×¡× ×××צע×ת (<b>Ctrl/Cmd+V</b>) ××××××¥ ×¢× <b>××ש×ר</b>.',securityMsg:'×¢×§× ×××ר×ת ××××× ××פ×פ×, ×× × ××ª× ××שת ×× ××× ××××ר×× (Clipboard) ×צ××¨× ×ש×ר×. × × ×××××ק ש×× ××××× ××.',pasteArea:'××××ר ×××ק×'},pastefromword:{confirmCleanup:'× ×¨×× ×××§×¡× ×©××××× ×ª× ×××××ק ×ק××¨× ×ק×××¥ ××ר×. ××× ×רצ×× × ×× ×§×ת ×××ª× ××¨× ××××ק×?',toolbar:'××××§× ×-Word',title:'××××§× ×-Word',error:'×× × ××ª× ××× ×× ×§×ת ×ת ×××××¢ ××©× ×ª×§×× ×¤× ×××ת.'},pasteText:{button:'××××§× ×××§×¡× ×¤×©××',title:'××××§× ×××§×¡× ×¤×©××'},templates:{button:'ת×× ××ת',title:'ת×××ת ת×××',options:'×פשר×××ת ×ת×× ××ת',insertOption:'×××פת ת××× ××ש×',selectPromptMsg:'×ש ××××ר ת×× ×ת ×פת××× ××¢×ר×.<br />×ת××× ××ק××¨× ×××ק:',emptyListMsg:'(×× ×××××¨× ×ª×× ××ת)'},showBlocks:'×צ×ת ×××ק××',stylesCombo:{label:'ס×× ××',panelTitle:'ס×× ×× ×ת פ×ר××',panelTitle1:'ס×× ×× ×ת ×××ק',panelTitle2:'ס×× ×× ×ת רצף',panelTitle3:'ס×× ×× ×ת ×××××ק×'},format:{label:'×¢×צ××',panelTitle:'×¢×צ××',tag_p:'× ×ר×××',tag_pre:'ק××',tag_address:'×ת××ת',tag_h1:'××תרת',tag_h2:'××תרת 2',tag_h3:'××תרת 3',tag_h4:'××תרת 4',tag_h5:'××תרת 5',tag_h6:'××תרת 6',tag_div:'× ×ר××× (DIV)'},div:{title:'×צ×רת ×××× (Div)',toolbar:'×צ×רת ×××× (Div)',cssClassInputLabel:'×××קת ×¢×צ××',styleSelectLabel:'ס×× ××',IdInputLabel:'×××× (ID)',languageCodeInputLabel:'ק×× ×©×¤×',inlineStyleInputLabel:'ס×× ×× ×¤× ×××',advisoryTitleInputLabel:'××תרת ××צעת',langDirLabel:'××××× ×©×¤×',langDirLTRLabel:'ש××× ××××× (LTR)',langDirRTLLabel:'×××× ×ש××× (RTL)',edit:'ער××ת ×××× (Div)',remove:'×סרת ×××× (Div)'},iframe:{title:'××פ××× × ×××× ×¤× ××× (iframe)',toolbar:'×××× ×¤× ××× (iframe)',noUrl:'×ש ×××× ×ס ×ת××ת ×××××.',scrolling:'×פשר ×¤×¡× ×××××',border:'×ר×× ×ס×רת ×××××'},font:{label:'××פ×',voiceLabel:'××פ×',panelTitle:'××פ×'},fontSize:{label:'××××',voiceLabel:'××××',panelTitle:'××××'},colorButton:{textColorTitle:'צ××¢ ×קס×',bgColorTitle:'צ××¢ רקע',panelTitle:'צ××¢××',auto:'×××××××',more:'צ××¢×× × ×ספ××...'},colors:{'000':'ש××ר',800000:'ס××× ×××','8B4513':'××× ×××ר','2F4F4F':'×פ×ר צפ××','008080':'××××-×ר×ק','000080':'××××-ס×××','4B0082':'××× ××××',696969:'×פ×ר ××¢×××¢×',B22222:'××××-×××',A52A2A:'×××',DAA520:'×ת×× ×××','006400':'×ר×ק ×××','40E0D0':'××רק××','0000CD':'×××× ××× ×× ×',800080:'ס×××',808080:'×פ×ר',F00:'××××',FF8C00:'×ת×× ×××',FFD700:'×××','008000':'×ר×ק','0FF':'צ×××','00F':'××××',EE82EE:'ס××××',A9A9A9:'×פ×ר ×××',FFA07A:'×ת××-××ר××',FFA500:'×ת××',FFFF00:'צ×××','00FF00':'××××',AFEEEE:'××רק×× ×××ר',ADD8E6:'×××× ×××ר',DDA0DD:'ש×××£',D3D3D3:'×פ×ר ×××ר',FFF0F5:'××× ×ר ×ס××ק',FAEBD7:'××× ×¢×ª×ק',FFFFE0:'צ××× ×××ר',F0FFF0:'×× ××ש',F0FFFF:'ת××ת',F0F8FF:'×××× ××פת ×××',E6E6FA:'××× ×ר',FFF:'×××'},scayt:{title:'×××קת ×××ת ×××× ×ת××× (SCAYT)',opera_title:'×× ×××× ××פ××¤× ××פר×',enable:'×פשר SCAYT',disable:'××× SCAYT',about:'××××ת SCAYT',toggle:'ש×× ×× SCAYT',options:'×פשר×××ת',langs:'שפ×ת',moreSuggestions:'×צע×ת × ×ספ×ת',ignore:'×תע×××ת',ignoreAll:'×תע×××ת ××××',addWord:'××ספת ××××',emptyDic:'×ש ××××ר ×××××.',optionsTab:'×פשר×××ת',allCaps:'×תע×× ×××××× ×©×× ××ת××ת××× ×××××ת',ignoreDomainNames:'×תע×× ×ש××ת ×ת××',mixedCase:'×תע×× ×××××× ×¢× ××ת××ת ×××××ת ×ק×× ×ת ××××',mixedWithDigits:'×תע×× ×××××× ×¢× ×ספר××',languagesTab:'שפ×ת',dictionariesTab:'×××××',dic_field_name:'×©× ××××××',dic_create:'×צ×ר×',dic_restore:'ש×××ר',dic_delete:'×××ק×',dic_rename:'ש×× ×× ×©×',dic_info:'××ת××× ××××× ××שת×ש ×××××¡× ××¢××××, ×× ×¢××××ת ××××××ת ××ק××. ××שר ×××××× ××××¢ ××××× ×× ××× ××× × ×××× ××ת×××¡× ××¢××××, ×××××× ×¦×¨×× ××ת×××¡× ××©×¨×ª× ×. ××©× ×× ×¢××× ×תת ×©× ××××××. ×× ××ר ×ש ×× ××××× ××××ס×, ×ש ×××× ×ס ×ת ש×× ××××××¥ ×¢× ×פת×ר ×ש×××ר.',aboutTab:'××××ת'},about:{title:'××××ת CKEditor',dlgTitle:'××××ת CKEditor',help:'×××× ×¡× ×$1 ××¢×ר×.',userGuide:'××ר×× ××שת×ש ×©× CKEditor',moreInfo:'×××××¢ × ×סף ××§×¨× ×××ª×¨× ×:',copy:'Copyright © $1. ×× ××××××ת ש××ר×ת.'},maximize:'××××× ××קס××××',minimize:'×ק×× × ×××× ××××',fakeobjects:{anchor:'×¢×××',flash:'סר××× ×¤××ש',iframe:'×××× ×¤× ××× (iframe)',hiddenfield:'ש×× ××××',unknown:'××××××§× ×× ××××¢'},resize:'×ש ××ר×ר ×××× ××©× ×ת ×ת ×××××',colordialog:{title:'×××רת צ××¢',options:'×פשר×××ת צ××¢',highlight:'ס××××',selected:'×××ר×',clear:'× ×ק××'},toolbarCollapse:'×××¢×ר סר×× ××××',toolbarExpand:'×ר××ת סר×× ××××',toolbarGroups:{document:'×ס××',clipboard:'××× ××××ר×× (Clipboard)/×¦×¢× ××ר××',editing:'ער×××',forms:'×פס××',basicstyles:'×¢×צ×× ×ס×ס×',paragraph:'פסק×',links:'ק×ש×ר××',insert:'××× ×¡×',styles:'×¢×צ××',colors:'צ××¢××',tools:'××××'},bidi:{ltr:'××××× ××§×¡× ×ש××× ××××× (LTR)',rtl:'××××× ××§×¡× ××××× ×ש××× (RTL)'},docprops:{label:'××פ××× × ×ס××',title:'××פ××× × ×ס××',design:'×¢×צ××',meta:'ת×× Meta',chooseColor:'×××ר×',other:'××ר...',docTitle:'××תרת ×¢×××',charset:'ק×××× ×ª××××',charsetOther:'ק×××× ×ª×××× ××ר',charsetASCII:'ASCII',charsetCE:'×ר×× ××ר×פ××',charsetCT:'ס×× × ×ס××¨×ª× (Big5)',charsetCR:'ק×ר×××',charsetGR:'×××× ×',charsetJP:'××¤× ×',charsetKR:'ק×ר××× ×',charsetTR:'××רק×',charsetUN:'××× ×ק×× (UTF-8)',charsetWE:'××¢×¨× ××ר×פ××',docType:'××תר ס×× ×ס××',docTypeOther:'××תר ס×× ×ס×× ××ר',xhtmlDec:'×××× ××ר××ת XHTML',bgColor:'צ××¢ רקע',bgImage:'×ת××ת ×©× ×ª××× ×ª רקע',bgFixed:'רקע ×× × ××× (צ×××)',txtColor:'צ××¢ ×קס×',margin:'×ר×××× ×¢×××',marginTop:'×¢××××',marginLeft:'ש××××',marginRight:'××× ×',marginBottom:'ת×ת××',metaKeywords:'××××ת ××¤×ª× ×©× ××ס×× (××פר××ת ×פס×ק)',metaDescription:'ת×××ר ××ס××',metaAuthor:'×××ר/ת',metaCopyright:'×××××ת ××צר××',previewHtml:'<p>××× <strong>××§×¡× ×××××</strong>. ×ת/× ×שת×ש/ת ×<a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/hi.js b/lang/hi.js new file mode 100644 index 0000000..6a7f444 --- /dev/null +++ b/lang/hi.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.hi={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'सà¥à¤°à¥à¤¸',newPage:'नया पà¥à¤',save:'सà¥à¤µ',preview:'पà¥à¤°à¥à¤µà¥à¤¯à¥',cut:'à¤à¤',copy:'à¤à¥à¤ªà¥',paste:'पà¥à¤¸à¥à¤',print:'पà¥à¤°à¤¿à¤¨à¥à¤',underline:'रà¥à¤à¤¾à¤à¤à¤£',bold:'बà¥à¤²à¥à¤¡',italic:'à¤à¤à¥à¤²à¤¿à¤',selectAll:'सब सॠलॠà¤à¥à¤ à¤à¤°à¥à¤',removeFormat:'à¥à¥à¤°à¥à¤®à¥à¤ हà¤à¤¾à¤¯à¥à¤',strike:'सà¥à¤à¥à¤°à¤¾à¤à¤ थà¥à¤°à¥',subscript:'ठधà¥à¤²à¥à¤',superscript:'ठà¤à¤¿à¤²à¥à¤',horizontalrule:'हà¥à¤°à¤¿à¥à¥à¤¨à¥à¤à¤² रà¥à¤à¤¾ à¤à¤¨à¥à¤¸à¤°à¥à¤ à¤à¤°à¥à¤',pagebreak:'पà¥à¤ बà¥à¤°à¥à¤ à¤à¤¨à¥à¤¸à¤°à¥à¤à¥ à¤à¤°à¥à¤',pagebreakAlt:'Page Break',unlink:'लिà¤à¤ हà¤à¤¾à¤¯à¥à¤',undo:'ठनà¥à¤¡à¥',redo:'रà¥à¤¡à¥',common:{browseServer:'सरà¥à¤µà¤° बà¥à¤°à¤¾à¤à¥ à¤à¤°à¥à¤',url:'URL',protocol:'पà¥à¤°à¥à¤à¥à¤à¥à¤²',upload:'ठपलà¥à¤¡',uploadSubmit:'à¤à¤¸à¥ सरà¥à¤µà¤° à¤à¥ à¤à¥à¤à¥à¤',image:'तसà¥à¤µà¥à¤°',flash:'à¥à¥à¤²à¥à¤¶',form:'à¥à¥à¤°à¥à¤®',checkbox:'à¤à¥ ठबà¥à¤à¥à¤¸',radio:'रà¥à¤¡à¤¿à¤ बà¤à¤¨',textField:'à¤à¥à¤à¥à¤¸à¥à¤ à¥à¥à¤²à¥à¤¡',textarea:'à¤à¥à¤à¥à¤¸à¥à¤ à¤à¤°à¤¿à¤¯à¤¾',hiddenField:'à¤à¥à¤ªà¥à¤¤ à¥à¥à¤²à¥à¤¡',button:'बà¤à¤¨',select:'à¤à¥à¤¨à¤¾à¤µ à¥à¥à¤²à¥à¤¡',imageButton:'तसà¥à¤µà¥à¤° बà¤à¤¨',notSet:'<सॠठनहà¥à¤>',id:'Id',name:'नाम',langDir:'à¤à¤¾à¤·à¤¾ लिà¤à¤¨à¥ à¤à¥ दिशा',langDirLtr:'बायà¥à¤ सॠदायà¥à¤ (LTR)',langDirRtl:'दायà¥à¤ सॠबायà¥à¤ (RTL)',langCode:'à¤à¤¾à¤·à¤¾ à¤à¥à¤¡',longDescr:'ठधिठविवरण à¤à¥ लिठURL',cssClass:'सà¥à¤à¤¾à¤à¤²-शà¥à¤ à¤à¥à¤²à¤¾à¤¸',advisoryTitle:'परामरà¥à¤¶ शà¥à¤°à¥à¤¶à¤',cssStyle:'सà¥à¤à¤¾à¤à¤²',ok:'ठà¥à¤ हà¥',cancel:'रदà¥à¤¦ à¤à¤°à¥à¤',close:'Close',preview:'Preview',generalTab:'सामानà¥à¤¯',advancedTab:'à¤à¤¡à¥à¤µà¤¾à¤¨à¥à¤¸à¥à¤¡',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'à¤à¥à¥à¤¾à¤',height:'à¤à¤à¤à¤¾à¤',align:'à¤à¤²à¤¾à¤à¤¨',alignLeft:'दायà¥à¤',alignRight:'दायà¥à¤',alignCenter:'बà¥à¤ मà¥à¤',alignTop:'à¤à¤ªà¤°',alignMiddle:'मधà¥à¤¯',alignBottom:'नà¥à¤à¥',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'विशà¥à¤· à¤à¤°à¥ à¤à¥à¤à¤° à¤à¤¨à¥à¤¸à¤°à¥à¤ à¤à¤°à¥à¤',title:'विशà¥à¤· à¤à¤°à¥ à¤à¥à¤à¤° à¤à¥à¤¨à¥à¤',options:'Special Character Options'},link:{toolbar:'लिà¤à¤ à¤à¤¨à¥à¤¸à¤°à¥à¤/सà¤à¤ªà¤¾à¤¦à¤¨',other:'<ठनà¥à¤¯>',menu:'लिà¤à¤ सà¤à¤ªà¤¾à¤¦à¤¨',title:'लिà¤à¤',info:'लिà¤à¤ ',target:'à¤à¤¾à¤°à¥à¤à¥à¤',upload:'ठपलà¥à¤¡',advanced:'à¤à¤¡à¥à¤µà¤¾à¤¨à¥à¤¸à¥à¤¡',type:'लिà¤à¤ पà¥à¤°à¤à¤¾à¤°',toUrl:'URL',toAnchor:'à¤à¤¸ पà¥à¤ à¤à¤¾ à¤à¤à¤à¤°',toEmail:'à¤-मà¥à¤²',targetFrame:'<à¥à¥à¤°à¥à¤®>',targetPopup:'<पà¥à¤ª-ठप विनà¥à¤¡à¥>',targetFrameName:'à¤à¤¾à¤°à¥à¤à¥à¤ à¥à¥à¤°à¥à¤® à¤à¤¾ नाम',targetPopupName:'पà¥à¤ª-ठप विनà¥à¤¡à¥ à¤à¤¾ नाम',popupFeatures:'पà¥à¤ª-ठप विनà¥à¤¡à¥ à¥à¥à¤à¤°à¥à¤¸',popupResizable:'Resizable',popupStatusBar:'सà¥à¤à¥à¤à¤¸ बार',popupLocationBar:'लà¥à¤à¥à¤¶à¤¨ बार',popupToolbar:'à¤à¥à¤² बार',popupMenuBar:'मॠनà¥à¤¯à¥ बार',popupFullScreen:'à¥à¥à¤² सà¥à¤à¥à¤°à¥à¤¨ (IE)',popupScrollBars:'सà¥à¤à¥à¤°à¥à¤² बार',popupDependent:'डिपà¥à¤¨à¥à¤¡à¥ नà¥à¤ (Netscape)',popupLeft:'बायà¥à¤ तरफ',popupTop:'दायà¥à¤ तरफ',id:'Id',langDir:'à¤à¤¾à¤·à¤¾ लिà¤à¤¨à¥ à¤à¥ दिशा',langDirLTR:'बायà¥à¤ सॠदायà¥à¤ (LTR)',langDirRTL:'दायà¥à¤ सॠबायà¥à¤ (RTL)',acccessKey:'à¤à¤à¥à¤¸à¥ स à¤à¥',name:'नाम',langCode:'à¤à¤¾à¤·à¤¾ लिà¤à¤¨à¥ à¤à¥ दिशा',tabIndex:'à¤à¥à¤¬ à¤à¤¨à¥à¤¡à¥ à¤à¥à¤¸',advisoryTitle:'परामरà¥à¤¶ शà¥à¤°à¥à¤¶à¤',advisoryContentType:'परामरà¥à¤¶ à¤à¤¨à¥à¤à¥ नà¥à¤ पà¥à¤°à¤à¤¾à¤°',cssClasses:'सà¥à¤à¤¾à¤à¤²-शà¥à¤ à¤à¥à¤²à¤¾à¤¸',charset:'लिà¤à¤ रिसà¥à¤°à¥à¤¸ à¤à¤°à¥ à¤à¥à¤à¤° सॠà¤',styles:'सà¥à¤à¤¾à¤à¤²',rel:'Relationship',selectAnchor:'à¤à¤à¤à¤° à¤à¥à¤¨à¥à¤',anchorName:'à¤à¤à¤à¤° नाम सà¥',anchorId:'à¤à¤²à¥à¤®à¥ नà¥à¤ Id सà¥',emailAddress:'à¤-मà¥à¤² पता',emailSubject:'सà¤à¤¦à¥à¤¶ विषय',emailBody:'सà¤à¤¦à¥à¤¶',noAnchors:'(डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ मà¥à¤ à¤à¤à¤à¤°à¥à¤¸ à¤à¥ सà¤à¤à¥à¤¯à¤¾)',noUrl:'लिà¤à¤ URL à¤à¤¾à¤à¤ª à¤à¤°à¥à¤',noEmail:'à¤-मà¥à¤² पता à¤à¤¾à¤à¤ª à¤à¤°à¥à¤'},anchor:{toolbar:'à¤à¤à¤à¤° à¤à¤¨à¥à¤¸à¤°à¥à¤/सà¤à¤ªà¤¾à¤¦à¤¨',menu:'à¤à¤à¤à¤° पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',title:'à¤à¤à¤à¤° पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',name:'à¤à¤à¤à¤° à¤à¤¾ नाम',errorName:'à¤à¤à¤à¤° à¤à¤¾ नाम à¤à¤¾à¤à¤ª à¤à¤°à¥à¤',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'à¤à¥à¤à¥à¤ à¤à¤° बदलà¥à¤',find:'à¤à¥à¤à¥à¤',replace:'रà¥à¤ªà¥à¤²à¥à¤¸',findWhat:'यह à¤à¥à¤à¥à¤:',replaceWith:'à¤à¤¸à¤¸à¥ रिपà¥à¤²à¥à¤¸ à¤à¤°à¥à¤:',notFoundMsg:'à¤à¤ªà¤à¥ दà¥à¤µà¤¾à¤°à¤¾ दिया à¤à¤¯à¤¾ à¤à¥à¤à¥à¤¸à¥à¤ नहà¥à¤ मिला',matchCase:'à¤à¥à¤¸ मिलायà¥à¤',matchWord:'पà¥à¤°à¤¾ शबà¥à¤¦ मिलायà¥à¤',matchCyclic:'Match cyclic',replaceAll:'सà¤à¥ रिपà¥à¤²à¥à¤¸ à¤à¤°à¥à¤',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'à¤à¥à¤¬à¤²',title:'à¤à¥à¤¬à¤² पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',menu:'à¤à¥à¤¬à¤² पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',deleteTable:'à¤à¥à¤¬à¤² डिलà¥à¤ à¤à¤°à¥à¤',rows:'पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤',columns:'à¤à¤¾à¤²à¤®',border:'बà¥à¤°à¥à¤¡à¤° साà¤à¥',widthPx:'पिà¤à¥à¤¸à¥à¤²',widthPc:'पà¥à¤°à¤¤à¤¿à¤¶à¤¤',widthUnit:'width unit',cellSpace:'सà¥à¤² ठà¤à¤¤à¤°',cellPad:'सà¥à¤² पà¥à¤¡à¤¿à¤à¤',caption:'शà¥à¤°à¥à¤·à¤',summary:'साराà¤à¤¶',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'à¤à¤¾à¤¨à¤¾',insertBefore:'पहलॠसà¥à¤² डालà¥à¤',insertAfter:'बाद मà¥à¤ सà¥à¤² डालà¥à¤',deleteCell:'सà¥à¤² डिलà¥à¤ à¤à¤°à¥à¤',merge:'सà¥à¤² मिलायà¥à¤',mergeRight:'बाà¤à¤¯à¤¾ विलय',mergeDown:'नà¥à¤à¥ विलय à¤à¤°à¥à¤',splitHorizontal:'सà¥à¤² à¤à¥ à¤à¥à¤·à¥à¤¤à¤¿à¤ सà¥à¤¥à¤¿à¤¤à¤¿ मà¥à¤ विà¤à¤¾à¤à¤¿à¤¤ à¤à¤°à¥à¤',splitVertical:'सà¥à¤² à¤à¥ लमà¥à¤¬à¤¾à¤à¤¾à¤° मà¥à¤ विà¤à¤¾à¤à¤¿à¤¤ à¤à¤°à¥à¤',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'पà¤à¤à¥à¤¤à¤¿',insertBefore:'पहलॠपà¤à¤à¥à¤¤à¤¿ डालà¥à¤',insertAfter:'बाद मà¥à¤ पà¤à¤à¥à¤¤à¤¿ डालà¥à¤',deleteRow:'पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤ डिलà¥à¤ à¤à¤°à¥à¤'},column:{menu:'à¤à¤¾à¤²à¤®',insertBefore:'पहलॠà¤à¤¾à¤²à¤® डालà¥à¤',insertAfter:'बाद मà¥à¤ à¤à¤¾à¤²à¤® डालà¥à¤',deleteColumn:'à¤à¤¾à¤²à¤® डिलà¥à¤ à¤à¤°à¥à¤'}},button:{title:'बà¤à¤¨ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',text:'à¤à¥à¤à¥à¤¸à¥à¤ (वà¥à¤²à¥à¤¯à¥)',type:'पà¥à¤°à¤à¤¾à¤°',typeBtn:'बà¤à¤¨',typeSbm:'सबà¥à¤®à¤¿à¤',typeRst:'रिसà¥à¤'},checkboxAndRadio:{checkboxTitle:'à¤à¥ ठबà¥à¤à¥à¤¸ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',radioTitle:'रà¥à¤¡à¤¿à¤ बà¤à¤¨ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',value:'वà¥à¤²à¥à¤¯à¥',selected:'सॠलॠà¤à¥à¤à¥ ड'},form:{title:'à¥à¥à¤°à¥à¤® पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',menu:'à¥à¥à¤°à¥à¤® पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',action:'à¤à¥à¤°à¤¿à¤¯à¤¾',method:'तरà¥à¤à¤¾',encoding:'Encoding'},select:{title:'à¤à¥à¤¨à¤¾à¤µ à¥à¥à¤²à¥à¤¡ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',selectInfo:'सà¥à¤à¤¨à¤¾',opAvail:'à¤à¤ªà¤²à¤¬à¥à¤§ विà¤à¤²à¥à¤ª',value:'वà¥à¤²à¥à¤¯à¥',size:'साà¤à¥',lines:'पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤',chkMulti:'à¤à¤ सॠà¤à¥à¤¯à¤¾à¤¦à¤¾ विà¤à¤²à¥à¤ª à¤à¥à¤¨à¤¨à¥ दà¥à¤',opText:'à¤à¥à¤à¥à¤¸à¥à¤',opValue:'वà¥à¤²à¥à¤¯à¥',btnAdd:'à¤à¥à¥à¥à¤',btnModify:'बदलà¥à¤',btnUp:'à¤à¤ªà¤°',btnDown:'नà¥à¤à¥',btnSetValue:'à¤à¥à¤¨à¥ à¤à¤ वà¥à¤²à¥à¤¯à¥ सॠठà¤à¤°à¥à¤',btnDelete:'डिलà¥à¤'},textarea:{title:'à¤à¥à¤à¥à¤¸à¥à¤¤ à¤à¤°à¤¿à¤¯à¤¾ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',cols:'à¤à¤¾à¤²à¤®',rows:'पà¤à¤à¥à¤¤à¤¿à¤¯à¤¾à¤'},textfield:{title:'à¤à¥à¤à¥à¤¸à¥à¤ à¥à¥à¤²à¥à¤¡ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',name:'नाम',value:'वà¥à¤²à¥à¤¯à¥',charWidth:'à¤à¤°à¥ à¤à¥à¤à¤° à¤à¥ à¤à¥à¥à¤¾à¤',maxChars:'ठधिà¤à¤¤à¤® à¤à¤°à¥ à¤à¥à¤à¤°',type:'à¤à¤¾à¤à¤ª',typeText:'à¤à¥à¤à¥à¤¸à¥à¤',typePass:'पासà¥à¤µà¤°à¥à¤¡'},hidden:{title:'à¤à¥à¤ªà¥à¤¤ à¥à¥à¤²à¥à¤¡ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',name:'नाम',value:'वà¥à¤²à¥à¤¯à¥'},image:{title:'तसà¥à¤µà¥à¤° पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',titleButton:'तसà¥à¤µà¥à¤° बà¤à¤¨ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',menu:'तसà¥à¤µà¥à¤° पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',infoTab:'तसà¥à¤µà¥à¤° à¤à¥ à¤à¤¾à¤¨à¤à¤¾à¤°à¥',btnUpload:'à¤à¤¸à¥ सरà¥à¤µà¤° à¤à¥ à¤à¥à¤à¥à¤',upload:'ठपलà¥à¤¡',alt:'वà¥à¤à¤²à¥à¤ªà¤¿à¤ à¤à¥à¤à¥à¤¸à¥à¤',lockRatio:'लà¥à¤ ठनà¥à¤ªà¤¾à¤¤',resetSize:'रà¥à¤¸à¥ ठसाà¤à¥',border:'बà¥à¤°à¥à¤¡à¤°',hSpace:'हà¥à¤°à¤¿à¥à¥à¤¨à¥à¤à¤² सà¥à¤ªà¥à¤¸',vSpace:'वरà¥à¤à¤¿à¤à¤² सà¥à¤ªà¥à¤¸',alertUrl:'तसà¥à¤µà¥à¤° à¤à¤¾ URL à¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ',linkTab:'लिà¤à¤',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'à¥à¥à¤²à¥à¤¶ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',propertiesTab:'Properties',title:'à¥à¥à¤²à¥à¤¶ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',chkPlay:'à¤à¤à¥ पà¥à¤²à¥',chkLoop:'लà¥à¤ª',chkMenu:'à¥à¥à¤²à¥à¤¶ मॠनà¥à¤¯à¥ à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤',chkFull:'Allow Fullscreen',scale:'सà¥à¤à¥à¤²',scaleAll:'सà¤à¥ दिà¤à¤¾à¤¯à¥à¤',scaleNoBorder:'à¤à¥à¤ बà¥à¤°à¥à¤¡à¤° नहà¥à¤',scaleFit:'बिलà¥à¤à¥à¤² à¥à¤¿à¤',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs नà¥à¤à¥',alignAbsMiddle:'Abs à¤à¤ªà¤°',alignBaseline:'मà¥à¤² रà¥à¤à¤¾',alignTextTop:'à¤à¥à¤à¥à¤¸à¥à¤ à¤à¤ªà¤°',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡ रà¤à¤',hSpace:'हà¥à¤°à¤¿à¥à¥à¤¨à¥à¤à¤² सà¥à¤ªà¥à¤¸',vSpace:'वरà¥à¤à¤¿à¤à¤² सà¥à¤ªà¥à¤¸',validateSrc:'लिà¤à¤ URL à¤à¤¾à¤à¤ª à¤à¤°à¥à¤',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'वरà¥à¤¤à¤¨à¥ (सà¥à¤ªà¥à¤²à¤¿à¤à¤) à¤à¤¾à¤à¤',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'शबà¥à¤¦à¤à¥à¤¶ मà¥à¤ नहà¥à¤',changeTo:'à¤à¤¸à¤®à¥à¤ बदलà¥à¤',btnIgnore:'à¤à¤à¥à¤¨à¥à¤°',btnIgnoreAll:'सà¤à¥ à¤à¤à¥à¤¨à¥à¤° à¤à¤°à¥à¤',btnReplace:'रिपà¥à¤²à¥à¤¸',btnReplaceAll:'सà¤à¥ रिपà¥à¤²à¥à¤¸ à¤à¤°à¥à¤',btnUndo:'ठनà¥à¤¡à¥',noSuggestions:'- à¤à¥à¤ सà¥à¤à¤¾à¤µ नहà¥à¤ -',progress:'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ (सà¥à¤ªà¥ ल-à¤à¥ à¤) à¤à¤¾à¤°à¥ हà¥...',noMispell:'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ : à¤à¥à¤ à¤à¤²à¤¤ वरà¥à¤¤à¤¨à¥ (सà¥à¤ªà¥ लिà¤à¤) नहà¥à¤ पाठà¤à¤',noChanges:'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ :à¤à¥à¤ शबà¥à¤¦ नहà¥à¤ बदला à¤à¤¯à¤¾',oneChange:'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ : à¤à¤ शबà¥à¤¦ बदला à¤à¤¯à¤¾',manyChanges:'वरà¥à¤¤à¤¨à¥ à¤à¥ à¤à¤¾à¤à¤ : %1 शबà¥à¤¦ बदलॠà¤à¤¯à¥',ieSpellDownload:'सà¥à¤ªà¥ ल-à¤à¥ à¤à¤° à¤à¤¨à¥à¤¸à¥à¤à¤¾à¤² नहà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हà¥à¥¤ à¤à¥à¤¯à¤¾ à¤à¤ª à¤à¤¸à¥ डाà¤à¤¨à¤²à¥à¤¡ à¤à¤°à¤¨à¤¾ à¤à¤¾à¤¹à¥à¤à¤à¥?'},smiley:{toolbar:'सà¥à¤®à¤¾à¤à¤²à¥',title:'सà¥à¤®à¤¾à¤à¤²à¥ à¤à¤¨à¥à¤¸à¤°à¥à¤ à¤à¤°à¥à¤',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ठà¤à¤à¥à¤¯ सà¥à¤à¥',bulletedlist:'बà¥à¤²à¥ ठसà¥à¤à¥',indent:'à¤à¤¨à¥à¤¡à¥ नà¥à¤ बà¥à¤¾à¤¯à¥à¤',outdent:'à¤à¤¨à¥à¤¡à¥ नà¥à¤ à¤à¤® à¤à¤°à¥à¤',justify:{left:'बायà¥à¤ तरफ',center:'बà¥à¤ मà¥à¤',right:'दायà¥à¤ तरफ',block:'बà¥à¤²à¥à¤ à¤à¤¸à¥à¤à¥à¥à¤¾à¤'},blockquote:'बà¥à¤²à¥à¤-à¤à¥à¤',clipboard:{title:'पà¥à¤¸à¥à¤',cutError:'à¤à¤ªà¤à¥ बà¥à¤°à¤¾à¤à¥à¤° à¤à¥ सà¥à¤°à¤à¥à¤·à¤¾ सॠà¤à¤¿à¤¨à¥à¤à¥à¤¸ नॠà¤à¤ à¤à¤°à¤¨à¥ à¤à¥ ठनà¥à¤®à¤¤à¤¿ नहà¥à¤ पà¥à¤°à¤¦à¤¾à¤¨ à¤à¥ हà¥à¥¤ (Ctrl/Cmd+X) à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤à¥¤',copyError:'à¤à¤ªà¤à¥ बà¥à¤°à¤¾à¤à¤à¥à¤° à¤à¥ सà¥à¤°à¤à¥à¤·à¤¾ सॠà¤à¤¿à¤¨à¥à¤à¥à¤¸ नॠà¤à¥à¤ªà¥ à¤à¤°à¤¨à¥ à¤à¥ ठनà¥à¤®à¤¤à¤¿ नहà¥à¤ पà¥à¤°à¤¦à¤¾à¤¨ à¤à¥ हà¥à¥¤ (Ctrl/Cmd+C) à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤à¥¤',pasteMsg:'Ctrl/Cmd+V à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¤à¥ पà¥à¤¸à¥à¤ à¤à¤°à¥à¤ à¤à¤° ठà¥à¤ हॠà¤à¤°à¥à¤.',securityMsg:'à¤à¤ªà¤à¥ बà¥à¤°à¤¾à¤à¥à¤° à¤à¥ सà¥à¤°à¤à¥à¤·à¤¾ à¤à¤ªà¤à¥ बà¥à¤°à¤¾à¤à¥à¤° à¤à¥ सà¥à¤°Kश सà¥à¤à¤¿à¤à¤ à¤à¥ à¤à¤¾à¤°à¤£, à¤à¤¡à¤¿à¤à¤° à¤à¤ªà¤à¥ à¤à¥à¤²à¤¿à¤ªà¤¬à¥à¤°à¥à¤¡ डà¥à¤à¤¾ à¤à¥ नहà¥à¤ पा सà¤à¤¤à¤¾ हà¥. à¤à¤ªà¤à¥ à¤à¤¸à¥ à¤à¤¸ विनà¥à¤¡à¥ मà¥à¤ दà¥à¤¬à¤¾à¤°à¤¾ पà¥à¤¸à¥à¤ à¤à¤°à¤¨à¤¾ हà¥à¤à¤¾.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'पà¥à¤¸à¥à¤ (वरà¥à¤¡ सà¥)',title:'पà¥à¤¸à¥à¤ (वरà¥à¤¡ सà¥)',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'पà¥à¤¸à¥à¤ (सादा à¤à¥ à¤à¥à¤¸à¥à¤)',title:'पà¥à¤¸à¥à¤ (सादा à¤à¥ à¤à¥à¤¸à¥à¤)'},templates:{button:'à¤à¥ मà¥à¤ªà¥à¤²à¥à¤',title:'à¤à¤¨à¥à¤à¥à¤¨à¥à¤ à¤à¥ मà¥à¤ªà¥à¤²à¥à¤',options:'Template Options',insertOption:'मà¥à¤² शबà¥à¤¦à¥à¤ à¤à¥ बदलà¥à¤',selectPromptMsg:'à¤à¤¡à¤¿à¤à¤° मà¥à¤ à¤à¤ªà¤¨ à¤à¤°à¤¨à¥ हà¥à¤¤à¥ à¤à¥ मà¥à¤ªà¥à¤²à¥à¤ à¤à¥à¤¨à¥à¤(वरà¥à¤¤à¤®à¤¾à¤¨ à¤à¤¨à¥à¤à¥ नà¥à¤ सà¥à¤µ नहà¥à¤ हà¥à¤à¤à¥):',emptyListMsg:'(à¤à¥à¤ à¤à¥ मà¥à¤ªà¥à¤²à¥à¤ डिà¥à¤¾à¤à¤¨ नहà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हà¥)'},showBlocks:'बà¥à¤²à¥à¤ दिà¤à¤¾à¤¯à¥à¤',stylesCombo:{label:'सà¥à¤à¤¾à¤à¤²',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'à¥à¥à¤°à¥à¤®à¥à¤',panelTitle:'à¥à¥à¤°à¥à¤®à¥à¤',tag_p:'साधारण',tag_pre:'à¥à¥à¤°à¥à¤®à¥à¤à¥ ड',tag_address:'पता',tag_h1:'शà¥à¤°à¥à¤·à¤ 1',tag_h2:'शà¥à¤°à¥à¤·à¤ 2',tag_h3:'शà¥à¤°à¥à¤·à¤ 3',tag_h4:'शà¥à¤°à¥à¤·à¤ 4',tag_h5:'शà¥à¤°à¥à¤·à¤ 5',tag_h6:'शà¥à¤°à¥à¤·à¤ 6',tag_div:'शà¥à¤°à¥à¤·à¤ (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'à¥à¥à¤¨à¥à¤',voiceLabel:'Font',panelTitle:'à¥à¥à¤¨à¥à¤'},fontSize:{label:'साà¤à¥',voiceLabel:'Font Size',panelTitle:'साà¤à¥'},colorButton:{textColorTitle:'à¤à¥à¤à¥à¤¸à¥à¤ रà¤à¤',bgColorTitle:'बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡ रà¤à¤',panelTitle:'Colors',auto:'सà¥à¤µà¤à¤¾à¤²à¤¿à¤¤',more:'à¤à¤° रà¤à¤...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',title:'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ पà¥à¤°à¥à¤ªà¤°à¥à¤à¥à¥',design:'Design',meta:'मॠà¤à¤¾à¤¡à¥à¤à¤¾',chooseColor:'Choose',other:'<ठनà¥à¤¯>',docTitle:'पà¥à¤ शà¥à¤°à¥à¤·à¤',charset:'à¤à¤°à¥à¤à¥à¤à¤° सॠठà¤à¤¨à¥à¤à¥à¤¡à¤¿à¤à¤',charsetOther:'ठनà¥à¤¯ à¤à¤°à¥à¤à¥à¤à¤° सॠठà¤à¤¨à¥à¤à¥à¤¡à¤¿à¤à¤',charsetASCII:'ASCII',charsetCE:'मधà¥à¤¯ यà¥à¤°à¥à¤ªà¥à¤¯ (Central European)',charsetCT:'à¤à¥à¤¨à¥ (Chinese Traditional Big5)',charsetCR:'सिरà¥à¤²à¤¿à¤ (Cyrillic)',charsetGR:'यवन (Greek)',charsetJP:'à¤à¤¾à¤ªà¤¾à¤¨à¥ (Japanese)',charsetKR:'à¤à¥à¤°à¥à¤¯à¤¨ (Korean)',charsetTR:'तà¥à¤°à¥à¤à¥ (Turkish)',charsetUN:'यà¥à¤¨à¥à¤à¥à¤¡ (UTF-8)',charsetWE:'पशà¥à¤à¤¿à¤® यà¥à¤°à¥à¤ªà¥à¤¯ (Western European)',docType:'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ पà¥à¤°à¤à¤¾à¤° शà¥à¤°à¥à¤·à¤',docTypeOther:'ठनà¥à¤¯ डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ पà¥à¤°à¤à¤¾à¤° शà¥à¤°à¥à¤·à¤',xhtmlDec:'XHTML सà¥à¤à¤¨à¤¾ समà¥à¤®à¤¿à¤²à¤¿à¤¤ à¤à¤°à¥à¤',bgColor:'बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡ रà¤à¤',bgImage:'बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡ तसà¥à¤µà¥à¤° URL',bgFixed:'सà¥à¤à¥à¤°à¥à¤² न à¤à¤°à¤¨à¥ वाला बà¥à¤à¥à¤à¥à¤°à¤¾à¤à¤¨à¥à¤¡',txtColor:'à¤à¥à¤à¥à¤¸à¥à¤ रà¤à¤',margin:'पà¥à¤ मारà¥à¤à¤¿à¤¨',marginTop:'à¤à¤ªà¤°',marginLeft:'बायà¥à¤',marginRight:'दायà¥à¤',marginBottom:'नà¥à¤à¥',metaKeywords:'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ à¤à¤¨à¥à¤¡à¥à¤à¥à¤¸ सà¤à¤à¥à¤¤à¤¶à¤¬à¥à¤¦ (ठलà¥à¤ªà¤µà¤¿à¤°à¤¾à¤® सॠठलठà¤à¤°à¥à¤)',metaDescription:'डà¥à¤à¥à¤¯à¥à¤®à¥ नà¥à¤ à¤à¤°à¥ à¤à¥à¤à¤°à¤¨',metaAuthor:'लà¥à¤à¤',metaCopyright:'à¤à¥à¤ªà¥à¤°à¤¾à¤à¤',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/hr.js b/lang/hr.js new file mode 100644 index 0000000..62312b4 --- /dev/null +++ b/lang/hr.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.hr={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Kôd',newPage:'Nova stranica',save:'Snimi',preview:'Pregledaj',cut:'Izreži',copy:'Kopiraj',paste:'Zalijepi',print:'IspiÅ¡i',underline:'Potcrtano',bold:'Podebljaj',italic:'Ukosi',selectAll:'Odaberi sve',removeFormat:'Ukloni formatiranje',strike:'Precrtano',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Ubaci vodoravnu liniju',pagebreak:'Ubaci prijelom stranice',pagebreakAlt:'Page Break',unlink:'Ukloni link',undo:'PoniÅ¡ti',redo:'Ponovi',common:{browseServer:'Pretraži server',url:'URL',protocol:'Protokol',upload:'PoÅ¡alji',uploadSubmit:'PoÅ¡alji na server',image:'Slika',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<nije postavljeno>',id:'Id',name:'Naziv',langDir:'Smjer jezika',langDirLtr:'S lijeva na desno (LTR)',langDirRtl:'S desna na lijevo (RTL)',langCode:'Kôd jezika',longDescr:'DugaÄki opis URL',cssClass:'Stylesheet klase',advisoryTitle:'Advisory naslov',cssStyle:'Stil',ok:'OK',cancel:'PoniÅ¡ti',close:'Close',preview:'Preview',generalTab:'OpÄenito',advancedTab:'Napredno',validateNumberFailed:'Ova vrijednost nije broj.',confirmNewPage:'Sve napravljene promjene Äe biti izgubljene ukoliko ih niste snimili. Sigurno želite uÄitati novu stranicu?',confirmCancel:'Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Å irina',height:'Visina',align:'Poravnaj',alignLeft:'Lijevo',alignRight:'Desno',alignCenter:'SrediÅ¡nje',alignTop:'Vrh',alignMiddle:'Sredina',alignBottom:'Dolje',invalidHeight:'Visina mora biti broj.',invalidWidth:'Å irina mora biti broj.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, nedostupno</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Ubaci posebne znakove',title:'Odaberite posebni karakter',options:'Special Character Options'},link:{toolbar:'Ubaci/promijeni link',other:'<drugi>',menu:'Promijeni link',title:'Link',info:'Link Info',target:'Meta',upload:'PoÅ¡alji',advanced:'Napredno',type:'Link vrsta',toUrl:'URL',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',targetFrame:'<okvir>',targetPopup:'<popup prozor>',targetFrameName:'Ime ciljnog okvira',targetPopupName:'Naziv popup prozora',popupFeatures:'MoguÄnosti popup prozora',popupResizable:'Promjenjiva veliÄina',popupStatusBar:'Statusna traka',popupLocationBar:'Traka za lokaciju',popupToolbar:'Traka s alatima',popupMenuBar:'Izborna traka',popupFullScreen:'Cijeli ekran (IE)',popupScrollBars:'Scroll traka',popupDependent:'Ovisno (Netscape)',popupLeft:'Lijeva pozicija',popupTop:'Gornja pozicija',id:'Id',langDir:'Smjer jezika',langDirLTR:'S lijeva na desno (LTR)',langDirRTL:'S desna na lijevo (RTL)',acccessKey:'Pristupna tipka',name:'Naziv',langCode:'Smjer jezika',tabIndex:'Tab Indeks',advisoryTitle:'Advisory naslov',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Stylesheet klase',charset:'Kodna stranica povezanih resursa',styles:'Stil',rel:'Relationship',selectAnchor:'Odaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id elementa',emailAddress:'E-Mail adresa',emailSubject:'Naslov',emailBody:'Sadržaj poruke',noAnchors:'(Nema dostupnih sidra)',noUrl:'Molimo upiÅ¡ite URL link',noEmail:'Molimo upiÅ¡ite e-mail adresu'},anchor:{toolbar:'Ubaci/promijeni sidro',menu:'Svojstva sidra',title:'Svojstva sidra',name:'Ime sidra',errorName:'Molimo unesite ime sidra',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'PronaÄi i zamijeni',find:'PronaÄi',replace:'Zamijeni',findWhat:'PronaÄi:',replaceWith:'Zamijeni s:',notFoundMsg:'Traženi tekst nije pronaÄen.',matchCase:'Usporedi mala/velika slova',matchWord:'Usporedi cijele rijeÄi',matchCyclic:'Usporedi kružno',replaceAll:'Zamijeni sve',replaceSuccessMsg:'Zamijenjeno %1 pojmova.'},table:{toolbar:'Tablica',title:'Svojstva tablice',menu:'Svojstva tablice',deleteTable:'IzbriÅ¡i tablicu',rows:'Redova',columns:'Kolona',border:'VeliÄina okvira',widthPx:'piksela',widthPc:'postotaka',widthUnit:'width unit',cellSpace:'Prostornost Äelija',cellPad:'Razmak Äelija',caption:'Naslov',summary:'Sažetak',headers:'Zaglavlje',headersNone:'NiÅ¡ta',headersColumn:'Prva kolona',headersRow:'Prvi red',headersBoth:'Oba',invalidRows:'Broj redova mora biti broj veÄi od 0.',invalidCols:'Broj kolona mora biti broj veÄi od 0.',invalidBorder:'Debljina ruba mora biti broj.',invalidWidth:'Å irina tablice mora biti broj.',invalidHeight:'Visina tablice mora biti broj.',invalidCellSpacing:'Prostornost Äelija mora biti broj.',invalidCellPadding:'Razmak Äelija mora biti broj.',cell:{menu:'Äelija',insertBefore:'Ubaci Äeliju prije',insertAfter:'Ubaci Äeliju poslije',deleteCell:'IzbriÅ¡i Äelije',merge:'Spoji Äelije',mergeRight:'Spoji desno',mergeDown:'Spoji dolje',splitHorizontal:'Podijeli Äeliju vodoravno',splitVertical:'Podijeli Äeliju okomito',title:'Svojstva Äelije',cellType:'Vrsta Äelije',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Prelazak u novi red',hAlign:'Vodoravno poravnanje',vAlign:'Okomito poravnanje',alignBaseline:'Osnovna linija',bgColor:'Boja pozadine',borderColor:'Boja ruba',data:'Podatak',header:'Zaglavlje',yes:'Da',no:'ne',invalidWidth:'Å irina Äelije mora biti broj.',invalidHeight:'Visina Äelije mora biti broj.',invalidRowSpan:'Rows span mora biti cijeli broj.',invalidColSpan:'Columns span mora biti cijeli broj.',chooseColor:'Choose'},row:{menu:'Red',insertBefore:'Ubaci red prije',insertAfter:'Ubaci red poslije',deleteRow:'IzbriÅ¡i redove'},column:{menu:'Kolona',insertBefore:'Ubaci kolonu prije',insertAfter:'Ubaci kolonu poslije',deleteColumn:'IzbriÅ¡i kolone'}},button:{title:'Image Button svojstva',text:'Tekst (vrijednost)',type:'Vrsta',typeBtn:'Gumb',typeSbm:'PoÅ¡alji',typeRst:'PoniÅ¡ti'},checkboxAndRadio:{checkboxTitle:'Checkbox svojstva',radioTitle:'Radio Button svojstva',value:'Vrijednost',selected:'Odabrano'},form:{title:'Form svojstva',menu:'Form svojstva',action:'Akcija',method:'Metoda',encoding:'Encoding'},select:{title:'Selection svojstva',selectInfo:'Info',opAvail:'Dostupne opcije',value:'Vrijednost',size:'VeliÄina',lines:'linija',chkMulti:'Dozvoli viÅ¡estruki odabir',opText:'Tekst',opValue:'Vrijednost',btnAdd:'Dodaj',btnModify:'Promijeni',btnUp:'Gore',btnDown:'Dolje',btnSetValue:'Postavi kao odabranu vrijednost',btnDelete:'ObriÅ¡i'},textarea:{title:'Textarea svojstva',cols:'Kolona',rows:'Redova'},textfield:{title:'Text Field svojstva',name:'Ime',value:'Vrijednost',charWidth:'Å irina',maxChars:'NajviÅ¡e karaktera',type:'Vrsta',typeText:'Tekst',typePass:'Å ifra'},hidden:{title:'Hidden Field svojstva',name:'Ime',value:'Vrijednost'},image:{title:'Svojstva slika',titleButton:'Image Button svojstva',menu:'Svojstva slika',infoTab:'Info slike',btnUpload:'PoÅ¡alji na server',upload:'PoÅ¡alji',alt:'Alternativni tekst',lockRatio:'ZakljuÄaj odnos',resetSize:'ObriÅ¡i veliÄinu',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Unesite URL slike',linkTab:'Link',button2Img:'Želite li promijeniti odabrani gumb u jednostavnu sliku?',img2Button:'Želite li promijeniti odabranu sliku u gumb?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash svojstva',propertiesTab:'Svojstva',title:'Flash svojstva',chkPlay:'Auto Play',chkLoop:'Ponavljaj',chkMenu:'OmoguÄi Flash izbornik',chkFull:'OmoguÄi Fullscreen',scale:'Omjer',scaleAll:'Prikaži sve',scaleNoBorder:'Bez okvira',scaleFit:'ToÄna veliÄina',access:'Script Access',accessAlways:'Uvijek',accessSameDomain:'Ista domena',accessNever:'Nikad',alignAbsBottom:'Abs dolje',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignTextTop:'Vrh teksta',quality:'Kvaliteta',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Vrsta prozora',flashvars:'Varijable za Flash',bgcolor:'Boja pozadine',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Molimo upiÅ¡ite URL link',validateHSpace:'HSpace mora biti broj.',validateVSpace:'VSpace mora biti broj.'},spellCheck:{toolbar:'Provjeri pravopis',title:'Provjera pravopisa',notAvailable:'Žao nam je, ali usluga trenutno nije dostupna.',errorLoading:'GreÅ¡ka uÄitavanja aplikacije: %s.',notInDic:'Nije u rjeÄniku',changeTo:'Promijeni u',btnIgnore:'Zanemari',btnIgnoreAll:'Zanemari sve',btnReplace:'Zamijeni',btnReplaceAll:'Zamijeni sve',btnUndo:'Vrati',noSuggestions:'-Nema preporuke-',progress:'Provjera u tijeku...',noMispell:'Provjera zavrÅ¡ena: Nema greÅ¡aka',noChanges:'Provjera zavrÅ¡ena: Nije napravljena promjena',oneChange:'Provjera zavrÅ¡ena: Jedna rijeÄ promjenjena',manyChanges:'Provjera zavrÅ¡ena: Promijenjeno %1 rijeÄi',ieSpellDownload:'Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?'},smiley:{toolbar:'SmjeÅ¡ko',title:'Ubaci smjeÅ¡ka',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'BrojÄana lista',bulletedlist:'ObiÄna lista',indent:'Pomakni udesno',outdent:'Pomakni ulijevo',justify:{left:'Lijevo poravnanje',center:'SrediÅ¡nje poravnanje',right:'Desno poravnanje',block:'Blok poravnanje'},blockquote:'Blockquote',clipboard:{title:'Zalijepi',cutError:'Sigurnosne postavke VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).',copyError:'Sigurnosne postavke VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).',pasteMsg:'Molimo zaljepite unutar doljnjeg okvira koristeÄi tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.',securityMsg:'Zbog sigurnosnih postavki VaÅ¡eg pretraživaÄa, editor nema direktan pristup VaÅ¡em meÄuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Tekst koji želite zalijepiti Äini se da je kopiran iz Worda. Želite li prije oÄistiti tekst?',toolbar:'Zalijepi iz Worda',title:'Zalijepi iz Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Zalijepi kao Äisti tekst',title:'Zalijepi kao Äisti tekst'},templates:{button:'PredloÅ¡ci',title:'PredloÅ¡ci sadržaja',options:'Template Options',insertOption:'Zamijeni trenutne sadržaje',selectPromptMsg:'Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj Äe biti izgubljen):',emptyListMsg:'(Nema definiranih predložaka)'},showBlocks:'Prikaži blokove',stylesCombo:{label:'Stil',panelTitle:'Formatting Styles',panelTitle1:'Block stilovi',panelTitle2:'Inline stilovi',panelTitle3:'Object stilovi'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'VeliÄina',voiceLabel:'VeliÄina slova',panelTitle:'VeliÄina'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',panelTitle:'Colors',auto:'Automatski',more:'ViÅ¡e boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Provjeri pravopis tijekom tipkanja (SCAYT)',opera_title:'Not supported by Opera',enable:'OmoguÄi SCAYT',disable:'OnemoguÄi SCAYT',about:'O SCAYT',toggle:'OmoguÄu/OnemoguÄi SCAYT',options:'Opcije',langs:'Jezici',moreSuggestions:'ViÅ¡e prijedloga',ignore:'Zanemari',ignoreAll:'Zanemari sve',addWord:'Dodaj rijeÄ',emptyDic:'Naziv rjeÄnika ne smije biti prazno.',optionsTab:'Opcije',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Jezici',dictionariesTab:'RjeÄnici',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'O SCAYT'},about:{title:'O CKEditoru',dlgTitle:'O CKEditoru',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Za informacije o licencama posjetite naÅ¡u web stranicu:',copy:'Copyright © $1. All rights reserved.'},maximize:'PoveÄaj',minimize:'Minimize',fakeobjects:{anchor:'Sidro',flash:'Flash animacija',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Nepoznati objekt'},resize:'Povuci za promjenu veliÄine',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Svojstva dokumenta',title:'Svojstva dokumenta',design:'Design',meta:'Meta Data',chooseColor:'Choose',other:'<drugi>',docTitle:'Naslov stranice',charset:'Enkodiranje znakova',charsetOther:'Ostalo enkodiranje znakova',charsetASCII:'ASCII',charsetCE:'SrediÅ¡nja Europa',charsetCT:'Tradicionalna kineska (Big5)',charsetCR:'Äirilica',charsetGR:'GrÄka',charsetJP:'Japanska',charsetKR:'Koreanska',charsetTR:'Turska',charsetUN:'Unicode (UTF-8)',charsetWE:'Zapadna Europa',docType:'Zaglavlje vrste dokumenta',docTypeOther:'Ostalo zaglavlje vrste dokumenta',xhtmlDec:'Ubaci XHTML deklaracije',bgColor:'Boja pozadine',bgImage:'URL slike pozadine',bgFixed:'Pozadine se ne pomiÄe',txtColor:'Boja teksta',margin:'Margine stranice',marginTop:'Vrh',marginLeft:'Lijevo',marginRight:'Desno',marginBottom:'Dolje',metaKeywords:'KljuÄne rijeÄi dokumenta (odvojene zarezom)',metaDescription:'Opis dokumenta',metaAuthor:'Autor',metaCopyright:'Autorska prava',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/hu.js b/lang/hu.js new file mode 100644 index 0000000..55c0e98 --- /dev/null +++ b/lang/hu.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.hu={dir:'ltr',editorTitle:'HTML szerkesztÅ',toolbars:'Editor toolbars',editor:'HTML szerkesztÅ',source:'Forráskód',newPage:'Ãj oldal',save:'Mentés',preview:'ElÅnézet',cut:'Kivágás',copy:'Másolás',paste:'Beillesztés',print:'Nyomtatás',underline:'Aláhúzott',bold:'Félkövér',italic:'DÅlt',selectAll:'Mindent kijelöl',removeFormat:'Formázás eltávolÃtása',strike:'Ãthúzott',subscript:'Alsó index',superscript:'FelsÅ index',horizontalrule:'Elválasztóvonal beillesztése',pagebreak:'Oldaltörés beillesztése',pagebreakAlt:'Page Break',unlink:'Hivatkozás törlése',undo:'Visszavonás',redo:'Ismétlés',common:{browseServer:'Böngészés a szerveren',url:'Hivatkozás',protocol:'Protokoll',upload:'Feltöltés',uploadSubmit:'Küldés a szerverre',image:'Kép',flash:'Flash',form:'Å°rlap',checkbox:'JelölÅnégyzet',radio:'Választógomb',textField:'SzövegmezÅ',textarea:'Szövegterület',hiddenField:'RejtettmezÅ',button:'Gomb',select:'LegördülÅ lista',imageButton:'Képgomb',notSet:'<nincs beállÃtva>',id:'AzonosÃtó',name:'Név',langDir:'Ãrás iránya',langDirLtr:'Balról jobbra',langDirRtl:'Jobbról balra',langCode:'Nyelv kódja',longDescr:'Részletes leÃrás webcÃme',cssClass:'StÃluskészlet',advisoryTitle:'Súgócimke',cssStyle:'StÃlus',ok:'Rendben',cancel:'Mégsem',close:'Bezárás',preview:'ElÅnézet',generalTab:'Ãltalános',advancedTab:'További opciók',validateNumberFailed:'A mezÅbe csak számokat Ãrhat.',confirmNewPage:'Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?',confirmCancel:'Az űrlap tartalma megváltozott, ám a változásokat nem rögzÃtette. Biztosan be szeretné zárni az űrlapot?',options:'BeállÃtások',target:'Cél',targetNew:'Ãj ablak (_blank)',targetTop:'LegfelsÅ ablak (_top)',targetSelf:'Aktuális ablakban (_self)',targetParent:'SzülÅ ablak (_parent)',langDirLTR:'Balról jobbra (LTR)',langDirRTL:'Jobbról balra (RTL)',styles:'StÃlus',cssClasses:'StÃluslap osztály',width:'Szélesség',height:'Magasság',align:'IgazÃtás',alignLeft:'Bal',alignRight:'Jobbra',alignCenter:'Középre',alignTop:'Tetejére',alignMiddle:'Középre',alignBottom:'Aljára',invalidHeight:'A magasság mezÅbe csak számokat Ãrhat.',invalidWidth:'A szélesség mezÅbe csak számokat Ãrhat.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Helyi menü opciók'},specialChar:{toolbar:'Speciális karakter beillesztése',title:'Speciális karakter választása',options:'Speciális karakter opciók'},link:{toolbar:'Hivatkozás beillesztése/módosÃtása',other:'<más>',menu:'Hivatkozás módosÃtása',title:'Hivatkozás tulajdonságai',info:'Alaptulajdonságok',target:'Tartalom megjelenÃtése',upload:'Feltöltés',advanced:'További opciók',type:'Hivatkozás tÃpusa',toUrl:'URL',toAnchor:'Horgony az oldalon',toEmail:'E-Mail',targetFrame:'<keretben>',targetPopup:'<felugró ablakban>',targetFrameName:'Keret neve',targetPopupName:'Felugró ablak neve',popupFeatures:'Felugró ablak jellemzÅi',popupResizable:'Ãtméretezés',popupStatusBar:'Ãllapotsor',popupLocationBar:'CÃmsor',popupToolbar:'Eszköztár',popupMenuBar:'Menü sor',popupFullScreen:'Teljes képernyÅ (csak IE)',popupScrollBars:'GördÃtÅsáv',popupDependent:'SzülÅhöz kapcsolt (csak Netscape)',popupLeft:'Bal pozÃció',popupTop:'FelsÅ pozÃció',id:'Id',langDir:'Ãrás iránya',langDirLTR:'Balról jobbra',langDirRTL:'Jobbról balra',acccessKey:'Billentyűkombináció',name:'Név',langCode:'Ãrás iránya',tabIndex:'Tabulátor index',advisoryTitle:'Súgócimke',advisoryContentType:'Súgó tartalomtÃpusa',cssClasses:'StÃluskészlet',charset:'Hivatkozott tartalom kódlapja',styles:'StÃlus',rel:'Relationship',selectAnchor:'Horgony választása',anchorName:'Horgony név szerint',anchorId:'AzonosÃtó szerint',emailAddress:'E-Mail cÃm',emailSubject:'Ãzenet tárgya',emailBody:'Ãzenet',noAnchors:'(Nincs horgony a dokumentumban)',noUrl:'Adja meg a hivatkozás webcÃmét',noEmail:'Adja meg az E-Mail cÃmet'},anchor:{toolbar:'Horgony beillesztése/szerkesztése',menu:'Horgony tulajdonságai',title:'Horgony tulajdonságai',name:'Horgony neve',errorName:'Kérem adja meg a horgony nevét',remove:'Remove Anchor'},list:{numberedTitle:'Sorszámozott lista tulajdonságai',bulletedTitle:'Pontozott lista tulajdonságai',type:'TÃpus',start:'KezdÅszám',validateStartNumber:'A kezdÅszám nem lehet tört érték.',circle:'Kör',disc:'Korong',square:'Négyzet',none:'Nincs',notset:'<Nincs beállÃtva>',armenian:'Ãrmény számozás',georgian:'Grúz számozás (an, ban, gan, stb.)',lowerRoman:'Római kisbetűs (i, ii, iii, iv, v, stb.)',upperRoman:'Római nagybetűs (I, II, III, IV, V, stb.)',lowerAlpha:'Kisbetűs (a, b, c, d, e, stb.)',upperAlpha:'Nagybetűs (A, B, C, D, E, stb.)',lowerGreek:'Görög (alpha, beta, gamma, stb.)',decimal:'Arab számozás (1, 2, 3, stb.)',decimalLeadingZero:'Számozás bevezetÅ nullákkal (01, 02, 03, stb.)'},findAndReplace:{title:'Keresés és csere',find:'Keresés',replace:'Csere',findWhat:'Keresett szöveg:',replaceWith:'Csere erre:',notFoundMsg:'A keresett szöveg nem található.',matchCase:'kis- és nagybetű megkülönböztetése',matchWord:'csak ha ez a teljes szó',matchCyclic:'Ciklikus keresés',replaceAll:'Az összes cseréje',replaceSuccessMsg:'%1 egyezÅség cserélve.'},table:{toolbar:'Táblázat',title:'Táblázat tulajdonságai',menu:'Táblázat tulajdonságai',deleteTable:'Táblázat törlése',rows:'Sorok',columns:'Oszlopok',border:'Szegélyméret',widthPx:'képpont',widthPc:'százalék',widthUnit:'Szélesség egység',cellSpace:'Cella térköz',cellPad:'Cella belsÅ margó',caption:'Felirat',summary:'LeÃrás',headers:'Fejlécek',headersNone:'Nincsenek',headersColumn:'ElsÅ oszlop',headersRow:'ElsÅ sor',headersBoth:'MindkettÅ',invalidRows:'A sorok számának nagyobbnak kell lenni mint 0.',invalidCols:'Az oszlopok számának nagyobbnak kell lenni mint 0.',invalidBorder:'A szegélyméret mezÅbe csak számokat Ãrhat.',invalidWidth:'A szélesség mezÅbe csak számokat Ãrhat.',invalidHeight:'A magasság mezÅbe csak számokat Ãrhat.',invalidCellSpacing:'A cella térköz mezÅbe csak számokat Ãrhat.',invalidCellPadding:'A cella belsÅ margó mezÅbe csak számokat Ãrhat.',cell:{menu:'Cella',insertBefore:'Beszúrás balra',insertAfter:'Beszúrás jobbra',deleteCell:'Cellák törlése',merge:'Cellák egyesÃtése',mergeRight:'Cellák egyesÃtése jobbra',mergeDown:'Cellák egyesÃtése lefelé',splitHorizontal:'Cellák szétválasztása vÃzszintesen',splitVertical:'Cellák szétválasztása függÅlegesen',title:'Cella tulajdonságai',cellType:'Cella tÃpusa',rowSpan:'FüggÅleges egyesÃtés',colSpan:'VÃzszintes egyesÃtés',wordWrap:'Hosszú sorok törése',hAlign:'VÃzszintes igazÃtás',vAlign:'FüggÅleges igazÃtás',alignBaseline:'Alapvonalra',bgColor:'Háttér szÃne',borderColor:'Keret szÃne',data:'Adat',header:'Fejléc',yes:'Igen',no:'Nem',invalidWidth:'A szélesség mezÅbe csak számokat Ãrhat.',invalidHeight:'A magasság mezÅbe csak számokat Ãrhat.',invalidRowSpan:'A függÅleges egyesÃtés mezÅbe csak számokat Ãrhat.',invalidColSpan:'A vÃzszintes egyesÃtés mezÅbe csak számokat Ãrhat.',chooseColor:'Válasszon'},row:{menu:'Sor',insertBefore:'Beszúrás fölé',insertAfter:'Beszúrás alá',deleteRow:'Sorok törlése'},column:{menu:'Oszlop',insertBefore:'Beszúrás balra',insertAfter:'Beszúrás jobbra',deleteColumn:'Oszlopok törlése'}},button:{title:'Gomb tulajdonságai',text:'Szöveg (Ãrték)',type:'TÃpus',typeBtn:'Gomb',typeSbm:'Küldés',typeRst:'Alaphelyzet'},checkboxAndRadio:{checkboxTitle:'JelölÅnégyzet tulajdonságai',radioTitle:'Választógomb tulajdonságai',value:'Ãrték',selected:'Kiválasztott'},form:{title:'Å°rlap tulajdonságai',menu:'Å°rlap tulajdonságai',action:'Adatfeldolgozást végzÅ hivatkozás',method:'Adatküldés módja',encoding:'Kódolás'},select:{title:'LegördülÅ lista tulajdonságai',selectInfo:'Alaptulajdonságok',opAvail:'ElérhetÅ opciók',value:'Ãrték',size:'Méret',lines:'sor',chkMulti:'több sor is kiválasztható',opText:'Szöveg',opValue:'Ãrték',btnAdd:'Hozzáad',btnModify:'MódosÃt',btnUp:'Fel',btnDown:'Le',btnSetValue:'Legyen az alapértelmezett érték',btnDelete:'Töröl'},textarea:{title:'Szövegterület tulajdonságai',cols:'Karakterek száma egy sorban',rows:'Sorok száma'},textfield:{title:'SzövegmezÅ tulajdonságai',name:'Név',value:'Ãrték',charWidth:'MegjelenÃtett karakterek száma',maxChars:'Maximális karakterszám',type:'TÃpus',typeText:'Szöveg',typePass:'Jelszó'},hidden:{title:'Rejtett mezÅ tulajdonságai',name:'Név',value:'Ãrték'},image:{title:'Kép tulajdonságai',titleButton:'Képgomb tulajdonságai',menu:'Kép tulajdonságai',infoTab:'Alaptulajdonságok',btnUpload:'Küldés a szerverre',upload:'Feltöltés',alt:'Buborék szöveg',lockRatio:'Arány megtartása',resetSize:'Eredeti méret',border:'Keret',hSpace:'VÃzsz. táv',vSpace:'Függ. táv',alertUrl:'Töltse ki a kép webcÃmét',linkTab:'Hivatkozás',button2Img:'A kiválasztott képgombból sima képet szeretne csinálni?',img2Button:'A kiválasztott képbÅl képgombot szeretne csinálni?',urlMissing:'Hiányzik a kép URL-je',validateBorder:'A keret méretének egész számot kell beÃrni!',validateHSpace:'VÃzszintes távolságnak egész számot kell beÃrni!',validateVSpace:'FüggÅleges távolságnak egész számot kell beÃrni!'},flash:{properties:'Flash tulajdonságai',propertiesTab:'Tulajdonságok',title:'Flash tulajdonságai',chkPlay:'Automata lejátszás',chkLoop:'Folyamatosan',chkMenu:'Flash menü engedélyezése',chkFull:'Teljes képernyÅ engedélyezése',scale:'Méretezés',scaleAll:'Mindent mutat',scaleNoBorder:'Keret nélkül',scaleFit:'Teljes kitöltés',access:'Szkript hozzáférés',accessAlways:'Mindig',accessSameDomain:'Azonos domainrÅl',accessNever:'Soha',alignAbsBottom:'Legaljára',alignAbsMiddle:'Közepére',alignBaseline:'Alapvonalhoz',alignTextTop:'Szöveg tetejére',quality:'MinÅség',qualityBest:'Legjobb',qualityHigh:'Jó',qualityAutoHigh:'Automata jó',qualityMedium:'Közepes',qualityAutoLow:'Automata gyenge',qualityLow:'Gyenge',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Ablak mód',flashvars:'Flash változók',bgcolor:'HáttérszÃn',hSpace:'VÃzsz. táv',vSpace:'Függ. táv',validateSrc:'Adja meg a hivatkozás webcÃmét',validateHSpace:'A vÃzszintes távolsűág mezÅbe csak számokat Ãrhat.',validateVSpace:'A függÅleges távolsűág mezÅbe csak számokat Ãrhat.'},spellCheck:{toolbar:'HelyesÃrás-ellenÅrzés',title:'HelyesÃrás ellenörzÅ',notAvailable:'Sajnálom, de a szolgáltatás jelenleg nem elérhetÅ.',errorLoading:'Hiba a szolgáltatás host betöltése közben: %s.',notInDic:'Nincs a szótárban',changeTo:'MódosÃtás',btnIgnore:'Kihagyja',btnIgnoreAll:'Mindet kihagyja',btnReplace:'Csere',btnReplaceAll:'Ãsszes cseréje',btnUndo:'Visszavonás',noSuggestions:'Nincs javaslat',progress:'HelyesÃrás-ellenÅrzés folyamatban...',noMispell:'HelyesÃrás-ellenÅrzés kész: Nem találtam hibát',noChanges:'HelyesÃrás-ellenÅrzés kész: Nincs változtatott szó',oneChange:'HelyesÃrás-ellenÅrzés kész: Egy szó cserélve',manyChanges:'HelyesÃrás-ellenÅrzés kész: %1 szó cserélve',ieSpellDownload:'A helyesÃrás-ellenÅrzÅ nincs telepÃtve. Szeretné letölteni most?'},smiley:{toolbar:'Hangulatjelek',title:'Hangulatjel beszúrása',options:'Hangulatjel opciók'},elementsPath:{eleLabel:'Elem utak',eleTitle:'%1 elem'},numberedlist:'Számozás',bulletedlist:'Felsorolás',indent:'Behúzás növelése',outdent:'Behúzás csökkentése',justify:{left:'Balra',center:'Középre',right:'Jobbra',block:'Sorkizárt'},blockquote:'Idézet blokk',clipboard:{title:'Beillesztés',cutError:'A böngészÅ biztonsági beállÃtásai nem engedélyezik a szerkesztÅnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).',copyError:'A böngészÅ biztonsági beállÃtásai nem engedélyezik a szerkesztÅnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).',pasteMsg:'Másolja be az alábbi mezÅbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.',securityMsg:'A böngészÅ biztonsági beállÃtásai miatt a szerkesztÅ nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.',pasteArea:'Beszúrás mezÅ'},pastefromword:{confirmCleanup:'Ãgy tűnik a beillesztett szöveget Word-bÅl másolt át. Meg szeretné tisztÃtani a szöveget? (ajánlott)',toolbar:'Beillesztés Word-bÅl',title:'Beillesztés Word-bÅl',error:'Egy belsÅ hiba miatt nem sikerült megtisztÃtani a szöveget'},pasteText:{button:'Beillesztés formázatlan szövegként',title:'Beillesztés formázatlan szövegként'},templates:{button:'Sablonok',title:'ElérhetÅ sablonok',options:'Sablon opciók',insertOption:'Kicseréli a jelenlegi tartalmat',selectPromptMsg:'Válassza ki melyik sablon nyÃljon meg a szerkesztÅben<br>(a jelenlegi tartalom elveszik):',emptyListMsg:'(Nincs sablon megadva)'},showBlocks:'Blokkok megjelenÃtése',stylesCombo:{label:'StÃlus',panelTitle:'Formázási stÃlusok',panelTitle1:'Blokk stÃlusok',panelTitle2:'Inline stÃlusok',panelTitle3:'Objektum stÃlusok'},format:{label:'Formátum',panelTitle:'Formátum',tag_p:'Normál',tag_pre:'Formázott',tag_address:'CÃmsor',tag_h1:'Fejléc 1',tag_h2:'Fejléc 2',tag_h3:'Fejléc 3',tag_h4:'Fejléc 4',tag_h5:'Fejléc 5',tag_h6:'Fejléc 6',tag_div:'Bekezdés (DIV)'},div:{title:'DIV tároló létrehozása',toolbar:'DIV tároló létrehozása',cssClassInputLabel:'StÃluslap osztály',styleSelectLabel:'StÃlus',IdInputLabel:'AzonosÃtó',languageCodeInputLabel:' Nyelv kódja',inlineStyleInputLabel:'Inline stÃlus',advisoryTitleInputLabel:'Tipp szöveg',langDirLabel:'Nyelvi irány',langDirLTRLabel:'Balról jobbra (LTR)',langDirRTLLabel:'Jobbról balra (RTL)',edit:'DIV szerkesztése',remove:'DIV eltávolÃtása'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'BetűtÃpus',voiceLabel:'BetűtÃpus',panelTitle:'BetűtÃpus'},fontSize:{label:'Méret',voiceLabel:'Betűméret',panelTitle:'Méret'},colorButton:{textColorTitle:'BetűszÃn',bgColorTitle:'HáttérszÃn',panelTitle:'SzÃnek',auto:'Automatikus',more:'További szÃnek...'},colors:{'000':'Fekete',800000:'Bordó','8B4513':'Barna','2F4F4F':'Sötét türkiz','008080':'Türkiz','000080':'Király kék','4B0082':'Indigó kék',696969:'Szürke',B22222:'Tégla vörös',A52A2A:'Vörös',DAA520:'Arany sárga','006400':'Sötét zöld','40E0D0':'Türkiz','0000CD':'Kék',800080:'Lila',808080:'Szürke',F00:'Piros',FF8C00:'Sötét narancs',FFD700:'Arany','008000':'Zöld','0FF':'Türkiz','00F':'Kék',EE82EE:'RózsaszÃn',A9A9A9:'Sötét szürke',FFA07A:'Lazac',FFA500:'Narancs',FFFF00:'Citromsárga','00FF00':'Neon zöld',AFEEEE:'Világos türkiz',ADD8E6:'Világos kék',DDA0DD:'Világos lila',D3D3D3:'Világos szürke',FFF0F5:'Lavender Blush',FAEBD7:'Törtfehér',FFFFE0:'Világos sárga',F0FFF0:'Menta',F0FFFF:'Azúr kék',F0F8FF:'Halvány kék',E6E6FA:'Lavender',FFF:'Fehér'},scayt:{title:'HelyesÃrás ellenÅrzés gépelés közben',opera_title:'Az Opera nem támogatja',enable:'SCAYT engedélyezése',disable:'SCAYT letiltása',about:'SCAYT névjegy',toggle:'SCAYT kapcsolása',options:'BeállÃtások',langs:'Nyelvek',moreSuggestions:'További javaslatok',ignore:'Kihagy',ignoreAll:'Ãsszes kihagyása',addWord:'Szó hozzáadása',emptyDic:'A szótár nevét meg kell adni.',optionsTab:'BeállÃtások',allCaps:'Nagybetűs szavak kihagyása',ignoreDomainNames:'Domain nevek kihagyása',mixedCase:'Kis és nagybetűt is tartalmazó szavak kihagyása',mixedWithDigits:'Számokat tartalmazó szavak kihagyása',languagesTab:'Nyelvek',dictionariesTab:'Szótár',dic_field_name:'Szótár neve',dic_create:'Létrehozás',dic_restore:'VisszaállÃtás',dic_delete:'Törlés',dic_rename:'Ãtnevezés',dic_info:'Kezdetben a felhasználói szótár böngészÅ sütiben tárolódik. Azonban a sütik maximális mérete korlátozott. Amikora a szótár akkora lesz, hogy már sütiben nem lehet tárolni, akkor a szótárat tárolhatja a szerveren is. Ehhez egy nevet kell megadni a szótárhoz. Amennyiben már van szerveren tárolt szótára, adja meg a nevét és kattintson a visszaállÃtás gombra.',aboutTab:'Névjegy'},about:{title:'CKEditor névjegy',dlgTitle:'CKEditor névjegy',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Licenszelési információkért kérjük látogassa meg weboldalunkat:',copy:'Copyright © $1. Minden jog fenntartva.'},maximize:'Teljes méret',minimize:'Kis méret',fakeobjects:{anchor:'Horgony',flash:'Flash animáció',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Ismeretlen objektum'},resize:'Húzza az átméretezéshez',colordialog:{title:'Válasszon szÃnt',options:'SzÃn opciók',highlight:'NagyÃtás',selected:'Kiválasztott',clear:'ÃrÃtés'},toolbarCollapse:'Eszköztár összecsukása',toolbarExpand:'Eszköztár szétnyitása',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Szöveg iránya balról jobbra',rtl:'Szöveg iránya jobbról balra'},docprops:{label:'Dokumentum tulajdonságai',title:'Dokumentum tulajdonságai',design:'Design',meta:'Meta adatok',chooseColor:'Válasszon',other:'<más>',docTitle:'OldalcÃm',charset:'Karakterkódolás',charsetOther:'Más karakterkódolás',charsetASCII:'ASCII',charsetCE:'Közép-Európai',charsetCT:'KÃnai Tradicionális (Big5)',charsetCR:'Cyrill',charsetGR:'Görög',charsetJP:'Japán',charsetKR:'Koreai',charsetTR:'Török',charsetUN:'Unicode (UTF-8)',charsetWE:'Nyugat-Európai',docType:'Dokumentum tÃpus fejléc',docTypeOther:'Más dokumentum tÃpus fejléc',xhtmlDec:'XHTML deklarációk beillesztése',bgColor:'HáttérszÃn',bgImage:'Háttérkép cÃm',bgFixed:'Nem gördÃthetÅ háttér',txtColor:'BetűszÃn',margin:'Oldal margók',marginTop:'FelsÅ',marginLeft:'Bal',marginRight:'Jobb',marginBottom:'Alsó',metaKeywords:'Dokumentum keresÅszavak (vesszÅvel elválasztva)',metaDescription:'Dokumentum leÃrás',metaAuthor:'SzerzÅ',metaCopyright:'SzerzÅi jog',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/is.js b/lang/is.js new file mode 100644 index 0000000..5c7dac8 --- /dev/null +++ b/lang/is.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.is={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Kóði',newPage:'Ný sÃða',save:'Vista',preview:'Forskoða',cut:'Klippa',copy:'Afrita',paste:'LÃma',print:'Prenta',underline:'Undirstrikað',bold:'Feitletrað',italic:'Skáletrað',selectAll:'Velja allt',removeFormat:'Fjarlægja snið',strike:'Yfirstrikað',subscript:'Niðurskrifað',superscript:'Uppskrifað',horizontalrule:'Lóðrétt lÃna',pagebreak:'Setja inn sÃðuskil',pagebreakAlt:'Page Break',unlink:'Fjarlægja stiklu',undo:'Afturkalla',redo:'Hætta við afturköllun',common:{browseServer:'Fletta à skjalasafni',url:'Vefslóð',protocol:'Samskiptastaðall',upload:'Senda upp',uploadSubmit:'Hlaða upp',image:'Setja inn mynd',flash:'Flash',form:'Setja inn innsláttarform',checkbox:'Setja inn hökunarreit',radio:'Setja inn valhnapp',textField:'Setja inn textareit',textarea:'Setja inn textasvæði',hiddenField:'Setja inn falið svæði',button:'Setja inn hnapp',select:'Setja inn lista',imageButton:'Setja inn myndahnapp',notSet:'<ekkert valið>',id:'Auðkenni',name:'Nafn',langDir:'Lesstefna',langDirLtr:'Frá vinstri til hægri (LTR)',langDirRtl:'Frá hægri til vinstri (RTL)',langCode:'Tungumálakóði',longDescr:'Nánari lýsing',cssClass:'StÃlsniðsflokkur',advisoryTitle:'Titill',cssStyle:'StÃll',ok:'à lagi',cancel:'Hætta við',close:'Close',preview:'Preview',generalTab:'Almennt',advancedTab:'Tæknilegt',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Breidd',height:'Hæð',align:'Jöfnun',alignLeft:'Vinstri',alignRight:'Hægri',alignCenter:'Miðjað',alignTop:'Efst',alignMiddle:'Miðjuð',alignBottom:'Neðst',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Setja inn merki',title:'Velja tákn',options:'Special Character Options'},link:{toolbar:'Stofna/breyta stiklu',other:'<annar>',menu:'Breyta stiklu',title:'Stikla',info:'Almennt',target:'Mark',upload:'Senda upp',advanced:'Tæknilegt',type:'Stikluflokkur',toUrl:'URL',toAnchor:'Bókamerki á þessari sÃðu',toEmail:'Netfang',targetFrame:'<rammi>',targetPopup:'<sprettigluggi>',targetFrameName:'Nafn markglugga',targetPopupName:'Nafn sprettiglugga',popupFeatures:'Eigindi sprettiglugga',popupResizable:'Resizable',popupStatusBar:'Stöðustika',popupLocationBar:'FanglÃna',popupToolbar:'Verkfærastika',popupMenuBar:'VallÃna',popupFullScreen:'Heilskjár (IE)',popupScrollBars:'Skrunstikur',popupDependent:'Háð venslum (Netscape)',popupLeft:'Fjarlægð frá vinstri',popupTop:'Fjarlægð frá efri brún',id:'Id',langDir:'Lesstefna',langDirLTR:'Frá vinstri til hægri (LTR)',langDirRTL:'Frá hægri til vinstri (RTL)',acccessKey:'Skammvalshnappur',name:'Nafn',langCode:'Lesstefna',tabIndex:'Raðnúmer innsláttarreits',advisoryTitle:'Titill',advisoryContentType:'Tegund innihalds',cssClasses:'StÃlsniðsflokkur',charset:'Táknróf',styles:'StÃll',rel:'Relationship',selectAnchor:'Veldu akkeri',anchorName:'Eftir akkerisnafni',anchorId:'Eftir auðkenni einingar',emailAddress:'Netfang',emailSubject:'Efni',emailBody:'Meginmál',noAnchors:'<Engin bókamerki á skrá>',noUrl:'Sláðu inn veffang stiklunnar!',noEmail:'Sláðu inn netfang!'},anchor:{toolbar:'Stofna/breyta kaflamerki',menu:'Eigindi kaflamerkis',title:'Eigindi kaflamerkis',name:'Nafn bókamerkis',errorName:'Sláðu inn nafn bókamerkis!',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Finna og skipta',find:'Leita',replace:'Skipta út',findWhat:'Leita að:',replaceWith:'Skipta út fyrir:',notFoundMsg:'Leitartexti fannst ekki!',matchCase:'Gera greinarmun á¡ há¡- og lágstöfum',matchWord:'Aðeins heil orð',matchCyclic:'Match cyclic',replaceAll:'Skipta út allsstaðar',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tafla',title:'Eigindi töflu',menu:'Eigindi töflu',deleteTable:'Fella töflu',rows:'Raðir',columns:'Dálkar',border:'Breidd ramma',widthPx:'myndeindir',widthPc:'prósent',widthUnit:'width unit',cellSpace:'Bil milli reita',cellPad:'ReitaspássÃa',caption:'Titill',summary:'Ãfram',headers:'Fyrirsagnir',headersNone:'Engar',headersColumn:'Fyrsti dálkur',headersRow:'Fyrsta röð',headersBoth:'Hvort tveggja',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Reitur',insertBefore:'Skjóta inn reiti fyrir aftan',insertAfter:'Skjóta inn reiti fyrir framan',deleteCell:'Fella reit',merge:'Sameina reiti',mergeRight:'Sameina til hægri',mergeDown:'Sameina niður á við',splitHorizontal:'Kljúfa reit lárétt',splitVertical:'Kljúfa reit lóðrétt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Röð',insertBefore:'Skjóta inn röð fyrir ofan',insertAfter:'Skjóta inn röð fyrir neðan',deleteRow:'Eyða röð'},column:{menu:'Dálkur',insertBefore:'Skjóta inn dálki vinstra megin',insertAfter:'Skjóta inn dálki hægra megin',deleteColumn:'Fella dálk'}},button:{title:'Eigindi hnapps',text:'Texti',type:'Gerð',typeBtn:'Hnappur',typeSbm:'Staðfesta',typeRst:'Hreinsa'},checkboxAndRadio:{checkboxTitle:'Eigindi markreits',radioTitle:'Eigindi valhnapps',value:'Gildi',selected:'Valið'},form:{title:'Eigindi innsláttarforms',menu:'Eigindi innsláttarforms',action:'Aðgerð',method:'Aðferð',encoding:'Encoding'},select:{title:'Eigindi lista',selectInfo:'Upplýsingar',opAvail:'Kostir',value:'Gildi',size:'Stærð',lines:'lÃnur',chkMulti:'Leyfa fleiri kosti',opText:'Texti',opValue:'Gildi',btnAdd:'Bæta við',btnModify:'Breyta',btnUp:'Upp',btnDown:'Niður',btnSetValue:'Merkja sem valið',btnDelete:'Eyða'},textarea:{title:'Eigindi textasvæðis',cols:'Dálkar',rows:'LÃnur'},textfield:{title:'Eigindi textareits',name:'Nafn',value:'Gildi',charWidth:'Breidd (leturtákn)',maxChars:'Hámarksfjöldi leturtákna',type:'Gerð',typeText:'Texti',typePass:'Lykilorð'},hidden:{title:'Eigindi falins svæðis',name:'Nafn',value:'Gildi'},image:{title:'Eigindi myndar',titleButton:'Eigindi myndahnapps',menu:'Eigindi myndar',infoTab:'Almennt',btnUpload:'Hlaða upp',upload:'Hlaða upp',alt:'Baklægur texti',lockRatio:'Festa stærðarhlutfall',resetSize:'Reikna stærð',border:'Rammi',hSpace:'Vinstri bil',vSpace:'Hægri bil',alertUrl:'Sláðu inn slóðina að myndinni',linkTab:'Stikla',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Eigindi Flash',propertiesTab:'Properties',title:'Eigindi Flash',chkPlay:'Sjálfvirk spilun',chkLoop:'Endurtekning',chkMenu:'Sýna Flash-valmynd',chkFull:'Allow Fullscreen',scale:'Skali',scaleAll:'Sýna allt',scaleNoBorder:'Ãn ramma',scaleFit:'Fella skala að stærð',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs neðst',alignAbsMiddle:'Abs miðjuð',alignBaseline:'GrunnlÃna',alignTextTop:'Efri brún texta',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Bakgrunnslitur',hSpace:'Vinstri bil',vSpace:'Hægri bil',validateSrc:'Sláðu inn veffang stiklunnar!',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Villuleit',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ekki à orðabókinni',changeTo:'Tillaga',btnIgnore:'Hunsa',btnIgnoreAll:'Hunsa allt',btnReplace:'Skipta',btnReplaceAll:'Skipta öllu',btnUndo:'Til baka',noSuggestions:'- engar tillögur -',progress:'Villuleit à gangi...',noMispell:'Villuleit lokið: Engin villa fannst',noChanges:'Villuleit lokið: Engu orði breytt',oneChange:'Villuleit lokið: Einu orði breytt',manyChanges:'Villuleit lokið: %1 orðum breytt',ieSpellDownload:'Villuleit ekki sett upp.<br>Viltu setja hana upp?'},smiley:{toolbar:'Svipur',title:'Velja svip',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Númeraður listi',bulletedlist:'Punktalisti',indent:'Minnka inndrátt',outdent:'Auka inndrátt',justify:{left:'Vinstrijöfnun',center:'Miðja texta',right:'Hægrijöfnun',block:'Jafna báðum megin'},blockquote:'Inndráttur',clipboard:{title:'LÃma',cutError:'Ãryggisstillingar vafrans þÃns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið à klippa (Ctrl/Cmd+X).',copyError:'Ãryggisstillingar vafrans þÃns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið à afrita (Ctrl/Cmd+C).',pasteMsg:'LÃmdu à svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.',securityMsg:'Vegna öryggisstillinga à vafranum þÃnum fær ritillinn ekki beinan aðgang að klippuborðinu. Ãú verður að lÃma innihaldið aftur inn à þennan glugga.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'LÃma úr Word',title:'LÃma úr Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'LÃma sem ósniðinn texta',title:'LÃma sem ósniðinn texta'},templates:{button:'Sniðmát',title:'Innihaldssniðmát',options:'Template Options',insertOption:'Skipta út raunverulegu innihaldi',selectPromptMsg:'Veldu sniðmát til að opna à ritlinum.<br>(Núverandi innihald vÃkur fyrir þvÃ!):',emptyListMsg:'(Ekkert sniðmát er skilgreint!)'},showBlocks:'Sýna blokkir',stylesCombo:{label:'StÃlflokkur',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'StÃlsnið',panelTitle:'StÃlsnið',tag_p:'Venjulegt letur',tag_pre:'Forsniðið',tag_address:'Vistfang',tag_h1:'Fyrirsögn 1',tag_h2:'Fyrirsögn 2',tag_h3:'Fyrirsögn 3',tag_h4:'Fyrirsögn 4',tag_h5:'Fyrirsögn 5',tag_h6:'Fyrirsögn 6',tag_div:'Venjulegt (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Leturgerð ',voiceLabel:'Font',panelTitle:'Leturgerð '},fontSize:{label:'Leturstærð ',voiceLabel:'Font Size',panelTitle:'Leturstærð '},colorButton:{textColorTitle:'Litur texta',bgColorTitle:'Bakgrunnslitur',panelTitle:'Colors',auto:'Sjálfval',more:'Fleiri liti...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Eigindi skjals',title:'Eigindi skjals',design:'Design',meta:'Lýsigögn',chooseColor:'Choose',other:'<annar>',docTitle:'Titill sÃðu',charset:'Letursett',charsetOther:'Annað letursett',charsetASCII:'ASCII',charsetCE:'Mið-evrópskt',charsetCT:'KÃnverskt, hefðbundið (Big5)',charsetCR:'Kýrilskt',charsetGR:'GrÃskt',charsetJP:'Japanskt',charsetKR:'Kóreskt',charsetTR:'Tyrkneskt',charsetUN:'Unicode (UTF-8)',charsetWE:'Vestur-evrópst',docType:'Flokkur skjalategunda',docTypeOther:'Annar flokkur skjalategunda',xhtmlDec:'Fella inn XHTML lýsingu',bgColor:'Bakgrunnslitur',bgImage:'Slóð bakgrunnsmyndar',bgFixed:'Læstur bakgrunnur',txtColor:'Litur texta',margin:'HliðarspássÃa',marginTop:'Efst',marginLeft:'Vinstri',marginRight:'Hægri',marginBottom:'Neðst',metaKeywords:'Lykilorð efnisorðaskrár (aðgreind með kommum)',metaDescription:'Lýsing skjals',metaAuthor:'Höfundur',metaCopyright:'Höfundarréttur',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/it.js b/lang/it.js new file mode 100644 index 0000000..4c04090 --- /dev/null +++ b/lang/it.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.it={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Codice Sorgente',newPage:'Nuova pagina vuota',save:'Salva',preview:'Anteprima',cut:'Taglia',copy:'Copia',paste:'Incolla',print:'Stampa',underline:'Sottolineato',bold:'Grassetto',italic:'Corsivo',selectAll:'Seleziona tutto',removeFormat:'Elimina formattazione',strike:'Barrato',subscript:'Pedice',superscript:'Apice',horizontalrule:'Inserisci riga orizzontale',pagebreak:'Inserisci interruzione di pagina',pagebreakAlt:'Page Break',unlink:'Elimina collegamento',undo:'Annulla',redo:'Ripristina',common:{browseServer:'Cerca sul server',url:'URL',protocol:'Protocollo',upload:'Carica',uploadSubmit:'Invia al server',image:'Immagine',flash:'Oggetto Flash',form:'Modulo',checkbox:'Checkbox',radio:'Radio Button',textField:'Campo di testo',textarea:'Area di testo',hiddenField:'Campo nascosto',button:'Bottone',select:'Menu di selezione',imageButton:'Bottone immagine',notSet:'<non impostato>',id:'Id',name:'Nome',langDir:'Direzione scrittura',langDirLtr:'Da Sinistra a Destra (LTR)',langDirRtl:'Da Destra a Sinistra (RTL)',langCode:'Codice Lingua',longDescr:'URL descrizione estesa',cssClass:'Nome classe CSS',advisoryTitle:'Titolo',cssStyle:'Stile',ok:'OK',cancel:'Annulla',close:'Close',preview:'Preview',generalTab:'Generale',advancedTab:'Avanzate',validateNumberFailed:'Il valore inserito non è un numero.',confirmNewPage:'Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?',confirmCancel:'Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Larghezza',height:'Altezza',align:'Allineamento',alignLeft:'Sinistra',alignRight:'Destra',alignCenter:'Centrato',alignTop:'In Alto',alignMiddle:'Centrato',alignBottom:'In Basso',invalidHeight:"L'altezza dev'essere un numero",invalidWidth:"La Larghezza dev'essere un numero",invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, non disponibile</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Inserisci carattere speciale',title:'Seleziona carattere speciale',options:'Special Character Options'},link:{toolbar:'Inserisci/Modifica collegamento',other:'<altro>',menu:'Modifica collegamento',title:'Collegamento',info:'Informazioni collegamento',target:'Destinazione',upload:'Carica',advanced:'Avanzate',type:'Tipo di Collegamento',toUrl:'URL',toAnchor:'Ancora nella pagina',toEmail:'E-Mail',targetFrame:'<riquadro>',targetPopup:'<finestra popup>',targetFrameName:'Nome del riquadro di destinazione',targetPopupName:'Nome finestra popup',popupFeatures:'Caratteristiche finestra popup',popupResizable:'Ridimensionabile',popupStatusBar:'Barra di stato',popupLocationBar:'Barra degli indirizzi',popupToolbar:'Barra degli strumenti',popupMenuBar:'Barra del menu',popupFullScreen:'A tutto schermo (IE)',popupScrollBars:'Barre di scorrimento',popupDependent:'Dipendente (Netscape)',popupLeft:'Posizione da sinistra',popupTop:"Posizione dall'alto",id:'Id',langDir:'Direzione scrittura',langDirLTR:'Da Sinistra a Destra (LTR)',langDirRTL:'Da Destra a Sinistra (RTL)',acccessKey:'Scorciatoia<br />da tastiera',name:'Nome',langCode:'Direzione scrittura',tabIndex:'Ordine di tabulazione',advisoryTitle:'Titolo',advisoryContentType:'Tipo della risorsa collegata',cssClasses:'Nome classe CSS',charset:'Set di caretteri della risorsa collegata',styles:'Stile',rel:'Relationship',selectAnchor:'Scegli Ancora',anchorName:'Per Nome',anchorId:'Per id elemento',emailAddress:'Indirizzo E-Mail',emailSubject:'Oggetto del messaggio',emailBody:'Corpo del messaggio',noAnchors:'(Nessuna ancora disponibile nel documento)',noUrl:"Devi inserire l'URL del collegamento",noEmail:"Devi inserire un'indirizzo e-mail"},anchor:{toolbar:'Inserisci/Modifica Ancora',menu:'Proprietà ancora',title:'Proprietà ancora',name:'Nome ancora',errorName:"Inserici il nome dell'ancora",remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Cerca e Sostituisci',find:'Trova',replace:'Sostituisci',findWhat:'Trova:',replaceWith:'Sostituisci con:',notFoundMsg:"L'elemento cercato non è stato trovato.",matchCase:'Maiuscole/minuscole',matchWord:'Solo parole intere',matchCyclic:'Ricerca ciclica',replaceAll:'Sostituisci tutto',replaceSuccessMsg:'%1 occorrenza(e) sostituite.'},table:{toolbar:'Tabella',title:'Proprietà tabella',menu:'Proprietà tabella',deleteTable:'Cancella Tabella',rows:'Righe',columns:'Colonne',border:'Dimensione bordo',widthPx:'pixel',widthPc:'percento',widthUnit:'width unit',cellSpace:'Spaziatura celle',cellPad:'Padding celle',caption:'Intestazione',summary:'Indice',headers:'Intestazione',headersNone:'Nessuna',headersColumn:'Prima Colonna',headersRow:'Prima Riga',headersBoth:'Entrambe',invalidRows:"Il numero di righe dev'essere un numero maggiore di 0.",invalidCols:"Il numero di colonne dev'essere un numero maggiore di 0.",invalidBorder:"La dimensione del bordo dev'essere un numero.",invalidWidth:"La larghezza della tabella dev'essere un numero.",invalidHeight:"L'altezza della tabella dev'essere un numero.",invalidCellSpacing:"La spaziatura tra le celle dev'essere un numero.",invalidCellPadding:"Il pagging delle celle dev'essere un numero",cell:{menu:'Cella',insertBefore:'Inserisci Cella Prima',insertAfter:'Inserisci Cella Dopo',deleteCell:'Elimina celle',merge:'Unisce celle',mergeRight:'Unisci a Destra',mergeDown:'Unisci in Basso',splitHorizontal:'Dividi Cella Orizzontalmente',splitVertical:'Dividi Cella Verticalmente',title:'Proprietà della cella',cellType:'Tipo di cella',rowSpan:'Su più righe',colSpan:'Su più colonne',wordWrap:'Ritorno a capo',hAlign:'Allineamento orizzontale',vAlign:'Allineamento verticale',alignBaseline:'Linea Base',bgColor:'Colore di Sfondo',borderColor:'Colore del Bordo',data:'Dati',header:'Intestazione',yes:'Si',no:'No',invalidWidth:"La larghezza della cella dev'essere un numero.",invalidHeight:"L'altezza della cella dev'essere un numero.",invalidRowSpan:"Il numero di righe dev'essere un numero intero.",invalidColSpan:"Il numero di colonne dev'essere un numero intero.",chooseColor:'Choose'},row:{menu:'Riga',insertBefore:'Inserisci Riga Prima',insertAfter:'Inserisci Riga Dopo',deleteRow:'Elimina righe'},column:{menu:'Colonna',insertBefore:'Inserisci Colonna Prima',insertAfter:'Inserisci Colonna Dopo',deleteColumn:'Elimina colonne'}},button:{title:'Proprietà bottone',text:'Testo (Value)',type:'Tipo',typeBtn:'Bottone',typeSbm:'Invio',typeRst:'Annulla'},checkboxAndRadio:{checkboxTitle:'Proprietà checkbox',radioTitle:'Proprietà radio button',value:'Valore',selected:'Selezionato'},form:{title:'Proprietà modulo',menu:'Proprietà modulo',action:'Azione',method:'Metodo',encoding:'Codifica'},select:{title:'Proprietà menu di selezione',selectInfo:'Info',opAvail:'Opzioni disponibili',value:'Valore',size:'Dimensione',lines:'righe',chkMulti:'Permetti selezione multipla',opText:'Testo',opValue:'Valore',btnAdd:'Aggiungi',btnModify:'Modifica',btnUp:'Su',btnDown:'Gi',btnSetValue:'Imposta come predefinito',btnDelete:'Rimuovi'},textarea:{title:'Proprietà area di testo',cols:'Colonne',rows:'Righe'},textfield:{title:'Proprietà campo di testo',name:'Nome',value:'Valore',charWidth:'Larghezza',maxChars:'Numero massimo di caratteri',type:'Tipo',typeText:'Testo',typePass:'Password'},hidden:{title:'Proprietà campo nascosto',name:'Nome',value:'Valore'},image:{title:'Proprietà immagine',titleButton:'Proprietà bottone immagine',menu:'Proprietà immagine',infoTab:'Informazioni immagine',btnUpload:'Invia al server',upload:'Carica',alt:'Testo alternativo',lockRatio:'Blocca rapporto',resetSize:'Reimposta dimensione',border:'Bordo',hSpace:'HSpace',vSpace:'VSpace',alertUrl:"Devi inserire l'URL per l'immagine",linkTab:'Collegamento',button2Img:"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?",img2Button:"Vuoi trasferomare l'immagine selezionata in un bottone immagine?",urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Proprietà Oggetto Flash',propertiesTab:'Proprietà ',title:'Proprietà Oggetto Flash',chkPlay:'Avvio Automatico',chkLoop:'Riavvio automatico',chkMenu:'Abilita Menu di Flash',chkFull:'Permetti la modalità tutto schermo',scale:'Ridimensiona',scaleAll:'Mostra Tutto',scaleNoBorder:'Senza Bordo',scaleFit:'Dimensione Esatta',access:'Accesso Script',accessAlways:'Sempre',accessSameDomain:'Solo stesso dominio',accessNever:'Mai',alignAbsBottom:'In basso assoluto',alignAbsMiddle:'Centrato assoluto',alignBaseline:'Linea base',alignTextTop:'In alto al testo',quality:'Qualità ',qualityBest:'Massima',qualityHigh:'Alta',qualityAutoHigh:'Alta Automatica',qualityMedium:'Intermedia',qualityAutoLow:'Bassa Automatica',qualityLow:'Bassa',windowModeWindow:'Finestra',windowModeOpaque:'Opaca',windowModeTransparent:'Trasparente',windowMode:'Modalità finestra',flashvars:'Variabili per Flash',bgcolor:'Colore sfondo',hSpace:'HSpace',vSpace:'VSpace',validateSrc:"Devi inserire l'URL del collegamento",validateHSpace:"L'HSpace dev'essere un numero.",validateVSpace:"Il VSpace dev'essere un numero."},spellCheck:{toolbar:'Correttore ortografico',title:'Controllo ortografico',notAvailable:'Il servizio non è momentaneamente disponibile.',errorLoading:"Errore nel caricamento dell'host col servizio applicativo: %s.",notInDic:'Non nel dizionario',changeTo:'Cambia in',btnIgnore:'Ignora',btnIgnoreAll:'Ignora tutto',btnReplace:'Cambia',btnReplaceAll:'Cambia tutto',btnUndo:'Annulla',noSuggestions:'- Nessun suggerimento -',progress:'Controllo ortografico in corso',noMispell:'Controllo ortografico completato: nessun errore trovato',noChanges:'Controllo ortografico completato: nessuna parola cambiata',oneChange:'Controllo ortografico completato: 1 parola cambiata',manyChanges:'Controllo ortografico completato: %1 parole cambiate',ieSpellDownload:'Contollo ortografico non installato. Lo vuoi scaricare ora?'},smiley:{toolbar:'Emoticon',title:'Inserisci emoticon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 elemento'},numberedlist:'Elenco numerato',bulletedlist:'Elenco puntato',indent:'Aumenta rientro',outdent:'Riduci rientro',justify:{left:'Allinea a sinistra',center:'Centra',right:'Allinea a destra',block:'Giustifica'},blockquote:'Citazione',clipboard:{title:'Incolla',cutError:'Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).',copyError:'Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).',pasteMsg:"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.",securityMsg:"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.",pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?',toolbar:'Incolla da Word',title:'Incolla da Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Incolla come testo semplice',title:'Incolla come testo semplice'},templates:{button:'Modelli',title:'Contenuto dei modelli',options:'Template Options',insertOption:'Cancella il contenuto corrente',selectPromptMsg:"Seleziona il modello da aprire nell'editor<br />(il contenuto attuale verrà eliminato):",emptyListMsg:'(Nessun modello definito)'},showBlocks:'Visualizza Blocchi',stylesCombo:{label:'Stile',panelTitle:'Formatting Styles',panelTitle1:'Stili per blocchi',panelTitle2:'Stili in linea',panelTitle3:'Stili per oggetti'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normale',tag_pre:'Formattato',tag_address:'Indirizzo',tag_h1:'Titolo 1',tag_h2:'Titolo 2',tag_h3:'Titolo 3',tag_h4:'Titolo 4',tag_h5:'Titolo 5',tag_h6:'Titolo 6',tag_div:'Paragrafo (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Dimensione',voiceLabel:'Dimensione Font',panelTitle:'Dimensione'},colorButton:{textColorTitle:'Colore testo',bgColorTitle:'Colore sfondo',panelTitle:'Colors',auto:'Automatico',more:'Altri colori...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Controllo Ortografico Mentre Scrivi',opera_title:'Not supported by Opera',enable:'Abilita COMS',disable:'Disabilita COMS',about:'About COMS',toggle:'Inverti abilitazione SCOMS',options:'Opzioni',langs:'Lingue',moreSuggestions:'Altri suggerimenti',ignore:'Ignora',ignoreAll:'Ignora tutti',addWord:'Aggiungi Parola',emptyDic:'Il nome del dizionario non può essere vuoto.',optionsTab:'Opzioni',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Lingue',dictionariesTab:'Dizionari',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Per le informazioni sulla licenza si prega di visitare il nostro sito:',copy:'Copyright © $1. Tutti i diritti riservati.'},maximize:'Massimizza',minimize:'Minimize',fakeobjects:{anchor:'Ancora',flash:'Animazione Flash',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Oggetto sconosciuto'},resize:'Trascina per ridimensionare',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Proprietà del Documento',title:'Proprietà del Documento',design:'Design',meta:'Meta Data',chooseColor:'Choose',other:'<altro>',docTitle:'Titolo pagina',charset:'Set di caretteri',charsetOther:'Altro set di caretteri',charsetASCII:'ASCII',charsetCE:'Europa Centrale',charsetCT:'Cinese Tradizionale (Big5)',charsetCR:'Cirillico',charsetGR:'Greco',charsetJP:'Giapponese',charsetKR:'Coreano',charsetTR:'Turco',charsetUN:'Unicode (UTF-8)',charsetWE:'Europa Occidentale',docType:'Intestazione DocType',docTypeOther:'Altra intestazione DocType',xhtmlDec:'Includi dichiarazione XHTML',bgColor:'Colore di sfondo',bgImage:'Immagine di sfondo',bgFixed:'Sfondo fissato',txtColor:'Colore testo',margin:'Margini',marginTop:'In Alto',marginLeft:'A Sinistra',marginRight:'A Destra',marginBottom:'In Basso',metaKeywords:'Chiavi di indicizzazione documento (separate da virgola)',metaDescription:'Descrizione documento',metaAuthor:'Autore',metaCopyright:'Copyright',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/ja.js b/lang/ja.js new file mode 100644 index 0000000..df8d33c --- /dev/null +++ b/lang/ja.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.ja={dir:'ltr',editorTitle:'ãªããããã¹ãã¨ãã£ã¿, %1, ãã«ã㯠ALT 0 ãæ¼ãã¦ãã ãã',toolbars:'Editor toolbars',editor:'ãªããããã¹ãã¨ãã£ã¿',source:'ã½ã¼ã¹',newPage:'æ°ãããã¼ã¸',save:'ä¿å',preview:'ãã¬ãã¥ã¼',cut:'åãåã',copy:'ã³ãã¼',paste:'è²¼ãä»ã',print:'å°å·',underline:'ä¸ç·',bold:'太å',italic:'æä½',selectAll:'ãã¹ã¦é¸æ',removeFormat:'ãã©ã¼ãããåé¤',strike:'æã¡æ¶ãç·',subscript:'æ·»ãå',superscript:'ä¸ä»ãæå',horizontalrule:'横罫ç·',pagebreak:'æ¹ãã¼ã¸æ¿å ¥',pagebreakAlt:'Page Break',unlink:'ãªã³ã¯åé¤',undo:'å ã«æ»ã',redo:'ããç´ã',common:{browseServer:'ãµã¼ãã¼ãã©ã¦ã¶ã¼',url:'URL',protocol:'ãããã³ã«',upload:'ã¢ãããã¼ã',uploadSubmit:'ãµã¼ãã¼ã«éä¿¡',image:'ã¤ã¡ã¼ã¸',flash:'Flash',form:'ãã©ã¼ã ',checkbox:'ãã§ãã¯ããã¯ã¹',radio:'ã©ã¸ãªãã¿ã³',textField:'ï¼è¡ããã¹ã',textarea:'ããã¹ãã¨ãªã¢',hiddenField:'ä¸å¯è¦ãã£ã¼ã«ã',button:'ãã¿ã³',select:'é¸æãã£ã¼ã«ã',imageButton:'ç»åãã¿ã³',notSet:'<ãªã>',id:'Id',name:'Nameå±æ§',langDir:'æå表è¨ã®æ¹å',langDirLtr:'å·¦ããå³ (LTR)',langDirRtl:'å³ããå·¦ (RTL)',langCode:'è¨èªã³ã¼ã',longDescr:'longdescå±æ§(é·æ説æ)',cssClass:'ã¹ã¿ã¤ã«ã·ã¼ãã¯ã©ã¹',advisoryTitle:'Titleå±æ§',cssStyle:'ã¹ã¿ã¤ã«ã·ã¼ã',ok:'OK',cancel:'ãã£ã³ã»ã«',close:'éãã',preview:'ãã¬ãã¥ã¼',generalTab:'å ¨è¬',advancedTab:'é«åº¦ãªè¨å®',validateNumberFailed:'å¤ãæ°ã§ã¯ããã¾ãã',confirmNewPage:'å¤æ´å 容ãä¿åããã æ°ãããã¼ã¸ãéãã¦ãããããã§ããããï¼',confirmCancel:'ãªãã·ã§ã³è¨å®ãå¤æ´ãã¾ããããã¤ã¢ãã°ãéãã¦ãããããã§ããããï¼',options:'ãªãã·ã§ã³',target:'ã¿ã¼ã²ãã',targetNew:'æ°ããã¦ã£ã³ã㦠(_空ç½)',targetTop:'æä¸é¨ã¦ã£ã³ã㦠(_ããã)',targetSelf:'åãã¦ã£ã³ã㦠(_åä¸)',targetParent:'親ã¦ã£ã³ã㦠(_親)',langDirLTR:'å·¦ããå³ (LTR)',langDirRTL:'å³ããå·¦ (RTL)',styles:'ã¹ã¿ã¤ã«',cssClasses:'ã¹ã¿ã¤ã«ã·ã¼ãã¯ã©ã¹',width:'å¹ ',height:'é«ã',align:'è¡æã',alignLeft:'å·¦',alignRight:'å³',alignCenter:'ä¸å¤®',alignTop:'ä¸',alignMiddle:'ä¸å¤®',alignBottom:'ä¸',invalidHeight:'é«ãã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidWidth:'å¹ ã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, å©ç¨ä¸å¯è½</span>'},contextmenu:{options:'ã³ã³ããã¹ãã¡ãã¥ã¼ãªãã·ã§ã³'},specialChar:{toolbar:'ç¹æ®æåæ¿å ¥',title:'ç¹æ®æåé¸æ',options:'ç¹æ®æåãªãã·ã§ã³'},link:{toolbar:'ãªã³ã¯æ¿å ¥/ç·¨é',other:'<ãã®ä»ã®>',menu:'ãªã³ã¯ç·¨é',title:'ãã¤ãã¼ãªã³ã¯',info:'ãã¤ãã¼ãªã³ã¯ æ å ±',target:'ã¿ã¼ã²ãã',upload:'ã¢ãããã¼ã',advanced:'é«åº¦ãªè¨å®',type:'ãªã³ã¯ã¿ã¤ã',toUrl:'URL',toAnchor:'ãã®ãã¼ã¸ã®ã¢ã³ã«ã¼',toEmail:'E-Mail',targetFrame:'<ãã¬ã¼ã >',targetPopup:'<ãããã¢ããã¦ã£ã³ãã¦>',targetFrameName:'ç®çã®ãã¬ã¼ã å',targetPopupName:'ãããã¢ããã¦ã£ã³ãã¦å',popupFeatures:'ãããã¢ããã¦ã£ã³ãã¦ç¹å¾´',popupResizable:'ãµã¤ãºå¯å¤',popupStatusBar:'ã¹ãã¼ã¿ã¹ãã¼',popupLocationBar:'ãã±ã¼ã·ã§ã³ãã¼',popupToolbar:'ãã¼ã«ãã¼',popupMenuBar:'ã¡ãã¥ã¼ãã¼',popupFullScreen:'å ¨ç»é¢ã¢ã¼ã(IE)',popupScrollBars:'ã¹ã¯ãã¼ã«ãã¼',popupDependent:'éããã¦ã£ã³ãã¦ã«é£åãã¦éãã (Netscape)',popupLeft:'左端ããã®åº§æ¨ã§æå®',popupTop:'ä¸ç«¯ããã®åº§æ¨ã§æå®',id:'Id',langDir:'æå表è¨ã®æ¹å',langDirLTR:'å·¦ããå³ (LTR)',langDirRTL:'å³ããå·¦ (RTL)',acccessKey:'ã¢ã¯ã»ã¹ãã¼',name:'Nameå±æ§',langCode:'è¨èªã³ã¼ã',tabIndex:'ã¿ãã¤ã³ããã¯ã¹',advisoryTitle:'Titleå±æ§',advisoryContentType:'Content Typeå±æ§',cssClasses:'ã¹ã¿ã¤ã«ã·ã¼ãã¯ã©ã¹',charset:'ãªã³ã¯charsetå±æ§',styles:'ã¹ã¿ã¤ã«ã·ã¼ã',rel:'Relationship',selectAnchor:'ã¢ã³ã«ã¼ãé¸æ',anchorName:'ã¢ã³ã«ã¼å',anchorId:'ã¨ã¬ã¡ã³ãID',emailAddress:'E-Mail ã¢ãã¬ã¹',emailSubject:'件å',emailBody:'æ¬æ',noAnchors:'(ããã¥ã¡ã³ãã«ããã¦å©ç¨å¯è½ãªã¢ã³ã«ã¼ã¯ããã¾ããã)',noUrl:'ãªã³ã¯URLãå ¥åãã¦ãã ããã',noEmail:'ã¡ã¼ã«ã¢ãã¬ã¹ãå ¥åãã¦ãã ããã'},anchor:{toolbar:'ã¢ã³ã«ã¼æ¿å ¥/ç·¨é',menu:'ã¢ã³ã«ã¼ ããããã£',title:'ã¢ã³ã«ã¼ ããããã£',name:'ã¢ã³ã«ã¼å',errorName:'ã¢ã³ã«ã¼åãå¿ ãå ¥åãã¦ãã ããã',remove:'Remove Anchor'},list:{numberedTitle:'段è½çªå· ããããã£',bulletedTitle:'ç®æ¡æ¸ã ããããã£',type:'ã¿ã¤ã',start:'éå§',validateStartNumber:'ãªã¹ãéå§çªå·ã¯æ°å¤ã§å ¥åãã¦ãã ããã',circle:'ç½ä¸¸',disc:'é»ä¸¸',square:'åè§',none:'ãªã',notset:'<ãªã>',armenian:'ã¢ã«ã¡ãã¢æ°å',georgian:'ã°ã«ã¸ã¢æ°å (an, ban, gan, etc.)',lowerRoman:'å°æåãã¼ãæ°å (i, ii, iii, iv, v, etc.)',upperRoman:'大æåãã¼ãæ°å (I, II, III, IV, V, etc.)',lowerAlpha:'å°æåã¢ã«ãã¡ããã (a, b, c, d, e, etc.)',upperAlpha:'大æåã¢ã«ãã¡ããã (A, B, C, D, E, etc.)',lowerGreek:'å°æåã®ãªã·ã£æå (alpha, beta, gamma, etc.)',decimal:'æ°å (1, 2, 3, etc.)',decimalLeadingZero:'ä¸ä½æ¡ã«0ãã¤ããæ°å (01, 02, 03, etc.)'},findAndReplace:{title:'æ¤ç´¢ãã¦ç½®æ',find:'æ¤ç´¢',replace:'ç½®ãæã',findWhat:'æ¤ç´¢ããæåå:',replaceWith:'ç½®æãããæåå:',notFoundMsg:'æå®ãããæååã¯è¦ã¤ããã¾ããã§ããã',matchCase:'大æåã¨å°æåãåºå¥ãã',matchWord:'åèªåä½ã§æ¢ã',matchCyclic:'ä¸å¨ãã',replaceAll:'ãã¹ã¦ç½®æã',replaceSuccessMsg:'%1 åç½®æãã¾ããã'},table:{toolbar:'ãã¼ãã«',title:'ãã¼ãã« ããããã£',menu:'ãã¼ãã« ããããã£',deleteTable:'ãã¼ãã«åé¤',rows:'è¡',columns:'å',border:'ãã¼ãã¼ãµã¤ãº',widthPx:'ãã¯ã»ã«',widthPc:'ãã¼ã»ã³ã',widthUnit:'ã¦ããã',cellSpace:'ã»ã«å ä½ç½',cellPad:'ã»ã«å éé',caption:'ãã£ãã·ã§ã³',summary:'ãã¼ãã«ã®æ¦è¦',headers:'ãã¼ãã«ããã(th)',headersNone:'ãªã',headersColumn:'åãã®åã®ã¿',headersRow:'åãã®è¡ã®ã¿',headersBoth:'両æ¹',invalidRows:'è¡ã¯0ãã大ããªæ°å¤ã§å ¥åãã¦ãã ããã',invalidCols:'åã¯0ãã大ããªæ°å¤ã§å ¥åãã¦ãã ããã',invalidBorder:'ãã¼ãã¼ãµã¤ãºã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidWidth:'å¹ ã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidHeight:'é«ãã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidCellSpacing:'ã»ã«å ä½ç½ã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidCellPadding:'ã»ã«å ééã¯æ°å¤ã§å ¥åãã¦ãã ããã',cell:{menu:'ã»ã«',insertBefore:'ã»ã«ã®åã«æ¿å ¥',insertAfter:'ã»ã«ã®å¾ã«æ¿å ¥',deleteCell:'ã»ã«åé¤',merge:'ã»ã«çµå',mergeRight:'å³ã«çµå',mergeDown:'ä¸ã«çµå',splitHorizontal:'ã»ã«ãæ°´å¹³æ¹ååå²',splitVertical:'ã»ã«ãåç´æ¹åã«åå²',title:'ã»ã«ããããã£',cellType:'ã»ã«ã¿ã¤ã',rowSpan:'ç¸¦å¹ (è¡æ°)',colSpan:'æ¨ªå¹ (åæ°)',wordWrap:'æãè¿ã',hAlign:'ã»ã«æ¨ªã®æ´å',vAlign:'ã»ã«ç¸¦ã®æ´å',alignBaseline:'ãã¼ã¹ã©ã¤ã³',bgColor:'èæ¯è²',borderColor:'ãã¼ãã¼ã«ã©ã¼',data:'ãã¼ãã«ãã¼ã¿(td)',header:'ãã¼ãã«ããã(th)',yes:'Yes',no:'No',invalidWidth:'ã»ã«å¹ ã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidHeight:'ã»ã«é«ãã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidRowSpan:'ç¸¦å¹ (è¡æ°)ã¯æ°å¤ã§å ¥åãã¦ãã ããã',invalidColSpan:'æ¨ªå¹ (åæ°)ã¯æ°å¤ã§å ¥åãã¦ãã ããã',chooseColor:'è²ã®é¸æ'},row:{menu:'è¡',insertBefore:'è¡ã®åã«æ¿å ¥',insertAfter:'è¡ã®å¾ã«æ¿å ¥',deleteRow:'è¡åé¤'},column:{menu:'ã«ã©ã ',insertBefore:'ã«ã©ã ã®åã«æ¿å ¥',insertAfter:'ã«ã©ã ã®å¾ã«æ¿å ¥',deleteColumn:'ååé¤'}},button:{title:'ãã¿ã³ ããããã£',text:'ããã¹ã (å¤)',type:'ã¿ã¤ã',typeBtn:'ãã¿ã³',typeSbm:'éä¿¡',typeRst:'ãªã»ãã'},checkboxAndRadio:{checkboxTitle:'ãã§ãã¯ããã¯ã¹ ããããã£',radioTitle:'ã©ã¸ãªãã¿ã³ ããããã£',value:'å¤',selected:'é¸ææ¸ã¿'},form:{title:'ãã©ã¼ã ããããã£',menu:'ãã©ã¼ã ããããã£',action:'ã¢ã¯ã·ã§ã³',method:'ã¡ã½ãã',encoding:'ã¨ã³ã³ã¼ãã£ã³ã°'},select:{title:'é¸æãã£ã¼ã«ã ããããã£',selectInfo:'æ å ±',opAvail:'å©ç¨å¯è½ãªãªãã·ã§ã³',value:'é¸æé ç®å¤',size:'ãµã¤ãº',lines:'è¡',chkMulti:'è¤æ°é ç®é¸æã許å¯',opText:'é¸æé ç®å',opValue:'å¤',btnAdd:'追å ',btnModify:'ç·¨é',btnUp:'ä¸ã¸',btnDown:'ä¸ã¸',btnSetValue:'é¸æããå¤ãè¨å®',btnDelete:'åé¤'},textarea:{title:'ããã¹ãã¨ãªã¢ ããããã£',cols:'å',rows:'è¡'},textfield:{title:'ï¼è¡ããã¹ã ããããã£',name:'åå',value:'å¤',charWidth:'ãµã¤ãº',maxChars:'æ大é·',type:'ã¿ã¤ã',typeText:'ããã¹ã',typePass:'ãã¹ã¯ã¼ãå ¥å'},hidden:{title:'ä¸å¯è¦ãã£ã¼ã«ã ããããã£',name:'åå',value:'å¤'},image:{title:'ã¤ã¡ã¼ã¸ ããããã£',titleButton:'ç»åãã¿ã³ ããããã£',menu:'ã¤ã¡ã¼ã¸ ããããã£',infoTab:'ã¤ã¡ã¼ã¸ æ å ±',btnUpload:'ãµã¼ãã¼ã«éä¿¡',upload:'ã¢ãããã¼ã',alt:'代æ¿ããã¹ã',lockRatio:'ããã¯æ¯ç',resetSize:'ãµã¤ãºãªã»ãã',border:'ãã¼ãã¼',hSpace:'横éé',vSpace:'縦éé',alertUrl:'ã¤ã¡ã¼ã¸ã®URLãå ¥åãã¦ãã ããã',linkTab:'ãªã³ã¯',button2Img:'é¸æãããã¿ã³ãç»åã«ç½®ãæãã¾ããï¼',img2Button:'é¸æããç»åããã¿ã³ã«ç½®ãæãã¾ããï¼',urlMissing:'ã¤ã¡ã¼ã¸ã®URLãå ¥åãã¦ãã ããã',validateBorder:'ãã¼ãã¼ã¯æ°å¤ã§å ¥åãã¦ãã ããã',validateHSpace:'横ééã¯æ°å¤ã§å ¥åãã¦ãã ããã',validateVSpace:'縦ééã¯æ°å¤ã§å ¥åãã¦ãã ããã'},flash:{properties:'Flash ããããã£',propertiesTab:'ããããã£',title:'Flash ããããã£',chkPlay:'åç',chkLoop:'ã«ã¼ãåç',chkMenu:'Flashã¡ãã¥ã¼å¯è½',chkFull:'ãã«ã¹ã¯ãªã¼ã³è¨±å¯',scale:'æ¡å¤§ç¸®å°è¨å®',scaleAll:'ãã¹ã¦è¡¨ç¤º',scaleNoBorder:'å¤ãè¦ããªãæ§ã«æ¡å¤§',scaleFit:'ä¸ä¸å·¦å³ã«ãã£ãã',access:'ã¹ããªã¯ãã¢ã¯ã»ã¹(AllowScriptAccess)',accessAlways:'ãã¹ã¦ã®å ´åã«éä¿¡å¯è½(Always)',accessSameDomain:'åä¸ãã¡ã¤ã³ã®ã¿ã«éä¿¡å¯è½(Same domain)',accessNever:'ãã¹ã¦ã®å ´åã«éä¿¡ä¸å¯è½(Never)',alignAbsBottom:'ä¸é¨(絶対ç)',alignAbsMiddle:'ä¸å¤®(絶対ç)',alignBaseline:'ãã¼ã¹ã©ã¤ã³',alignTextTop:'ããã¹ãä¸é¨',quality:'ç»è³ª',qualityBest:'å質åªå ',qualityHigh:'é«',qualityAutoHigh:'èªå/é«',qualityMedium:'ä¸',qualityAutoLow:'èªå/ä½',qualityLow:'ä½',windowModeWindow:'æ¨æº',windowModeOpaque:'èæ¯ãä¸éæè¨å®',windowModeTransparent:'èæ¯ãééè¨å®',windowMode:'ã¦ã£ã³ãã¦ã¢ã¼ã',flashvars:'ãã©ãã·ã¥ã«æ¸¡ãå¤æ°(FlashVars)',bgcolor:'èæ¯è²',hSpace:'横éé',vSpace:'縦éé',validateSrc:'ãªã³ã¯URLãå ¥åãã¦ãã ããã',validateHSpace:'横ééã¯æ°å¤ã§å ¥åãã¦ãã ããã',validateVSpace:'縦ééã¯æ°å¤ã§å ¥åãã¦ãã ããã'},spellCheck:{toolbar:'ã¹ãã«ãã§ãã¯',title:'ã¹ãã«ãã§ãã¯',notAvailable:'ç³ã訳ããã¾ãããç¾å¨ãµã¼ãã¹ãå©ç¨ãããã¨ãã§ãã¾ãã',errorLoading:'ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¹ãã¹ãèªè¾¼ã¿ã¨ã©ã¼: %s.',notInDic:'è¾æ¸ã«ããã¾ãã',changeTo:'å¤æ´',btnIgnore:'ç¡è¦',btnIgnoreAll:'ãã¹ã¦ç¡è¦',btnReplace:'ç½®æ',btnReplaceAll:'ãã¹ã¦ç½®æ',btnUndo:'ããç´ã',noSuggestions:'- 該å½ãªã -',progress:'ã¹ãã«ãã§ãã¯å¦çä¸...',noMispell:'ã¹ãã«ãã§ãã¯å®äº: ã¹ãã«ã®èª¤ãã¯ããã¾ããã§ãã',noChanges:'ã¹ãã«ãã§ãã¯å®äº: èªå¥ã¯å¤æ´ããã¾ããã§ãã',oneChange:'ã¹ãã«ãã§ãã¯å®äº: ï¼èªå¥å¤æ´ããã¾ãã',manyChanges:'ã¹ãã«ãã§ãã¯å®äº: %1 èªå¥å¤æ´ããã¾ãã',ieSpellDownload:'ã¹ãã«ãã§ãã«ã¼ãã¤ã³ã¹ãã¼ã«ããã¦ãã¾ãããä»ãããã¦ã³ãã¼ããã¾ãã?'},smiley:{toolbar:'çµµæå',title:'é¡æåæ¿å ¥',options:'çµµæåãªãã·ã§ã³'},elementsPath:{eleLabel:'ã¨ã¬ã¡ã³ããã¹',eleTitle:'%1 ã¨ã¬ã¡ã³ã'},numberedlist:'段è½çªå·',bulletedlist:'ç®æ¡æ¸ã',indent:'ã¤ã³ãã³ã',outdent:'ã¤ã³ãã³ã解é¤',justify:{left:'å·¦æã',center:'ä¸å¤®æã',right:'å³æã',block:'両端æã'},blockquote:'ãããã¯å¼ç¨',clipboard:{title:'è²¼ãä»ã',cutError:'ãã©ã¦ã¶ã¼ã®ã»ãã¥ãªãã£è¨å®ã«ããã¨ãã£ã¿ã®åãåãæä½ãèªåã§å®è¡ãããã¨ãã§ãã¾ãããå®è¡ããã«ã¯æåã§ãã¼ãã¼ãã®(Ctrl/Cmd+X)ã使ç¨ãã¦ãã ããã',copyError:'ãã©ã¦ã¶ã¼ã®ã»ãã¥ãªãã£è¨å®ã«ããã¨ãã£ã¿ã®ã³ãã¼æä½ãèªåã§å®è¡ãããã¨ãã§ãã¾ãããå®è¡ããã«ã¯æåã§ãã¼ãã¼ãã®(Ctrl/Cmd+C)ã使ç¨ãã¦ãã ããã',pasteMsg:'ãã¼ãã¼ã(<STRONG>Ctrl/Cmd+V</STRONG>)ã使ç¨ãã¦ã次ã®å ¥åã¨ãªã¢å ã§è²¼ã£ã¦ã<STRONG>OK</STRONG>ãæ¼ãã¦ãã ããã',securityMsg:'ãã©ã¦ã¶ã®ã»ãã¥ãªãã£è¨å®ã«ãããã¨ãã£ã¿ã¯ã¯ãªãããã¼ãã»ãã¼ã¿ã«ç´æ¥ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ããããã®ã¦ã£ã³ãã¦ã¯è²¼ãä»ãæä½ãè¡ã度ã«è¡¨ç¤ºããã¾ãã',pasteArea:'è²¼ãä»ãå ´æ'},pastefromword:{confirmCleanup:'è²¼ãä»ããè¡ãããã¹ãã¯ãã¯ã¼ãæç« ããã³ãã¼ããããã¨ãã¦ãã¾ããè²¼ãä»ããåã«ã¯ãªã¼ãã³ã°ãè¡ãã¾ããï¼',toolbar:'ã¯ã¼ãæç« ããè²¼ãä»ã',title:'ã¯ã¼ãæç« ããè²¼ãä»ã',error:'å é¨ã¨ã©ã¼ã«ããè²¼ãä»ãããã¼ã¿ãã¯ãªã¢ã§ãã¾ããã§ãã'},pasteText:{button:'ãã¬ã¼ã³ããã¹ãè²¼ãä»ã',title:'ãã¬ã¼ã³ããã¹ãè²¼ãä»ã'},templates:{button:'ãã³ãã¬ã¼ã(éå½¢)',title:'ãã³ãã¬ã¼ãå 容',options:'ãã³ãã¬ã¼ããªãã·ã§ã³',insertOption:'ç¾å¨ã®ã¨ãã£ã¿ã®å 容ã¨ç½®æãããã¾ã',selectPromptMsg:'ã¨ãã£ã¿ã¼ã§ä½¿ç¨ãããã³ãã¬ã¼ããé¸æãã¦ãã ããã<br>(ç¾å¨ã®ã¨ãã£ã¿ã®å 容ã¯å¤±ããã¾ã):',emptyListMsg:'(ãã³ãã¬ã¼ããå®ç¾©ããã¦ãã¾ãã)'},showBlocks:'ãããã¯è¡¨ç¤º',stylesCombo:{label:'ã¹ã¿ã¤ã«',panelTitle:'ã¹ã¿ã¤ã«',panelTitle1:'ãããã¯ã¹ã¿ã¤ã«',panelTitle2:'ã¤ã³ã©ã¤ã³ã¹ã¿ã¤ã«',panelTitle3:'ãªãã¸ã§ã¯ãã¹ã¿ã¤ã«'},format:{label:'ãã©ã¼ããã',panelTitle:'ãã©ã¼ããã',tag_p:'æ¨æº',tag_pre:'æ¸å¼ä»ã',tag_address:'ã¢ãã¬ã¹',tag_h1:'è¦åºã 1',tag_h2:'è¦åºã 2',tag_h3:'è¦åºã 3',tag_h4:'è¦åºã 4',tag_h5:'è¦åºã 5',tag_h6:'è¦åºã 6',tag_div:'æ¨æº (DIV)'},div:{title:'Divã³ã³ãã',toolbar:'Divã³ã³ãã',cssClassInputLabel:'ã¹ã¿ã¤ã«ã·ã¼ãã¯ã©ã¹',styleSelectLabel:'ã¹ã¿ã¤ã«',IdInputLabel:'Id',languageCodeInputLabel:' è¨èªã³ã¼ã',inlineStyleInputLabel:'ã¤ã³ã©ã¤ã³ã¹ã¿ã¤ã«',advisoryTitleInputLabel:'Titleå±æ§',langDirLabel:'æå表è¨ã®æ¹å',langDirLTRLabel:'å·¦ããå³ (LTR)',langDirRTLLabel:'å³ããå·¦ (RTL)',edit:'Divã³ã³ãã ç·¨é',remove:'Divã³ã³ãã åé¤'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ãã©ã³ã',voiceLabel:'ãã©ã³ã',panelTitle:'ãã©ã³ã'},fontSize:{label:'ãµã¤ãº',voiceLabel:'ãã©ã³ããµã¤ãº',panelTitle:'ãµã¤ãº'},colorButton:{textColorTitle:'ããã¹ãè²',bgColorTitle:'èæ¯è²',panelTitle:'è²',auto:'èªå',more:'ãã®ä»ã®è²...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'ã¹ãã«ãã§ãã¯è¨å®(SCAYT)',opera_title:'Operaã§ã¯ãµãã¼ãããã¾ãã',enable:'SCAYTæå¹',disable:'SCAYTç¡å¹',about:'SCAYTï¾ï¾ï½°ï½¼ï¾ï½®ï¾',toggle:'SCAYTåæ¿',options:'ãªãã·ã§ã³',langs:'è¨èª',moreSuggestions:'ä»ã®åè£',ignore:'ç¡è¦',ignoreAll:'ãã¹ã¦ç¡è¦',addWord:'èªå¥è¿½å ',emptyDic:'è¾æ¸åã¯å¿ ãå ¥åãã¦ãã ãã',optionsTab:'ãªãã·ã§ã³',allCaps:'å ¨ã¦å¤§æåã®åèªãç¡è¦',ignoreDomainNames:'ãã¡ã¤ã³åãç¡è¦',mixedCase:'大æåå°æåæ··å¨ã®åèªãç¡è¦',mixedWithDigits:'æ°åä»ãåèªãç¡è¦',languagesTab:'è¨èª',dictionariesTab:'è¾æ¸',dic_field_name:'è¾æ¸å',dic_create:'ç»é²',dic_restore:'å ã«æ»ã',dic_delete:'åé¤',dic_rename:'ååå¤æ´',dic_info:'å§ãã¦ã¼ã¶ã¼ãã£ã¬ã¯ããªã¯ãCookieã«ä¿åããã¾ããä½ã Cookie ã¯ãµã¤ãºã«å¶éãããã¾ããã¦ã¼ã¶ã¼ãã£ã¬ã¯ããªãCookieã«ä¿åã§ããªããµã¤ãºã«å°éããã¨ãã£ã¬ã¯ããªã¯ãµã¼ãã¼ä¸ã«ä¿åããã¾ããå人ã®ãã£ã¬ã¯ããªããµã¼ãã¼ä¸ã«ä¿åããã«ã¯ããã£ã¬ã¯ããªåãæ示ããå¿ è¦ãããã¾ããããæ¢ã«ä¿åããããã£ã¬ã¯ããªãããå ´åããã®ååãå ¥åããå ã«æ»ããã¿ã³ãæ¼ãã¦ãã ããã',aboutTab:'ãã¼ã¸ã§ã³æ å ±'},about:{title:'CKEditorãã¼ã¸ã§ã³æ å ±',dlgTitle:'CKEditorãã¼ã¸ã§ã³æ å ±',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'ã©ã¤ã»ã³ã¹æ å ±ã®è©³ç´°ã¯ã¦ã§ããµã¤ãã«ã¦ç¢ºèªãã¦ãã ãã:',copy:'Copyright © $1. All rights reserved.'},maximize:'æ大å',minimize:'æå°å',fakeobjects:{anchor:'ã¢ã³ã«ã¼',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'ãã©ãã°ãã¦ãªãµã¤ãº',colordialog:{title:'è²é¸æ',options:'ã«ã©ã¼ãªãã·ã§ã³',highlight:'ãã¤ã©ã¤ã',selected:'é¸æãããè²',clear:'ã¯ãªã¢'},toolbarCollapse:'ãã¼ã«ãã¼ãéãã',toolbarExpand:'ãã¼ã«ãã¼ãéã',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'ããã¹ãã®åã : å·¦ããå³ã¸',rtl:'ããã¹ãã®åã : å³ããå·¦ã¸'},docprops:{label:'ææ¸ ããããã£',title:'ææ¸ ããããã£',design:'Design',meta:'ã¡ã¿ãã¼ã¿',chooseColor:'è²ã®é¸æ',other:'<ãã®ä»ã®>',docTitle:'ãã¼ã¸ã¿ã¤ãã«',charset:'æåã»ãã符å·å',charsetOther:'ä»ã®æåã»ãã符å·å',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'ææ¸ã¿ã¤ããããã¼',docTypeOther:'ãã®ä»ææ¸ã¿ã¤ããããã¼',xhtmlDec:'XHTML宣è¨ãã¤ã³ã¯ã«ã¼ã',bgColor:'èæ¯è²',bgImage:'èæ¯ç»å URL',bgFixed:'ã¹ã¯ãã¼ã«ããªãèæ¯',txtColor:'ããã¹ãè²',margin:'ãã¼ã¸ã»ãã¼ã¸ã³',marginTop:'ä¸é¨',marginLeft:'å·¦',marginRight:'å³',marginBottom:'ä¸é¨',metaKeywords:'ææ¸ã®ãã¼ã¯ã¼ã(ã«ã³ãåºåã)',metaDescription:'ææ¸ã®æ¦è¦',metaAuthor:'ææ¸ã®ä½è ',metaCopyright:'ææ¸ã®èä½æ¨©',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/ka.js b/lang/ka.js new file mode 100644 index 0000000..5929922 --- /dev/null +++ b/lang/ka.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.ka={dir:'ltr',editorTitle:'á¢áá¥á¡á¢áá¡ á áááá¥á¢áá á, %1, áááááá áá ALT 0-á¡ ááá®ááá áááá¡ ááá¡áá¦áááá.',toolbars:'Editor toolbars',editor:'á¢áá¥á¡á¢áá¡ á áááá¥á¢áá á',source:'áááááá',newPage:'áá®ááá áááá áá',save:'á©áá¬áá á',preview:'ááááá®áááá',cut:'ááááá á',copy:'áá¡áá',paste:'á©áá¡áá',print:'áááááá',underline:'ááá®ááá£áá',bold:'áá¡á®áááá',italic:'ááá®á ááá',selectAll:'á§ááááá¤á áá¡ ááááá¨ááá',removeFormat:'á¤áá ááá¢áá áááá¡ ááá®á¡áá',strike:'ááááá®ááá£áá',subscript:'ááááá¥á¡á',superscript:'á®áá áá¡á®á',horizontalrule:'á°áá ááááá¢ááá£á á á®áááá¡ á©áá¡áá',pagebreak:'áááá ááá¡ á¬á§ááá¢á ááááááá¡áááá¡',pagebreakAlt:'áááá ááá¡ á¬á§ááá¢á',unlink:'ááá£ááá¡ ááá®á¡áá',undo:'ááá£á¥áááá',redo:'áááááá ááá',common:{browseServer:'á¡áá ááá áá ááááááááá ááá',url:'URL',protocol:'áá áá¢ááááá',upload:'áá¢ááá ááá',uploadSubmit:'á¡áá ááá áá áááááááá',image:'á¡á£á ááá',flash:'Flash',form:'á¤áá áá',checkbox:'ááááá¨áááá¡ á¦ááááá',radio:'áááá á©áááá¡ á¦ááááá',textField:'á¢áá¥á¡á¢á£á á áááá',textarea:'á¢áá¥á¡á¢á£á á áá á',hiddenField:'áááá£áá áááá',button:'á¦ááááá',select:'áá á©áááá¡ áááá',imageButton:'á¡á£á áááááá á¦ááááá',notSet:'<áá áá¤áá á>',id:'Id',name:'á¡áá®ááá',langDir:'áááá¡ ááááá áá£áááá',langDirLtr:'ááá áªá®ááááá ááá á¯áááá (LTR)',langDirRtl:'ááá á¯áááááá ááá áªá®ááá (RTL)',langCode:'áááá¡ áááá',longDescr:'áááá áá¦á¬áá áá¡ URL',cssClass:'CSS áááá¡á',advisoryTitle:'á¡áááá£á á',cssStyle:'CSS á¡á¢ááá',ok:'áááá®',cancel:'ááá£á¥áááá',close:'ááá®á£á áá',preview:'ááááá®áááá',generalTab:'ááá¤áá áááªáá',advancedTab:'ááá¤áá ááááá£áá',validateNumberFailed:'áá¡ áááá¨ááááááá áá áá á ááªá®áá.',confirmNewPage:'áá áááá£áááá¢á¨á á§áááá á©áá£á¬áá ááá áªááááááá áááááá áááá. ááá á¬áá£áááá£áá á®áá á á áá áá®ááá áááá ááá¡ á©áá¢ááá ááá áááááá?',confirmCancel:'áááááá áá ááá áááá¢á á á¨ááªáááááá, ááá á¬áá£áááá£ááá á®áá á á áá á¤ááá¯á áá¡ ááá®á£á áá áá¡á£á á?',options:'ááá áááá¢á ááá',target:'ááá®á¡ááá¡ áááááá',targetNew:'áá®ááá á¤ááá¯áá á (_blank)',targetTop:'áááá á¤ááá¯áá á (_top)',targetSelf:'ááááá á¤ááá¯áá á (_self)',targetParent:'áá¨ááááá á¤ááá¯áá á (_parent)',langDirLTR:'ááá áªá®ááááá ááá á¯áááá (LTR)',langDirRTL:'ááá á¯áááááá ááá áªá®ááá (RTL)',styles:'á¡á¢ááá',cssClasses:'CSS áááá¡á',width:'á¡ááááá',height:'á¡áááá¦áá',align:'á¡á¬áá ááá',alignLeft:'ááá áªá®ááá',alignRight:'ááá á¯áááá',alignCenter:'á¨á£á',alignTop:'áááááá',alignMiddle:'á¨á£á',alignBottom:'á¥áááááá',invalidHeight:'á¡áááá¦áá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',invalidWidth:'á¡ááááá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, ááá£á¬áááááááá</span>'},contextmenu:{options:'áááá¢áá¥á¡á¢á£á á ááááá£á¡ ááá áááá¢á ááá'},specialChar:{toolbar:'á¡áááªáááá£á á á¡ááááááá¡ á©áá¡áá',title:'á¡áááªáááá£á á á¡ááááááá¡ áá á©ááá',options:'á¡áááªáááá£á á á¡ááááááá¡ ááá áááá¢á ááá'},link:{toolbar:'ááá£áá',other:'<á¡á®áá>',menu:'ááá£ááá¡ á áááá¥á¢áá ááá',title:'ááá£áá',info:'ááá£ááá¡ ááá¤áá áááªáá',target:'ááá®á¡ááá¡ áááááá',upload:'áá¥áá©áá',advanced:'ááá¬áá áááááá',type:'ááá£ááá¡ á¢ááá',toUrl:'URL',toAnchor:'ááá£áá á¢áá¥á¡á¢á¨á á¦á£áááá',toEmail:'ááá¤áá¡á¢á',targetFrame:'<frame>',targetPopup:'<popup á¤ááá¯áá á>',targetFrameName:'Frame-áá¡ á¡áá®ááá',targetPopupName:'Popup á¤ááá¯á áá¡ á¡áá®ááá',popupFeatures:'Popup á¤ááá¯á áá¡ ááá áááá¢á ááá',popupResizable:'áªáááááááá ááááá',popupStatusBar:'á¡á¢áá¢á£á¡áá¡ áááá',popupLocationBar:'áááááááªááá¡ áááá',popupToolbar:'á®ááá¡áá¬á§ááá áááá',popupMenuBar:'ááááá£á¡ áááá',popupFullScreen:'ááááá ááá ááá (IE)',popupScrollBars:'ááááá®ááááá¡ áááááá',popupDependent:'áááááááááá£áá (Netscape)',popupLeft:'ááá áªá®ááá áááááªáá',popupTop:'áááá áááááªáá',id:'Id',langDir:'áááá¡ ááááá áá£áááá',langDirLTR:'ááá áªá®ááááá ááá á¯áááá (LTR)',langDirRTL:'ááá á¯áááááá ááá áªá®ááá (RTL)',acccessKey:'á¬áááááá¡ á¦ááááá',name:'á¡áá®ááá',langCode:'áááá¡ áááá',tabIndex:'Tab-áá¡ ááááá¥á¡á',advisoryTitle:'á¡áááá£á á',advisoryContentType:'á¨áááááá¡áá¡ á¢ááá',cssClasses:'CSS áááá¡á',charset:'ááááá ááá',styles:'CSS á¡á¢ááá',rel:'áááá¨áá á',selectAnchor:'ááá á©ááá á¦á£áá',anchorName:'á¦á£ááá¡ á¡áá®áááá',anchorId:'ááááááá¢áá¡ Id-á',emailAddress:'ááá¤áá¡á¢áá¡ ááá¡áááá áááá',emailSubject:'á¬áá áááá¡ á¡áááá£á á',emailBody:'á¬áá áááá¡ á¢áá¥á¡á¢á',noAnchors:'(áá áááá£áááá¢á¨á á¦á£áá áá áá)',noUrl:'ááá áá¤áá ááá£ááá¡ URL',noEmail:'ááá áá¤áá ááá¤áá¡á¢áá¡ ááá¡áááá áá'},anchor:{toolbar:'á¦á£áá',menu:'á¦á£ááá¡ á áááá¥á¢áá ááá',title:'á¦á£ááá¡ ááá áááá¢á ááá',name:'á¦á£áá£á¡ á¡áá®ááá',errorName:'ááá áá¤áá á¦á£ááá¡ á¡áá®ááá',remove:'Remove Anchor'},list:{numberedTitle:'áááááááá ááá á¡ááá¡ ááá áááá¢á ááá',bulletedTitle:'á¦áááááááá á¡ááá¡ ááá áááá¢á ááá',type:'á¢ááá',start:'á¡áá¬á§áá¡á',validateStartNumber:'á¡ááá¡ á¡áá¬á§áá¡á ááááá á ááªá®áá á£ááá áá§áá¡.',circle:'á¬á áá¬áá á',disc:'á¬á á',square:'ááááá áá¢á',none:'áá áá¤áá á',notset:'<áá áá¤áá á>',armenian:'á¡ááá®á£á á áááááááá áá',georgian:'á¥áá áá£áá áááááááá áá (áá, ááá, ááá, ..)',lowerRoman:'á áááá£áá áááááááá ááªá ááá¢áá á áªáá¤á áááá (i, ii, iii, iv, v, ..)',upperRoman:'á áááá£áá áááááááá áá áááá áªáá¤á áááá (I, II, III, IV, V, etc.)',lowerAlpha:'ááá¢áá á áááááá£á á áá¡ááááá (a, b, c, d, e, ..)',upperAlpha:'áááá áááááá£á á áá¡ááááá (A, B, C, D, E, ..)',lowerGreek:'ááá¢áá á ááá á«áá£áá áá¡ááááá (ááá¤á, ááá¢á, áááá, ..)',decimal:'á ááªá®ááááá (1, 2, 3, ..)',decimalLeadingZero:'áá£ááá ááá¬á§ááá£áá á ááªá®ááááá (01, 02, 03, ..)'},findAndReplace:{title:'á«áááá áá á¨ááªááá',find:'á«áááá',replace:'á¨ááªááá',findWhat:'á¡áá«áááááá á¢áá¥á¡á¢á:',replaceWith:'á¨ááªáááá¡ á¢áá¥á¡á¢á:',notFoundMsg:'áááááááá£áá á¢áá¥á¡á¢á áá áááá«áááá.',matchCase:'áááá áá ááá¢áá á áá¡ááááá¡ ááááá®áááá',matchWord:'ááááá á¡áá¢á§ááá¡ ááááá®áááá',matchCyclic:'áááá£áááá¢áá¡ ááááá¨á ááá¡áááá¡ ááá á ááááááá ááá¬á§ááá',replaceAll:'á§ááááá¡ á¨ááªááá',replaceSuccessMsg:'%1 ááá«áááááá á¨áááªáááá.'},table:{toolbar:'áªá®á ááá',title:'áªá®á áááá¡ ááá áááá¢á ááá',menu:'áªá®á áááá¡ ááá áááá¢á ááá',deleteTable:'áªá®á áááá¡ á¬áá¨áá',rows:'á¡á¢á áá¥ááá',columns:'á¡ááá¢á',border:'á©áá á©áá¡ áááá',widthPx:'á¬áá á¢ááá',widthPc:'áá ááªááá¢á',widthUnit:'á¡ááááá áá ááá£áá',cellSpace:'á£á¯á áá¡ á¡ááá áªá (spacing)',cellPad:'á£á¯á áá¡ áááá (padding)',caption:'á¡áááá£á á',summary:'á¨áá¯ááááá',headers:'á¡áááá£á ááá',headersNone:'áá áá¤áá á',headersColumn:'ááá áááá á¡ááá¢á',headersRow:'ááá áááá á¡á¢á áá¥ááá',headersBoth:'áá ááá',invalidRows:'á¡á¢á áá¥áááááá¡ á áááááááá áááááááá á ááªá®áá á£ááá áá§áá¡.',invalidCols:'á¡ááá¢áááá¡ á áááááááá áááááááá á ááªá®áá á£ááá áá§áá¡.',invalidBorder:'á©áá á©áá¡ áááá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',invalidWidth:'áªá®á áááá¡ á¡ááááá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',invalidHeight:'áªá®á áááá¡ á¡áááá¦áá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',invalidCellSpacing:'á£á¯á áá¡ á¡ááá áªá (spacing) á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',invalidCellPadding:'á£á¯á áá¡ áááá (padding) á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',cell:{menu:'á£á¯á á',insertBefore:'á£á¯á áá¡ á©áá¡áá ááááááá',insertAfter:'á£á¯á áá¡ á©áá¡áá ááá á',deleteCell:'á£á¯á áááá¡ á¬áá¨áá',merge:'á£á¯á áááá¡ á¨ááá áááá',mergeRight:'á¨ááá áááá ááá á¯ááááá¡ááá',mergeDown:'á¨ááá áááá á¥ááááááá¡ááá',splitHorizontal:'ááá§áá¤á á°áá ááááá¢ááá£á áá',splitVertical:'ááá§áá¤á ááá á¢ááááá£á áá',title:'á£á¯á áá¡ ááá áááá¢á ááá',cellType:'á£á¯á áá¡ á¢ááá',rowSpan:'á¡á¢á áá¥áááááá¡ ááááááá',colSpan:'á¡ááá¢áááá¡ ááááááá',wordWrap:'á¡á¢á áá¥áááá¡ ááááá¢ááá (Word Wrap)',hAlign:'á°áá ááááá¢ááá£á á á¡á¬áá ááá',vAlign:'ááá á¢ááááá£á á á¡á¬áá ááá',alignBaseline:'á«áá ááááá á®áááá¡ ááá¡á¬áá áá',bgColor:'á¤áááá¡ á¤áá á',borderColor:'á©áá á©áá¡ á¤áá á',data:'áááááªááááá',header:'á¡áááá£á á',yes:'áááá®',no:'áá á',invalidWidth:'á£á¯á áá¡ á¡ááááá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',invalidHeight:'á£á¯á áá¡ á¡áááá¦áá á ááªá®ááá á£ááá áá§áá¡ á¬áá ááááááááá.',invalidRowSpan:'á¡á¢á áá¥áááááá¡ á áááááááá ááááá á ááªá®áá á£ááá áá§áá¡.',invalidColSpan:'á¡ááá¢áááá¡ á áááááááá ááááá á ááªá®áá á£ááá áá§áá¡.',chooseColor:'áá á©ááá'},row:{menu:'á¡á¢á áá¥ááá',insertBefore:'á¡á¢á áá¥áááá¡ á©áááá¢ááá á¬áá',insertAfter:'á¡á¢á áá¥áááá¡ á©áááá¢ááá ááá á',deleteRow:'á¡á¢á áá¥áááááá¡ á¬áá¨áá'},column:{menu:'á¡ááá¢á',insertBefore:'á¡ááá¢áá¡ á©áááá¢ááá á¬áá',insertAfter:'á¡ááá¢áá¡ á©áááá¢ááá ááá á',deleteColumn:'á¡ááá¢áááá¡ á¬áá¨áá'}},button:{title:'á¦áááááá¡ ááá áááá¢á ááá',text:'á¢áá¥á¡á¢á',type:'á¢ááá',typeBtn:'á¦ááááá',typeSbm:'áááááááá',typeRst:'ááá¡á£á¤áááááá'},checkboxAndRadio:{checkboxTitle:'ááááá¨áááá¡ á¦áááááá¡ (Checkbox) ááá áááá¢á ááá',radioTitle:'áá¡áá á©ááá á¦áááááá¡ (Radio) ááá áááá¢á ááá',value:'á¢áá¥á¡á¢á',selected:'áá á©áá£áá'},form:{title:'á¤áá ááá¡ ááá áááá¢á ááá',menu:'á¤áá ááá¡ ááá áááá¢á ááá',action:'á¥áááááá',method:'áááááá',encoding:'ááááá ááá'},select:{title:'áá á©áááá¡ ááááá¡ ááá áááá¢á ááá',selectInfo:'ááá¤áá áááªáá',opAvail:'á¨áá¡áá«áááááá ááá áááá¢ááá',value:'áááá¨ááááááá',size:'áááá',lines:'á®ááááá',chkMulti:'áá áááááááá áá á©áááááá¡ á¡áá¨á£ááááá',opText:'á¢áá¥á¡á¢á',opValue:'áááá¨ááááááá',btnAdd:'ááááá¢ááá',btnModify:'á¨ááªááá',btnUp:'ááááá',btnDown:'á¥ááááá',btnSetValue:'áááá á©áá£á áááá¨ááááááááá ááá§ááááá',btnDelete:'á¬áá¨áá'},textarea:{title:'á¢áá¥á¡á¢á£á á áá áá¡ ááá áááá¢á ááá',cols:'á¡ááá¢ááá',rows:'á¡á¢á áá¥ááááá'},textfield:{title:'á¢áá¥á¡á¢á£á á ááááá¡ ááá áááá¢á ááá',name:'á¡áá®ááá',value:'áááá¨ááááááá',charWidth:'á¡ááááááá¡ áááá',maxChars:'áá¡ááááá¡ ááá¥á¡ááááá£á á ááááááá',type:'á¢ááá',typeText:'á¢áá¥á¡á¢á',typePass:'ááá ááá'},hidden:{title:'áááá£áá ááááá¡ ááá áááá¢á ááá',name:'á¡áá®ááá',value:'áááá¨ááááááá'},image:{title:'á¡á£á áááá¡ ááá áááá¢á ááá',titleButton:'á¡á£á áááááá á¦áááááá¡ ááá áááá¢á ááá',menu:'á¡á£á áááá¡ ááá áááá¢á ááá',infoTab:'á¡á£á áááá¡ ááá¤áá ááªáá',btnUpload:'á¡áá ááá áá¡áááá¡ áááááááá',upload:'áá¢ááá ááá',alt:'á¡ááááªááá á¢áá¥á¡á¢á',lockRatio:'áá áááá áªááá¡ á¨áááá á©á£áááá',resetSize:'ááááá¡ áááá á£áááá',border:'á©áá á©á',hSpace:'á°áá ááááá¢ááá£á á á¡ááá áªá',vSpace:'ááá á¢ááááá£á á á¡ááá áªá',alertUrl:'ááá áá¤áá á¡á£á áááá¡ URL',linkTab:'ááá£áá',button2Img:'áá¡á£á á áá á©áá£áá á¡á£á áááááá á¦áááááá¡ ááááá¥áªááá á©ááá£áááá áá á¦áááááá?',img2Button:'áá¡á£á á áá á©áá£áá á©ááá£áááá ááá á¦áááááá¡ ááááá¥áªááá á¡á£á ááááá á¦áááááá?',urlMissing:'á¡á£á áááá¡ URL áá áá á¨ááá¡ááá£áá.',validateBorder:'á©áá á©á ááááá á ááªá®áá á£ááá áá§áá¡.',validateHSpace:'á°áá ááááá¢ááá£á á á¡ááá áªá ááááá á ááªá®áá á£ááá áá§áá¡.',validateVSpace:'ááá á¢ááááá£á á á¡ááá áªá ááááá á ááªá®áá á£ááá áá§áá¡.'},flash:{properties:'Flash-áá¡ ááá áááá¢á ááá',propertiesTab:'ááá áááá¢á ááá',title:'Flash-áá¡ ááá áááá¢á ááá',chkPlay:'ááá¢á ááá¨áááá',chkLoop:'á©ááªááááá',chkMenu:'Flash-áá¡ ááááá£á¡ ááá¨áááá',chkFull:'ááááá ááá áááá¡ ááá¨áááá',scale:'ááá¡á¨á¢áááá ááá',scaleAll:'á§ááááá¤á áá¡ á©áááááá',scaleNoBorder:'á©áá á©áá¡ ááá áá¨á',scaleFit:'áá£á¡á¢á á©áá¡áá',access:'á¡áá ááá¢áá¡ á¬ááááá',accessAlways:'á§áááááááá¡',accessSameDomain:'ááááá áááááá',accessNever:'áá áá¡áá áá¡',alignAbsBottom:'á©áá á©áá¡ á¥áááááá ááá¬áááá¡ á¡á¬áá ááá á¢áá¥á¡á¢áá¡áááá¡',alignAbsMiddle:'á©áá á©áá¡ á¨á£á ááá¬áááá¡ á¡á¬áá ááá á¢áá¥á¡á¢áá¡áááá¡',alignBaseline:'á¡áááááá¡á á®áááá¡ á¡á¬áá ááá',alignTextTop:'á¢áá¥á¡á¢á ááááááá',quality:'á®áá áá¡á®á',qualityBest:'á¡áá£ááááá¡á',qualityHigh:'ááá¦ááá',qualityAutoHigh:'ááá¦ááá (ááá¢áááá¢á£á á)',qualityMedium:'á¡áá¨á£ááá',qualityAutoLow:'á«ááááá áááááá',qualityLow:'áááááá',windowModeWindow:'á¤ááá¯áá á',windowModeOpaque:'ááá£ááááá áááá',windowModeTransparent:'ááááááá áááá',windowMode:'á¤ááá¯á áá¡ á ááááá',flashvars:'áªááááááá Flash-áá¡áááá¡',bgcolor:'á¤áááá¡ á¤áá á',hSpace:'á°áá áá. á¡ááá áªá',vSpace:'ááá á¢. á¡ááá áªá',validateSrc:'URL áá á£ááá áá§áá¡ áªáá áááá.',validateHSpace:'á°áá ááááá¢ááá£á á á¡ááá áªá áá á£ááá áá§áá¡ áªáá áááá.',validateVSpace:'ááá á¢ááááá£á á á¡ááá áªá áá á£ááá áá§áá¡ áªáá áááá.'},spellCheck:{toolbar:'ááá ááá¬áá á',title:'ááá ááá¬áá á',notAvailable:'á£áááªá áááá, áá¡ á¡áá ááá¡á ááááááá ááá£á¬áááááááá.',errorLoading:'á¡áá ááá¡áá¡ ááááá«áá®áááá¡ á¨ááªáááá: %s.',notInDic:'áá áá ááá¥á¡ááááá¨á',changeTo:'á¨ááªááááá',btnIgnore:'á£áá£áááááá§áá¤á',btnIgnoreAll:'á§ááááá¡ á£áá£áááááá§áá¤á',btnReplace:'á¨ááªááá',btnReplaceAll:'á§ááááá¡ á¨ááªááá',btnUndo:'ááá£á¥áááá',noSuggestions:'- áá áá á¨ááááááááááá -',progress:'áááááááá áááá¡ ááá ááá¬áá áá¡ á¨áááá¬áááá...',noMispell:'ááá ááá¬áá áá¡ á¨áááá¬áááá: á¨ááªáááá áá áááá«áááá',noChanges:'ááá ááá¬áá áá¡ á¨áááá¬áááá: áá áá¤áá á á¨ááªááááá',oneChange:'ááá ááá¬áá áá¡ á¨áááá¬áááá: áá áá á¡áá¢á§áá á¨áááªáááá',manyChanges:'ááá ááá¬áá áá¡ á¨áááá¬áááá: %1 á¡áá¢á§áá á¨áááªáááá',ieSpellDownload:'ááá ááá¬áá áá¡ á¨áááá¬áááá áá áá ááááá¡á¢áááá ááá£áá. á©ááááá¥áá©áá ááá¢áá ááá¢áááá?'},smiley:{toolbar:'á¡ááªááááááá',title:'á¡ááªáááááá¡ á©áá¡áá',options:'á¡ááªáááááá¡ ááá áááá¢á ááá'},elementsPath:{eleLabel:'áááááá¢áá¡ ááá',eleTitle:'%1 ááááááá¢á'},numberedlist:'áááááááá ááá á¡áá',bulletedlist:'á¦áááááá á¡áá',indent:'ááá¢áá á¨áá¬ááá',outdent:'áááááááá á¨áá¬ááá',justify:{left:'ááá áªá®ááá á¡á¬áá ááá',center:'á¨á£áá¨á á¡á¬áá ááá',right:'ááá á¯áááá á¡á¬áá ááá',block:'ááááá¡á¬áá ááá'},blockquote:'áªáá¢áá¢á',clipboard:{title:'á©áá¡áá',cutError:'áá¥áááá áá áá£ááá áá¡ á£á¡áá¤á áá®ááááá¡ ááá áááá¢á ááá áá áá«áááá ááááá áá¡ áááá ááªááá¡ ááá¢áááá¢á£á áá áááá®áá áªááááááá¡ á¡áá¨á£áááááá¡. áááááá§áááá ááááááá¢á£á á áááá¡áááá¡ (Ctrl/Cmd+X).',copyError:'áá¥áááá áá áá£ááá áá¡ á£á¡áá¤á áá®ááááá¡ ááá áááá¢á ááá áá áá«áááá áá¡ááá¡ áááá ááªááá¡ ááá¢áááá¢á£á áá áááá®áá áªááááááá¡ á¡áá¨á£áááááá¡. áááááá§áááá ááááááá¢á£á á áááá¡áááá¡ (Ctrl/Cmd+C).',pasteMsg:'á©áá¡ááá áá áá áá¡ á¨ááááá ááááááá¢á£á áá¡ ááááá§áááááá (<strong>Ctrl/Cmd+V</strong>) áá áááááá áá OK-á¡',securityMsg:'áá¥áááá áá áá£ááá áá¡ á£á¡áá¤á áá®ááááá¡ ááá áááá¢á ááá áá áá«áááá clipboard-áá¡ áááááªáááááá¡ á¬áááááá¡ á£á¤ááááá¡. ááááá á£ááá á©áá¡ááá á¢áá¥á¡á¢á áá á¤ááá¯áá áá¨á.',pasteArea:'á©áá¡ááá¡ áá á'},pastefromword:{confirmCleanup:'á©áá¡áá¡áááá á¢áá¥á¡á¢á ááá ááááá áááááá¢ááááá¡ áááá¡ - áááááá ááá¡á á¬áááá¡á¬áá ááá¬ááááá?',toolbar:'ááá ááááá á©áá¡áá',title:'ááá ááááá á©áá¡áá',error:'á¨ááá á¨ááªááááá¡ áááá ááá ááá®áá á®áá á¢áá¥á¡á¢áá¡ ááá¬ááááá'},pasteText:{button:'áá®áááá á¢áá¥á¡á¢áá¡ á©áá¡áá',title:'áá®áááá á¢áá¥á¡á¢áá¡ á©áá¡áá'},templates:{button:'ááá áááá',title:'ááá áááá',options:'ááá ááááá¡ ááá áááá¢á ááá',insertOption:'áááááááá á á¨áááááá¡áá¡ á¨ááªááá',selectPromptMsg:'ááá á©ááá ááá áá á áááá¥á¢áá áá¡áááá¡',emptyListMsg:'(ááá áá áá áá áááá¡ááá¦áá á£áá)'},showBlocks:'áá ááááá¡ á©áááááá',stylesCombo:{label:'á¡á¢ááááá',panelTitle:'á¤áá ááá¢áá áááá¡ á¡á¢ááááá',panelTitle1:'áá áá¡ á¡á¢ááááá',panelTitle2:'áááááá áá£áá á¡á¢ááááá',panelTitle3:'ááááá¥á¢áá¡ á¡á¢ááááá'},format:{label:'á¤ááá ááá¢áá ááá',panelTitle:'á¤áá ááá¢áá ááá',tag_p:'á©ááá£áááá ááá',tag_pre:'á¤áá ááá¢áá ááá£áá',tag_address:'ááá¡áááá áá',tag_h1:'á¡áááá£á á 1',tag_h2:'á¡áááá£á á 2',tag_h3:'á¡áááá£á á 3',tag_h4:'á¡áááá£á á 4',tag_h5:'á¡áááá£á á 5',tag_h6:'á¡áááá£á á 6',tag_div:'á©ááá£áááá ááá (DIV)'},div:{title:'Div áááá¢ááááá áá¡ á¨áá¥ááá',toolbar:'Div áááá¢ááááá áá¡ á¨áá¥ááá',cssClassInputLabel:'CSS áááá¡ááá',styleSelectLabel:'á¡á¢ááá',IdInputLabel:'Id',languageCodeInputLabel:'áááá¡ áááá',inlineStyleInputLabel:'áááááá áá£áá á¡á¢ááá',advisoryTitleInputLabel:'á¡áááá£á á',langDirLabel:'áááá¡ ááááá áá£áááá',langDirLTRLabel:'ááá áªá®ááááá ááá á¯ááá᪠(LTR)',langDirRTLLabel:'ááá á¯áááááá ááá áªá®ááá (RTL)',edit:'Div-áá¡ á áááá¥á¢áá ááá',remove:'Div-áá¡ á¬áá¨áá'},iframe:{title:'IFrame-áá¡ ááá áááá¢á ááá',toolbar:'IFrame',noUrl:'ááá áá¤áá iframe-áá¡ URL',scrolling:'ááááá®ááááá¡ ááááááá¡ ááá¨áááá',border:'á©áá á©áá¡ ááááá©ááá'},font:{label:'á¤ááá¢á',voiceLabel:'á¤ááá¢á',panelTitle:'á¤ááá¢áá¡ á¡áá®ááá'},fontSize:{label:'áááá',voiceLabel:'á¢áá¥á¡á¢áá¡ áááá',panelTitle:'á¢áá¥á¡á¢áá¡ áááá'},colorButton:{textColorTitle:'á¢áá¥á¡á¢áá¡ á¤áá á',bgColorTitle:'á¤áááá¡ á¤áá á',panelTitle:'á¤áá ááá',auto:'ááá¢áááá¢á£á á',more:'ááá¢á á¤áá á...'},colors:{'000':'á¨ááá',800000:'áá£á¥á á¨ááááá¡á¤áá á','8B4513':'á§áááá¡á¤áá á','2F4F4F':'áááá£á á¯á áááªá áá¡á¤áá á','008080':'á©ááá¥á ááá áá£á á¯á','000080':'áá£á¥á áá£á á¯á','4B0082':'ááá¡ááááá¡á¤áá á',696969:'áá£á¥á áááªá áá¡á¤áá á',B22222:'ááá£á áá¡á¤áá á',A52A2A:'áá£á¥á á§áááá¡á¤áá á',DAA520:'ááá§áááááá','006400':'áá£á¥á áá¬áááá','40E0D0':'áªáá¡á¤áá á','0000CD':'áááááá áá áá£á á¯á',800080:'ááá¡á¤áá á',808080:'áááªá áá¡á¤áá á',F00:'á¬ááááá',FF8C00:'áá£á¥á á¡á¢áá¤áááá¡á¤áá á',FFD700:'áá¥á áá¡á¤áá á','008000':'áá¬áááá','0FF':'á¦áá áªáá¡á¤áá á','00F':'áá£á á¯á',EE82EE:'ááá¡á¤áá á',A9A9A9:'áááªá áááªá áá¡á¤áá á',FFA07A:'á©ááá¥á ááá ááá ááá¡á¤áá á',FFA500:'á¡á¢áá¤áááá¡á¤áá á',FFFF00:'á§áááááá','00FF00':'áá£á á¯á',AFEEEE:'áªáá¡á¤áá á',ADD8E6:'á¦áá áá£á á¯á',DDA0DD:'á¦áá ááá¡á¤áá á',D3D3D3:'á¦áá áááªá áá¡á¤áá á',FFF0F5:'á¦áá ááá ááá¡á¤áá á',FAEBD7:'á¦áá á§áááá¡á¤áá á',FFFFE0:'áááááá á§áááááá',F0FFF0:'á¦áá áá¬áááá',F0FFFF:'á¦áá áªáá¡á¤áá á 2',F0F8FF:'á¦áá áªáá¡á¤áá á 3',E6E6FA:'á¦áá ááá¡á¤áá á 2',FFF:'áááá á'},scayt:{title:'ááá ááá¬áá áá¡ á¨áááá¬áááá áá áá¤áá¡áá¡',opera_title:'áá áá áá®áá ááááá ááá Opera-á¡ áááá ',enable:'SCAYT-áá¡ á©áá ááá',disable:'SCAYT-áá¡ ááááá ááá',about:'SCAYT-áá¡ á¨áá¡áá®áá',toggle:'SCAYT-áá¡ ááááá ááá',options:'ááá áááá¢á ááá',langs:'ááááá',moreSuggestions:'ááá¢á á¨ááááááááááá',ignore:'á£áá£áááááá§áá¤á',ignoreAll:'á§ááááá¡ á£áá£áááááá§áá¤á',addWord:'á¡áá¢á§ááá¡ ááááá¢ááá',emptyDic:'ááá¥á¡áááááá¡ á¡áá¢á§áá áá á£ááá áá§áá¡ áªáá áááá.',optionsTab:'ááá áááá¢á ááá',allCaps:'áááá áá¡ááááá ááá¬áá ááá á¡áá¢á§ááááá¡ á£áá£áááááá§áá¤á',ignoreDomainNames:'áááááá£á á á¡áá®áááááá¡ á£áá£áááááá§áá¤á',mixedCase:'á¨áá áá£áá áá¡áááááá á¡áá¢á§ááááá¡ á£áá£áááááá§áá¤á',mixedWithDigits:'áªáá¤á áááááá á¡áá¢á§ááááá¡ á£áá£áááááá§áá¤á',languagesTab:'ááááá',dictionariesTab:'ááá¥á¡ááááááá',dic_field_name:'ááá¥á¡áááááá¡ á¡áá®ááá',dic_create:'á¨áá¥ááá',dic_restore:'áááá á£áááá',dic_delete:'á¬áá¨áá',dic_rename:'ááááá á¥áááá',dic_info:'áááááááá ááááá áááá®ááá ááááá¡ ááá¥á¡ááááá áááá®ááá Cookie-á¨á. áá£ááªá Cookie á¨ááá¦á£áá£ááá ááááá¨á. á ááªá ááá¥á¡áááááá¡ áááá ááááá áááá á¡áááááá áá¡ á¨ááá«áááá á¨áááááá®áá á©áááá¡ á¡áá ááá áá. á©áááá¡ á¡áá ááá áá ááá¥á¡ááááá¡ á¨áá¡áááá®áá á£ááá ááá£ááááá ááá¡á á¡áá®ááá. áᣠá£áá ááá¥áá ááá¥á¡ááááá, ááá áá¤áá ááá¡á á¡áá®ááá áá áááááá áá "áááá á£ááááá¡" á¦ááááá¡.',aboutTab:'ááá¤áá áááªáá'},about:{title:'CKEditor-áá¡ á¨áá¡áá®áá',dlgTitle:'CKEditor-áá¡ á¨áá¡áá®áá',help:'ááá®ááá áááá¡áááá¡ áá®áááá $1.',userGuide:'CKEditor-áá¡ áááá®ááá ááááá¡ á¡áá®áááá«á¦áááááá',moreInfo:'áááªáááááá¡ ááá¤áá áááªááá¡áááá¡ áá¬áááá á©áááá¡ á¡ááá¢á¡:',copy:'Copyright © $1. á§áááá á£á¤áááá áááªá£ááá.'},maximize:'áááááááá',minimize:'ááááá¢áá ááááá',fakeobjects:{anchor:'á¦á£áá',flash:'Flash ááááááªáá',iframe:'IFrame',hiddenfield:'áááá£áá áááá',unknown:'á£áªáááá ááááá¥á¢á'},resize:'ááá¬áá ááááá¡ á¨áá¡ááªáááááá',colordialog:{title:'á¤áá áá¡ á¨ááªááá',options:'á¤áá áá¡ ááá áááá¢á ááá',highlight:'á©áááááá',selected:'áá á©áá£áá á¤áá á',clear:'ááá¡á£á¤áááááá'},toolbarCollapse:'á®ááá¡áá¬á§ááá ááááá¡ á¨áá¬ááá',toolbarExpand:'á®ááá¡áá¬á§ááá ááááá¡ ááááá¬ááá',toolbarGroups:{document:'áááá£áááá¢á',clipboard:'Clipboard/ááá£á¥áááá',editing:'á áááá¥á¢áá ááá',forms:'á¤áá áááá',basicstyles:'á«áá ááááá á¡á¢ááááá',paragraph:'áááááªá',links:'ááá£áááá',insert:'á©áá¡áá',styles:'á¡á¢ááááá',colors:'á¤áá ááá',tools:'á®ááá¡áá¬á§áááá'},bidi:{ltr:'á¢áá¥á¡á¢áá¡ ááááá áá£áááá ááá áªá®ááááá ááá á¯áááá',rtl:'á¢áá¥á¡á¢áá¡ ááááá áá£áááá ááá á¯áááááá ááá áªá®ááá'},docprops:{label:'áááá£áááá¢áá¡ ááá áááá¢á ááá',title:'áááá£áááá¢áá¡ ááá áááá¢á ááá',design:'ááááááá',meta:'ááá¢áTag-ááá',chooseColor:'áá á©ááá',other:'á¡á®áá...',docTitle:'áááá ááá¡ á¡áááá£á á',charset:'ááááá ááá',charsetOther:'á¡á®áá ááááá ááááá',charsetASCII:'áááá ááá£áá (ASCII)',charsetCE:'áªááá¢á ááá£á ááá ááá£áá',charsetCT:'á¢á ááááªáá£áá á©ááá£á á (Big5)',charsetCR:'ááá ááá£á á',charsetGR:'ááá á«áá£áá',charsetJP:'áááááá£á á',charsetKR:'ááá áá£áá',charsetTR:'áá£á á¥á£áá',charsetUN:'á£áááááá (UTF-8)',charsetWE:'ááá¡ááááá ááá ááá£áá',docType:'áááá£áááá¢áá¡ á¢ááá',docTypeOther:'á¡á®áá á¢áááá¡ áááá£áááá¢á',xhtmlDec:'XHTML áááááá ááªááááá¡ á©áá ááá',bgColor:'á¤áááá¡ á¤áá á',bgImage:'á¤ááá£á á á¡á£á áááá¡ URL',bgFixed:'á£ááá«á áá (á¤áá¥á¡áá ááá£áá) á¤ááá',txtColor:'á¢áá¥á¡á¢áá¡ á¤áá á',margin:'áááá ááá¡ ááááááá',marginTop:'áááá',marginLeft:'ááá áªá®ááá',marginRight:'ááá á¯áááá',marginBottom:'á¥áááá',metaKeywords:'áááá£áááá¢áá¡ á¡áááááá«á á¡áá¢á§áááá (áá«áááá ááááá§áá¤ááá)',metaDescription:'áááá£áááá¢áá¡ áá¦á¬áá á',metaAuthor:'ááá¢áá á',metaCopyright:'Copyright',previewHtml:'<p>áá¡ áá áá¡ <strong>á¡ááªáááá á¢áá¥á¡á¢á</strong>. áá¥ááá <a href="javascript:void(0)">CKEditor</a>-áá á¡áá ááááááá.</p>'}}; diff --git a/lang/km.js b/lang/km.js new file mode 100644 index 0000000..be4189f --- /dev/null +++ b/lang/km.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.km={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'áá¼á',newPage:'ááááááááá¸',save:'ááááá¶áá»á',preview:'áá¾ááá¶ááááá',cut:'áá¶áááá',copy:'á ááááá',paste:'á ááááá¶áá',print:'ááááá»ááá',underline:'áá·áááááá¶áááá¸áááááá¢áááá',bold:'á¢áááááá·ááá',italic:'á¢ááááááááá',selectAll:'áááá¾ááá¾ááá¶ááá¢áá',removeFormat:'áááá áá áá¶ááá áá¶',strike:'áá·áááááá¶áááá¶ááááááá¶áá¢áááá',subscript:'á¢áááááá¼á ááááá',superscript:'á¢áááááá¼á áá¾',horizontalrule:'ááááááááááá¶ááááááá',pagebreak:'áááááá áá¶ááááá¶á áááááá',pagebreakAlt:'Page Break',unlink:'ááááááá¶áá',undo:'áá¶áá¡á¾ááá·á',redo:'áááá¾á¡á¾ááá·á',common:{browseServer:'áá¾á',url:'URL',protocol:'áááá¼áá¼áá¼á',upload:'áá¶ááá',uploadSubmit:'ááááá¼ááá áá¶ááááá¶ááá¸áááááááááá¶',image:'áá¼ááá¶á',flash:'Flash',form:'ááááá',checkbox:'áááá¢áááááá¾ááá¾á',radio:'ááá¼áá»ááááááááá¼á',textField:'áá½ááááááá¢ááááá',textarea:'ááááááááááá¢ááááá',hiddenField:'áá½ááá¶áá',button:'ááá¼áá»á',select:'áá½ááááá¾ááá¾á',imageButton:'ááá¼áá»ááá¼ááá¶á',notSet:'<áá·áááá>',id:'Id',name:'ááááá',langDir:'áá·ááá áá¶áá¶',langDirLtr:'áá¸ááááááá áááá¶á(LTR)',langDirRtl:'áá¸áááá¶ááá ááááá(RTL)',langCode:'ááááá¼ááá¶áá¶',longDescr:'á¢áá·áááá¶á URL ááá',cssClass:'Stylesheet Classes',advisoryTitle:'á ááááá¾á áááá¹áááá¶',cssStyle:'ááá¼á',ok:'ááááááá',cancel:'áá·áááááááá',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'áááá·áááááá',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'ááá¹á',height:'ááááá',align:'ááááááá¸áá¶áá',alignLeft:'áá¶ááááá',alignRight:'áá¶ááááá¶á',alignCenter:'ááááá¶á',alignTop:'áá¶ááá¾',alignMiddle:'ááááá¶á',alignBottom:'áá¶áááááá',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'ááááááá¢áááááá·ááá',title:'áá¼á¢áááááá·ááá',options:'Special Character Options'},link:{toolbar:'áááááá/áááááá áááá¶áá',other:'<other>',menu:'áááááááááá¶áá',title:'áááá¶áá',info:'ááááá¶áá¢ááá¸áááá¶áá',target:'ááááá ',upload:'áá¶ááá',advanced:'áááá·áááááá',type:'áááááááááá¶áá',toUrl:'URL',toAnchor:'áá»áááá¶áá áááá»ááááááááá',toEmail:'á¢áá¸ááá',targetFrame:'<á áááááá>',targetPopup:'<áá¸ááá¼á ááá>',targetFrameName:'áááááá ááááááááááá¶ááááá ',targetPopupName:'ááááááá¸ááá¼áááá',popupFeatures:'áááááááááááá¸ááá¼áááá',popupResizable:'Resizable',popupStatusBar:'ááᶠááááá¶á',popupLocationBar:'ááᶠáá¸áá¶áá',popupToolbar:'ááᶠá©ááááá',popupMenuBar:'ááᶠááºáá»á',popupFullScreen:'á¢ááááá»áááá(IE)',popupScrollBars:'ááᶠáá¶á',popupDependent:'á¢á¶ááááááá¾ (Netscape)',popupLeft:'áá¸áá¶áááá¶áááááá',popupTop:'áá¸áá¶áááá¶ááá¾',id:'Id',langDir:'áá·ááá áá¶áá¶',langDirLTR:'áá¸ááááááá áááá¶á(LTR)',langDirRTL:'áá¸áááá¶ááá ááááá(RTL)',acccessKey:'áḠáááá¶ááá á¼á',name:'ááááá',langCode:'áá·ááá áá¶áá¶',tabIndex:'ááá Tab',advisoryTitle:'á ááááá¾á áááá¹áááá¶',advisoryContentType:'ááááááá¢ááááá áááá¹áááá¶',cssClasses:'Stylesheet Classes',charset:'ááááá¼áá¢áááááááááááá¶áá',styles:'ááá¼á',rel:'Relationship',selectAnchor:'áááá¾ááá¾ááá»áááá¶',anchorName:'áá¶áááááááááááá»áááá¶',anchorId:'áá¶á Id',emailAddress:'á¢áá¸ááá',emailSubject:'á ááááá¾áá¢ááááá',emailBody:'á¢ááááá',noAnchors:'(No anchors available in the document)',noUrl:'áá¼áááááá á¢á¶ááááááá¶á URL',noEmail:'áá¼áááááá á¢á¶ááááááá¶á á¢áá¸ááá'},anchor:{toolbar:'áááááá/áááááá áá»áááá¶',menu:'áá¶áááááááá»áááá¶',title:'áá¶áááááááá»áááá¶',name:'ááááááá»ááááááá¶',errorName:'áá¼áááááá ááááááá»ááááááá¶',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'ááááááá',replace:'áááá½á',findWhat:'áááááááá¢ááá¸:',replaceWith:'áááá½ááá¶áá½á:',notFoundMsg:'áá¶áááááá áááá·ááá¾ááá á',matchCase:'áááááááá¼ááá',matchWord:'áááá¼ááá¶ááááá¶ááá¢áá',matchCyclic:'Match cyclic',replaceAll:'áááá½ááá¶ááá¢áá',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'áá¶áá¶á',title:'áá¶áááááá áá¶áá¶á',menu:'áá¶áááááá áá¶áá¶á',deleteTable:'ááááá¶áá¶á',rows:'áá½áááááá',columns:'áá½ááá',border:'ááá áááá»á',widthPx:'áá¸áááá',widthPc:'áá¶ááá',widthUnit:'width unit',cellSpace:'áááá¶áááá',cellPad:'áááááá',caption:'á ááááá¾á',summary:'ááá áááá¸áááááá',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'áááááá',merge:'ááááá¼áááá',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'ááááá½áááááá'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'ááááá½ááá'}},button:{title:'áá¶áááááá ááá¼áá»á',text:'á¢ááááá(áááá)',type:'áááááá',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'áá¶áááááááááá¢áááááá¾ááá¾á',radioTitle:'áá¶ááááááááá¼áá»ááááááá',value:'áááá',selected:'áá¶ááááá¾ááá¾á'},form:{title:'áá¶ááááááááááá',menu:'áá¶ááááááááááá',action:'ááááááá¶á',method:'áá·áá¸',encoding:'Encoding'},select:{title:'áá¶áááááááá½ááááá¾ááá¾á',selectInfo:'ááááá¶á',opAvail:'áá¶áááááááááá¾ááá¾á áááá¢á¶á ááááááá¶á',value:'áááá',size:'ááá á',lines:'ááááá¶áá',chkMulti:'á¢áá»áááá¶áá¢áááááá¾ááá¾áá ááá¾á',opText:'áá¶ááá',opValue:'áááá',btnAdd:'áááááá',btnModify:'áááá¶áááááá¼á',btnUp:'áá¾',btnDown:'ááááá',btnSetValue:'Set as selected value',btnDelete:'ááá'},textarea:{title:'áá¶áááááááááááááááááá¢ááááá',cols:'áá¼ááá',rows:'áá¼áááááá'},textfield:{title:'áá¶áááááááá½áá¢ááááá',name:'ááááá',value:'áááá',charWidth:'ááá¹á á¢áááá',maxChars:'á¢ááááá¢áá·ááá·áá¶',type:'áááááá',typeText:'áá¶ááá',typePass:'áá¶ááááááá¶áá'},hidden:{title:'áá¶áááááááá½ááá¶áá',name:'ááááá',value:'áááá'},image:{title:'áá¶áááááááá¼ááá¶á',titleButton:'áá¶ááááááááá¼áá»ááá¼ááá¶á',menu:'áá¶áááááááá¼ááá¶á',infoTab:'ááááá¶áá¢ááá¸áá¼ááá¶á',btnUpload:'ááááá¼ááá áá¶ááááá¶ááá¸áááááááááá¶',upload:'áá¶ááá',alt:'á¢ááááááááá½á',lockRatio:'á¢áááá¶á¡á»á',resetSize:'áááááááá áá¡á¾ááá·á',border:'ááá»á',hSpace:'áááá¶áááá¹á',vSpace:'áááá¶ááááááá',alertUrl:'áá¼áááááááá¶ááááááá¶ááááááá¼ááá¶á',linkTab:'áááá¶áá',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'áá¶áááááá Flash',propertiesTab:'Properties',title:'áá¶áááááá Flash',chkPlay:'áááááááááááááááááá',chkLoop:'á ááá½ááá',chkMenu:'áááá á¶á ááºáá»ááááá Flash',chkFull:'Allow Fullscreen',scale:'ááá á',scaleAll:'áááá á¶ááá¶ááá¢áá',scaleNoBorder:'áá·ááááá á¶áááá»á',scaleFit:'áááá¼ááááá',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'ááááá¶áááá¶áá¼ááááá¶á',alignTextTop:'áá¾á¢ááááá',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'ááááááááá¶áááááá',hSpace:'áááá¶áááá¹á',vSpace:'áááá¶ááááááá',validateSrc:'áá¼áááááá á¢á¶ááááááá¶á URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'áá·áá·áááá¢ááááá¶áá·áá»ááá',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'áááá¶ááááá»ááá áá¶áá»áááá',changeTo:'áááá¶áááááá¼ááá ',btnIgnore:'áá·ááááá¶áááááá¼á',btnIgnoreAll:'áá·ááááá¶áááááá¼á áá¶ááá¢áá',btnReplace:'áááá½á',btnReplaceAll:'áááá½ááá¶ááá¢áá',btnUndo:'áá¶áá¡á¾ááá·á',noSuggestions:'- áááá¶ááááá¾á -',progress:'áááá»ááá·áá·áááá¢ááááá¶áá·áá»ááá...',noMispell:'áá¶ááá·áá·áááá¢ááááá¶áá·áá»ááááá¶áá áá: áááá¶áááá á»á',noChanges:'áá¶ááá·áá·áááá¢ááááá¶áá·áá»ááááá¶áá áá: áá»ááá¶ááááá¶áááááá¼á',oneChange:'áá¶ááá·áá·áááá¢ááááá¶áá·áá»ááááá¶áá áá: áá¶ááááá½ááááá¼á áá¶ááááá¶áááááá¼á',manyChanges:'áá¶ááá·áá·áááá¢ááááá¶áá·áá»ááááá¶áá áá: %1 áá¶ááááá¶ááááá¶áááááá¼á',ieSpellDownload:'áá»ááá¶ááááááá·áá¸áá·áá·áááá¢ááááá¶áá·áá»ááá á áá¾á áááá¶ááááá¸áá¶?'},smiley:{toolbar:'áá¼ááá¶á',title:'ááááá¼ááá¼ááá¶á',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ááááá¸áá¶á¢áááá',bulletedlist:'ááááá¸áá¶áááááááá¼á',indent:'áááááááá¶áá á¼áááááá¶áá',outdent:'ááááááá¶áá á¼áááááá¶áá',justify:{left:'áááá¹áááááá',center:'áááá¹áááááá¶á',right:'áááá¹ááááá¶á',block:'áááá¹ááááá¶á'},blockquote:'Block Quote',clipboard:{title:'á ááááá¶áá',cutError:'áá¶áááááááá»áááááá¶ááááááááááá·áá¸áá»ááááááááááá¢ááá áááâáá·áá¢á¶á áááá¾áááááá·áá¸áá¶áááááá¢ááááá áá¶ááá¢áááááááááááááááááááááááá¶áá¡á¾á á áá¼ááááá¾áááá¶ááááááá áá¸áá¼á ááá (Ctrl/Cmd+X) á',copyError:'áá¶áááááááá»áááááá¶ááááááááááá·áá¸áá»ááááááááááá¢ááá áááâáá·áá¢á¶á áááá¾áááááá·áá¸áá¶áááááá¢ááááá á áááá¢áááááááááááááááááááááááá¶áá¡á¾á á áá¼ááááá¾áááá¶ááááááá áá¸áá¼á ááá (Ctrl/Cmd+C)á',pasteMsg:'áá¼áá áááá¢ááááááá áá¶áááááá»ááááá¢áááá¼á áá¶ááááááááááááá¾áááá¶áá áḠâ(<STRONG>Ctrl/Cmd+V</STRONG>) á á¾áá á»á <STRONG>OK</STRONG> á',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'á ááááá¶áááḠWord',title:'á ááááá¶áááḠWord',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'á ááááá¶ááá¢ááááááááááá¶',title:'á ááááá¶ááá¢ááááááááááá¶'},templates:{button:'á¯ááá¶ááááá¼',title:'á¯ááá¶ááááá¼ ááááá¢áááááá',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'áá¼ááááá¾ááá¾áá¯ááá¶ááááá¼ áá¾áááá¸áá¾ááá áááá»ááááááá·áá¸áá¶áááááá¢ááááá<br>(á¢ááááááá¹ááá¶ááááá):',emptyListMsg:'(áá»ááá¶áá¯ááá¶ááááá¼áááá¼ááá¶áááááá)'},showBlocks:'Show Blocks',stylesCombo:{label:'ááá¼á',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'áá áá¶',panelTitle:'áá áá¶',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'á ááá»á',voiceLabel:'Font',panelTitle:'á ááá»á'},fontSize:{label:'ááá á',voiceLabel:'Font Size',panelTitle:'ááá á'},colorButton:{textColorTitle:'áááá¢áááá',bgColorTitle:'ááááááááá¶áááááá',panelTitle:'Colors',auto:'áááááááááááá',more:'ááááááááááá..'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'áá¶áááááá á¯ááá¶á',title:'áá¶áááááá á¯ááá¶á',design:'Design',meta:'áá·áááááááá',chooseColor:'Choose',other:'<other>',docTitle:'á ááááá¾áááááá',charset:'áááááááááá¼ááá¶áá¶',charsetOther:'áááááááááá¼ááá¶áá¶áááááááá',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'áááááááááá¶áááááá',docTypeOther:'áááááááááá¶áááááááááááááá',xhtmlDec:'ááááá¼á XHTML',bgColor:'ááááá¶áááááá',bgImage:'URL áááááá¼ááá¶ááá¶áááááá',bgFixed:'áááááááááááá·ááááá¼á',txtColor:'áááá¢áááá',margin:'ááá»áááááá',marginTop:'áá¾',marginLeft:'ááááá',marginRight:'áááá¶á',marginBottom:'ááááá',metaKeywords:'áá¶ááááá áááá»áá¯ááá¶á (áááá¶á ááá¸áááá¶áááááááá)',metaDescription:'ááá áááá¸á¢áááá¶áá·áááá¶áá¢ááá¸á¯ááá¶á',metaAuthor:'á¢ááááá·áááá',metaCopyright:'ááááá¶áá·áááá·á',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/ko.js b/lang/ko.js new file mode 100644 index 0000000..0c63fa7 --- /dev/null +++ b/lang/ko.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.ko={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'ìì¤',newPage:'ì 문ì',save:'ì ì¥í기',preview:'미리보기',cut:'ìë¼ë´ê¸°',copy:'ë³µì¬í기',paste:'ë¶ì¬ë£ê¸°',print:'ì¸ìí기',underline:'ë°ì¤',bold:'ì§íê²',italic:'ì´í ë¦',selectAll:'ì ì²´ì í',removeFormat:'í¬ë§· ì§ì°ê¸°',strike:'ì·¨ìì ',subscript:'ìë 첨ì',superscript:'ì 첨ì',horizontalrule:'ìíì ì½ì ',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'ë§í¬ ìì ',undo:'ì·¨ì',redo:'ì¬ì¤í',common:{browseServer:'ìë² ë³´ê¸°',url:'URL',protocol:'íë¡í ì½',upload:'ì ë¡ë',uploadSubmit:'ìë²ë¡ ì ì¡',image:'ì´ë¯¸ì§',flash:'íëì¬',form:'í¼',checkbox:'ì²´í¬ë°ì¤',radio:'ë¼ëì¤ë²í¼',textField:'ì ë ¥íë',textarea:'ì ë ¥ìì',hiddenField:'ì¨ê¹íë',button:'ë²í¼',select:'í¼ì¹¨ëª©ë¡',imageButton:'ì´ë¯¸ì§ë²í¼',notSet:'<ì¤ì ëì§ ìì>',id:'ID',name:'Name',langDir:'ì°ê¸° ë°©í¥',langDirLtr:'ì¼ìª½ìì ì¤ë¥¸ìª½ (LTR)',langDirRtl:'ì¤ë¥¸ìª½ìì ì¼ìª½ (RTL)',langCode:'ì¸ì´ ì½ë',longDescr:'URL ì¤ëª ',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'ì',cancel:'ìëì¤',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'ìì¸í',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'ëë¹',height:'ëì´',align:'ì ë ¬',alignLeft:'ì¼ìª½',alignRight:'ì¤ë¥¸ìª½',alignCenter:'ê°ì´ë°',alignTop:'ì',alignMiddle:'ì¤ê°',alignBottom:'ìë',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'í¹ì문ì ì½ì ',title:'í¹ì문ì ì í',options:'Special Character Options'},link:{toolbar:'ë§í¬ ì½ì /ë³ê²½',other:'<기í>',menu:'ë§í¬ ìì ',title:'ë§í¬',info:'ë§í¬ ì ë³´',target:'íê²',upload:'ì ë¡ë',advanced:'ìì¸í',type:'ë§í¬ ì¢ ë¥',toUrl:'URL',toAnchor:'ì± ê°í¼',toEmail:'ì´ë©ì¼',targetFrame:'<íë ì>',targetPopup:'<íì ì°½>',targetFrameName:'íê² íë ì ì´ë¦',targetPopupName:'íì ì°½ ì´ë¦',popupFeatures:'íì ì°½ ì¤ì ',popupResizable:'Resizable',popupStatusBar:'ìíë°',popupLocationBar:'주ìíìì¤',popupToolbar:'í´ë°',popupMenuBar:'ë©ë´ë°',popupFullScreen:'ì ì²´íë©´ (IE)',popupScrollBars:'ì¤í¬ë¡¤ë°',popupDependent:'Dependent (Netscape)',popupLeft:'ì¼ìª½ ìì¹',popupTop:'ì쪽 ìì¹',id:'Id',langDir:'ì°ê¸° ë°©í¥',langDirLTR:'ì¼ìª½ìì ì¤ë¥¸ìª½ (LTR)',langDirRTL:'ì¤ë¥¸ìª½ìì ì¼ìª½ (RTL)',acccessKey:'ìì¸ì¤ í¤',name:'Name',langCode:'ì°ê¸° ë°©í¥',tabIndex:'í ìì',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',rel:'Relationship',selectAnchor:'ì± ê°í¼ ì í',anchorName:'ì± ê°í¼ ì´ë¦',anchorId:'ì± ê°í¼ ID',emailAddress:'ì´ë©ì¼ 주ì',emailSubject:'ì 목',emailBody:'ë´ì©',noAnchors:'(문ìì ì± ê°í¼ê° ììµëë¤.)',noUrl:'ë§í¬ URLì ì ë ¥íììì.',noEmail:'ì´ë©ì¼ì£¼ì를 ì ë ¥íììì.'},anchor:{toolbar:'ì± ê°í¼ ì½ì /ë³ê²½',menu:'ì± ê°í¼ ìì±',title:'ì± ê°í¼ ìì±',name:'ì± ê°í¼ ì´ë¦',errorName:'ì± ê°í¼ ì´ë¦ì ì ë ¥íììì.',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'찾기 & ë°ê¾¸ê¸°',find:'찾기',replace:'ë°ê¾¸ê¸°',findWhat:'ì°¾ì 문ìì´:',replaceWith:'ë°ê¿ 문ìì´:',notFoundMsg:'문ìì´ì ì°¾ì ì ììµëë¤.',matchCase:'ëì문ì 구ë¶',matchWord:'ì¨ì í ë¨ì´',matchCyclic:'Match cyclic',replaceAll:'모ë ë°ê¾¸ê¸°',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'í',title:'í ì¤ì ',menu:'í ì¤ì ',deleteTable:'í ìì ',rows:'ê°ë¡ì¤',columns:'ì¸ë¡ì¤',border:'í ë리 í¬ê¸°',widthPx:'í½ì ',widthPc:'í¼ì¼í¸',widthUnit:'width unit',cellSpace:'ì ê°ê²©',cellPad:'ì ì¬ë°±',caption:'캡ì ',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'ì /칸(Cell)',insertBefore:'ìì ì /칸 ì½ì ',insertAfter:'ë¤ì ì /칸 ì½ì ',deleteCell:'ì ìì ',merge:'ì í©ì¹ê¸°',mergeRight:'ì¤ë¥¸ìª½ ëì¹ê¸°',mergeDown:'ì¼ìª½ ëì¹ê¸°',splitHorizontal:'ìí ëë기',splitVertical:'ìì§ ëë기',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'í(Row)',insertBefore:'ìì í ì½ì ',insertAfter:'ë¤ì í ì½ì ',deleteRow:'ê°ë¡ì¤ ìì '},column:{menu:'ì´(Column)',insertBefore:'ìì ì´ ì½ì ',insertAfter:'ë¤ì ì´ ì½ì ',deleteColumn:'ì¸ë¡ì¤ ìì '}},button:{title:'ë²í¼ ìì±',text:'ë²í¼ê¸ì(ê°)',type:'ë²í¼ì¢ ë¥',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'ì²´í¬ë°ì¤ ìì±',radioTitle:'ë¼ëì¤ë²í¼ ìì±',value:'ê°',selected:'ì íë¨'},form:{title:'í¼ ìì±',menu:'í¼ ìì±',action:'ì¤íê²½ë¡(Action)',method:'ë°©ë²(Method)',encoding:'Encoding'},select:{title:'í¼ì¹¨ëª©ë¡ ìì±',selectInfo:'ì ë³´',opAvail:'ì íìµì ',value:'ê°',size:'ì¸ë¡í¬ê¸°',lines:'ì¤',chkMulti:'ì¬ë¬í목 ì í íì©',opText:'ì´ë¦',opValue:'ê°',btnAdd:'ì¶ê°',btnModify:'ë³ê²½',btnUp:'ìë¡',btnDown:'ìëë¡',btnSetValue:'ì íëê²ì¼ë¡ ì¤ì ',btnDelete:'ìì '},textarea:{title:'ì ë ¥ìì ìì±',cols:'칸ì',rows:'ì¤ì'},textfield:{title:'ì ë ¥íë ìì±',name:'ì´ë¦',value:'ê°',charWidth:'ê¸ì ëë¹',maxChars:'ìµë ê¸ìì',type:'ì¢ ë¥',typeText:'문ìì´',typePass:'ë¹ë°ë²í¸'},hidden:{title:'ì¨ê¹íë ìì±',name:'ì´ë¦',value:'ê°'},image:{title:'ì´ë¯¸ì§ ì¤ì ',titleButton:'ì´ë¯¸ì§ë²í¼ ìì±',menu:'ì´ë¯¸ì§ ì¤ì ',infoTab:'ì´ë¯¸ì§ ì ë³´',btnUpload:'ìë²ë¡ ì ì¡',upload:'ì ë¡ë',alt:'ì´ë¯¸ì§ ì¤ëª ',lockRatio:'ë¹ì¨ ì ì§',resetSize:'ìë í¬ê¸°ë¡',border:'í ë리',hSpace:'ìíì¬ë°±',vSpace:'ìì§ì¬ë°±',alertUrl:'ì´ë¯¸ì§ URLì ì ë ¥íììì',linkTab:'ë§í¬',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'íëì¬ ìì±',propertiesTab:'Properties',title:'íëì¬ ë±ë¡ì ë³´',chkPlay:'ìëì¬ì',chkLoop:'ë°ë³µ',chkMenu:'íëì¬ë©ë´ ê°ë¥',chkFull:'Allow Fullscreen',scale:'ìì',scaleAll:'모ë보기',scaleNoBorder:'ê²½ê³ì ìì',scaleFit:'ìììëì¡°ì ',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'ì¤ìë(Abs Bottom)',alignAbsMiddle:'ì¤ì¤ê°(Abs Middle)',alignBaseline:'기ì¤ì ',alignTextTop:'ê¸ììë¨',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'ë°°ê²½ ìì',hSpace:'ìíì¬ë°±',vSpace:'ìì§ì¬ë°±',validateSrc:'ë§í¬ URLì ì ë ¥íììì.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'ì² ìê²ì¬',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'ì¬ì ì ìë ë¨ì´',changeTo:'ë³ê²½í ë¨ì´',btnIgnore:'ê±´ëë',btnIgnoreAll:'모ë ê±´ëë',btnReplace:'ë³ê²½',btnReplaceAll:'모ë ë³ê²½',btnUndo:'ì·¨ì',noSuggestions:'- ì¶ì²ë¨ì´ ìì -',progress:'ì² ìê²ì¬ë¥¼ ì§íì¤ì ëë¤...',noMispell:'ì² ìê²ì¬ ìë£: ì못ë ì² ìê° ììµëë¤.',noChanges:'ì² ìê²ì¬ ìë£: ë³ê²½ë ë¨ì´ê° ììµëë¤.',oneChange:'ì² ìê²ì¬ ìë£: ë¨ì´ê° ë³ê²½ëììµëë¤.',manyChanges:'ì² ìê²ì¬ ìë£: %1 ë¨ì´ê° ë³ê²½ëììµëë¤.',ieSpellDownload:'ì² ì ê²ì¬ê¸°ê° ì² ì¹ëì§ ìììµëë¤. ì§ê¸ ë¤ì´ë¡ëíìê² ìµëê¹?'},smiley:{toolbar:'ìì´ì½',title:'ìì´ì½ ì½ì ',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ìììë 목ë¡',bulletedlist:'ìììë 목ë¡',indent:'ë¤ì¬ì°ê¸°',outdent:'ë´ì´ì°ê¸°',justify:{left:'ì¼ìª½ ì ë ¬',center:'ê°ì´ë° ì ë ¬',right:'ì¤ë¥¸ìª½ ì ë ¬',block:'ì쪽 ë§ì¶¤'},blockquote:'Block Quote',clipboard:{title:'ë¶ì¬ë£ê¸°',cutError:'ë¸ë¼ì°ì ì ë³´ìì¤ì ë문ì ìë¼ë´ê¸° 기ë¥ì ì¤íí ì ììµëë¤. í¤ë³´ë ëª ë ¹ì ì¬ì©íììì. (Ctrl/Cmd+X).',copyError:'ë¸ë¼ì°ì ì ë³´ìì¤ì ë문ì ë³µì¬í기 기ë¥ì ì¤íí ì ììµëë¤. í¤ë³´ë ëª ë ¹ì ì¬ì©íììì. (Ctrl/Cmd+C).',pasteMsg:'í¤ë³´ëì (<STRONG>Ctrl/Cmd+V</STRONG>) 를 ì´ì©í´ì ìììì ë¶ì¬ë£ê³ <STRONG>OK</STRONG> 를 ë르ì¸ì.',securityMsg:'ë¸ë¬ì°ì ë³´ì ì¤ì ì¼ë¡ ì¸í´, í´ë¦½ë³´ëì ìë£ë¥¼ ì§ì ì ê·¼í ì ììµëë¤. ì´ ì°½ì ë¤ì ë¶ì¬ë£ê¸° íììì¤.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'MS Word íììì ë¶ì¬ë£ê¸°',title:'MS Word íììì ë¶ì¬ë£ê¸°',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'í ì¤í¸ë¡ ë¶ì¬ë£ê¸°',title:'í ì¤í¸ë¡ ë¶ì¬ë£ê¸°'},templates:{button:'í í릿',title:'ë´ì© í í릿',options:'Template Options',insertOption:'íì¬ ë´ì© ë°ê¾¸ê¸°',selectPromptMsg:'ìëí°ìì ì¬ì©í í í릿ì ì ííììì.<br>(ì§ê¸ê¹ì§ ìì±ë ë´ì©ì ì¬ë¼ì§ëë¤.):',emptyListMsg:'(í íë¦¿ì´ ììµëë¤.)'},showBlocks:'Show Blocks',stylesCombo:{label:'ì¤íì¼',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'í¬ë§·',panelTitle:'í¬ë§·',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'í°í¸',voiceLabel:'Font',panelTitle:'í°í¸'},fontSize:{label:'ê¸ì í¬ê¸°',voiceLabel:'Font Size',panelTitle:'ê¸ì í¬ê¸°'},colorButton:{textColorTitle:'ê¸ì ìì',bgColorTitle:'ë°°ê²½ ìì',panelTitle:'Colors',auto:'기본ìì',more:'ììì í...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'문ì ìì±',title:'문ì ìì±',design:'Design',meta:'ë©íë°ì´í°',chooseColor:'Choose',other:'<기í>',docTitle:'íì´ì§ëª ',charset:'ìºë¦í°ì ì¸ì½ë©',charsetOther:'ë¤ë¥¸ ìºë¦í°ì ì¸ì½ë©',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'문ì í¤ë',docTypeOther:'ë¤ë¥¸ 문ìí¤ë',xhtmlDec:'XHTML 문ìì ì í¬í¨',bgColor:'ë°°ê²½ìì',bgImage:'ë°°ê²½ì´ë¯¸ì§ URL',bgFixed:'ì¤í¬ë¡¤ëì§ìë ë°°ê²½',txtColor:'ê¸ì ìì',margin:'íì´ì§ ì¬ë°±',marginTop:'ì',marginLeft:'ì¼ìª½',marginRight:'ì¤ë¥¸ìª½',marginBottom:'ìë',metaKeywords:'문ì í¤ìë (콤ë§ë¡ 구ë¶)',metaDescription:'문ì ì¤ëª ',metaAuthor:'ìì±ì',metaCopyright:'ì ìê¶',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/lt.js b/lang/lt.js new file mode 100644 index 0000000..854e67c --- /dev/null +++ b/lang/lt.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.lt={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Å altinis',newPage:'Naujas puslapis',save:'IÅ¡saugoti',preview:'PeržiÅ«ra',cut:'IÅ¡kirpti',copy:'Kopijuoti',paste:'Ä®dÄti',print:'Spausdinti',underline:'Pabrauktas',bold:'Pusjuodis',italic:'Kursyvas',selectAll:'PažymÄti viskÄ ',removeFormat:'Panaikinti formatÄ ',strike:'Perbrauktas',subscript:'Apatinis indeksas',superscript:'VirÅ¡utinis indeksas',horizontalrule:'Ä®terpti horizontaliÄ linijÄ ',pagebreak:'Ä®terpti puslapių skirtukÄ ',pagebreakAlt:'Page Break',unlink:'Panaikinti nuorodÄ ',undo:'AtÅ¡aukti',redo:'Atstatyti',common:{browseServer:'NarÅ¡yti po serverį',url:'URL',protocol:'Protokolas',upload:'Siųsti',uploadSubmit:'Siųsti į serverį',image:'Vaizdas',flash:'Flash',form:'Forma',checkbox:'Žymimasis langelis',radio:'Žymimoji akutÄ',textField:'Teksto laukas',textarea:'Teksto sritis',hiddenField:'Nerodomas laukas',button:'Mygtukas',select:'Atrankos laukas',imageButton:'Vaizdinis mygtukas',notSet:'<nÄra nustatyta>',id:'Id',name:'Vardas',langDir:'Teksto kryptis',langDirLtr:'IÅ¡ kairÄs į deÅ¡inÄ (LTR)',langDirRtl:'IÅ¡ deÅ¡inÄs į kairÄ (RTL)',langCode:'Kalbos kodas',longDescr:'Ilgas apraÅ¡ymas URL',cssClass:'Stilių lentelÄs klasÄs',advisoryTitle:'KonsultacinÄ antraÅ¡tÄ',cssStyle:'Stilius',ok:'OK',cancel:'Nutraukti',close:'Close',preview:'Preview',generalTab:'Bendros savybÄs',advancedTab:'Papildomas',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Plotis',height:'AukÅ¡tis',align:'Lygiuoti',alignLeft:'KairÄ',alignRight:'DeÅ¡inÄ',alignCenter:'CentrÄ ',alignTop:'VirÅ¡Å«nÄ',alignMiddle:'Vidurį',alignBottom:'ApaÄiÄ ',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Ä®terpti specialų simbolį',title:'Pasirinkite specialų simbolį',options:'Special Character Options'},link:{toolbar:'Ä®terpti/taisyti nuorodÄ ',other:'<kitas>',menu:'Taisyti nuorodÄ ',title:'Nuoroda',info:'Nuorodos informacija',target:'Paskirties vieta',upload:'Siųsti',advanced:'Papildomas',type:'Nuorodos tipas',toUrl:'URL',toAnchor:'ŽymÄ Å¡iame puslapyje',toEmail:'El.paÅ¡tas',targetFrame:'<kadras>',targetPopup:'<iÅ¡skleidžiamas langas>',targetFrameName:'Paskirties kadro vardas',targetPopupName:'Paskirties lango vardas',popupFeatures:'IÅ¡skleidžiamo lango savybÄs',popupResizable:'Resizable',popupStatusBar:'BÅ«senos juosta',popupLocationBar:'Adreso juosta',popupToolbar:'Mygtukų juosta',popupMenuBar:'Meniu juosta',popupFullScreen:'Visas ekranas (IE)',popupScrollBars:'Slinkties juostos',popupDependent:'Priklausomas (Netscape)',popupLeft:'KairÄ pozicija',popupTop:'VirÅ¡utinÄ pozicija',id:'Id',langDir:'Teksto kryptis',langDirLTR:'IÅ¡ kairÄs į deÅ¡inÄ (LTR)',langDirRTL:'IÅ¡ deÅ¡inÄs į kairÄ (RTL)',acccessKey:'Prieigos raktas',name:'Vardas',langCode:'Teksto kryptis',tabIndex:'Tabuliavimo indeksas',advisoryTitle:'KonsultacinÄ antraÅ¡tÄ',advisoryContentType:'Konsultacinio turinio tipas',cssClasses:'Stilių lentelÄs klasÄs',charset:'Susietų iÅ¡teklių simbolių lentelÄ',styles:'Stilius',rel:'Relationship',selectAnchor:'Pasirinkite žymÄ',anchorName:'Pagal žymÄs vardÄ ',anchorId:'Pagal žymÄs Id',emailAddress:'El.paÅ¡to adresas',emailSubject:'ŽinutÄs tema',emailBody:'ŽinutÄs turinys',noAnchors:'(Å iame dokumente žymių nÄra)',noUrl:'PraÅ¡ome įvesti nuorodos URL',noEmail:'PraÅ¡ome įvesti el.paÅ¡to adresÄ '},anchor:{toolbar:'Ä®terpti/modifikuoti žymÄ',menu:'ŽymÄs savybÄs',title:'ŽymÄs savybÄs',name:'ŽymÄs vardas',errorName:'PraÅ¡ome įvesti žymÄs vardÄ ',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Surasti ir pakeisti',find:'Rasti',replace:'Pakeisti',findWhat:'Surasti tekstÄ :',replaceWith:'Pakeisti tekstu:',notFoundMsg:'Nurodytas tekstas nerastas.',matchCase:'Skirti didžiÄ sias ir maÅ¾Ä sias raides',matchWord:'Atitikti pilnÄ Å¾odį',matchCyclic:'Match cyclic',replaceAll:'Pakeisti viskÄ ',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'LentelÄ',title:'LentelÄs savybÄs',menu:'LentelÄs savybÄs',deleteTable:'Å alinti lentelÄ',rows:'EilutÄs',columns:'Stulpeliai',border:'RÄmelio dydis',widthPx:'taÅ¡kais',widthPc:'procentais',widthUnit:'width unit',cellSpace:'Tarpas tarp langelių',cellPad:'Trapas nuo langelio rÄmo iki teksto',caption:'AntraÅ¡tÄ',summary:'Santrauka',headers:'AntraÅ¡tÄs',headersNone:'NÄra',headersColumn:'Pirmas stulpelis',headersRow:'Pirma eilutÄ',headersBoth:'Abu',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Langelis',insertBefore:'Ä®terpti langelį prieÅ¡',insertAfter:'Ä®terpti langelį po',deleteCell:'Å alinti langelius',merge:'Sujungti langelius',mergeRight:'Sujungti su deÅ¡ine',mergeDown:'Sujungti su apaÄia',splitHorizontal:'Skaidyti langelį horizontaliai',splitVertical:'Skaidyti langelį vertikaliai',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'EilutÄ',insertBefore:'Ä®terpti eilutÄ prieÅ¡',insertAfter:'Ä®terpti eilutÄ po',deleteRow:'Å alinti eilutes'},column:{menu:'Stulpelis',insertBefore:'Ä®terpti stulpelį prieÅ¡',insertAfter:'Ä®terpti stulpelį po',deleteColumn:'Å alinti stulpelius'}},button:{title:'Mygtuko savybÄs',text:'Tekstas (ReikÅ¡mÄ)',type:'Tipas',typeBtn:'Mygtukas',typeSbm:'Siųsti',typeRst:'IÅ¡valyti'},checkboxAndRadio:{checkboxTitle:'Žymimojo langelio savybÄs',radioTitle:'Žymimosios akutÄs savybÄs',value:'ReikÅ¡mÄ',selected:'PažymÄtas'},form:{title:'Formos savybÄs',menu:'Formos savybÄs',action:'Veiksmas',method:'Metodas',encoding:'Encoding'},select:{title:'Atrankos lauko savybÄs',selectInfo:'Informacija',opAvail:'Galimos parinktys',value:'ReikÅ¡mÄ',size:'Dydis',lines:'eiluÄių',chkMulti:'Leisti daugeriopÄ atrankÄ ',opText:'Tekstas',opValue:'ReikÅ¡mÄ',btnAdd:'Ä®traukti',btnModify:'Modifikuoti',btnUp:'AukÅ¡tyn',btnDown:'Žemyn',btnSetValue:'Laikyti pažymÄta reikÅ¡me',btnDelete:'Trinti'},textarea:{title:'Teksto srities savybÄs',cols:'Ilgis',rows:'Plotis'},textfield:{title:'Teksto lauko savybÄs',name:'Vardas',value:'ReikÅ¡mÄ',charWidth:'Ilgis simboliais',maxChars:'Maksimalus simbolių skaiÄius',type:'Tipas',typeText:'Tekstas',typePass:'Slaptažodis'},hidden:{title:'Nerodomo lauko savybÄs',name:'Vardas',value:'ReikÅ¡mÄ'},image:{title:'Vaizdo savybÄs',titleButton:'Vaizdinio mygtuko savybÄs',menu:'Vaizdo savybÄs',infoTab:'Vaizdo informacija',btnUpload:'Siųsti į serverį',upload:'Nusiųsti',alt:'Alternatyvus Tekstas',lockRatio:'IÅ¡laikyti proporcijÄ ',resetSize:'Atstatyti dydį',border:'RÄmelis',hSpace:'Hor.ErdvÄ',vSpace:'Vert.ErdvÄ',alertUrl:'PraÅ¡ome įvesti vaizdo URL',linkTab:'Nuoroda',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash savybÄs',propertiesTab:'Properties',title:'Flash savybÄs',chkPlay:'Automatinis paleidimas',chkLoop:'Ciklas',chkMenu:'Leisti Flash meniu',chkFull:'Allow Fullscreen',scale:'Mastelis',scaleAll:'Rodyti visÄ ',scaleNoBorder:'Be rÄmelio',scaleFit:'Tikslus atitikimas',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'AbsoliuÄiÄ apaÄiÄ ',alignAbsMiddle:'Absoliutų vidurį',alignBaseline:'ApatinÄ linijÄ ',alignTextTop:'Teksto virÅ¡Å«nÄ',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fono spalva',hSpace:'Hor.ErdvÄ',vSpace:'Vert.ErdvÄ',validateSrc:'PraÅ¡ome įvesti nuorodos URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'RaÅ¡ybos tikrinimas',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Žodyne nerastas',changeTo:'Pakeisti į',btnIgnore:'Ignoruoti',btnIgnoreAll:'Ignoruoti visus',btnReplace:'Pakeisti',btnReplaceAll:'Pakeisti visus',btnUndo:'AtÅ¡aukti',noSuggestions:'- NÄra pasiÅ«lymų -',progress:'Vyksta raÅ¡ybos tikrinimas...',noMispell:'RaÅ¡ybos tikrinimas baigtas: Nerasta raÅ¡ybos klaidų',noChanges:'RaÅ¡ybos tikrinimas baigtas: NÄra pakeistų žodžių',oneChange:'RaÅ¡ybos tikrinimas baigtas: Vienas žodis pakeistas',manyChanges:'RaÅ¡ybos tikrinimas baigtas: Pakeista %1 žodžių',ieSpellDownload:'RaÅ¡ybos tikrinimas neinstaliuotas. Ar JÅ«s norite jį dabar atsisiųsti?'},smiley:{toolbar:'Veideliai',title:'Ä®terpti veidelį',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numeruotas sÄ raÅ¡as',bulletedlist:'Suženklintas sÄ raÅ¡as',indent:'Padidinti įtraukÄ ',outdent:'Sumažinti įtraukÄ ',justify:{left:'Lygiuoti kairÄ',center:'Centruoti',right:'Lygiuoti deÅ¡inÄ',block:'Lygiuoti abi puses'},blockquote:'Citata',clipboard:{title:'Ä®dÄti',cutError:'JÅ«sų narÅ¡yklÄs saugumo nustatymai neleidžia redaktoriui automatiÅ¡kai įvykdyti iÅ¡kirpimo operacijų. Tam praÅ¡ome naudoti klaviatÅ«rÄ (Ctrl/Cmd+X).',copyError:'JÅ«sų narÅ¡yklÄs saugumo nustatymai neleidžia redaktoriui automatiÅ¡kai įvykdyti kopijavimo operacijų. Tam praÅ¡ome naudoti klaviatÅ«rÄ (Ctrl/Cmd+C).',pasteMsg:'Žemiau esanÄiame įvedimo lauke įdÄkite tekstÄ , naudodami klaviatÅ«rÄ (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtukÄ <STRONG>OK</STRONG>.',securityMsg:'DÄl jÅ«sų narÅ¡yklÄs saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartÄ Ä¯ šį langÄ .',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Ä®dÄti iÅ¡ Word',title:'Ä®dÄti iÅ¡ Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Ä®dÄti kaip grynÄ tekstÄ ',title:'Ä®dÄti kaip grynÄ tekstÄ '},templates:{button:'Å ablonai',title:'Turinio Å¡ablonai',options:'Template Options',insertOption:'Pakeisti dabartinį turinį pasirinktu Å¡ablonu',selectPromptMsg:'Pasirinkite norimÄ Å¡ablonÄ <br>(<b>DÄmesio!</b> esamas turinys bus prarastas):',emptyListMsg:'(Å ablonų sÄ raÅ¡as tuÅ¡Äias)'},showBlocks:'Rodyti blokus',stylesCombo:{label:'Stilius',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Å rifto formatas',panelTitle:'Å rifto formatas',tag_p:'Normalus',tag_pre:'Formuotas',tag_address:'Kreipinio',tag_h1:'AntraÅ¡tinis 1',tag_h2:'AntraÅ¡tinis 2',tag_h3:'AntraÅ¡tinis 3',tag_h4:'AntraÅ¡tinis 4',tag_h5:'AntraÅ¡tinis 5',tag_h6:'AntraÅ¡tinis 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Å riftas',voiceLabel:'Font',panelTitle:'Å riftas'},fontSize:{label:'Å rifto dydis',voiceLabel:'Font Size',panelTitle:'Å rifto dydis'},colorButton:{textColorTitle:'Teksto spalva',bgColorTitle:'Fono spalva',panelTitle:'Colors',auto:'Automatinis',more:'Daugiau spalvų...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Dokumento savybÄs',title:'Dokumento savybÄs',design:'Design',meta:'Meta duomenys',chooseColor:'Choose',other:'<kitas>',docTitle:'Puslapio antraÅ¡tÄ',charset:'Simbolių kodavimo lentelÄ',charsetOther:'Kita simbolių kodavimo lentelÄ',charsetASCII:'ASCII',charsetCE:'CentrinÄs Europos',charsetCT:'TradicinÄs kinų (Big5)',charsetCR:'Kirilica',charsetGR:'Graikų',charsetJP:'Japonų',charsetKR:'KorÄjieÄių',charsetTR:'Turkų',charsetUN:'Unikodas (UTF-8)',charsetWE:'Vakarų Europos',docType:'Dokumento tipo antraÅ¡tÄ',docTypeOther:'Kita dokumento tipo antraÅ¡tÄ',xhtmlDec:'Ä®traukti XHTML deklaracijas',bgColor:'Fono spalva',bgImage:'Fono paveikslÄlio nuoroda (URL)',bgFixed:'Neslenkantis fonas',txtColor:'Teksto spalva',margin:'Puslapio kraÅ¡tinÄs',marginTop:'VirÅ¡uje',marginLeft:'KairÄje',marginRight:'DeÅ¡inÄje',marginBottom:'ApaÄioje',metaKeywords:'Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)',metaDescription:'Dokumento apibÅ«dinimas',metaAuthor:'Autorius',metaCopyright:'AutorinÄs teisÄs',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/lv.js b/lang/lv.js new file mode 100644 index 0000000..5d08ee2 --- /dev/null +++ b/lang/lv.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.lv={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'HTML kods',newPage:'Jauna lapa',save:'SaglabÄt',preview:'PÄrskatÄ«t',cut:'Izgriezt',copy:'KopÄt',paste:'Ievietot',print:'DrukÄt',underline:'ApakÅ¡svÄ«tra',bold:'Treknu Å¡riftu',italic:'SlÄ«prakstÄ',selectAll:'IezÄ«mÄt visu',removeFormat:'NoÅemt stilus',strike:'PÄrsvÄ«trots',subscript:'ZemrakstÄ',superscript:'AugÅ¡rakstÄ',horizontalrule:'Ievietot horizontÄlu AtdalÄ«tÄjsvÄ«tru',pagebreak:'Ievietot lapas pÄrtraukumu',pagebreakAlt:'Page Break',unlink:'NoÅemt hipersaiti',undo:'Atcelt',redo:'AtkÄrtot',common:{browseServer:'SkatÄ«t servera saturu',url:'URL',protocol:'Protokols',upload:'AugÅ¡upielÄdÄt',uploadSubmit:'NosÅ«tÄ«t serverim',image:'AttÄls',flash:'Flash',form:'Forma',checkbox:'AtzÄ«mÄÅ¡anas kastÄ«te',radio:'IzvÄles poga',textField:'Teksta rinda',textarea:'Teksta laukums',hiddenField:'PaslÄpta teksta rinda',button:'Poga',select:'IezÄ«mÄÅ¡anas lauks',imageButton:'AttÄlpoga',notSet:'<nav iestatÄ«ts>',id:'Id',name:'Nosaukums',langDir:'Valodas lasÄ«Å¡anas virziens',langDirLtr:'No kreisÄs uz labo (LTR)',langDirRtl:'No labÄs uz kreiso (RTL)',langCode:'Valodas kods',longDescr:'Gara apraksta Hipersaite',cssClass:'Stilu saraksta klases',advisoryTitle:'KonsultatÄ«vs virsraksts',cssStyle:'Stils',ok:'DarÄ«ts!',cancel:'Atcelt',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'IzvÄrstais',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Platums',height:'Augstums',align:'NolÄ«dzinÄt',alignLeft:'Pa kreisi',alignRight:'Pa labi',alignCenter:'CentrÄti',alignTop:'AugÅ¡Ä',alignMiddle:'VertikÄli centrÄts',alignBottom:'ApakÅ¡Ä',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Ievietot speciÄlo simbolu',title:'Ievietot Ä«paÅ¡u simbolu',options:'Special Character Options'},link:{toolbar:'Ievietot/Labot hipersaiti',other:'<cits>',menu:'Labot hipersaiti',title:'Hipersaite',info:'Hipersaites informÄcija',target:'MÄrÄ·is',upload:'AugÅ¡upielÄdÄt',advanced:'IzvÄrstais',type:'Hipersaites tips',toUrl:'URL',toAnchor:'IezÄ«me Å¡ajÄ lapÄ',toEmail:'E-pasts',targetFrame:'<ietvars>',targetPopup:'<uznirstoÅ¡Ä logÄ>',targetFrameName:'MÄrÄ·a ietvara nosaukums',targetPopupName:'UznirstoÅ¡Ä loga nosaukums',popupFeatures:'UznirstoÅ¡Ä loga nosaukums Ä«paÅ¡Ä«bas',popupResizable:'Resizable',popupStatusBar:'Statusa josla',popupLocationBar:'AtraÅ¡anÄs vietas josla',popupToolbar:'RÄ«ku josla',popupMenuBar:'IzvÄlnes josla',popupFullScreen:'PilnÄ ekrÄnÄ (IE)',popupScrollBars:'Ritjoslas',popupDependent:'AtkarÄ«gs (Netscape)',popupLeft:'KreisÄ koordinÄte',popupTop:'AugÅ¡ÄjÄ koordinÄte',id:'Id',langDir:'Valodas lasÄ«Å¡anas virziens',langDirLTR:'No kreisÄs uz labo (LTR)',langDirRTL:'No labÄs uz kreiso (RTL)',acccessKey:'Pieejas kods',name:'Nosaukums',langCode:'Valodas lasÄ«Å¡anas virziens',tabIndex:'CiļÅu indekss',advisoryTitle:'KonsultatÄ«vs virsraksts',advisoryContentType:'KonsultatÄ«vs satura tips',cssClasses:'Stilu saraksta klases',charset:'PievienotÄ resursa kodu tabula',styles:'Stils',rel:'Relationship',selectAnchor:'IzvÄlÄties iezÄ«mi',anchorName:'PÄc iezÄ«mes nosaukuma',anchorId:'PÄc elementa ID',emailAddress:'E-pasta adrese',emailSubject:'ZiÅas tÄma',emailBody:'ZiÅas saturs',noAnchors:'(Å ajÄ dokumentÄ nav iezÄ«mju)',noUrl:'LÅ«dzu norÄdi hipersaiti',noEmail:'LÅ«dzu norÄdi e-pasta adresi'},anchor:{toolbar:'Ievietot/Labot iezÄ«mi',menu:'IezÄ«mes Ä«paÅ¡Ä«bas',title:'IezÄ«mes Ä«paÅ¡Ä«bas',name:'IezÄ«mes nosaukums',errorName:'LÅ«dzu norÄdiet iezÄ«mes nosaukumu',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'MeklÄt',replace:'NomainÄ«t',findWhat:'MeklÄt:',replaceWith:'NomainÄ«t uz:',notFoundMsg:'NorÄdÄ«tÄ frÄze netika atrasta.',matchCase:'ReÄ£istrjÅ«tÄ«gs',matchWord:'JÄsakrÄ«t pilnÄ«bÄ',matchCyclic:'Match cyclic',replaceAll:'Aizvietot visu',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabula',title:'Tabulas Ä«paÅ¡Ä«bas',menu:'Tabulas Ä«paÅ¡Ä«bas',deleteTable:'DzÄst tabulu',rows:'Rindas',columns:'Kolonnas',border:'RÄmja izmÄrs',widthPx:'pikseļos',widthPc:'procentuÄli',widthUnit:'width unit',cellSpace:'RÅ«tiÅu atstatums',cellPad:'RÅ«tiÅu nobÄ«de',caption:'LeÄ£enda',summary:'AnotÄcija',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Å Å«na',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'DzÄst rÅ«tiÅas',merge:'Apvienot rÅ«tiÅas',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Rinda',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'DzÄst rindas'},column:{menu:'Kolonna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'DzÄst kolonnas'}},button:{title:'Pogas Ä«paÅ¡Ä«bas',text:'Teksts (vÄrtÄ«ba)',type:'Tips',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'AtzÄ«mÄÅ¡anas kastÄ«tes Ä«paÅ¡Ä«bas',radioTitle:'IzvÄles poga Ä«paÅ¡Ä«bas',value:'VÄrtÄ«ba',selected:'IezÄ«mÄts'},form:{title:'Formas Ä«paÅ¡Ä«bas',menu:'Formas Ä«paÅ¡Ä«bas',action:'DarbÄ«ba',method:'Metode',encoding:'Encoding'},select:{title:'IezÄ«mÄÅ¡anas lauka Ä«paÅ¡Ä«bas',selectInfo:'InformÄcija',opAvail:'PieejamÄs iespÄjas',value:'VÄrtÄ«ba',size:'IzmÄrs',lines:'rindas',chkMulti:'Atļaut vairÄkus iezÄ«mÄjumus',opText:'Teksts',opValue:'VÄrtÄ«ba',btnAdd:'Pievienot',btnModify:'Veikt izmaiÅas',btnUp:'AugÅ¡up',btnDown:'Lejup',btnSetValue:'Noteikt kÄ iezÄ«mÄto vÄrtÄ«bu',btnDelete:'DzÄst'},textarea:{title:'Teksta laukuma Ä«paÅ¡Ä«bas',cols:'Kolonnas',rows:'Rindas'},textfield:{title:'Teksta rindas Ä«paÅ¡Ä«bas',name:'Nosaukums',value:'VÄrtÄ«ba',charWidth:'Simbolu platums',maxChars:'Simbolu maksimÄlais daudzums',type:'Tips',typeText:'Teksts',typePass:'Parole'},hidden:{title:'PaslÄptÄs teksta rindas Ä«paÅ¡Ä«bas',name:'Nosaukums',value:'VÄrtÄ«ba'},image:{title:'AttÄla Ä«paÅ¡Ä«bas',titleButton:'AttÄlpogas Ä«paÅ¡Ä«bas',menu:'AttÄla Ä«paÅ¡Ä«bas',infoTab:'InformÄcija par attÄlu',btnUpload:'NosÅ«tÄ«t serverim',upload:'AugÅ¡upielÄdÄt',alt:'AlternatÄ«vais teksts',lockRatio:'NemainÄ«ga Augstuma/Platuma attiecÄ«ba',resetSize:'Atjaunot sÄkotnÄjo izmÄru',border:'RÄmis',hSpace:'HorizontÄlÄ telpa',vSpace:'VertikÄlÄ telpa',alertUrl:'LÅ«dzu norÄdÄ«t attÄla hipersaiti',linkTab:'Hipersaite',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Ä«paÅ¡Ä«bas',propertiesTab:'Properties',title:'Flash Ä«paÅ¡Ä«bas',chkPlay:'AutomÄtiska atskaÅoÅ¡ana',chkLoop:'NepÄrtraukti',chkMenu:'Atļaut Flash izvÄlni',chkFull:'Allow Fullscreen',scale:'MainÄ«t izmÄru',scaleAll:'RÄdÄ«t visu',scaleNoBorder:'Bez rÄmja',scaleFit:'PrecÄ«zs izmÄrs',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'AbsolÅ«ti apakÅ¡Ä',alignAbsMiddle:'AbsolÅ«ti vertikÄli centrÄts',alignBaseline:'PamatrindÄ',alignTextTop:'Teksta augÅ¡Ä',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fona krÄsa',hSpace:'HorizontÄlÄ telpa',vSpace:'VertikÄlÄ telpa',validateSrc:'LÅ«dzu norÄdi hipersaiti',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'PareizrakstÄ«bas pÄrbaude',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Netika atrasts vÄrdnÄ«cÄ',changeTo:'NomainÄ«t uz',btnIgnore:'IgnorÄt',btnIgnoreAll:'IgnorÄt visu',btnReplace:'Aizvietot',btnReplaceAll:'Aizvietot visu',btnUndo:'Atcelt',noSuggestions:'- Nav ieteikumu -',progress:'Notiek pareizrakstÄ«bas pÄrbaude...',noMispell:'PareizrakstÄ«bas pÄrbaude pabeigta: kļūdas netika atrastas',noChanges:'PareizrakstÄ«bas pÄrbaude pabeigta: nekas netika labots',oneChange:'PareizrakstÄ«bas pÄrbaude pabeigta: 1 vÄrds izmainÄ«ts',manyChanges:'PareizrakstÄ«bas pÄrbaude pabeigta: %1 vÄrdi tika mainÄ«ti',ieSpellDownload:'PareizrakstÄ«bas pÄrbaudÄ«tÄjs nav pievienots. Vai vÄlaties to lejupielÄdÄt tagad?'},smiley:{toolbar:'SmaidiÅi',title:'Ievietot smaidiÅu',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'NumurÄts saraksts',bulletedlist:'Izcelts saraksts',indent:'PalielinÄt atkÄpi',outdent:'SamazinÄt atkÄpi',justify:{left:'IzlÄ«dzinÄt pa kreisi',center:'IzlÄ«dzinÄt pret centru',right:'IzlÄ«dzinÄt pa labi',block:'IzlÄ«dzinÄt malas'},blockquote:'Block Quote',clipboard:{title:'Ievietot',cutError:'JÅ«su pÄrlÅ«kprogrammas droÅ¡Ä«bas iestatÄ«jumi nepieļauj editoram automÄtiski veikt izgrieÅ¡anas darbÄ«bu. LÅ«dzu, izmantojiet (Ctrl/Cmd+X, lai veiktu Å¡o darbÄ«bu.',copyError:'JÅ«su pÄrlÅ«kprogrammas droÅ¡Ä«bas iestatÄ«jumi nepieļauj editoram automÄtiski veikt kopÄÅ¡anas darbÄ«bu. LÅ«dzu, izmantojiet (Ctrl/Cmd+C), lai veiktu Å¡o darbÄ«bu.',pasteMsg:'LÅ«dzu, ievietojiet tekstu Å¡ajÄ laukumÄ, izmantojot klaviatÅ«ru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>DarÄ«ts!</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Ievietot no Worda',title:'Ievietot no Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Ievietot kÄ vienkÄrÅ¡u tekstu',title:'Ievietot kÄ vienkÄrÅ¡u tekstu'},templates:{button:'Sagataves',title:'Satura sagataves',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'LÅ«dzu, norÄdiet sagatavi, ko atvÄrt editorÄ<br>(patreizÄjie dati tiks zaudÄti):',emptyListMsg:'(Nav norÄdÄ«tas sagataves)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stils',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'FormÄts',panelTitle:'FormÄts',tag_p:'NormÄls teksts',tag_pre:'FormatÄts teksts',tag_address:'Adrese',tag_h1:'Virsraksts 1',tag_h2:'Virsraksts 2',tag_h3:'Virsraksts 3',tag_h4:'Virsraksts 4',tag_h5:'Virsraksts 5',tag_h6:'Virsraksts 6',tag_div:'Rindkopa (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Å rifts',voiceLabel:'Font',panelTitle:'Å rifts'},fontSize:{label:'IzmÄrs',voiceLabel:'Font Size',panelTitle:'IzmÄrs'},colorButton:{textColorTitle:'Teksta krÄsa',bgColorTitle:'Fona krÄsa',panelTitle:'Colors',auto:'AutomÄtiska',more:'PlaÅ¡Äka palete...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Dokumenta Ä«paÅ¡Ä«bas',title:'Dokumenta Ä«paÅ¡Ä«bas',design:'Design',meta:'META dati',chooseColor:'Choose',other:'<cits>',docTitle:'Dokumenta virsraksts <Title>',charset:'Simbolu kodÄjums',charsetOther:'Cits simbolu kodÄjums',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Dokumenta tips',docTypeOther:'Cits dokumenta tips',xhtmlDec:'Ietvert XHTML deklarÄcijas',bgColor:'Fona krÄsa',bgImage:'Fona attÄla hipersaite',bgFixed:'Fona attÄls ir fiksÄts',txtColor:'Teksta krÄsa',margin:'Lapas robežas',marginTop:'AugÅ¡Ä',marginLeft:'Pa kreisi',marginRight:'Pa labi',marginBottom:'ApakÅ¡Ä',metaKeywords:'Dokumentu aprakstoÅ¡i atslÄgvÄrdi (atdalÄ«ti ar komatu)',metaDescription:'Dokumenta apraksts',metaAuthor:'Autors',metaCopyright:'AutortiesÄ«bas',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/mn.js b/lang/mn.js new file mode 100644 index 0000000..e5ccac2 --- /dev/null +++ b/lang/mn.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.mn={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Ðод',newPage:'Ð¨Ð¸Ð½Ñ Ñ ÑÑдаÑ',save:'Ð¥Ð°Ð´Ð³Ð°Ð»Ð°Ñ ',preview:'УÑидÑлан Ñ Ð°ÑÐ°Ñ ',cut:'ХайÑÐ»Ð°Ñ ',copy:'Ð¥ÑÑÐ»Ð°Ñ ',paste:'ÐÑÑÐ»Ð³Ð°Ñ ',print:'Ð¥ÑвлÑÑ ',underline:'ÐоогÑÑÑ Ð½Ñ Ð·ÑÑааÑÑай Ð±Ð¾Ð»Ð³Ð¾Ñ ',bold:'Тод бүдүүн',italic:'ÐалÑÑ',selectAll:'Ðүгдийг Ð½Ñ ÑÐ¾Ð½Ð³Ð¾Ñ ',removeFormat:'ФоÑÐ¼Ð°Ñ Ð°Ð²Ñ Ñ Ð°ÑÑ ',strike:'ÐÑндÑÑÑ Ð½Ñ Ð·ÑÑааÑÑай Ð±Ð¾Ð»Ð³Ð¾Ñ ',subscript:'СÑÑÑÑ Ð±Ð¾Ð»Ð³Ð¾Ñ ',superscript:'ÐÑÑÑг Ð±Ð¾Ð»Ð³Ð¾Ñ ',horizontalrule:'Хөндлөн зÑÑÐ°Ð°Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',pagebreak:'Ð¥ÑÑÐ´Ð°Ñ ÑÑÑгааÑÐ»Ð°Ð³Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',pagebreakAlt:'Page Break',unlink:'Ðинк Ð°Ð²Ñ Ñ Ð°ÑÑ ',undo:'Ð¥Ò¯Ñингүй Ð±Ð¾Ð»Ð³Ð¾Ñ ',redo:'Ó¨Ð¼Ð½Ó©Ñ Ò¯Ð¹Ð»Ð´Ð»ÑÑ ÑÑÑгÑÑÑ ',common:{browseServer:'СеÑÐ²ÐµÑ Ñ Ð°ÑÑÑÐ»Ð°Ñ ',url:'URL',protocol:'ÐÑоÑокол',upload:'Ð¥ÑÑÐ»Ð°Ñ ',uploadSubmit:'Үүнийг ÑеÑвÑÑÑÒ¯Ò¯ илгÑÑ',image:'ÐÑÑаг',flash:'ФлаÑ',form:'ФоÑм',checkbox:'ЧекбокÑ',radio:'Радио ÑовÑ',textField:'Ð¢ÐµÑ Ñ ÑалбаÑ',textarea:'Ð¢ÐµÑ Ñ Ð¾ÑÑин',hiddenField:'ÐÑÑÑ ÑалбаÑ',button:'ТовÑ',select:'Ð¡Ð¾Ð½Ð³Ð¾Ð³Ñ ÑалбаÑ',imageButton:'ÐÑÑагÑай ÑовÑ',notSet:'<ÐÐ½Ð¾Ð¾Ñ Ð³Ò¯Ð¹>',id:'Id',name:'ÐÑÑ',langDir:'Ð¥Ñлний ÑиглÑл',langDirLtr:'ÐүүнÑÑÑ Ð±Ð°ÑÑÑн (LTR)',langDirRtl:'ÐаÑÑÑÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ (RTL)',langCode:'Ð¥Ñлний код',longDescr:'URL-Ñн ÑайлбаÑ',cssClass:'Stylesheet клаÑÑÑÑд',advisoryTitle:'ÐÓ©Ð²Ð»Ó©Ð»Ð´Ó©Ñ Ð³Ð°ÑÑиг',cssStyle:'ÐагваÑ',ok:'OK',cancel:'ÐÐ¾Ð»Ð¸Ñ ',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'ÐÑмÑлÑ',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Ó¨Ñгөн',height:'ӨндөÑ',align:'ÐгнÑÑ',alignLeft:'Ðүүн',alignRight:'ÐаÑÑÑн',alignCenter:'Төвд',alignTop:'ÐÑÑд Ñалд',alignMiddle:'ÐÑнд Ñалд',alignBottom:'Ðоод Ñалд',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'ÐнÑгой ÑÑмдÑÐ³Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',title:'ÐнÑгой ÑÑмдÑÐ³Ñ ÑÐ¾Ð½Ð³Ð¾Ñ ',options:'Special Character Options'},link:{toolbar:'Ðинк ÐÑÑÑÐ»Ð°Ñ /ÐаÑваÑÐ»Ð°Ñ ',other:'<other>',menu:'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð·Ð°ÑваÑÐ»Ð°Ñ ',title:'Ðинк',info:'Ðинкийн мÑдÑÑлÑл',target:'ÐайÑлал',upload:'Ð¥ÑÑÐ»Ð°Ñ ',advanced:'ÐÑмÑлÑ',type:'Ðинкийн ÑÓ©Ñөл',toUrl:'URL',toAnchor:'ÐÐ½Ñ Ñ ÑÑдаÑÐ°Ð½Ð´Ð°Ñ Ñ Ð¾Ð»Ð±Ð¾Ð¾Ñ',toEmail:'E-Mail',targetFrame:'<ÐгÑÑÐ»Ð°Ñ Ñ Ò¯ÑÑÑ>',targetPopup:'<popup ÑÐ¾Ð½Ñ >',targetFrameName:'ÐÑÐ¸Ñ ÑÑемÑн нÑÑ',targetPopupName:'Popup ÑÐ¾Ð½Ñ Ð½Ñ Ð½ÑÑ',popupFeatures:'Popup ÑÐ¾Ð½Ñ Ð½Ñ Ð¾Ð½Ñлог',popupResizable:'Resizable',popupStatusBar:'СÑаÑÑÑ Ñ ÑÑÑг',popupLocationBar:'Location Ñ ÑÑÑг',popupToolbar:'ÐÐ°Ð³Ð°Ð¶Ð½Ñ Ñ ÑÑÑг',popupMenuBar:'MeÐ½Ñ Ñ ÑÑÑг',popupFullScreen:'Ð¦Ð¾Ð½Ñ Ð´Ò¯Ò¯ÑгÑÑ (IE)',popupScrollBars:'СкÑол Ñ ÑÑÑгүүд',popupDependent:'ХамааÑай (Netscape)',popupLeft:'Ðүүн байÑлал',popupTop:'ÐÑÑд байÑлал',id:'Id',langDir:'Ð¥Ñлний ÑиглÑл',langDirLTR:'ÐүүнÑÑÑ Ð±Ð°ÑÑÑн (LTR)',langDirRTL:'ÐаÑÑÑÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ (RTL)',acccessKey:'Ð¥Ð¾Ð»Ð±Ð¾Ñ ÑÒ¯Ð»Ñ Ò¯Ò¯Ñ',name:'ÐÑÑ',langCode:'Ð¥Ñлний ÑиглÑл',tabIndex:'Tab индекÑ',advisoryTitle:'ÐÓ©Ð²Ð»Ó©Ð»Ð´Ó©Ñ Ð³Ð°ÑÑиг',advisoryContentType:'ÐÓ©Ð²Ð»Ó©Ð»Ð´Ó©Ñ ÑÓ©Ñлийн агÑÑлга',cssClasses:'Stylesheet клаÑÑÑÑд',charset:'ТÑмдÑÐ³Ñ Ð¾Ð½Ð¾Ð¾Ñ Ð½Ó©Ó©Ñөд Ñ Ð¾Ð»Ð±Ð¾Ð³Ð´Ñон',styles:'ÐагваÑ',rel:'Relationship',selectAnchor:'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÑÐ¾Ð½Ð³Ð¾Ñ ',anchorName:'ХолбооÑÑн нÑÑÑÑÑ',anchorId:'ÐлемÑÐ½Ñ Id-гааÑ',emailAddress:'E-Mail ХаÑг',emailSubject:'Message гаÑÑиг',emailBody:'Message-ийн агÑÑлга',noAnchors:'(ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñиг Ñ Ð¾Ð»Ð±Ð¾Ð¾Ñгүй байна)',noUrl:'Ðинк URL-ÑÑ ÑÓ©ÑÓ©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯',noEmail:'Ð-mail Ñ Ð°Ñгаа ÑÓ©ÑÓ©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯'},anchor:{toolbar:'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÐÑÑÑÐ»Ð°Ñ /ÐаÑваÑÐ»Ð°Ñ ',menu:'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ñинж ÑанаÑ',title:'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ñинж ÑанаÑ',name:'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð½ÑÑ',errorName:'Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ ÑÓ©Ñөл оÑÑÑлна ÑÑ',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Хай мөн ÐаÑж биÑ',find:'Ð¥Ð°Ð¹Ñ ',replace:'Ð¡Ð¾Ð»Ð¸Ñ ',findWhat:'Ð¥Ð°Ð¹Ñ Ò¯Ð³/Ò¯ÑÑг:',replaceWith:'Ð¡Ð¾Ð»Ð¸Ñ Ò¯Ð³:',notFoundMsg:'ХайÑан ÑекÑÑ Ð¾Ð»Ñонгүй.',matchCase:'ТÑнÑÑÑ Ñөлөв',matchWord:'ТÑнÑÑÑ Ð±Ò¯ÑÑн үг',matchCyclic:'Match cyclic',replaceAll:'Ðүгдийг Ð½Ñ Ð¡Ð¾Ð»Ð¸Ñ ',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Ð¥Ò¯ÑнÑгÑ',title:'Ð¥Ò¯ÑнÑгÑ',menu:'Ð¥Ò¯ÑнÑгÑ',deleteTable:'Ð¥Ò¯ÑнÑÐ³Ñ ÑÑÑÐ³Ð°Ñ ',rows:'ÐÓ©Ñ',columns:'Ðагана',border:'Ð¥Ò¯ÑÑÑний Ñ ÑмжÑÑ',widthPx:'ÑÑг',widthPc:'Ñ ÑвÑ',widthUnit:'width unit',cellSpace:'ÐÒ¯Ñ Ñ Ð¾Ð¾ÑондÑн зай (spacing)',cellPad:'ÐÒ¯Ñ Ð´Ð¾ÑоÑÐ»Ð¾Ñ (padding)',caption:'ТайлбаÑ',summary:'ТайлбаÑ',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'ÐÒ¯Ñ /зай',insertBefore:'ÐÒ¯Ñ /зай өмнө Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',insertAfter:'ÐÒ¯Ñ /зай даÑаа Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',deleteCell:'ÐÒ¯Ñ ÑÑÑÐ³Ð°Ñ ',merge:'ÐÒ¯Ñ Ð½ÑгÑÑÑ ',mergeRight:'ÐаÑÑÑн ÑÐ¸Ð¹Ñ Ð½ÑгÑгÑÑ ',mergeDown:'ÐÐ¾Ð¾Ñ Ð½ÑгÑгÑÑ ',splitHorizontal:'ÐÒ¯Ñ /зайг боÑÐ¾Ð¾Ð³Ð¾Ð¾Ñ Ð½Ñ ÑÑÑгааÑÐ»Ð°Ñ ',splitVertical:'ÐÒ¯Ñ /зайг Ñ Ó©Ð½Ð´Ð»Ó©Ð½Ð³Ó©Ó©Ñ Ð½Ñ ÑÑÑгааÑÐ»Ð°Ñ ',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'ÐÓ©Ñ',insertBefore:'ÐÓ©Ñ Ó©Ð¼Ð½Ó© Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',insertAfter:'ÐÓ©Ñ Ð´Ð°Ñаа Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',deleteRow:'ÐÓ©Ñ ÑÑÑÐ³Ð°Ñ '},column:{menu:'Ðагана',insertBefore:'Ðагана өмнө Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',insertAfter:'Ðагана даÑаа Ð½Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',deleteColumn:'Ðагана ÑÑÑÐ³Ð°Ñ '}},button:{title:'ТовÑÐ½Ñ Ñинж ÑанаÑ',text:'ТÑкÑÑ (УÑга)',type:'ТөÑөл',typeBtn:'ТовÑ',typeSbm:'Submit',typeRst:'ÐÐ¾Ð»Ð¸Ñ '},checkboxAndRadio:{checkboxTitle:'ЧекбокÑÐ½Ñ Ñинж ÑанаÑ',radioTitle:'Радио ÑовÑÐ½Ñ Ñинж ÑанаÑ',value:'УÑга',selected:'СонгогдÑон'},form:{title:'ФоÑм Ñинж ÑанаÑ',menu:'ФоÑм Ñинж ÑанаÑ',action:'ҮйлдÑл',method:'ÐÑга',encoding:'Encoding'},select:{title:'Ð¡Ð¾Ð³Ð¾Ð³Ñ ÑалбаÑÑн Ñинж ÑанаÑ',selectInfo:'ÐÑдÑÑлÑл',opAvail:'ÐдвÑÑ ÑÑй ÑонголÑ',value:'УÑга',size:'Ð¥ÑмжÑÑ',lines:'ÐÓ©Ñ',chkMulti:'Ðлон ÑÐ¾Ð½Ð³Ð¾Ð»Ñ Ð·Ó©Ð²ÑÓ©Ó©ÑÓ©Ñ ',opText:'ТÑкÑÑ',opValue:'УÑга',btnAdd:'ÐÑмÑÑ ',btnModify:'Ó¨Ó©ÑÑÐ»Ó©Ñ ',btnUp:'ÐÑÑÑ',btnDown:'ÐооÑ',btnSetValue:'СонгогдÑан ÑÑга Ð¾Ð½Ð¾Ð¾Ñ ',btnDelete:'УÑÑÐ³Ð°Ñ '},textarea:{title:'ТекÑÑ Ð¾ÑÑÐ½Ñ Ñинж ÑанаÑ',cols:'Ðагана',rows:'ÐÓ©Ñ'},textfield:{title:'ТекÑÑ ÑалбаÑÑн Ñинж ÑанаÑ',name:'ÐÑÑ',value:'УÑга',charWidth:'ТÑмдÑгÑÑн Ó©Ñгөн',maxChars:'Хамгийн Ð¸Ñ ÑÑмдÑгÑ',type:'ТөÑөл',typeText:'ТекÑÑ',typePass:'ÐÑÑÑ Ò¯Ð³'},hidden:{title:'ÐÑÑÑ ÑалбаÑÑн Ñинж ÑанаÑ',name:'ÐÑÑ',value:'УÑга'},image:{title:'ÐÑÑаг',titleButton:'ÐÑÑган ÑовÑÐ½Ñ Ñинж ÑанаÑ',menu:'ÐÑÑаг',infoTab:'ÐÑÑÐ°Ð³Ð½Ñ Ð¼ÑдÑÑлÑл',btnUpload:'Үүнийг ÑеÑвÑÑÑÒ¯Ò¯ илгÑÑ',upload:'Ð¥ÑÑÐ»Ð°Ñ ',alt:'Ð¢Ð°Ð¹Ð»Ð±Ð°Ñ ÑекÑÑ',lockRatio:'Радио ÑÒ¯Ð³Ð¶Ð¸Ñ ',resetSize:'Ñ ÑмжÑÑ Ð´Ð°Ñ Ð¸Ð½ Ð¾Ð½Ð¾Ð¾Ñ ',border:'Ð¥Ò¯ÑÑÑ',hSpace:'Хөндлөн зай',vSpace:'ÐоÑоо зай',alertUrl:'ÐÑÑÐ°Ð³Ð½Ñ URL-Ñн ÑÓ©Ñлийн Ñонгоно ÑÑ',linkTab:'Ðинк',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Ð¤Ð»Ð°Ñ Ñинж ÑанаÑ',propertiesTab:'Properties',title:'Ð¤Ð»Ð°Ñ Ñинж ÑанаÑ',chkPlay:'ÐвÑомаÑÐ°Ð°Ñ ÑÐ¾Ð³Ð»Ð¾Ñ ',chkLoop:'ÐавÑÐ°Ñ ',chkMenu:'Ð¤Ð»Ð°Ñ ÑÑÑ Ð¸Ð´Ð²ÑÑ Ð¶Ò¯Ò¯Ð»ÑÑ ',chkFull:'Allow Fullscreen',scale:'Ó¨ÑгөгÑÐ³Ó©Ñ ',scaleAll:'Ðүгдийг Ñ Ð°ÑÑÑÐ»Ð°Ñ ',scaleNoBorder:'Ð¥Ò¯ÑÑÑгүй',scaleFit:'Яг ÑааÑÑÑÐ»Ð°Ñ ',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs доод Ñалд',alignAbsMiddle:'Abs ÐÑнд Ñалд',alignBaseline:'Baseline',alignTextTop:'ТекÑÑ Ð´ÑÑÑ',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Ð¤Ð¾Ð½Ð½Ñ Ó©Ð½Ð³Ó©',hSpace:'Хөндлөн зай',vSpace:'ÐоÑоо зай',validateSrc:'Ðинк URL-ÑÑ ÑÓ©ÑÓ©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Үгийн дүÑÑÑ ÑÐ°Ð»Ð³Ð°Ñ ',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ð¢Ð¾Ð»Ñ Ð±Ð¸Ñиггүй',changeTo:'Ó¨Ó©ÑÑÐ»Ó©Ñ ',btnIgnore:'ÐөвÑÓ©Ó©ÑÓ©Ñ ',btnIgnoreAll:'Ðүгдийг зөвÑÓ©Ó©ÑÓ©Ñ ',btnReplace:'ÐаÑж биÑÐ¸Ñ ',btnReplaceAll:'Ðүгдийг ÐаÑж биÑÐ¸Ñ ',btnUndo:'ÐÑÑÐ°Ð°Ñ ',noSuggestions:'- ТайлбаÑгүй -',progress:'ÐÒ¯ÑÑм Ñалгаж байгаа үйл ÑвÑ...',noMispell:'ÐÒ¯ÑÑм Ñалгаад дÑÑÑÑан: Ðлдаа олдÑонгүй',noChanges:'ÐÒ¯ÑÑм Ñалгаад дÑÑÑÑан: үг Ó©Ó©ÑÑлөгдөөгүй',oneChange:'ÐÒ¯ÑÑм Ñалгаад дÑÑÑÑан: 1 үг Ó©Ó©ÑÑлөгдÑөн',manyChanges:'ÐÒ¯ÑÑм Ñалгаад дÑÑÑÑан: %1 үг Ó©Ó©ÑÑлөгдÑөн',ieSpellDownload:'ÐÒ¯ÑÑм ÑÐ°Ð»Ð³Ð°Ð³Ñ ÑÑÑгаагүй байна. ТаÑаж Ð°Ð²Ð°Ñ Ñг Ñ Ò¯ÑÑ Ð±Ð°Ð¹Ð½Ð° ÑÑ?'},smiley:{toolbar:'ТодоÑÑ Ð¾Ð¹Ð»Ð¾Ð»Ñ',title:'ТодоÑÑ Ð¾Ð¹Ð»Ð¾Ð»Ñ Ð¾ÑÑÑÐ»Ð°Ñ ',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ÐÑгааÑлагдÑан жагÑаалÑ',bulletedlist:'ЦÑгÑÑй жагÑаалÑ',indent:'Ðогол Ð¼Ó©Ñ Ñ Ð°ÑÐ°Ñ ',outdent:'Ðогол Ð¼Ó©Ñ Ð½ÑмÑÑ ',justify:{left:'Ðүүн Ñалд байÑлÑÑÐ»Ð°Ñ ',center:'Төвд байÑлÑÑÐ»Ð°Ñ ',right:'ÐаÑÑÑн Ñалд байÑлÑÑÐ»Ð°Ñ ',block:'Ðлок Ñ ÑлбÑÑÑÑÑ Ð±Ð°Ð¹ÑлÑÑÐ»Ð°Ñ '},blockquote:'ХайÑÑÐ°Ð³Ð»Ð°Ñ ',clipboard:{title:'ÐÑÑÐ»Ð³Ð°Ñ ',cutError:'Ð¢Ð°Ð½Ñ browser-Ñн Ñ Ð°Ð¼Ð³Ð°Ð°Ð»Ð°Ð»ÑÑн ÑÐ¾Ñ Ð¸Ñгоо editor-д авÑомаÑÐ°Ð°Ñ Ñ Ð°Ð¹ÑÐ»Ð°Ñ Ò¯Ð¹Ð»Ð´Ñлийг зөвÑÓ©Ó©ÑÓ©Ñ Ð³Ò¯Ð¹ байна. (Ctrl/Cmd+X) ÑовÑÐ½Ñ Ñ Ð¾ÑлолÑг аÑиглана ÑÑ.',copyError:'Ð¢Ð°Ð½Ñ browser-Ñн Ñ Ð°Ð¼Ð³Ð°Ð°Ð»Ð°Ð»ÑÑн ÑÐ¾Ñ Ð¸Ñгоо editor-д авÑомаÑÐ°Ð°Ñ Ñ ÑÑÐ»Ð°Ñ Ò¯Ð¹Ð»Ð´Ñлийг зөвÑÓ©Ó©ÑÓ©Ñ Ð³Ò¯Ð¹ байна. (Ctrl/Cmd+C) ÑовÑÐ½Ñ Ñ Ð¾ÑлолÑг аÑиглана ÑÑ.',pasteMsg:'(<strong>Ctrl/Cmd+V</strong>) ÑовÑийг аÑиглан paste Ñ Ð¸Ð¹Ð½Ñ Ò¯Ò¯. Ðөн <strong>OK</strong> даÑ.',securityMsg:'Ð¢Ð°Ð½Ñ Ò¯Ð·Ò¯Ò¯Ð»ÑгÑ/browser/-н Ñ Ð°Ð¼Ð³Ð°Ð°Ð»Ð°Ð»ÑÑн ÑÐ¾Ñ Ð¸ÑÐ³Ð¾Ð¾Ð½Ð¾Ð¾Ñ Ð±Ð¾Ð»Ð¾Ð¾Ð´ editor clipboard өгөгдөлÑÒ¯Ò¯ ÑÑÑд Ñ Ð°Ð½Ð´Ð°Ñ Ð±Ð¾Ð»Ð¾Ð¼Ð¶Ð³Ò¯Ð¹. ÐÐ½Ñ ÑÐ¾Ð½Ñ Ð¾Ð´ Ð´Ð°Ñ Ð¸Ð½ paste Ñ Ð¸Ð¹Ñ Ð¸Ð¹Ð³ оÑолд.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Word-Ð¾Ð¾Ñ Ð±ÑÑÐ»Ð³Ð°Ñ ',title:'Word-Ð¾Ð¾Ñ Ð±ÑÑÐ»Ð³Ð°Ñ ',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Plain Text-ÑÑÑ Ð±ÑÑÐ»Ð³Ð°Ñ ',title:'Plain Text-ÑÑÑ Ð±ÑÑÐ»Ð³Ð°Ñ '},templates:{button:'ÐагваÑÑÑд',title:'ÐагваÑÑн агÑÑлга',options:'Template Options',insertOption:'Ðдоогийн агÑÑллагÑг даÑж биÑÐ¸Ñ ',selectPromptMsg:'ÐагваÑÑг нÑÑж editor-ÑÒ¯Ò¯ Ñонгож оÑÑÑлна ÑÑ<br />(Ðдоогийн агÑÑллагÑг ÑÑÑаж магадгүй):',emptyListMsg:'(ÐÐ°Ð³Ð²Ð°Ñ ÑодоÑÑ Ð¾Ð¹Ð»Ð¾Ð³Ð´Ð¾Ð¾Ð³Ò¯Ð¹ байна)'},showBlocks:'Block-ÑÑдÑг үзүүлÑÑ ',stylesCombo:{label:'ÐагваÑ',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ФоÑмаÑ',panelTitle:'ФоÑмаÑ',tag_p:'Ð¥Ñвийн',tag_pre:'Formatted',tag_address:'ХаÑг',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Paragraph (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ФонÑ',voiceLabel:'Font',panelTitle:'ФонÑ'},fontSize:{label:'Ð¥ÑмжÑÑ',voiceLabel:'Font Size',panelTitle:'Ð¥ÑмжÑÑ'},colorButton:{textColorTitle:'ФонÑÐ½Ñ Ó©Ð½Ð³Ó©',bgColorTitle:'Ð¤Ð¾Ð½Ð½Ñ Ó©Ð½Ð³Ó©',panelTitle:'Colors',auto:'ÐвÑомаÑааÑ',more:'ÐÑмÑÐ»Ñ Ó©Ð½Ð³Ó©Ð½Ò¯Ò¯Ð´...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñиг Ñинж ÑанаÑ',title:'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñиг Ñинж ÑанаÑ',design:'Design',meta:'Meta өгөгдөл',chooseColor:'Choose',other:'<other>',docTitle:'Ð¥ÑÑдаÑÐ½Ñ Ð³Ð°ÑÑиг',charset:'Encoding ÑÑмдÑгÑ',charsetOther:'Encoding-д Ó©Ó©Ñ ÑÑмдÑÐ³Ñ Ð¾Ð½Ð¾Ð¾Ñ ',charsetASCII:'ASCII',charsetCE:'Төв евÑоп',charsetCT:'Ð¥ÑÑадÑн ÑÐ»Ð°Ð¼Ð¶Ð»Ð°Ð»Ñ (Big5)',charsetCR:'ÐÑил',charsetGR:'ÐÑед',charsetJP:'Япон',charsetKR:'СолонгоÑ',charsetTR:'TÑÑк',charsetUN:'Юникод (UTF-8)',charsetWE:'ÐаÑÑÑн евÑоп',docType:'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñгийн ÑÓ©Ñөл Heading',docTypeOther:'ÐÑÑад баÑÐ¸Ð¼Ñ Ð±Ð¸Ñгийн ÑÓ©Ñөл Heading',xhtmlDec:'XHTML агÑÑлж заÑÐ»Ð°Ñ ',bgColor:'Фоно өнгө',bgImage:'Фоно зÑÑÐ°Ð³Ð½Ñ URL',bgFixed:'ÐүйдÑггүй Ñоно',txtColor:'ФонÑÐ½Ñ Ó©Ð½Ð³Ó©',margin:'Ð¥ÑÑдаÑÐ½Ñ Ð·Ð°Ñ Ñн зай',marginTop:'ÐÑÑд Ñал',marginLeft:'Ðүүн Ñал',marginRight:'ÐаÑÑÑн Ñал',marginBottom:'Ðоод Ñал',metaKeywords:'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñгийн Ð¸Ð½Ð´ÐµÐºÑ ÑÒ¯Ð»Ñ Ò¯Ò¯Ñ Ò¯Ð³ (ÑаÑÐ»Ð°Ð»Ð°Ð°Ñ ÑÑÑгааÑлагдана)',metaDescription:'ÐаÑÐ¸Ð¼Ñ Ð±Ð¸Ñгийн ÑайлбаÑ',metaAuthor:'ÐÐ¾Ñ Ð¸Ð¾Ð³Ñ',metaCopyright:'ÐÐ¾Ñ Ð¸Ð¾Ð³Ñийн ÑÑÑ ',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/ms.js b/lang/ms.js new file mode 100644 index 0000000..e23e747 --- /dev/null +++ b/lang/ms.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.ms={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Sumber',newPage:'Helaian Baru',save:'Simpan',preview:'Prebiu',cut:'Potong',copy:'Salin',paste:'Tampal',print:'Cetak',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Pilih Semua',removeFormat:'Buang Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Masukkan Garisan Membujur',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Buang Sambungan',undo:'Batalkan',redo:'Ulangkan',common:{browseServer:'Browse Server',url:'URL',protocol:'Protokol',upload:'Muat Naik',uploadSubmit:'Hantar ke Server',image:'Gambar',flash:'Flash',form:'Borang',checkbox:'Checkbox',radio:'Butang Radio',textField:'Text Field',textarea:'Textarea',hiddenField:'Field Tersembunyi',button:'Butang',select:'Field Pilihan',imageButton:'Butang Bergambar',notSet:'<tidak di set>',id:'Id',name:'Nama',langDir:'Arah Tulisan',langDirLtr:'Kiri ke Kanan (LTR)',langDirRtl:'Kanan ke Kiri (RTL)',langCode:'Kod Bahasa',longDescr:'Butiran Panjang URL',cssClass:'Kelas-kelas Stylesheet',advisoryTitle:'Tajuk Makluman',cssStyle:'Stail',ok:'OK',cancel:'Batal',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Lebar',height:'Tinggi',align:'Jajaran',alignLeft:'Kiri',alignRight:'Kanan',alignCenter:'Tengah',alignTop:'Atas',alignMiddle:'Pertengahan',alignBottom:'Bawah',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Masukkan Huruf Istimewa',title:'Sila pilih huruf istimewa',options:'Special Character Options'},link:{toolbar:'Masukkan/Sunting Sambungan',other:'<lain>',menu:'Sunting Sambungan',title:'Sambungan',info:'Butiran Sambungan',target:'Sasaran',upload:'Muat Naik',advanced:'Advanced',type:'Jenis Sambungan',toUrl:'URL',toAnchor:'Pautan dalam muka surat ini',toEmail:'E-Mail',targetFrame:'<bingkai>',targetPopup:'<tetingkap popup>',targetFrameName:'Nama Bingkai Sasaran',targetPopupName:'Nama Tetingkap Popup',popupFeatures:'Ciri Tetingkap Popup',popupResizable:'Resizable',popupStatusBar:'Bar Status',popupLocationBar:'Bar Lokasi',popupToolbar:'Toolbar',popupMenuBar:'Bar Menu',popupFullScreen:'Skrin Penuh (IE)',popupScrollBars:'Bar-bar skrol',popupDependent:'Bergantungan (Netscape)',popupLeft:'Posisi Kiri',popupTop:'Posisi Atas',id:'Id',langDir:'Arah Tulisan',langDirLTR:'Kiri ke Kanan (LTR)',langDirRTL:'Kanan ke Kiri (RTL)',acccessKey:'Kunci Akses',name:'Nama',langCode:'Arah Tulisan',tabIndex:'Indeks Tab ',advisoryTitle:'Tajuk Makluman',advisoryContentType:'Jenis Kandungan Makluman',cssClasses:'Kelas-kelas Stylesheet',charset:'Linked Resource Charset',styles:'Stail',rel:'Relationship',selectAnchor:'Sila pilih pautan',anchorName:'dengan menggunakan nama pautan',anchorId:'dengan menggunakan ID elemen',emailAddress:'Alamat E-Mail',emailSubject:'Subjek Mesej',emailBody:'Isi Kandungan Mesej',noAnchors:'(Tiada pautan terdapat dalam dokumen ini)',noUrl:'Sila taip sambungan URL',noEmail:'Sila taip alamat e-mail'},anchor:{toolbar:'Masukkan/Sunting Pautan',menu:'Ciri-ciri Pautan',title:'Ciri-ciri Pautan',name:'Nama Pautan',errorName:'Sila taip nama pautan',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Cari',replace:'Ganti',findWhat:'Perkataan yang dicari:',replaceWith:'Diganti dengan:',notFoundMsg:'Text yang dicari tidak dijumpai.',matchCase:'Padanan case huruf',matchWord:'Padana Keseluruhan perkataan',matchCyclic:'Match cyclic',replaceAll:'Ganti semua',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Jadual',title:'Ciri-ciri Jadual',menu:'Ciri-ciri Jadual',deleteTable:'Delete Table',rows:'Barisan',columns:'Jaluran',border:'Saiz Border',widthPx:'piksel-piksel',widthPc:'peratus',widthUnit:'width unit',cellSpace:'Ruangan Antara Sel',cellPad:'Tambahan Ruang Sel',caption:'Keterangan',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Buangkan Sel-sel',merge:'Cantumkan Sel-sel',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Buangkan Baris'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Buangkan Lajur'}},button:{title:'Ciri-ciri Butang',text:'Teks (Nilai)',type:'Jenis',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Ciri-ciri Checkbox',radioTitle:'Ciri-ciri Butang Radio',value:'Nilai',selected:'Dipilih'},form:{title:'Ciri-ciri Borang',menu:'Ciri-ciri Borang',action:'Tindakan borang',method:'Cara borang dihantar',encoding:'Encoding'},select:{title:'Ciri-ciri Selection Field',selectInfo:'Select Info',opAvail:'Pilihan sediada',value:'Nilai',size:'Saiz',lines:'garisan',chkMulti:'Benarkan pilihan pelbagai',opText:'Teks',opValue:'Nilai',btnAdd:'Tambah Pilihan',btnModify:'Ubah Pilihan',btnUp:'Naik ke atas',btnDown:'Turun ke bawah',btnSetValue:'Set sebagai nilai terpilih',btnDelete:'Padam'},textarea:{title:'Ciri-ciri Textarea',cols:'Lajur',rows:'Baris'},textfield:{title:'Ciri-ciri Text Field',name:'Nama',value:'Nilai',charWidth:'Lebar isian',maxChars:'Isian Maksimum',type:'Jenis',typeText:'Teks',typePass:'Kata Laluan'},hidden:{title:'Ciri-ciri Field Tersembunyi',name:'Nama',value:'Nilai'},image:{title:'Ciri-ciri Imej',titleButton:'Ciri-ciri Butang Bergambar',menu:'Ciri-ciri Imej',infoTab:'Info Imej',btnUpload:'Hantar ke Server',upload:'Muat Naik',alt:'Text Alternatif',lockRatio:'Tetapkan Nisbah',resetSize:'Saiz Set Semula',border:'Border',hSpace:'Ruang Melintang',vSpace:'Ruang Menegak',alertUrl:'Sila taip URL untuk fail gambar',linkTab:'Sambungan',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Bawah Mutlak',alignAbsMiddle:'Pertengahan Mutlak',alignBaseline:'Garis Dasar',alignTextTop:'Atas Text',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Warna Latarbelakang',hSpace:'Ruang Melintang',vSpace:'Ruang Menegak',validateSrc:'Sila taip sambungan URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Semak Ejaan',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Tidak terdapat didalam kamus',changeTo:'Tukarkan kepada',btnIgnore:'Biar',btnIgnoreAll:'Biarkan semua',btnReplace:'Ganti',btnReplaceAll:'Gantikan Semua',btnUndo:'Batalkan',noSuggestions:'- Tiada cadangan -',progress:'Pemeriksaan ejaan sedang diproses...',noMispell:'Pemeriksaan ejaan siap: Tiada salah ejaan',noChanges:'Pemeriksaan ejaan siap: Tiada perkataan diubah',oneChange:'Pemeriksaan ejaan siap: Satu perkataan telah diubah',manyChanges:'Pemeriksaan ejaan siap: %1 perkataan diubah',ieSpellDownload:'Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?'},smiley:{toolbar:'Smiley',title:'Masukkan Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Senarai bernombor',bulletedlist:'Senarai tidak bernombor',indent:'Tambahkan Inden',outdent:'Kurangkan Inden',justify:{left:'Jajaran Kiri',center:'Jajaran Tengah',right:'Jajaran Kanan',block:'Jajaran Blok'},blockquote:'Block Quote',clipboard:{title:'Tampal',cutError:'Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).',copyError:'Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Tampal dari Word',title:'Tampal dari Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Tampal sebagai text biasa',title:'Tampal sebagai text biasa'},templates:{button:'Templat',title:'Templat Kandungan',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):',emptyListMsg:'(Tiada Templat Disimpan)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stail',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Telah Diformat',tag_address:'Alamat',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Perenggan (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Saiz',voiceLabel:'Font Size',panelTitle:'Saiz'},colorButton:{textColorTitle:'Warna Text',bgColorTitle:'Warna Latarbelakang',panelTitle:'Colors',auto:'Otomatik',more:'Warna lain-lain...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Ciri-ciri dokumen',title:'Ciri-ciri dokumen',design:'Design',meta:'Data Meta',chooseColor:'Choose',other:'<lain>',docTitle:'Tajuk Muka Surat',charset:'Enkod Set Huruf',charsetOther:'Enkod Set Huruf yang Lain',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Jenis Kepala Dokumen',docTypeOther:'Jenis Kepala Dokumen yang Lain',xhtmlDec:'Masukkan pemula kod XHTML',bgColor:'Warna Latarbelakang',bgImage:'URL Gambar Latarbelakang',bgFixed:'Imej Latarbelakang tanpa Skrol',txtColor:'Warna Text',margin:'Margin Muka Surat',marginTop:'Atas',marginLeft:'Kiri',marginRight:'Kanan',marginBottom:'Bawah',metaKeywords:'Kata Kunci Indeks Dokumen (dipisahkan oleh koma)',metaDescription:'Keterangan Dokumen',metaAuthor:'Penulis',metaCopyright:'Hakcipta',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/nb.js b/lang/nb.js new file mode 100644 index 0000000..66babe7 --- /dev/null +++ b/lang/nb.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.nb={dir:'ltr',editorTitle:'Rikteksteditor, %1, trykk ALT 0 for hjelp.',toolbars:'Editor toolbars',editor:'Rikteksteditor',source:'Kilde',newPage:'Ny side',save:'Lagre',preview:'ForhÃ¥ndsvis',cut:'Klipp ut',copy:'Kopier',paste:'Lim inn',print:'Skriv ut',underline:'Understreking',bold:'Fet',italic:'Kursiv',selectAll:'Merk alt',removeFormat:'Fjern formatering',strike:'Gjennomstreking',subscript:'Senket skrift',superscript:'Hevet skrift',horizontalrule:'Sett inn horisontal linje',pagebreak:'Sett inn sideskift for utskrift',pagebreakAlt:'Sideskift',unlink:'Fjern lenke',undo:'Angre',redo:'Gjør om',common:{browseServer:'Bla igjennom server',url:'URL',protocol:'Protokoll',upload:'Last opp',uploadSubmit:'Send det til serveren',image:'Bilde',flash:'Flash',form:'Skjema',checkbox:'Avmerkingsboks',radio:'Alternativknapp',textField:'Tekstboks',textarea:'TekstomrÃ¥de',hiddenField:'Skjult felt',button:'Knapp',select:'Rullegardinliste',imageButton:'Bildeknapp',notSet:'<ikke satt>',id:'Id',name:'Navn',langDir:'SprÃ¥kretning',langDirLtr:'Venstre til høyre (VTH)',langDirRtl:'Høyre til venstre (HTV)',langCode:'SprÃ¥kkode',longDescr:'Utvidet beskrivelse',cssClass:'Stilarkklasser',advisoryTitle:'Tittel',cssStyle:'Stil',ok:'OK',cancel:'Avbryt',close:'Lukk',preview:'ForhÃ¥ndsvis',generalTab:'Generelt',advancedTab:'Avansert',validateNumberFailed:'Denne verdien er ikke et tall.',confirmNewPage:'Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker pÃ¥ at du vil laste en ny side?',confirmCancel:'Noen av valgene har blitt endret. Er du sikker pÃ¥ at du vil lukke dialogen?',options:'Valg',target:'MÃ¥l',targetNew:'Nytt vindu (_blank)',targetTop:'Hele vindu (_top)',targetSelf:'Samme vindu (_self)',targetParent:'Foreldrevindu (_parent)',langDirLTR:'Venstre til høyre (VTH)',langDirRTL:'Høyre til venstre (HTV)',styles:'Stil',cssClasses:'Stilarkklasser',width:'Bredde',height:'Høyde',align:'Juster',alignLeft:'Venstre',alignRight:'Høyre',alignCenter:'Midtjuster',alignTop:'Topp',alignMiddle:'Midten',alignBottom:'Bunn',invalidHeight:'Høyde mÃ¥ være et tall.',invalidWidth:'Bredde mÃ¥ være et tall.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, utilgjenglig</span>'},contextmenu:{options:'Alternativer for høyreklikkmeny'},specialChar:{toolbar:'Sett inn spesialtegn',title:'Velg spesialtegn',options:'Alternativer for spesialtegn'},link:{toolbar:'Sett inn/Rediger lenke',other:'<annen>',menu:'Rediger lenke',title:'Lenke',info:'Lenkeinfo',target:'MÃ¥l',upload:'Last opp',advanced:'Avansert',type:'Lenketype',toUrl:'URL',toAnchor:'Lenke til anker i teksten',toEmail:'E-post',targetFrame:'<ramme>',targetPopup:'<popup-vindu>',targetFrameName:'MÃ¥lramme',targetPopupName:'Navn pÃ¥ popup-vindu',popupFeatures:'Egenskaper for popup-vindu',popupResizable:'Skalerbar',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Verktøylinje',popupMenuBar:'Menylinje',popupFullScreen:'Fullskjerm (IE)',popupScrollBars:'Scrollbar',popupDependent:'Avhenging (Netscape)',popupLeft:'Venstre posisjon',popupTop:'Topp-posisjon',id:'Id',langDir:'SprÃ¥kretning',langDirLTR:'Venstre til høyre (VTH)',langDirRTL:'Høyre til venstre (HTV)',acccessKey:'Aksessknapp',name:'Navn',langCode:'SprÃ¥kkode',tabIndex:'Tabindeks',advisoryTitle:'Tittel',advisoryContentType:'Type',cssClasses:'Stilarkklasser',charset:'Lenket tegnsett',styles:'Stil',rel:'Relationship',selectAnchor:'Velg et anker',anchorName:'Anker etter navn',anchorId:'Element etter ID',emailAddress:'E-postadresse',emailSubject:'Meldingsemne',emailBody:'Melding',noAnchors:'(Ingen anker i dokumentet)',noUrl:'Vennligst skriv inn lenkens URL',noEmail:'Vennligst skriv inn e-postadressen'},anchor:{toolbar:'Sett inn/Rediger anker',menu:'Egenskaper for anker',title:'Egenskaper for anker',name:'Ankernavn',errorName:'Vennligst skriv inn ankernavnet',remove:'Remove Anchor'},list:{numberedTitle:'Egenskaper for nummerert liste',bulletedTitle:'Egenskaper for punktmerket liste',type:'Type',start:'Start',validateStartNumber:'Starten pÃ¥ listen mÃ¥ være et heltall.',circle:'Sirkel',disc:'Disk',square:'Firkant',none:'Ingen',notset:'<ikke satt>',armenian:'Armensk nummerering',georgian:'Georgisk nummerering (an, ban, gan, osv.)',lowerRoman:'Romertall, smÃ¥ (i, ii, iii, iv, v, osv.)',upperRoman:'Romertall, store (I, II, III, IV, V, osv.)',lowerAlpha:'Alfabetisk, smÃ¥ (a, b, c, d, e, osv.)',upperAlpha:'Alfabetisk, store (A, B, C, D, E, osv.)',lowerGreek:'Gresk, smÃ¥ (alpha, beta, gamma, osv.)',decimal:'Tall (1, 2, 3, osv.)',decimalLeadingZero:'Tall, med førstesiffer null (01, 02, 03, osv.)'},findAndReplace:{title:'Søk og erstatt',find:'Søk',replace:'Erstatt',findWhat:'Søk etter:',replaceWith:'Erstatt med:',notFoundMsg:'Fant ikke søketeksten.',matchCase:'Skill mellom store og smÃ¥ bokstaver',matchWord:'Bare hele ord',matchCyclic:'Søk i hele dokumentet',replaceAll:'Erstatt alle',replaceSuccessMsg:'%1 tilfelle(r) erstattet.'},table:{toolbar:'Tabell',title:'Egenskaper for tabell',menu:'Egenskaper for tabell',deleteTable:'Slett tabell',rows:'Rader',columns:'Kolonner',border:'Rammestørrelse',widthPx:'piksler',widthPc:'prosent',widthUnit:'Bredde-enhet',cellSpace:'Cellemarg',cellPad:'Cellepolstring',caption:'Tittel',summary:'Sammendrag',headers:'Overskrifter',headersNone:'Ingen',headersColumn:'Første kolonne',headersRow:'Første rad',headersBoth:'Begge',invalidRows:'Antall rader mÃ¥ være et tall større enn 0.',invalidCols:'Antall kolonner mÃ¥ være et tall større enn 0.',invalidBorder:'Rammestørrelse mÃ¥ være et tall.',invalidWidth:'Tabellbredde mÃ¥ være et tall.',invalidHeight:'Tabellhøyde mÃ¥ være et tall.',invalidCellSpacing:'Cellemarg mÃ¥ være et tall.',invalidCellPadding:'Cellepolstring mÃ¥ være et tall.',cell:{menu:'Celle',insertBefore:'Sett inn celle før',insertAfter:'Sett inn celle etter',deleteCell:'Slett celler',merge:'SlÃ¥ sammen celler',mergeRight:'SlÃ¥ sammen høyre',mergeDown:'SlÃ¥ sammen ned',splitHorizontal:'Del celle horisontalt',splitVertical:'Del celle vertikalt',title:'Celleegenskaper',cellType:'Celletype',rowSpan:'Radspenn',colSpan:'Kolonnespenn',wordWrap:'Tekstbrytning',hAlign:'Horisontal justering',vAlign:'Vertikal justering',alignBaseline:'Grunnlinje',bgColor:'Bakgrunnsfarge',borderColor:'Rammefarge',data:'Data',header:'Overskrift',yes:'Ja',no:'Nei',invalidWidth:'Cellebredde mÃ¥ være et tall.',invalidHeight:'Cellehøyde mÃ¥ være et tall.',invalidRowSpan:'Radspenn mÃ¥ være et heltall.',invalidColSpan:'Kolonnespenn mÃ¥ være et heltall.',chooseColor:'Velg'},row:{menu:'Rader',insertBefore:'Sett inn rad før',insertAfter:'Sett inn rad etter',deleteRow:'Slett rader'},column:{menu:'Kolonne',insertBefore:'Sett inn kolonne før',insertAfter:'Sett inn kolonne etter',deleteColumn:'Slett kolonner'}},button:{title:'Egenskaper for knapp',text:'Tekst (verdi)',type:'Type',typeBtn:'Knapp',typeSbm:'Send',typeRst:'Nullstill'},checkboxAndRadio:{checkboxTitle:'Egenskaper for avmerkingsboks',radioTitle:'Egenskaper for alternativknapp',value:'Verdi',selected:'Valgt'},form:{title:'Egenskaper for skjema',menu:'Egenskaper for skjema',action:'Handling',method:'Metode',encoding:'Encoding'},select:{title:'Egenskaper for rullegardinliste',selectInfo:'Info',opAvail:'Tilgjenglige alternativer',value:'Verdi',size:'Størrelse',lines:'Linjer',chkMulti:'Tillat flervalg',opText:'Tekst',opValue:'Verdi',btnAdd:'Legg til',btnModify:'Endre',btnUp:'Opp',btnDown:'Ned',btnSetValue:'Sett som valgt',btnDelete:'Slett'},textarea:{title:'Egenskaper for tekstomrÃ¥de',cols:'Kolonner',rows:'Rader'},textfield:{title:'Egenskaper for tekstfelt',name:'Navn',value:'Verdi',charWidth:'Tegnbredde',maxChars:'Maks antall tegn',type:'Type',typeText:'Tekst',typePass:'Passord'},hidden:{title:'Egenskaper for skjult felt',name:'Navn',value:'Verdi'},image:{title:'Bildeegenskaper',titleButton:'Egenskaper for bildeknapp',menu:'Bildeegenskaper',infoTab:'Bildeinformasjon',btnUpload:'Send det til serveren',upload:'Last opp',alt:'Alternativ tekst',lockRatio:'LÃ¥s forhold',resetSize:'Tilbakestill størrelse',border:'Ramme',hSpace:'HMarg',vSpace:'VMarg',alertUrl:'Vennligst skriv bilde-urlen',linkTab:'Lenke',button2Img:'Vil du endre den valgte bildeknappen til et vanlig bilde?',img2Button:'Vil du endre det valgte bildet til en bildeknapp?',urlMissing:'Bildets adresse mangler.',validateBorder:'Ramme mÃ¥ være et heltall.',validateHSpace:'HMarg mÃ¥ være et heltall.',validateVSpace:'VMarg mÃ¥ være et heltall.'},flash:{properties:'Egenskaper for Flash-objekt',propertiesTab:'Egenskaper',title:'Flash-egenskaper',chkPlay:'Autospill',chkLoop:'Loop',chkMenu:'SlÃ¥ pÃ¥ Flash-meny',chkFull:'Tillat fullskjerm',scale:'Skaler',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Skaler til Ã¥ passe',access:'Scripttilgang',accessAlways:'Alltid',accessSameDomain:'Samme domene',accessNever:'Aldri',alignAbsBottom:'Abs bunn',alignAbsMiddle:'Abs midten',alignBaseline:'Bunnlinje',alignTextTop:'Tekst topp',quality:'Kvalitet',qualityBest:'Best',qualityHigh:'Høy',qualityAutoHigh:'Auto høy',qualityMedium:'Medium',qualityAutoLow:'Auto lav',qualityLow:'Lav',windowModeWindow:'Vindu',windowModeOpaque:'Opaque',windowModeTransparent:'Gjennomsiktig',windowMode:'Vindumodus',flashvars:'Variabler for flash',bgcolor:'Bakgrunnsfarge',hSpace:'HMarg',vSpace:'VMarg',validateSrc:'Vennligst skriv inn lenkens url.',validateHSpace:'HMarg mÃ¥ være et tall.',validateVSpace:'VMarg mÃ¥ være et tall.'},spellCheck:{toolbar:'Stavekontroll',title:'Stavekontroll',notAvailable:'Beklager, tjenesten er utilgjenglig nÃ¥.',errorLoading:'Feil under lasting av applikasjonstjenestetjener: %s.',notInDic:'Ikke i ordboken',changeTo:'Endre til',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer alle',btnReplace:'Erstatt',btnReplaceAll:'Erstatt alle',btnUndo:'Angre',noSuggestions:'- Ingen forslag -',progress:'Stavekontroll pÃ¥gÃ¥r...',noMispell:'Stavekontroll fullført: ingen feilstavinger funnet',noChanges:'Stavekontroll fullført: ingen ord endret',oneChange:'Stavekontroll fullført: Ett ord endret',manyChanges:'Stavekontroll fullført: %1 ord endret',ieSpellDownload:'Stavekontroll er ikke installert. Vil du laste den ned nÃ¥?'},smiley:{toolbar:'Smil',title:'Sett inn smil',options:'Alternativer for smil'},elementsPath:{eleLabel:'Element-sti',eleTitle:'%1 element'},numberedlist:'Legg til/Fjern nummerert liste',bulletedlist:'Legg til/Fjern punktmerket liste',indent:'Ãk innrykk',outdent:'Reduser innrykk',justify:{left:'Venstrejuster',center:'Midtstill',right:'Høyrejuster',block:'Blokkjuster'},blockquote:'Sitatblokk',clipboard:{title:'Lim inn',cutError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl/Cmd+X).',copyError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl/Cmd+C).',pasteMsg:'Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.',securityMsg:'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du mÃ¥ derfor lime det inn pÃ¥ nytt i dette vinduet.',pasteArea:'InnlimingsomrÃ¥de'},pastefromword:{confirmCleanup:'Teksten du limer inn ser ut til Ã¥ være kopiert fra Word. Vil du renske den før du limer den inn?',toolbar:'Lim inn fra Word',title:'Lim inn fra Word',error:'Det var ikke mulig Ã¥ renske den innlimte teksten pÃ¥ grunn av en intern feil'},pasteText:{button:'Lim inn som ren tekst',title:'Lim inn som ren tekst'},templates:{button:'Maler',title:'Innholdsmaler',options:'Alternativer for mal',insertOption:'Erstatt gjeldende innhold',selectPromptMsg:'Velg malen du vil Ã¥pne i redigeringsverktøyet:',emptyListMsg:'(Ingen maler definert)'},showBlocks:'Vis blokker',stylesCombo:{label:'Stil',panelTitle:'Stilformater',panelTitle1:'Blokkstiler',panelTitle2:'Inlinestiler',panelTitle3:'Objektstiler'},format:{label:'Format',panelTitle:'Avsnittsformat',tag_p:'Normal',tag_pre:'Formatert',tag_address:'Adresse',tag_h1:'Overskrift 1',tag_h2:'Overskrift 2',tag_h3:'Overskrift 3',tag_h4:'Overskrift 4',tag_h5:'Overskrift 5',tag_h6:'Overskrift 6',tag_div:'Normal (DIV)'},div:{title:'Sett inn Div Container',toolbar:'Sett inn Div Container',cssClassInputLabel:'Stilark-klasser',styleSelectLabel:'Stil',IdInputLabel:'Id',languageCodeInputLabel:' SprÃ¥kkode',inlineStyleInputLabel:'Inlinestiler',advisoryTitleInputLabel:'Tittel',langDirLabel:'SprÃ¥kretning',langDirLTRLabel:'Venstre til høyre (VTH)',langDirRTLLabel:'Høyre til venstre (HTV)',edit:'Rediger Div',remove:'Fjern Div'},iframe:{title:'Egenskaper for IFrame',toolbar:'IFrame',noUrl:'Vennligst skriv inn URL for iframe',scrolling:'Aktiver scrollefelt',border:'Viss ramme rundt iframe'},font:{label:'Skrift',voiceLabel:'Font',panelTitle:'Skrift'},fontSize:{label:'Størrelse',voiceLabel:'Font Størrelse',panelTitle:'Størrelse'},colorButton:{textColorTitle:'Tekstfarge',bgColorTitle:'Bakgrunnsfarge',panelTitle:'Farger',auto:'Automatisk',more:'Flere farger...'},colors:{'000':'Svart',800000:'Rødbrun','8B4513':'Salbrun','2F4F4F':'Grønnsvart','008080':'BlÃ¥grønn','000080':'MarineblÃ¥tt','4B0082':'Indigo',696969:'Mørk grÃ¥',B22222:'Mørkerød',A52A2A:'Brun',DAA520:'Lys brun','006400':'Mørk grønn','40E0D0':'Turkis','0000CD':'Medium blÃ¥',800080:'Purpur',808080:'GrÃ¥',F00:'Rød',FF8C00:'Mørk oransje',FFD700:'Gull','008000':'Grønn','0FF':'Cyan','00F':'BlÃ¥',EE82EE:'Fiolett',A9A9A9:'Svak grÃ¥',FFA07A:'Rosa-oransje',FFA500:'Oransje',FFFF00:'Gul','00FF00':'Lime',AFEEEE:'Svak turkis',ADD8E6:'Lys BlÃ¥',DDA0DD:'Plomme',D3D3D3:'Lys grÃ¥',FFF0F5:'Svak lavendelrosa',FAEBD7:'Antikk-hvit',FFFFE0:'Lys gul',F0FFF0:'Honningmelon',F0FFFF:'Svakt asurblÃ¥tt',F0F8FF:'Svak cyan',E6E6FA:'Lavendel',FFF:'Hvit'},scayt:{title:'Stavekontroll mens du skriver',opera_title:'Ikke støttet av Opera',enable:'SlÃ¥ pÃ¥ SCAYT',disable:'SlÃ¥ av SCAYT',about:'Om SCAYT',toggle:'Veksle SCAYT',options:'Valg',langs:'SprÃ¥k',moreSuggestions:'Flere forslag',ignore:'Ignorer',ignoreAll:'Ignorer Alle',addWord:'Legg til ord',emptyDic:'Ordboknavn bør ikke være tom.',optionsTab:'Valg',allCaps:'Ikke kontroller ord med kun store bokstaver',ignoreDomainNames:'Ikke kontroller domenenavn',mixedCase:'Ikke kontroller ord med blandet smÃ¥ og store bokstaver',mixedWithDigits:'Ikke kontroller ord som inneholder tall',languagesTab:'SprÃ¥k',dictionariesTab:'Ordbøker',dic_field_name:'Ordboknavn',dic_create:'Opprett',dic_restore:'Gjenopprett',dic_delete:'Slett',dic_rename:'Gi nytt navn',dic_info:'Brukerordboken lagres først i en informasjonskapsel pÃ¥ din maskin, men det er en begrensning pÃ¥ hvor mye som kan lagres her. NÃ¥r ordboken blir for stor til Ã¥ lagres i en informasjonskapsel, vil vi i stedet lagre ordboken pÃ¥ vÃ¥r server. For Ã¥ lagre din personlige ordbok pÃ¥ vÃ¥r server, burde du velge et navn for ordboken din. Hvis du allerede har lagret en ordbok, vennligst skriv inn ordbokens navn og klikk pÃ¥ Gjenopprett-knappen.',aboutTab:'Om'},about:{title:'Om CKEditor',dlgTitle:'Om CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For lisensieringsinformasjon, vennligst besøk vÃ¥rt nettsted:',copy:'Copyright © $1. Alle rettigheter reservert.'},maximize:'Maksimer',minimize:'Minimer',fakeobjects:{anchor:'Anker',flash:'Flash-animasjon',iframe:'IFrame',hiddenfield:'Skjult felt',unknown:'Ukjent objekt'},resize:'Dra for Ã¥ skalere',colordialog:{title:'Velg farge',options:'Alternativer for farge',highlight:'Merk',selected:'Valgt',clear:'Tøm'},toolbarCollapse:'Skjul verktøylinje',toolbarExpand:'Vis verktøylinje',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Tekstretning fra venstre til høyre',rtl:'Tekstretning fra høyre til venstre'},docprops:{label:'Dokumentegenskaper',title:'Dokumentegenskaper',design:'Design',meta:'Meta-data',chooseColor:'Velg',other:'<annen>',docTitle:'Sidetittel',charset:'Tegnsett',charsetOther:'Annet tegnsett',charsetASCII:'ASCII',charsetCE:'Sentraleuropeisk',charsetCT:'Tradisonell kinesisk(Big5)',charsetCR:'Cyrillic',charsetGR:'Gresk',charsetJP:'Japansk',charsetKR:'Koreansk',charsetTR:'Tyrkisk',charsetUN:'Unicode (UTF-8)',charsetWE:'Vesteuropeisk',docType:'Dokumenttype header',docTypeOther:'Annet dokumenttype header',xhtmlDec:'Inkluder XHTML-deklarasjon',bgColor:'Bakgrunnsfarge',bgImage:'URL for bakgrunnsbilde',bgFixed:'LÃ¥s bakgrunnsbilde',txtColor:'Tekstfarge',margin:'Sidemargin',marginTop:'Topp',marginLeft:'Venstre',marginRight:'Høyre',marginBottom:'Bunn',metaKeywords:'Dokument nøkkelord (kommaseparert)',metaDescription:'Dokumentbeskrivelse',metaAuthor:'Forfatter',metaCopyright:'Kopirett',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/nl.js b/lang/nl.js new file mode 100644 index 0000000..36b4767 --- /dev/null +++ b/lang/nl.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.nl={dir:'ltr',editorTitle:'Tekstverwerker, %1, druk op ALT 0 voor hulp.',toolbars:'Werkbalken',editor:'Tekstverwerker',source:'Code',newPage:'Nieuwe pagina',save:'Opslaan',preview:'Voorbeeld',cut:'Knippen',copy:'Kopiëren',paste:'Plakken',print:'Printen',underline:'Onderstreept',bold:'Vet',italic:'Schuingedrukt',selectAll:'Alles selecteren',removeFormat:'Opmaak verwijderen',strike:'Doorhalen',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Horizontale lijn invoegen',pagebreak:'Pagina-einde invoegen',pagebreakAlt:'Pagina-einde',unlink:'Link verwijderen',undo:'Ongedaan maken',redo:'Opnieuw uitvoeren',common:{browseServer:'Bladeren op server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Naar server verzenden',image:'Afbeelding',flash:'Flash',form:'Formulier',checkbox:'Aanvinkvakje',radio:'Selectievakje',textField:'Tekstveld',textarea:'Tekstvak',hiddenField:'Verborgen veld',button:'Knop',select:'Selectieveld',imageButton:'Afbeeldingsknop',notSet:'<niet ingevuld>',id:'Kenmerk',name:'Naam',langDir:'Schrijfrichting',langDirLtr:'Links naar rechts (LTR)',langDirRtl:'Rechts naar links (RTL)',langCode:'Taalcode',longDescr:'Lange URL-omschrijving',cssClass:'Stylesheet-klassen',advisoryTitle:'Aanbevolen titel',cssStyle:'Stijl',ok:'OK',cancel:'Annuleren',close:'Sluiten',preview:'Voorbeeld',generalTab:'Algemeen',advancedTab:'Geavanceerd',validateNumberFailed:'Deze waarde is geen geldig getal.',confirmNewPage:'Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?',confirmCancel:'Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?',options:'Opties',target:'Doel',targetNew:'Nieuw venster (_blank)',targetTop:'Hele venster (_top)',targetSelf:'Zelfde venster (_self)',targetParent:'Origineel venster (_parent)',langDirLTR:'Links naar rechts (LTR)',langDirRTL:'Rechts naar links (RTL)',styles:'Stijlen',cssClasses:'Stylesheet klassen',width:'Breedte',height:'Hoogte',align:'Uitlijning',alignLeft:'Links',alignRight:'Rechts',alignCenter:'Centreren',alignTop:'Boven',alignMiddle:'Midden',alignBottom:'Beneden',invalidHeight:'De hoogte moet een getal zijn.',invalidWidth:'De breedte moet een getal zijn.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, niet beschikbaar</span>'},contextmenu:{options:'Context menu opties'},specialChar:{toolbar:'Speciaal teken invoegen',title:'Selecteer speciaal teken',options:'Speciale tekens opties'},link:{toolbar:'Link invoegen/wijzigen',other:'<ander>',menu:'Link wijzigen',title:'Link',info:'Linkomschrijving',target:'Doel',upload:'Upload',advanced:'Geavanceerd',type:'Linktype',toUrl:'URL',toAnchor:'Interne link in pagina',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Naam doelframe',targetPopupName:'Naam popupvenster',popupFeatures:'Instellingen popupvenster',popupResizable:'Herschaalbaar',popupStatusBar:'Statusbalk',popupLocationBar:'Locatiemenu',popupToolbar:'Menubalk',popupMenuBar:'Menubalk',popupFullScreen:'Volledig scherm (IE)',popupScrollBars:'Schuifbalken',popupDependent:'Afhankelijk (Netscape)',popupLeft:'Positie links',popupTop:'Positie boven',id:'Id',langDir:'Schrijfrichting',langDirLTR:'Links naar rechts (LTR)',langDirRTL:'Rechts naar links (RTL)',acccessKey:'Toegangstoets',name:'Naam',langCode:'Schrijfrichting',tabIndex:'Tabvolgorde',advisoryTitle:'Aanbevolen titel',advisoryContentType:'Aanbevolen content-type',cssClasses:'Stylesheet-klassen',charset:'Karakterset van gelinkte bron',styles:'Stijl',rel:'Relatie',selectAnchor:'Kies een interne link',anchorName:'Op naam interne link',anchorId:'Op kenmerk interne link',emailAddress:'E-mailadres',emailSubject:'Onderwerp bericht',emailBody:'Inhoud bericht',noAnchors:'(Geen interne links in document gevonden)',noUrl:'Geef de link van de URL',noEmail:'Geef een e-mailadres'},anchor:{toolbar:'Interne link',menu:'Eigenschappen interne link',title:'Eigenschappen interne link',name:'Naam interne link',errorName:'Geef de naam van de interne link op',remove:'Remove Anchor'},list:{numberedTitle:'Eigenschappen genummerde lijst',bulletedTitle:'Eigenschappen lijst met opsommingstekens',type:'Type',start:'Start',validateStartNumber:'Starnummer van de lijst moet een heel nummer zijn.',circle:'Cirkel',disc:'Schijf',square:'Vierkant',none:'Geen',notset:'<niet gezet>',armenian:'Armeense numering',georgian:'Greorgische numering (an, ban, gan, etc.)',lowerRoman:'Romeins kleine letters (i, ii, iii, iv, v, etc.)',upperRoman:'Romeins hoofdletters (I, II, III, IV, V, etc.)',lowerAlpha:'Kleine letters (a, b, c, d, e, etc.)',upperAlpha:'Hoofdletters (A, B, C, D, E, etc.)',lowerGreek:'Grieks kleine letters (alpha, beta, gamma, etc.)',decimal:'Cijfers (1, 2, 3, etc.)',decimalLeadingZero:'Cijfers beginnen met nul (01, 02, 03, etc.)'},findAndReplace:{title:'Zoeken en vervangen',find:'Zoeken',replace:'Vervangen',findWhat:'Zoeken naar:',replaceWith:'Vervangen met:',notFoundMsg:'De opgegeven tekst is niet gevonden.',matchCase:'Hoofdlettergevoelig',matchWord:'Hele woord moet voorkomen',matchCyclic:'Doorlopend zoeken',replaceAll:'Alles vervangen',replaceSuccessMsg:'%1 resulaten vervangen.'},table:{toolbar:'Tabel',title:'Eigenschappen tabel',menu:'Eigenschappen tabel',deleteTable:'Tabel verwijderen',rows:'Rijen',columns:'Kolommen',border:'Breedte rand',widthPx:'pixels',widthPc:'procent',widthUnit:'eenheid breedte',cellSpace:'Afstand tussen cellen',cellPad:'Ruimte in de cel',caption:'Naam',summary:'Samenvatting',headers:'Koppen',headersNone:'Geen',headersColumn:'Eerste kolom',headersRow:'Eerste rij',headersBoth:'Beide',invalidRows:'Het aantal rijen moet een getal zijn groter dan 0.',invalidCols:'Het aantal kolommen moet een getal zijn groter dan 0.',invalidBorder:'De rand breedte moet een getal zijn.',invalidWidth:'De tabel breedte moet een getal zijn.',invalidHeight:'De tabel hoogte moet een getal zijn.',invalidCellSpacing:'Afstand tussen cellen moet een getal zijn.',invalidCellPadding:'Ruimte in de cel moet een getal zijn.',cell:{menu:'Cel',insertBefore:'Voeg cel in voor',insertAfter:'Voeg cel in achter',deleteCell:'Cellen verwijderen',merge:'Cellen samenvoegen',mergeRight:'Voeg samen naar rechts',mergeDown:'Voeg samen naar beneden',splitHorizontal:'Splits cellen horizontaal',splitVertical:'Splits cellen verticaal',title:'Cel eigenschappen',cellType:'Cel type',rowSpan:'Rijen samenvoegen',colSpan:'Kolommen samenvoegen',wordWrap:'Automatische terugloop',hAlign:'Horizontale uitlijning',vAlign:'Verticale uitlijning',alignBaseline:'Basislijn',bgColor:'Achtergrondkleur',borderColor:'Kleur rand',data:'Inhoud',header:'Kop',yes:'Ja',no:'Nee',invalidWidth:'De celbreedte moet een getal zijn.',invalidHeight:'De celhoogte moet een getal zijn.',invalidRowSpan:'Rijen samenvoegen moet een heel getal zijn.',invalidColSpan:'Kolommen samenvoegen moet een heel getal zijn.',chooseColor:'Kies'},row:{menu:'Rij',insertBefore:'Voeg rij in voor',insertAfter:'Voeg rij in achter',deleteRow:'Rijen verwijderen'},column:{menu:'Kolom',insertBefore:'Voeg kolom in voor',insertAfter:'Voeg kolom in achter',deleteColumn:'Kolommen verwijderen'}},button:{title:'Eigenschappen knop',text:'Tekst (waarde)',type:'Soort',typeBtn:'Knop',typeSbm:'Versturen',typeRst:'Leegmaken'},checkboxAndRadio:{checkboxTitle:'Eigenschappen aanvinkvakje',radioTitle:'Eigenschappen selectievakje',value:'Waarde',selected:'Geselecteerd'},form:{title:'Eigenschappen formulier',menu:'Eigenschappen formulier',action:'Actie',method:'Methode',encoding:'Codering'},select:{title:'Eigenschappen selectieveld',selectInfo:'Informatie',opAvail:'Beschikbare opties',value:'Waarde',size:'Grootte',lines:'Regels',chkMulti:'Gecombineerde selecties toestaan',opText:'Tekst',opValue:'Waarde',btnAdd:'Toevoegen',btnModify:'Wijzigen',btnUp:'Omhoog',btnDown:'Omlaag',btnSetValue:'Als geselecteerde waarde instellen',btnDelete:'Verwijderen'},textarea:{title:'Eigenschappen tekstvak',cols:'Kolommen',rows:'Rijen'},textfield:{title:'Eigenschappen tekstveld',name:'Naam',value:'Waarde',charWidth:'Breedte (tekens)',maxChars:'Maximum aantal tekens',type:'Soort',typeText:'Tekst',typePass:'Wachtwoord'},hidden:{title:'Eigenschappen verborgen veld',name:'Naam',value:'Waarde'},image:{title:'Eigenschappen afbeelding',titleButton:'Eigenschappen afbeeldingsknop',menu:'Eigenschappen afbeelding',infoTab:'Informatie afbeelding',btnUpload:'Naar server verzenden',upload:'Upload',alt:'Alternatieve tekst',lockRatio:'Afmetingen vergrendelen',resetSize:'Afmetingen resetten',border:'Rand',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Geef de URL van de afbeelding',linkTab:'Link',button2Img:'Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?',img2Button:'Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?',urlMissing:'De URL naar de afbeelding ontbreekt.',validateBorder:'Rand moet een heel nummer zijn.',validateHSpace:'HSpace moet een heel nummer zijn.',validateVSpace:'VSpace moet een heel nummer zijn.'},flash:{properties:'Eigenschappen Flash',propertiesTab:'Eigenschappen',title:'Eigenschappen Flash',chkPlay:'Automatisch afspelen',chkLoop:'Herhalen',chkMenu:"Flashmenu's inschakelen",chkFull:'Schermvullend toestaan',scale:'Schaal',scaleAll:'Alles tonen',scaleNoBorder:'Geen rand',scaleFit:'Precies passend',access:'Script toegang',accessAlways:'Altijd',accessSameDomain:'Zelfde domeinnaam',accessNever:'Nooit',alignAbsBottom:'Absoluut-onder',alignAbsMiddle:'Absoluut-midden',alignBaseline:'Basislijn',alignTextTop:'Boven tekst',quality:'Kwaliteit',qualityBest:'Beste',qualityHigh:'Hoog',qualityAutoHigh:'Automatisch hoog',qualityMedium:'Gemiddeld',qualityAutoLow:'Automatisch laag',qualityLow:'Laag',windowModeWindow:'Venster',windowModeOpaque:'Ondoorzichtig',windowModeTransparent:'Doorzichtig',windowMode:'Venster modus',flashvars:'Variabelen voor Flash',bgcolor:'Achtergrondkleur',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Geef de link van de URL',validateHSpace:'De HSpace moet een getal zijn.',validateVSpace:'De VSpace moet een getal zijn.'},spellCheck:{toolbar:'Spellingscontrole',title:'Spellingscontrole',notAvailable:'Excuses, deze dienst is momenteel niet beschikbaar.',errorLoading:'Er is een fout opgetreden bij het laden van de diesnt: %s.',notInDic:'Niet in het woordenboek',changeTo:'Wijzig in',btnIgnore:'Negeren',btnIgnoreAll:'Alles negeren',btnReplace:'Vervangen',btnReplaceAll:'Alles vervangen',btnUndo:'Ongedaan maken',noSuggestions:'-Geen suggesties-',progress:'Bezig met spellingscontrole...',noMispell:'Klaar met spellingscontrole: geen fouten gevonden',noChanges:'Klaar met spellingscontrole: geen woorden aangepast',oneChange:'Klaar met spellingscontrole: één woord aangepast',manyChanges:'Klaar met spellingscontrole: %1 woorden aangepast',ieSpellDownload:'De spellingscontrole niet geïnstalleerd. Wilt u deze nu downloaden?'},smiley:{toolbar:'Smiley',title:'Smiley invoegen',options:'Smiley opties'},elementsPath:{eleLabel:'Elementenpad',eleTitle:'%1 element'},numberedlist:'Genummerde lijst',bulletedlist:'Opsomming',indent:'Inspringen vergroten',outdent:'Inspringen verkleinen',justify:{left:'Links uitlijnen',center:'Centreren',right:'Rechts uitlijnen',block:'Uitvullen'},blockquote:'Citaatblok',clipboard:{title:'Plakken',cutError:'De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.',copyError:'De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.',pasteMsg:'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op <strong>OK</strong>.',securityMsg:'Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.',pasteArea:'Plakgebied'},pastefromword:{confirmCleanup:'De tekst die u plakte lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?',toolbar:'Plakken als Word-gegevens',title:'Plakken als Word-gegevens',error:'Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout'},pasteText:{button:'Plakken als platte tekst',title:'Plakken als platte tekst'},templates:{button:'Sjablonen',title:'Inhoud sjabonen',options:'Template opties',insertOption:'Vervang de huidige inhoud',selectPromptMsg:'Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):',emptyListMsg:'(Geen sjablonen gedefinieerd)'},showBlocks:'Toon blokken',stylesCombo:{label:'Stijl',panelTitle:'Opmaakstijlen',panelTitle1:'Blok stijlen',panelTitle2:'In-line stijlen',panelTitle3:'Object stijlen'},format:{label:'Opmaak',panelTitle:'Opmaak',tag_p:'Normaal',tag_pre:'Met opmaak',tag_address:'Adres',tag_h1:'Kop 1',tag_h2:'Kop 2',tag_h3:'Kop 3',tag_h4:'Kop 4',tag_h5:'Kop 5',tag_h6:'Kop 6',tag_div:'Normaal (DIV)'},div:{title:'Div aanmaken',toolbar:'Div aanmaken',cssClassInputLabel:'Stylesheet klassen',styleSelectLabel:'Stijl',IdInputLabel:'Id',languageCodeInputLabel:' Taalcode',inlineStyleInputLabel:'Inline stijl',advisoryTitleInputLabel:'informatieve titel',langDirLabel:'Schrijfrichting',langDirLTRLabel:'Links naar rechts (LTR)',langDirRTLLabel:'Rechts naar links (RTL)',edit:'Div wijzigen',remove:'Div verwijderen'},iframe:{title:'IFrame eigenschappen',toolbar:'IFrame',noUrl:'Geef de IFrame URL in',scrolling:'Scrollbalken inschakelen',border:'Framerand tonen'},font:{label:'Lettertype',voiceLabel:'Lettertype',panelTitle:'Lettertype'},fontSize:{label:'Lettergrootte',voiceLabel:'Lettergrootte',panelTitle:'Lettergrootte'},colorButton:{textColorTitle:'Tekstkleur',bgColorTitle:'Achtergrondkleur',panelTitle:'Kleuren',auto:'Automatisch',more:'Meer kleuren...'},colors:{'000':'Zwart',800000:'Kastanjebruin','8B4513':'Chocoladebruin','2F4F4F':'Donkerleigrijs','008080':'Blauwgroen','000080':'Marine','4B0082':'Indigo',696969:'Donkergrijs',B22222:'Baksteen',A52A2A:'Bruin',DAA520:'Donkergeel','006400':'Donkergroen','40E0D0':'Turquoise','0000CD':'Middenblauw',800080:'Paars',808080:'Grijs',F00:'Rood',FF8C00:'Donkeroranje',FFD700:'Goud','008000':'Groen','0FF':'Cyaan','00F':'Blauw',EE82EE:'Violet',A9A9A9:'Donkergrijs',FFA07A:'Lichtzalm',FFA500:'Oranje',FFFF00:'Geel','00FF00':'Felgroen',AFEEEE:'Lichtturquoise',ADD8E6:'Lichtblauw',DDA0DD:'Pruim',D3D3D3:'Lichtgrijs',FFF0F5:'Linnen',FAEBD7:'Ivoor',FFFFE0:'Lichtgeel',F0FFF0:'Honingdauw',F0FFFF:'Azuur',F0F8FF:'Licht hemelsblauw',E6E6FA:'Lavendel',FFF:'Wit'},scayt:{title:'Controleer de spelling tijdens het typen',opera_title:'Niet ondersteund door Opera',enable:'SCAYT inschakelen',disable:'SCAYT uitschakelen',about:'Over SCAYT',toggle:'SCAYT in/uitschakelen',options:'Opties',langs:'Talen',moreSuggestions:'Meer suggesties',ignore:'Negeren',ignoreAll:'Alles negeren',addWord:'Woord toevoegen',emptyDic:'De naam van het woordenboek mag niet leeg zijn.',optionsTab:'Opties',allCaps:'Negeer woorden helemaal in hoofdletters',ignoreDomainNames:'Negeer domeinnamen',mixedCase:'Negeer woorden met hoofd- en kleine letters',mixedWithDigits:'Negeer woorden met cijfers',languagesTab:'Talen',dictionariesTab:'Woordenboeken',dic_field_name:'Naam woordenboek',dic_create:'Aanmaken',dic_restore:'Terugzetten',dic_delete:'Verwijderen',dic_rename:'Hernoemen',dic_info:'Initieel wordt het gebruikerswoordenboek opgeslagen in een cookie. Cookies zijn echter beperkt in grootte. Zodra het gebruikerswoordenboek het punt bereikt waarop het niet meer in een cookie opgeslagen kan worden, dan wordt het woordenboek op de server opgeslagen. Om je persoonlijke woordenboek op je eigen server op te slaan, moet je een mapnaam opgeven. Indien je al een woordenboek hebt opgeslagen, typ dan de naam en klik op de Terugzetten knop.',aboutTab:'Over'},about:{title:'Over CKEditor',dlgTitle:'Over CKEditor',help:'Bekijk $1 voor hulp.',userGuide:'CKEditor gebruiksaanwijzing',moreInfo:'Voor licentie informatie, bezoek onze website:',copy:'Copyright © $1. Alle rechten voorbehouden.'},maximize:'Maximaliseren',minimize:'Minimaliseren',fakeobjects:{anchor:'Anker',flash:'Flash animatie',iframe:'IFrame',hiddenfield:'Verborgen veld',unknown:'Onbekend object'},resize:'Sleep om te herschalen',colordialog:{title:'Selecteer kleur',options:'Kleuropties',highlight:'Actief',selected:'Geselecteerd',clear:'Wissen'},toolbarCollapse:'Werkbalk inklappen',toolbarExpand:'Werkbalk uitklappen',toolbarGroups:{document:'Document',clipboard:'Klembord/Ongedaan maken',editing:'Bewerken',forms:'Formulieren',basicstyles:'Basisstijlen',paragraph:'Paragraaf',links:'Links',insert:'Invoegen',styles:'Stijlen',colors:'Kleuren',tools:'Toepassingen'},bidi:{ltr:'Schrijfrichting van links naar rechts',rtl:'Schrijfrichting van rechts naar links'},docprops:{label:'Documenteigenschappen',title:'Documenteigenschappen',design:'Ontwerp',meta:'Meta tags',chooseColor:'Kiezen',other:'Anders...',docTitle:'Paginatitel',charset:'Tekencodering',charsetOther:'Andere tekencodering',charsetASCII:'ASCII',charsetCE:'Centraal Europees',charsetCT:'Tranditioneel Chinees (Big5)',charsetCR:'Cyrillisch',charsetGR:'Grieks',charsetJP:'Japans',charsetKR:'Koreaans',charsetTR:'Turks',charsetUN:'Unicode (UTF-8)',charsetWE:'West Europees',docType:'Documenttype-definitie',docTypeOther:'Andere documenttype-definitie',xhtmlDec:'XHTML declaratie invoegen',bgColor:'Achtergrondkleur',bgImage:'Achtergrondafbeelding URL',bgFixed:'Niet-scrollend (gefixeerde) achtergrond',txtColor:'Tekstkleur',margin:'Pagina marges',marginTop:'Boven',marginLeft:'Links',marginRight:'Rechts',marginBottom:'Onder',metaKeywords:'Trefwoorden voor indexering (komma-gescheiden)',metaDescription:'Documentbeschrijving',metaAuthor:'Auteur',metaCopyright:'Auteursrechten',previewHtml:'<p>Dit is <strong>voorbeeld tekst</strong>. Je gebruikt <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/no.js b/lang/no.js new file mode 100644 index 0000000..799e9e0 --- /dev/null +++ b/lang/no.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.no={dir:'ltr',editorTitle:'Rikteksteditor, %1, trykk ALT 0 for hjelp.',toolbars:'Editor toolbars',editor:'Rikteksteditor',source:'Kilde',newPage:'Ny side',save:'Lagre',preview:'ForhÃ¥ndsvis',cut:'Klipp ut',copy:'Kopier',paste:'Lim inn',print:'Skriv ut',underline:'Understreking',bold:'Fet',italic:'Kursiv',selectAll:'Merk alt',removeFormat:'Fjern formatering',strike:'Gjennomstreking',subscript:'Senket skrift',superscript:'Hevet skrift',horizontalrule:'Sett inn horisontal linje',pagebreak:'Sett inn sideskift for utskrift',pagebreakAlt:'Sideskift',unlink:'Fjern lenke',undo:'Angre',redo:'Gjør om',common:{browseServer:'Bla igjennom server',url:'URL',protocol:'Protokoll',upload:'Last opp',uploadSubmit:'Send det til serveren',image:'Bilde',flash:'Flash',form:'Skjema',checkbox:'Avmerkingsboks',radio:'Alternativknapp',textField:'Tekstboks',textarea:'TekstomrÃ¥de',hiddenField:'Skjult felt',button:'Knapp',select:'Rullegardinliste',imageButton:'Bildeknapp',notSet:'<ikke satt>',id:'Id',name:'Navn',langDir:'SprÃ¥kretning',langDirLtr:'Venstre til høyre (VTH)',langDirRtl:'Høyre til venstre (HTV)',langCode:'SprÃ¥kkode',longDescr:'Utvidet beskrivelse',cssClass:'Stilarkklasser',advisoryTitle:'Tittel',cssStyle:'Stil',ok:'OK',cancel:'Avbryt',close:'Lukk',preview:'ForhÃ¥ndsvis',generalTab:'Generelt',advancedTab:'Avansert',validateNumberFailed:'Denne verdien er ikke et tall.',confirmNewPage:'Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker pÃ¥ at du vil laste en ny side?',confirmCancel:'Noen av valgene har blitt endret. Er du sikker pÃ¥ at du vil lukke dialogen?',options:'Valg',target:'MÃ¥l',targetNew:'Nytt vindu (_blank)',targetTop:'Hele vindu (_top)',targetSelf:'Samme vindu (_self)',targetParent:'Foreldrevindu (_parent)',langDirLTR:'Venstre til høyre (VTH)',langDirRTL:'Høyre til venstre (HTV)',styles:'Stil',cssClasses:'Stilarkklasser',width:'Bredde',height:'Høyde',align:'Juster',alignLeft:'Venstre',alignRight:'Høyre',alignCenter:'Midtjuster',alignTop:'Topp',alignMiddle:'Midten',alignBottom:'Bunn',invalidHeight:'Høyde mÃ¥ være et tall.',invalidWidth:'Bredde mÃ¥ være et tall.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, utilgjenglig</span>'},contextmenu:{options:'Alternativer for høyreklikkmeny'},specialChar:{toolbar:'Sett inn spesialtegn',title:'Velg spesialtegn',options:'Alternativer for spesialtegn'},link:{toolbar:'Sett inn/Rediger lenke',other:'<annen>',menu:'Rediger lenke',title:'Lenke',info:'Lenkeinfo',target:'MÃ¥l',upload:'Last opp',advanced:'Avansert',type:'Lenketype',toUrl:'URL',toAnchor:'Lenke til anker i teksten',toEmail:'E-post',targetFrame:'<ramme>',targetPopup:'<popup-vindu>',targetFrameName:'MÃ¥lramme',targetPopupName:'Navn pÃ¥ popup-vindu',popupFeatures:'Egenskaper for popup-vindu',popupResizable:'Skalerbar',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Verktøylinje',popupMenuBar:'Menylinje',popupFullScreen:'Fullskjerm (IE)',popupScrollBars:'Scrollbar',popupDependent:'Avhenging (Netscape)',popupLeft:'Venstre posisjon',popupTop:'Topp-posisjon',id:'Id',langDir:'SprÃ¥kretning',langDirLTR:'Venstre til høyre (VTH)',langDirRTL:'Høyre til venstre (HTV)',acccessKey:'Aksessknapp',name:'Navn',langCode:'SprÃ¥kkode',tabIndex:'Tabindeks',advisoryTitle:'Tittel',advisoryContentType:'Type',cssClasses:'Stilarkklasser',charset:'Lenket tegnsett',styles:'Stil',rel:'Relationship',selectAnchor:'Velg et anker',anchorName:'Anker etter navn',anchorId:'Element etter ID',emailAddress:'E-postadresse',emailSubject:'Meldingsemne',emailBody:'Melding',noAnchors:'(Ingen anker i dokumentet)',noUrl:'Vennligst skriv inn lenkens URL',noEmail:'Vennligst skriv inn e-postadressen'},anchor:{toolbar:'Sett inn/Rediger anker',menu:'Egenskaper for anker',title:'Egenskaper for anker',name:'Ankernavn',errorName:'Vennligst skriv inn ankernavnet',remove:'Remove Anchor'},list:{numberedTitle:'Egenskaper for nummerert liste',bulletedTitle:'Egenskaper for punktmerket liste',type:'Type',start:'Start',validateStartNumber:'Starten pÃ¥ listen mÃ¥ være et heltall.',circle:'Sirkel',disc:'Disk',square:'Firkant',none:'Ingen',notset:'<ikke satt>',armenian:'Armensk nummerering',georgian:'Georgisk nummerering (an, ban, gan, osv.)',lowerRoman:'Romertall, smÃ¥ (i, ii, iii, iv, v, osv.)',upperRoman:'Romertall, store (I, II, III, IV, V, osv.)',lowerAlpha:'Alfabetisk, smÃ¥ (a, b, c, d, e, osv.)',upperAlpha:'Alfabetisk, store (A, B, C, D, E, osv.)',lowerGreek:'Gresk, smÃ¥ (alpha, beta, gamma, osv.)',decimal:'Tall (1, 2, 3, osv.)',decimalLeadingZero:'Tall, med førstesiffer null (01, 02, 03, osv.)'},findAndReplace:{title:'Søk og erstatt',find:'Søk',replace:'Erstatt',findWhat:'Søk etter:',replaceWith:'Erstatt med:',notFoundMsg:'Fant ikke søketeksten.',matchCase:'Skill mellom store og smÃ¥ bokstaver',matchWord:'Bare hele ord',matchCyclic:'Søk i hele dokumentet',replaceAll:'Erstatt alle',replaceSuccessMsg:'%1 tilfelle(r) erstattet.'},table:{toolbar:'Tabell',title:'Egenskaper for tabell',menu:'Egenskaper for tabell',deleteTable:'Slett tabell',rows:'Rader',columns:'Kolonner',border:'Rammestørrelse',widthPx:'piksler',widthPc:'prosent',widthUnit:'Bredde-enhet',cellSpace:'Cellemarg',cellPad:'Cellepolstring',caption:'Tittel',summary:'Sammendrag',headers:'Overskrifter',headersNone:'Ingen',headersColumn:'Første kolonne',headersRow:'Første rad',headersBoth:'Begge',invalidRows:'Antall rader mÃ¥ være et tall større enn 0.',invalidCols:'Antall kolonner mÃ¥ være et tall større enn 0.',invalidBorder:'Rammestørrelse mÃ¥ være et tall.',invalidWidth:'Tabellbredde mÃ¥ være et tall.',invalidHeight:'Tabellhøyde mÃ¥ være et tall.',invalidCellSpacing:'Cellemarg mÃ¥ være et tall.',invalidCellPadding:'Cellepolstring mÃ¥ være et tall.',cell:{menu:'Celle',insertBefore:'Sett inn celle før',insertAfter:'Sett inn celle etter',deleteCell:'Slett celler',merge:'SlÃ¥ sammen celler',mergeRight:'SlÃ¥ sammen høyre',mergeDown:'SlÃ¥ sammen ned',splitHorizontal:'Del celle horisontalt',splitVertical:'Del celle vertikalt',title:'Celleegenskaper',cellType:'Celletype',rowSpan:'Radspenn',colSpan:'Kolonnespenn',wordWrap:'Tekstbrytning',hAlign:'Horisontal justering',vAlign:'Vertikal justering',alignBaseline:'Grunnlinje',bgColor:'Bakgrunnsfarge',borderColor:'Rammefarge',data:'Data',header:'Overskrift',yes:'Ja',no:'Nei',invalidWidth:'Cellebredde mÃ¥ være et tall.',invalidHeight:'Cellehøyde mÃ¥ være et tall.',invalidRowSpan:'Radspenn mÃ¥ være et heltall.',invalidColSpan:'Kolonnespenn mÃ¥ være et heltall.',chooseColor:'Velg'},row:{menu:'Rader',insertBefore:'Sett inn rad før',insertAfter:'Sett inn rad etter',deleteRow:'Slett rader'},column:{menu:'Kolonne',insertBefore:'Sett inn kolonne før',insertAfter:'Sett inn kolonne etter',deleteColumn:'Slett kolonner'}},button:{title:'Egenskaper for knapp',text:'Tekst (verdi)',type:'Type',typeBtn:'Knapp',typeSbm:'Send',typeRst:'Nullstill'},checkboxAndRadio:{checkboxTitle:'Egenskaper for avmerkingsboks',radioTitle:'Egenskaper for alternativknapp',value:'Verdi',selected:'Valgt'},form:{title:'Egenskaper for skjema',menu:'Egenskaper for skjema',action:'Handling',method:'Metode',encoding:'Encoding'},select:{title:'Egenskaper for rullegardinliste',selectInfo:'Info',opAvail:'Tilgjenglige alternativer',value:'Verdi',size:'Størrelse',lines:'Linjer',chkMulti:'Tillat flervalg',opText:'Tekst',opValue:'Verdi',btnAdd:'Legg til',btnModify:'Endre',btnUp:'Opp',btnDown:'Ned',btnSetValue:'Sett som valgt',btnDelete:'Slett'},textarea:{title:'Egenskaper for tekstomrÃ¥de',cols:'Kolonner',rows:'Rader'},textfield:{title:'Egenskaper for tekstfelt',name:'Navn',value:'Verdi',charWidth:'Tegnbredde',maxChars:'Maks antall tegn',type:'Type',typeText:'Tekst',typePass:'Passord'},hidden:{title:'Egenskaper for skjult felt',name:'Navn',value:'Verdi'},image:{title:'Bildeegenskaper',titleButton:'Egenskaper for bildeknapp',menu:'Bildeegenskaper',infoTab:'Bildeinformasjon',btnUpload:'Send det til serveren',upload:'Last opp',alt:'Alternativ tekst',lockRatio:'LÃ¥s forhold',resetSize:'Tilbakestill størrelse',border:'Ramme',hSpace:'HMarg',vSpace:'VMarg',alertUrl:'Vennligst skriv bilde-urlen',linkTab:'Lenke',button2Img:'Vil du endre den valgte bildeknappen til et vanlig bilde?',img2Button:'Vil du endre det valgte bildet til en bildeknapp?',urlMissing:'Bildets adresse mangler.',validateBorder:'Ramme mÃ¥ være et heltall.',validateHSpace:'HMarg mÃ¥ være et heltall.',validateVSpace:'VMarg mÃ¥ være et heltall.'},flash:{properties:'Egenskaper for Flash-objekt',propertiesTab:'Egenskaper',title:'Flash-egenskaper',chkPlay:'Autospill',chkLoop:'Loop',chkMenu:'SlÃ¥ pÃ¥ Flash-meny',chkFull:'Tillat fullskjerm',scale:'Skaler',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Skaler til Ã¥ passe',access:'Scripttilgang',accessAlways:'Alltid',accessSameDomain:'Samme domene',accessNever:'Aldri',alignAbsBottom:'Abs bunn',alignAbsMiddle:'Abs midten',alignBaseline:'Bunnlinje',alignTextTop:'Tekst topp',quality:'Kvalitet',qualityBest:'Best',qualityHigh:'Høy',qualityAutoHigh:'Auto høy',qualityMedium:'Medium',qualityAutoLow:'Auto lav',qualityLow:'Lav',windowModeWindow:'Vindu',windowModeOpaque:'Opaque',windowModeTransparent:'Gjennomsiktig',windowMode:'Vindumodus',flashvars:'Variabler for flash',bgcolor:'Bakgrunnsfarge',hSpace:'HMarg',vSpace:'VMarg',validateSrc:'Vennligst skriv inn lenkens url.',validateHSpace:'HMarg mÃ¥ være et tall.',validateVSpace:'VMarg mÃ¥ være et tall.'},spellCheck:{toolbar:'Stavekontroll',title:'Stavekontroll',notAvailable:'Beklager, tjenesten er utilgjenglig nÃ¥.',errorLoading:'Feil under lasting av applikasjonstjenestetjener: %s.',notInDic:'Ikke i ordboken',changeTo:'Endre til',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer alle',btnReplace:'Erstatt',btnReplaceAll:'Erstatt alle',btnUndo:'Angre',noSuggestions:'- Ingen forslag -',progress:'Stavekontroll pÃ¥gÃ¥r...',noMispell:'Stavekontroll fullført: ingen feilstavinger funnet',noChanges:'Stavekontroll fullført: ingen ord endret',oneChange:'Stavekontroll fullført: Ett ord endret',manyChanges:'Stavekontroll fullført: %1 ord endret',ieSpellDownload:'Stavekontroll er ikke installert. Vil du laste den ned nÃ¥?'},smiley:{toolbar:'Smil',title:'Sett inn smil',options:'Alternativer for smil'},elementsPath:{eleLabel:'Element-sti',eleTitle:'%1 element'},numberedlist:'Legg til/Fjern nummerert liste',bulletedlist:'Legg til/Fjern punktmerket liste',indent:'Ãk innrykk',outdent:'Reduser innrykk',justify:{left:'Venstrejuster',center:'Midtstill',right:'Høyrejuster',block:'Blokkjuster'},blockquote:'Sitatblokk',clipboard:{title:'Lim inn',cutError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl/Cmd+X).',copyError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl/Cmd+C).',pasteMsg:'Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.',securityMsg:'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du mÃ¥ derfor lime det inn pÃ¥ nytt i dette vinduet.',pasteArea:'InnlimingsomrÃ¥de'},pastefromword:{confirmCleanup:'Teksten du limer inn ser ut til Ã¥ være kopiert fra Word. Vil du renske den før du limer den inn?',toolbar:'Lim inn fra Word',title:'Lim inn fra Word',error:'Det var ikke mulig Ã¥ renske den innlimte teksten pÃ¥ grunn av en intern feil'},pasteText:{button:'Lim inn som ren tekst',title:'Lim inn som ren tekst'},templates:{button:'Maler',title:'Innholdsmaler',options:'Alternativer for mal',insertOption:'Erstatt gjeldende innhold',selectPromptMsg:'Velg malen du vil Ã¥pne i redigeringsverktøyet:',emptyListMsg:'(Ingen maler definert)'},showBlocks:'Vis blokker',stylesCombo:{label:'Stil',panelTitle:'Stilformater',panelTitle1:'Blokkstiler',panelTitle2:'Inlinestiler',panelTitle3:'Objektstiler'},format:{label:'Format',panelTitle:'Avsnittsformat',tag_p:'Normal',tag_pre:'Formatert',tag_address:'Adresse',tag_h1:'Overskrift 1',tag_h2:'Overskrift 2',tag_h3:'Overskrift 3',tag_h4:'Overskrift 4',tag_h5:'Overskrift 5',tag_h6:'Overskrift 6',tag_div:'Normal (DIV)'},div:{title:'Sett inn Div Container',toolbar:'Sett inn Div Container',cssClassInputLabel:'Stilark-klasser',styleSelectLabel:'Stil',IdInputLabel:'Id',languageCodeInputLabel:' SprÃ¥kkode',inlineStyleInputLabel:'Inlinestiler',advisoryTitleInputLabel:'Tittel',langDirLabel:'SprÃ¥kretning',langDirLTRLabel:'Venstre til høyre (VTH)',langDirRTLLabel:'Høyre til venstre (HTV)',edit:'Rediger Div',remove:'Fjern Div'},iframe:{title:'Egenskaper for IFrame',toolbar:'IFrame',noUrl:'Vennligst skriv inn URL for iframe',scrolling:'Aktiver scrollefelt',border:'Viss ramme rundt iframe'},font:{label:'Skrift',voiceLabel:'Font',panelTitle:'Skrift'},fontSize:{label:'Størrelse',voiceLabel:'Font Størrelse',panelTitle:'Størrelse'},colorButton:{textColorTitle:'Tekstfarge',bgColorTitle:'Bakgrunnsfarge',panelTitle:'Farger',auto:'Automatisk',more:'Flere farger...'},colors:{'000':'Svart',800000:'Rødbrun','8B4513':'Salbrun','2F4F4F':'Grønnsvart','008080':'BlÃ¥grønn','000080':'MarineblÃ¥tt','4B0082':'Indigo',696969:'Mørk grÃ¥',B22222:'Mørkerød',A52A2A:'Brun',DAA520:'Lys brun','006400':'Mørk grønn','40E0D0':'Turkis','0000CD':'Medium blÃ¥',800080:'Purpur',808080:'GrÃ¥',F00:'Rød',FF8C00:'Mørk oransje',FFD700:'Gull','008000':'Grønn','0FF':'Cyan','00F':'BlÃ¥',EE82EE:'Fiolett',A9A9A9:'Svak grÃ¥',FFA07A:'Rosa-oransje',FFA500:'Oransje',FFFF00:'Gul','00FF00':'Lime',AFEEEE:'Svak turkis',ADD8E6:'Lys BlÃ¥',DDA0DD:'Plomme',D3D3D3:'Lys grÃ¥',FFF0F5:'Svak lavendelrosa',FAEBD7:'Antikk-hvit',FFFFE0:'Lys gul',F0FFF0:'Honningmelon',F0FFFF:'Svakt asurblÃ¥tt',F0F8FF:'Svak cyan',E6E6FA:'Lavendel',FFF:'Hvit'},scayt:{title:'Stavekontroll mens du skriver',opera_title:'Ikke støttet av Opera',enable:'SlÃ¥ pÃ¥ SCAYT',disable:'SlÃ¥ av SCAYT',about:'Om SCAYT',toggle:'Veksle SCAYT',options:'Valg',langs:'SprÃ¥k',moreSuggestions:'Flere forslag',ignore:'Ignorer',ignoreAll:'Ignorer Alle',addWord:'Legg til ord',emptyDic:'Ordboknavn bør ikke være tom.',optionsTab:'Valg',allCaps:'Ikke kontroller ord med kun store bokstaver',ignoreDomainNames:'Ikke kontroller domenenavn',mixedCase:'Ikke kontroller ord med blandet smÃ¥ og store bokstaver',mixedWithDigits:'Ikke kontroller ord som inneholder tall',languagesTab:'SprÃ¥k',dictionariesTab:'Ordbøker',dic_field_name:'Ordboknavn',dic_create:'Opprett',dic_restore:'Gjenopprett',dic_delete:'Slett',dic_rename:'Gi nytt navn',dic_info:'Brukerordboken lagres først i en informasjonskapsel pÃ¥ din maskin, men det er en begrensning pÃ¥ hvor mye som kan lagres her. NÃ¥r ordboken blir for stor til Ã¥ lagres i en informasjonskapsel, vil vi i stedet lagre ordboken pÃ¥ vÃ¥r server. For Ã¥ lagre din personlige ordbok pÃ¥ vÃ¥r server, burde du velge et navn for ordboken din. Hvis du allerede har lagret en ordbok, vennligst skriv inn ordbokens navn og klikk pÃ¥ Gjenopprett-knappen.',aboutTab:'Om'},about:{title:'Om CKEditor',dlgTitle:'Om CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For lisensieringsinformasjon, vennligst besøk vÃ¥rt nettsted:',copy:'Copyright © $1. Alle rettigheter reservert.'},maximize:'Maksimer',minimize:'Minimer',fakeobjects:{anchor:'Anker',flash:'Flash-animasjon',iframe:'IFrame',hiddenfield:'Skjult felt',unknown:'Ukjent objekt'},resize:'Dra for Ã¥ skalere',colordialog:{title:'Velg farge',options:'Alternativer for farge',highlight:'Merk',selected:'Valgt',clear:'Tøm'},toolbarCollapse:'Skjul verktøylinje',toolbarExpand:'Vis verktøylinje',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Tekstretning fra venstre til høyre',rtl:'Tekstretning fra høyre til venstre'},docprops:{label:'Dokumentegenskaper',title:'Dokumentegenskaper',design:'Design',meta:'Meta-data',chooseColor:'Velg',other:'<annen>',docTitle:'Sidetittel',charset:'Tegnsett',charsetOther:'Annet tegnsett',charsetASCII:'ASCII',charsetCE:'Sentraleuropeisk',charsetCT:'Tradisonell kinesisk(Big5)',charsetCR:'Cyrillic',charsetGR:'Gresk',charsetJP:'Japansk',charsetKR:'Koreansk',charsetTR:'Tyrkisk',charsetUN:'Unicode (UTF-8)',charsetWE:'Vesteuropeisk',docType:'Dokumenttype header',docTypeOther:'Annet dokumenttype header',xhtmlDec:'Inkluder XHTML-deklarasjon',bgColor:'Bakgrunnsfarge',bgImage:'URL for bakgrunnsbilde',bgFixed:'LÃ¥s bakgrunnsbilde',txtColor:'Tekstfarge',margin:'Sidemargin',marginTop:'Topp',marginLeft:'Venstre',marginRight:'Høyre',marginBottom:'Bunn',metaKeywords:'Dokument nøkkelord (kommaseparert)',metaDescription:'Dokumentbeskrivelse',metaAuthor:'Forfatter',metaCopyright:'Kopirett',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/pl.js b/lang/pl.js new file mode 100644 index 0000000..7566eef --- /dev/null +++ b/lang/pl.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.pl={dir:'ltr',editorTitle:'Edytor tekstu sformatowanego, %1, w celu uzyskania pomocy naciÅnij ALT 0.',toolbars:'Paski narzÄdzi edytora',editor:'Edytor tekstu sformatowanego',source:'ŹródÅo dokumentu',newPage:'Nowa strona',save:'Zapisz',preview:'PodglÄ d',cut:'Wytnij',copy:'Kopiuj',paste:'Wklej',print:'Drukuj',underline:'PodkreÅlenie',bold:'Pogrubienie',italic:'Kursywa',selectAll:'Zaznacz wszystko',removeFormat:'UsuÅ formatowanie',strike:'PrzekreÅlenie',subscript:'Indeks dolny',superscript:'Indeks górny',horizontalrule:'Wstaw poziomÄ liniÄ',pagebreak:'Wstaw pdodziaÅ strony',pagebreakAlt:'Wstaw podziaÅ strony',unlink:'UsuÅ odnoÅnik',undo:'Cofnij',redo:'Ponów',common:{browseServer:'PrzeglÄ daj',url:'Adres URL',protocol:'ProtokóÅ',upload:'WyÅlij',uploadSubmit:'WyÅlij',image:'Obrazek',flash:'Flash',form:'Formularz',checkbox:'Pole wyboru (checkbox)',radio:'Przycisk opcji (radio)',textField:'Pole tekstowe',textarea:'Obszar tekstowy',hiddenField:'Pole ukryte',button:'Przycisk',select:'Lista wyboru',imageButton:'Przycisk graficzny',notSet:'<nie ustawiono>',id:'Id',name:'Nazwa',langDir:'Kierunek tekstu',langDirLtr:'Od lewej do prawej (LTR)',langDirRtl:'Od prawej do lewej (RTL)',langCode:'Kod jÄzyka',longDescr:'Adres URL dÅugiego opisu',cssClass:'Nazwa klasy CSS',advisoryTitle:'Opis obiektu docelowego',cssStyle:'Styl',ok:'OK',cancel:'Anuluj',close:'Zamknij',preview:'PodglÄ d',generalTab:'Ogólne',advancedTab:'Zaawansowane',validateNumberFailed:'Ta wartoÅÄ nie jest liczbÄ .',confirmNewPage:'Wszystkie niezapisane zmiany zostanÄ utracone. Czy na pewno wczytaÄ nowÄ stronÄ?',confirmCancel:'Pewne opcje zostaÅy zmienione. Czy na pewno zamknÄ Ä okno dialogowe?',options:'Opcje',target:'Obiekt docelowy',targetNew:'Nowe okno (_blank)',targetTop:'Okno najwyżej w hierarchii (_top)',targetSelf:'To samo okno (_self)',targetParent:'Okno nadrzÄdne (_parent)',langDirLTR:'Od lewej do prawej (LTR)',langDirRTL:'Od prawej do lewej (RTL)',styles:'Style',cssClasses:'Klasy arkusza stylów',width:'SzerokoÅÄ',height:'WysokoÅÄ',align:'Wyrównaj',alignLeft:'Do lewej',alignRight:'Do prawej',alignCenter:'Do Årodka',alignTop:'Do góry',alignMiddle:'Do Årodka',alignBottom:'Do doÅu',invalidHeight:'WysokoÅÄ musi byÄ liczbÄ .',invalidWidth:'SzerokoÅÄ musi byÄ liczbÄ .',invalidCssLength:'WartoÅÄ podana dla pola "%1" musi byÄ liczbÄ dodatniÄ bez jednostki lub z poprawnÄ jednostkÄ dÅugoÅci zgodnÄ z CSS (px, %, in, cm, mm, em, ex, pt lub pc).',invalidHtmlLength:'WartoÅÄ podana dla pola "%1" musi byÄ liczbÄ dodatniÄ bez jednostki lub z poprawnÄ jednostkÄ dÅugoÅci zgodnÄ z HTML (px lub %).',unavailable:'%1<span class="cke_accessibility">, niedostÄpne</span>'},contextmenu:{options:'Opcje menu kontekstowego'},specialChar:{toolbar:'Wstaw znak specjalny',title:'Wybierz znak specjalny',options:'Opcje znaków specjalnych'},link:{toolbar:'Wstaw/edytuj odnoÅnik',other:'<inny>',menu:'Edytuj odnoÅnik',title:'OdnoÅnik',info:'Informacje ',target:'Obiekt docelowy',upload:'WyÅlij',advanced:'Zaawansowane',type:'Typ odnoÅnika',toUrl:'Adres URL',toAnchor:'OdnoÅnik wewnÄ trz strony (kotwica)',toEmail:'Adres e-mail',targetFrame:'<ramka>',targetPopup:'<wyskakujÄ ce okno>',targetFrameName:'Nazwa ramki docelowej',targetPopupName:'Nazwa wyskakujÄ cego okna',popupFeatures:'WÅaÅciwoÅci wyskakujÄ cego okna',popupResizable:'Skalowalny',popupStatusBar:'Pasek statusu',popupLocationBar:'Pasek adresu',popupToolbar:'Pasek narzÄdzi',popupMenuBar:'Pasek menu',popupFullScreen:'PeÅny ekran (IE)',popupScrollBars:'Paski przewijania',popupDependent:'Okno zależne (Netscape)',popupLeft:'Pozycja w poziomie',popupTop:'Pozycja w pionie',id:'Id',langDir:'Kierunek tekstu',langDirLTR:'Od lewej do prawej (LTR)',langDirRTL:'Od prawej do lewej (RTL)',acccessKey:'Klawisz dostÄpu',name:'Nazwa',langCode:'Kod jÄzyka',tabIndex:'Indeks kolejnoÅci',advisoryTitle:'Opis obiektu docelowego',advisoryContentType:'Typ MIME obiektu docelowego',cssClasses:'Nazwa klasy CSS',charset:'Kodowanie znaków obiektu docelowego',styles:'Styl',rel:'Relacja',selectAnchor:'Wybierz kotwicÄ',anchorName:'Wg nazwy',anchorId:'Wg identyfikatora',emailAddress:'Adres e-mail',emailSubject:'Temat',emailBody:'TreÅÄ',noAnchors:'(W dokumencie nie zdefiniowano żadnych kotwic)',noUrl:'Podaj adres URL',noEmail:'Podaj adres e-mail'},anchor:{toolbar:'Wstaw/edytuj kotwicÄ',menu:'WÅaÅciwoÅci kotwicy',title:'WÅaÅciwoÅci kotwicy',name:'Nazwa kotwicy',errorName:'Wpisz nazwÄ kotwicy',remove:'UsuÅ kotwicÄ'},list:{numberedTitle:'WÅaÅciwoÅci list numerowanych',bulletedTitle:'WÅaÅciwoÅci list wypunktowanych',type:'Typ punktora',start:'PoczÄ tek',validateStartNumber:'ListÄ musi rozpoczynaÄ liczba caÅkowita.',circle:'KoÅo',disc:'OkrÄ g',square:'Kwadrat',none:'Brak',notset:'<nie ustawiono>',armenian:'Numerowanie armeÅskie',georgian:'Numerowanie gruziÅskie (an, ban, gan itd.)',lowerRoman:'MaÅe cyfry rzymskie (i, ii, iii, iv, v itd.)',upperRoman:'Duże cyfry rzymskie (I, II, III, IV, V itd.)',lowerAlpha:'MaÅe litery (a, b, c, d, e itd.)',upperAlpha:'Duże litery (A, B, C, D, E itd.)',lowerGreek:'MaÅe litery greckie (alpha, beta, gamma itd.)',decimal:'Liczby (1, 2, 3 itd.)',decimalLeadingZero:'Liczby z poczÄ tkowym zerem (01, 02, 03 itd.)'},findAndReplace:{title:'Znajdź i zamieÅ',find:'Znajdź',replace:'ZamieÅ',findWhat:'Znajdź:',replaceWith:'ZastÄ p przez:',notFoundMsg:'Nie znaleziono szukanego hasÅa.',matchCase:'UwzglÄdnij wielkoÅÄ liter',matchWord:'CaÅe sÅowa',matchCyclic:'Cykliczne dopasowanie',replaceAll:'ZamieÅ wszystko',replaceSuccessMsg:'%1 wystÄ pieÅ zastÄ pionych.'},table:{toolbar:'Tabela',title:'WÅaÅciwoÅci tabeli',menu:'WÅaÅciwoÅci tabeli',deleteTable:'UsuÅ tabelÄ',rows:'Liczba wierszy',columns:'Liczba kolumn',border:'GruboÅÄ obramowania',widthPx:'piksele',widthPc:'%',widthUnit:'jednostka szerokoÅci',cellSpace:'OdstÄp pomiÄdzy komórkami',cellPad:'DopeÅnienie komórek',caption:'TytuÅ',summary:'Podsumowanie',headers:'NagÅówki',headersNone:'Brak',headersColumn:'Pierwsza kolumna',headersRow:'Pierwszy wiersz',headersBoth:'Oba',invalidRows:'Liczba wierszy musi byÄ wiÄksza niż 0.',invalidCols:'Liczba kolumn musi byÄ wiÄksza niż 0.',invalidBorder:'WartoÅÄ obramowania musi byÄ liczbÄ .',invalidWidth:'SzerokoÅÄ tabeli musi byÄ liczbÄ .',invalidHeight:'WysokoÅÄ tabeli musi byÄ liczbÄ .',invalidCellSpacing:'OdstÄp pomiÄdzy komórkami musi byÄ liczbÄ dodatniÄ .',invalidCellPadding:'DopeÅnienie komórek musi byÄ liczbÄ dodatniÄ .',cell:{menu:'Komórka',insertBefore:'Wstaw komórkÄ z lewej',insertAfter:'Wstaw komórkÄ z prawej',deleteCell:'UsuÅ komórki',merge:'PoÅÄ cz komórki',mergeRight:'PoÅÄ cz z komórkÄ z prawej',mergeDown:'PoÅÄ cz z komórkÄ poniżej',splitHorizontal:'Podziel komórkÄ poziomo',splitVertical:'Podziel komórkÄ pionowo',title:'WÅaÅciwoÅci komórki',cellType:'Typ komórki',rowSpan:'Scalenie wierszy',colSpan:'Scalenie komórek',wordWrap:'Zawijanie sÅów',hAlign:'Wyrównanie poziome',vAlign:'Wyrównanie pionowe',alignBaseline:'Linia bazowa',bgColor:'Kolor tÅa',borderColor:'Kolor obramowania',data:'Dane',header:'NagÅowek',yes:'Tak',no:'Nie',invalidWidth:'SzerokoÅÄ komórki musi byÄ liczbÄ .',invalidHeight:'WysokoÅÄ komórki musi byÄ liczbÄ .',invalidRowSpan:'Scalenie wierszy musi byÄ liczbÄ caÅkowitÄ .',invalidColSpan:'Scalenie komórek musi byÄ liczbÄ caÅkowitÄ .',chooseColor:'Wybierz'},row:{menu:'Wiersz',insertBefore:'Wstaw wiersz powyżej',insertAfter:'Wstaw wiersz poniżej',deleteRow:'UsuÅ wiersze'},column:{menu:'Kolumna',insertBefore:'Wstaw kolumnÄ z lewej',insertAfter:'Wstaw kolumnÄ z prawej',deleteColumn:'UsuÅ kolumny'}},button:{title:'WÅaÅciwoÅci przycisku',text:'Tekst (WartoÅÄ)',type:'Typ',typeBtn:'Przycisk',typeSbm:'WyÅlij',typeRst:'WyczyÅÄ'},checkboxAndRadio:{checkboxTitle:'WÅaÅciwoÅci pola wyboru (checkbox)',radioTitle:'WÅaÅciwoÅci przycisku opcji (radio)',value:'WartoÅÄ',selected:'Zaznaczone'},form:{title:'WÅaÅciwoÅci formularza',menu:'WÅaÅciwoÅci formularza',action:'Akcja',method:'Metoda',encoding:'Kodowanie'},select:{title:'WÅaÅciwoÅci listy wyboru',selectInfo:'Informacje',opAvail:'DostÄpne opcje',value:'WartoÅÄ',size:'Rozmiar',lines:'wierszy',chkMulti:'Wielokrotny wybór',opText:'Tekst',opValue:'WartoÅÄ',btnAdd:'Dodaj',btnModify:'ZmieÅ',btnUp:'Do góry',btnDown:'Do doÅu',btnSetValue:'Ustaw jako zaznaczonÄ ',btnDelete:'UsuÅ'},textarea:{title:'WÅaÅciwoÅci obszaru tekstowego',cols:'Liczba kolumn',rows:'Liczba wierszy'},textfield:{title:'WÅaÅciwoÅci pola tekstowego',name:'Nazwa',value:'WartoÅÄ',charWidth:'SzerokoÅÄ w znakach',maxChars:'SzerokoÅÄ maksymalna',type:'Typ',typeText:'Tekst',typePass:'HasÅo'},hidden:{title:'WÅaÅciwoÅci pola ukrytego',name:'Nazwa',value:'WartoÅÄ'},image:{title:'WÅaÅciwoÅci obrazka',titleButton:'WÅaÅciwoÅci przycisku graficznego',menu:'WÅaÅciwoÅci obrazka',infoTab:'Informacje o obrazku',btnUpload:'WyÅlij',upload:'WyÅlij',alt:'Tekst zastÄpczy',lockRatio:'Zablokuj proporcje',resetSize:'PrzywrÃ³Ä rozmiar',border:'Obramowanie',hSpace:'OdstÄp poziomy',vSpace:'OdstÄp pionowy',alertUrl:'Podaj adres obrazka.',linkTab:'HiperÅÄ cze',button2Img:'Czy chcesz przekonwertowaÄ zaznaczony przycisk graficzny do zwykÅego obrazka?',img2Button:'Czy chcesz przekonwertowaÄ zaznaczony obrazek do przycisku graficznego?',urlMissing:'Podaj adres URL obrazka.',validateBorder:'WartoÅÄ obramowania musi byÄ liczbÄ caÅkowitÄ .',validateHSpace:'WartoÅÄ odstÄpu poziomego musi byÄ liczbÄ caÅkowitÄ .',validateVSpace:'WartoÅÄ odstÄpu pionowego musi byÄ liczbÄ caÅkowitÄ .'},flash:{properties:'WÅaÅciwoÅci obiektu Flash',propertiesTab:'WÅaÅciwoÅci',title:'WÅaÅciwoÅci obiektu Flash',chkPlay:'Autoodtwarzanie',chkLoop:'PÄtla',chkMenu:'WÅÄ cz menu',chkFull:'Zezwól na peÅny ekran',scale:'Skaluj',scaleAll:'Pokaż wszystko',scaleNoBorder:'Bez obramowania',scaleFit:'DokÅadne dopasowanie',access:'DostÄp skryptów',accessAlways:'Zawsze',accessSameDomain:'Ta sama domena',accessNever:'Nigdy',alignAbsBottom:'Do doÅu',alignAbsMiddle:'Do Årodka w pionie',alignBaseline:'Do linii bazowej',alignTextTop:'Do góry tekstu',quality:'JakoÅÄ',qualityBest:'Najlepsza',qualityHigh:'Wysoka',qualityAutoHigh:'Auto wysoka',qualityMedium:'Årednia',qualityAutoLow:'Auto niska',qualityLow:'Niska',windowModeWindow:'Okno',windowModeOpaque:'Nieprzezroczyste',windowModeTransparent:'Przezroczyste',windowMode:'Tryb okna',flashvars:'Zmienne obiektu Flash',bgcolor:'Kolor tÅa',hSpace:'OdstÄp poziomy',vSpace:'OdstÄp pionowy',validateSrc:'Podaj adres URL',validateHSpace:'OdstÄp poziomy musi byÄ liczbÄ .',validateVSpace:'OdstÄp pionowy musi byÄ liczbÄ .'},spellCheck:{toolbar:'Sprawdź pisowniÄ',title:'Sprawdź pisowniÄ',notAvailable:'Przepraszamy, ale usÅuga jest obecnie niedostÄpna.',errorLoading:'BÅÄ d wczytywania hosta aplikacji usÅugi: %s.',notInDic:'SÅowa nie ma w sÅowniku',changeTo:'ZmieÅ na',btnIgnore:'Ignoruj',btnIgnoreAll:'Ignoruj wszystkie',btnReplace:'ZmieÅ',btnReplaceAll:'ZmieÅ wszystkie',btnUndo:'Cofnij',noSuggestions:'- Brak sugestii -',progress:'Trwa sprawdzanie...',noMispell:'Sprawdzanie zakoÅczone: nie znaleziono bÅÄdów',noChanges:'Sprawdzanie zakoÅczone: nie zmieniono żadnego sÅowa',oneChange:'Sprawdzanie zakoÅczone: zmieniono jedno sÅowo',manyChanges:'Sprawdzanie zakoÅczone: zmieniono %l sÅów',ieSpellDownload:'SÅownik nie jest zainstalowany. Czy chcesz go pobraÄ?'},smiley:{toolbar:'Emotikony',title:'Wstaw emotikona',options:'Opcje emotikonów'},elementsPath:{eleLabel:'Åcieżka elementów',eleTitle:'element %1'},numberedlist:'Lista numerowana',bulletedlist:'Lista wypunktowana',indent:'ZwiÄksz wciÄcie',outdent:'Zmniejsz wciÄcie',justify:{left:'Wyrównaj do lewej',center:'WyÅrodkuj',right:'Wyrównaj do prawej',block:'Wyjustuj'},blockquote:'Cytat',clipboard:{title:'Wklej',cutError:'Ustawienia bezpieczeÅstwa Twojej przeglÄ darki nie pozwalajÄ na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.',copyError:'Ustawienia bezpieczeÅstwa Twojej przeglÄ darki nie pozwalajÄ na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.',pasteMsg:'Wklej tekst w poniższym polu, używajÄ c skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.',securityMsg:'Zabezpieczenia przeglÄ darki uniemożliwiajÄ wklejenie danych bezpoÅrednio do edytora. ProszÄ ponownie wkleiÄ dane w tym oknie.',pasteArea:'Obszar wklejania'},pastefromword:{confirmCleanup:'Tekst, który chcesz wkleiÄ, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyÅciÄ przed wklejeniem?',toolbar:'Wklej z programu MS Word',title:'Wklej z programu MS Word',error:'Wyczyszczenie wklejonych danych nie byÅo możliwe z powodu wystÄ pienia bÅÄdu.'},pasteText:{button:'Wklej jako czysty tekst',title:'Wklej jako czysty tekst'},templates:{button:'Szablony',title:'Szablony zawartoÅci',options:'Opcje szablonów',insertOption:'ZastÄ p obecnÄ zawartoÅÄ',selectPromptMsg:'Wybierz szablon do otwarcia w edytorze<br>(obecna zawartoÅÄ okna edytora zostanie utracona):',emptyListMsg:'(Brak zdefiniowanych szablonów)'},showBlocks:'Pokaż bloki',stylesCombo:{label:'Styl',panelTitle:'Style formatujÄ ce',panelTitle1:'Style blokowe',panelTitle2:'Style liniowe',panelTitle3:'Style obiektowe'},format:{label:'Format',panelTitle:'Format',tag_p:'Normalny',tag_pre:'Tekst sformatowany',tag_address:'Adres',tag_h1:'NagÅówek 1',tag_h2:'NagÅówek 2',tag_h3:'NagÅówek 3',tag_h4:'NagÅówek 4',tag_h5:'NagÅówek 5',tag_h6:'NagÅówek 6',tag_div:'Normalny (DIV)'},div:{title:'Utwórz pojemnik Div',toolbar:'Utwórz pojemnik Div',cssClassInputLabel:'Klasy arkusza stylów',styleSelectLabel:'Styl',IdInputLabel:'Id',languageCodeInputLabel:'Kod jÄzyka',inlineStyleInputLabel:'Style liniowe',advisoryTitleInputLabel:'Opis obiektu docelowego',langDirLabel:'Kierunek tekstu',langDirLTRLabel:'Od lewej do prawej (LTR)',langDirRTLLabel:'Od prawej do lewej (RTL)',edit:'Edytuj pojemnik Div',remove:'UsuÅ pojemnik Div'},iframe:{title:'WÅaÅciwoÅci elementu IFrame',toolbar:'IFrame',noUrl:'Podaj adres URL elementu IFrame',scrolling:'WÅÄ cz paski przewijania',border:'Pokaż obramowanie obiektu IFrame'},font:{label:'Czcionka',voiceLabel:'Czcionka',panelTitle:'Czcionka'},fontSize:{label:'Rozmiar',voiceLabel:'Rozmiar czcionki',panelTitle:'Rozmiar'},colorButton:{textColorTitle:'Kolor tekstu',bgColorTitle:'Kolor tÅa',panelTitle:'Kolory',auto:'Automatycznie',more:'WiÄcej kolorów...'},colors:{'000':'Czarny',800000:'Kasztanowy','8B4513':'Czekoladowy','2F4F4F':'Ciemnografitowy','008080':'Morski','000080':'Granatowy','4B0082':'Indygo',696969:'Ciemnoszary',B22222:'CzerwieŠżelazowa',A52A2A:'BrÄ zowy',DAA520:'CiemnozÅoty','006400':'Ciemnozielony','40E0D0':'Turkusowy','0000CD':'Ciemnoniebieski',800080:'Purpurowy',808080:'Szary',F00:'Czerwony',FF8C00:'CiemnopomaraÅczowy',FFD700:'ZÅoty','008000':'Zielony','0FF':'Cyjan','00F':'Niebieski',EE82EE:'Fioletowy',A9A9A9:'Przygaszony szary',FFA07A:'Åososiowy',FFA500:'PomaraÅczowy',FFFF00:'ŻóÅty','00FF00':'Limonkowy',AFEEEE:'Bladoturkusowy',ADD8E6:'Jasnoniebieski',DDA0DD:'Åliwkowy',D3D3D3:'Jasnoszary',FFF0F5:'Jasnolawendowy',FAEBD7:'KremowobiaÅy',FFFFE0:'JasnożóÅty',F0FFF0:'Bladozielony',F0FFFF:'Jasnolazurowy',F0F8FF:'JasnobÅÄkitny',E6E6FA:'Lawendowy',FFF:'BiaÅy'},scayt:{title:'Sprawdź pisowniÄ podczas pisania (SCAYT)',opera_title:'Funkcja nie jest obsÅugiwana przez przeglÄ darkÄ Opera',enable:'WÅÄ cz SCAYT',disable:'WyÅÄ cz SCAYT',about:'Informacje o SCAYT',toggle:'PrzeÅÄ cz SCAYT',options:'Opcje',langs:'JÄzyki',moreSuggestions:'WiÄcej sugestii',ignore:'Ignoruj',ignoreAll:'Ignoruj wszystkie',addWord:'Dodaj sÅowo',emptyDic:'Nazwa sÅownika nie może byÄ pusta.',optionsTab:'Opcje',allCaps:'Ignoruj wyrazy pisane dużymi literami',ignoreDomainNames:'Ignoruj nazwy domen',mixedCase:'Ignoruj wyrazy pisane dużymi i maÅymi literami',mixedWithDigits:'Ignoruj wyrazy zawierajÄ ce cyfry',languagesTab:'JÄzyki',dictionariesTab:'SÅowniki',dic_field_name:'Nazwa sÅownika',dic_create:'Utwórz',dic_restore:'PrzywróÄ',dic_delete:'UsuÅ',dic_rename:'ZmieÅ nazwÄ',dic_info:'PoczÄ tkowo sÅownik użytkownika przechowywany jest w cookie. Pliki cookie majÄ jednak ograniczonÄ pojemnoÅÄ. JeÅli sÅownik użytkownika przekroczy wielkoÅÄ dopuszczalnÄ dla pliku cookie, możliwe jest przechowanie go na naszym serwerze. W celu zapisania sÅownika na serwerze niezbÄdne jest nadanie mu nazwy. JeÅli sÅownik zostaÅ już zapisany na serwerze, wystarczy podaÄ jego nazwÄ i nacisnÄ Ä przycisk PrzywróÄ.',aboutTab:'Informacje o SCAYT'},about:{title:'Informacje o programie CKEditor',dlgTitle:'Informacje o programie CKEditor',help:'Pomoc znajdziesz w $1.',userGuide:'podrÄczniku użytkownika programu CKEditor',moreInfo:'Informacje na temat licencji można znaleÅºÄ na naszej stronie:',copy:'Copyright © $1. Wszelkie prawa zastrzeżone.'},maximize:'Maksymalizuj',minimize:'Minimalizuj',fakeobjects:{anchor:'Kotwica',flash:'Animacja Flash',iframe:'IFrame',hiddenfield:'Pole ukryte',unknown:'Nieznany obiekt'},resize:'PrzeciÄ gnij, aby zmieniÄ rozmiar',colordialog:{title:'Wybierz kolor',options:'Opcje koloru',highlight:'Zaznacz',selected:'Wybrany',clear:'WyczyÅÄ'},toolbarCollapse:'ZwiÅ pasek narzÄdzi',toolbarExpand:'RozwiÅ pasek narzÄdzi',toolbarGroups:{document:'Dokument',clipboard:'Schowek/Wstecz',editing:'Edycja',forms:'Formularze',basicstyles:'Style podstawowe',paragraph:'Akapit',links:'HiperÅÄ cza',insert:'Wstawianie',styles:'Style',colors:'Kolory',tools:'NarzÄdzia'},bidi:{ltr:'Kierunek tekstu od lewej strony do prawej',rtl:'Kierunek tekstu od prawej strony do lewej'},docprops:{label:'WÅaÅciwoÅci dokumentu',title:'WÅaÅciwoÅci dokumentu',design:'Projekt strony',meta:'Znaczniki meta',chooseColor:'Wybierz',other:'Inne',docTitle:'TytuÅ strony',charset:'Kodowanie znaków',charsetOther:'Inne kodowanie znaków',charsetASCII:'ASCII',charsetCE:'Årodkowoeuropejskie',charsetCT:'ChiÅskie tradycyjne (Big5)',charsetCR:'Cyrylica',charsetGR:'Greckie',charsetJP:'JapoÅskie',charsetKR:'KoreaÅskie',charsetTR:'Tureckie',charsetUN:'Unicode (UTF-8)',charsetWE:'Zachodnioeuropejskie',docType:'Definicja typu dokumentu',docTypeOther:'Inna definicja typu dokumentu',xhtmlDec:'UwzglÄdnij deklaracje XHTML',bgColor:'Kolor tÅa',bgImage:'Adres URL obrazka tÅa',bgFixed:'TÅo nieruchome (nieprzewijajÄ ce siÄ)',txtColor:'Kolor tekstu',margin:'Marginesy strony',marginTop:'Górny',marginLeft:'Lewy',marginRight:'Prawy',marginBottom:'Dolny',metaKeywords:'SÅowa kluczowe dokumentu (oddzielone przecinkami)',metaDescription:'Opis dokumentu',metaAuthor:'Autor',metaCopyright:'Prawa autorskie',previewHtml:'<p>To jest <strong>przykÅadowy tekst</strong>. Korzystasz z programu <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/pt-br.js b/lang/pt-br.js new file mode 100644 index 0000000..f336881 --- /dev/null +++ b/lang/pt-br.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang['pt-br']={dir:'ltr',editorTitle:'Editor de Texto, %1, pressione ALT 0 para obter ajuda.',toolbars:'Editor toolbars',editor:'Editor de Texto',source:'Código-Fonte',newPage:'Novo',save:'Salvar',preview:'Visualizar',cut:'Recortar',copy:'Copiar',paste:'Colar',print:'Imprimir',underline:'Sublinhado',bold:'Negrito',italic:'Itálico',selectAll:'Selecionar Tudo',removeFormat:'Remover Formatação',strike:'Tachado',subscript:'Subscrito',superscript:'Sobrescrito',horizontalrule:'Inserir Linha Horizontal',pagebreak:'Inserir Quebra de Página',pagebreakAlt:'Page Break',unlink:'Remover Link',undo:'Desfazer',redo:'Refazer',common:{browseServer:'Localizar no Servidor',url:'URL',protocol:'Protocolo',upload:'Enviar ao Servidor',uploadSubmit:'Enviar para o Servidor',image:'Imagem',flash:'Flash',form:'Formulário',checkbox:'Caixa de Seleção',radio:'Botão de Opção',textField:'Caixa de Texto',textarea:'Ãrea de Texto',hiddenField:'Campo Oculto',button:'Botão',select:'Caixa de Listagem',imageButton:'Botão de Imagem',notSet:'<não ajustado>',id:'Id',name:'Nome',langDir:'Direção do idioma',langDirLtr:'Esquerda para Direita (LTR)',langDirRtl:'Direita para Esquerda (RTL)',langCode:'Idioma',longDescr:'Descrição da URL',cssClass:'Classe de CSS',advisoryTitle:'TÃtulo',cssStyle:'Estilos',ok:'OK',cancel:'Cancelar',close:'Fechar',preview:'Visualizar',generalTab:'Geral',advancedTab:'Avançado',validateNumberFailed:'Este valor não é um número.',confirmNewPage:'Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?',confirmCancel:'Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?',options:'Opções',target:'Destino',targetNew:'Nova Janela (_blank)',targetTop:'Janela de Cima (_top)',targetSelf:'Mesma Janela (_self)',targetParent:'Janela Pai (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largura',height:'Altura',align:'Alinhamento',alignLeft:'Esquerda',alignRight:'Direita',alignCenter:'Centralizado',alignTop:'Superior',alignMiddle:'Centralizado',alignBottom:'Inferior',invalidHeight:'A altura tem que ser um número',invalidWidth:'A largura tem que ser um número.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, indisponÃvel</span>'},contextmenu:{options:'Opções Menu de Contexto'},specialChar:{toolbar:'Inserir Caractere Especial',title:'Selecione um Caractere Especial',options:'Opções de Caractere Especial'},link:{toolbar:'Inserir/Editar Link',other:'<outro>',menu:'Editar Link',title:'Editar Link',info:'Informações',target:'Destino',upload:'Enviar ao Servidor',advanced:'Avançado',type:'Tipo de hiperlink',toUrl:'URL',toAnchor:'Ãncora nesta página',toEmail:'E-Mail',targetFrame:'<frame>',targetPopup:'<janela popup>',targetFrameName:'Nome do Frame de Destino',targetPopupName:'Nome da Janela Pop-up',popupFeatures:'Propriedades da Janela Pop-up',popupResizable:'Redimensionável',popupStatusBar:'Barra de Status',popupLocationBar:'Barra de Endereços',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menus',popupFullScreen:'Modo Tela Cheia (IE)',popupScrollBars:'Barras de Rolagem',popupDependent:'Dependente (Netscape)',popupLeft:'Esquerda',popupTop:'Topo',id:'Id',langDir:'Direção do idioma',langDirLTR:'Esquerda para Direita (LTR)',langDirRTL:'Direita para Esquerda (RTL)',acccessKey:'Chave de Acesso',name:'Nome',langCode:'Direção do idioma',tabIndex:'Ãndice de Tabulação',advisoryTitle:'TÃtulo',advisoryContentType:'Tipo de Conteúdo',cssClasses:'Classe de CSS',charset:'Charset do Link',styles:'Estilos',rel:'Relationship',selectAnchor:'Selecione uma âncora',anchorName:'Nome da âncora',anchorId:'Id da âncora',emailAddress:'Endereço E-Mail',emailSubject:'Assunto da Mensagem',emailBody:'Corpo da Mensagem',noAnchors:'(Não há âncoras no documento)',noUrl:'Por favor, digite o endereço do Link',noEmail:'Por favor, digite o endereço de e-mail'},anchor:{toolbar:'Inserir/Editar Ãncora',menu:'Formatar Ãncora',title:'Formatar Ãncora',name:'Nome da Ãncora',errorName:'Por favor, digite o nome da âncora',remove:'Remove Anchor'},list:{numberedTitle:'Propriedades da Lista Numerada',bulletedTitle:'Propriedades da Lista sem Numeros',type:'Tipo',start:'InÃcio',validateStartNumber:'List start number must be a whole number.',circle:'CÃrculo',disc:'Disco',square:'Quadrado',none:'Nenhum',notset:'<não definido>',armenian:'Numeração Armêna',georgian:'Numeração da Geórgia (an, ban, gan, etc.)',lowerRoman:'Numeração Romana minúscula (i, ii, iii, iv, v, etc.)',upperRoman:'Numeração Romana maiúscula (I, II, III, IV, V, etc.)',lowerAlpha:'Numeração Alfabética minúscula (a, b, c, d, e, etc.)',upperAlpha:'Numeração Alfabética Maiúscula (A, B, C, D, E, etc.)',lowerGreek:'Numeração Grega minúscula (alpha, beta, gamma, etc.)',decimal:'Numeração Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Numeração Decimal com zeros (01, 02, 03, etc.)'},findAndReplace:{title:'Localizar e Substituir',find:'Localizar',replace:'Substituir',findWhat:'Procurar por:',replaceWith:'Substituir por:',notFoundMsg:'O texto especificado não foi encontrado.',matchCase:'Coincidir Maiúsculas/Minúsculas',matchWord:'Coincidir a palavra inteira',matchCyclic:'Coincidir cÃclico',replaceAll:'Substituir Tudo',replaceSuccessMsg:'%1 ocorrência(s) substituÃda(s).'},table:{toolbar:'Tabela',title:'Formatar Tabela',menu:'Formatar Tabela',deleteTable:'Apagar Tabela',rows:'Linhas',columns:'Colunas',border:'Borda',widthPx:'pixels',widthPc:'%',widthUnit:'unidade largura',cellSpace:'Espaçamento',cellPad:'Margem interna',caption:'Legenda',summary:'Resumo',headers:'Cabeçalho',headersNone:'Nenhum',headersColumn:'Primeira coluna',headersRow:'Primeira linha',headersBoth:'Ambos',invalidRows:'O número de linhas tem que ser um número maior que 0.',invalidCols:'O número de colunas tem que ser um número maior que 0.',invalidBorder:'O tamanho da borda tem que ser um número.',invalidWidth:'A largura da tabela tem que ser um número.',invalidHeight:'A altura da tabela tem que ser um número.',invalidCellSpacing:'O espaçamento das células tem que ser um número.',invalidCellPadding:'A margem interna das células tem que ser um número.',cell:{menu:'Célula',insertBefore:'Inserir célula a esquerda',insertAfter:'Inserir célula a direita',deleteCell:'Remover Células',merge:'Mesclar Células',mergeRight:'Mesclar com célula a direita',mergeDown:'Mesclar com célula abaixo',splitHorizontal:'Dividir célula horizontalmente',splitVertical:'Dividir célula verticalmente',title:'Propriedades da célula',cellType:'Tipo de célula',rowSpan:'Linhas cobertas',colSpan:'Colunas cobertas',wordWrap:'Quebra de palavra',hAlign:'Alinhamento horizontal',vAlign:'Alinhamento vertical',alignBaseline:'Patamar de alinhamento',bgColor:'Cor de fundo',borderColor:'Cor das bordas',data:'Dados',header:'Cabeçalho',yes:'Sim',no:'Não',invalidWidth:'A largura da célula tem que ser um número.',invalidHeight:'A altura da célula tem que ser um número.',invalidRowSpan:'Linhas cobertas tem que ser um número inteiro.',invalidColSpan:'Colunas cobertas tem que ser um número inteiro.',chooseColor:'Escolher'},row:{menu:'Linha',insertBefore:'Inserir linha acima',insertAfter:'Inserir linha abaixo',deleteRow:'Remover Linhas'},column:{menu:'Coluna',insertBefore:'Inserir coluna a esquerda',insertAfter:'Inserir coluna a direita',deleteColumn:'Remover Colunas'}},button:{title:'Formatar Botão',text:'Texto (Valor)',type:'Tipo',typeBtn:'Botão',typeSbm:'Enviar',typeRst:'Limpar'},checkboxAndRadio:{checkboxTitle:'Formatar Caixa de Seleção',radioTitle:'Formatar Botão de Opção',value:'Valor',selected:'Selecionado'},form:{title:'Formatar Formulário',menu:'Formatar Formulário',action:'Ação',method:'Método',encoding:'Codificação'},select:{title:'Formatar Caixa de Listagem',selectInfo:'Informações',opAvail:'Opções disponÃveis',value:'Valor',size:'Tamanho',lines:'linhas',chkMulti:'Permitir múltiplas seleções',opText:'Texto',opValue:'Valor',btnAdd:'Adicionar',btnModify:'Modificar',btnUp:'Para cima',btnDown:'Para baixo',btnSetValue:'Definir como selecionado',btnDelete:'Remover'},textarea:{title:'Formatar Ãrea de Texto',cols:'Colunas',rows:'Linhas'},textfield:{title:'Formatar Caixa de Texto',name:'Nome',value:'Valor',charWidth:'Comprimento (em caracteres)',maxChars:'Número Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Senha'},hidden:{title:'Formatar Campo Oculto',name:'Nome',value:'Valor'},image:{title:'Formatar Imagem',titleButton:'Formatar Botão de Imagem',menu:'Formatar Imagem',infoTab:'Informações da Imagem',btnUpload:'Enviar para o Servidor',upload:'Enviar',alt:'Texto Alternativo',lockRatio:'Travar Proporções',resetSize:'Redefinir para o Tamanho Original',border:'Borda',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Por favor, digite a URL da imagem.',linkTab:'Link',button2Img:'Deseja transformar o botão de imagem em uma imagem comum?',img2Button:'Deseja transformar a imagem em um botão de imagem?',urlMissing:'URL da imagem está faltando.',validateBorder:'A borda deve ser um número inteiro.',validateHSpace:'O HSpace deve ser um número inteiro.',validateVSpace:'O VSpace deve ser um número inteiro.'},flash:{properties:'Propriedades do Flash',propertiesTab:'Propriedades',title:'Propriedades do Flash',chkPlay:'Tocar Automaticamente',chkLoop:'Tocar Infinitamente',chkMenu:'Habilita Menu Flash',chkFull:'Permitir tela cheia',scale:'Escala',scaleAll:'Mostrar tudo',scaleNoBorder:'Sem Borda',scaleFit:'Escala Exata',access:'Acesso ao script',accessAlways:'Sempre',accessSameDomain:'Acessar Mesmo DomÃnio',accessNever:'Nunca',alignAbsBottom:'Inferior Absoluto',alignAbsMiddle:'Centralizado Absoluto',alignBaseline:'Baseline',alignTextTop:'Superior Absoluto',quality:'Qualidade',qualityBest:'Qualidade Melhor',qualityHigh:'Qualidade Alta',qualityAutoHigh:'Qualidade Alta Automática',qualityMedium:'Qualidade Média',qualityAutoLow:'Qualidade Baixa Automática',qualityLow:'Qualidade Baixa',windowModeWindow:'Janela',windowModeOpaque:'Opaca',windowModeTransparent:'Transparente',windowMode:'Modo da janela',flashvars:'Variáveis do Flash',bgcolor:'Cor do Plano de Fundo',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Por favor, digite o endereço do link',validateHSpace:'O HSpace tem que ser um número',validateVSpace:'O VSpace tem que ser um número.'},spellCheck:{toolbar:'Verificar Ortografia',title:'Corretor Ortográfico',notAvailable:'Desculpe, o serviço não está disponÃvel no momento.',errorLoading:'Erro carregando servidor de aplicação: %s.',notInDic:'Não encontrada',changeTo:'Alterar para',btnIgnore:'Ignorar uma vez',btnIgnoreAll:'Ignorar Todas',btnReplace:'Alterar',btnReplaceAll:'Alterar Todas',btnUndo:'Desfazer',noSuggestions:'-sem sugestões de ortografia-',progress:'Verificação ortográfica em andamento...',noMispell:'Verificação encerrada: Não foram encontrados erros de ortografia',noChanges:'Verificação ortográfica encerrada: Não houve alterações',oneChange:'Verificação ortográfica encerrada: Uma palavra foi alterada',manyChanges:'Verificação ortográfica encerrada: %1 palavras foram alteradas',ieSpellDownload:'A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?'},smiley:{toolbar:'Emoticon',title:'Inserir Emoticon',options:'Opções de Emoticons'},elementsPath:{eleLabel:'Caminho dos Elementos',eleTitle:'Elemento %1'},numberedlist:'Lista numerada',bulletedlist:'Lista sem números',indent:'Aumentar Recuo',outdent:'Diminuir Recuo',justify:{left:'Alinhar Esquerda',center:'Centralizar',right:'Alinhar Direita',block:'Justificado'},blockquote:'Citação',clipboard:{title:'Colar',cutError:'As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).',copyError:'As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).',pasteMsg:'Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.',securityMsg:'As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.',pasteArea:'Ãrea para Colar'},pastefromword:{confirmCleanup:'O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?',toolbar:'Colar do Word',title:'Colar do Word',error:'Não foi possÃvel limpar os dados colados devido a um erro interno'},pasteText:{button:'Colar como Texto sem Formatação',title:'Colar como Texto sem Formatação'},templates:{button:'Modelos de layout',title:'Modelo de layout de conteúdo',options:'Opções de Template',insertOption:'Substituir o conteúdo atual',selectPromptMsg:'Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):',emptyListMsg:'(Não foram definidos modelos de layout)'},showBlocks:'Mostrar blocos de código',stylesCombo:{label:'Estilo',panelTitle:'Estilos de Formatação',panelTitle1:'Estilos de bloco',panelTitle2:'Estilos de texto corrido',panelTitle3:'Estilos de objeto'},format:{label:'Formatação',panelTitle:'Formatação',tag_p:'Normal',tag_pre:'Formatado',tag_address:'Endereço',tag_h1:'TÃtulo 1',tag_h2:'TÃtulo 2',tag_h3:'TÃtulo 3',tag_h4:'TÃtulo 4',tag_h5:'TÃtulo 5',tag_h6:'TÃtulo 6',tag_div:'Normal (DIV)'},div:{title:'Criar Container de DIV',toolbar:'Criar Container de DIV',cssClassInputLabel:'Classes de CSS',styleSelectLabel:'Estilo',IdInputLabel:'Id',languageCodeInputLabel:'Código de Idioma',inlineStyleInputLabel:'Estilo Inline',advisoryTitleInputLabel:'TÃtulo Consulta',langDirLabel:'Direção da Escrita',langDirLTRLabel:'Esquerda para Direita (LTR)',langDirRTLLabel:'Direita para Esquerda (RTL)',edit:'Editar Div',remove:'Remover Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Fonte',voiceLabel:'Fonte',panelTitle:'Fonte'},fontSize:{label:'Tamanho',voiceLabel:'Tamanho da fonte',panelTitle:'Tamanho'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor do Plano de Fundo',panelTitle:'Cores',auto:'Automático',more:'Mais Cores...'},colors:{'000':'Preto',800000:'Foquete','8B4513':'Marrom 1','2F4F4F':'Cinza 1','008080':'Cerceta','000080':'Azul Marinho','4B0082':'Ãndigo',696969:'Cinza 2',B22222:'Tijolo de Fogo',A52A2A:'Marrom 2',DAA520:'Vara Dourada','006400':'Verde Escuro','40E0D0':'Turquesa','0000CD':'Azul Médio',800080:'Roxo',808080:'Cinza 3',F00:'Vermelho',FF8C00:'Laranja Escuro',FFD700:'Dourado','008000':'Verde','0FF':'Ciano','00F':'Azul',EE82EE:'Violeta',A9A9A9:'Cinza Escuro',FFA07A:'Salmão Claro',FFA500:'Laranja',FFFF00:'Amarelo','00FF00':'Lima',AFEEEE:'Turquesa Pálido',ADD8E6:'Azul Claro',DDA0DD:'Ameixa',D3D3D3:'Cinza Claro',FFF0F5:'Lavanda 1',FAEBD7:'Branco Antiguidade',FFFFE0:'Amarelo Claro',F0FFF0:'Orvalho',F0FFFF:'Azure',F0F8FF:'Azul Alice',E6E6FA:'Lavanda 2',FFF:'Branco'},scayt:{title:'Correção ortográfica durante a digitação',opera_title:'Não suportado no Opera',enable:'Habilitar correção ortográfica durante a digitação',disable:'Desabilitar correção ortográfica durante a digitação',about:'Sobre a correção ortográfica durante a digitação',toggle:'Ativar/desativar correção ortográfica durante a digitação',options:'Opções',langs:'Idiomas',moreSuggestions:'Mais sugestões',ignore:'Ignorar',ignoreAll:'Ignorar todas',addWord:'Adicionar palavra',emptyDic:'O nome do dicionário não deveria estar vazio.',optionsTab:'Opções',allCaps:'Ignorar palavras maiúsculas',ignoreDomainNames:'Ignorar nomes de domÃnio',mixedCase:'Ignorar palavras com maiúsculas e minúsculas misturadas',mixedWithDigits:'Ignorar palavras com números',languagesTab:'Idiomas',dictionariesTab:'Dicionários',dic_field_name:'Nome do Dicionário',dic_create:'Criar',dic_restore:'Restaurar',dic_delete:'Excluir',dic_rename:'Renomear',dic_info:'Inicialmente, o dicionário do usuário fica armazenado em um Cookie. Porém, Cookies tem tamanho limitado, portanto quand o dicionário do usuário atingir o tamanho limite poderá ser armazenado no nosso servidor. Para armazenar seu dicionário pessoal no nosso servidor deverá especificar um nome para ele. Se já tiver um dicionário armazenado por favor especifique o seu nome e clique em Restaurar.',aboutTab:'Sobre'},about:{title:'Sobre o CKEditor',dlgTitle:'Sobre o CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Para informações sobre a licença por favor visite o nosso site:',copy:'Copyright © $1. Todos os direitos reservados.'},maximize:'Maximizar',minimize:'Minimize',fakeobjects:{anchor:'Ãncora',flash:'Animação em Flash',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Objeto desconhecido'},resize:'Arraste para redimensionar',colordialog:{title:'Selecione uma cor',options:'Opções de Cor',highlight:'Grifar',selected:'Cor Selecionada',clear:'Limpar'},toolbarCollapse:'Diminuir Barra de Ferramentas',toolbarExpand:'Aumentar Barra de Ferramentas',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Propriedades Documento',title:'Propriedades Documento',design:'Design',meta:'Meta Dados',chooseColor:'Escolher',other:'<outro>',docTitle:'TÃtulo da Página',charset:'Codificação de Caracteres',charsetOther:'Outra Codificação de Caracteres',charsetASCII:'ASCII',charsetCE:'Europa Central',charsetCT:'Chinês Tradicional (Big5)',charsetCR:'CirÃlico',charsetGR:'Grego',charsetJP:'Japonês',charsetKR:'Coreano',charsetTR:'Turco',charsetUN:'Unicode (UTF-8)',charsetWE:'Europa Ocidental',docType:'Cabeçalho Tipo de Documento',docTypeOther:'Other Document Type Heading',xhtmlDec:'Incluir Declarações XHTML',bgColor:'Cor do Plano de Fundo',bgImage:'URL da Imagem de Plano de Fundo',bgFixed:'Plano de Fundo Fixo',txtColor:'Cor do Texto',margin:'Margens da Página',marginTop:'Superior',marginLeft:'Inferior',marginRight:'Direita',marginBottom:'Inferior',metaKeywords:'Palavras-chave de Indexação do Documento (separadas por vÃrgula)',metaDescription:'Descrição do Documento',metaAuthor:'Autor',metaCopyright:'Direitos Autorais',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/pt.js b/lang/pt.js new file mode 100644 index 0000000..639fd5a --- /dev/null +++ b/lang/pt.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.pt={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Fonte',newPage:'Nova Página',save:'Guardar',preview:'Pré-visualizar',cut:'Cortar',copy:'Copiar',paste:'Colar',print:'Imprimir',underline:'Sublinhado',bold:'Negrito',italic:'Itálico',selectAll:'Seleccionar Tudo',removeFormat:'Eliminar Formato',strike:'Rasurado',subscript:'Superior à Linha',superscript:'Inferior à Linha',horizontalrule:'Inserir Linha Horizontal',pagebreak:'Inserir Quebra de Página',pagebreakAlt:'Page Break',unlink:'Eliminar Hiperligação',undo:'Anular',redo:'Repetir',common:{browseServer:'Navegar no Servidor',url:'URL',protocol:'Protocolo',upload:'Carregar',uploadSubmit:'Enviar para o Servidor',image:'Imagem',flash:'Flash',form:'Formulário',checkbox:'Caixa de Verificação',radio:'Botão de Opção',textField:'Campo de Texto',textarea:'Ãrea de Texto',hiddenField:'Campo Escondido',button:'Botão',select:'Caixa de Combinação',imageButton:'Botão de Imagem',notSet:'<Não definido>',id:'Id',name:'Nome',langDir:'Orientação de idioma',langDirLtr:'Esquerda à Direita (LTR)',langDirRtl:'Direita a Esquerda (RTL)',langCode:'Código de Idioma',longDescr:'Descrição Completa do URL',cssClass:'Classes de Estilo de Folhas Classes',advisoryTitle:'TÃtulo',cssStyle:'Estilo',ok:'OK',cancel:'Cancelar',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Avançado',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largura',height:'Altura',align:'Alinhamento',alignLeft:'Esquerda',alignRight:'Direita',alignCenter:'Centrado',alignTop:'Topo',alignMiddle:'Centro',alignBottom:'Fundo',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Inserir Caracter Especial',title:'Seleccione um caracter especial',options:'Special Character Options'},link:{toolbar:'Inserir/Editar Hiperligação',other:'<outro>',menu:'Editar Hiperligação',title:'Hiperligação',info:'Informação de Hiperligação',target:'Destino',upload:'Carregar',advanced:'Avançado',type:'Tipo de Hiperligação',toUrl:'URL',toAnchor:'Referência a esta página',toEmail:'E-Mail',targetFrame:'<Frame>',targetPopup:'<Janela de popup>',targetFrameName:'Nome do Frame Destino',targetPopupName:'Nome da Janela de Popup',popupFeatures:'CaracterÃsticas de Janela de Popup',popupResizable:'Resizable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de localização',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menu',popupFullScreen:'Janela Completa (IE)',popupScrollBars:'Barras de deslocamento',popupDependent:'Dependente (Netscape)',popupLeft:'Posição Esquerda',popupTop:'Posição Direita',id:'Id',langDir:'Orientação de idioma',langDirLTR:'Esquerda à Direita (LTR)',langDirRTL:'Direita a Esquerda (RTL)',acccessKey:'Chave de Acesso',name:'Nome',langCode:'Orientação de idioma',tabIndex:'Ãndice de Tubulação',advisoryTitle:'TÃtulo',advisoryContentType:'Tipo de Conteúdo',cssClasses:'Classes de Estilo de Folhas Classes',charset:'Fonte de caracteres vinculado',styles:'Estilo',rel:'Relationship',selectAnchor:'Seleccionar una referência',anchorName:'Por Nome de Referência',anchorId:'Por ID de elemento',emailAddress:'Endereço de E-Mail',emailSubject:'TÃtulo de Mensagem',emailBody:'Corpo da Mensagem',noAnchors:'(Não há referências disponÃveis no documento)',noUrl:'Por favor introduza a hiperligação URL',noEmail:'Por favor introduza o endereço de e-mail'},anchor:{toolbar:' Inserir/Editar Ãncora',menu:'Propriedades da Ãncora',title:'Propriedades da Ãncora',name:'Nome da Ãncora',errorName:'Por favor, introduza o nome da âncora',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Procurar',replace:'Substituir',findWhat:'Texto a Procurar:',replaceWith:'Substituir por:',notFoundMsg:'O texto especificado não foi encontrado.',matchCase:'Maiúsculas/Minúsculas',matchWord:'Coincidir com toda a palavra',matchCyclic:'Match cyclic',replaceAll:'Substituir Tudo',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Propriedades da Tabela',menu:'Propriedades da Tabela',deleteTable:'Eliminar Tabela',rows:'Linhas',columns:'Colunas',border:'Tamanho do Limite',widthPx:'pixeis',widthPc:'percentagem',widthUnit:'width unit',cellSpace:'Esp. e/células',cellPad:'Esp. interior',caption:'TÃtulo',summary:'Sumário',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Célula',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Eliminar Célula',merge:'Unir Células',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Linha',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Eliminar Linhas'},column:{menu:'Coluna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Eliminar Coluna'}},button:{title:'Propriedades do Botão',text:'Texto (Valor)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Propriedades da Caixa de Verificação',radioTitle:'Propriedades do Botão de Opção',value:'Valor',selected:'Seleccionado'},form:{title:'Propriedades do Formulário',menu:'Propriedades do Formulário',action:'Acção',method:'Método',encoding:'Encoding'},select:{title:'Propriedades da Caixa de Combinação',selectInfo:'Informação',opAvail:'Opções PossÃveis',value:'Valor',size:'Tamanho',lines:'linhas',chkMulti:'Permitir selecções múltiplas',opText:'Texto',opValue:'Valor',btnAdd:'Adicionar',btnModify:'Modificar',btnUp:'Para cima',btnDown:'Para baixo',btnSetValue:'Definir um valor por defeito',btnDelete:'Apagar'},textarea:{title:'Propriedades da Ãrea de Texto',cols:'Colunas',rows:'Linhas'},textfield:{title:'Propriedades do Campo de Texto',name:'Nome',value:'Valor',charWidth:'Tamanho do caracter',maxChars:'Nr. Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Palavra-chave'},hidden:{title:'Propriedades do Campo Escondido',name:'Nome',value:'Valor'},image:{title:'Propriedades da Imagem',titleButton:'Propriedades do Botão de imagens',menu:'Propriedades da Imagem',infoTab:'Informação da Imagem',btnUpload:'Enviar para o Servidor',upload:'Carregar',alt:'Texto Alternativo',lockRatio:'Proporcional',resetSize:'Tamanho Original',border:'Limite',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',alertUrl:'Por favor introduza o URL da imagem',linkTab:'Hiperligação',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Propriedades do Flash',propertiesTab:'Properties',title:'Propriedades do Flash',chkPlay:'Reproduzir automaticamente',chkLoop:'Loop',chkMenu:'Permitir Menu do Flash',chkFull:'Allow Fullscreen',scale:'Escala',scaleAll:'Mostrar tudo',scaleNoBorder:'Sem Limites',scaleFit:'Tamanho Exacto',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs inferior',alignAbsMiddle:'Abs centro',alignBaseline:'Linha de base',alignTextTop:'Topo do texto',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Cor de Fundo',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',validateSrc:'Por favor introduza a hiperligação URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Verificação Ortográfica',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Não está num directório',changeTo:'Mudar para',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Tudo',btnReplace:'Substituir',btnReplaceAll:'Substituir Tudo',btnUndo:'Anular',noSuggestions:'- Sem sugestões -',progress:'Verificação ortográfica em progressoâ¦',noMispell:'Verificação ortográfica completa: não foram encontrados erros',noChanges:'Verificação ortográfica completa: não houve alteração de palavras',oneChange:'Verificação ortográfica completa: uma palavra alterada',manyChanges:'Verificação ortográfica completa: %1 palavras alteradas',ieSpellDownload:' Verificação ortográfica não instalada. Quer descarregar agora?'},smiley:{toolbar:'Emoticons',title:'Inserir um Emoticon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numeração',bulletedlist:'Marcas',indent:'Aumentar Avanço',outdent:'Diminuir Avanço',justify:{left:'Alinhar à Esquerda',center:'Alinhar ao Centro',right:'Alinhar à Direita',block:'Justificado'},blockquote:'Block Quote',clipboard:{title:'Colar',cutError:'A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).',copyError:'A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).',pasteMsg:'Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Colar do Word',title:'Colar do Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Colar como Texto Simples',title:'Colar como Texto Simples'},templates:{button:'Modelos',title:'Modelo de Conteúdo',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):',emptyListMsg:'(Sem modelos definidos)'},showBlocks:'Show Blocks',stylesCombo:{label:'Estilo',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normal',tag_pre:'Formatado',tag_address:'Endereço',tag_h1:'TÃtulo 1',tag_h2:'TÃtulo 2',tag_h3:'TÃtulo 3',tag_h4:'TÃtulo 4',tag_h5:'TÃtulo 5',tag_h6:'TÃtulo 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Tipo de Letra',voiceLabel:'Font',panelTitle:'Tipo de Letra'},fontSize:{label:'Tamanho',voiceLabel:'Font Size',panelTitle:'Tamanho'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor de Fundo',panelTitle:'Colors',auto:'Automático',more:'Mais Cores...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Propriedades do Documento',title:'Propriedades do Documento',design:'Design',meta:'Meta Data',chooseColor:'Choose',other:'<outro>',docTitle:'TÃtulo da Página',charset:'Codificação de Caracteres',charsetOther:'Outra Codificação de Caracteres',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Tipo de Cabeçalho do Documento',docTypeOther:'Outro Tipo de Cabeçalho do Documento',xhtmlDec:'Incluir Declarações XHTML',bgColor:'Cor de Fundo',bgImage:'Caminho para a Imagem de Fundo',bgFixed:'Fundo Fixo',txtColor:'Cor do Texto',margin:'Margem das Páginas',marginTop:'Topo',marginLeft:'Esquerda',marginRight:'Direita',marginBottom:'Fundo',metaKeywords:'Palavras de Indexação do Documento (separadas por virgula)',metaDescription:'Descrição do Documento',metaAuthor:'Autor',metaCopyright:'Direitos de Autor',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/ro.js b/lang/ro.js new file mode 100644 index 0000000..d9dd254 --- /dev/null +++ b/lang/ro.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.ro={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Sursa',newPage:'PaginÄ nouÄ',save:'SalveazÄ',preview:'Previzualizare',cut:'Taie',copy:'CopiazÄ',paste:'AdaugÄ',print:'PrinteazÄ',underline:'Subliniat (underline)',bold:'ÃngroÅat (bold)',italic:'Ãnclinat (italic)',selectAll:'SelecteazÄ tot',removeFormat:'ÃnlÄturÄ formatarea',strike:'TÄiat (strike through)',subscript:'Indice (subscript)',superscript:'Putere (superscript)',horizontalrule:'InsereazÄ linie orizontÄ',pagebreak:'InsereazÄ separator de paginÄ (Page Break)',pagebreakAlt:'Page Break',unlink:'ÃnlÄturÄ link (legÄturÄ web)',undo:'Starea anterioarÄ (undo)',redo:'Starea ulterioarÄ (redo)',common:{browseServer:'RÄsfoieÅte server',url:'URL',protocol:'Protocol',upload:'ÃncarcÄ',uploadSubmit:'Trimite la server',image:'Imagine',flash:'Flash',form:'Formular (Form)',checkbox:'BifÄ (Checkbox)',radio:'Buton radio (RadioButton)',textField:'Câmp text (TextField)',textarea:'SuprafaÅ£Ä text (Textarea)',hiddenField:'Câmp ascuns (HiddenField)',button:'Buton',select:'Câmp selecÅ£ie (SelectionField)',imageButton:'Buton imagine (ImageButton)',notSet:'<nesetat>',id:'Id',name:'Nume',langDir:'DirecÅ£ia cuvintelor',langDirLtr:'stânga-dreapta (LTR)',langDirRtl:'dreapta-stânga (RTL)',langCode:'Codul limbii',longDescr:'Descrierea lungÄ URL',cssClass:'Clasele cu stilul paginii (CSS)',advisoryTitle:'Titlul consultativ',cssStyle:'Stil',ok:'Bine',cancel:'Anulare',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Avansat',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'LÄÅ£ime',height:'ÃnÄlÅ£ime',align:'Aliniere',alignLeft:'Stânga',alignRight:'Dreapta',alignCenter:'Centru',alignTop:'Sus',alignMiddle:'Mijloc',alignBottom:'Jos',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'InsereazÄ caracter special',title:'SelecteazÄ caracter special',options:'Special Character Options'},link:{toolbar:'InsereazÄ/EditeazÄ link (legÄturÄ web)',other:'<alt>',menu:'EditeazÄ Link',title:'Link (LegÄturÄ web)',info:'InformaÅ£ii despre link (LegÄturÄ web)',target:'Å¢intÄ (Target)',upload:'ÃncarcÄ',advanced:'Avansat',type:'Tipul link-ului (al legÄturii web)',toUrl:'URL',toAnchor:'AncorÄ Ã®n aceastÄ paginÄ',toEmail:'E-Mail',targetFrame:'<frame>',targetPopup:'<fereastra popup>',targetFrameName:'Numele frame-ului Å£intÄ',targetPopupName:'Numele ferestrei popup',popupFeatures:'ProprietÄÅ£ile ferestrei popup',popupResizable:'Resizable',popupStatusBar:'Bara de status',popupLocationBar:'Bara de locaÅ£ie',popupToolbar:'Bara de opÅ£iuni',popupMenuBar:'Bara de meniu',popupFullScreen:'Tot ecranul (Full Screen)(IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'PoziÅ£ia la stânga',popupTop:'PoziÅ£ia la dreapta',id:'Id',langDir:'DirecÅ£ia cuvintelor',langDirLTR:'stânga-dreapta (LTR)',langDirRTL:'dreapta-stânga (RTL)',acccessKey:'Tasta de acces',name:'Nume',langCode:'DirecÅ£ia cuvintelor',tabIndex:'Indexul tabului',advisoryTitle:'Titlul consultativ',advisoryContentType:'Tipul consultativ al titlului',cssClasses:'Clasele cu stilul paginii (CSS)',charset:'Setul de caractere al resursei legate',styles:'Stil',rel:'Relationship',selectAnchor:'SelectaÅ£i o ancorÄ',anchorName:'dupÄ numele ancorei',anchorId:'dupÄ Id-ul elementului',emailAddress:'AdresÄ de e-mail',emailSubject:'Subiectul mesajului',emailBody:'ConÅ£inutul mesajului',noAnchors:'(Nicio ancorÄ disponibilÄ Ã®n document)',noUrl:'VÄ rugÄm sÄ scrieÅ£i URL-ul',noEmail:'VÄ rugÄm sÄ scrieÅ£i adresa de e-mail'},anchor:{toolbar:'InsereazÄ/EditeazÄ ancorÄ',menu:'ProprietÄÅ£i ancorÄ',title:'ProprietÄÅ£i ancorÄ',name:'Numele ancorei',errorName:'VÄ rugÄm scrieÅ£i numele ancorei',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'GÄseÅte Åi înlocuieÅte',find:'GÄseÅte',replace:'ÃnlocuieÅte',findWhat:'GÄseÅte:',replaceWith:'ÃnlocuieÅte cu:',notFoundMsg:'Textul specificat nu a fost gÄsit.',matchCase:'DeosebeÅte majuscule de minuscule (Match case)',matchWord:'Doar cuvintele întregi',matchCyclic:'Match cyclic',replaceAll:'ÃnlocuieÅte tot',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'ProprietÄÅ£ile tabelului',menu:'ProprietÄÅ£ile tabelului',deleteTable:'Återge tabel',rows:'Linii',columns:'Coloane',border:'MÄrimea marginii',widthPx:'pixeli',widthPc:'procente',widthUnit:'width unit',cellSpace:'SpaÅ£iu între celule',cellPad:'SpaÅ£iu în cadrul celulei',caption:'Titlu (Caption)',summary:'Rezumat',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'CelulÄ',insertBefore:'InsereazÄ celulÄ Ã®nainte',insertAfter:'InsereazÄ celulÄ dupÄ',deleteCell:'Återge celule',merge:'UneÅte celule',mergeRight:'UneÅte la dreapta',mergeDown:'UneÅte jos',splitHorizontal:'Ãmparte celula pe orizontalÄ',splitVertical:'Ãmparte celula pe verticalÄ',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Linie',insertBefore:'InsereazÄ linie înainte',insertAfter:'InsereazÄ linie dupÄ',deleteRow:'Återge linii'},column:{menu:'ColoanÄ',insertBefore:'InsereazÄ coloanÄ Ã®nainte',insertAfter:'InsereazÄ coloanÄ dupÄ',deleteColumn:'Återge celule'}},button:{title:'ProprietÄÅ£i buton',text:'Text (Valoare)',type:'Tip',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'ProprietÄÅ£i bifÄ (Checkbox)',radioTitle:'ProprietÄÅ£i buton radio (Radio Button)',value:'Valoare',selected:'Selectat'},form:{title:'ProprietÄÅ£i formular (Form)',menu:'ProprietÄÅ£i formular (Form)',action:'AcÅ£iune',method:'MetodÄ',encoding:'Encoding'},select:{title:'ProprietÄÅ£i câmp selecÅ£ie (Selection Field)',selectInfo:'InformaÅ£ii',opAvail:'OpÅ£iuni disponibile',value:'Valoare',size:'MÄrime',lines:'linii',chkMulti:'Permite selecÅ£ii multiple',opText:'Text',opValue:'Valoare',btnAdd:'AdaugÄ',btnModify:'ModificÄ',btnUp:'Sus',btnDown:'Jos',btnSetValue:'SeteazÄ ca valoare selectatÄ',btnDelete:'Återge'},textarea:{title:'ProprietÄÅ£i suprafaÅ£Ä text (Textarea)',cols:'Coloane',rows:'Linii'},textfield:{title:'ProprietÄÅ£i câmp text (Text Field)',name:'Nume',value:'Valoare',charWidth:'LÄrgimea caracterului',maxChars:'Caractere maxime',type:'Tip',typeText:'Text',typePass:'ParolÄ'},hidden:{title:'ProprietÄÅ£i câmp ascuns (Hidden Field)',name:'Nume',value:'Valoare'},image:{title:'ProprietÄÅ£ile imaginii',titleButton:'ProprietÄÅ£i buton imagine (Image Button)',menu:'ProprietÄÅ£ile imaginii',infoTab:'InformaÅ£ii despre imagine',btnUpload:'Trimite la server',upload:'ÃncarcÄ',alt:'Text alternativ',lockRatio:'PÄstreazÄ proporÅ£iile',resetSize:'ReseteazÄ mÄrimea',border:'Margine',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'VÄ rugÄm sÄ scrieÅ£i URL-ul imaginii',linkTab:'Link (LegÄturÄ web)',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ProprietÄÅ£ile flash-ului',propertiesTab:'Properties',title:'ProprietÄÅ£ile flash-ului',chkPlay:'RuleazÄ automat',chkLoop:'RepetÄ (Loop)',chkMenu:'ActiveazÄ meniul flash',chkFull:'Allow Fullscreen',scale:'ScalÄ',scaleAll:'AratÄ tot',scaleNoBorder:'FÄrÄ margini (No border)',scaleFit:'PotriveÅte',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Jos absolut (Abs Bottom)',alignAbsMiddle:'Mijloc absolut (Abs Middle)',alignBaseline:'Linia de jos (Baseline)',alignTextTop:'Text sus',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Coloarea fundalului',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'VÄ rugÄm sÄ scrieÅ£i URL-ul',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'VerificÄ text',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nu e în dicÅ£ionar',changeTo:'SchimbÄ Ã®n',btnIgnore:'IgnorÄ',btnIgnoreAll:'IgnorÄ toate',btnReplace:'ÃnlocuieÅte',btnReplaceAll:'ÃnlocuieÅte tot',btnUndo:'Starea anterioarÄ (undo)',noSuggestions:'- FÄrÄ sugestii -',progress:'Verificarea textului în desfÄÅurare...',noMispell:'Verificarea textului terminatÄ: Nicio greÅealÄ gÄsitÄ',noChanges:'Verificarea textului terminatÄ: Niciun cuvânt modificat',oneChange:'Verificarea textului terminatÄ: Un cuvânt modificat',manyChanges:'Verificarea textului terminatÄ: 1% cuvinte modificate',ieSpellDownload:'Unealta pentru verificat textul (Spell checker) neinstalatÄ. DoriÅ£i sÄ o descÄrcaÅ£i acum?'},smiley:{toolbar:'FigurÄ expresivÄ (Emoticon)',title:'InsereazÄ o figurÄ expresivÄ (Emoticon)',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ListÄ numerotatÄ',bulletedlist:'ListÄ cu puncte',indent:'CreÅte indentarea',outdent:'Scade indentarea',justify:{left:'Aliniere la stânga',center:'Aliniere centralÄ',right:'Aliniere la dreapta',block:'Aliniere în bloc (Block Justify)'},blockquote:'Citat',clipboard:{title:'AdaugÄ',cutError:'SetÄrile de securitate ale navigatorului (browser) pe care îl folosiÅ£i nu permit editorului sÄ execute automat operaÅ£iunea de tÄiere. VÄ rugÄm folosiÅ£i tastatura (Ctrl/Cmd+X).',copyError:'SetÄrile de securitate ale navigatorului (browser) pe care îl folosiÅ£i nu permit editorului sÄ execute automat operaÅ£iunea de copiere. VÄ rugÄm folosiÅ£i tastatura (Ctrl/Cmd+C).',pasteMsg:'VÄ rugÄm adÄugaÅ£i în cÄsuÅ£a urmÄtoare folosind tastatura (<STRONG>Ctrl/Cmd+V</STRONG>) Åi apÄsaÅ£i <STRONG>OK</STRONG>.',securityMsg:'Din cauza setÄrilor de securitate ale programului dvs. cu care navigaÅ£i pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui sÄ adÄugaÅ£i din nou datele în aceastÄ fereastrÄ.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'AdaugÄ din Word',title:'AdaugÄ din Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'AdaugÄ ca text simplu (Plain Text)',title:'AdaugÄ ca text simplu (Plain Text)'},templates:{button:'Template-uri (Åabloane)',title:'Template-uri (Åabloane) de conÅ£inut',options:'Template Options',insertOption:'ÃnlocuieÅte cuprinsul actual',selectPromptMsg:'VÄ rugÄm selectaÅ£i template-ul (Åablonul) ce se va deschide în editor<br>(conÅ£inutul actual va fi pierdut):',emptyListMsg:'(Niciun template (Åablon) definit)'},showBlocks:'AratÄ blocurile',stylesCombo:{label:'Stil',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formatare',panelTitle:'Formatare',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'MÄrime',voiceLabel:'Font Size',panelTitle:'MÄrime'},colorButton:{textColorTitle:'Culoarea textului',bgColorTitle:'Coloarea fundalului',panelTitle:'Colors',auto:'Automatic',more:'Mai multe culori...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'ProprietÄÅ£ile documentului',title:'ProprietÄÅ£ile documentului',design:'Design',meta:'Meta Tags',chooseColor:'Choose',other:'<alt>',docTitle:'Titlul paginii',charset:'Encoding setului de caractere',charsetOther:'Alt encoding al setului de caractere',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinezesc tradiÅ£ional (Big5)',charsetCR:'Chirilic',charsetGR:'Grecesc',charsetJP:'Japonez',charsetKR:'Corean',charsetTR:'Turcesc',charsetUN:'Unicode (UTF-8)',charsetWE:'Vest european',docType:'Document Type Heading',docTypeOther:'Alt Document Type Heading',xhtmlDec:'Include declaraÅ£ii XHTML',bgColor:'Culoarea fundalului (Background Color)',bgImage:'URL-ul imaginii din fundal (Background Image URL)',bgFixed:'Fundal neflotant, fix (Non-scrolling Background)',txtColor:'Culoarea textului',margin:'Marginile paginii',marginTop:'Sus',marginLeft:'Stânga',marginRight:'Dreapta',marginBottom:'Jos',metaKeywords:'Cuvinte cheie dupÄ care se va indexa documentul (separate prin virgulÄ)',metaDescription:'Descrierea documentului',metaAuthor:'Autor',metaCopyright:'Drepturi de autor',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/ru.js b/lang/ru.js new file mode 100644 index 0000000..a703c0f --- /dev/null +++ b/lang/ru.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.ru={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'ÐÑÑоÑник',newPage:'ÐÐ¾Ð²Ð°Ñ ÑÑÑаниÑа',save:'Ð¡Ð¾Ñ ÑаниÑÑ',preview:'ÐÑедваÑиÑелÑнÑй пÑоÑмоÑÑ',cut:'ÐÑÑезаÑÑ',copy:'ÐопиÑоваÑÑ',paste:'ÐÑÑавиÑÑ',print:'ÐеÑаÑÑ',underline:'ÐодÑеÑкнÑÑÑй',bold:'ÐиÑнÑй',italic:'ÐÑÑÑив',selectAll:'ÐÑделиÑÑ Ð²Ñе',removeFormat:'УбÑаÑÑ ÑоÑмаÑиÑование',strike:'ÐаÑеÑкнÑÑÑй',subscript:'ÐодÑÑÑоÑнÑй индекÑ',superscript:'ÐадÑÑÑоÑнÑй индекÑ',horizontalrule:'ÐÑÑавиÑÑ Ð³Ð¾ÑизонÑалÑнÑÑ Ð»Ð¸Ð½Ð¸Ñ',pagebreak:'ÐÑÑавиÑÑ ÑазÑÑв ÑÑÑаниÑÑ',pagebreakAlt:'Page Break',unlink:'УбÑаÑÑ ÑÑÑлкÑ',undo:'ÐÑмениÑÑ',redo:'ÐовÑоÑиÑÑ',common:{browseServer:'ÐÑоÑмоÑÑеÑÑ Ð½Ð° ÑеÑвеÑе',url:'URL',protocol:'ÐÑоÑокол',upload:'ÐакаÑаÑÑ',uploadSubmit:'ÐоÑлаÑÑ Ð½Ð° ÑеÑвеÑ',image:'ÐзобÑажение',flash:'Flash',form:'ФоÑма',checkbox:'Ð¤Ð»Ð°Ð³Ð¾Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°',radio:'Ðнопка вÑбоÑа',textField:'ТекÑÑовое поле',textarea:'ТекÑÑÐ¾Ð²Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑÑ',hiddenField:'СкÑÑÑое поле',button:'Ðнопка',select:'СпиÑок',imageButton:'Ðнопка Ñ Ð¸Ð·Ð¾Ð±Ñажением',notSet:'<не опÑеделено>',id:'ÐденÑиÑикаÑоÑ',name:'ÐмÑ',langDir:'ÐапÑавление ÑзÑка',langDirLtr:'Слева на пÑаво (LTR)',langDirRtl:'СпÑава на лево (RTL)',langCode:'ЯзÑк',longDescr:'Ðлинное опиÑание URL',cssClass:'ÐлаÑÑ CSS',advisoryTitle:'Ðаголовок',cssStyle:'СÑÐ¸Ð»Ñ CSS',ok:'ÐÐ',cancel:'ÐÑмена',close:'Close',preview:'Preview',generalTab:'ÐнÑоÑмаÑиÑ',advancedTab:'РаÑÑиÑеннÑй',validateNumberFailed:'ÐÑо знаÑение не ÑвлÑеÑÑÑ ÑиÑлом.',confirmNewPage:'ÐÑе неÑÐ¾Ñ ÑаненнÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ ÑÑеÑÑнÑ. ÐÑ ÑвеÑенÑ, ÑÑо Ñ Ð¾ÑиÑе пеÑейÑи на дÑÑгÑÑ ÑÑÑаниÑÑ?',confirmCancel:'ÐекоÑоÑÑе опÑии бÑли измененÑ. ÐÑ ÑвеÑенÑ, ÑÑо Ñ Ð¾ÑиÑе закÑÑÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'ШиÑина',height:'ÐÑÑоÑа',align:'ÐÑÑавнивание',alignLeft:'Ðо Ð»ÐµÐ²Ð¾Ð¼Ñ ÐºÑаÑ',alignRight:'Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ',alignCenter:'Ðо ÑенÑÑÑ',alignTop:'Ðо веÑÑ Ñ',alignMiddle:'ÐоÑеÑедине',alignBottom:'ÐонизÑ',invalidHeight:'ÐÑÑоÑа задаеÑÑÑ ÑиÑлом.',invalidWidth:'ШиÑина задаеÑÑÑ ÑиÑлом.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, недоÑÑÑпно</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'ÐÑÑавиÑÑ ÑпеÑиалÑнÑй Ñимвол',title:'ÐÑбеÑиÑе ÑпеÑиалÑнÑй Ñимвол',options:'Special Character Options'},link:{toolbar:'ÐÑÑавиÑÑ/РедакÑиÑоваÑÑ ÑÑÑлкÑ',other:'<дÑÑгой>',menu:'ÐÑÑавиÑÑ ÑÑÑлкÑ',title:'СÑÑлка',info:'ÐнÑоÑмаÑÐ¸Ñ ÑÑÑлки',target:'ЦелÑ',upload:'ÐакаÑаÑÑ',advanced:'РаÑÑиÑеннÑй',type:'Тип ÑÑÑлки',toUrl:'URL',toAnchor:'ЯкоÑÑ Ð½Ð° ÑÑÑ ÑÑÑаниÑÑ',toEmail:'Ðл. поÑÑа',targetFrame:'<ÑÑейм>',targetPopup:'<вÑплÑваÑÑее окно>',targetFrameName:'ÐÐ¼Ñ Ñелевого ÑÑейма',targetPopupName:'ÐÐ¼Ñ Ð²ÑплÑваÑÑего окна',popupFeatures:'СвойÑÑва вÑплÑваÑÑего окна',popupResizable:'ÐзменÑемÑй ÑазмеÑ',popupStatusBar:'СÑÑока ÑоÑÑоÑниÑ',popupLocationBar:'ÐÐ°Ð½ÐµÐ»Ñ Ð»Ð¾ÐºÐ°Ñии',popupToolbar:'ÐÐ°Ð½ÐµÐ»Ñ Ð¸Ð½ÑÑÑÑменÑов',popupMenuBar:'ÐÐ°Ð½ÐµÐ»Ñ Ð¼ÐµÐ½Ñ',popupFullScreen:'ÐолнÑй ÑкÑан (IE)',popupScrollBars:'ÐолоÑÑ Ð¿ÑокÑÑÑки',popupDependent:'ÐавиÑимÑй (Netscape)',popupLeft:'ÐозиÑÐ¸Ñ Ñлева',popupTop:'ÐозиÑÐ¸Ñ ÑвеÑÑ Ñ',id:'Id',langDir:'ÐапÑавление ÑзÑка',langDirLTR:'Слева напÑаво (LTR)',langDirRTL:'СпÑава налево (RTL)',acccessKey:'ÐоÑÑÑÐ°Ñ ÐºÐ»Ð°Ð²Ð¸Ñа',name:'ÐмÑ',langCode:'Ðод ÑзÑка',tabIndex:'ÐоÑледоваÑелÑноÑÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð°',advisoryTitle:'Ðаголовок',advisoryContentType:'Тип ÑодеÑжимого',cssClasses:'ÐлаÑÑ CSS',charset:'ÐодиÑовка',styles:'СÑÐ¸Ð»Ñ CSS',rel:'Relationship',selectAnchor:'ÐÑбеÑиÑе ÑкоÑÑ',anchorName:'Ðо имени ÑкоÑÑ',anchorId:'Ðо иденÑиÑикаÑоÑÑ ÑлеменÑа',emailAddress:'ÐдÑÐµÑ Ñл. поÑÑÑ',emailSubject:'Ðаголовок ÑообÑениÑ',emailBody:'Тело ÑообÑениÑ',noAnchors:'(ÐÐµÑ ÑкоÑей доÑÑÑпнÑÑ Ð² ÑÑом докÑменÑе)',noUrl:'ÐожалÑйÑÑа, введиÑе URL ÑÑÑлки',noEmail:'ÐожалÑйÑÑа, введиÑе адÑÐµÑ Ñл. поÑÑÑ'},anchor:{toolbar:'ÐÑÑавиÑÑ/РедакÑиÑоваÑÑ ÑкоÑÑ',menu:'СвойÑÑва ÑкоÑÑ',title:'СвойÑÑва ÑкоÑÑ',name:'ÐÐ¼Ñ ÑкоÑÑ',errorName:'ÐожалÑйÑÑа, введиÑе Ð¸Ð¼Ñ ÑкоÑÑ',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'ÐайÑи и замениÑÑ',find:'ÐайÑи',replace:'ÐамениÑÑ',findWhat:'ÐайÑи:',replaceWith:'ÐамениÑÑ Ð½Ð°:',notFoundMsg:'УказаннÑй ÑекÑÑ Ð½Ðµ найден.',matchCase:'УÑиÑÑваÑÑ ÑегиÑÑÑ',matchWord:'ТолÑко Ñлово Ñеликом',matchCyclic:'ÐаÑинаÑÑ Ñ Ð½Ð°Ñала поÑле доÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñа',replaceAll:'ÐамениÑÑ Ð²Ñе',replaceSuccessMsg:'%1 Ñовпадение(й) заменено.'},table:{toolbar:'ТаблиÑа',title:'СвойÑÑва ÑаблиÑÑ',menu:'СвойÑÑва ÑаблиÑÑ',deleteTable:'УдалиÑÑ ÑаблиÑÑ',rows:'СÑÑоки',columns:'Ðолонки',border:'Ð Ð°Ð·Ð¼ÐµÑ Ð±Ð¾ÑдÑÑа',widthPx:'пикÑелей',widthPc:'пÑоÑенÑов',widthUnit:'width unit',cellSpace:'ÐÑомежÑÑок (spacing)',cellPad:'ÐÑÑÑÑп (padding)',caption:'Ðаголовок',summary:'РезÑме',headers:'Ðаголовки',headersNone:'ÐеÑ',headersColumn:'ÐеÑвÑй ÑÑолбеÑ',headersRow:'ÐеÑÐ²Ð°Ñ ÑÑÑока',headersBoth:'Ðба ваÑианÑа',invalidRows:'ЧиÑло ÑÑÑок должно бÑÑÑ Ð±Ð¾Ð»ÑÑе 0.',invalidCols:'ЧиÑло ÑÑолбÑов должно бÑÑÑ Ð±Ð¾Ð»ÑÑе 0.',invalidBorder:'ШиÑина боÑдÑÑа должна бÑÑÑ ÑиÑлом.',invalidWidth:'ШиÑина ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ ÑиÑлом.',invalidHeight:'ÐÑÑоÑа ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ ÑиÑлом.',invalidCellSpacing:'Ð Ð°Ð·Ð¼ÐµÑ Ð¿ÑомежÑÑков (cellspacing) Ð¼ÐµÐ¶Ð´Ñ ÑÑейками Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑиÑлом.',invalidCellPadding:'ÐÑÑÑÑÐ¿Ñ Ð²Ð½ÑÑÑи ÑÑеек (cellpadding) Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑиÑлом.',cell:{menu:'ЯÑейка',insertBefore:'ÐÑÑавиÑÑ ÑÑÐµÐ¹ÐºÑ Ð´Ð¾',insertAfter:'ÐÑÑавиÑÑ ÑÑÐµÐ¹ÐºÑ Ð¿Ð¾Ñле',deleteCell:'УдалиÑÑ ÑÑейки',merge:'ÐбÑединиÑÑ ÑÑейки',mergeRight:'ÐбÑединиÑÑ Ñ Ð¿Ñавой',mergeDown:'ÐбÑединиÑÑ Ñ Ð½Ð¸Ð¶Ð½ÐµÐ¹',splitHorizontal:'РазбиÑÑ ÑÑÐµÐ¹ÐºÑ Ð³Ð¾ÑизонÑалÑно',splitVertical:'РазбиÑÑ ÑÑÐµÐ¹ÐºÑ Ð²ÐµÑÑикалÑно',title:'СвойÑÑва ÑÑейки',cellType:'Тип ÑÑейки',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'ÐеÑÐµÐ½Ð¾Ñ Ð¿Ð¾ Ñловам',hAlign:'ÐÑÑавнивание по гоÑизонÑали',vAlign:'ÐÑÑавнивание по веÑÑикали',alignBaseline:'Ðо базовой линии',bgColor:'Ð¦Ð²ÐµÑ Ñона',borderColor:'Ð¦Ð²ÐµÑ Ð³ÑаниÑÑ',data:'ÐаннÑе',header:'Ðаголовок',yes:'Ðа',no:'ÐеÑ',invalidWidth:'ШиÑина ÑÑейки должна бÑÑÑ ÑиÑлом.',invalidHeight:'ÐÑÑоÑа ÑÑейки должна бÑÑÑ ÑиÑлом.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'ÐÑбеÑиÑе'},row:{menu:'СÑÑока',insertBefore:'ÐÑÑавиÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð¾',insertAfter:'ÐÑÑавиÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ñле',deleteRow:'УдалиÑÑ ÑÑÑоки'},column:{menu:'Ðолонка',insertBefore:'ÐÑÑавиÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ Ð´Ð¾',insertAfter:'ÐÑÑавиÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ Ð¿Ð¾Ñле',deleteColumn:'УдалиÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸'}},button:{title:'СвойÑÑва кнопки',text:'ТекÑÑ (ÐнаÑение)',type:'Тип',typeBtn:'Ðнопка',typeSbm:'ÐÑпÑавиÑÑ',typeRst:'СбÑоÑиÑÑ'},checkboxAndRadio:{checkboxTitle:'СвойÑÑва Ñлаговой кнопки',radioTitle:'СвойÑÑва кнопки вÑбоÑа',value:'ÐнаÑение',selected:'ÐÑбÑаннаÑ'},form:{title:'СвойÑÑва ÑоÑмÑ',menu:'СвойÑÑва ÑоÑмÑ',action:'ÐейÑÑвие',method:'ÐеÑод',encoding:'ÐодиÑовка'},select:{title:'СвойÑÑва ÑпиÑка',selectInfo:'ÐнÑоÑмаÑиÑ',opAvail:'ÐоÑÑÑпнÑе ваÑианÑÑ',value:'ÐнаÑение',size:'РазмеÑ',lines:'линии',chkMulti:'РазÑеÑиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑвеннÑй вÑбоÑ',opText:'ТекÑÑ',opValue:'ÐнаÑение',btnAdd:'ÐобавиÑÑ',btnModify:'ÐодиÑиÑиÑоваÑÑ',btnUp:'ÐвеÑÑ ',btnDown:'Ðниз',btnSetValue:'УÑÑановиÑÑ ÐºÐ°Ðº вÑбÑанное знаÑение',btnDelete:'УдалиÑÑ'},textarea:{title:'СвойÑÑва ÑекÑÑовой облаÑÑи',cols:'Ðолонки',rows:'СÑÑоки'},textfield:{title:'СвойÑÑва ÑекÑÑового полÑ',name:'ÐмÑ',value:'ÐнаÑение',charWidth:'ШиÑина',maxChars:'ÐакÑ. кол-во Ñимволов',type:'Тип',typeText:'ТекÑÑ',typePass:'ÐаÑолÑ'},hidden:{title:'СвойÑÑва ÑкÑÑÑого полÑ',name:'ÐмÑ',value:'ÐнаÑение'},image:{title:'СвойÑÑва изобÑажениÑ',titleButton:'СвойÑÑва кнопки Ñ Ð¸Ð·Ð¾Ð±Ñажением',menu:'СвойÑÑва изобÑажениÑ',infoTab:'ÐнÑоÑмаÑÐ¸Ñ Ð¾ изобÑажении',btnUpload:'ÐÑпÑавиÑÑ Ð½Ð° ÑеÑвеÑ',upload:'ÐакаÑаÑÑ',alt:'ÐлÑÑеÑнаÑивнÑй ÑекÑÑ',lockRatio:'Ð¡Ð¾Ñ ÑанÑÑÑ Ð¿ÑопоÑÑии',resetSize:'СбÑоÑиÑÑ ÑазмеÑ',border:'ÐоÑдÑÑ',hSpace:'ÐоÑизонÑалÑнÑй оÑÑÑÑп',vSpace:'ÐеÑÑикалÑнÑй оÑÑÑÑп',alertUrl:'ÐожалÑйÑÑа, введиÑе URL изобÑажениÑ',linkTab:'СÑÑлка',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'ÐÑÑÑÑÑÑвÑÐµÑ URL каÑÑинки.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'СвойÑÑва Flash',propertiesTab:'СвойÑÑва',title:'СвойÑÑва Flash',chkPlay:'ÐвÑо пÑоигÑÑвание',chkLoop:'ÐовÑоÑ',chkMenu:'ÐклÑÑиÑÑ Ð¼ÐµÐ½Ñ Flash',chkFull:'ÑазÑеÑиÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑкÑаннÑй Ñежим',scale:'ÐаÑÑÑабиÑоваÑÑ',scaleAll:'ÐоказÑваÑÑ Ð²Ñе',scaleNoBorder:'Ðез боÑдÑÑа',scaleFit:'ТоÑное Ñовпадение',access:'ÐблаÑÑÑ Ð´Ð¾ÑÑÑпа ÑкÑипÑа',accessAlways:'ÐÑегда',accessSameDomain:'Ð¢Ð¾Ñ Ð¶Ðµ домен',accessNever:'Ðикогда',alignAbsBottom:'ÐÐ±Ñ Ð¿Ð¾Ð½Ð¸Ð·Ñ',alignAbsMiddle:'ÐÐ±Ñ Ð¿Ð¾ÑеÑедине',alignBaseline:'Ðо базовой линии',alignTextTop:'ТекÑÑ Ð½Ð°Ð²ÐµÑÑ Ñ',quality:'ÐаÑеÑÑво',qualityBest:'ÐÑÑÑее',qualityHigh:'ÐÑÑокое',qualityAutoHigh:'ÐÑÑокое (авÑо)',qualityMedium:'СÑеднее',qualityAutoLow:'Ðизкое (авÑо)',qualityLow:'Ðизкое',windowModeWindow:'Ðкно',windowModeOpaque:'ÐепÑозÑаÑнÑй',windowModeTransparent:'ÐÑозÑаÑнÑй',windowMode:'ÐконнÑй Ñежим',flashvars:'ÐеÑеменнÑе Ð´Ð»Ñ Flash',bgcolor:'Ð¦Ð²ÐµÑ Ñона',hSpace:'ÐоÑизонÑалÑнÑй оÑÑÑÑп',vSpace:'ÐеÑÑикалÑнÑй оÑÑÑÑп',validateSrc:'ÐожалÑйÑÑа, введиÑе URL ÑÑÑлки',validateHSpace:'ÐоÑизонÑалÑнÑй оÑÑÑÑп задаеÑÑÑ ÑиÑлом.',validateVSpace:'ÐеÑÑикалÑнÑй оÑÑÑÑп задаеÑÑÑ ÑиÑлом.'},spellCheck:{toolbar:'ÐÑовеÑиÑÑ Ð¾ÑÑогÑаÑиÑ',title:'ÐÑовеÑка пÑавопиÑаниÑ',notAvailable:'ÐзвиниÑе, ÑеÑÐ²Ð¸Ñ ÑейÑÐ°Ñ Ð½ÐµÐ´Ð¾ÑÑÑпен.',errorLoading:'ÐÑибка пÑи загÑÑзке ÑлÑжебного Ñ Ð¾ÑÑа пÑиложениÑ: %s.',notInDic:'ÐÐµÑ Ð² ÑловаÑе',changeTo:'ÐамениÑÑ Ð½Ð°',btnIgnore:'ÐгноÑиÑоваÑÑ',btnIgnoreAll:'ÐгноÑиÑоваÑÑ Ð²Ñе',btnReplace:'ÐамениÑÑ',btnReplaceAll:'ÐамениÑÑ Ð²Ñе',btnUndo:'ÐÑмениÑÑ',noSuggestions:'- ÐÐµÑ Ð¿Ñедположений -',progress:'ÐÐ´ÐµÑ Ð¿ÑовеÑка оÑÑогÑаÑии...',noMispell:'ÐÑовеÑка оÑÑогÑаÑии законÑена: оÑибок не найдено',noChanges:'ÐÑовеÑка оÑÑогÑаÑии законÑена: ни одного Ñлова не изменено',oneChange:'ÐÑовеÑка оÑÑогÑаÑии законÑена: одно Ñлово изменено',manyChanges:'ÐÑовеÑка оÑÑогÑаÑии законÑена: 1% Ñлов изменено',ieSpellDownload:'ÐодÑÐ»Ñ Ð¿ÑовеÑки оÑÑогÑаÑии не ÑÑÑановлен. ХоÑиÑе ÑкаÑаÑÑ ÐµÐ³Ð¾ ÑейÑаÑ?'},smiley:{toolbar:'Смайлик',title:'ÐÑÑавиÑÑ Ñмайлик',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 ÑлеменÑ'},numberedlist:'ÐÑмеÑованнÑй ÑпиÑок',bulletedlist:'ÐаÑкиÑованнÑй ÑпиÑок',indent:'УвелиÑиÑÑ Ð¾ÑÑÑÑп',outdent:'УменÑÑиÑÑ Ð¾ÑÑÑÑп',justify:{left:'Ðо Ð»ÐµÐ²Ð¾Ð¼Ñ ÐºÑаÑ',center:'Ðо ÑенÑÑÑ',right:'Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ',block:'Ðо ÑиÑине'},blockquote:'ЦиÑаÑа',clipboard:{title:'ÐÑÑавиÑÑ',cutError:'ÐаÑÑÑойки безопаÑноÑÑи ваÑего бÑаÑзеÑа не позволÑÑÑ ÑедакÑоÑÑ Ð°Ð²ÑомаÑиÑеÑки вÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑии вÑÑезаниÑ. ÐожалÑйÑÑа, иÑполÑзÑйÑе клавиаÑÑÑÑ Ð´Ð»Ñ ÑÑого (Ctrl/Cmd+X).',copyError:'ÐаÑÑÑойки безопаÑноÑÑи ваÑего бÑаÑзеÑа не позволÑÑÑ ÑедакÑоÑÑ Ð°Ð²ÑомаÑиÑеÑки вÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑии копиÑованиÑ. ÐожалÑйÑÑа, иÑполÑзÑйÑе клавиаÑÑÑÑ Ð´Ð»Ñ ÑÑого (Ctrl/Cmd+C).',pasteMsg:'ÐожалÑйÑÑа, вÑÑавÑÑе ÑекÑÑ Ð² пÑÑмоÑголÑник, иÑполÑзÑÑ ÑоÑеÑание ÐºÐ»Ð°Ð²Ð¸Ñ (<STRONG>Ctrl/Cmd+V</STRONG>), и нажмиÑе <STRONG>OK</STRONG>.',securityMsg:'Ðо пÑиÑине наÑÑÑоек безопаÑноÑÑи бÑаÑзеÑа, ÑедакÑÐ¾Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑпа к даннÑм бÑÑеÑа обмена напÑÑмÑÑ. Ðам Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑÑавиÑÑ ÑекÑÑ Ñнова в ÑÑо окно.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'ТекÑÑ, коÑоÑÑй Ð²Ñ Ñ Ð¾ÑиÑе вÑÑавиÑÑ, Ð¿Ð¾Ñ Ð¾Ð¶ на копиÑÑемÑй из Word. ÐÑ Ñ Ð¾ÑиÑе оÑиÑÑиÑÑ ÐµÐ³Ð¾ пеÑед вÑÑавкой?',toolbar:'ÐÑÑавиÑÑ Ð¸Ð· Word',title:'ÐÑÑавиÑÑ Ð¸Ð· Word',error:'Ðевозможно оÑиÑÑиÑÑ Ð²ÑÑавленнÑе даннÑе из-за внÑÑÑенней оÑибки'},pasteText:{button:'ÐÑÑавиÑÑ ÑолÑко ÑекÑÑ',title:'ÐÑÑавиÑÑ ÑолÑко ÑекÑÑ'},templates:{button:'ШаблонÑ',title:'Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ ÑодеÑжимого',options:'Template Options',insertOption:'ÐамениÑÑ ÑекÑÑее ÑодеÑжание',selectPromptMsg:'ÐожалÑйÑÑа, вÑбеÑеÑе Ñаблон Ð´Ð»Ñ Ð¾ÑкÑÑÑÐ¸Ñ Ð² ÑедакÑоÑе<br>(ÑекÑÑее ÑодеÑжимое бÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑно):',emptyListMsg:'(Ðи одного Ñаблона не опÑеделено)'},showBlocks:'ÐоказаÑÑ Ð±Ð»Ð¾ÐºÐ¸',stylesCombo:{label:'СÑилÑ',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'СÑили обÑекÑа'},format:{label:'ФоÑмаÑиÑование',panelTitle:'ФоÑмаÑиÑование',tag_p:'ÐоÑмалÑнÑй',tag_pre:'ФоÑмаÑиÑованнÑй',tag_address:'ÐдÑеÑ',tag_h1:'Ðаголовок 1',tag_h2:'Ðаголовок 2',tag_h3:'Ðаголовок 3',tag_h4:'Ðаголовок 4',tag_h5:'Ðаголовок 5',tag_h6:'Ðаголовок 6',tag_div:'ÐоÑмалÑнÑй (DIV)'},div:{title:'СоздаÑÑ Div-конÑейнеÑ',toolbar:'СоздаÑÑ Div-конÑейнеÑ',cssClassInputLabel:'ÐлаÑÑÑ ÑаблиÑÑ ÑÑилей',styleSelectLabel:'СÑилÑ',IdInputLabel:'Id',languageCodeInputLabel:'Ðод ÑзÑка',inlineStyleInputLabel:'ÐокалÑнÑй ÑÑилÑ',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'ÐапÑавление пиÑÑма',langDirLTRLabel:'Слева напÑаво (LTR)',langDirRTLLabel:'СпÑава налево (RTL)',edit:'РедакÑиÑоваÑÑ Div',remove:'УбÑаÑÑ Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ШÑиÑÑ',voiceLabel:'ШÑиÑÑ',panelTitle:'ШÑиÑÑ'},fontSize:{label:'РазмеÑ',voiceLabel:'Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа',panelTitle:'РазмеÑ'},colorButton:{textColorTitle:'Ð¦Ð²ÐµÑ ÑекÑÑа',bgColorTitle:'Ð¦Ð²ÐµÑ Ñона',panelTitle:'Colors',auto:'ÐвÑомаÑиÑеÑкий',more:'ЦвеÑа...'},colors:{'000':'ЧеÑнÑй',800000:'ÐоÑдовÑй','8B4513':'СÑаÑой кожи','2F4F4F':'ТемнÑй ÑиневаÑо-ÑеÑÑй','008080':'ЧайнÑй','000080':'Темно-ÑиниÑй','4B0082':'Ðндиго',696969:'ÐÑÑзно-ÑеÑÑй',B22222:'ÐгнеÑпоÑнÑй киÑпиÑ',A52A2A:'ÐоÑиÑневÑй',DAA520:'ÐÑаÑное золоÑо','006400':'Темно-зеленÑй','40E0D0':'ÐиÑÑзовÑй','0000CD':'Синий',800080:'ÐÑÑпÑÑнÑй',808080:'СеÑÑй',F00:'ÐÑаÑнÑй',FF8C00:'Темно-оÑанжевÑй',FFD700:'ÐолоÑой','008000':'ÐеленÑй','0FF':'ÐоÑÑкой волнÑ','00F':'ÐолÑбой',EE82EE:'ФиолеÑовÑй',A9A9A9:'Темно-ÑеÑÑй',FFA07A:'СвеÑлÑй оÑанжево-ÑозовÑй',FFA500:'ÐÑанжевÑй',FFFF00:'ÐелÑÑй','00FF00':'ÐзвеÑÑковÑй',AFEEEE:'Ðледно-биÑÑзовÑй',ADD8E6:'СвелÑо-Ñиний',DDA0DD:'СливовÑй',D3D3D3:'СвеÑло-ÑеÑÑй',FFF0F5:'ÐледнÑй Ñозово-лиловÑй ',FAEBD7:'ÐнÑиÑнÑй белÑй',FFFFE0:'СвеÑло-желÑÑй',F0FFF0:'Свежего меда',F0FFFF:'ÐазÑÑÑ',F0F8FF:'Ðледно-голÑбой',E6E6FA:'Ðледно-лиловÑй',FFF:'ÐелÑй'},scayt:{title:'ÐÑовеÑка ÐÑÑогÑаÑии по ÐеÑе Ðвода',opera_title:'Not supported by Opera',enable:'ÐклÑÑиÑÑ ÐÐÐÐ',disable:'ÐÑклÑÑиÑÑ ÐÐÐÐ',about:'Ð ÐÐÐÐ',toggle:'ÐеÑеклÑÑиÑÑ ÐÐÐÐ',options:'ÐаÑÑÑойки',langs:'ЯзÑки',moreSuggestions:'ÐолÑÑе ваÑианÑов',ignore:'ÐÑопÑÑÑиÑÑ',ignoreAll:'ÐÑопÑÑÑиÑÑ Ð²ÑÑ',addWord:'ÐобавиÑÑ Ñлово',emptyDic:'ÐÐ¼Ñ ÑловаÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð½Ðµ пÑÑÑÑм.',optionsTab:'ÐаÑÑÑойки',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'ЯзÑки',dictionariesTab:'СловаÑи',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Ð ÑловаÑÑÑ '},about:{title:'РпÑогÑамме CKEditor',dlgTitle:'РпÑогÑамме CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Ðо вопÑоÑам лиÑензиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑаÑайÑеÑÑ Ð½Ð° Ð½Ð°Ñ ÑайÑ:',copy:'Copyright © $1. ÐÑе пÑава заÑиÑенÑ.'},maximize:'ÐакÑимизиÑоваÑÑ',minimize:'ÐинимизиÑоваÑÑ',fakeobjects:{anchor:'ЯкоÑÑ',flash:'Flash-анимаÑиÑ',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'ÐеизвеÑÑнÑй обÑекÑ'},resize:'ÐеÑеÑаÑиÑе Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑазмеÑа',colordialog:{title:'ÐÑбеÑиÑе ÑвеÑ',options:'Color Options',highlight:'ÐÑделиÑÑ',selected:'ÐÑбÑанное',clear:'ÐÑиÑÑиÑÑ'},toolbarCollapse:'СвеÑнÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð¸Ð½ÑÑÑÑменÑов',toolbarExpand:'РазвеÑнÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð¸Ð½ÑÑÑÑменÑов',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'СвойÑÑва докÑменÑа',title:'СвойÑÑва докÑменÑа',design:'Design',meta:'ÐеÑа даннÑе',chooseColor:'ÐÑбеÑиÑе',other:'<дÑÑгой>',docTitle:'Ðаголовок ÑÑÑаниÑÑ',charset:'ÐодиÑовка набоÑа Ñимволов',charsetOther:'ÐÑÑÐ³Ð°Ñ ÐºÐ¾Ð´Ð¸Ñовка набоÑа Ñимволов',charsetASCII:'ASCII',charsetCE:'ЦенÑÑалÑно-евÑопейÑкаÑ',charsetCT:'ÐиÑайÑÐºÐ°Ñ ÑÑадиÑÐ¸Ð¾Ð½Ð½Ð°Ñ (Big5)',charsetCR:'ÐиÑиллиÑа',charsetGR:'ÐÑеÑеÑкаÑ',charsetJP:'ЯпонÑкаÑ',charsetKR:'ÐоÑейÑкаÑ',charsetTR:'ТÑÑеÑкаÑ',charsetUN:'Юникод (UTF-8)',charsetWE:'Ðападно-евÑопейÑкаÑ',docType:'Ðаголовок Ñипа докÑменÑа',docTypeOther:'ÐÑÑгой заголовок Ñипа докÑменÑа',xhtmlDec:'ÐклÑÑиÑÑ XHTML обÑÑвлениÑ',bgColor:'Ð¦Ð²ÐµÑ Ñона',bgImage:'URL изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñона',bgFixed:'ÐеÑкÑоллиÑÑемÑй Ñон',txtColor:'Ð¦Ð²ÐµÑ ÑекÑÑа',margin:'ÐÑÑÑÑÐ¿Ñ ÑÑÑаниÑÑ',marginTop:'ÐеÑÑ Ð½Ð¸Ð¹',marginLeft:'ÐевÑй',marginRight:'ÐÑавÑй',marginBottom:'Ðижний',metaKeywords:'ÐлÑÑевÑе Ñлова докÑменÑа (ÑазделеннÑе запÑÑой)',metaDescription:'ÐпиÑание докÑменÑа',metaAuthor:'ÐвÑоÑ',metaCopyright:'ÐвÑоÑÑкие пÑава',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/sk.js b/lang/sk.js new file mode 100644 index 0000000..22e2b82 --- /dev/null +++ b/lang/sk.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.sk={dir:'ltr',editorTitle:'Rich text editor, %1, stlaÄte ALT 0 pre nápovedu.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Zdroj',newPage:'Nová stránka',save:'UložiÅ¥',preview:'Náhľad',cut:'Vystrihnúť',copy:'KopÃrovaÅ¥',paste:'VložiÅ¥',print:'TlaÄ',underline:'PodÄiarknuté',bold:'TuÄné',italic:'KurzÃva',selectAll:'VybraÅ¥ vÅ¡etko',removeFormat:'OdstrániÅ¥ formátovanie',strike:'PreÄiarknuté',subscript:'Dolný index',superscript:'Horný index',horizontalrule:'VložiÅ¥ vodorovnú Äiaru',pagebreak:'VložiÅ¥ oddeľovaÄ stránky',pagebreakAlt:'Zalomenie strany',unlink:'OdstrániÅ¥ odkaz',undo:'Späť',redo:'Znovu',common:{browseServer:'PrechádzaÅ¥ server',url:'URL',protocol:'Protokol',upload:'OdoslaÅ¥',uploadSubmit:'OdoslaÅ¥ na server',image:'Obrázok',flash:'Flash',form:'Formulár',checkbox:'ZaÅ¡krtávacie polÃÄko',radio:'PrepÃnaÄ',textField:'Textové pole',textarea:'Textová oblasÅ¥',hiddenField:'Skryté pole',button:'TlaÄidlo',select:'Rozbaľovacà zoznam',imageButton:'Obrázkové tlaÄidlo',notSet:'<nenastavené>',id:'Id',name:'Meno',langDir:'Orientácia jazyka',langDirLtr:'Zľava doprava (LTR)',langDirRtl:'Sprava doľava (RTL)',langCode:'Kód jazyka',longDescr:'Dlhý popis URL',cssClass:'Trieda Å¡týlu',advisoryTitle:'Pomocný titulok',cssStyle:'Å týl',ok:'OK',cancel:'ZruÅ¡iÅ¥',close:'Zatvorit',preview:'Náhľad',generalTab:'Hlavné',advancedTab:'RozÅ¡Ãrené',validateNumberFailed:'Hodnota nieje ÄÃslo.',confirmNewPage:'Prajete si naÄÃtat novú stránku? VÅ¡etky neuložené zmeny budú stratené. ',confirmCancel:'Niektore možnosti boli zmenené. Naozaj chcete zavrieÅ¥ okno?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Å Ãrka',height:'Výška',align:'Zarovnanie',alignLeft:'Vľavo',alignRight:'Vpravo',alignCenter:'Na stred',alignTop:'Nahor',alignMiddle:'Na stred',alignBottom:'Dole',invalidHeight:'Výška musà byÅ¥ ÄÃslo.',invalidWidth:'Å Ãrka musà byÅ¥ ÄÃslo.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'VložiÅ¥ Å¡peciálne znaky',title:'Výber Å¡peciálneho znaku',options:'Možnosti Å¡pecÃalneho znaku'},link:{toolbar:'VložiÅ¥/zmeniÅ¥ odkaz',other:'<iný>',menu:'ZmeniÅ¥ odkaz',title:'Odkaz',info:'Informácie o odkaze',target:'Cieľ',upload:'OdoslaÅ¥',advanced:'RozÅ¡Ãrené',type:'Typ odkazu',toUrl:'URL',toAnchor:'Kotva v tejto stránke',toEmail:'E-Mail',targetFrame:'<rámec>',targetPopup:'<vyskakovacie okno>',targetFrameName:'Meno rámu cieľa',targetPopupName:'Názov vyskakovacieho okna',popupFeatures:'Vlastnosti vyskakovacieho okna',popupResizable:'Meniteľná veľkosÅ¥',popupStatusBar:'Stavový riadok',popupLocationBar:'Panel umiestnenia',popupToolbar:'Panel nástrojov',popupMenuBar:'Panel ponuky',popupFullScreen:'Celá obrazovka (IE)',popupScrollBars:'PosuvnÃky',popupDependent:'ZávislosÅ¥ (Netscape)',popupLeft:'Ľavý okraj',popupTop:'Horný okraj',id:'Id',langDir:'Orientácia jazyka',langDirLTR:'Zľava doprava (LTR)',langDirRTL:'Sprava doľava (RTL)',acccessKey:'PrÃstupový kľúÄ',name:'Meno',langCode:'Orientácia jazyka',tabIndex:'Poradie prvku',advisoryTitle:'Pomocný titulok',advisoryContentType:'Pomocný typ obsahu',cssClasses:'Trieda Å¡týlu',charset:'Priradená znaková sada',styles:'Å týl',rel:'Relationship',selectAnchor:'VybraÅ¥ kotvu',anchorName:'Podľa mena kotvy',anchorId:'Podľa Id objektu',emailAddress:'E-Mailová adresa',emailSubject:'Predmet správy',emailBody:'Telo správy',noAnchors:'(V stránke nie je definovaná žiadna kotva)',noUrl:'Zadajte prosÃm URL odkazu',noEmail:'Zadajte prosÃm e-mailovú adresu'},anchor:{toolbar:'VložiÅ¥/zmeniÅ¥ kotvu',menu:'Vlastnosti kotvy',title:'Vlastnosti kotvy',name:'Meno kotvy',errorName:'Zadajte prosÃm meno kotvy',remove:'Remove Anchor'},list:{numberedTitle:'Vlastnosti ÄÃselného zoznamu',bulletedTitle:'Bulleted List Properties',type:'Druh',start:'ZaÄiatok',validateStartNumber:'ZaÄiatoÄné ÄÃslo ÄÃselného zoznamu musà byÅ¥ celé ÄÃslo.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'NájsÅ¥ a nahradiÅ¥',find:'HľadaÅ¥',replace:'NahradiÅ¥',findWhat:'Äo hľadaÅ¥:',replaceWith:'ÄÃm nahradiÅ¥:',notFoundMsg:'Hľadaný text nebol nájdený.',matchCase:'RozliÅ¡ovaÅ¥ malé/veľké pÃsmená',matchWord:'Len celé slová',matchCyclic:'Match cyclic',replaceAll:'NahradiÅ¥ vÅ¡etko',replaceSuccessMsg:'%1 výskyt(ov) nahradených.'},table:{toolbar:'Tabuľka',title:'Vlastnosti tabuľky',menu:'Vlastnosti tabuľky',deleteTable:'VymazaÅ¥ tabuľku',rows:'Riadky',columns:'Stĺpce',border:'OhraniÄenie',widthPx:'pixelov',widthPc:'percent',widthUnit:'width unit',cellSpace:'VzdialenosÅ¥ buniek',cellPad:'Odsadenie obsahu',caption:'Popis',summary:'Prehľad',headers:'HlaviÄka',headersNone:'Žiadne',headersColumn:'Prvý stĺpec',headersRow:'Prvý riadok',headersBoth:'Obe',invalidRows:'PoÄet riadkov musà byÅ¥ ÄÃslo väÄÅ¡ie ako 0.',invalidCols:'PoÄet stĺpcov musà byÅ¥ ÄÃslo väÄÅ¡ie ako 0.',invalidBorder:'Å irka rámu musà byÅ¥ celé ÄÃslo.',invalidWidth:'Å irka tabuľky musà byÅ¥ ÄÃslo.',invalidHeight:'Výška tabuľky musà byÅ¥ ÄÃslo.',invalidCellSpacing:'Medzera mädzi bunkami (spacing) musà byÅ¥ ÄÃslo.',invalidCellPadding:'Odsadenie v bunkách (padding) musà byÅ¥ ÄÃslo.',cell:{menu:'Bunka',insertBefore:'VložiÅ¥ bunku pred',insertAfter:'VložiÅ¥ bunku za',deleteCell:'VymazaÅ¥ bunky',merge:'ZlúÄiÅ¥ bunky',mergeRight:'ZlúÄiÅ¥ doprava',mergeDown:'ZlúÄiÅ¥ dole',splitHorizontal:'RozdeliÅ¥ bunky horizontálne',splitVertical:'RozdeliÅ¥ bunky vertikálne',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Riadok',insertBefore:'VložiÅ¥ riadok za',insertAfter:'VložiÅ¥ riadok pred',deleteRow:'VymazaÅ¥ riadok'},column:{menu:'Stĺpec',insertBefore:'VložiÅ¥ stĺpec za',insertAfter:'VložiÅ¥ stĺpec pred',deleteColumn:'ZmazaÅ¥ stĺpec'}},button:{title:'Vlastnosti tlaÄidla',text:'Text',type:'Typ',typeBtn:'TlaÄidlo',typeSbm:'OdoslaÅ¥',typeRst:'VymazaÅ¥'},checkboxAndRadio:{checkboxTitle:'Vlastnosti zaÅ¡krtávacieho polÃÄka',radioTitle:'Vlastnosti prepÃnaÄa',value:'Hodnota',selected:'Vybrané'},form:{title:'Vlastnosti formulára',menu:'Vlastnosti formulára',action:'Akcie',method:'Metóda',encoding:'Kódovanie'},select:{title:'Vlastnosti rozbaľovacieho zoznamu',selectInfo:'Info',opAvail:'Dostupné možnosti',value:'Hodnota',size:'VeľkosÅ¥',lines:'riadkov',chkMulti:'PovoliÅ¥ viacnásobný výber',opText:'Text',opValue:'Hodnota',btnAdd:'PridaÅ¥',btnModify:'ZmeniÅ¥',btnUp:'Hore',btnDown:'Dole',btnSetValue:'NastaviÅ¥ ako vybranú hodnotu',btnDelete:'ZmazaÅ¥'},textarea:{title:'Vlastnosti textovej oblasti',cols:'Stĺpce',rows:'Riadky'},textfield:{title:'Vlastnosti textového poľa',name:'Názov',value:'Hodnota',charWidth:'Å Ãrka pola (znakov)',maxChars:'Maximálny poÄet znakov',type:'Typ',typeText:'Text',typePass:'Heslo'},hidden:{title:'Vlastnosti skrytého poľa',name:'Názov',value:'Hodnota'},image:{title:'Vlastnosti obrázku',titleButton:'Vlastnosti obrázkového tlaÄidla',menu:'Vlastnosti obrázku',infoTab:'Informácie o obrázku',btnUpload:'OdoslaÅ¥ na server',upload:'OdoslaÅ¥',alt:'AlternatÃvny text',lockRatio:'Zámok',resetSize:'Pôvodná veľkosÅ¥',border:'Okraje',hSpace:'H-medzera',vSpace:'V-medzera',alertUrl:'Zadajte prosÃm URL obrázku',linkTab:'Odkaz',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Vlastnosti Flashu',propertiesTab:'Properties',title:'Vlastnosti Flashu',chkPlay:'Automatické prehrávanie',chkLoop:'Opakovanie',chkMenu:'PovoliÅ¥ Flash Menu',chkFull:'Allow Fullscreen',scale:'Mierka',scaleAll:'ZobraziÅ¥ mierku',scaleNoBorder:'Bez okrajov',scaleFit:'RoztiahnuÅ¥ na celé',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Ãplne dole',alignAbsMiddle:'Do stredu',alignBaseline:'Na základÅu',alignTextTop:'Na horný okraj textu',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Farba pozadia',hSpace:'H-medzera',vSpace:'V-medzera',validateSrc:'Zadajte prosÃm URL odkazu',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Kontrola pravopisu',title:'Spell Check',notAvailable:'Služba práve nieje dostupná.',errorLoading:'Chyba pri naÄÃtanà slovnÃka z adresy: %s.',notInDic:'Nie je v slovnÃku',changeTo:'ZmeniÅ¥ na',btnIgnore:'IgnorovaÅ¥',btnIgnoreAll:'IgnorovaÅ¥ vÅ¡etko',btnReplace:'PrepÃsat',btnReplaceAll:'PrepÃsat vÅ¡etko',btnUndo:'Späť',noSuggestions:'- Žiadny návrh -',progress:'Prebieha kontrola pravopisu...',noMispell:'Kontrola pravopisu dokonÄená: bez chýb',noChanges:'Kontrola pravopisu dokonÄená: žiadne slová nezmenené',oneChange:'Kontrola pravopisu dokonÄená: zmenené jedno slovo',manyChanges:'Kontrola pravopisu dokonÄená: zmenených %1 slov',ieSpellDownload:'Kontrola pravopisu nie je naiÅ¡talovaná. Chcete ju hneÄ stiahnuÅ¥?'},smiley:{toolbar:'SmajlÃky',title:'Vkladanie smajlÃkov',options:'Možnosti smajlÃkov'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ÄÃslovanie',bulletedlist:'Odrážky',indent:'ZväÄÅ¡iÅ¥ odsadenie',outdent:'ZmenÅ¡iÅ¥ odsadenie',justify:{left:'ZarovnaÅ¥ vľavo',center:'ZarovnaÅ¥ na stred',right:'ZarovnaÅ¥ vpravo',block:'ZarovnaÅ¥ do bloku'},blockquote:'Citácia',clipboard:{title:'VložiÅ¥',cutError:'BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre vystrihnutie zvoleného textu do schránky. ProsÃm vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl/Cmd+X).',copyError:'BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre kopÃrovanie zvoleného textu do schránky. ProsÃm skopÃrujte zvolený text do schránky pomocou klávesnice (Ctrl/Cmd+C).',pasteMsg:'ProsÃm vložte nasledovný rámÄek použitÃm klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlaÄte <STRONG>OK</STRONG>.',securityMsg:'BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru pristupovaÅ¥ priamo k datám v schránke. MusÃte ich vložiÅ¥ znovu do tohto okna.',pasteArea:'VložiÅ¥ pole'},pastefromword:{confirmCleanup:'Vkladaný text vyzerá byÅ¥ skopÃrovaný z Wordu. Chcete ho automaticky vyÄistiÅ¥ pred vkladanÃm?',toolbar:'VložiÅ¥ z Wordu',title:'VložiÅ¥ z Wordu',error:'Nastala chyba pri Äistenà údajov. Nie je možné vyÄistiÅ¥ vložené údaje.'},pasteText:{button:'VložiÅ¥ ako Äistý text',title:'VložiÅ¥ ako Äistý text'},templates:{button:'Å ablóny',title:'Å ablóny obsahu',options:'Vlastnosti Å¡ablóny',insertOption:'NahradiÅ¥ aktuálny obsah',selectPromptMsg:'ProsÃm vyberte Å¡ablóny na otvorenie v editore<br>(súšasný obsah bude stratený):',emptyListMsg:'(žiadne Å¡ablóny nenájdené)'},showBlocks:'UkázaÅ¥ bloky',stylesCombo:{label:'Å týl',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formát',panelTitle:'Formát',tag_p:'Normálny',tag_pre:'Formátovaný',tag_address:'Adresa',tag_h1:'Nadpis 1',tag_h2:'Nadpis 2',tag_h3:'Nadpis 3',tag_h4:'Nadpis 4',tag_h5:'Nadpis 5',tag_h6:'Nadpis 6',tag_div:'Odsek (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame - vlastnosti',toolbar:'IFrame',noUrl:'Vložte URL pre iframe',scrolling:'PovoliÅ¥ skrolovanie',border:'ZobraziÅ¥ orámovanie'},font:{label:'PÃsmo',voiceLabel:'Font',panelTitle:'PÃsmo'},fontSize:{label:'VeľkosÅ¥',voiceLabel:'VeľkosÅ¥ pÃsma',panelTitle:'VeľkosÅ¥'},colorButton:{textColorTitle:'Farba textu',bgColorTitle:'Farba pozadia',panelTitle:'Farby',auto:'Automaticky',more:'Viac farieb...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'MaximalizovaÅ¥',minimize:'MinimalizovaÅ¥',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Vlastnosti dokumentu',title:'Vlastnosti dokumentu',design:'Design',meta:'Meta Data',chooseColor:'Choose',other:'<iný>',docTitle:'Titulok',charset:'Kódová stránka',charsetOther:'Iná kódová stránka',charsetASCII:'ASCII',charsetCE:'Stredoeurópske',charsetCT:'ÄÃnÅ¡tina tradiÄná (Big5)',charsetCR:'Cyrillika',charsetGR:'GréÄtina',charsetJP:'JaponÄina',charsetKR:'KorejÄina',charsetTR:'TureÄtina',charsetUN:'Unicode (UTF-8)',charsetWE:'Západná európa',docType:'Typ záhlavia dokumentu',docTypeOther:'Iný typ záhlavia dokumentu',xhtmlDec:'Obsahuje deklarácie XHTML',bgColor:'Farba pozadia',bgImage:'URL adresa obrázku na pozadÃ',bgFixed:'Fixné pozadie',txtColor:'Farba textu',margin:'Okraje stránky',marginTop:'Horný',marginLeft:'Ľavý',marginRight:'Pravý',marginBottom:'Dolný',metaKeywords:'KľúÄové slová pre indexovanie (oddelené Äiarkou)',metaDescription:'Popis stránky',metaAuthor:'Autor',metaCopyright:'Autorské práva',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/sl.js b/lang/sl.js new file mode 100644 index 0000000..0cb50bd --- /dev/null +++ b/lang/sl.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.sl={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Izvorna koda',newPage:'Nova stran',save:'Shrani',preview:'Predogled',cut:'Izreži',copy:'Kopiraj',paste:'Prilepi',print:'Natisni',underline:'PodÄrtano',bold:'Krepko',italic:'LežeÄe',selectAll:'Izberi vse',removeFormat:'Odstrani oblikovanje',strike:'PreÄrtano',subscript:'Podpisano',superscript:'Nadpisano',horizontalrule:'Vstavi vodoravno Ärto',pagebreak:'Vstavi prelom strani',pagebreakAlt:'Page Break',unlink:'Odstrani povezavo',undo:'Razveljavi',redo:'Ponovi',common:{browseServer:'Prebrskaj na strežniku',url:'URL',protocol:'Protokol',upload:'Prenesi',uploadSubmit:'PoÅ¡lji na strežnik',image:'Slika',flash:'Flash',form:'Obrazec',checkbox:'Potrditveno polje',radio:'Izbirno polje',textField:'Vnosno polje',textarea:'Vnosno obmoÄje',hiddenField:'Skrito polje',button:'Gumb',select:'Spustni seznam',imageButton:'Gumb s sliko',notSet:'<ni postavljen>',id:'Id',name:'Ime',langDir:'Smer jezika',langDirLtr:'Od leve proti desni (LTR)',langDirRtl:'Od desne proti levi (RTL)',langCode:'Oznaka jezika',longDescr:'Dolg opis URL-ja',cssClass:'Razred stilne predloge',advisoryTitle:'Predlagani naslov',cssStyle:'Slog',ok:'V redu',cancel:'PrekliÄi',close:'Close',preview:'Preview',generalTab:'SploÅ¡no',advancedTab:'Napredno',validateNumberFailed:'Ta vrednost ni Å¡tevilo.',confirmNewPage:'Vse neshranjene spremembe te vsebine bodo izgubljene. Ali gotovo želiÅ¡ naložiti novo stran?',confirmCancel:'Nekaj možnosti je bilo spremenjenih. Ali gotovo želiÅ¡ zapreti okno?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Å irina',height:'ViÅ¡ina',align:'Poravnava',alignLeft:'Levo',alignRight:'Desno',alignCenter:'Sredinsko',alignTop:'Na vrh',alignMiddle:'V sredino',alignBottom:'Na dno',invalidHeight:'ViÅ¡ina mora biti Å¡tevilo.',invalidWidth:'Å irina mora biti Å¡tevilo.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, nedosegljiv</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Vstavi posebni znak',title:'Izberi posebni znak',options:'Special Character Options'},link:{toolbar:'Vstavi/uredi povezavo',other:'<drug>',menu:'Uredi povezavo',title:'Povezava',info:'Podatki o povezavi',target:'Cilj',upload:'Prenesi',advanced:'Napredno',type:'Vrsta povezave',toUrl:'URL',toAnchor:'Zaznamek na tej strani',toEmail:'Elektronski naslov',targetFrame:'<okvir>',targetPopup:'<pojavno okno>',targetFrameName:'Ime ciljnega okvirja',targetPopupName:'Ime pojavnega okna',popupFeatures:'ZnaÄilnosti pojavnega okna',popupResizable:'Spremenljive velikosti',popupStatusBar:'Vrstica stanja',popupLocationBar:'Naslovna vrstica',popupToolbar:'Orodna vrstica',popupMenuBar:'Menijska vrstica',popupFullScreen:'Celozaslonska slika (IE)',popupScrollBars:'Drsniki',popupDependent:'Podokno (Netscape)',popupLeft:'Lega levo',popupTop:'Lega na vrhu',id:'Id',langDir:'Smer jezika',langDirLTR:'Od leve proti desni (LTR)',langDirRTL:'Od desne proti levi (RTL)',acccessKey:'Vstopno geslo',name:'Ime',langCode:'Smer jezika',tabIndex:'Å tevilka tabulatorja',advisoryTitle:'Predlagani naslov',advisoryContentType:'Predlagani tip vsebine (content-type)',cssClasses:'Razred stilne predloge',charset:'Kodna tabela povezanega vira',styles:'Slog',rel:'Relationship',selectAnchor:'Izberi zaznamek',anchorName:'Po imenu zaznamka',anchorId:'Po ID-ju elementa',emailAddress:'Elektronski naslov',emailSubject:'Predmet sporoÄila',emailBody:'Vsebina sporoÄila',noAnchors:'(V tem dokumentu ni zaznamkov)',noUrl:'Vnesite URL povezave',noEmail:'Vnesite elektronski naslov'},anchor:{toolbar:'Vstavi/uredi zaznamek',menu:'Lastnosti zaznamka',title:'Lastnosti zaznamka',name:'Ime zaznamka',errorName:'Prosim vnesite ime zaznamka',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Najdi in zamenjaj',find:'Najdi',replace:'Zamenjaj',findWhat:'Najdi:',replaceWith:'Zamenjaj z:',notFoundMsg:'Navedeno besedilo ni bilo najdeno.',matchCase:'Razlikuj velike in male Ärke',matchWord:'Samo cele besede',matchCyclic:'Primerjaj znake v cirilici',replaceAll:'Zamenjaj vse',replaceSuccessMsg:'%1 pojavitev je bilo zamenjano.'},table:{toolbar:'Tabela',title:'Lastnosti tabele',menu:'Lastnosti tabele',deleteTable:'IzbriÅ¡i tabelo',rows:'Vrstice',columns:'Stolpci',border:'Velikost obrobe',widthPx:'pik',widthPc:'procentov',widthUnit:'width unit',cellSpace:'Razmik med celicami',cellPad:'Polnilo med celicami',caption:'Naslov',summary:'Povzetek',headers:'Glave',headersNone:'Brez',headersColumn:'Prvi stolpec',headersRow:'Prva vrstica',headersBoth:'Oboje',invalidRows:'Å tevilo vrstic mora biti veÄje od 0.',invalidCols:'Å tevilo stolpcev mora biti veÄje od 0.',invalidBorder:'Å irina obrobe mora biti Å¡tevilo.',invalidWidth:'Å irina tabele mora biti Å¡tevilo.',invalidHeight:'ViÅ¡ina tabele mora biti Å¡tevilo.',invalidCellSpacing:'Razmik med celicami mora biti Å¡tevilo.',invalidCellPadding:'Zamik celic mora biti Å¡tevilo',cell:{menu:'Celica',insertBefore:'Vstavi celico pred',insertAfter:'Vstavi celico za',deleteCell:'IzbriÅ¡i celice',merge:'Združi celice',mergeRight:'Združi desno',mergeDown:'Druži navzdol',splitHorizontal:'Razdeli celico vodoravno',splitVertical:'Razdeli celico navpiÄno',title:'Lastnosti celice',cellType:'Vrsta celice',rowSpan:'Razpon vrstic',colSpan:'Razpon stolpcev',wordWrap:'Prelom besedila',hAlign:'Vodoravna poravnava',vAlign:'NavpiÄna poravnava',alignBaseline:'Osnovnica',bgColor:'Barva ozadja',borderColor:'Barva obrobe',data:'Podatki',header:'Glava',yes:'Da',no:'Ne',invalidWidth:'Å irina celice mora biti Å¡tevilo.',invalidHeight:'ViÅ¡ina celice mora biti Å¡tevilo.',invalidRowSpan:'Razpon vrstic mora biti celo Å¡tevilo.',invalidColSpan:'Razpon stolpcev mora biti celo Å¡tevilo.',chooseColor:'Izberi'},row:{menu:'Vrstica',insertBefore:'Vstavi vrstico pred',insertAfter:'Vstavi vrstico za',deleteRow:'IzbriÅ¡i vrstice'},column:{menu:'Stolpec',insertBefore:'Vstavi stolpec pred',insertAfter:'Vstavi stolpec za',deleteColumn:'IzbriÅ¡i stolpce'}},button:{title:'Lastnosti gumba',text:'Besedilo (Vrednost)',type:'Tip',typeBtn:'Gumb',typeSbm:'Potrdi',typeRst:'Ponastavi'},checkboxAndRadio:{checkboxTitle:'Lastnosti potrditvenega polja',radioTitle:'Lastnosti izbirnega polja',value:'Vrednost',selected:'Izbrano'},form:{title:'Lastnosti obrazca',menu:'Lastnosti obrazca',action:'Akcija',method:'Metoda',encoding:'Kodiranje znakov'},select:{title:'Lastnosti spustnega seznama',selectInfo:'Podatki',opAvail:'Razpoložljive izbire',value:'Vrednost',size:'Velikost',lines:'vrstic',chkMulti:'Dovoli izbor veÄih vrstic',opText:'Besedilo',opValue:'Vrednost',btnAdd:'Dodaj',btnModify:'Spremeni',btnUp:'Gor',btnDown:'Dol',btnSetValue:'Postavi kot privzeto izbiro',btnDelete:'IzbriÅ¡i'},textarea:{title:'Lastnosti vnosnega obmoÄja',cols:'Stolpcev',rows:'Vrstic'},textfield:{title:'Lastnosti vnosnega polja',name:'Ime',value:'Vrednost',charWidth:'Dolžina',maxChars:'NajveÄje Å¡tevilo znakov',type:'Tip',typeText:'Besedilo',typePass:'Geslo'},hidden:{title:'Lastnosti skritega polja',name:'Ime',value:'Vrednost'},image:{title:'Lastnosti slike',titleButton:'Lastnosti gumba s sliko',menu:'Lastnosti slike',infoTab:'Podatki o sliki',btnUpload:'PoÅ¡lji na strežnik',upload:'PoÅ¡lji',alt:'Nadomestno besedilo',lockRatio:'Zakleni razmerje',resetSize:'Ponastavi velikost',border:'Obroba',hSpace:'Vodoravni razmik',vSpace:'NavpiÄni razmik',alertUrl:'Vnesite URL slike',linkTab:'Povezava',button2Img:'ŽeliÅ¡ pretvoriti izbrani gumb s sliko v preprosto sliko?',img2Button:'ŽeliÅ¡ pretvoriti izbrano sliko v gumb s sliko?',urlMissing:'Manjka vir (URL) slike.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Lastnosti Flash',propertiesTab:'Lastnosti',title:'Lastnosti Flash',chkPlay:'Samodejno predvajaj',chkLoop:'Ponavljanje',chkMenu:'OmogoÄi Flash Meni',chkFull:'Dovoli celozaslonski naÄin',scale:'PoveÄava',scaleAll:'Pokaži vse',scaleNoBorder:'Brez obrobe',scaleFit:'NatanÄno prileganje',access:'Dostop skript',accessAlways:'Vedno',accessSameDomain:'Samo ista domena',accessNever:'Nikoli',alignAbsBottom:'Popolnoma na dno',alignAbsMiddle:'Popolnoma v sredino',alignBaseline:'Na osnovno Ärto',alignTextTop:'Besedilo na vrh',quality:'Kakovost',qualityBest:'NajviÅ¡ja',qualityHigh:'Visoka',qualityAutoHigh:'Samodejno visoka',qualityMedium:'Srednja',qualityAutoLow:'Samodejno nizka',qualityLow:'Nizka',windowModeWindow:'Okno',windowModeOpaque:'Motno',windowModeTransparent:'Prosojno',windowMode:'Vrsta okna',flashvars:'Spremenljivke za Flash',bgcolor:'Barva ozadja',hSpace:'Vodoravni razmik',vSpace:'NavpiÄni razmik',validateSrc:'Vnesite URL povezave',validateHSpace:'Vodoravni razmik mora biti Å¡tevilo.',validateVSpace:'NavpiÄni razmik mora biti Å¡tevilo.'},spellCheck:{toolbar:'Preveri Ärkovanje',title:'Ärkovalnik',notAvailable:'Oprostite, storitev trenutno ni dosegljiva.',errorLoading:'Napaka pri nalaganju storitve programa na naslovu %s.',notInDic:'Ni v slovarju',changeTo:'Spremeni v',btnIgnore:'Prezri',btnIgnoreAll:'Prezri vse',btnReplace:'Zamenjaj',btnReplaceAll:'Zamenjaj vse',btnUndo:'Razveljavi',noSuggestions:'- Ni predlogov -',progress:'Preverjanje Ärkovanja se izvaja...',noMispell:'Ärkovanje je konÄano: Brez napak',noChanges:'Ärkovanje je konÄano: Nobena beseda ni bila spremenjena',oneChange:'Ärkovanje je konÄano: Spremenjena je bila ena beseda',manyChanges:'Ärkovanje je konÄano: Spremenjenih je bilo %1 besed',ieSpellDownload:'Ärkovalnik ni nameÅ¡Äen. Ali ga želite prenesti sedaj?'},smiley:{toolbar:'SmeÅ¡ko',title:'Vstavi smeÅ¡ka',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'OÅ¡tevilÄen seznam',bulletedlist:'OznaÄen seznam',indent:'PoveÄaj zamik',outdent:'ZmanjÅ¡aj zamik',justify:{left:'Leva poravnava',center:'Sredinska poravnava',right:'Desna poravnava',block:'Obojestranska poravnava'},blockquote:'Citat',clipboard:{title:'Prilepi',cutError:'Varnostne nastavitve brskalnika ne dopuÅ¡Äajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).',copyError:'Varnostne nastavitve brskalnika ne dopuÅ¡Äajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).',pasteMsg:'Prosim prilepite v sleÄi okvir s pomoÄjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.',securityMsg:'Zaradi varnostnih nastavitev vaÅ¡ega brskalnika urejevalnik ne more neposredno dostopati do odložiÅ¡Äa. Vsebino odložiÅ¡Äa ponovno prilepite v to okno.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Prilepi iz Worda',title:'Prilepi iz Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Prilepi kot golo besedilo',title:'Prilepi kot golo besedilo'},templates:{button:'Predloge',title:'Vsebinske predloge',options:'Template Options',insertOption:'Zamenjaj trenutno vsebino',selectPromptMsg:'Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):',emptyListMsg:'(Ni pripravljenih predlog)'},showBlocks:'Prikaži ograde',stylesCombo:{label:'Slog',panelTitle:'Formatting Styles',panelTitle1:'Slogi odstavkov',panelTitle2:'Slogi besedila',panelTitle3:'Slogi objektov'},format:{label:'Oblika',panelTitle:'Oblika',tag_p:'Navaden',tag_pre:'Oblikovan',tag_address:'Napis',tag_h1:'Naslov 1',tag_h2:'Naslov 2',tag_h3:'Naslov 3',tag_h4:'Naslov 4',tag_h5:'Naslov 5',tag_h6:'Naslov 6',tag_div:'Navaden (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Pisava',voiceLabel:'Pisava',panelTitle:'Pisava'},fontSize:{label:'Velikost',voiceLabel:'Velikost',panelTitle:'Velikost'},colorButton:{textColorTitle:'Barva besedila',bgColorTitle:'Barva ozadja',panelTitle:'Colors',auto:'Samodejno',more:'VeÄ barv...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Ärkovanje med tipkanjem',opera_title:'Not supported by Opera',enable:'OmogoÄi SCAYT',disable:'OnemogoÄi SCAYT',about:'O storitvi SCAYT',toggle:'Preklopi SCAYT',options:'Možnosti',langs:'Jeziki',moreSuggestions:'VeÄ predlogov',ignore:'Prezri',ignoreAll:'Prezri vse',addWord:'Dodaj besedo',emptyDic:'Ime slovarja ne more biti prazno.',optionsTab:'Možnosti',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Jeziki',dictionariesTab:'Slovarji',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'O storitvi'},about:{title:'O programu CKEditor',dlgTitle:'O programu CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Za informacijo o licenci prostim obiÅ¡Äite naÅ¡o spletno stran:',copy:'Copyright © $1. Vse pravice pridržane.'},maximize:'Maksimiraj',minimize:'Minimiraj',fakeobjects:{anchor:'Sidro',flash:'Flash animacija',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Neznan objekt'},resize:'Potegni za spremembo velikosti',colordialog:{title:'Izberi barvo',options:'Color Options',highlight:'Poudarjeno',selected:'Izbrano',clear:'PoÄisti'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Lastnosti dokumenta',title:'Lastnosti dokumenta',design:'Design',meta:'Meta podatki',chooseColor:'Izberi',other:'<drug>',docTitle:'Naslov strani',charset:'Kodna tabela',charsetOther:'Druga kodna tabela',charsetASCII:'ASCII',charsetCE:'Srednjeevropsko',charsetCT:'Tradicionalno Kitajsko (Big5)',charsetCR:'Cirilica',charsetGR:'GrÅ¡ko',charsetJP:'Japonsko',charsetKR:'Korejsko',charsetTR:'TurÅ¡ko',charsetUN:'Unicode (UTF-8)',charsetWE:'Zahodnoevropsko',docType:'Glava tipa dokumenta',docTypeOther:'Druga glava tipa dokumenta',xhtmlDec:'Vstavi XHTML deklaracije',bgColor:'Barva ozadja',bgImage:'URL slike za ozadje',bgFixed:'NepremiÄno ozadje',txtColor:'Barva besedila',margin:'Zamiki strani',marginTop:'Na vrhu',marginLeft:'Levo',marginRight:'Desno',marginBottom:'Spodaj',metaKeywords:'KljuÄne besede (loÄene z vejicami)',metaDescription:'Opis strani',metaAuthor:'Avtor',metaCopyright:'Avtorske pravice',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/sr-latn.js b/lang/sr-latn.js new file mode 100644 index 0000000..78fa3b7 --- /dev/null +++ b/lang/sr-latn.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang['sr-latn']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Kôd',newPage:'Nova stranica',save:'SaÄuvaj',preview:'Izgled stranice',cut:'Iseci',copy:'Kopiraj',paste:'Zalepi',print:'Å tampa',underline:'PodvuÄeno',bold:'Podebljano',italic:'Kurziv',selectAll:'OznaÄi sve',removeFormat:'Ukloni formatiranje',strike:'Precrtano',subscript:'Indeks',superscript:'Stepen',horizontalrule:'Unesi horizontalnu liniju',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Ukloni link',undo:'Poni�ti akciju',redo:'Ponovi akciju',common:{browseServer:'Pretraži server',url:'URL',protocol:'Protokol',upload:'PoÅ¡alji',uploadSubmit:'PoÅ¡alji na server',image:'Slika',flash:'FleÅ¡',form:'Forma',checkbox:'Polje za potvrdu',radio:'Radio-dugme',textField:'Tekstualno polje',textarea:'Zona teksta',hiddenField:'Skriveno polje',button:'Dugme',select:'Izborno polje',imageButton:'Dugme sa slikom',notSet:'<nije postavljeno>',id:'Id',name:'Naziv',langDir:'Smer jezika',langDirLtr:'S leva na desno (LTR)',langDirRtl:'S desna na levo (RTL)',langCode:'Kôd jezika',longDescr:'Pun opis URL',cssClass:'Stylesheet klase',advisoryTitle:'Advisory naslov',cssStyle:'Stil',ok:'OK',cancel:'Otkaži',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Napredni tagovi',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Å irina',height:'Visina',align:'Ravnanje',alignLeft:'Levo',alignRight:'Desno',alignCenter:'Sredina',alignTop:'Vrh',alignMiddle:'Sredina',alignBottom:'Dole',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Unesi specijalni karakter',title:'Odaberite specijalni karakter',options:'Special Character Options'},link:{toolbar:'Unesi/izmeni link',other:'<оÑÑало>',menu:'Izmeni link',title:'Link',info:'Link Info',target:'Meta',upload:'PoÅ¡alji',advanced:'Napredni tagovi',type:'Vrsta linka',toUrl:'URL',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',targetFrame:'<okvir>',targetPopup:'<popup prozor>',targetFrameName:'Naziv odrediÅ¡nog frejma',targetPopupName:'Naziv popup prozora',popupFeatures:'MoguÄnosti popup prozora',popupResizable:'Resizable',popupStatusBar:'Statusna linija',popupLocationBar:'Lokacija',popupToolbar:'Toolbar',popupMenuBar:'Kontekstni meni',popupFullScreen:'Prikaz preko celog ekrana (IE)',popupScrollBars:'Scroll bar',popupDependent:'Zavisno (Netscape)',popupLeft:'Od leve ivice ekrana (px)',popupTop:'Od vrha ekrana (px)',id:'Id',langDir:'Smer jezika',langDirLTR:'S leva na desno (LTR)',langDirRTL:'S desna na levo (RTL)',acccessKey:'Pristupni taster',name:'Naziv',langCode:'Smer jezika',tabIndex:'Tab indeks',advisoryTitle:'Advisory naslov',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Stylesheet klase',charset:'Linked Resource Charset',styles:'Stil',rel:'Relationship',selectAnchor:'Odaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id-ju elementa',emailAddress:'E-Mail adresa',emailSubject:'Naslov',emailBody:'Sadržaj poruke',noAnchors:'(Nema dostupnih sidra)',noUrl:'Unesite URL linka',noEmail:'Otkucajte adresu elektronske pote'},anchor:{toolbar:'Unesi/izmeni sidro',menu:'Osobine sidra',title:'Osobine sidra',name:'Ime sidra',errorName:'Unesite ime sidra',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Pretraga',replace:'Zamena',findWhat:'Pronadi:',replaceWith:'Zameni sa:',notFoundMsg:'Traženi tekst nije pronaÄen.',matchCase:'Razlikuj mala i velika slova',matchWord:'Uporedi cele reci',matchCyclic:'Match cyclic',replaceAll:'Zameni sve',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Osobine tabele',menu:'Osobine tabele',deleteTable:'Delete Table',rows:'Redova',columns:'Kolona',border:'VeliÄina okvira',widthPx:'piksela',widthPc:'procenata',widthUnit:'width unit',cellSpace:'Äelijski prostor',cellPad:'Razmak Äelija',caption:'Naslov tabele',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'ObriÅ¡i Äelije',merge:'Spoj celije',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'ObriÅ¡i redove'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'ObriÅ¡i kolone'}},button:{title:'Osobine dugmeta',text:'Tekst (vrednost)',type:'Tip',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Osobine polja za potvrdu',radioTitle:'Osobine radio-dugmeta',value:'Vrednost',selected:'OznaÄeno'},form:{title:'Osobine forme',menu:'Osobine forme',action:'Akcija',method:'Metoda',encoding:'Encoding'},select:{title:'Osobine izbornog polja',selectInfo:'Info',opAvail:'Dostupne opcije',value:'Vrednost',size:'VeliÄina',lines:'linija',chkMulti:'Dozvoli viÅ¡estruku selekciju',opText:'Tekst',opValue:'Vrednost',btnAdd:'Dodaj',btnModify:'Izmeni',btnUp:'Gore',btnDown:'Dole',btnSetValue:'Podesi kao oznaÄenu vrednost',btnDelete:'ObriÅ¡i'},textarea:{title:'Osobine zone teksta',cols:'Broj kolona',rows:'Broj redova'},textfield:{title:'Osobine tekstualnog polja',name:'Naziv',value:'Vrednost',charWidth:'Å irina (karaktera)',maxChars:'Maksimalno karaktera',type:'Tip',typeText:'Tekst',typePass:'Lozinka'},hidden:{title:'Osobine skrivenog polja',name:'Naziv',value:'Vrednost'},image:{title:'Osobine slika',titleButton:'Osobine dugmeta sa slikom',menu:'Osobine slika',infoTab:'Info slike',btnUpload:'PoÅ¡alji na server',upload:'PoÅ¡alji',alt:'Alternativni tekst',lockRatio:'ZakljuÄaj odnos',resetSize:'Resetuj veliÄinu',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Unesite URL slike',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Osobine fleÅ¡a',propertiesTab:'Properties',title:'Osobine fleÅ¡a',chkPlay:'Automatski start',chkLoop:'Ponavljaj',chkMenu:'UkljuÄi fleÅ¡ meni',chkFull:'Allow Fullscreen',scale:'Skaliraj',scaleAll:'Prikaži sve',scaleNoBorder:'Bez ivice',scaleFit:'Popuni povrÅ¡inu',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs dole',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignTextTop:'Vrh teksta',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Boja pozadine',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Unesite URL linka',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Proveri spelovanje',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nije u reÄniku',changeTo:'Izmeni',btnIgnore:'IgnoriÅ¡i',btnIgnoreAll:'IgnoriÅ¡i sve',btnReplace:'Zameni',btnReplaceAll:'Zameni sve',btnUndo:'Vrati akciju',noSuggestions:'- Bez sugestija -',progress:'Provera spelovanja u toku...',noMispell:'Provera spelovanja zavrÅ¡ena: greÅ¡ke nisu pronadene',noChanges:'Provera spelovanja zavrÅ¡ena: Nije izmenjena nijedna rec',oneChange:'Provera spelovanja zavrÅ¡ena: Izmenjena je jedna reÄ',manyChanges:'Provera spelovanja zavrÅ¡ena: %1 reÄ(i) je izmenjeno',ieSpellDownload:'Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?'},smiley:{toolbar:'Smajli',title:'Unesi smajlija',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Nabrojiva lista',bulletedlist:'Nenabrojiva lista',indent:'UveÄaj levu marginu',outdent:'Smanji levu marginu',justify:{left:'Levo ravnanje',center:'Centriran tekst',right:'Desno ravnanje',block:'Obostrano ravnanje'},blockquote:'Block Quote',clipboard:{title:'Zalepi',cutError:'Sigurnosna podeÅ¡avanja VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite preÄicu sa tastature (Ctrl/Cmd+X).',copyError:'Sigurnosna podeÅ¡avanja VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite preÄicu sa tastature (Ctrl/Cmd+C).',pasteMsg:'Molimo Vas da zalepite unutar donje povrine koristeÄi tastaturnu preÄicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Zalepi iz Worda',title:'Zalepi iz Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Zalepi kao Äist tekst',title:'Zalepi kao Äist tekst'},templates:{button:'Obrasci',title:'Obrasci za sadržaj',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):',emptyListMsg:'(Nema definisanih obrazaca)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stil',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Adresa',tag_h1:'Naslov 1',tag_h2:'Naslov 2',tag_h3:'Naslov 3',tag_h4:'Naslov 4',tag_h5:'Naslov 5',tag_h6:'Naslov 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'VeliÄina fonta',voiceLabel:'Font Size',panelTitle:'VeliÄina fonta'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',panelTitle:'Colors',auto:'Automatski',more:'ViÅ¡e boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Osobine dokumenta',title:'Osobine dokumenta',design:'Design',meta:'Metapodaci',chooseColor:'Choose',other:'<оÑÑало>',docTitle:'Naslov stranice',charset:'Kodiranje skupa karaktera',charsetOther:'Ostala kodiranja skupa karaktera',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'Zaglavlje tipa dokumenta',docTypeOther:'Ostala zaglavlja tipa dokumenta',xhtmlDec:'Ukljuci XHTML deklaracije',bgColor:'Boja pozadine',bgImage:'URL pozadinske slike',bgFixed:'Fiksirana pozadina',txtColor:'Boja teksta',margin:'Margine stranice',marginTop:'Gornja',marginLeft:'Leva',marginRight:'Desna',marginBottom:'Donja',metaKeywords:'KljuÄne reci za indeksiranje dokumenta (razdvojene zarezima)',metaDescription:'Opis dokumenta',metaAuthor:'Autor',metaCopyright:'Autorska prava',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/sr.js b/lang/sr.js new file mode 100644 index 0000000..9a1de81 --- /dev/null +++ b/lang/sr.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.sr={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Kôд',newPage:'Ðова ÑÑÑаниÑа',save:'СаÑÑваÑ',preview:'Ðзглед ÑÑÑаниÑе',cut:'ÐÑеÑи',copy:'ÐопиÑаÑ',paste:'Ðалепи',print:'ШÑампа',underline:'ÐодвÑÑено',bold:'ÐодебÑано',italic:'ÐÑÑзив',selectAll:'ÐзнаÑи Ñве',removeFormat:'Уклони ÑоÑмаÑиÑаÑе',strike:'ÐÑеÑÑÑано',subscript:'ÐндекÑ',superscript:'СÑепен',horizontalrule:'УнеÑи Ñ Ð¾ÑизонÑÐ°Ð»Ð½Ñ Ð»Ð¸Ð½Ð¸ÑÑ',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Уклони линк',undo:'ÐониÑÑи акÑиÑÑ',redo:'Ðонови акÑиÑÑ',common:{browseServer:'ÐÑеÑÑажи ÑеÑвеÑ',url:'УРÐ',protocol:'ÐÑоÑокол',upload:'ÐоÑаÑи',uploadSubmit:'ÐоÑаÑи на ÑеÑвеÑ',image:'Слика',flash:'Ð¤Ð»ÐµÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ',form:'ФоÑма',checkbox:'ÐоÑе за поÑвÑдÑ',radio:'Радио-дÑгме',textField:'ТекÑÑÑално поÑе',textarea:'Ðона ÑекÑÑа',hiddenField:'СкÑивено поÑе',button:'ÐÑгме',select:'ÐзбоÑно поÑе',imageButton:'ÐÑгме Ñа Ñликом',notSet:'<ниÑе поÑÑавÑено>',id:'Ðд',name:'Ðазив',langDir:'Ð¡Ð¼ÐµÑ Ñезика',langDirLtr:'С лева на деÑно (LTR)',langDirRtl:'С деÑна на лево (RTL)',langCode:'Kôд Ñезика',longDescr:'ÐÑн Ð¾Ð¿Ð¸Ñ Ð£Ð Ð',cssClass:'Stylesheet клаÑе',advisoryTitle:'Advisory наÑлов',cssStyle:'СÑил',ok:'OK',cancel:'OÑкажи',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'ÐапÑедни Ñагови',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'ШиÑина',height:'ÐиÑина',align:'РавнаÑе',alignLeft:'Ðево',alignRight:'ÐеÑно',alignCenter:'СÑедина',alignTop:'ÐÑÑ ',alignMiddle:'СÑедина',alignBottom:'Ðоле',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'УнеÑи ÑпеÑиÑални каÑакÑеÑ',title:'ÐдабеÑиÑе ÑпеÑиÑални каÑакÑеÑ',options:'Special Character Options'},link:{toolbar:'УнеÑи/измени линк',other:'<other>',menu:'ÐÑомени линк',title:'Ðинк',info:'Ðинк инÑо',target:'MeÑa',upload:'ÐоÑаÑи',advanced:'ÐапÑедни Ñагови',type:'ÐÑÑÑа линка',toUrl:'URL',toAnchor:'СидÑо на Ð¾Ð²Ð¾Ñ ÑÑÑаниÑи',toEmail:'EлекÑÑонÑка поÑÑа',targetFrame:'<оквиÑ>',targetPopup:'<иÑкаÑÑÑи пÑозоÑ>',targetFrameName:'Ðазив одÑедиÑног ÑÑеÑма',targetPopupName:'Ðазив иÑкаÑÑÑег пÑозоÑа',popupFeatures:'ÐогÑÑноÑÑи иÑкаÑÑÑег пÑозоÑа',popupResizable:'Resizable',popupStatusBar:'СÑаÑÑÑна линиÑа',popupLocationBar:'ÐокаÑиÑа',popupToolbar:'Toolbar',popupMenuBar:'ÐонÑекÑÑни мени',popupFullScreen:'ÐÑиказ пÑеко Ñелог екÑана (ÐE)',popupScrollBars:'СкÑол баÑ',popupDependent:'ÐавиÑно (Netscape)',popupLeft:'Ðд леве ивиÑе екÑана (пикÑела)',popupTop:'Ðд вÑÑ Ð° екÑана (пикÑела)',id:'Id',langDir:'Ð¡Ð¼ÐµÑ Ñезика',langDirLTR:'С лева на деÑно (LTR)',langDirRTL:'С деÑна на лево (RTL)',acccessKey:'ÐÑиÑÑÑпни ÑаÑÑеÑ',name:'Ðазив',langCode:'Ð¡Ð¼ÐµÑ Ñезика',tabIndex:'Таб индекÑ',advisoryTitle:'Advisory наÑлов',advisoryContentType:'Advisory вÑÑÑа ÑадÑжаÑа',cssClasses:'Stylesheet клаÑе',charset:'Linked Resource Charset',styles:'СÑил',rel:'Relationship',selectAnchor:'ÐдабеÑи ÑидÑо',anchorName:'Ðо Ð½Ð°Ð·Ð¸Ð²Ñ ÑидÑа',anchorId:'Ðo Ðд-jÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñа',emailAddress:'ÐдÑеÑа елекÑÑонÑке поÑÑе',emailSubject:'ÐаÑлов',emailBody:'СадÑÐ¶Ð°Ñ Ð¿Ð¾ÑÑке',noAnchors:'(Ðема доÑÑÑÐ¿Ð½Ð¸Ñ ÑидÑа)',noUrl:'УнеÑиÑе УРРлинка',noEmail:'ÐÑкÑÑаÑÑе адÑеÑÑ ÐµÐ»ÐµÐºÑÑонÑке поÑÑе'},anchor:{toolbar:'УнеÑи/измени ÑидÑо',menu:'ÐÑобине ÑидÑа',title:'ÐÑобине ÑидÑа',name:'Ðме ÑидÑа',errorName:'Ðолимо ÐÐ°Ñ Ð´Ð° ÑнеÑеÑе име ÑидÑа',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'ÐÑеÑÑага',replace:'Ðамена',findWhat:'ÐÑонаÑи:',replaceWith:'Ðамени Ñа:',notFoundMsg:'ТÑажени ÑекÑÑ Ð½Ð¸Ñе пÑонаÑен.',matchCase:'РазликÑÑ Ð²ÐµÐ»Ð¸ÐºÐ° и мала Ñлова',matchWord:'УпоÑеди Ñеле ÑеÑи',matchCyclic:'Match cyclic',replaceAll:'Ðамени Ñве',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Табела',title:'ÐÑобине Ñабеле',menu:'ÐÑобине Ñабеле',deleteTable:'Delete Table',rows:'Редова',columns:'Kолона',border:'ÐелиÑина оквиÑа',widthPx:'пикÑела',widthPc:'пÑоÑенаÑа',widthUnit:'width unit',cellSpace:'ÐелиÑÑки пÑоÑÑоÑ',cellPad:'Размак ÑелиÑа',caption:'ÐаÑлов Ñабеле',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'ÐбÑиÑи ÑелиÑе',merge:'Ð¡Ð¿Ð¾Ñ ÑелиÑе',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'ÐбÑиÑи Ñедове'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'ÐбÑиÑи колоне'}},button:{title:'ÐÑобине дÑгмеÑа',text:'ТекÑÑ (вÑедноÑÑ)',type:'Tип',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'ÐÑобине поÑа за поÑвÑдÑ',radioTitle:'ÐÑобине Ñадио-дÑгмеÑа',value:'ÐÑедноÑÑ',selected:'ÐзнаÑено'},form:{title:'ÐÑобине ÑоÑме',menu:'ÐÑобине ÑоÑме',action:'AкÑиÑа',method:'MеÑода',encoding:'Encoding'},select:{title:'ÐÑобине избоÑног поÑа',selectInfo:'ÐнÑо',opAvail:'ÐоÑÑÑпне опÑиÑе',value:'ÐÑедноÑÑ',size:'ÐелиÑина',lines:'линиÑа',chkMulti:'Ðозволи виÑеÑÑÑÑÐºÑ ÑелекÑиÑÑ',opText:'ТекÑÑ',opValue:'ÐÑедноÑÑ',btnAdd:'ÐодаÑ',btnModify:'Ðзмени',btnUp:'ÐоÑе',btnDown:'Ðоле',btnSetValue:'ÐодеÑи као ознаÑÐµÐ½Ñ Ð²ÑедноÑÑ',btnDelete:'ÐбÑиÑи'},textarea:{title:'ÐÑобине зоне ÑекÑÑа',cols:'ÐÑÐ¾Ñ ÐºÐ¾Ð»Ð¾Ð½Ð°',rows:'ÐÑÐ¾Ñ Ñедова'},textfield:{title:'ÐÑобине ÑекÑÑÑалног поÑа',name:'Ðазив',value:'ÐÑедноÑÑ',charWidth:'ШиÑина (каÑакÑеÑа)',maxChars:'ÐакÑимално каÑакÑеÑа',type:'Тип',typeText:'ТекÑÑ',typePass:'Ðозинка'},hidden:{title:'ÐÑобине ÑкÑивеног поÑа',name:'Ðазив',value:'ÐÑедноÑÑ'},image:{title:'ÐÑобине Ñлика',titleButton:'ÐÑобине дÑгмеÑа Ñа Ñликом',menu:'ÐÑобине Ñлика',infoTab:'ÐнÑо Ñлике',btnUpload:'ÐоÑаÑи на ÑеÑвеÑ',upload:'ÐоÑаÑи',alt:'ÐлÑеÑнаÑивни ÑекÑÑ',lockRatio:'ÐакÑÑÑÐ°Ñ Ð¾Ð´Ð½Ð¾Ñ',resetSize:'РеÑеÑÑÑ Ð²ÐµÐ»Ð¸ÑинÑ',border:'ÐквиÑ',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'УнеÑиÑе УРРÑлике',linkTab:'Ðинк',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ÐÑобине ФлеÑа',propertiesTab:'Properties',title:'ÐÑобине ÑлеÑа',chkPlay:'ÐÑÑомаÑÑки ÑÑаÑÑ',chkLoop:'ÐонавÑаÑ',chkMenu:'УкÑÑÑи ÑÐ»ÐµÑ Ð¼ÐµÐ½Ð¸',chkFull:'Allow Fullscreen',scale:'СкалиÑаÑ',scaleAll:'ÐÑикажи Ñве',scaleNoBorder:'Ðез ивиÑе',scaleFit:'ÐопÑни повÑÑинÑ',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs доле',alignAbsMiddle:'Abs ÑÑедина',alignBaseline:'Ðазно',alignTextTop:'ÐÑÑ ÑекÑÑа',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'ÐоÑа позадине',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'УнеÑиÑе УРРлинка',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'ÐÑовеÑи ÑпеловаÑе',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'ÐиÑе Ñ ÑеÑникÑ',changeTo:'Ðзмени',btnIgnore:'ÐгноÑиÑи',btnIgnoreAll:'ÐгноÑиÑи Ñве',btnReplace:'Ðамени',btnReplaceAll:'Ðамени Ñве',btnUndo:'ÐÑаÑи акÑиÑÑ',noSuggestions:'- Ðез ÑÑгеÑÑиÑа -',progress:'ÐÑовеÑа ÑпеловаÑа Ñ ÑокÑ...',noMispell:'ÐÑовеÑа ÑпеловаÑа завÑÑена: гÑеÑке ниÑÑ Ð¿ÑонаÑене',noChanges:'ÐÑовеÑа ÑпеловаÑа завÑÑена: ÐиÑе измеÑена ниÑедна ÑеÑ',oneChange:'ÐÑовеÑа ÑпеловаÑа завÑÑена: ÐзмеÑена Ñе Ñедна ÑеÑ',manyChanges:'ÐÑовеÑа ÑпеловаÑа завÑÑена: %1 ÑеÑ(и) Ñе измеÑено',ieSpellDownload:'ÐÑовеÑа ÑпеловаÑа ниÑе инÑÑалиÑана. Ðа ли желиÑе да Ñе ÑкинеÑе Ñа ÐнÑеÑнеÑа?'},smiley:{toolbar:'СмаÑли',title:'УнеÑи ÑмаÑлиÑа',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ÐабÑоÑÐ¸Ð²Ñ Ð»Ð¸ÑÑÑ',bulletedlist:'ÐенабÑоÑива лиÑÑа',indent:'УвеÑÐ°Ñ Ð»ÐµÐ²Ñ Ð¼Ð°ÑгинÑ',outdent:'СмаÑи Ð»ÐµÐ²Ñ Ð¼Ð°ÑгинÑ',justify:{left:'Ðево ÑавнаÑе',center:'ЦенÑÑиÑан ÑекÑÑ',right:'ÐеÑно ÑавнаÑе',block:'ÐбоÑÑÑано ÑавнаÑе'},blockquote:'Block Quote',clipboard:{title:'Ðалепи',cutError:'СигÑÑноÑна подеÑаваÑа ÐаÑег пÑеÑÑаживаÑа не дозвоÑаваÑÑ Ð¾Ð¿ÐµÑаÑиÑе аÑÑомаÑÑког иÑеÑаÑа ÑекÑÑа. Ðолимо ÐÐ°Ñ Ð´Ð° коÑиÑÑиÑе пÑеÑиÑÑ Ñа ÑаÑÑаÑÑÑе (Ctrl/Cmd+X).',copyError:'СигÑÑноÑна подеÑаваÑа ÐаÑег пÑеÑÑаживаÑа не дозвоÑаваÑÑ Ð¾Ð¿ÐµÑаÑиÑе аÑÑомаÑÑког копиÑаÑа ÑекÑÑа. Ðолимо ÐÐ°Ñ Ð´Ð° коÑиÑÑиÑе пÑеÑиÑÑ Ñа ÑаÑÑаÑÑÑе (Ctrl/Cmd+C).',pasteMsg:'Ðолимо ÐÐ°Ñ Ð´Ð° залепиÑе ÑнÑÑÐ°Ñ Ð´Ð¾Ñе повÑÑине коÑиÑÑеÑи ÑаÑÑаÑÑÑÐ½Ñ Ð¿ÑеÑиÑÑ (<STRONG>Ctrl/Cmd+V</STRONG>) и да пÑиÑиÑнеÑе <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Ðалепи из Worda',title:'Ðалепи из Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Ðалепи као ÑиÑÑ ÑекÑÑ',title:'Ðалепи као ÑиÑÑ ÑекÑÑ'},templates:{button:'ÐбÑаÑÑи',title:'ÐбÑаÑÑи за ÑадÑжаÑ',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Ðолимо ÐÐ°Ñ Ð´Ð° одабеÑеÑе обÑÐ°Ð·Ð°Ñ ÐºÐ¾Ñи Ñе биÑи пÑимеÑен на ÑÑÑаниÑÑ (ÑÑенÑÑни ÑадÑÐ¶Ð°Ñ Ñе биÑи обÑиÑан):',emptyListMsg:'(Ðема деÑиниÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑазаÑа)'},showBlocks:'Show Blocks',stylesCombo:{label:'СÑил',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ФоÑмаÑ',panelTitle:'ФоÑмаÑ',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Adresa',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ФонÑ',voiceLabel:'Font',panelTitle:'ФонÑ'},fontSize:{label:'ÐелиÑина ÑонÑа',voiceLabel:'Font Size',panelTitle:'ÐелиÑина ÑонÑа'},colorButton:{textColorTitle:'ÐоÑа ÑекÑÑа',bgColorTitle:'ÐоÑа позадине',panelTitle:'Colors',auto:'ÐÑÑомаÑÑки',more:'ÐиÑе боÑа...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'ÐÑобине докÑменÑа',title:'ÐÑобине докÑменÑа',design:'Design',meta:'ÐеÑаподаÑи',chooseColor:'Choose',other:'<other>',docTitle:'ÐаÑлов ÑÑÑаниÑе',charset:'ÐодиÑаÑе ÑкÑпа каÑакÑеÑа',charsetOther:'ÐÑÑала кодиÑаÑа ÑкÑпа каÑакÑеÑа',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'ÐаглавÑе Ñипа докÑменÑа',docTypeOther:'ÐÑÑала заглавÑа Ñипа докÑменÑа',xhtmlDec:'УлÑÑÑи XHTML деклаÑаÑиÑе',bgColor:'ÐоÑа позадине',bgImage:'УРРпозадинÑке Ñлике',bgFixed:'ФикÑиÑана позадина',txtColor:'ÐоÑа ÑекÑÑа',margin:'ÐаÑгине ÑÑÑаниÑе',marginTop:'ÐоÑÑа',marginLeft:'Ðева',marginRight:'ÐеÑна',marginBottom:'ÐоÑа',metaKeywords:'ÐÑÑÑне ÑеÑи за индекÑиÑаÑе докÑменÑа (ÑаздвоÑене заÑезом)',metaDescription:'ÐÐ¿Ð¸Ñ Ð´Ð¾ÐºÑменÑа',metaAuthor:'ÐÑÑоÑ',metaCopyright:'ÐÑÑоÑÑка пÑава',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/sv.js b/lang/sv.js new file mode 100644 index 0000000..2c27a3e --- /dev/null +++ b/lang/sv.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.sv={dir:'ltr',editorTitle:'Rich text editor, %1, tryck ALT 0 för hjälp.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'Källa',newPage:'Ny sida',save:'Spara',preview:'Förhandsgranska',cut:'Klipp ut',copy:'Kopiera',paste:'Klistra in',print:'Skriv ut',underline:'Understruken',bold:'Fet',italic:'Kursiv',selectAll:'Markera allt',removeFormat:'Radera formatering',strike:'Genomstruken',subscript:'Nedsänkta tecken',superscript:'Upphöjda tecken',horizontalrule:'Infoga horisontal linje',pagebreak:'Infoga sidbrytning',pagebreakAlt:'Sidbrytning',unlink:'Radera länk',undo:'à ngra',redo:'Gör om',common:{browseServer:'Bläddra pÃ¥ server',url:'URL',protocol:'Protokoll',upload:'Ladda upp',uploadSubmit:'Skicka till server',image:'Bild',flash:'Flash',form:'Formulär',checkbox:'Kryssruta',radio:'Alternativknapp',textField:'Textfält',textarea:'Textruta',hiddenField:'Dolt fält',button:'Knapp',select:'Flervalslista',imageButton:'Bildknapp',notSet:'<ej angivet>',id:'Id',name:'Namn',langDir:'SprÃ¥kriktning',langDirLtr:'Vänster till Höger (VTH)',langDirRtl:'Höger till Vänster (HTV)',langCode:'SprÃ¥kkod',longDescr:'URL-beskrivning',cssClass:'Stilmall',advisoryTitle:'Titel',cssStyle:'Stilmall',ok:'OK',cancel:'Avbryt',close:'Stäng',preview:'Förhandsgranska',generalTab:'Allmänt',advancedTab:'Avancerad',validateNumberFailed:'Värdet är inte ett nummer.',confirmNewPage:'Alla ändringar i innehÃ¥llet kommer att förloras. Ãr du säker pÃ¥ att du vill ladda en ny sida?',confirmCancel:'NÃ¥gra av de alternativ har ändrats. Ãr du säker pÃ¥ att stänga dialogrutan?',options:'Alternativ',target:'MÃ¥l',targetNew:'Nytt fönster (_blank)',targetTop:'Ãversta fönstret (_top)',targetSelf:'Samma fönster (_self)',targetParent:'FöregÃ¥ende fönster (_parent)',langDirLTR:'Vänster till höger (LTR)',langDirRTL:'Höger till vänster (RTL)',styles:'Stil',cssClasses:'Stilmallar',width:'Bredd',height:'Höjd',align:'Justering',alignLeft:'Vänster',alignRight:'Höger',alignCenter:'Centrerad',alignTop:'Ãverkant',alignMiddle:'Mitten',alignBottom:'Nederkant',invalidHeight:'Höjd mÃ¥ste vara ett nummer.',invalidWidth:'Bredd mÃ¥ste vara ett nummer.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, Ej tillgänglig</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Klistra in utökat tecken',title:'Välj utökat tecken',options:'Special Character Options'},link:{toolbar:'Infoga/Redigera länk',other:'<annan>',menu:'Redigera länk',title:'Länk',info:'Länkinformation',target:'MÃ¥l',upload:'Ladda upp',advanced:'Avancerad',type:'Länktyp',toUrl:'URL',toAnchor:'Ankare i sidan',toEmail:'E-post',targetFrame:'<ram>',targetPopup:'<popup-fönster>',targetFrameName:'MÃ¥lets ramnamn',targetPopupName:'Popup-fönstrets namn',popupFeatures:'Popup-fönstrets egenskaper',popupResizable:'Resizable',popupStatusBar:'Statusfält',popupLocationBar:'Adressfält',popupToolbar:'Verktygsfält',popupMenuBar:'Menyfält',popupFullScreen:'Helskärm (endast IE)',popupScrollBars:'Scrolllista',popupDependent:'Beroende (endast Netscape)',popupLeft:'Position frÃ¥n vänster',popupTop:'Position frÃ¥n sidans topp',id:'Id',langDir:'SprÃ¥kriktning',langDirLTR:'Vänster till höger (VTH)',langDirRTL:'Höger till vänster (HTV)',acccessKey:'Behörighetsnyckel',name:'Namn',langCode:'SprÃ¥kriktning',tabIndex:'Tabindex',advisoryTitle:'Titel',advisoryContentType:'InnehÃ¥llstyp',cssClasses:'Stylesheet class',charset:'Teckenuppställning',styles:'Stilmall',rel:'Relationship',selectAnchor:'Välj ett ankare',anchorName:'efter ankarnamn',anchorId:'efter objektid',emailAddress:'E-postadress',emailSubject:'Ãmne',emailBody:'InnehÃ¥ll',noAnchors:'(Inga ankare kunde hittas)',noUrl:'Var god ange länkens URL',noEmail:'Var god ange E-postadress'},anchor:{toolbar:'Infoga/Redigera ankarlänk',menu:'Egenskaper för ankarlänk',title:'Egenskaper för ankarlänk',name:'Ankarnamn',errorName:'Var god ange ett ankarnamn',remove:'Remove Anchor'},list:{numberedTitle:'Egenskaper för punktlista',bulletedTitle:'Egenskaper för punktlista',type:'Typ',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Cirkel',disc:'Disk',square:'Fyrkant',none:'Ingen',notset:'<ej angiven>',armenian:'Armenisk numrering',georgian:'Georgisk numrering (an, ban, gan, etc.)',lowerRoman:'Romerska gemener (i, ii, iii, iv, v, etc.)',upperRoman:'Romerska versaler (I, II, III, IV, V, etc.)',lowerAlpha:'Alpha gemener (a, b, c, d, e, etc.)',upperAlpha:'Alpha versaler (A, B, C, D, E, etc.)',lowerGreek:'Grekiska gemener (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal nolla (01, 02, 03, etc.)'},findAndReplace:{title:'Sök och ersätt',find:'Sök',replace:'Ersätt',findWhat:'Sök efter:',replaceWith:'Ersätt med:',notFoundMsg:'Angiven text kunde ej hittas.',matchCase:'Skiftläge',matchWord:'Inkludera hela ord',matchCyclic:'Matcha cykliska',replaceAll:'Ersätt alla',replaceSuccessMsg:'%1 förekomst(er) ersatta.'},table:{toolbar:'Tabell',title:'Tabellegenskaper',menu:'Tabellegenskaper',deleteTable:'Radera tabell',rows:'Rader',columns:'Kolumner',border:'Kantstorlek',widthPx:'pixlar',widthPc:'procent',widthUnit:'enhet bredd',cellSpace:'CellavstÃ¥nd',cellPad:'Cellutfyllnad',caption:'Rubrik',summary:'Sammanfattning',headers:'Ruberiker',headersNone:'Ingen',headersColumn:'Första kolumnen',headersRow:'Första raden',headersBoth:'BÃ¥da',invalidRows:'Antal rader mÃ¥ste vara större än 0.',invalidCols:'Antal kolumner mÃ¥ste vara ett nummer större än 0.',invalidBorder:'Ram mÃ¥ste vara ett nummer.',invalidWidth:'Tabell mÃ¥ste vara ett nummer.',invalidHeight:'Tabellens höjd mÃ¥ste vara ett nummer.',invalidCellSpacing:'Luft i cell mÃ¥ste vara ett nummer.',invalidCellPadding:'Luft i cell mÃ¥ste vara ett nummer.',cell:{menu:'Cell',insertBefore:'Lägg till cell före',insertAfter:'Lägg till cell efter',deleteCell:'Radera celler',merge:'Sammanfoga celler',mergeRight:'Sammanfoga höger',mergeDown:'Sammanfoga ner',splitHorizontal:'Dela cell horisontellt',splitVertical:'Dela cell vertikalt',title:'Egenskaper för cell',cellType:'Celltyp',rowSpan:'Rad spann',colSpan:'Kolumnen spann',wordWrap:'Radbrytning',hAlign:'Horisontell justering',vAlign:'Vertikal justering',alignBaseline:'Baslinje',bgColor:'Bakgrundsfärg',borderColor:'Ramfärg',data:'Data',header:'Rubrik',yes:'Ja',no:'Nej',invalidWidth:'Cellens bredd mÃ¥ste vara ett nummer.',invalidHeight:'Cellens höjd mÃ¥ste vara ett nummer.',invalidRowSpan:'Radutvidgning mÃ¥ste vara ett heltal.',invalidColSpan:'Kolumn mÃ¥ste vara ett heltal.',chooseColor:'Välj'},row:{menu:'Rad',insertBefore:'Lägg till Rad Före',insertAfter:'Lägg till rad efter',deleteRow:'Radera rad'},column:{menu:'Kolumn',insertBefore:'Lägg till kolumn före',insertAfter:'Lägg till kolumn efter',deleteColumn:'Radera kolumn'}},button:{title:'Egenskaper för knapp',text:'Text (värde)',type:'Typ',typeBtn:'Knapp',typeSbm:'Skicka',typeRst:'à terställ'},checkboxAndRadio:{checkboxTitle:'Egenskaper för kryssruta',radioTitle:'Egenskaper för alternativknapp',value:'Värde',selected:'Vald'},form:{title:'Egenskaper för formulär',menu:'Egenskaper för formulär',action:'Funktion',method:'Metod',encoding:'Kodning'},select:{title:'Egenskaper för flervalslista',selectInfo:'Information',opAvail:'Befintliga val',value:'Värde',size:'Storlek',lines:'Linjer',chkMulti:'TillÃ¥t flerval',opText:'Text',opValue:'Värde',btnAdd:'Lägg till',btnModify:'Redigera',btnUp:'Upp',btnDown:'Ner',btnSetValue:'Markera som valt värde',btnDelete:'Radera'},textarea:{title:'Egenskaper för textruta',cols:'Kolumner',rows:'Rader'},textfield:{title:'Egenskaper för textfält',name:'Namn',value:'Värde',charWidth:'Teckenbredd',maxChars:'Max antal tecken',type:'Typ',typeText:'Text',typePass:'Lösenord'},hidden:{title:'Egenskaper för dolt fält',name:'Namn',value:'Värde'},image:{title:'Bildegenskaper',titleButton:'Egenskaper för bildknapp',menu:'Bildegenskaper',infoTab:'Bildinformation',btnUpload:'Skicka till server',upload:'Ladda upp',alt:'Alternativ text',lockRatio:'LÃ¥s höjd/bredd förhÃ¥llanden',resetSize:'à terställ storlek',border:'Kant',hSpace:'Horis. marginal',vSpace:'Vert. marginal',alertUrl:'Var god och ange bildens URL',linkTab:'Länk',button2Img:'Vill du omvandla den valda bildknappen pÃ¥ en enkel bild?',img2Button:'Vill du omvandla den valda bildknappen pÃ¥ en enkel bild?',urlMissing:'Bildkällans URL saknas.',validateBorder:'Kantlinje mÃ¥ste vara ett heltal.',validateHSpace:'HSpace mÃ¥ste vara ett heltal.',validateVSpace:'VSpace mÃ¥ste vara ett heltal.'},flash:{properties:'Flashegenskaper',propertiesTab:'Egenskaper',title:'Flashegenskaper',chkPlay:'Automatisk uppspelning',chkLoop:'Upprepa/Loopa',chkMenu:'Aktivera Flashmeny',chkFull:'TillÃ¥t helskärm',scale:'Skala',scaleAll:'Visa allt',scaleNoBorder:'Ingen ram',scaleFit:'Exakt passning',access:'Script-tillgÃ¥ng',accessAlways:'Alltid',accessSameDomain:'Samma domän',accessNever:'Aldrig',alignAbsBottom:'Absolut nederkant',alignAbsMiddle:'Absolut centrering',alignBaseline:'Baslinje',alignTextTop:'Text överkant',quality:'Kvalitet',qualityBest:'Bäst',qualityHigh:'Hög',qualityAutoHigh:'Auto Hög',qualityMedium:'Medium',qualityAutoLow:'Auto LÃ¥g',qualityLow:'LÃ¥g',windowModeWindow:'Fönster',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Fönsterläge',flashvars:'Variabler för Flash',bgcolor:'Bakgrundsfärg',hSpace:'Horis. marginal',vSpace:'Vert. marginal',validateSrc:'Var god ange länkens URL',validateHSpace:'HSpace mÃ¥ste vara ett nummer.',validateVSpace:'VSpace mÃ¥ste vara ett nummer.'},spellCheck:{toolbar:'Stavningskontroll',title:'Kontrollera stavning',notAvailable:'Tyvärr är tjänsten ej tillgänglig nu',errorLoading:'Tjänsten är ej tillgänglig: %s.',notInDic:'Saknas i ordlistan',changeTo:'Ãndra till',btnIgnore:'Ignorera',btnIgnoreAll:'Ignorera alla',btnReplace:'Ersätt',btnReplaceAll:'Ersätt alla',btnUndo:'à ngra',noSuggestions:'- Förslag saknas -',progress:'Stavningskontroll pÃ¥gÃ¥r...',noMispell:'Stavningskontroll slutförd: Inga stavfel pÃ¥träffades.',noChanges:'Stavningskontroll slutförd: Inga ord rättades.',oneChange:'Stavningskontroll slutförd: Ett ord rättades.',manyChanges:'Stavningskontroll slutförd: %1 ord rättades.',ieSpellDownload:'Stavningskontrollen är ej installerad. Vill du göra det nu?'},smiley:{toolbar:'Smiley',title:'Infoga smiley',options:'Smileyinställningar'},elementsPath:{eleLabel:'Elementets sökväg',eleTitle:'%1 element'},numberedlist:'Numrerad lista',bulletedlist:'Punktlista',indent:'Ãka indrag',outdent:'Minska indrag',justify:{left:'Vänsterjustera',center:'Centrera',right:'Högerjustera',block:'Justera till marginaler'},blockquote:'Blockcitat',clipboard:{title:'Klistra in',cutError:'Säkerhetsinställningar i Er webläsare tillÃ¥ter inte Ã¥tgÃ¥rden Klipp ut. Använd (Ctrl/Cmd+X) istället.',copyError:'Säkerhetsinställningar i Er webläsare tillÃ¥ter inte Ã¥tgÃ¥rden Kopiera. Använd (Ctrl/Cmd+C) istället',pasteMsg:'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl/Cmd+V</STRONG>) klicka sen pÃ¥ <STRONG>OK</STRONG>.',securityMsg:'PÃ¥ grund av din webbläsares säkerhetsinställningar kan verktyget inte fÃ¥ Ã¥tkomst till urklippsdatan. Var god och använd detta fönster istället.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Texten du vill klistra in verkar vara kopierad frÃ¥n Word. Vill du rensa innan du klistrar?',toolbar:'Klistra in frÃ¥n Word',title:'Klistra in frÃ¥n Word',error:'Det var inte möjligt att städa upp den inklistrade data pÃ¥ grund av ett internt fel'},pasteText:{button:'Klistra in som vanlig text',title:'Klistra in som vanlig text'},templates:{button:'Sidmallar',title:'Sidmallar',options:'Inställningar för mall',insertOption:'Ersätt aktuellt innehÃ¥ll',selectPromptMsg:'Var god välj en mall att använda med editorn<br>(allt nuvarande innehÃ¥ll raderas):',emptyListMsg:'(Ingen mall är vald)'},showBlocks:'Visa block',stylesCombo:{label:'Anpassad stil',panelTitle:'Formatmallar',panelTitle1:'Blockstil',panelTitle2:'Inbäddad stil',panelTitle3:'Objektets stil'},format:{label:'Teckenformat',panelTitle:'Teckenformat',tag_p:'Normal',tag_pre:'Formaterad',tag_address:'Adress',tag_h1:'Rubrik 1',tag_h2:'Rubrik 2',tag_h3:'Rubrik 3',tag_h4:'Rubrik 4',tag_h5:'Rubrik 5',tag_h6:'Rubrik 6',tag_div:'Normal (DIV)'},div:{title:'Skapa Div container',toolbar:'Skapa Div container',cssClassInputLabel:'Stilmallar',styleSelectLabel:'Stil',IdInputLabel:'Id',languageCodeInputLabel:' SprÃ¥kkod',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'RÃ¥dgivande titel',langDirLabel:'SprÃ¥kriktning',langDirLTRLabel:'Vänster till Höger (LTR)',langDirRTLLabel:'Höger till vänster (RTL)',edit:'Redigera Div',remove:'Ta bort Div'},iframe:{title:'iFrame Egenskaper',toolbar:'iFrame',noUrl:'Skriv in URL för iFrame',scrolling:'Aktivera rullningslister',border:'Visa ramkant'},font:{label:'Typsnitt',voiceLabel:'Typsnitt',panelTitle:'Typsnitt'},fontSize:{label:'Storlek',voiceLabel:'Teckenstorlek',panelTitle:'Storlek'},colorButton:{textColorTitle:'Textfärg',bgColorTitle:'Bakgrundsfärg',panelTitle:'Färger',auto:'Automatisk',more:'Fler färger...'},colors:{'000':'Svart',800000:'Rödbrun','8B4513':'Mörkbrun','2F4F4F':'SkiffergrÃ¥','008080':'Kricka','000080':'MarinblÃ¥','4B0082':'Indigo',696969:'MörkgrÃ¥',B22222:'Tegelsten',A52A2A:'Brun',DAA520:'Mörk guld','006400':'Mörkgrön','40E0D0':'Turkos','0000CD':'Medium blÃ¥',800080:'Lila',808080:'GrÃ¥',F00:'Röd',FF8C00:'Mörkorange',FFD700:'Guld','008000':'Grön','0FF':'Turkos','00F':'BlÃ¥',EE82EE:'Violett',A9A9A9:'Matt grÃ¥',FFA07A:'Laxrosa',FFA500:'Orange',FFFF00:'Gul','00FF00':'Lime',AFEEEE:'Ljusturkos',ADD8E6:'LjusblÃ¥',DDA0DD:'Plommon',D3D3D3:'LjusgrÃ¥',FFF0F5:'Ljus lavender',FAEBD7:'Antikvit',FFFFE0:'Ljusgul',F0FFF0:'Honung',F0FFFF:'AzurblÃ¥',F0F8FF:'AliceblÃ¥',E6E6FA:'Lavender',FFF:'Vit'},scayt:{title:'Stavningskontroll medan du skriver',opera_title:'Stöds ej av Opera',enable:'Aktivera SCAYT',disable:'Inaktivera SCAYT',about:'Om SCAYT',toggle:'Växla SCAYT',options:'Inställningar',langs:'SprÃ¥k',moreSuggestions:'Fler förslag',ignore:'Ignorera',ignoreAll:'Ignorera alla',addWord:'Lägg till ord',emptyDic:'Ordlistans namn fÃ¥r ej vara tomt.',optionsTab:'Inställningar',allCaps:'Ignorera alla ord med enbart versaler',ignoreDomainNames:'Ignorera domännamn',mixedCase:'Ignorera ord med blandat shiftläge',mixedWithDigits:'Ignorera ord med nummer',languagesTab:'SprÃ¥k',dictionariesTab:'Ordlistor',dic_field_name:'Ordlistans namn',dic_create:'Skapa',dic_restore:'à terställ',dic_delete:'Ta bort',dic_rename:'Byt namn',dic_info:'Inledningsvis lagras ordlistan i en cookie. När ordlista växer till en punkt där det inte kan lagras i en cookie, lagras den pÃ¥ vÃ¥r server. För att lagra din personliga ordlista pÃ¥ vÃ¥r server du ska ange ett namn för din ordbok. Om du redan har en lagrad ordbok, skriv namnet och klicka pÃ¥ knappen à terställ.',aboutTab:'Om'},about:{title:'Om CKEditor',dlgTitle:'Om CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'För information av licenciering besök vÃ¥r hemsida:',copy:'Copyright © $1. Alla rättigheter reserverade.'},maximize:'Maximera',minimize:'Minimera',fakeobjects:{anchor:'Ankare',flash:'Flashanimation',iframe:'iFrame',hiddenfield:'Gömt fält',unknown:'Okänt objekt'},resize:'Dra för att ändra storlek',colordialog:{title:'Välj färg',options:'Färgalternativ',highlight:'Markera',selected:'Vald färg',clear:'Rensa'},toolbarCollapse:'Dölj verktygsfält',toolbarExpand:'Visa verktygsfält',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text riktning frÃ¥n vänster till höger',rtl:'Text riktning frÃ¥n höger till vänster'},docprops:{label:'Dokumentegenskaper',title:'Dokumentegenskaper',design:'Design',meta:'Metadata',chooseColor:'Välj',other:'<annan>',docTitle:'Sidtitel',charset:'Teckenuppsättningar',charsetOther:'Ãvriga teckenuppsättningar',charsetASCII:'ASCII',charsetCE:'Central Europa',charsetCT:'Traditionell Kinesisk (Big5)',charsetCR:'Kyrillisk',charsetGR:'Grekiska',charsetJP:'Japanska',charsetKR:'Koreanska',charsetTR:'Turkiska',charsetUN:'Unicode (UTF-8)',charsetWE:'Väst Europa',docType:'Sidhuvud',docTypeOther:'Ãvriga sidhuvuden',xhtmlDec:'Inkludera XHTML deklaration',bgColor:'Bakgrundsfärg',bgImage:'Bakgrundsbildens URL',bgFixed:'Fast bakgrund',txtColor:'Textfärg',margin:'Sidmarginal',marginTop:'Topp',marginLeft:'Vänster',marginRight:'Höger',marginBottom:'Botten',metaKeywords:'Sidans nyckelord',metaDescription:'Sidans beskrivning',metaAuthor:'Författare',metaCopyright:'Upphovsrätt',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/th.js b/lang/th.js new file mode 100644 index 0000000..7b3b0fc --- /dev/null +++ b/lang/th.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.th={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'à¸à¸¹à¸£à¸«à¸±à¸ª HTML',newPage:'สรà¹à¸²à¸à¸«à¸à¹à¸²à¹à¸à¸à¸ªà¸²à¸£à¹à¸«à¸¡à¹',save:'à¸à¸±à¸à¸à¸¶à¸',preview:'à¸à¸¹à¸«à¸à¹à¸²à¹à¸à¸à¸ªà¸²à¸£à¸à¸±à¸§à¸à¸¢à¹à¸²à¸',cut:'à¸à¸±à¸',copy:'สำà¹à¸à¸²',paste:'วาà¸',print:'สัà¹à¸à¸à¸´à¸¡à¸à¹',underline:'à¸à¸±à¸§à¸à¸µà¸à¹à¸ªà¹à¸à¹à¸à¹',bold:'à¸à¸±à¸§à¸«à¸à¸²',italic:'à¸à¸±à¸§à¹à¸à¸µà¸¢à¸',selectAll:'à¹à¸¥à¸·à¸à¸à¸à¸±à¹à¸à¸«à¸¡à¸',removeFormat:'ลà¹à¸²à¸à¸£à¸¹à¸à¹à¸à¸',strike:'à¸à¸±à¸§à¸à¸µà¸à¹à¸ªà¹à¸à¸à¸±à¸',subscript:'à¸à¸±à¸§à¸«à¹à¸à¸¢',superscript:'à¸à¸±à¸§à¸¢à¸',horizontalrule:'à¹à¸à¸£à¸à¹à¸ªà¹à¸à¸à¸±à¹à¸à¸à¸£à¸£à¸à¸±à¸',pagebreak:'à¹à¸à¸£à¸à¸à¸±à¸§à¹à¸à¹à¸à¸«à¸à¹à¸² Page Break',pagebreakAlt:'Page Break',unlink:'ลภลิà¸à¸à¹',undo:'ยà¸à¹à¸¥à¸´à¸à¸à¸³à¸ªà¸±à¹à¸',redo:'à¸à¸³à¸à¹à¸³à¸à¸³à¸ªà¸±à¹à¸',common:{browseServer:'à¹à¸à¸´à¸à¸«à¸à¹à¸²à¸à¹à¸²à¸à¸à¸±à¸à¸à¸²à¸£à¹à¸à¸¥à¹à¸à¸±à¸à¹à¸«à¸¥à¸',url:'à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸ URL',protocol:'à¹à¸à¸£à¹à¸à¸à¸à¸¥',upload:'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹',uploadSubmit:'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹à¹à¸à¹à¸à¹à¸à¹à¸§à¹à¸à¸µà¹à¹à¸à¸£à¸·à¹à¸à¸à¹à¸¡à¹à¸à¹à¸²à¸¢ (à¹à¸à¸´à¸£à¹à¸à¹à¸§à¸à¸£à¹)',image:'รูà¸à¸ าà¸',flash:'à¹à¸à¸¥à¹ Flash',form:'à¹à¸à¸à¸à¸à¸£à¹à¸¡',checkbox:'à¹à¸à¹à¸à¸à¹à¸à¸',radio:'à¹à¸£à¸à¸´à¹à¸à¸à¸±à¸à¸à¸à¸',textField:'à¹à¸à¹à¸à¸à¹à¸à¸´à¸¥à¸à¹',textarea:'à¹à¸à¹à¸à¸à¹à¹à¸à¹à¸£à¸µà¸¢',hiddenField:'ฮิà¸à¹à¸à¸à¸à¸´à¸¥à¸à¹',button:'à¸à¸¸à¹à¸¡',select:'à¹à¸à¸à¸à¸±à¸§à¹à¸¥à¸·à¸à¸',imageButton:'à¸à¸¸à¹à¸¡à¹à¸à¸à¸£à¸¹à¸à¸ าà¸',notSet:'<à¹à¸¡à¹à¸£à¸°à¸à¸¸>',id:'à¹à¸à¸à¸µ',name:'à¸à¸·à¹à¸',langDir:'à¸à¸²à¸£à¹à¸à¸µà¸¢à¸-à¸à¹à¸²à¸à¸ าษา',langDirLtr:'à¸à¸²à¸à¸à¹à¸²à¸¢à¹à¸à¸à¸§à¸² (LTR)',langDirRtl:'à¸à¸²à¸à¸à¸§à¸²à¸¡à¸²à¸à¹à¸²à¸¢ (RTL)',langCode:'รหัสภาษา',longDescr:'à¸à¸³à¸à¸à¸´à¸à¸²à¸¢à¸à¸£à¸°à¸à¸à¸ URL',cssClass:'à¸à¸¥à¸²à¸ªà¸à¸à¸à¹à¸à¸¥à¹à¸à¸³à¸«à¸à¸à¸¥à¸±à¸à¸©à¸à¸°à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥',advisoryTitle:'à¸à¸³à¹à¸à¸£à¸´à¹à¸à¸à¸³',cssStyle:'ลัà¸à¸©à¸à¸°à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥',ok:'à¸à¸à¸¥à¸',cancel:'ยà¸à¹à¸¥à¸´à¸',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'à¸à¸±à¹à¸à¸ªà¸¹à¸',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'à¸à¸§à¸²à¸¡à¸à¸§à¹à¸²à¸',height:'à¸à¸§à¸²à¸¡à¸ªà¸¹à¸',align:'à¸à¸²à¸£à¸à¸±à¸à¸§à¸²à¸',alignLeft:'à¸à¸´à¸à¸à¹à¸²à¸¢',alignRight:'à¸à¸´à¸à¸à¸§à¸²',alignCenter:'à¸à¸¶à¹à¸à¸à¸¥à¸²à¸',alignTop:'à¸à¸à¸ªà¸¸à¸',alignMiddle:'à¸à¸¶à¹à¸à¸à¸¥à¸²à¸à¹à¸à¸§à¸à¸±à¹à¸',alignBottom:'à¸à¸´à¸à¸à¹à¸²à¸à¸¥à¹à¸²à¸',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'à¹à¸à¸£à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸´à¹à¸¨à¸©',title:'à¹à¸à¸£à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸´à¹à¸¨à¸©',options:'Special Character Options'},link:{toolbar:'à¹à¸à¸£à¸/à¹à¸à¹à¹à¸ ลิà¸à¸à¹',other:'<à¸à¸·à¹à¸ à¹>',menu:'à¹à¸à¹à¹à¸ ลิà¸à¸à¹',title:'ลิà¸à¸à¹à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸à¹à¸§à¹à¸ à¸à¸µà¹à¸¡à¸¥à¹ รูà¸à¸ าภหรืà¸à¹à¸à¸¥à¹à¸à¸·à¹à¸à¹',info:'รายละà¹à¸à¸µà¸¢à¸',target:'à¸à¸²à¸£à¹à¸à¸´à¸à¸«à¸à¹à¸²à¸¥à¸´à¸à¸à¹',upload:'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹',advanced:'à¸à¸±à¹à¸à¸ªà¸¹à¸',type:'à¸à¸£à¸°à¹à¸ à¸à¸à¸à¸à¸¥à¸´à¸à¸à¹',toUrl:'URL',toAnchor:'à¸à¸¸à¸à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸ (Anchor)',toEmail:'สà¹à¸à¸à¸µà¹à¸¡à¸¥à¹ (E-Mail)',targetFrame:'<à¹à¸à¸´à¸à¹à¸à¹à¸à¸£à¸¡>',targetPopup:'<à¹à¸à¸´à¸à¸«à¸à¹à¸²à¸à¸à¹à¸¥à¹à¸ (Pop-up)>',targetFrameName:'à¸à¸·à¹à¸à¸à¸²à¸£à¹à¹à¸à¹à¸à¹à¸à¸£à¸¡',targetPopupName:'ระà¸à¸¸à¸à¸·à¹à¸à¸«à¸à¹à¸²à¸à¸à¹à¸¥à¹à¸ (Pop-up)',popupFeatures:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¸«à¸à¹à¸²à¸à¸à¹à¸¥à¹à¸ (Pop-up)',popupResizable:'Resizable',popupStatusBar:'à¹à¸ªà¸à¸à¹à¸à¸à¸ªà¸à¸²à¸à¸°',popupLocationBar:'à¹à¸ªà¸à¸à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¸à¸à¹à¸à¸¥à¹',popupToolbar:'à¹à¸ªà¸à¸à¹à¸à¸à¹à¸à¸£à¸·à¹à¸à¸à¸¡à¸·à¸',popupMenuBar:'à¹à¸ªà¸à¸à¹à¸à¸à¹à¸¡à¸à¸¹',popupFullScreen:'à¹à¸ªà¸à¸à¹à¸à¹à¸¡à¸«à¸à¹à¸²à¸à¸ (IE5.5++ à¹à¸à¹à¸²à¸à¸±à¹à¸)',popupScrollBars:'à¹à¸ªà¸à¸à¹à¸à¸à¹à¸¥à¸·à¹à¸à¸',popupDependent:'à¹à¸ªà¸à¸à¹à¸à¹à¸¡à¸«à¸à¹à¸²à¸à¸ (Netscape)',popupLeft:'à¸à¸´à¸à¸±à¸à¸à¹à¸²à¸¢ (Left Position)',popupTop:'à¸à¸´à¸à¸±à¸à¸à¸ (Top Position)',id:'Id',langDir:'à¸à¸²à¸£à¹à¸à¸µà¸¢à¸-à¸à¹à¸²à¸à¸ าษา',langDirLTR:'à¸à¸²à¸à¸à¹à¸²à¸¢à¹à¸à¸à¸§à¸² (LTR)',langDirRTL:'à¸à¸²à¸à¸à¸§à¸²à¸¡à¸²à¸à¹à¸²à¸¢ (RTL)',acccessKey:'à¹à¸à¸à¹à¸à¸ª à¸à¸µà¸¢à¹',name:'à¸à¸·à¹à¸',langCode:'à¸à¸²à¸£à¹à¸à¸µà¸¢à¸-à¸à¹à¸²à¸à¸ าษา',tabIndex:'ลำà¸à¸±à¸à¸à¸à¸ à¹à¸à¹à¸',advisoryTitle:'à¸à¸³à¹à¸à¸£à¸´à¹à¸à¸à¸³',advisoryContentType:'à¸à¸à¸´à¸à¸à¸à¸à¸à¸³à¹à¸à¸£à¸´à¹à¸à¸à¸³',cssClasses:'à¸à¸¥à¸²à¸ªà¸à¸à¸à¹à¸à¸¥à¹à¸à¸³à¸«à¸à¸à¸¥à¸±à¸à¸©à¸à¸°à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥',charset:'ลิà¸à¸à¹à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸à¹à¸à¸¢à¸±à¸à¸à¸¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£',styles:'ลัà¸à¸©à¸à¸°à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥',rel:'Relationship',selectAnchor:'ระà¸à¸¸à¸à¹à¸à¸¡à¸¹à¸¥à¸à¸à¸à¸à¸¸à¸à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸ (Anchor)',anchorName:'à¸à¸·à¹à¸',anchorId:'à¹à¸à¸à¸µ',emailAddress:'à¸à¸µà¹à¸¡à¸¥à¹ (E-Mail)',emailSubject:'หัวà¹à¸£à¸·à¹à¸à¸',emailBody:'à¸à¹à¸à¸à¸§à¸²à¸¡',noAnchors:'(ยัà¸à¹à¸¡à¹à¸¡à¸µà¸à¸¸à¸à¹à¸à¸·à¹à¸à¸¡à¹à¸¢à¸à¸ ายà¹à¸à¸«à¸à¹à¸²à¹à¸à¸à¸ªà¸²à¸£à¸à¸µà¹)',noUrl:'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸à¸à¸à¸à¹à¸¥à¸à¹ (URL)',noEmail:'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸µà¹à¸¡à¸¥à¹ (E-mail)'},anchor:{toolbar:'à¹à¸à¸£à¸/à¹à¸à¹à¹à¸ Anchor',menu:'รายละà¹à¸à¸µà¸¢à¸ Anchor',title:'รายละà¹à¸à¸µà¸¢à¸ Anchor',name:'à¸à¸·à¹à¸ Anchor',errorName:'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸·à¹à¸à¸à¸à¸ Anchor',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'à¸à¹à¸à¸«à¸²',replace:'à¸à¹à¸à¸«à¸²à¹à¸¥à¸°à¹à¸à¸à¸à¸µà¹',findWhat:'à¸à¹à¸à¸«à¸²à¸à¸³à¸§à¹à¸²:',replaceWith:'à¹à¸à¸à¸à¸µà¹à¸à¹à¸§à¸¢:',notFoundMsg:'à¹à¸¡à¹à¸à¸à¸à¸³à¸à¸µà¹à¸à¹à¸à¸«à¸².',matchCase:'à¸à¸±à¸§à¹à¸«à¸à¹-à¹à¸¥à¹à¸ à¸à¹à¸à¸à¸à¸£à¸à¸à¸±à¸',matchWord:'à¸à¹à¸à¸à¸à¸£à¸à¸à¸±à¸à¸à¸¸à¸à¸à¸³',matchCyclic:'Match cyclic',replaceAll:'à¹à¸à¸à¸à¸µà¹à¸à¸±à¹à¸à¸«à¸¡à¸à¸à¸µà¹à¸à¸',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'à¸à¸²à¸£à¸²à¸',title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¸à¸²à¸£à¸²à¸',menu:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¸à¸²à¸£à¸²à¸',deleteTable:'ลà¸à¸à¸²à¸£à¸²à¸',rows:'à¹à¸à¸§',columns:'สà¸à¸¡à¸à¹',border:'à¸à¸à¸²à¸à¹à¸ªà¹à¸à¸à¸à¸',widthPx:'à¸à¸¸à¸à¸ªà¸µ',widthPc:'à¹à¸à¸à¸£à¹à¹à¸à¹à¸',widthUnit:'width unit',cellSpace:'ระยะà¹à¸à¸§à¸à¸à¸à¸',cellPad:'ระยะà¹à¸à¸§à¸à¸±à¹à¸',caption:'หัวà¹à¸£à¸·à¹à¸à¸à¸à¸à¸à¸à¸²à¸£à¸²à¸',summary:'สรุà¸à¸à¸§à¸²à¸¡',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a positive number.',invalidCellPadding:'Cell padding must be a positive number.',cell:{menu:'à¸à¹à¸à¸à¸à¸²à¸£à¸²à¸',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'ลà¸à¸à¹à¸à¸',merge:'à¸à¸ªà¸²à¸à¸à¹à¸à¸',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'à¹à¸à¸§',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'ลà¸à¹à¸à¸§'},column:{menu:'à¸à¸à¸¥à¸±à¸¡à¸à¹',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'ลà¸à¸ªà¸à¸¡à¸à¹'}},button:{title:'รายละà¹à¸à¸µà¸¢à¸à¸à¸à¸ à¸à¸¸à¹à¸¡',text:'à¸à¹à¸à¸à¸§à¸²à¸¡ (à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£)',type:'à¸à¹à¸à¸à¸§à¸²à¸¡',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¹à¸à¸à¹à¸à¸',radioTitle:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸£à¸à¸´à¹à¸à¸à¸±à¸à¸à¸à¸',value:'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£',selected:'à¹à¸¥à¸·à¸à¸à¹à¸à¹à¸à¸à¹à¸²à¹à¸£à¸´à¹à¸¡à¸à¹à¸'},form:{title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¸à¸à¸à¸£à¹à¸¡',menu:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¸à¸à¸à¸£à¹à¸¡',action:'à¹à¸à¸à¸à¸±à¹à¸',method:'à¹à¸¡à¸à¸à¸',encoding:'Encoding'},select:{title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¸à¸à¸±à¸§à¹à¸¥à¸·à¸à¸',selectInfo:'à¸à¸´à¸à¹à¸',opAvail:'รายà¸à¸²à¸£à¸à¸±à¸§à¹à¸¥à¸·à¸à¸',value:'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£',size:'à¸à¸à¸²à¸',lines:'à¸à¸£à¸£à¸à¸±à¸',chkMulti:'à¹à¸¥à¸·à¸à¸à¸«à¸¥à¸²à¸¢à¸à¹à¸²à¹à¸à¹',opText:'à¸à¹à¸à¸à¸§à¸²à¸¡',opValue:'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£',btnAdd:'à¹à¸à¸´à¹à¸¡',btnModify:'à¹à¸à¹à¹à¸',btnUp:'à¸à¸',btnDown:'ลà¹à¸²à¸',btnSetValue:'à¹à¸¥à¸·à¸à¸à¹à¸à¹à¸à¸à¹à¸²à¹à¸£à¸´à¹à¸¡à¸à¹à¸',btnDelete:'ลà¸'},textarea:{title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¹à¸à¹à¸à¹à¸£à¸µà¸¢',cols:'สà¸à¸¡à¸ à¹',rows:'à¹à¸à¸§'},textfield:{title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¹à¸à¹à¸à¸à¹à¸à¸´à¸¥à¸à¹',name:'à¸à¸·à¹à¸',value:'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£',charWidth:'à¸à¸§à¸²à¸¡à¸à¸§à¹à¸²à¸',maxChars:'à¸à¸³à¸à¸§à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸ªà¸¹à¸à¸ªà¸¸à¸',type:'à¸à¸à¸´à¸',typeText:'à¸à¹à¸à¸à¸§à¸²à¸¡',typePass:'รหัสà¸à¹à¸²à¸'},hidden:{title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ ฮิà¸à¹à¸à¸à¸à¸´à¸¥à¸à¹',name:'à¸à¸·à¹à¸',value:'à¸à¹à¸²à¸à¸±à¸§à¹à¸à¸£'},image:{title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ รูà¸à¸ าà¸',titleButton:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ à¸à¸¸à¹à¸¡à¹à¸à¸à¸£à¸¹à¸à¸ าà¸',menu:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸ รูà¸à¸ าà¸',infoTab:'à¸à¹à¸à¸¡à¸¹à¸¥à¸à¸à¸à¸£à¸¹à¸à¸ าà¸',btnUpload:'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹à¹à¸à¹à¸à¹à¸à¹à¸§à¹à¸à¸µà¹à¹à¸à¸£à¸·à¹à¸à¸à¹à¸¡à¹à¸à¹à¸²à¸¢ (à¹à¸à¸´à¸£à¹à¸à¹à¸§à¸à¸£à¹)',upload:'à¸à¸±à¸à¹à¸«à¸¥à¸à¹à¸à¸¥à¹',alt:'à¸à¸³à¸à¸£à¸°à¸à¸à¸à¸£à¸¹à¸à¸ าà¸',lockRatio:'à¸à¸³à¸«à¸à¸à¸à¸±à¸à¸£à¸²à¸ªà¹à¸§à¸ à¸à¸§à¹à¸²à¸-สูภà¹à¸à¸à¸à¸à¸à¸µà¹',resetSize:'à¸à¸³à¸«à¸à¸à¸£à¸¹à¸à¹à¸à¹à¸²à¸à¸à¸²à¸à¸à¸£à¸´à¸',border:'à¸à¸à¸²à¸à¸à¸à¸à¸£à¸¹à¸',hSpace:'ระยะà¹à¸à¸§à¸à¸à¸',vSpace:'ระยะà¹à¸à¸§à¸à¸±à¹à¸',alertUrl:'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸à¸à¸à¸à¹à¸¥à¸à¹à¸à¸à¸à¹à¸à¸¥à¹à¸£à¸¹à¸à¸ าภ(URL)',linkTab:'ลิà¹à¸à¸à¹',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¹à¸à¸¥à¹ Flash',propertiesTab:'Properties',title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¹à¸à¸¥à¹ Flash',chkPlay:'à¹à¸¥à¹à¸à¸à¸±à¸à¹à¸à¸¡à¸±à¸à¸´ Auto Play',chkLoop:'à¹à¸¥à¹à¸à¸§à¸à¸£à¸à¸ Loop',chkMenu:'à¹à¸«à¹à¹à¸à¹à¸à¸²à¸à¹à¸¡à¸à¸¹à¸à¸à¸ Flash',chkFull:'Allow Fullscreen',scale:'à¸à¸±à¸à¸£à¸²à¸ªà¹à¸§à¸ Scale',scaleAll:'à¹à¸ªà¸à¸à¹à¸«à¹à¹à¸«à¹à¸à¸à¸±à¹à¸à¸«à¸¡à¸ Show all',scaleNoBorder:'à¹à¸¡à¹à¹à¸ªà¸à¸à¹à¸ªà¹à¸à¸à¸à¸ No Border',scaleFit:'à¹à¸ªà¸à¸à¹à¸«à¹à¸à¸à¸à¸µà¸à¸±à¸à¸à¸·à¹à¸à¸à¸µà¹ Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'à¸à¸´à¸à¸à¹à¸²à¸à¸¥à¹à¸²à¸à¸ªà¸¸à¸',alignAbsMiddle:'à¸à¸¶à¹à¸à¸à¸¥à¸²à¸',alignBaseline:'à¸à¸´à¸à¸à¸£à¸£à¸à¸±à¸',alignTextTop:'à¹à¸à¹à¸à¸±à¸§à¸à¸±à¸à¸©à¸£',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'สีà¸à¸·à¹à¸à¸«à¸¥à¸±à¸',hSpace:'ระยะà¹à¸à¸§à¸à¸à¸',vSpace:'ระยะà¹à¸à¸§à¸à¸±à¹à¸',validateSrc:'à¸à¸£à¸¸à¸à¸²à¸£à¸°à¸à¸¸à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸à¸à¸à¸à¹à¸¥à¸à¹ (URL)',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'à¸à¸£à¸§à¸à¸à¸²à¸£à¸ªà¸°à¸à¸à¸à¸³',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'à¹à¸¡à¹à¸à¸à¹à¸à¸à¸´à¸à¸à¸±à¸à¸à¸²à¸£à¸µ',changeTo:'à¹à¸à¹à¹à¸à¹à¸à¹à¸',btnIgnore:'ยà¸à¹à¸§à¹à¸',btnIgnoreAll:'ยà¸à¹à¸§à¹à¸à¸à¸±à¹à¸à¸«à¸¡à¸',btnReplace:'à¹à¸à¸à¸à¸µà¹',btnReplaceAll:'à¹à¸à¸à¸à¸µà¹à¸à¸±à¹à¸à¸«à¸¡à¸',btnUndo:'ยà¸à¹à¸¥à¸´à¸',noSuggestions:'- à¹à¸¡à¹à¸¡à¸µà¸à¸³à¹à¸à¸°à¸à¸³à¹à¸à¹ -',progress:'à¸à¸³à¸¥à¸±à¸à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸...',noMispell:'à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸à¹à¸ªà¸£à¹à¸à¸ªà¸´à¹à¸: à¹à¸¡à¹à¸à¸à¸à¸³à¸ªà¸°à¸à¸à¸à¸´à¸',noChanges:'à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸à¹à¸ªà¸£à¹à¸à¸ªà¸´à¹à¸: à¹à¸¡à¹à¸¡à¸µà¸à¸²à¸£à¹à¸à¹à¸à¸³à¹à¸à¹',oneChange:'à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸à¹à¸ªà¸£à¹à¸à¸ªà¸´à¹à¸: à¹à¸à¹à¹à¸1à¸à¸³',manyChanges:'à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸à¹à¸ªà¸£à¹à¸à¸ªà¸´à¹à¸:: à¹à¸à¹à¹à¸ %1 à¸à¸³',ieSpellDownload:'à¹à¸¡à¹à¹à¸à¹à¸à¸´à¸à¸à¸±à¹à¸à¸£à¸°à¸à¸à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸³à¸ªà¸°à¸à¸. à¸à¹à¸à¸à¸à¸²à¸£à¸à¸´à¸à¸à¸±à¹à¸à¹à¸«à¸¡à¸à¸£à¸±à¸?'},smiley:{toolbar:'รูà¸à¸ªà¸·à¹à¸à¸à¸²à¸£à¸¡à¸à¹',title:'à¹à¸à¸£à¸à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸à¹à¸ªà¸·à¹à¸à¸à¸²à¸£à¸¡à¸à¹',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ลำà¸à¸±à¸à¸£à¸²à¸¢à¸à¸²à¸£à¹à¸à¸à¸à¸±à¸§à¹à¸¥à¸',bulletedlist:'ลำà¸à¸±à¸à¸£à¸²à¸¢à¸à¸²à¸£à¹à¸à¸à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸à¹',indent:'à¹à¸à¸´à¹à¸¡à¸£à¸°à¸¢à¸°à¸¢à¹à¸à¸«à¸à¹à¸²',outdent:'ลà¸à¸£à¸°à¸¢à¸°à¸¢à¹à¸à¸«à¸à¹à¸²',justify:{left:'à¸à¸±à¸à¸à¸´à¸à¸à¹à¸²à¸¢',center:'à¸à¸±à¸à¸à¸¶à¹à¸à¸à¸¥à¸²à¸',right:'à¸à¸±à¸à¸à¸´à¸à¸à¸§à¸²',block:'à¸à¸±à¸à¸à¸à¸à¸µà¸«à¸à¹à¸²à¸à¸£à¸°à¸à¸²à¸©'},blockquote:'Block Quote',clipboard:{title:'วาà¸',cutError:'à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸à¸±à¸à¸à¹à¸à¸à¸§à¸²à¸¡à¸à¸µà¹à¹à¸¥à¸·à¸à¸à¹à¸§à¹à¹à¸à¹à¹à¸à¸·à¹à¸à¸à¸à¸²à¸à¸à¸²à¸£à¸à¸³à¸«à¸à¸à¸à¹à¸²à¸£à¸°à¸à¸±à¸à¸à¸§à¸²à¸¡à¸à¸¥à¸à¸à¸ ัย. à¸à¸£à¸¸à¸à¸²à¹à¸à¹à¸à¸¸à¹à¸¡à¸¥à¸±à¸à¹à¸à¸·à¹à¸à¸§à¸²à¸à¸à¹à¸à¸à¸§à¸²à¸¡à¹à¸à¸ (à¸à¸à¸à¸¸à¹à¸¡ Ctrl/Cmd à¹à¸¥à¸°à¸à¸±à¸§ X à¸à¸£à¹à¸à¸¡à¸à¸±à¸).',copyError:'à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸ªà¸³à¹à¸à¸²à¸à¹à¸à¸à¸§à¸²à¸¡à¸à¸µà¹à¹à¸¥à¸·à¸à¸à¹à¸§à¹à¹à¸à¹à¹à¸à¸·à¹à¸à¸à¸à¸²à¸à¸à¸²à¸£à¸à¸³à¸«à¸à¸à¸à¹à¸²à¸£à¸°à¸à¸±à¸à¸à¸§à¸²à¸¡à¸à¸¥à¸à¸à¸ ัย. à¸à¸£à¸¸à¸à¸²à¹à¸à¹à¸à¸¸à¹à¸¡à¸¥à¸±à¸à¹à¸à¸·à¹à¸à¸§à¸²à¸à¸à¹à¸à¸à¸§à¸²à¸¡à¹à¸à¸ (à¸à¸à¸à¸¸à¹à¸¡ Ctrl/Cmd à¹à¸¥à¸°à¸à¸±à¸§ C à¸à¸£à¹à¸à¸¡à¸à¸±à¸).',pasteMsg:'à¸à¸£à¸¸à¸à¸²à¹à¸à¹à¸à¸µà¸¢à¹à¸à¸à¸£à¹à¸à¹à¸à¹à¸²à¸à¸±à¹à¸ à¹à¸à¸¢à¸à¸à¸à¸¸à¹à¸¡ (<strong>Ctrl/Cmd à¹à¸¥à¸° V</strong>)à¸à¸£à¹à¸à¸¡à¹à¸à¸±à¸ à¹à¸¥à¸°à¸à¸ <strong>OK</strong>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'วาà¸à¸ªà¸³à¹à¸à¸²à¸à¸²à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¹à¸§à¸´à¸£à¹à¸',title:'วาà¸à¸ªà¸³à¹à¸à¸²à¸à¸²à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¹à¸§à¸´à¸£à¹à¸',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'วาà¸à¹à¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸£à¸£à¸¡à¸à¸²',title:'วาà¸à¹à¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸£à¸£à¸¡à¸à¸²'},templates:{button:'à¹à¸à¸¡à¹à¸à¸¥à¸',title:'à¹à¸à¸¡à¹à¸à¸¥à¸à¸à¸à¸à¸ªà¹à¸§à¸à¹à¸à¸·à¹à¸à¸«à¸²à¹à¸§à¹à¸à¹à¸à¸à¹',options:'Template Options',insertOption:'à¹à¸à¸à¸à¸µà¹à¹à¸à¸·à¹à¸à¸«à¸²à¹à¸§à¹à¸à¹à¸à¸à¹à¸à¸µà¹à¹à¸¥à¸·à¸à¸',selectPromptMsg:'à¸à¸£à¸¸à¸à¸²à¹à¸¥à¸·à¸à¸ à¹à¸à¸¡à¹à¸à¸¥à¸ à¹à¸à¸·à¹à¸à¸à¸³à¹à¸à¹à¸à¹à¹à¸à¹à¸à¸à¸µà¸à¸´à¸à¹à¸à¸à¸£à¹<br />(à¹à¸à¸·à¹à¸à¸«à¸²à¸ªà¹à¸§à¸à¸à¸µà¹à¸à¸°à¸«à¸²à¸¢à¹à¸):',emptyListMsg:'(ยัà¸à¹à¸¡à¹à¸¡à¸µà¸à¸²à¸£à¸à¸³à¸«à¸à¸à¹à¸à¸¡à¹à¸à¸¥à¸)'},showBlocks:'Show Blocks',stylesCombo:{label:'ลัà¸à¸©à¸à¸°',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'รูà¸à¹à¸à¸',panelTitle:'รูà¸à¹à¸à¸',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Paragraph (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'à¹à¸à¸à¸à¸±à¸à¸©à¸£',voiceLabel:'Font',panelTitle:'à¹à¸à¸à¸à¸±à¸à¸©à¸£'},fontSize:{label:'à¸à¸à¸²à¸',voiceLabel:'Font Size',panelTitle:'à¸à¸à¸²à¸'},colorButton:{textColorTitle:'สีà¸à¸±à¸§à¸à¸±à¸à¸©à¸£',bgColorTitle:'สีà¸à¸·à¹à¸à¸«à¸¥à¸±à¸',panelTitle:'Colors',auto:'สีà¸à¸±à¸à¹à¸à¸¡à¸±à¸à¸´',more:'à¹à¸¥à¸·à¸à¸à¸ªà¸µà¸à¸·à¹à¸à¹...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¹à¸à¸à¸ªà¸²à¸£',title:'à¸à¸¸à¸à¸ªà¸¡à¸à¸±à¸à¸´à¸à¸à¸à¹à¸à¸à¸ªà¸²à¸£',design:'Design',meta:'à¸à¹à¸à¸¡à¸¹à¸¥à¸ªà¸³à¸«à¸£à¸±à¸à¹à¸ªà¸´à¸£à¹à¸à¹à¸à¸à¸à¸´à¹à¸',chooseColor:'Choose',other:'<à¸à¸·à¹à¸ à¹>',docTitle:'à¸à¸·à¹à¸à¹à¸à¹à¸à¸´à¹à¸¥',charset:'à¸à¸¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£',charsetOther:'à¸à¸¸à¸à¸à¸±à¸§à¸à¸±à¸à¸©à¸£à¸à¸·à¹à¸à¹',charsetASCII:'ASCII',charsetCE:'Central European',charsetCT:'Chinese Traditional (Big5)',charsetCR:'Cyrillic',charsetGR:'Greek',charsetJP:'Japanese',charsetKR:'Korean',charsetTR:'Turkish',charsetUN:'Unicode (UTF-8)',charsetWE:'Western European',docType:'à¸à¸£à¸°à¹à¸ à¸à¸à¸à¸à¹à¸à¸à¸ªà¸²à¸£',docTypeOther:'à¸à¸£à¸°à¹à¸ à¸à¹à¸à¸à¸ªà¸²à¸£à¸à¸·à¹à¸à¹',xhtmlDec:'รวมà¹à¸à¸² XHTML Declarations à¹à¸§à¹à¸à¹à¸§à¸¢',bgColor:'สีà¸à¸·à¹à¸à¸«à¸¥à¸±à¸',bgImage:'à¸à¸µà¹à¸à¸¢à¸¹à¹à¸à¹à¸²à¸à¸à¸´à¸à¸à¸à¸à¹à¸¥à¸à¹à¸à¸à¸à¸£à¸¹à¸à¸à¸·à¹à¸à¸«à¸¥à¸±à¸ (Image URL)',bgFixed:'à¸à¸·à¹à¸à¸«à¸¥à¸±à¸à¹à¸à¸à¹à¸¡à¹à¸¡à¸µà¹à¸à¸à¹à¸¥à¸·à¹à¸à¸',txtColor:'สีà¸à¸±à¸§à¸à¸±à¸à¸©à¸£',margin:'ระยะà¸à¸à¸à¸à¸à¸à¸«à¸à¹à¸²à¹à¸à¸à¸ªà¸²à¸£',marginTop:'à¸à¹à¸²à¸à¸à¸',marginLeft:'à¸à¹à¸²à¸à¸à¹à¸²à¸¢',marginRight:'à¸à¹à¸²à¸à¸à¸§à¸²',marginBottom:'à¸à¹à¸²à¸à¸¥à¹à¸²à¸',metaKeywords:'à¸à¸³à¸ªà¸³à¸à¸±à¸à¸à¸à¸´à¸à¸²à¸¢à¹à¸à¸à¸ªà¸²à¸£ (à¸à¸±à¹à¸à¸à¸³à¸à¹à¸§à¸¢ à¸à¸à¸¡à¸¡à¹à¸²)',metaDescription:'à¸à¸£à¸°à¹à¸¢à¸à¸à¸à¸´à¸à¸²à¸¢à¹à¸à¸µà¹à¸¢à¸§à¸à¸±à¸à¹à¸à¸à¸ªà¸²à¸£',metaAuthor:'à¸à¸¹à¹à¸ªà¸£à¹à¸²à¸à¹à¸à¸à¸ªà¸²à¸£',metaCopyright:'สà¸à¸§à¸à¸¥à¸´à¸à¸ªà¸´à¸à¸à¸´à¹',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/tr.js b/lang/tr.js new file mode 100644 index 0000000..f3fbc62 --- /dev/null +++ b/lang/tr.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.tr={dir:'ltr',editorTitle:'Zengin metin editörü, %1, yardım için ALT 0 tuÅuna basın.',toolbars:'Editor toolbars',editor:'Zengin Metin Editörü',source:'Kaynak',newPage:'Yeni Sayfa',save:'Kaydet',preview:'Ãn Ä°zleme',cut:'Kes',copy:'Kopyala',paste:'YapıÅtır',print:'Yazdır',underline:'Altı Ãizgili',bold:'Kalın',italic:'Ä°talik',selectAll:'Tümünü Seç',removeFormat:'Biçimi Kaldır',strike:'Ãstü Ãizgili',subscript:'Alt Simge',superscript:'Ãst Simge',horizontalrule:'Yatay Satır Ekle',pagebreak:'Sayfa Sonu Ekle',pagebreakAlt:'Page Break',unlink:'Köprü Kaldır',undo:'Geri Al',redo:'Tekrarla',common:{browseServer:'Sunucuyu Gez',url:'URL',protocol:'Protokol',upload:'KarÅıya Yükle',uploadSubmit:'Sunucuya Yolla',image:'Resim',flash:'Flash',form:'Form',checkbox:'Onay Kutusu',radio:'Seçenek DüÄmesi',textField:'Metin GiriÅi',textarea:'Ãok Satırlı Metin',hiddenField:'Gizli Veri',button:'DüÄme',select:'Seçim Menüsü',imageButton:'Resimli DüÄme',notSet:'<tanımlanmamıÅ>',id:'Kimlik',name:'Ad',langDir:'Dil Yönü',langDirLtr:'Soldan SaÄa (LTR)',langDirRtl:'SaÄdan Sola (RTL)',langCode:'Dil Kodlaması',longDescr:'Uzun Tanımlı URL',cssClass:'Biçem Sayfası Sınıfları',advisoryTitle:'DanıÅma BaÅlıÄı',cssStyle:'Biçem',ok:'Tamam',cancel:'Ä°ptal',close:'Kapat',preview:'Ãn gösterim',generalTab:'Genel',advancedTab:'GeliÅmiÅ',validateNumberFailed:'Bu deÄer sayı deÄildir.',confirmNewPage:'Ä°ceriÄiniz kayıt edilmediÄinden dolayı kaybolacaktır. Yeni bir sayfa yüklemek istediÄinize eminsiniz?',confirmCancel:'Bazı seçenekler deÄiÅmiÅtir. Dialog penceresini kapatmak istediÄinize eminmisiniz?',options:'Seçenekler',target:'Hedef',targetNew:'Yeni Pencere (_blank)',targetTop:'Enüst Pencere (_top)',targetSelf:'Aynı Pencere (_self)',targetParent:'Ana Pencere (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'GeniÅlik',height:'Yükseklik',align:'Hizalama',alignLeft:'Sol',alignRight:'SaÄ',alignCenter:'Merkez',alignTop:'Tepe',alignMiddle:'Orta',alignBottom:'Alt',invalidHeight:'Yükseklik sayı olmalıdır.',invalidWidth:'GeniÅlik bir sayı olmalıdır.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, hazır deÄildir</span>'},contextmenu:{options:'İçerik Menüsü Seçenekleri'},specialChar:{toolbar:'Ãzel Karakter Ekle',title:'Ãzel Karakter Seç',options:'Ãzel Karakter Seçenekleri'},link:{toolbar:'Link Ekle/Düzenle',other:'<diÄer>',menu:'Link Düzenle',title:'Link',info:'Link Bilgisi',target:'Hedef',upload:'KarÅıya Yükle',advanced:'GeliÅmiÅ',type:'Link Türü',toUrl:'URL',toAnchor:'Bu sayfada çapa',toEmail:'E-Posta',targetFrame:'<çerçeve>',targetPopup:'<yeni açılan pencere>',targetFrameName:'Hedef Ãerçeve Adı',targetPopupName:'Yeni Açılan Pencere Adı',popupFeatures:'Yeni Açılan Pencere Ãzellikleri',popupResizable:'Resizable',popupStatusBar:'Durum ÃubuÄu',popupLocationBar:'Yer ÃubuÄu',popupToolbar:'Araç ÃubuÄu',popupMenuBar:'Menü ÃubuÄu',popupFullScreen:'Tam Ekran (IE)',popupScrollBars:'Kaydırma Ãubukları',popupDependent:'BaÄımlı (Netscape)',popupLeft:'Sola Göre Konum',popupTop:'Yukarıya Göre Konum',id:'Id',langDir:'Dil Yönü',langDirLTR:'Soldan SaÄa (LTR)',langDirRTL:'SaÄdan Sola (RTL)',acccessKey:'EriÅim TuÅu',name:'Ad',langCode:'Dil Yönü',tabIndex:'Sekme Ä°ndeksi',advisoryTitle:'DanıÅma BaÅlıÄı',advisoryContentType:'DanıÅma İçerik Türü',cssClasses:'Biçem Sayfası Sınıfları',charset:'BaÄlı Kaynak Karakter Gurubu',styles:'Biçem',rel:'Relationship',selectAnchor:'BaÄlantı Seç',anchorName:'BaÄlantı Adı ile',anchorId:'Eleman Kimlik Numarası ile',emailAddress:'E-Posta Adresi',emailSubject:'Ä°leti Konusu',emailBody:'Ä°leti Gövdesi',noAnchors:'(Bu belgede hiç çapa yok)',noUrl:"Lütfen Link URL'sini yazın",noEmail:'Lütfen E-posta adresini yazın'},anchor:{toolbar:'BaÄlantı Ekle/Düzenle',menu:'BaÄlantı Ãzellikleri',title:'BaÄlantı Ãzellikleri',name:'BaÄlantı Adı',errorName:'Lütfen baÄlantı için ad giriniz',remove:'Remove Anchor'},list:{numberedTitle:'SayılandırılmıŠListe Ãzellikleri',bulletedTitle:'Simgeli Liste Ãzellikleri',type:'Tipi',start:'BaÅla',validateStartNumber:'List start number must be a whole number.',circle:'Daire',disc:'Disk',square:'Kare',none:'Yok',notset:'<ayarlanmamıÅ>',armenian:'Ermenice sayılandırma',georgian:'Gürcüce numaralandırma (an, ban, gan, vs.)',lowerRoman:'Küçük Roman (i, ii, iii, iv, v, vs.)',upperRoman:'Büyük Roman (I, II, III, IV, V, vs.)',lowerAlpha:'Küçük Alpha (a, b, c, d, e, vs.)',upperAlpha:'Büyük Alpha (A, B, C, D, E, vs.)',lowerGreek:'Küçük Greek (alpha, beta, gamma, vs.)',decimal:'Ondalık (1, 2, 3, vs.)',decimalLeadingZero:'BaÅı sıfırlı ondalık (01, 02, 03, vs.)'},findAndReplace:{title:'Bul ve DeÄiÅtir',find:'Bul',replace:'DeÄiÅtir',findWhat:'Aranan:',replaceWith:'Bununla deÄiÅtir:',notFoundMsg:'Belirtilen yazı bulunamadı.',matchCase:'Büyük/küçük harf duyarlı',matchWord:'Kelimenin tamamı uysun',matchCyclic:'EÅleÅen döngü',replaceAll:'Tümünü DeÄiÅtir',replaceSuccessMsg:'%1 bulunanlardan deÄiÅtirildi.'},table:{toolbar:'Tablo',title:'Tablo Ãzellikleri',menu:'Tablo Ãzellikleri',deleteTable:'Tabloyu Sil',rows:'Satırlar',columns:'Sütunlar',border:'Kenar KalınlıÄı',widthPx:'piksel',widthPc:'yüzde',widthUnit:'geniÅlik birimi',cellSpace:'Izgara kalınlıÄı',cellPad:'Izgara yazı arası',caption:'BaÅlık',summary:'Ãzet',headers:'BaÅlıklar',headersNone:'Yok',headersColumn:'Ä°lk Sütun',headersRow:'Ä°lk Satır',headersBoth:'Her Ä°kisi',invalidRows:'Satır sayısı 0 sayısından büyük olmalıdır.',invalidCols:'Sütün sayısı 0 sayısından büyük olmalıdır.',invalidBorder:'Ãerceve büyüklüklüÄü sayı olmalıdır.',invalidWidth:'Tablo geniÅliÄi sayı olmalıdır.',invalidHeight:'Tablo yüksekliÄi sayı olmalıdır.',invalidCellSpacing:'Hücre boÅluÄu (spacing) sayı olmalıdır.',invalidCellPadding:'Hücre aralıÄı (padding) sayı olmalıdır.',cell:{menu:'Hücre',insertBefore:'Hücre Ekle - Ãnce',insertAfter:'Hücre Ekle - Sonra',deleteCell:'Hücre Sil',merge:'Hücreleri BirleÅtir',mergeRight:'BirleÅtir - SaÄdaki Ä°le ',mergeDown:'BirleÅtir - AÅaÄıdaki Ä°le ',splitHorizontal:'Hücreyi Yatay Böl',splitVertical:'Hücreyi Dikey Böl',title:'Hücre Ãzellikleri',cellType:'Hücre Tipi',rowSpan:'Satırlar Mesafesi (Span)',colSpan:'Sütünlar Mesafesi (Span)',wordWrap:'Kelime Kaydırma',hAlign:'DüÅey Hizalama',vAlign:'YataÅ Hizalama',alignBaseline:'Tabana',bgColor:'Arkaplan Rengi',borderColor:'Ãerçeve Rengi',data:'Veri',header:'BaÅlık',yes:'Evet',no:'Hayır',invalidWidth:'Hücre geniÅliÄi sayı olmalıdır.',invalidHeight:'Hücre yüksekliÄi sayı olmalıdır.',invalidRowSpan:'Satırların mesafesi tam sayı olmalıdır.',invalidColSpan:'Sütünların mesafesi tam sayı olmalıdır.',chooseColor:'Seçiniz'},row:{menu:'Satır',insertBefore:'Satır Ekle - Ãnce',insertAfter:'Satır Ekle - Sonra',deleteRow:'Satır Sil'},column:{menu:'Sütun',insertBefore:'Kolon Ekle - Ãnce',insertAfter:'Kolon Ekle - Sonra',deleteColumn:'Sütun Sil'}},button:{title:'DüÄme Ãzellikleri',text:'Metin (DeÄer)',type:'Tip',typeBtn:'DüÄme',typeSbm:'Gönder',typeRst:'Sıfırla'},checkboxAndRadio:{checkboxTitle:'Onay Kutusu Ãzellikleri',radioTitle:'Seçenek DüÄmesi Ãzellikleri',value:'DeÄer',selected:'Seçili'},form:{title:'Form Ãzellikleri',menu:'Form Ãzellikleri',action:'Ä°Ålem',method:'Yöntem',encoding:'Kodlama'},select:{title:'Seçim Menüsü Ãzellikleri',selectInfo:'Bilgi',opAvail:'Mevcut Seçenekler',value:'DeÄer',size:'Boyut',lines:'satır',chkMulti:'Ãoklu seçime izin ver',opText:'Metin',opValue:'DeÄer',btnAdd:'Ekle',btnModify:'Düzenle',btnUp:'Yukarı',btnDown:'AÅaÄı',btnSetValue:'Seçili deÄer olarak ata',btnDelete:'Sil'},textarea:{title:'Ãok Satırlı Metin Ãzellikleri',cols:'Sütunlar',rows:'Satırlar'},textfield:{title:'Metin GiriÅi Ãzellikleri',name:'Ad',value:'DeÄer',charWidth:'Karakter GeniÅliÄi',maxChars:'En Fazla Karakter',type:'Tür',typeText:'Metin',typePass:'Åifre'},hidden:{title:'Gizli Veri Ãzellikleri',name:'Ad',value:'DeÄer'},image:{title:'Resim Ãzellikleri',titleButton:'Resimli DüÄme Ãzellikleri',menu:'Resim Ãzellikleri',infoTab:'Resim Bilgisi',btnUpload:'Sunucuya Yolla',upload:'KarÅıya Yükle',alt:'Alternatif Yazı',lockRatio:'Oranı Kilitle',resetSize:'Boyutu BaÅa Döndür',border:'Kenar',hSpace:'Yatay BoÅluk',vSpace:'Dikey BoÅluk',alertUrl:"Lütfen resmin URL'sini yazınız",linkTab:'Köprü',button2Img:'Seçili resim butonunu basit resime çevirmek istermisiniz?',img2Button:'Seçili olan resimi, resimli butona çevirmek istermisiniz?',urlMissing:'Resmin URL kaynaÄı eksiktir.',validateBorder:'Ãerçeve tam sayı olmalıdır.',validateHSpace:'HSpace tam sayı olmalıdır.',validateVSpace:'VSpace tam sayı olmalıdır.'},flash:{properties:'Flash Ãzellikleri',propertiesTab:'Ãzellikler',title:'Flash Ãzellikleri',chkPlay:'Otomatik Oynat',chkLoop:'Döngü',chkMenu:'Flash Menüsünü Kullan',chkFull:'Tam ekrana Ä°zinver',scale:'Boyutlandır',scaleAll:'Hepsini Göster',scaleNoBorder:'Kenar Yok',scaleFit:'Tam SıÄdır',access:'Kod Ä°zni',accessAlways:'Herzaman',accessSameDomain:'Aynı domain',accessNever:'Asla',alignAbsBottom:'Tam Altı',alignAbsMiddle:'Tam Ortası',alignBaseline:'Taban Ãizgisi',alignTextTop:'Yazı Tepeye',quality:'Kalite',qualityBest:'En iyi',qualityHigh:'Yüksek',qualityAutoHigh:'Otomatik Yükseklik',qualityMedium:'Orta',qualityAutoLow:'Otomatik DüÅüklük',qualityLow:'DüÅük',windowModeWindow:'Pencere',windowModeOpaque:'Opak',windowModeTransparent:'Åeffaf',windowMode:'Pencere modu',flashvars:'Flash DeÄerleri',bgcolor:'Arka Renk',hSpace:'Yatay BoÅluk',vSpace:'Dikey BoÅluk',validateSrc:"Lütfen köprü URL'sini yazın",validateHSpace:'HSpace sayı olmalıdır.',validateVSpace:'VSpace sayı olmalıdır.'},spellCheck:{toolbar:'Yazım Denetimi',title:'Yazımı Denetle',notAvailable:'Ãzügünüz, bu servis Åuanda hizmet dıÅıdır.',errorLoading:'Uygulamada yüklerken hata oluÅtu: %s.',notInDic:'Sözlükte Yok',changeTo:'Åuna deÄiÅtir:',btnIgnore:'Yoksay',btnIgnoreAll:'Tümünü Yoksay',btnReplace:'DeÄiÅtir',btnReplaceAll:'Tümünü DeÄiÅtir',btnUndo:'Geri Al',noSuggestions:'- Ãneri Yok -',progress:'Yazım denetimi iÅlemde...',noMispell:'Yazım denetimi tamamlandı: YanlıŠyazıma rastlanmadı',noChanges:'Yazım denetimi tamamlandı: Hiçbir kelime deÄiÅtirilmedi',oneChange:'Yazım denetimi tamamlandı: Bir kelime deÄiÅtirildi',manyChanges:'Yazım denetimi tamamlandı: %1 kelime deÄiÅtirildi',ieSpellDownload:'Yazım denetimi yüklenmemiÅ. Åimdi yüklemek ister misiniz?'},smiley:{toolbar:'Ä°fade',title:'Ä°fade Ekle',options:'Ä°fade Seçenekleri'},elementsPath:{eleLabel:'Elementlerin yolu',eleTitle:'%1 element'},numberedlist:'Numaralı Liste',bulletedlist:'Simgeli Liste',indent:'Sekme Arttır',outdent:'Sekme Azalt',justify:{left:'Sola Dayalı',center:'OrtalanmıÅ',right:'SaÄa Dayalı',block:'Ä°ki Kenara YaslanmıÅ'},blockquote:'Blok OluÅtur',clipboard:{title:'YapıÅtır',cutError:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme iÅlemine izin vermiyor. Ä°Ålem için (Ctrl/Cmd+X) tuÅlarını kullanın.',copyError:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama iÅlemine izin vermiyor. Ä°Ålem için (Ctrl/Cmd+C) tuÅlarını kullanın.',pasteMsg:'Lütfen aÅaÄıdaki kutunun içine yapıÅtırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.',securityMsg:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya eriÅimine izin vermiyor. Bu pencere içine tekrar yapıÅtırmalısınız..',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:"YapıÅtırmaya çalıÅtıÄınız metin Word'den kopyalanmıÅtır. YapıÅtırmadan önce silmek istermisiniz?",toolbar:"Word'den YapıÅtır",title:"Word'den YapıÅtır",error:'YapıÅtırmadaki veri bilgisi hata düzelene kadar silinmeyecektir'},pasteText:{button:'Düz Metin Olarak YapıÅtır',title:'Düz Metin Olarak YapıÅtır'},templates:{button:'Åablonlar',title:'İçerik Åablonları',options:'Åablon Seçenekleri',insertOption:'Mevcut içerik ile deÄiÅtir',selectPromptMsg:'Düzenleyicide açmak için lütfen bir Åablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):',emptyListMsg:'(Belirli bir Åablon seçilmedi)'},showBlocks:'Blokları Göster',stylesCombo:{label:'Biçem',panelTitle:'Stilleri Düzenliyor',panelTitle1:'Blok Stilleri',panelTitle2:'Inline Stilleri',panelTitle3:'Nesne Stilleri'},format:{label:'Biçim',panelTitle:'Biçim',tag_p:'Normal',tag_pre:'Biçimli',tag_address:'Adres',tag_h1:'BaÅlık 1',tag_h2:'BaÅlık 2',tag_h3:'BaÅlık 3',tag_h4:'BaÅlık 4',tag_h5:'BaÅlık 5',tag_h6:'BaÅlık 6',tag_div:'Paragraf (DIV)'},div:{title:'Div İçeriÄi OluÅtur',toolbar:'Div İçeriÄi OluÅtur',cssClassInputLabel:'Stilltipi Sınıfı',styleSelectLabel:'Stil',IdInputLabel:'Id',languageCodeInputLabel:' Dil Kodu',inlineStyleInputLabel:'Inline Stili',advisoryTitleInputLabel:'Tavsiye BaÅlıÄı',langDirLabel:'Dil Yönü',langDirLTRLabel:'Soldan saÄa (LTR)',langDirRTLLabel:'SaÄdan sola (RTL)',edit:'Div Düzenle',remove:'Div Kaldır'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Yazı Türü',voiceLabel:'Font',panelTitle:'Yazı Türü'},fontSize:{label:'Boyut',voiceLabel:'Font Size',panelTitle:'Boyut'},colorButton:{textColorTitle:'Yazı Rengi',bgColorTitle:'Arka Renk',panelTitle:'Renkler',auto:'Otomatik',more:'DiÄer renkler...'},colors:{'000':'Siyah',800000:'Kestane','8B4513':'Koyu Kahverengi','2F4F4F':'Koyu KurÅuni Gri','008080':'Teal','000080':'Mavi','4B0082':'Ãivit Mavisi',696969:'Silik Gri',B22222:'AteÅ TuÄlası',A52A2A:'Kahverengi',DAA520:'Altun Sırık','006400':'Koyu YeÅil','40E0D0':'Turkuaz','0000CD':'Orta Mavi',800080:'Pembe',808080:'Gri',F00:'Kırmızı',FF8C00:'Koyu Portakal',FFD700:'Altın','008000':'YeÅil','0FF':'Ciyan','00F':'Mavi',EE82EE:'MenekÅe',A9A9A9:'Koyu Gri',FFA07A:'Açık Sarımsı',FFA500:'Portakal',FFFF00:'Sarı','00FF00':'Açık YeÅil',AFEEEE:'Sönük Turkuaz',ADD8E6:'Açık Mavi',DDA0DD:'Mor',D3D3D3:'Açık Gri',FFF0F5:'Eflatun Pembe',FAEBD7:'Antik Beyaz',FFFFE0:'Açık Sarı',F0FFF0:'Balsarısı',F0FFFF:'Gök Mavisi',F0F8FF:'Reha Mavi',E6E6FA:'Eflatun',FFF:'Beyaz'},scayt:{title:'GirmiÅ olduÄunuz kelime denetimi',opera_title:'Opera tarafından desteklenmemektedir',enable:'SCAYT etkinleÅtir',disable:'SCAYT pasifleÅtir',about:'SCAYT hakkında',toggle:'SCAYT deÄiÅtir',options:'Seçenekler',langs:'Diller',moreSuggestions:'Daha fazla öneri',ignore:'Yoksay',ignoreAll:'Tümünü Yoksay',addWord:'Kelime Ekle',emptyDic:'Sözlük adı boÅ olamaz.',optionsTab:'Seçenekler',allCaps:'Tüm büyük küçük kelimeleri yoksay',ignoreDomainNames:'Domain adlarını yoksay',mixedCase:'KarıÅık büyüklük ile Sözcükler yoksay',mixedWithDigits:'Sayılarla Kelimeler yoksay',languagesTab:'Diller',dictionariesTab:'Sözlükler',dic_field_name:'Sözlük adı',dic_create:'OluÅtur',dic_restore:'Geri al',dic_delete:'Sil',dic_rename:'Yeniden adlandır',dic_info:"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it's name and click the Restore button.",aboutTab:'Hakkında'},about:{title:'CKEditor Hakkında',dlgTitle:'CKEditor Hakkında',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:',copy:'Copyright © $1. Tüm hakları saklıdır.'},maximize:'Büyült',minimize:'Küçült',fakeobjects:{anchor:'BaÄlantı',flash:'Flash Animasyonu',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Bilinmeyen Nesne'},resize:'Boyutlandırmak için sürükle',colordialog:{title:'Renk seç',options:'Renk Seçenekleri',highlight:'Ä°Åaretle',selected:'SeçilmiÅ',clear:'Temizle'},toolbarCollapse:"Toolbar'ı topla",toolbarExpand:"Toolbar'ı aç",toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Belge Ãzellikleri',title:'Belge Ãzellikleri',design:'Design',meta:'Tanım Bilgisi (Meta)',chooseColor:'Seçiniz',other:'<diÄer>',docTitle:'Sayfa BaÅlıÄı',charset:'Karakter Kümesi Kodlaması',charsetOther:'DiÄer Karakter Kümesi Kodlaması',charsetASCII:'ASCII',charsetCE:'Orta Avrupa',charsetCT:'Geleneksel Ãince (Big5)',charsetCR:'Kiril',charsetGR:'Yunanca',charsetJP:'Japonca',charsetKR:'Korece',charsetTR:'Türkçe',charsetUN:'Unicode (UTF-8)',charsetWE:'Batı Avrupa',docType:'Belge Türü BaÅlıÄı',docTypeOther:'DiÄer Belge Türü BaÅlıÄı',xhtmlDec:'XHTML Bildirimlerini Dahil Et',bgColor:'Arka Plan Rengi',bgImage:'Arka Plan Resim URLsi',bgFixed:'Sabit Arka Plan',txtColor:'Yazı Rengi',margin:'Kenar BoÅlukları',marginTop:'Tepe',marginLeft:'Sol',marginRight:'SaÄ',marginBottom:'Alt',metaKeywords:'Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmıÅ)',metaDescription:'Belge Tanımı',metaAuthor:'Yazar',metaCopyright:'Telif',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/uk.js b/lang/uk.js new file mode 100644 index 0000000..72e49a6 --- /dev/null +++ b/lang/uk.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.uk={dir:'ltr',editorTitle:'ТекÑÑовий ÑедакÑоÑ, %1, наÑиÑнÑÑÑ ALT 0 Ð´Ð»Ñ Ð´Ð¾Ð²Ñдки.',toolbars:'Editor toolbars',editor:'ТекÑÑовий ÑедакÑоÑ',source:'ÐжеÑело',newPage:'Ðова ÑÑоÑÑнка',save:'ÐбеÑегÑи',preview:'ÐопеÑеднÑй пеÑеглÑд',cut:'ÐиÑÑзаÑи',copy:'ÐопÑÑваÑи',paste:'ÐÑÑавиÑи',print:'ÐÑÑк',underline:'ÐÑдкÑеÑлений',bold:'ÐиÑний',italic:'ÐÑÑÑив',selectAll:'ÐидÑлиÑи вÑе',removeFormat:'ÐÑиÑÑиÑи ÑоÑмаÑÑваннÑ',strike:'ÐакÑеÑлений',subscript:'ÐижнÑй ÑндекÑ',superscript:'ÐеÑÑ Ð½Ñй ÑндекÑ',horizontalrule:'ÐоÑизонÑалÑна лÑнÑÑ',pagebreak:'ÐÑÑавиÑи ÑозÑив ÑÑоÑÑнки',pagebreakAlt:'Page Break',unlink:'ÐидалиÑи поÑиланнÑ',undo:'ÐовеÑнÑÑи',redo:'ÐовÑоÑиÑи',common:{browseServer:'ÐглÑд',url:'URL',protocol:'ÐÑоÑокол',upload:'ÐадÑÑлаÑи',uploadSubmit:'ÐадÑÑлаÑи на ÑеÑвеÑ',image:'ÐобÑаженнÑ',flash:'Flash',form:'ФоÑма',checkbox:'ÐалоÑка',radio:'Ðнопка вибоÑÑ',textField:'ТекÑÑове поле',textarea:'ТекÑÑова облаÑÑÑ',hiddenField:'ÐÑÐ¸Ñ Ð¾Ð²Ð°Ð½Ðµ поле',button:'Ðнопка',select:'СпиÑок',imageButton:'Ðнопка Ñз зобÑаженнÑм',notSet:'<не визнаÑено>',id:'ÐденÑиÑÑкаÑоÑ',name:"Ðм'Ñ",langDir:'ÐапÑÑмок мови',langDirLtr:'ÐлÑва напÑаво (LTR)',langDirRtl:'СпÑава налÑво (RTL)',langCode:'Ðод мови',longDescr:'Ðовгий Ð¾Ð¿Ð¸Ñ URL',cssClass:'ÐÐ»Ð°Ñ CSS',advisoryTitle:'Ðаголовок',cssStyle:'СÑÐ¸Ð»Ñ CSS',ok:'ÐÐ',cancel:'СкаÑÑваÑи',close:'ÐакÑиÑи',preview:'ÐопеÑеднÑй пеÑеглÑд',generalTab:'ÐÑновне',advancedTab:'ÐодаÑкове',validateNumberFailed:'ÐнаÑÐµÐ½Ð½Ñ Ð½Ðµ Ñ ÑÑлим ÑиÑлом.',confirmNewPage:'ÐÑÑ Ð½ÐµÐ·Ð±ÐµÑÐµÐ¶ÐµÐ½Ñ Ð·Ð¼Ñни бÑдÑÑÑ Ð²ÑÑаÑенÑ. Ðи впевненÑ, Ñо Ñ Ð¾ÑеÑе заванÑажиÑи Ð½Ð¾Ð²Ñ ÑÑоÑÑнкÑ?',confirmCancel:'ÐеÑÐºÑ Ð¾Ð¿ÑÑÑ Ð·Ð¼Ñнено. ÐакÑиÑи вÑкно без збеÑÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð¼Ñн?',options:'ÐпÑÑÑ',target:'ЦÑлÑ',targetNew:'Ðове вÑкно (_blank)',targetTop:'ÐоÑоÑне вÑкно (_top)',targetSelf:'ÐоÑоÑний ÑÑейм/вÑкно (_self)',targetParent:'ÐаÑÑкÑвÑÑкий ÑÑейм/вÑкно (_parent)',langDirLTR:'ÐлÑва напÑаво (LTR)',langDirRTL:'СпÑава налÑво (RTL)',styles:'СÑÐ¸Ð»Ñ CSS',cssClasses:'ÐÐ»Ð°Ñ CSS',width:'ШиÑина',height:'ÐиÑоÑа',align:'ÐиÑÑвнÑваннÑ',alignLeft:'Ðо лÑÐ²Ð¾Ð¼Ñ ÐºÑаÑ',alignRight:'Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ',alignCenter:'Ðо ÑенÑÑÑ',alignTop:'Ðо веÑÑ Ð½ÑÐ¾Ð¼Ñ ÐºÑаÑ',alignMiddle:'Ðо ÑеÑединÑ',alignBottom:'Ðо нижнÑÐ¾Ð¼Ñ ÐºÑаÑ',invalidHeight:'ÐиÑоÑа повинна бÑÑи ÑÑлим ÑиÑлом.',invalidWidth:'ШиÑина повинна бÑÑи ÑÑлим ÑиÑлом.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, не доÑÑÑпне</span>'},contextmenu:{options:'ÐпÑÑÑ ÐºÐ¾Ð½ÑекÑÑного менÑ'},specialChar:{toolbar:'СпеÑÑалÑний Ñимвол',title:'ÐбеÑÑÑÑ ÑпеÑÑалÑний Ñимвол',options:'ÐпÑÑÑ'},link:{toolbar:'ÐÑÑавиÑи/РедагÑваÑи поÑиланнÑ',other:'<ÑнÑий>',menu:'ÐÑÑавиÑи поÑиланнÑ',title:'ÐоÑиланнÑ',info:'ÐнÑоÑмаÑÑÑ Ð¿Ð¾ÑиланнÑ',target:'ЦÑлÑ',upload:'ÐадÑÑлаÑи',advanced:'ÐодаÑкове',type:'Тип поÑиланнÑ',toUrl:'URL',toAnchor:'ЯкÑÑ Ð½Ð° ÑÑ ÑÑоÑÑнкÑ',toEmail:'Ðл. поÑÑа',targetFrame:'<ÑÑейм>',targetPopup:'<випливаÑÑе вÑкно>',targetFrameName:"Ðм'Ñ ÑÑлÑового ÑÑеймÑ",targetPopupName:"Ðм'Ñ Ð²Ð¸Ð¿Ð»Ð¸Ð²Ð°ÑÑого вÑкна",popupFeatures:'ÐлаÑÑивоÑÑÑ Ð²Ð¸Ð¿Ð»Ð¸Ð²Ð°ÑÑого вÑкна',popupResizable:'ÐаÑÑÑабоване',popupStatusBar:'Ð Ñдок ÑÑаÑÑÑÑ',popupLocationBar:'ÐÐ°Ð½ÐµÐ»Ñ Ð»Ð¾ÐºÐ°ÑÑÑ',popupToolbar:'ÐÐ°Ð½ÐµÐ»Ñ ÑнÑÑÑÑменÑÑв',popupMenuBar:'ÐÐ°Ð½ÐµÐ»Ñ Ð¼ÐµÐ½Ñ',popupFullScreen:'Ðовний екÑан (IE)',popupScrollBars:'СÑÑÑÑки пÑокÑÑÑки',popupDependent:'Ðалежний (Netscape)',popupLeft:'ÐозиÑÑÑ Ð·Ð»Ñва',popupTop:'ÐозиÑÑÑ Ð·Ð²ÐµÑÑ Ñ',id:'ÐденÑиÑÑкаÑоÑ',langDir:'ÐапÑÑмок мови',langDirLTR:'ÐлÑва напÑаво (LTR)',langDirRTL:'СпÑава налÑво (RTL)',acccessKey:'ÐаÑÑÑа клавÑÑа',name:"Ðм'Ñ",langCode:'Ðод мови',tabIndex:'ÐоÑлÑдовнÑÑÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´Ñ',advisoryTitle:'Ðаголовок',advisoryContentType:'Тип вмÑÑÑÑ',cssClasses:'ÐÐ»Ð°Ñ CSS',charset:'ÐодÑваннÑ',styles:'СÑÐ¸Ð»Ñ CSS',rel:'Relationship',selectAnchor:'ÐбеÑÑÑÑ ÑкÑÑ',anchorName:"Ðа Ñм'Ñм елеменÑÑ",anchorId:'Ðа ÑденÑиÑÑкаÑоÑом елеменÑÑ',emailAddress:'ÐдÑеÑа ел. поÑÑи',emailSubject:'Тема лиÑÑа',emailBody:'ТÑло повÑдомленнÑ',noAnchors:'(Ð ÑÑÐ¾Ð¼Ñ Ð´Ð¾ÐºÑменÑÑ Ð½ÐµÐ¼Ð°Ñ ÑкоÑÑв)',noUrl:'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ URL поÑиланнÑ',noEmail:'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ Ð°Ð´ÑÐµÑ ÐµÐ». поÑÑи'},anchor:{toolbar:'ÐÑÑавиÑи/РедагÑваÑи ÑкÑÑ',menu:'ÐлаÑÑивоÑÑÑ ÑкоÑÑ',title:'ÐлаÑÑивоÑÑÑ ÑкоÑÑ',name:"Ðм'Ñ ÑкоÑÑ",errorName:"ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ Ñм'Ñ ÑкоÑÑ",remove:'Remove Anchor'},list:{numberedTitle:'ÐпÑÑÑ Ð½ÑмеÑованого ÑпиÑкÑ',bulletedTitle:'ÐпÑÑÑ Ð¼Ð°ÑкÑÑованого ÑпиÑкÑ',type:'Тип',start:'ÐоÑаÑи з...',validateStartNumber:'ÐоÑаÑковий Ð½Ð¾Ð¼ÐµÑ ÑпиÑÐºÑ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ бÑÑи ÑÑлим ÑиÑлом.',circle:'ÐÑлÑÑе',disc:'ÐÑÑжеÑок',square:'ÐвадÑаÑик',none:'Ðема',notset:'<не вказано>',armenian:'ÐÑÑменÑÑка нÑмеÑаÑÑÑ',georgian:'ÐÑÑзинÑÑка нÑмеÑаÑÑÑ (an, ban, gan Ñ Ñ.д.)',lowerRoman:'ÐÐ°Ð»Ñ ÑимÑÑÐºÑ (i, ii, iii, iv, v Ñ Ñ.д.)',upperRoman:'ÐÐµÐ»Ð¸ÐºÑ ÑимÑÑÐºÑ (I, II, III, IV, V Ñ Ñ.д.)',lowerAlpha:'ÐÐ°Ð»Ñ Ð»Ð°Ñ. бÑкви (a, b, c, d, e Ñ Ñ.д.)',upperAlpha:'ÐÐµÐ»Ð¸ÐºÑ Ð»Ð°Ñ. бÑкви (A, B, C, D, E Ñ Ñ.д.)',lowerGreek:'ÐÐ°Ð»Ñ Ð³Ñ. бÑкви (алÑÑа, беÑа, гамма Ñ Ñ.д.)',decimal:'ÐеÑÑÑÐºÐ¾Ð²Ñ (1, 2, 3 Ñ Ñ.д.)',decimalLeadingZero:'ÐеÑÑÑÐºÐ¾Ð²Ñ Ð· нÑлем (01, 02, 03 Ñ Ñ.д.)'},findAndReplace:{title:'ÐнайÑи Ñ Ð·Ð°Ð¼ÑниÑи',find:'ÐоÑÑк',replace:'ÐамÑна',findWhat:'ШÑкаÑи:',replaceWith:'ÐамÑниÑи на:',notFoundMsg:'Ðказаний ÑекÑÑ Ð½Ðµ знайдено.',matchCase:'ÐÑÐ°Ñ Ð¾Ð²ÑваÑи ÑегÑÑÑÑ',matchWord:'ÐбÑг ÑÑÐ»Ð¸Ñ ÑлÑв',matchCyclic:'ЦиклÑÑна замÑна',replaceAll:'ÐамÑниÑи вÑе',replaceSuccessMsg:'%1 ÑпÑвпадÑнÑ(нÑ) замÑнено.'},table:{toolbar:'ТаблиÑÑ',title:'ÐлаÑÑивоÑÑÑ ÑаблиÑÑ',menu:'ÐлаÑÑивоÑÑÑ ÑаблиÑÑ',deleteTable:'ÐидалиÑи ÑаблиÑÑ',rows:'Ð Ñдки',columns:'СÑовбÑÑ',border:'РозмÑÑ Ñамки',widthPx:'пÑкÑелÑв',widthPc:'вÑдÑоÑкÑв',widthUnit:'ÐдиниÑÑ Ð²Ð¸Ð¼ÑÑ.',cellSpace:'ÐÑомÑжок',cellPad:'ÐнÑÑÑ. вÑдÑÑÑп',caption:'Ðаголовок ÑаблиÑÑ',summary:'ÐеÑалÑний Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ ÑаблиÑÑ',headers:'Ðаголовки ÑÑовбÑÑв/ÑÑдкÑв',headersNone:'Ðез заголовкÑв',headersColumn:'СÑовбÑÑ',headersRow:'Ð Ñдки',headersBoth:'СÑовбÑÑ Ñ ÑÑдки',invalidRows:'ÐÑлÑкÑÑÑÑ ÑÑдкÑв повинна бÑÑи бÑлÑÑÐ¾Ñ 0.',invalidCols:'ÐÑлÑкÑÑÑÑ ÑÑовбÑÑв повинна бÑÑи бÑлÑÑÐ¾Ñ 0.',invalidBorder:'РозмÑÑ Ñамки повинен бÑÑи ÑÑлим ÑиÑлом.',invalidWidth:'ШиÑина ÑаблиÑÑ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð° бÑÑи ÑÑлим ÑиÑлом.',invalidHeight:'ÐиÑоÑа ÑаблиÑÑ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð° бÑÑи ÑÑлим ÑиÑлом.',invalidCellSpacing:'ÐÑомÑжок мÑж комÑÑками повинен бÑÑи ÑÑлим ÑиÑлом.',invalidCellPadding:'ÐнÑÑÑ. вÑдÑÑÑп комÑÑки повинен бÑÑи ÑÑлим ÑиÑлом.',cell:{menu:'ÐомÑÑки',insertBefore:'ÐÑÑавиÑи комÑÑÐºÑ Ð¿ÐµÑед',insertAfter:'ÐÑÑавиÑи комÑÑÐºÑ Ð¿ÑÑлÑ',deleteCell:'ÐидалиÑи комÑÑки',merge:"Ðб'ÑднаÑи комÑÑки",mergeRight:"Ðб'ÑднаÑи ÑпÑава",mergeDown:"Ðб'ÑднаÑи донизÑ",splitHorizontal:'РоздÑлиÑи комÑÑÐºÑ Ð¿Ð¾ гоÑизонÑалÑ',splitVertical:'РоздÑлиÑи комÑÑÐºÑ Ð¿Ð¾ веÑÑикалÑ',title:'ÐлаÑÑивоÑÑÑ ÐºÐ¾Ð¼ÑÑки',cellType:'Тип комÑÑки',rowSpan:"Ðб'ÑÐ´Ð½Ð°Ð½Ð½Ñ ÑÑдкÑв",colSpan:"Ðб'ÑÐ´Ð½Ð°Ð½Ð½Ñ ÑÑовпÑÑв",wordWrap:'ÐвÑопеÑенеÑÐµÐ½Ð½Ñ ÑекÑÑÑ',hAlign:'ÐоÑиз. виÑÑвнÑваннÑ',vAlign:'ÐеÑÑ. виÑÑвнÑваннÑ',alignBaseline:'Ðо базовÑй лÑнÑÑ',bgColor:'ÐолÑÑ ÑонÑ',borderColor:'ÐолÑÑ Ñамки',data:'ÐанÑ',header:'Ðаголовок',yes:'Так',no:'ÐÑ',invalidWidth:'ШиÑина комÑÑки повинна бÑÑи ÑÑлим ÑиÑлом.',invalidHeight:'ÐиÑоÑа комÑÑки повинна бÑÑи ÑÑлим ÑиÑлом.',invalidRowSpan:"ÐÑлÑкÑÑÑÑ Ð¾Ð±'ÑднÑÐ²Ð°Ð½Ð¸Ñ ÑÑдкÑв повинна бÑÑи ÑÑлим ÑиÑлом.",invalidColSpan:"ÐÑлÑкÑÑÑÑ Ð¾Ð±'ÑднÑÐ²Ð°Ð½Ð¸Ñ ÑÑовбÑÑв повинна бÑÑи ÑÑлим ÑиÑлом.",chooseColor:'ÐбÑаÑи'},row:{menu:'Ð Ñдки',insertBefore:'ÐÑÑавиÑи ÑÑдок пеÑед',insertAfter:'ÐÑÑавиÑи ÑÑдок пÑÑлÑ',deleteRow:'ÐидалиÑи ÑÑдки'},column:{menu:'СÑовбÑÑ',insertBefore:'ÐÑÑавиÑи ÑÑовбеÑÑ Ð¿ÐµÑед',insertAfter:'ÐÑÑавиÑи ÑÑовбеÑÑ Ð¿ÑÑлÑ',deleteColumn:'ÐидалиÑи ÑÑовбÑÑ'}},button:{title:'ÐлаÑÑивоÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸',text:'ÐнаÑеннÑ',type:'Тип',typeBtn:'Ðнопка (button)',typeSbm:'ÐадÑÑлаÑи (submit)',typeRst:'ÐÑиÑÑиÑи (reset)'},checkboxAndRadio:{checkboxTitle:'ÐлаÑÑивоÑÑÑ Ð³Ð°Ð»Ð¾Ñки',radioTitle:'ÐлаÑÑивоÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ вибоÑÑ',value:'ÐнаÑеннÑ',selected:'ÐбÑана'},form:{title:'ÐлаÑÑивоÑÑÑ ÑоÑми',menu:'ÐлаÑÑивоÑÑÑ ÑоÑми',action:'ÐÑÑ',method:'ÐеÑод',encoding:'ÐодÑваннÑ'},select:{title:'ÐлаÑÑивоÑÑÑ ÑпиÑкÑ',selectInfo:'ÐнÑо',opAvail:'ÐоÑÑÑÐ¿Ð½Ñ Ð²Ð°ÑÑанÑи',value:'ÐнаÑеннÑ',size:'ÐÑлÑкÑÑÑÑ',lines:'Ð²Ð¸Ð´Ð¸Ð¼Ð¸Ñ Ð¿Ð¾Ð·Ð¸ÑÑй Ñ ÑпиÑкÑ',chkMulti:'СпиÑок з мÑлÑÑивибоÑом',opText:'ТекÑÑ',opValue:'ÐнаÑеннÑ',btnAdd:'ÐобавиÑи',btnModify:'ÐмÑниÑи',btnUp:'ÐгоÑÑ',btnDown:'Ðниз',btnSetValue:'ÐÑÑановиÑи Ñк обÑане знаÑеннÑ',btnDelete:'ÐидалиÑи'},textarea:{title:'ÐлаÑÑивоÑÑÑ ÑекÑÑÐ¾Ð²Ð¾Ñ Ð¾Ð±Ð»Ð°ÑÑÑ',cols:'СÑовбÑÑ',rows:'Ð Ñдки'},textfield:{title:'ÐлаÑÑивоÑÑÑ ÑекÑÑового полÑ',name:"Ðм'Ñ",value:'ÐнаÑеннÑ',charWidth:'ШиÑина',maxChars:'ÐакÑ. к-ÑÑ ÑимволÑв',type:'Тип',typeText:'ТекÑÑ',typePass:'ÐаÑолÑ'},hidden:{title:'ÐлаÑÑивоÑÑÑ Ð¿ÑÐ¸Ñ Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ полÑ',name:"Ðм'Ñ",value:'ÐнаÑеннÑ'},image:{title:'ÐлаÑÑивоÑÑÑ Ð·Ð¾Ð±ÑаженнÑ',titleButton:'ÐлаÑÑивоÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ Ñз зобÑаженнÑм',menu:'ÐлаÑÑивоÑÑÑ Ð·Ð¾Ð±ÑаженнÑ',infoTab:'ÐнÑоÑмаÑÑÑ Ð¿Ñо зобÑаженнÑ',btnUpload:'ÐадÑÑлаÑи на ÑеÑвеÑ',upload:'ÐадÑÑлаÑи',alt:'ÐлÑÑеÑнаÑивний ÑекÑÑ',lockRatio:'ÐбеÑегÑи пÑопоÑÑÑÑ',resetSize:'ÐÑиÑÑиÑи Ð¿Ð¾Ð»Ñ ÑозмÑÑÑв',border:'Рамка',hSpace:'ÐоÑиз. вÑдÑÑÑп',vSpace:'ÐеÑÑ. вÑдÑÑÑп',alertUrl:'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ URL зобÑаженнÑ',linkTab:'ÐоÑиланнÑ',button2Img:'ÐажаÑÑе пеÑеÑвоÑиÑи обÑÐ°Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÑ-зобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° пÑоÑÑе зобÑаженнÑ?',img2Button:'ÐажаÑÑе пеÑеÑвоÑиÑи обÑане зобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° кнопкÑ-зобÑаженнÑ?',urlMissing:'ÐкажÑÑÑ URL зобÑаженнÑ.',validateBorder:'ШиÑина Ñамки повинна бÑÑи ÑÑлим ÑиÑлом.',validateHSpace:'ÐоÑиз. вÑдÑÑÑп повинен бÑÑи ÑÑлим ÑиÑлом.',validateVSpace:'ÐеÑÑ. вÑдÑÑÑп повинен бÑÑи ÑÑлим ÑиÑлом.'},flash:{properties:'ÐлаÑÑивоÑÑÑ Flash',propertiesTab:'ÐлаÑÑивоÑÑÑ',title:'ÐлаÑÑивоÑÑÑ Flash',chkPlay:'ÐвÑопÑогÑаваннÑ',chkLoop:'ЦиклÑÑно',chkMenu:'ÐозволиÑи Ð¼ÐµÐ½Ñ Flash',chkFull:'ÐозволиÑи повноекÑанний пеÑеглÑд',scale:'ÐаÑÑÑаб',scaleAll:'ÐоказаÑи вÑе',scaleNoBorder:'Ðез Ñамки',scaleFit:'ÐоÑ. ÑозмÑÑ',access:'ÐоÑÑÑп до ÑкÑипÑа',accessAlways:'Ðавжди',accessSameDomain:'Ð Ñого ж домена',accessNever:'ÐÑколи',alignAbsBottom:'Ðо нижнÑÐ¾Ð¼Ñ ÐºÑÐ°Ñ (abs)',alignAbsMiddle:'Ðо ÑеÑÐµÐ´Ð¸Ð½Ñ (abs)',alignBaseline:'Ðо базовÑй лÑнÑÑ',alignTextTop:'ТекÑÑ Ð¿Ð¾ веÑÑ Ð½ÑÐ¾Ð¼Ñ ÐºÑаÑ',quality:'ЯкÑÑÑÑ',qualityBest:'ÐÑдмÑнна',qualityHigh:'ÐиÑока',qualityAutoHigh:'ÐвÑом. вÑдмÑнна',qualityMedium:'СеÑеднÑ',qualityAutoLow:'ÐвÑом. низÑка',qualityLow:'ÐизÑка',windowModeWindow:'ÐÑкно',windowModeOpaque:'ÐепÑозоÑÑÑÑÑ',windowModeTransparent:'ÐÑозоÑÑÑÑÑ',windowMode:'ÐÑконний Ñежим',flashvars:'ÐмÑÐ½Ð½Ñ Flash',bgcolor:'ÐолÑÑ ÑонÑ',hSpace:'ÐоÑиз. вÑдÑÑÑп',vSpace:'ÐеÑÑ. вÑдÑÑÑп',validateSrc:'ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ URL поÑиланнÑ',validateHSpace:'ÐоÑиз. вÑдÑÑÑп повинен бÑÑи ÑÑлим ÑиÑлом.',validateVSpace:'ÐеÑÑ. вÑдÑÑÑп повинен бÑÑи ÑÑлим ÑиÑлом.'},spellCheck:{toolbar:'ÐеÑевÑÑиÑи оÑÑогÑаÑÑÑ',title:'ÐеÑевÑÑка оÑÑогÑаÑÑÑ',notAvailable:'ÐибаÑÑе, але ÑеÑвÑÑ Ð½Ð°ÑÐ°Ð·Ñ Ð½ÐµÐ´Ð¾ÑÑÑпний.',errorLoading:'Ðомилка заванÑÐ°Ð¶ÐµÐ½Ð½Ñ : %s.',notInDic:'ÐÐµÐ¼Ð°Ñ Ð² ÑловникÑ',changeTo:'ÐамÑниÑи на',btnIgnore:'ÐÑопÑÑÑиÑи',btnIgnoreAll:'ÐÑопÑÑÑиÑи вÑе',btnReplace:'ÐамÑниÑи',btnReplaceAll:'ÐамÑниÑи вÑе',btnUndo:'Ðазад',noSuggestions:'- Ð½ÐµÐ¼Ð°Ñ Ð²Ð°ÑÑанÑÑв -',progress:'ÐиконÑÑÑÑÑÑ Ð¿ÐµÑевÑÑка оÑÑогÑаÑÑÑ...',noMispell:'ÐеÑевÑÑÐºÑ Ð¾ÑÑогÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑено: помилок не знайдено',noChanges:'ÐеÑевÑÑÐºÑ Ð¾ÑÑогÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑено: жодне Ñлово не змÑнено',oneChange:'ÐеÑевÑÑÐºÑ Ð¾ÑÑогÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑено: змÑнено одне Ñлово',manyChanges:'ÐеÑевÑÑÐºÑ Ð¾ÑÑогÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑено: 1% ÑлÑв(ова) змÑнено',ieSpellDownload:'ÐодÑÐ»Ñ Ð¿ÐµÑевÑÑки оÑÑогÑаÑÑÑ Ð½Ðµ вÑÑановлено. ÐажаÑÑе заванÑажиÑи його заÑаз?'},smiley:{toolbar:'Смайлик',title:'ÐÑÑавиÑи Ñмайлик',options:'ÐпÑÑÑ ÑмайликÑв'},elementsPath:{eleLabel:'ШлÑÑ ',eleTitle:'%1 елеменÑ'},numberedlist:'ÐÑмеÑований ÑпиÑок',bulletedlist:'ÐаÑкÑÑований ÑпиÑок',indent:'ÐбÑлÑÑиÑи вÑдÑÑÑп',outdent:'ÐменÑиÑи вÑдÑÑÑп',justify:{left:'Ðо лÑÐ²Ð¾Ð¼Ñ ÐºÑаÑ',center:'Ðо ÑенÑÑÑ',right:'Ðо пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÑаÑ',block:'Ðо ÑиÑинÑ'},blockquote:'ЦиÑаÑа',clipboard:{title:'ÐÑÑавиÑи',cutError:'ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ ÐаÑого бÑаÑзеÑа не дозволÑÑÑÑ ÑедакÑоÑÑ Ð°Ð²ÑомаÑиÑно виконÑваÑи опеÑаÑÑÑ Ð²Ð¸ÑÑзÑваннÑ. ÐÑÐ´Ñ Ð»Ð°Ñка, викоÑиÑÑовÑйÑе клавÑаÑÑÑÑ Ð´Ð»Ñ ÑÑого (Ctrl/Cmd+X)',copyError:'ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ ÐаÑого бÑаÑзеÑа не дозволÑÑÑÑ ÑедакÑоÑÑ Ð°Ð²ÑомаÑиÑно виконÑваÑи опеÑаÑÑÑ ÐºÐ¾Ð¿ÑÑваннÑ. ÐÑÐ´Ñ Ð»Ð°Ñка, викоÑиÑÑовÑйÑе клавÑаÑÑÑÑ Ð´Ð»Ñ ÑÑого (Ctrl/Cmd+C).',pasteMsg:'ÐÑÐ´Ñ Ð»Ð°Ñка, вÑÑавÑе ÑнÑоÑмаÑÑÑ Ð· бÑÑеÑа обмÑÐ½Ñ Ð² ÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ, коÑиÑÑÑÑÑиÑÑ ÐºÐ¾Ð¼Ð±ÑнаÑÑÑÑ ÐºÐ»Ð°Ð²ÑÑ (<STRONG>Ctrl/Cmd+V</STRONG>), Ñа наÑиÑнÑÑÑ <STRONG>OK</STRONG>.',securityMsg:"РедакÑÐ¾Ñ Ð½Ðµ може оÑÑимаÑи пÑÑмий доÑÑÑп до бÑÑеÑÑ Ð¾Ð±Ð¼ÑÐ½Ñ Ñ Ð·Ð²'ÑÐ·ÐºÑ Ð· налаÑÑÑваннÑми ÐаÑого бÑаÑзеÑа. Ðам поÑÑÑбно вÑÑавиÑи ÑнÑоÑмаÑÑÑ Ð² Ñе вÑкно.",pasteArea:'ÐблаÑÑÑ Ð²ÑÑавки'},pastefromword:{confirmCleanup:'ТекÑÑ, Ñо Ðи намагаÑÑеÑÑ Ð²ÑÑавиÑи, ÑÑ Ð¾Ð¶Ð¸Ð¹ на ÑкопÑйований з Word. ÐажаÑÑе оÑиÑÑиÑи його ÑоÑмаÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑед вÑÑавлÑннÑм?',toolbar:'ÐÑÑавиÑи з Word',title:'ÐÑÑавиÑи з Word',error:'Ðеможливо оÑиÑÑиÑи ÑоÑмаÑÑÐ²Ð°Ð½Ð½Ñ ÑеÑез внÑÑÑÑÑÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ.'},pasteText:{button:'ÐÑÑавиÑи ÑÑлÑки ÑекÑÑ',title:'ÐÑÑавиÑи ÑÑлÑки ÑекÑÑ'},templates:{button:'Шаблони',title:'Шаблони змÑÑÑÑ',options:'ÐпÑÑÑ ÑаблонÑ',insertOption:'ÐамÑниÑи поÑоÑний вмÑÑÑ',selectPromptMsg:'ÐбеÑÑÑÑ, бÑÐ´Ñ Ð»Ð°Ñка, Ñаблон Ð´Ð»Ñ Ð²ÑдкÑиÑÑÑ Ð² ÑедакÑоÑÑ<br>(поÑоÑний змÑÑÑ Ð±Ñде вÑÑаÑено):',emptyListMsg:'(Ðе знайдено жодного ÑаблонÑ)'},showBlocks:'ÐоказÑваÑи блоки',stylesCombo:{label:'СÑилÑ',panelTitle:'СÑÐ¸Ð»Ñ ÑоÑмаÑÑваннÑ',panelTitle1:'ÐлоÑÐ½Ñ ÑÑилÑ',panelTitle2:'Ð ÑÐ´ÐºÐ¾Ð²Ñ ÑÑилÑ',panelTitle3:"Ðб'ÑкÑÐ½Ñ ÑÑилÑ"},format:{label:'ФоÑмаÑÑваннÑ',panelTitle:'ФоÑмаÑÑваннÑ',tag_p:'ÐоÑмалÑний',tag_pre:'ФоÑмаÑований',tag_address:'ÐдÑеÑа',tag_h1:'Ðаголовок 1',tag_h2:'Ðаголовок 2',tag_h3:'Ðаголовок 3',tag_h4:'Ðаголовок 4',tag_h5:'Ðаголовок 5',tag_h6:'Ðаголовок 6',tag_div:'ÐоÑмалÑний (div)'},div:{title:'СÑвоÑиÑи блок-конÑейнеÑ',toolbar:'СÑвоÑиÑи блок-конÑейнеÑ',cssClassInputLabel:'ÐÐ»Ð°Ñ CSS',styleSelectLabel:'СÑÐ¸Ð»Ñ CSS',IdInputLabel:'ÐденÑиÑÑкаÑоÑ',languageCodeInputLabel:'Ðод мови',inlineStyleInputLabel:'ÐпиÑаний ÑÑилÑ',advisoryTitleInputLabel:'ÐмÑÑÑ Ð²Ð¸Ð¿Ð»Ð¸Ð²Ð°ÑÑÐ¾Ñ Ð¿Ñдказки',langDirLabel:'ÐапÑÑмок мови',langDirLTRLabel:'ÐлÑва напÑаво (LTR)',langDirRTLLabel:'СпÑава налÑво (RTL)',edit:'РедагÑваÑи блок',remove:'ÐидалиÑи блок'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ШÑиÑÑ',voiceLabel:'ШÑиÑÑ',panelTitle:'ШÑиÑÑ'},fontSize:{label:'РозмÑÑ',voiceLabel:'РозмÑÑ ÑÑиÑÑÑ',panelTitle:'РозмÑÑ'},colorButton:{textColorTitle:'ÐолÑÑ ÑекÑÑÑ',bgColorTitle:'ÐолÑÑ ÑонÑ',panelTitle:'ÐолÑоÑи',auto:'ÐвÑо',more:'ÐолÑоÑи...'},colors:{'000':'ЧоÑний',800000:'ÐоÑдовий','8B4513':'ÐоÑиÑневий','2F4F4F':'Темний ÑÑÑо-зелений','008080':'ÐоÑÑÑÐºÐ¾Ñ Ñ Ð²Ð¸Ð»Ñ','000080':'Сливовий','4B0082':'Ðндиго',696969:'ТемноÑÑÑий',B22222:'ТемноÑеÑвоний',A52A2A:'ÐаÑÑановий',DAA520:'Ðежевий','006400':'Темнозелений','40E0D0':'ÐÑÑÑзовий','0000CD':'ТемноÑинÑй',800080:'ÐÑÑпÑÑний',808080:'СÑÑий',F00:'ЧеÑвоний',FF8C00:'ТемнооÑанжевий',FFD700:'ÐовÑий','008000':'Ðелений','0FF':'СинÑо-зелений','00F':'СинÑй',EE82EE:'ФÑолеÑовий',A9A9A9:'СвÑÑлоÑÑÑий',FFA07A:'Рожевий',FFA500:'ÐÑанжевий',FFFF00:'ЯÑкÑавожовÑий','00FF00':'СалаÑовий',AFEEEE:'СвÑÑлобÑÑÑзовий',ADD8E6:'ÐлакиÑний',DDA0DD:'СвÑÑлоÑÑолеÑовий',D3D3D3:'СÑÑблÑÑÑий',FFF0F5:'СвÑÑлоÑожевий',FAEBD7:'СвÑÑлооÑанжевий',FFFFE0:'СвÑÑложовÑий',F0FFF0:'СвÑÑлозелений',F0FFFF:'СвÑÑлий ÑинÑо-зелений',F0F8FF:'СвÑÑлоблакиÑний',E6E6FA:'Ðавандовий',FFF:'ÐÑлий'},scayt:{title:'ÐеÑеÑÑÑка оÑÑогÑаÑÑÑ Ð¿Ð¾ мÑÑÑ Ð½Ð°Ð±Ð¾ÑÑ',opera_title:'Ðе пÑдÑÑимÑÑÑÑÑÑ Ð² Opera',enable:'ÐвÑмкнÑÑи SCAYT',disable:'ÐимкнÑÑи SCAYT',about:'ÐÑо SCAYT',toggle:'ÐеÑемкнÑÑи SCAYT',options:'ÐпÑÑÑ',langs:'Ðови',moreSuggestions:'ÐÑлÑÑе ваÑÑанÑÑв',ignore:'ÐÑопÑÑÑиÑи',ignoreAll:'ÐÑопÑÑÑиÑи вÑÑ',addWord:'ÐодаÑи Ñлово',emptyDic:'Ðазва Ñловника повинна бÑÑи вказана.',optionsTab:'ÐпÑÑÑ',allCaps:'ÐÑопÑÑÑиÑи пÑопиÑÐ½Ñ Ñлова',ignoreDomainNames:'ÐÑопÑÑÑиÑи Ð´Ð¾Ð¼ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸',mixedCase:'ÐÑопÑÑÑиÑи Ñлова Ð·Ñ Ð·Ð¼ÑÑаним ÑегÑÑÑÑом',mixedWithDigits:'ÐÑопÑÑÑиÑи Ñлова, Ñо мÑÑÑÑÑÑ ÑиÑÑи',languagesTab:'Ðови',dictionariesTab:'Словники',dic_field_name:'Ðазва Ñловника',dic_create:'СÑвоÑиÑи',dic_restore:'ÐÑдновиÑи',dic_delete:'ÐидалиÑи',dic_rename:'ÐеÑейменÑваÑи',dic_info:'Як пÑавило, коÑиÑÑÑваÑÑÐºÑ Ñловники збеÑÑгаÑÑÑÑÑ Ñ cookie-ÑÐ°Ð¹Ð»Ð°Ñ . Ðднак, cookie-Ñайли маÑÑÑ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° ÑозмÑÑ. ЯкÑо коÑиÑÑÑваÑÑкий Ñловник зÑоÑÑÐ°Ñ Ð² обÑÑÐ·Ñ Ð½Ð°ÑÑÑлÑки, Ñо вже не може бÑÑи збеÑежений Ñ cookie-ÑайлÑ, ÑÐ¾Ð´Ñ Ð¹Ð¾Ð³Ð¾ можна збеÑегÑи на наÑÐ¾Ð¼Ñ ÑеÑвеÑÑ. Щоб збеÑегÑи ÐÐ°Ñ Ð¿ÐµÑÑоналÑний Ñловник на наÑÐ¾Ð¼Ñ ÑеÑвеÑÑ Ð½ÐµÐ¾Ð±Ñ Ñдно вказаÑи Ð½Ð°Ð·Ð²Ñ Ñловника. ЯкÑо Ðи вже збеÑÑгали Ñловник на ÑеÑвеÑÑ, бÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ Ð½Ð°Ð·Ð²Ñ Ð·Ð±ÐµÑеженого Ñловника Ñ Ð½Ð°ÑиÑнÑÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ ÐÑдновиÑи.',aboutTab:'ÐÑо SCAYT'},about:{title:'ÐÑо CKEditor',dlgTitle:'ÐÑо CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Щодо ÑнÑоÑмаÑÑÑ Ð· лÑÑензÑÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÑÑайÑе на Ð½Ð°Ñ ÑайÑ:',copy:'Copyright © $1. ÐÑÑ Ð¿Ñава заÑÑеÑежено.'},maximize:'ÐакÑимÑзÑваÑи',minimize:'ÐÑнÑмÑзÑваÑи',fakeobjects:{anchor:'ЯкÑÑ',flash:'Flash-анÑмаÑÑÑ',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:"ÐевÑдомий об'ÑкÑ"},resize:'ÐоÑÑгнÑÑÑ Ð´Ð»Ñ Ð·Ð¼Ñни ÑозмÑÑÑв',colordialog:{title:'ÐбÑаÑи колÑÑ',options:'ÐпÑÑÑ ÐºÐ¾Ð»ÑоÑÑв',highlight:'ÐолÑÑ, на Ñкий вказÑÑ ÐºÑÑÑоÑ',selected:'ÐбÑаний колÑÑ',clear:'ÐÑиÑÑиÑи'},toolbarCollapse:'ÐгоÑнÑÑи Ð¿Ð°Ð½ÐµÐ»Ñ ÑнÑÑÑÑменÑÑв',toolbarExpand:'РозгоÑнÑÑи Ð¿Ð°Ð½ÐµÐ»Ñ ÑнÑÑÑÑменÑÑв',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'ÐапÑÑмок ÑекÑÑÑ Ð·Ð»Ñва напÑаво',rtl:'ÐапÑÑмок ÑекÑÑÑ ÑпÑава налÑво'},docprops:{label:'ÐлаÑÑивоÑÑÑ Ð´Ð¾ÐºÑменÑа',title:'ÐлаÑÑивоÑÑÑ Ð´Ð¾ÐºÑменÑа',design:'Design',meta:'ÐеÑа данÑ',chooseColor:'ÐбÑаÑи',other:'<ÑнÑий>',docTitle:'Ðаголовок ÑÑоÑÑнки',charset:'ÐодÑÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ð¾ÑÑ ÑимволÑв',charsetOther:'ÐнÑе кодÑÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ð¾ÑÑ ÑимволÑв',charsetASCII:'ASCII',charsetCE:'ЦенÑÑалÑно-ÑвÑопейÑÑка',charsetCT:'ÐиÑайÑÑка ÑÑадиÑÑйна (Big5)',charsetCR:'ÐиÑилиÑÑ',charsetGR:'ÐÑеÑÑка',charsetJP:'ЯпонÑÑка',charsetKR:'ÐоÑейÑÑка',charsetTR:'ТÑÑеÑÑка',charsetUN:'ЮнÑкод (UTF-8)',charsetWE:'ÐÐ°Ñ Ñдно-евÑопейÑкаÑ',docType:'Ðаголовок ÑÐ¸Ð¿Ñ Ð´Ð¾ÐºÑменÑÑ',docTypeOther:'ÐнÑий заголовок ÑÐ¸Ð¿Ñ Ð´Ð¾ÐºÑменÑÑ',xhtmlDec:'ÐвÑмкнÑÑи XHTML оголоÑеннÑ',bgColor:'ÐолÑÑ Ñла',bgImage:'URL зобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ñла',bgFixed:'Тло без пÑокÑÑÑки',txtColor:'ÐолÑÑ ÑекÑÑÑ',margin:'ÐÑдÑÑÑпи ÑÑоÑÑнки',marginTop:'ÐеÑÑ Ð½Ñй',marginLeft:'ÐÑвий',marginRight:'ÐÑавий',marginBottom:'ÐижнÑй',metaKeywords:'ÐлÑÑÐ¾Ð²Ñ Ñлова докÑменÑа (ÑоздÑÐ»ÐµÐ½Ñ ÐºÐ¾Ð¼Ð°Ð¼Ð¸)',metaDescription:'ÐÐ¿Ð¸Ñ Ð´Ð¾ÐºÑменÑа',metaAuthor:'ÐвÑоÑ',metaCopyright:'ÐвÑоÑÑÑÐºÑ Ð¿Ñава',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/vi.js b/lang/vi.js new file mode 100644 index 0000000..54c81b3 --- /dev/null +++ b/lang/vi.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.vi={dir:'ltr',editorTitle:'Bá» soạn thảo, %1, nhấn ALT + 0 Äá» xem hÆ°á»ng dẫn.',toolbars:'Editor toolbars',editor:'Bá» soạn thảo',source:'Mã HTML',newPage:'Trang má»i',save:'LÆ°u',preview:'Xem trÆ°á»c',cut:'Cắt',copy:'Sao chép',paste:'Dán',print:'In',underline:'Gạch chân',bold:'Äáºm',italic:'Nghiêng',selectAll:'Chá»n tất cả',removeFormat:'Xoá Äá»nh dạng',strike:'Gạch xuyên ngang',subscript:'Chá» sá» dÆ°á»i',superscript:'Chá» sá» trên',horizontalrule:'Chèn ÄÆ°á»ng phân cách ngang',pagebreak:'Chèn ngắt trang',pagebreakAlt:'Page Break',unlink:'Xoá liên kết',undo:'Khôi phục thao tác',redo:'Là m lại thao tác',common:{browseServer:'Duyá»t trên máy chủ',url:'URL',protocol:'Giao thức',upload:'Tải lên',uploadSubmit:'Tải lên máy chủ',image:'Hình ảnh',flash:'Flash',form:'Biá»u mẫu',checkbox:'Nút kiá»m',radio:'Nút chá»n',textField:'TrÆ°á»ng vÄn bản',textarea:'Vùng vÄn bản',hiddenField:'TrÆ°á»ng ẩn',button:'Nút',select:'à chá»n',imageButton:'Nút hình ảnh',notSet:'<không thiết láºp>',id:'Äá»nh danh',name:'Tên',langDir:'HÆ°á»ng ngôn ngữ',langDirLtr:'Trái sang phải (LTR)',langDirRtl:'Phải sang trái (RTL)',langCode:'Mã ngôn ngữ',longDescr:'Mô tả URL',cssClass:'Lá»p Stylesheet',advisoryTitle:'Nhan Äá» hÆ°á»ng dẫn',cssStyle:'Kiá»u (style)',ok:'Äá»ng ý',cancel:'Bá» qua',close:'Äóng',preview:'Xem trÆ°á»c',generalTab:'Tab chung',advancedTab:'Tab má» rá»ng',validateNumberFailed:'Giá trá» nà y không phải là sá».',confirmNewPage:'Má»i thay Äá»i không Äược lÆ°u lại, ná»i dung nà y sẽ bá» mất. Bạn có chắc chắn muá»n tải má»t trang má»i?',confirmCancel:'Má»t và i tùy chá»n Äã bá» thay Äá»i. Bạn có chắc chắn muá»n Äóng há»p thoại?',options:'Tùy chá»n',target:'ÄÃch Äến',targetNew:'Cá»a sá» má»i (_blank)',targetTop:'Cá»a sá» trên cùng (_top)',targetSelf:'Tại trang (_self)',targetParent:'Cá»a sá» cha (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Chiá»u rá»ng',height:'chiá»u cao',align:'Vá» trÃ',alignLeft:'Trái',alignRight:'Phải',alignCenter:'Giữa',alignTop:'Trên',alignMiddle:'Giữa',alignBottom:'DÆ°á»i',invalidHeight:'Chiá»u cao phải là sá» nguyên.',invalidWidth:'Chiá»u rá»ng phải là sá» nguyên.',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, không có</span>'},contextmenu:{options:'Tùy chá»n menu bá» xung'},specialChar:{toolbar:'Chèn ký tá»± Äặc biá»t',title:'Hãy chá»n ký tá»± Äặc biá»t',options:'Tùy chá»n các ký tá»± Äặc biá»t'},link:{toolbar:'Chèn/Sá»a liên kết',other:'<khác>',menu:'Sá»a liên kết',title:'Liên kết',info:'Thông tin liên kết',target:'ÄÃch',upload:'Tải lên',advanced:'Má» rá»ng',type:'Kiá»u liên kết',toUrl:'URL',toAnchor:'Neo trong trang nà y',toEmail:'ThÆ° Äiá»n tá»',targetFrame:'<khung>',targetPopup:'<cá»a sá» popup>',targetFrameName:'Tên khung ÄÃch',targetPopupName:'Tên cá»a sá» Popup',popupFeatures:'Äặc Äiá»m của cá»a sá» Popup',popupResizable:'Có thá» thay Äá»i kÃch cỡ',popupStatusBar:'Thanh trạng thái',popupLocationBar:'Thanh vá» trÃ',popupToolbar:'Thanh công cụ',popupMenuBar:'Thanh Menu',popupFullScreen:'Toà n mà n hình (IE)',popupScrollBars:'Thanh cuá»n',popupDependent:'Phụ thuá»c (Netscape)',popupLeft:'Vá» trà bên trái',popupTop:'Vá» trà phÃa trên',id:'Äá»nh danh',langDir:'HÆ°á»ng ngôn ngữ',langDirLTR:'Trái sang phải (LTR)',langDirRTL:'Phải sang trái (RTL)',acccessKey:'PhÃm há» trợ truy cáºp',name:'Tên',langCode:'Mã ngôn ngữ',tabIndex:'Chá» sá» của Tab',advisoryTitle:'Nhan Äá» hÆ°á»ng dẫn',advisoryContentType:'Ná»i dung hÆ°á»ng dẫn',cssClasses:'Lá»p Stylesheet',charset:'Bảng mã của tà i nguyên Äược liên kết Äến',styles:'Kiá»u (style)',rel:'Relationship',selectAnchor:'Chá»n má»t Äiá»m neo',anchorName:'Theo tên Äiá»m neo',anchorId:'Theo Äá»nh danh thà nh phần',emailAddress:'ThÆ° Äiá»n tá»',emailSubject:'Tiêu Äá» thông Äiá»p',emailBody:'Ná»i dung thông Äiá»p',noAnchors:'(Không có Äiá»m neo nà o trong tà i liá»u)',noUrl:'Hãy ÄÆ°a và o ÄÆ°á»ng dẫn liên kết (URL)',noEmail:'Hãy ÄÆ°a và o Äá»a chá» thÆ° Äiá»n tá»'},anchor:{toolbar:'Chèn/Sá»a Äiá»m neo',menu:'Thuá»c tÃnh Äiá»m neo',title:'Thuá»c tÃnh Äiá»m neo',name:'Tên của Äiá»m neo',errorName:'Hãy nháºp và o tên của Äiá»m neo',remove:'Remove Anchor'},list:{numberedTitle:'Thuá»c tÃnh danh sách có thứ tá»±',bulletedTitle:'Thuá»c tÃnh danh sách không thứ tá»±',type:'Kiá»u loại',start:'Bắt Äầu',validateStartNumber:'List start number must be a whole number.',circle:'Khuyên tròn',disc:'Hình ÄÄ©a',square:'Hình vuông',none:'Không gì cả',notset:'<không thiết láºp>',armenian:'Sá» theo kiá»u Armenian',georgian:'Sá» theo kiá»u Georgian (an, ban, gan...)',lowerRoman:'Sá» La Mã kiá»u thÆ°á»ng (i, ii, iii, iv, v...)',upperRoman:'Sá» La Mã kiá»u HOA (I, II, III, IV, V...)',lowerAlpha:'Kiá»u abc thÆ°á»ng (a, b, c, d, e...)',upperAlpha:'Kiá»u ABC HOA (A, B, C, D, E...)',lowerGreek:'Kiá»u Hy Lạp (alpha, beta, gamma...)',decimal:'Kiá»u sá» (1, 2, 3 ...)',decimalLeadingZero:'Kiá»u sá» (01, 02, 03...)'},findAndReplace:{title:'Tìm kiếm và thay thế',find:'Tìm kiếm',replace:'Thay thế',findWhat:'Tìm chuá»i:',replaceWith:'Thay bằng:',notFoundMsg:'Không tìm thấy chuá»i cần tìm.',matchCase:'Phân biá»t chữ hoa/thÆ°á»ng',matchWord:'Giá»ng toà n bá» từ',matchCyclic:'Giá»ng má»t phần',replaceAll:'Thay thế tất cả',replaceSuccessMsg:'%1 vá» trà Äã Äược thay thế.'},table:{toolbar:'Bảng',title:'Thuá»c tÃnh bảng',menu:'Thuá»c tÃnh bảng',deleteTable:'Xóa bảng',rows:'Sá» hà ng',columns:'Sá» cá»t',border:'KÃch thÆ°á»c ÄÆ°á»ng viá»n',widthPx:'Äiá»m ảnh (px)',widthPc:'Phần trÄm (%)',widthUnit:'ÄÆ¡n vá»',cellSpace:'Khoảng cách giữa các ô',cellPad:'Khoảng Äá»m giữ ô và ná»i dung',caption:'Äầu Äá»',summary:'Tóm lược',headers:'Äầu Äá»',headersNone:'Không có',headersColumn:'Cá»t Äầu tiên',headersRow:'Hà ng Äầu tiên',headersBoth:'Cả hai',invalidRows:'Sá» lượng hà ng phải là má»t sá» lá»n hÆ¡n 0.',invalidCols:'Sá» lượng cá»t phải là má»t sá» lá»n hÆ¡n 0.',invalidBorder:'KÃch cỡ của ÄÆ°á»ng biên phải là má»t sá» nguyên.',invalidWidth:'Chiá»u rá»ng của bảng phải là má»t sá» nguyên.',invalidHeight:'Chiá»u cao của bảng phải là má»t sá» nguyên.',invalidCellSpacing:'Khoảng cách giữa các ô phải là má»t sá» nguyên.',invalidCellPadding:'Khoảng Äá»m giữa ô và ná»i dung phải là má»t sá» nguyên.',cell:{menu:'Ã',insertBefore:'Chèn ô PhÃa trÆ°á»c',insertAfter:'Chèn ô PhÃa sau',deleteCell:'Xoá ô',merge:'Kết hợp ô',mergeRight:'Kết hợp sang phải',mergeDown:'Kết hợp xuá»ng dÆ°á»i',splitHorizontal:'Phân tách ô theo chiá»u ngang',splitVertical:'Phân tách ô theo chiá»u dá»c',title:'Thuá»c tÃnh của ô',cellType:'Kiá»u của ô',rowSpan:'Kết hợp hà ng',colSpan:'Kết hợp cá»t',wordWrap:'Chữ liá»n hà ng',hAlign:'Canh lá» ngang',vAlign:'Canh lá» dá»c',alignBaseline:'ÄÆ°á»ng cÆ¡ sá»',bgColor:'Mà u ná»n',borderColor:'Mà u viá»n',data:'Dữ liá»u',header:'Äầu Äá»',yes:'Có',no:'Không',invalidWidth:'Chiá»u rá»ng của ô phải là má»t sá» nguyên.',invalidHeight:'Chiá»u cao của ô phải là má»t sá» nguyên.',invalidRowSpan:'Sá» hà ng kết hợp phải là má»t sá» nguyên.',invalidColSpan:'Sá» cá»t kết hợp phải là má»t sá» nguyên.',chooseColor:'Chá»n mà u'},row:{menu:'Hà ng',insertBefore:'Chèn hà ng phÃa trÆ°á»c',insertAfter:'Chèn hà ng phÃa sau',deleteRow:'Xoá hà ng'},column:{menu:'Cá»t',insertBefore:'Chèn cá»t phÃa trÆ°á»c',insertAfter:'Chèn cá»t phÃa sau',deleteColumn:'Xoá cá»t'}},button:{title:'Thuá»c tÃnh của nút',text:'Chuá»i hiá»n thá» (giá trá»)',type:'Kiá»u',typeBtn:'Nút bấm',typeSbm:'Nút gá»i',typeRst:'Nút nháºp lại'},checkboxAndRadio:{checkboxTitle:'Thuá»c tÃnh nút kiá»m',radioTitle:'Thuá»c tÃnh nút chá»n',value:'Giá trá»',selected:'Äược chá»n'},form:{title:'Thuá»c tÃnh biá»u mẫu',menu:'Thuá»c tÃnh biá»u mẫu',action:'Hà nh Äá»ng',method:'PhÆ°Æ¡ng thức',encoding:'Bảng mã'},select:{title:'Thuá»c tÃnh ô chá»n',selectInfo:'Thông tin',opAvail:'Các tùy chá»n có thá» sá» dụng',value:'Giá trá»',size:'KÃch cỡ',lines:'dòng',chkMulti:'Cho phép chá»n nhiá»u',opText:'VÄn bản',opValue:'Giá trá»',btnAdd:'Thêm',btnModify:'Thay Äá»i',btnUp:'Lên',btnDown:'Xuá»ng',btnSetValue:'Giá trá» Äược chá»n',btnDelete:'Nút xoá'},textarea:{title:'Thuá»c tÃnh vùng vÄn bản',cols:'Sá» cá»t',rows:'Sá» hà ng'},textfield:{title:'Thuá»c tÃnh trÆ°á»ng vÄn bản',name:'Tên',value:'Giá trá»',charWidth:'Äá» rá»ng của ký tá»±',maxChars:'Sá» ký tá»± tá»i Äa',type:'Kiá»u',typeText:'Ký tá»±',typePass:'Máºt khẩu'},hidden:{title:'Thuá»c tÃnh trÆ°á»ng ẩn',name:'Tên',value:'Giá trá»'},image:{title:'Thuá»c tÃnh của ảnh',titleButton:'Thuá»c tÃnh nút của ảnh',menu:'Thuá»c tÃnh của ảnh',infoTab:'Thông tin của ảnh',btnUpload:'Tải lên máy chủ',upload:'Tải lên',alt:'Chú thÃch ảnh',lockRatio:'Giữ nguyên tá»· lá»',resetSize:'KÃch thÆ°á»c gá»c',border:'ÄÆ°á»ng viá»n',hSpace:'Khoảng Äá»m ngang',vSpace:'Khoảng Äá»m dá»c',alertUrl:'Hãy ÄÆ°a và o ÄÆ°á»ng dẫn của ảnh',linkTab:'Tab liên kết',button2Img:'Bạn có muá»n chuyá»n nút bấm bằng ảnh Äược chá»n thà nh ảnh?',img2Button:'Bạn có muá»n chuyá»n Äá»i ảnh Äược chá»n thà nh nút bấm bằng ảnh?',urlMissing:'Thiếu ÄÆ°á»ng dẫn hình ảnh',validateBorder:'Chiá»u rá»ng của ÄÆ°á»ng viá»n phải là má»t sá» nguyên dÆ°Æ¡ng',validateHSpace:'Khoảng Äá»m ngang phải là má»t sá» nguyên dÆ°Æ¡ng',validateVSpace:'Khoảng Äá»m dá»c phải là má»t sá» nguyên dÆ°Æ¡ng'},flash:{properties:'Thuá»c tÃnh Flash',propertiesTab:'Thuá»c tÃnh',title:'Thuá»c tÃnh Flash',chkPlay:'Tá»± Äá»ng chạy',chkLoop:'Lặp',chkMenu:'Cho phép báºt menu của Flash',chkFull:'Cho phép toà n mà n hình',scale:'Tá»· lá»',scaleAll:'Hiá»n thá» tất cả',scaleNoBorder:'Không ÄÆ°á»ng viá»n',scaleFit:'Vừa vặn',access:'Truy cáºp mã',accessAlways:'Luôn luôn',accessSameDomain:'Cùng tên miá»n',accessNever:'Không bao giá»',alignAbsBottom:'DÆ°á»i tuyá»t Äá»i',alignAbsMiddle:'Giữa tuyá»t Äá»i',alignBaseline:'ÄÆ°á»ng cÆ¡ sá»',alignTextTop:'PhÃa trên chữ',quality:'Chất lượng',qualityBest:'Tá»t nhất',qualityHigh:'Cao',qualityAutoHigh:'Cao tá»± Äá»ng',qualityMedium:'Trung bình',qualityAutoLow:'Thấp tá»± Äá»ng',qualityLow:'Thấp',windowModeWindow:'Cá»a sá»',windowModeOpaque:'Má» Äục',windowModeTransparent:'Trong suá»t',windowMode:'Chế Äá» cá»a sá»',flashvars:'Các biến sá» dà nh cho Flash',bgcolor:'Mà u ná»n',hSpace:'Khoảng Äá»m ngang',vSpace:'Khoảng Äá»m dá»c',validateSrc:'Hãy ÄÆ°a và o ÄÆ°á»ng dẫn liên kết',validateHSpace:'Khoảng Äá»m ngang phải là sá» nguyên.',validateVSpace:'Khoảng Äá»m dá»c phải là sá» nguyên.'},spellCheck:{toolbar:'Kiá»m tra chÃnh tả',title:'Kiá»m tra chÃnh tả',notAvailable:'Xin lá»i, dá»ch vụ nà y hiá»n tại không có.',errorLoading:'Lá»i khi Äang nạp dá»ch vụ ứng dụng: %s.',notInDic:'Không có trong từ Äiá»n',changeTo:'Chuyá»n thà nh',btnIgnore:'Bá» qua',btnIgnoreAll:'Bá» qua tất cả',btnReplace:'Thay thế',btnReplaceAll:'Thay thế tất cả',btnUndo:'Phục há»i lại',noSuggestions:'- Không ÄÆ°a ra gợi ý vá» từ -',progress:'Äang tiến hà nh kiá»m tra chÃnh tả...',noMispell:'Hoà n tất kiá»m tra chÃnh tả: Không có lá»i chÃnh tả',noChanges:'Hoà n tất kiá»m tra chÃnh tả: Không có từ nà o Äược thay Äá»i',oneChange:'Hoà n tất kiá»m tra chÃnh tả: Má»t từ Äã Äược thay Äá»i',manyChanges:'Hoà n tất kiá»m tra chÃnh tả: %1 từ Äã Äược thay Äá»i',ieSpellDownload:'Chức nÄng kiá»m tra chÃnh tả chÆ°a Äược cà i Äặt. Bạn có muá»n tải vá» ngay bây giá»?'},smiley:{toolbar:'Hình biá»u lá» cảm xúc (mặt cÆ°á»i)',title:'Chèn hình biá»u lá» cảm xúc (mặt cÆ°á»i)',options:'Tùy chá»n hình biá»u lá» cảm xúc'},elementsPath:{eleLabel:'Nhãn thà nh phần',eleTitle:'%1 thà nh phần'},numberedlist:'Danh sách có thứ tá»±',bulletedlist:'Danh sách không thứ tá»±',indent:'Dá»ch và o trong',outdent:'Dá»ch ra ngoà i',justify:{left:'Canh trái',center:'Canh giữa',right:'Canh phải',block:'Canh Äá»u'},blockquote:'Khá»i trÃch dẫn',clipboard:{title:'Dán',cutError:'Các thiết láºp bảo máºt của trình duyá»t không cho phép trình biên táºp tá»± Äá»ng thá»±c thi lá»nh cắt. Hãy sá» dụng bà n phÃm cho lá»nh nà y (Ctrl/Cmd+X).',copyError:'Các thiết láºp bảo máºt của trình duyá»t không cho phép trình biên táºp tá»± Äá»ng thá»±c thi lá»nh sao chép. Hãy sá» dụng bà n phÃm cho lá»nh nà y (Ctrl/Cmd+C).',pasteMsg:'Hãy dán ná»i dung và o trong khung bên dÆ°á»i, sá» dụng tá» hợp phÃm (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn và o nút <STRONG>Äá»ng ý</STRONG>.',securityMsg:'Do thiết láºp bảo máºt của trình duyá»t nên trình biên táºp không thá» truy cáºp trá»±c tiếp và o ná»i dung Äã sao chép. Bạn cần phải dán lại ná»i dung và o cá»a sá» nà y.',pasteArea:'Khu vá»±c dán'},pastefromword:{confirmCleanup:'VÄn bản bạn muá»n dán có kèm Äá»nh dạng của Word. Bạn có muá»n loại bá» Äá»nh dạng Word trÆ°á»c khi dán?',toolbar:'Dán vá»i Äá»nh dạng Word',title:'Dán vá»i Äá»nh dạng Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Dán theo Äá»nh dạng vÄn bản thuần',title:'Dán theo Äá»nh dạng vÄn bản thuần'},templates:{button:'Mẫu dá»±ng sẵn',title:'Ná»i dung Mẫu dá»±ng sẵn',options:'Tùy chá»n mẫu dá»±ng sẵn',insertOption:'Thay thế ná»i dung hiá»n tại',selectPromptMsg:'Hãy chá»n mẫu dá»±ng sẵn Äá» má» trong trình biên táºp<br>(ná»i dung hiá»n tại sẽ bá» mất):',emptyListMsg:'(Không có mẫu dá»±ng sẵn nà o Äược Äá»nh nghÄ©a)'},showBlocks:'Hiá»n thá» các khá»i',stylesCombo:{label:'Kiá»u',panelTitle:'Phong cách Äá»nh dạng',panelTitle1:'Kiá»u khá»i',panelTitle2:'Kiá»u trá»±c tiếp',panelTitle3:'Kiá»u Äá»i tượng'},format:{label:'Äá»nh dạng',panelTitle:'Äá»nh dạng',tag_p:'Bình thÆ°á»ng (P)',tag_pre:'Äã thiết láºp',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Bình thÆ°á»ng (DIV)'},div:{title:'Tạo khá»i các thà nh phần',toolbar:'Tạo khá»i các thà nh phần',cssClassInputLabel:'Các lá»p CSS',styleSelectLabel:'Kiá»u (style)',IdInputLabel:'Äá»nh danh (id)',languageCodeInputLabel:'Mã ngôn ngữ',inlineStyleInputLabel:'Kiá»u ná»i dòng',advisoryTitleInputLabel:'Nhan Äá» hÆ°á»ng dẫn',langDirLabel:'HÆ°á»ng ngôn ngữ',langDirLTRLabel:'Trái sang phải (LTR)',langDirRTLLabel:'Phải qua trái (RTL)',edit:'Chá»nh sá»a',remove:'Xóa bá»'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Phông',voiceLabel:'Phông',panelTitle:'Phông'},fontSize:{label:'Cỡ chữ',voiceLabel:'KÃch cỡ phông',panelTitle:'Cỡ chữ'},colorButton:{textColorTitle:'Mà u chữ',bgColorTitle:'Mà u ná»n',panelTitle:'Mà u sắc',auto:'Tá»± Äá»ng',more:'Mà u khác...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Kiá»m tra chÃnh tả ngay khi gõ chữ (SCAYT)',opera_title:'Không há» trợ trên trình duyá»t Opera',enable:'Báºt SCAYT',disable:'Tắt SCAYT',about:'Thông tin vá» SCAYT',toggle:'Báºt tắt SCAYT',options:'Tùy chá»n',langs:'Ngôn ngữ',moreSuggestions:'Äá» xuất thêm',ignore:'Bá» qua',ignoreAll:'Bá» qua tất cả',addWord:'Thêm từ',emptyDic:'Tên của từ Äiá»n không Äược Äá» trá»ng.',optionsTab:'Tùy chá»n',allCaps:'Không phân biá»t chữ HOA chữ thÆ°á»ng',ignoreDomainNames:'Bá» qua tên miá»n',mixedCase:'Không phân biá»t loại chữ',mixedWithDigits:'Không phân biá»t chữ và sá»',languagesTab:'Tab ngôn ngữ',dictionariesTab:'Từ Äiá»n',dic_field_name:'Tên từ Äiá»n',dic_create:'Tạo',dic_restore:'Phục há»i',dic_delete:'Xóa',dic_rename:'Thay tên',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Thông tin'},about:{title:'Thông tin vá» CKEditor',dlgTitle:'Thông tin vá» CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'Vui lòng ghé thÄm trang web của chúng tôi Äá» có thông tin vá» giấy phép:',copy:'Bản quyá»n © $1. Giữ toà n quyá»n.'},maximize:'Phóng to tá»i Äa',minimize:'Thu nhá»',fakeobjects:{anchor:'Äiá»m neo',flash:'Flash',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'Äá»i tượng không rõ rà ng'},resize:'Kéo rê Äá» thay Äá»i kÃch cỡ',colordialog:{title:'Chá»n mà u',options:'Color Options',highlight:'Mà u chá»n',selected:'Mà u Äã chá»n',clear:'Xóa bá»'},toolbarCollapse:'Thu gá»n thanh công cụ',toolbarExpand:'Má» rá»ng thnah công cụ',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'Thuá»c tÃnh Tà i liá»u',title:'Thuá»c tÃnh Tà i liá»u',design:'Design',meta:'Siêu dữ liá»u',chooseColor:'Chá»n mà u',other:'<khác>',docTitle:'Tiêu Äá» Trang',charset:'Bảng mã ký tá»±',charsetOther:'Bảng mã ký tá»± khác',charsetASCII:'ASCII',charsetCE:'Trung Ãu',charsetCT:'Tiếng Trung Quá»c (Big5)',charsetCR:'Tiếng Kirin',charsetGR:'Tiếng Hy Lạp',charsetJP:'Tiếng Nháºt',charsetKR:'Tiếng Hà n',charsetTR:'Tiếng Thá» NhÄ© Kỳ',charsetUN:'Unicode (UTF-8)',charsetWE:'Tây Ãu',docType:'Kiá»u Äá» mục Tà i liá»u',docTypeOther:'Kiá»u Äá» mục Tà i liá»u khác',xhtmlDec:'Bao gá»m cả Äá»nh nghÄ©a XHTML',bgColor:'Mà u ná»n',bgImage:'URL của Hình ảnh ná»n',bgFixed:'Không cuá»n ná»n',txtColor:'Mà u chữ',margin:'ÄÆ°á»ng biên của Trang',marginTop:'Trên',marginLeft:'Trái',marginRight:'Phải',marginBottom:'DÆ°á»i',metaKeywords:'Các từ khóa chá» mục tà i liá»u (phân cách bá»i dấu phẩy)',metaDescription:'Mô tả tà i liá»u',metaAuthor:'Tác giả',metaCopyright:'Bản quyá»n',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/zh-cn.js b/lang/zh-cn.js new file mode 100644 index 0000000..87716c1 --- /dev/null +++ b/lang/zh-cn.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang['zh-cn']={dir:'ltr',editorTitle:'æè§å³æå¾ç¼è¾å¨, %1, æ ALT+0 æ¥ç帮å©ã',toolbars:'Editor toolbars',editor:'æè§å³æå¾ç¼è¾å¨',source:'æºç ',newPage:'æ°å»º',save:'ä¿å',preview:'é¢è§',cut:'åªå',copy:'å¤å¶',paste:'ç²è´´',print:'æå°',underline:'ä¸å线',bold:'å ç²',italic:'å¾æ',selectAll:'å ¨é',removeFormat:'æ¸ é¤æ ¼å¼',strike:'å é¤çº¿',subscript:'ä¸æ ',superscript:'ä¸æ ',horizontalrule:'æå ¥æ°´å¹³çº¿',pagebreak:'æå ¥å页符',pagebreakAlt:'Page Break',unlink:'åæ¶è¶ é¾æ¥',undo:'æ¤æ¶',redo:'éå',common:{browseServer:'æµè§æå¡å¨',url:'æºæ件',protocol:'åè®®',upload:'ä¸ä¼ ',uploadSubmit:'ä¸ä¼ å°æå¡å¨ä¸',image:'å¾è±¡',flash:'Flash',form:'表å',checkbox:'å¤éæ¡',radio:'åéæé®',textField:'åè¡ææ¬',textarea:'å¤è¡ææ¬',hiddenField:'éèå',button:'æé®',select:'å表/èå',imageButton:'å¾åå',notSet:'<没æ设置>',id:'ID',name:'å称',langDir:'è¯è¨æ¹å',langDirLtr:'ä»å·¦å°å³ (LTR)',langDirRtl:'ä»å³å°å·¦ (RTL)',langCode:'è¯è¨ä»£ç ',longDescr:'详ç»è¯´æå°å',cssClass:'æ ·å¼ç±»å称',advisoryTitle:'æ é¢',cssStyle:'è¡å æ ·å¼',ok:'ç¡®å®',cancel:'åæ¶',close:'å ³é',preview:'é¢è§',generalTab:'常è§',advancedTab:'é«çº§',validateNumberFailed:'éè¦è¾å ¥æ°åæ ¼å¼',confirmNewPage:'å½åææ¡£å 容æªä¿å,æ¯å¦ç¡®è®¤æ°å»ºææ¡£ï¼',confirmCancel:'é¨åä¿®æ¹å°æªä¿åï¼æ¯å¦ç¡®è®¤å ³é对è¯æ¡ï¼',options:'é项',target:'ç®æ çªå£',targetNew:'æ°çªå£ (_blank)',targetTop:'æ´é¡µ (_top)',targetSelf:'æ¬çªå£ (_self)',targetParent:'ç¶çªå£ (_parent)',langDirLTR:'ä»å·¦å°å³ (LTR)',langDirRTL:'ä»å³å°å·¦ (RTL)',styles:'æ ·å¼',cssClasses:'æ ·å¼ç±»',width:'宽度',height:'é«åº¦',align:'对é½æ¹å¼',alignLeft:'左对é½',alignRight:'å³å¯¹é½',alignCenter:'å± ä¸',alignTop:'顶端',alignMiddle:'å± ä¸',alignBottom:'åºé¨',invalidHeight:'é«åº¦å¿ 须为æ°åæ ¼å¼',invalidWidth:'å®½åº¦å¿ é¡»ä¸ºæ°åæ ¼å¼',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, ä¸å¯ç¨</span>'},contextmenu:{options:'å¿«æ·èåé项'},specialChar:{toolbar:'æå ¥ç¹æ®ç¬¦å·',title:'éæ©ç¹æ®ç¬¦å·',options:'ç¹æ®ç¬¦å·é项'},link:{toolbar:'æå ¥/ç¼è¾è¶ é¾æ¥',other:'<å ¶ä»>',menu:'ç¼è¾è¶ é¾æ¥',title:'è¶ é¾æ¥',info:'è¶ é¾æ¥ä¿¡æ¯',target:'ç®æ ',upload:'ä¸ä¼ ',advanced:'é«çº§',type:'è¶ é¾æ¥ç±»å',toUrl:'å°å',toAnchor:'页å éç¹é¾æ¥',toEmail:'çµåé®ä»¶',targetFrame:'<æ¡æ¶>',targetPopup:'<å¼¹åºçªå£>',targetFrameName:'ç®æ æ¡æ¶å称',targetPopupName:'å¼¹åºçªå£å称',popupFeatures:'å¼¹åºçªå£å±æ§',popupResizable:'å¯ç¼©æ¾',popupStatusBar:'ç¶ææ ',popupLocationBar:'å°åæ ',popupToolbar:'å·¥å ·æ ',popupMenuBar:'èåæ ',popupFullScreen:'å ¨å± (IE)',popupScrollBars:'æ»å¨æ¡',popupDependent:'ä¾é (NS)',popupLeft:'å·¦',popupTop:'å³',id:'ID',langDir:'è¯è¨æ¹å',langDirLTR:'ä»å·¦å°å³ (LTR)',langDirRTL:'ä»å³å°å·¦ (RTL)',acccessKey:'访é®é®',name:'å称',langCode:'è¯è¨ä»£ç ',tabIndex:'Tab é®æ¬¡åº',advisoryTitle:'æ é¢',advisoryContentType:'å 容类å',cssClasses:'æ ·å¼ç±»å称',charset:'å符ç¼ç ',styles:'è¡å æ ·å¼',rel:'Relationship',selectAnchor:'éæ©ä¸ä¸ªéç¹',anchorName:'æéç¹å称',anchorId:'æéç¹ ID',emailAddress:'å°å',emailSubject:'主é¢',emailBody:'å 容',noAnchors:'(æ¤æ档没æå¯ç¨çéç¹)',noUrl:'请è¾å ¥è¶ é¾æ¥å°å',noEmail:'请è¾å ¥çµåé®ä»¶å°å'},anchor:{toolbar:'æå ¥/ç¼è¾éç¹é¾æ¥',menu:'éç¹é¾æ¥å±æ§',title:'éç¹é¾æ¥å±æ§',name:'éç¹å称',errorName:'请è¾å ¥éç¹å称',remove:'Remove Anchor'},list:{numberedTitle:'ç¼å·å表å±æ§',bulletedTitle:'项ç®å表å±æ§',type:'æ è®°ç±»å',start:'å¼å§åºå·',validateStartNumber:'å表å¼å§åºå·å¿ 须为æ´æ°æ ¼å¼',circle:'空å¿å',disc:'å®å¿å',square:'å®å¿æ¹å',none:'æ æ è®°',notset:'<没æ设置>',armenian:'ä¼ ç»çäºç¾å°¼äºç¼å·æ¹å¼',georgian:'ä¼ ç»çä¹æ²»äºç¼å·æ¹å¼(an, ban, gan, ç)',lowerRoman:'å°åç½é©¬æ°å(i, ii, iii, iv, v, ç)',upperRoman:'大åç½é©¬æ°å(I, II, III, IV, V, ç)',lowerAlpha:'å°åè±æåæ¯(a, b, c, d, e, ç)',upperAlpha:'大åè±æåæ¯(A, B, C, D, E, ç)',lowerGreek:'å°åå¸è åæ¯(alpha, beta, gamma, ç)',decimal:'æ°å (1, 2, 3, ç)',decimalLeadingZero:'0å¼å¤´çæ°åæ è®°(01, 02, 03, ç)'},findAndReplace:{title:'æ¥æ¾åæ¿æ¢',find:'æ¥æ¾',replace:'æ¿æ¢',findWhat:'æ¥æ¾:',replaceWith:'æ¿æ¢:',notFoundMsg:'æå®ææ¬æ²¡ææ¾å°',matchCase:'åºå大å°å',matchWord:'å ¨åå¹é ',matchCyclic:'循ç¯å¹é ',replaceAll:'å ¨é¨æ¿æ¢',replaceSuccessMsg:'å ±å®æ %1 å¤æ¿æ¢.'},table:{toolbar:'è¡¨æ ¼',title:'è¡¨æ ¼å±æ§',menu:'è¡¨æ ¼å±æ§',deleteTable:'å é¤è¡¨æ ¼',rows:'è¡æ°',columns:'åæ°',border:'è¾¹æ¡',widthPx:'åç´ ',widthPc:'ç¾åæ¯',widthUnit:'宽度åä½',cellSpace:'é´è·',cellPad:'è¾¹è·',caption:'æ é¢',summary:'æè¦',headers:'æ é¢åå æ ¼',headersNone:'æ ',headersColumn:'第ä¸å',headersRow:'第ä¸è¡',headersBoth:'第ä¸åå第ä¸è¡',invalidRows:'æå®çåæ°å¿ 须大äºé¶',invalidCols:'æå®çè¡æ°å¿ 须大äºé¶',invalidBorder:'è¾¹æ¡ç²ç»å¿ 须为æ°åæ ¼å¼',invalidWidth:'è¡¨æ ¼å®½åº¦å¿ é¡»ä¸ºæ°åæ ¼å¼',invalidHeight:'è¡¨æ ¼é«åº¦å¿ 须为æ°åæ ¼å¼',invalidCellSpacing:'åå æ ¼é´è·å¿ 须为æ°åæ ¼å¼',invalidCellPadding:'åå æ ¼å¡«å å¿ é¡»ä¸ºæ°åæ ¼å¼',cell:{menu:'åå æ ¼',insertBefore:'å¨å·¦ä¾§æå ¥åå æ ¼',insertAfter:'å¨å³ä¾§æå ¥åå æ ¼',deleteCell:'å é¤åå æ ¼',merge:'å并åå æ ¼',mergeRight:'åå³å并åå æ ¼',mergeDown:'åä¸å并åå æ ¼',splitHorizontal:'æ°´å¹³æååå æ ¼',splitVertical:'åç´æååå æ ¼',title:'åå æ ¼å±æ§',cellType:'åå æ ¼ç±»å',rowSpan:'纵跨è¡æ°',colSpan:'横跨åæ°',wordWrap:'èªå¨æ¢è¡',hAlign:'水平对é½',vAlign:'åç´å¯¹é½',alignBaseline:'åºçº¿',bgColor:'èæ¯é¢è²',borderColor:'è¾¹æ¡é¢è²',data:'æ°æ®',header:'表头',yes:'æ¯',no:'å¦',invalidWidth:'åå æ ¼å®½åº¦å¿ é¡»ä¸ºæ°åæ ¼å¼',invalidHeight:'åå æ ¼é«åº¦å¿ 须为æ°åæ ¼å¼',invalidRowSpan:'è¡è·¨åº¦å¿ 须为æ´æ°æ ¼å¼',invalidColSpan:'åè·¨åº¦å¿ é¡»ä¸ºæ´æ°æ ¼å¼',chooseColor:'éæ©'},row:{menu:'è¡',insertBefore:'å¨ä¸æ¹æå ¥è¡',insertAfter:'å¨ä¸æ¹æå ¥è¡',deleteRow:'å é¤è¡'},column:{menu:'å',insertBefore:'å¨å·¦ä¾§æå ¥å',insertAfter:'å¨å³ä¾§æå ¥å',deleteColumn:'å é¤å'}},button:{title:'æé®å±æ§',text:'æ ç¾(å¼)',type:'ç±»å',typeBtn:'æé®',typeSbm:'æ交',typeRst:'é设'},checkboxAndRadio:{checkboxTitle:'å¤éæ¡å±æ§',radioTitle:'åéæé®å±æ§',value:'éå®å¼',selected:'å·²å¾é'},form:{title:'表åå±æ§',menu:'表åå±æ§',action:'å¨ä½',method:'æ¹æ³',encoding:'表åç¼ç '},select:{title:'èå/å表å±æ§',selectInfo:'éæ©ä¿¡æ¯',opAvail:'å¯é项',value:'å¼',size:'é«åº¦',lines:'è¡',chkMulti:'å 许å¤é',opText:'é项ææ¬',opValue:'é项å¼',btnAdd:'æ·»å ',btnModify:'ä¿®æ¹',btnUp:'ä¸ç§»',btnDown:'ä¸ç§»',btnSetValue:'设为åå§éå®',btnDelete:'å é¤'},textarea:{title:'å¤è¡ææ¬å±æ§',cols:'å符宽度',rows:'è¡æ°'},textfield:{title:'åè¡ææ¬å±æ§',name:'å称',value:'åå§å¼',charWidth:'å符宽度',maxChars:'æå¤å符æ°',type:'ç±»å',typeText:'ææ¬',typePass:'å¯ç '},hidden:{title:'éèåå±æ§',name:'å称',value:'åå§å¼'},image:{title:'å¾è±¡å±æ§',titleButton:'å¾ååå±æ§',menu:'å¾è±¡å±æ§',infoTab:'å¾è±¡',btnUpload:'ä¸ä¼ å°æå¡å¨ä¸',upload:'ä¸ä¼ ',alt:'æ¿æ¢ææ¬',lockRatio:'éå®æ¯ä¾',resetSize:'åå§å°ºå¯¸',border:'è¾¹æ¡å¤§å°',hSpace:'æ°´å¹³é´è·',vSpace:'åç´é´è·',alertUrl:'请è¾å ¥å¾è±¡å°å',linkTab:'é¾æ¥',button2Img:'ç¡®å®è¦æå½åæé®æ¹å为å¾åå?',img2Button:'ç¡®å®è¦æå½åå¾åæ¹å为æé®å?',urlMissing:'缺å°å¾åæºæ件å°å',validateBorder:'è¾¹æ¡å¤§å°å¿ 须为æ´æ°æ ¼å¼',validateHSpace:'æ°´å¹³é´è·å¿ 须为æ´æ°æ ¼å¼',validateVSpace:'åç´é´è·å¿ 须为æ´æ°æ ¼å¼'},flash:{properties:'Flash å±æ§',propertiesTab:'å±æ§',title:'æ é¢',chkPlay:'èªå¨ææ¾',chkLoop:'循ç¯',chkMenu:'å¯ç¨ Flash èå',chkFull:'å¯ç¨å ¨å±',scale:'缩æ¾',scaleAll:'å ¨é¨æ¾ç¤º',scaleNoBorder:'æ è¾¹æ¡',scaleFit:'ä¸¥æ ¼å¹é ',access:'å 许èæ¬è®¿é®',accessAlways:'æ»æ¯',accessSameDomain:'åå',accessNever:'ä»ä¸',alignAbsBottom:'ç»å¯¹åºé¨',alignAbsMiddle:'ç»å¯¹å± ä¸',alignBaseline:'åºçº¿',alignTextTop:'ææ¬ä¸æ¹',quality:'è´¨é',qualityBest:'æ好',qualityHigh:'é«',qualityAutoHigh:'é«(èªå¨)',qualityMedium:'ä¸(èªå¨)',qualityAutoLow:'ä½(èªå¨)',qualityLow:'ä½',windowModeWindow:'çªä½',windowModeOpaque:'ä¸éæ',windowModeTransparent:'éæ',windowMode:'çªä½æ¨¡å¼',flashvars:'Flash åé',bgcolor:'èæ¯é¢è²',hSpace:'æ°´å¹³é´è·',vSpace:'åç´é´è·',validateSrc:'请è¾å ¥æºæ件å°å',validateHSpace:'æ°´å¹³é´è·å¿ 须为æ°åæ ¼å¼',validateVSpace:'åç´é´è·å¿ 须为æ°åæ ¼å¼'},spellCheck:{toolbar:'æ¼åæ£æ¥',title:'æ¼åæ£æ¥',notAvailable:'æ±æ, æå¡ç®åæä¸å¯ç¨',errorLoading:'å è½½åºè¯¥æå¡ä¸»æºæ¶åºé: %s.',notInDic:'没æå¨åå ¸é',changeTo:'æ´æ¹ä¸º',btnIgnore:'忽ç¥',btnIgnoreAll:'å ¨é¨å¿½ç¥',btnReplace:'æ¿æ¢',btnReplaceAll:'å ¨é¨æ¿æ¢',btnUndo:'æ¤æ¶',noSuggestions:'- 没æ建议 -',progress:'æ£å¨è¿è¡æ¼åæ£æ¥...',noMispell:'æ¼åæ£æ¥å®æ: 没æåç°æ¼åé误',noChanges:'æ¼åæ£æ¥å®æ: 没ææ´æ¹ä»»ä½åè¯',oneChange:'æ¼åæ£æ¥å®æ: æ´æ¹äºä¸ä¸ªåè¯',manyChanges:'æ¼åæ£æ¥å®æ: æ´æ¹äº %1 个åè¯',ieSpellDownload:'æ¼åæ£æ¥æ件è¿æ²¡å®è£ , ä½ æ¯å¦æ³ç°å¨å°±ä¸è½½?'},smiley:{toolbar:'表æ 符',title:'æå ¥è¡¨æ å¾æ ',options:'表æ å¾æ é项'},elementsPath:{eleLabel:'å ç´ è·¯å¾',eleTitle:'%1 å ç´ '},numberedlist:'ç¼å·å表',bulletedlist:'项ç®å表',indent:'å¢å 缩è¿é',outdent:'åå°ç¼©è¿é',justify:{left:'左对é½',center:'å± ä¸',right:'å³å¯¹é½',block:'两端对é½'},blockquote:'åå¼ç¨',clipboard:{title:'ç²è´´',cutError:'æ¨çæµè§å¨å®å ¨è®¾ç½®ä¸å 许ç¼è¾å¨èªå¨æ§è¡åªåæä½, 请使ç¨é®çå¿«æ·é®(Ctrl/Cmd+X)æ¥å®æ',copyError:'æ¨çæµè§å¨å®å ¨è®¾ç½®ä¸å 许ç¼è¾å¨èªå¨æ§è¡å¤å¶æä½, 请使ç¨é®çå¿«æ·é®(Ctrl/Cmd+C)æ¥å®æ',pasteMsg:'请使ç¨é®çå¿«æ·é®(<STRONG>Ctrl/Cmd+V</STRONG>)æå 容ç²è´´å°ä¸é¢çæ¹æ¡éï¼åæ <STRONG>ç¡®å®</STRONG>',securityMsg:'å ä¸ºä½ çæµè§å¨çå®å ¨è®¾ç½®åå , æ¬ç¼è¾å¨ä¸è½ç´æ¥è®¿é®ä½ çåªè´´æ¿å 容, ä½ éè¦å¨æ¬çªå£éæ°ç²è´´ä¸æ¬¡',pasteArea:'ç²è´´åºå'},pastefromword:{confirmCleanup:'æ¨è¦ç²è´´çå 容好åæ¯æ¥èª MS Word, æ¯å¦è¦æ¸ é¤ MS Word æ ¼å¼ååç²è´´?',toolbar:'ä» MS Word ç²è´´',title:'ä» MS Word ç²è´´',error:'ç±äºå é¨é误æ æ³æ¸ çè¦ç²è´´çæ°æ®'},pasteText:{button:'ç²è´´ä¸ºæ æ ¼å¼ææ¬',title:'ç²è´´ä¸ºæ æ ¼å¼ææ¬'},templates:{button:'模æ¿',title:'å 容模æ¿',options:'模æ¿é项',insertOption:'æ¿æ¢å½åå 容',selectPromptMsg:'请éæ©ç¼è¾å¨å 容模æ¿:',emptyListMsg:'(没æ模æ¿)'},showBlocks:'æ¾ç¤ºåºå',stylesCombo:{label:'æ ·å¼',panelTitle:'æ ·å¼',panelTitle1:'å级å ç´ æ ·å¼',panelTitle2:'å èå ç´ æ ·å¼',panelTitle3:'对象å ç´ æ ·å¼'},format:{label:'æ ¼å¼',panelTitle:'æ ¼å¼',tag_p:'æ®é',tag_pre:'å·²ç¼ææ ¼å¼',tag_address:'å°å',tag_h1:'æ é¢ 1',tag_h2:'æ é¢ 2',tag_h3:'æ é¢ 3',tag_h4:'æ é¢ 4',tag_h5:'æ é¢ 5',tag_h6:'æ é¢ 6',tag_div:'段è½(DIV)'},div:{title:'å建 DIV 容å¨',toolbar:'å建 DIV 容å¨',cssClassInputLabel:'æ ·å¼ç±»å称',styleSelectLabel:'æ ·å¼',IdInputLabel:'ID',languageCodeInputLabel:'è¯è¨ä»£ç ',inlineStyleInputLabel:'è¡å æ ·å¼',advisoryTitleInputLabel:'æ é¢',langDirLabel:'è¯è¨æ¹å',langDirLTRLabel:'ä»å·¦å°å³ (LTR)',langDirRTLLabel:'ä»å³å°å·¦ (RTL)',edit:'ç¼è¾ DIV',remove:'ç§»é¤ DIV'},iframe:{title:'iFrameå±æ§',toolbar:'iFrame',noUrl:'请è¾å ¥æ¡æ¶ç URL',scrolling:'å 许æ»å¨æ¡',border:'æ¾ç¤ºæ¡æ¶è¾¹æ¡'},font:{label:'åä½',voiceLabel:'åä½',panelTitle:'åä½'},fontSize:{label:'大å°',voiceLabel:'æå大å°',panelTitle:'大å°'},colorButton:{textColorTitle:'ææ¬é¢è²',bgColorTitle:'èæ¯é¢è²',panelTitle:'é¢è²',auto:'èªå¨',more:'å ¶å®é¢è²...'},colors:{'000':'é»',800000:'è¤çº¢','8B4513':'æ·±è¤','2F4F4F':'墨绿','008080':'绿æ¾ç³','000080':'æµ·åè','4B0082':'éè',696969:'æç°',B22222:'ç 红',A52A2A:'è¤',DAA520:'éé»','006400':'深绿','40E0D0':'è绿','0000CD':'ä¸è',800080:'ç´«',808080:'ç°',F00:'红',FF8C00:'æ·±æ©',FFD700:'é','008000':'绿','0FF':'é','00F':'è',EE82EE:'ç´«ç½å °',A9A9A9:'æ·±ç°',FFA07A:'亮æ©',FFA500:'æ©',FFFF00:'é»','00FF00':'水绿',AFEEEE:'ç²è',ADD8E6:'亮è',DDA0DD:'æ¢ çº¢',D3D3D3:'æ·¡ç°',FFF0F5:'淡紫红',FAEBD7:'å¤è£ç½',FFFFE0:'æ·¡é»',F0FFF0:'èç½',F0FFFF:'天è',F0F8FF:'æ·¡è',E6E6FA:'æ·¡ç´«',FFF:'ç½'},scayt:{title:'å³æ¶æ¼åæ£æ¥',opera_title:'ä¸æ¯æ Opera æµè§å¨',enable:'å¯ç¨å³æ¶æ¼åæ£æ¥',disable:'ç¦ç¨å³æ¶æ¼åæ£æ¥',about:'å ³äºå³æ¶æ¼åæ£æ¥',toggle:'æå/å¯ç¨å³æ¶æ¼åæ£æ¥',options:'é项',langs:'è¯è¨',moreSuggestions:'æ´å¤æ¼å建议',ignore:'忽ç¥',ignoreAll:'å ¨é¨å¿½ç¥',addWord:'æ·»å åè¯',emptyDic:'åå ¸åä¸åºä¸ºç©º.',optionsTab:'é项',allCaps:'忽ç¥ææ大ååè¯',ignoreDomainNames:'忽ç¥åå',mixedCase:'忽ç¥å¤§å°åæ··åçåè¯',mixedWithDigits:'忽ç¥å¸¦æ°åçåè¯',languagesTab:'è¯è¨',dictionariesTab:'åå ¸',dic_field_name:'åå ¸å称',dic_create:'å建',dic_restore:'è¿å',dic_delete:'å é¤',dic_rename:'éå½å',dic_info:'ä¸å¼å§ç¨æ·è¯å ¸å¨åå¨ Cookie ä¸, ä½æ¯ Cookies ç容éæ¯æéç, å½ç¨æ·è¯å ¸å¢é¿å°è¶ åº Cookie éå¶æ¶å°±æ æ³åå¨åäº, è¿æ¶æ¨å¯ä»¥å°è¯å ¸å¨åå°æ们çæå¡å¨ä¸. è¦ææ¨ç个人è¯å ¸å°å¨åå°æ们çæå¡å¨ä¸çè¯, éè¦ä¸ºæ¨çè¯å ¸æå®ä¸ä¸ªå称, å¦ææ¨å¨æ们çæå¡å¨ä¸å·²ç»æå¨åæä¸ä¸ªè¯å ¸, 请è¾å ¥è¯å ¸å称并æè¿åæé®.',aboutTab:'å ³äº'},about:{title:'å ³äºCKEditor',dlgTitle:'å ³äºCKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'访é®æ们çç½ç«ä»¥è·åæ´å¤å ³äºåè®®çä¿¡æ¯',copy:'Copyright © $1. All rights reserved.'},maximize:'å ¨å±',minimize:'æå°å',fakeobjects:{anchor:'éç¹',flash:'Flash å¨ç»',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'æªç¥å¯¹è±¡'},resize:'ææ½ä»¥æ¹å尺寸',colordialog:{title:'éæ©é¢è²',options:'é¢è²é项',highlight:'é«äº®',selected:'éæ©é¢è²',clear:'æ¸ é¤'},toolbarCollapse:'æå å·¥å ·æ ',toolbarExpand:'å±å¼å·¥å ·æ ',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'æåæ¹å为ä»å·¦è³å³',rtl:'æåæ¹å为ä»å³è³å·¦'},docprops:{label:'页é¢å±æ§',title:'页é¢å±æ§',design:'Design',meta:'Meta æ°æ®',chooseColor:'éæ©',other:'<å ¶ä»>',docTitle:'页é¢æ é¢',charset:'å符ç¼ç ',charsetOther:'å ¶å®å符ç¼ç ',charsetASCII:'ASCII',charsetCE:'ä¸æ¬§',charsetCT:'ç¹ä½ä¸æ (Big5)',charsetCR:'西éå°æ',charsetGR:'å¸è æ',charsetJP:'æ¥æ',charsetKR:'é©æ',charsetTR:'åè³å ¶æ',charsetUN:'Unicode (UTF-8)',charsetWE:'西欧',docType:'æ档类å',docTypeOther:'å ¶å®æ档类å',xhtmlDec:'å å« XHTML 声æ',bgColor:'èæ¯é¢è²',bgImage:'èæ¯å¾å',bgFixed:'ä¸æ»å¨èæ¯å¾å',txtColor:'ææ¬é¢è²',margin:'页é¢è¾¹è·',marginTop:'ä¸',marginLeft:'å·¦',marginRight:'å³',marginBottom:'ä¸',metaKeywords:'页é¢ç´¢å¼å ³é®å (ç¨åè§éå·[,]åé)',metaDescription:'页é¢è¯´æ',metaAuthor:'ä½è ',metaCopyright:'çæ',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/lang/zh.js b/lang/zh.js new file mode 100644 index 0000000..de5396d --- /dev/null +++ b/lang/zh.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.lang.zh={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbars:'Editor toolbars',editor:'Rich Text Editor',source:'åå§ç¢¼',newPage:'éæ°æªæ¡',save:'å²å',preview:'é 覽',cut:'åªä¸',copy:'è¤è£½',paste:'è²¼ä¸',print:'åå°',underline:'åºç·',bold:'ç²é«',italic:'æé«',selectAll:'å ¨é¸',removeFormat:'æ¸ é¤æ ¼å¼',strike:'åªé¤ç·',subscript:'ä¸æ¨',superscript:'ä¸æ¨',horizontalrule:'æå ¥æ°´å¹³ç·',pagebreak:'æå ¥åé 符è',pagebreakAlt:'Page Break',unlink:'移é¤è¶ é£çµ',undo:'復å',redo:'éè¤',common:{browseServer:'ç覽伺æå¨ç«¯',url:'URL',protocol:'éè¨åå®',upload:'ä¸å³',uploadSubmit:'ä¸å³è³ä¼ºæå¨',image:'å½±å',flash:'Flash',form:'表å®',checkbox:'æ ¸åæ¹å¡',radio:'é¸é æé',textField:'æåæ¹å¡',textarea:'æååå',hiddenField:'é±èæ¬ä½',button:'æé',select:'æ¸ å®/é¸å®',imageButton:'å½±åæé',notSet:'<å°æªè¨å®>',id:'ID',name:'å稱',langDir:'èªè¨æ¹å',langDirLtr:'ç±å·¦èå³ (LTR)',langDirRtl:'ç±å³èå·¦ (RTL)',langCode:'èªè¨ä»£ç¢¼',longDescr:'詳細 URL',cssClass:'樣å¼è¡¨é¡å¥',advisoryTitle:'æ¨é¡',cssStyle:'樣å¼',ok:'確å®',cancel:'åæ¶',close:'Close',preview:'Preview',generalTab:'ä¸è¬',advancedTab:'é²é',validateNumberFailed:'éè¦è¼¸å ¥æ¸åæ ¼å¼',confirmNewPage:'ç¾åçä¿®æ¹å°æªå²åï¼è¦éæ°æªæ¡ï¼',confirmCancel:'é¨ä»½é¸é å°æªå²åï¼è¦ééå°è©±çï¼',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'寬度',height:'é«åº¦',align:'å°é½',alignLeft:'é å·¦å°é½',alignRight:'é å³å°é½',alignCenter:'ç½®ä¸',alignTop:'é ä¸å°é½',alignMiddle:'ç½®ä¸å°é½',alignBottom:'é ä¸å°é½',invalidHeight:'é«åº¦å¿ é çºæ¸åæ ¼å¼',invalidWidth:'å¯¬åº¦å¿ é çºæ¸åæ ¼å¼',invalidCssLength:'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',invalidHtmlLength:'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',unavailable:'%1<span class="cke_accessibility">, å·²éé</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'æå ¥ç¹æ®ç¬¦è',title:'è«é¸æç¹æ®ç¬¦è',options:'Special Character Options'},link:{toolbar:'æå ¥/ç·¨è¼¯è¶ é£çµ',other:'<å ¶ä»>',menu:'ç·¨è¼¯è¶ é£çµ',title:'è¶ é£çµ',info:'è¶ é£çµè³è¨',target:'ç®æ¨',upload:'ä¸å³',advanced:'é²é',type:'è¶ é£æ¥é¡å',toUrl:'URL',toAnchor:'æ¬é é¨é»',toEmail:'é»åéµä»¶',targetFrame:'<æ¡æ¶>',targetPopup:'<快顯è¦çª>',targetFrameName:'ç®æ¨æ¡æ¶å稱',targetPopupName:'快顯è¦çªå稱',popupFeatures:'快顯è¦çªå±¬æ§',popupResizable:'å¯ç¸®æ¾',popupStatusBar:'çæ å',popupLocationBar:'網åå',popupToolbar:'å·¥å ·å',popupMenuBar:'é¸å®å',popupFullScreen:'å ¨è¢å¹ (IE)',popupScrollBars:'æ²è»¸',popupDependent:'å¾å±¬ (NS)',popupLeft:'å·¦',popupTop:'å³',id:'ID',langDir:'èªè¨æ¹å',langDirLTR:'ç±å·¦èå³ (LTR)',langDirRTL:'ç±å³èå·¦ (RTL)',acccessKey:'ååéµ',name:'å稱',langCode:'èªè¨æ¹å',tabIndex:'å®ä½é åº',advisoryTitle:'æ¨é¡',advisoryContentType:'å §å®¹é¡å',cssClasses:'樣å¼è¡¨é¡å¥',charset:'é£çµè³æºä¹ç·¨ç¢¼',styles:'樣å¼',rel:'Relationship',selectAnchor:'è«é¸æé¨é»',anchorName:'ä¾é¨é»å稱',anchorId:'ä¾å 件 ID',emailAddress:'é»åéµä»¶',emailSubject:'éµä»¶ä¸»æ¨',emailBody:'éµä»¶å §å®¹',noAnchors:'(æ¬æ件å°ç¡å¯ç¨ä¹é¨é»)',noUrl:'è«è¼¸å ¥æ¬²é£çµç URL',noEmail:'è«è¼¸å ¥é»åéµä»¶ä½å'},anchor:{toolbar:'æå ¥/編輯é¨é»',menu:'é¨é»å±¬æ§',title:'é¨é»å±¬æ§',name:'é¨é»å稱',errorName:'è«è¼¸å ¥é¨é»å稱',remove:'Remove Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'å°æ¾èå代',find:'å°æ¾',replace:'å代',findWhat:'å°æ¾:',replaceWith:'å代:',notFoundMsg:'æªæ¾å°æå®çæåã',matchCase:'大å°å¯«é ç¸ç¬¦',matchWord:'å ¨åç¸ç¬¦',matchCyclic:'循ç°æç´¢',replaceAll:'å ¨é¨å代',replaceSuccessMsg:'å ±å®æ %1 次å代'},table:{toolbar:'è¡¨æ ¼',title:'è¡¨æ ¼å±¬æ§',menu:'è¡¨æ ¼å±¬æ§',deleteTable:'åªé¤è¡¨æ ¼',rows:'åæ¸',columns:'æ¬æ¸',border:'éæ¡',widthPx:'åç´ ',widthPc:'ç¾åæ¯',widthUnit:'width unit',cellSpace:'éè·',cellPad:'å §è·',caption:'æ¨é¡',summary:'æè¦',headers:'æ¨é¡',headersNone:'ç¡æ¨é¡',headersColumn:'第ä¸æ¬',headersRow:'第ä¸å',headersBoth:'第ä¸æ¬å第ä¸å',invalidRows:'å¿ é æä¸ææ´å¤çå',invalidCols:'å¿ é æä¸ææ´å¤çæ¬',invalidBorder:'éæ¡å¤§å°å¿ é çºæ¸åæ ¼å¼',invalidWidth:'è¡¨æ ¼å¯¬åº¦å¿ é çºæ¸åæ ¼å¼',invalidHeight:'è¡¨æ ¼é«åº¦å¿ é çºæ¸åæ ¼å¼',invalidCellSpacing:'å²åæ ¼éè·å¿ é çºæ¸åæ ¼å¼',invalidCellPadding:'å²åæ ¼å §è·å¿ é çºæ¸åæ ¼å¼',cell:{menu:'å²åæ ¼',insertBefore:'åå·¦æå ¥å²åæ ¼',insertAfter:'åå³æå ¥å²åæ ¼',deleteCell:'åªé¤å²åæ ¼',merge:'åä½µå²åæ ¼',mergeRight:'åå³åä½µå²åæ ¼',mergeDown:'åä¸åä½µå²åæ ¼',splitHorizontal:'æ©«ååå²å²åæ ¼',splitVertical:'縱ååå²å²åæ ¼',title:'å²åæ ¼å±¬æ§',cellType:'å²åæ ¼é¡å¥',rowSpan:'å²åæ ¼åæ¸',colSpan:'å²åæ ¼æ¬æ¸',wordWrap:'èªåæè¡',hAlign:'æ°´å¹³å°é½',vAlign:'åç´å°é½',alignBaseline:'åºç·å°é½',bgColor:'èæ¯é¡è²',borderColor:'éæ¡é¡è²',data:'æ¸æ',header:'æ¨é¡',yes:'æ¯',no:'å¦',invalidWidth:'å²åæ ¼å¯¬åº¦å¿ é çºæ¸åæ ¼å¼',invalidHeight:'å²åæ ¼é«åº¦å¿ é çºæ¸åæ ¼å¼',invalidRowSpan:'å²åæ ¼åæ¸å¿ é çºæ´æ¸æ ¼å¼',invalidColSpan:'å²åæ ¼æ¬æ¸åº¦å¿ é çºæ´æ¸æ ¼å¼',chooseColor:'Choose'},row:{menu:'å',insertBefore:'åä¸æå ¥å',insertAfter:'åä¸æå ¥å',deleteRow:'åªé¤å'},column:{menu:'æ¬',insertBefore:'åå·¦æå ¥æ¬',insertAfter:'åå³æå ¥æ¬',deleteColumn:'åªé¤æ¬'}},button:{title:'æé屬æ§',text:'顯示æå (å¼)',type:'é¡å',typeBtn:'æé (Button)',typeSbm:'éåº (Submit)',typeRst:'éè¨ (Reset)'},checkboxAndRadio:{checkboxTitle:'æ ¸åæ¹å¡å±¬æ§',radioTitle:'é¸é æé屬æ§',value:'é¸åå¼',selected:'å·²é¸å'},form:{title:'表å®å±¬æ§',menu:'表å®å±¬æ§',action:'åä½',method:'æ¹æ³',encoding:'表å®ç·¨ç¢¼'},select:{title:'æ¸ å®/é¸å®å±¬æ§',selectInfo:'è³è¨',opAvail:'å¯ç¨é¸é ',value:'å¼',size:'大å°',lines:'è¡',chkMulti:'å¯å¤é¸',opText:'顯示æå',opValue:'é¸åå¼',btnAdd:'æ°å¢',btnModify:'ä¿®æ¹',btnUp:'ä¸ç§»',btnDown:'ä¸ç§»',btnSetValue:'è¨çºé è¨å¼',btnDelete:'åªé¤'},textarea:{title:'æååå屬æ§',cols:'åå 寬度',rows:'åæ¸'},textfield:{title:'æåæ¹å¡å±¬æ§',name:'å稱',value:'å¼',charWidth:'åå 寬度',maxChars:'æå¤åå æ¸',type:'é¡å',typeText:'æå',typePass:'å¯ç¢¼'},hidden:{title:'é±èæ¬ä½å±¬æ§',name:'å稱',value:'å¼'},image:{title:'å½±å屬æ§',titleButton:'å½±åæé屬æ§',menu:'å½±å屬æ§',infoTab:'å½±åè³è¨',btnUpload:'ä¸å³è³ä¼ºæå¨',upload:'ä¸å³',alt:'æ¿ä»£æå',lockRatio:'çæ¯ä¾',resetSize:'éè¨çºå大å°',border:'éæ¡',hSpace:'æ°´å¹³è·é¢',vSpace:'åç´è·é¢',alertUrl:'è«è¼¸å ¥å½±å URL',linkTab:'è¶ é£çµ',button2Img:'è¦æå½±åæéæ¹æå½±ååï¼',img2Button:'è¦æå½±åæ¹æå½±åæéåï¼',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash 屬æ§',propertiesTab:'屬æ§',title:'Flash 屬æ§',chkPlay:'èªåææ¾',chkLoop:'éè¤',chkMenu:'éåé¸å®',chkFull:'ååå ¨è¢å¹é¡¯ç¤º',scale:'縮æ¾',scaleAll:'å ¨é¨é¡¯ç¤º',scaleNoBorder:'ç¡éæ¡',scaleFit:'精確符å',access:'å è¨±è ³æ¬è¨ªå',accessAlways:'æ°¸é ',accessSameDomain:'ç¸ååå',accessNever:'æ°¸ä¸',alignAbsBottom:'çµå°ä¸æ¹',alignAbsMiddle:'çµå°ä¸é',alignBaseline:'åºæºç·',alignTextTop:'æåä¸æ¹',quality:'è³ªç´ ',qualityBest:'æ好',qualityHigh:'é«',qualityAutoHigh:'é«ï¼èªåï¼',qualityMedium:'ä¸ï¼èªåï¼',qualityAutoLow:'ä½ï¼èªåï¼',qualityLow:'ä½',windowModeWindow:'è¦çª',windowModeOpaque:'ä¸éæ',windowModeTransparent:'éæ',windowMode:'è¦çªæ¨¡å¼',flashvars:'Flash è®æ¸',bgcolor:'èæ¯é¡è²',hSpace:'æ°´å¹³è·é¢',vSpace:'åç´è·é¢',validateSrc:'è«è¼¸å ¥æ¬²é£çµç URL',validateHSpace:'æ°´å¹³éè·å¿ é çºæ¸åæ ¼å¼',validateVSpace:'åç´éè·å¿ é çºæ¸åæ ¼å¼'},spellCheck:{toolbar:'æ¼å檢æ¥',title:'æ¼å檢æ¥',notAvailable:'æ±æï¼æåç®åæ«ä¸å¯ç¨',errorLoading:'ç¡æ³è¯ç³»ä¾æå¨: %s.',notInDic:'ä¸å¨åå ¸ä¸',changeTo:'æ´æ¹çº',btnIgnore:'忽ç¥',btnIgnoreAll:'å ¨é¨å¿½ç¥',btnReplace:'å代',btnReplaceAll:'å ¨é¨å代',btnUndo:'復å',noSuggestions:'- ç¡å»ºè°å¼ -',progress:'é²è¡æ¼å檢æ¥ä¸â¦',noMispell:'æ¼å檢æ¥å®æï¼æªç¼ç¾æ¼åé¯èª¤',noChanges:'æ¼å檢æ¥å®æï¼æªæ´æ¹ä»»ä½å®å',oneChange:'æ¼å檢æ¥å®æï¼æ´æ¹äº 1 åå®å',manyChanges:'æ¼å檢æ¥å®æï¼æ´æ¹äº %1 åå®å',ieSpellDownload:'å°æªå®è£æ¼å檢æ¥å 件ãæ¨æ¯å¦æ³è¦ç¾å¨ä¸è¼ï¼'},smiley:{toolbar:'表æ 符è',title:'æå ¥è¡¨æ 符è',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 å ç´ '},numberedlist:'ç·¨èæ¸ å®',bulletedlist:'é ç®æ¸ å®',indent:'å¢å 縮æ',outdent:'æ¸å°ç¸®æ',justify:{left:'é å·¦å°é½',center:'ç½®ä¸',right:'é å³å°é½',block:'å·¦å³å°é½'},blockquote:'å¼ç¨æå',clipboard:{title:'è²¼ä¸',cutError:'ç覽å¨çå®å ¨æ§è¨å®ä¸å 許編輯å¨èªåå·è¡åªä¸åä½ãè«ä½¿ç¨å¿«æ·éµ (Ctrl/Cmd+X) åªä¸ã',copyError:'ç覽å¨çå®å ¨æ§è¨å®ä¸å 許編輯å¨èªåå·è¡è¤è£½åä½ãè«ä½¿ç¨å¿«æ·éµ (Ctrl/Cmd+C) è¤è£½ã',pasteMsg:'è«ä½¿ç¨å¿«æ·éµ (<strong>Ctrl/Cmd+V</strong>) è²¼å°ä¸æ¹ååä¸ä¸¦æä¸ <strong>確å®</strong>',securityMsg:'å çºç覽å¨çå®å ¨æ§è¨å®ï¼æ¬ç·¨è¼¯å¨ç¡æ³ç´æ¥ååæ¨çåªè²¼ç°¿è³æï¼è«æ¨èªè¡å¨æ¬è¦çªé²è¡è²¼ä¸åä½ã',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'æ¨æ³è²¼ä¸çæåä¼¼ä¹æ¯èª Word è¤è£½èä¾ï¼è«åæ¨æ¯å¦è¦å æ¸ é¤ Word çæ ¼å¼å¾åè¡è²¼ä¸ï¼',toolbar:'èª Word è²¼ä¸',title:'èª Word è²¼ä¸',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'è²¼çºç´æåæ ¼å¼',title:'è²¼çºç´æåæ ¼å¼'},templates:{button:'樣ç',title:'å §å®¹æ¨£ç',options:'Template Options',insertOption:'å代åæå §å®¹',selectPromptMsg:'è«é¸æ欲éåç樣ç<br> (åæçå §å®¹å°æè¢«æ¸ é¤):',emptyListMsg:'(ç¡æ¨£ç)'},showBlocks:'顯示åå¡',stylesCombo:{label:'樣å¼',panelTitle:'Formatting Styles',panelTitle1:'å¡ç´å ç´ æ¨£å¼',panelTitle2:'å §è¯å ç´ æ¨£å¼',panelTitle3:'ç©ä»¶å ç´ æ¨£å¼'},format:{label:'æ ¼å¼',panelTitle:'æ ¼å¼',tag_p:'ä¸è¬',tag_pre:'å·²æ ¼å¼å',tag_address:'ä½å',tag_h1:'æ¨é¡ 1',tag_h2:'æ¨é¡ 2',tag_h3:'æ¨é¡ 3',tag_h4:'æ¨é¡ 4',tag_h5:'æ¨é¡ 5',tag_h6:'æ¨é¡ 6',tag_div:'ä¸è¬ (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'IFrame Properties',toolbar:'IFrame',noUrl:'Please type the iframe URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'åé«',voiceLabel:'åé«',panelTitle:'åé«'},fontSize:{label:'大å°',voiceLabel:'æå大å°',panelTitle:'大å°'},colorButton:{textColorTitle:'æåé¡è²',bgColorTitle:'èæ¯é¡è²',panelTitle:'Colors',auto:'èªå',more:'æ´å¤é¡è²â¦'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'å³ææ¼å¯«æª¢æ¥',opera_title:'Not supported by Opera',enable:'åç¨å³ææ¼å¯«æª¢æ¥',disable:'ééå³ææ¼å¯«æª¢æ¥',about:'éæ¼å³ææ¼å¯«æª¢æ¥',toggle:'åç¨ï¼ééå³ææ¼å¯«æª¢æ¥',options:'é¸é ',langs:'èªè¨',moreSuggestions:'æ´å¤æ¼å¯«å»ºè°',ignore:'忽ç¥',ignoreAll:'å ¨é¨å¿½ç¥',addWord:'æ·»å å®è©',emptyDic:'åå ¸åä¸æçºç©º.',optionsTab:'é¸é ',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'èªè¨',dictionariesTab:'åå ¸',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'éæ¼'},about:{title:'éæ¼ CKEditor',dlgTitle:'éæ¼ CKEditor',help:'Check $1 for help.',userGuide:"CKEditor User's Guide",moreInfo:'訪åæåç網ç«ä»¥ç²åæ´å¤éæ¼åè°çä¿¡æ¯',copy:'Copyright © $1. All rights reserved.'},maximize:'æ大å',minimize:'Minimize',fakeobjects:{anchor:'é¨é»',flash:'Flash åç«',iframe:'IFrame',hiddenfield:'Hidden Field',unknown:'ä¸æç©ä»¶'},resize:'ææ½æ¹è®å¤§å°',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',toolbarGroups:{document:'Document',clipboard:'Clipboard/Undo',editing:'Editing',forms:'Forms',basicstyles:'Basic Styles',paragraph:'Paragraph',links:'Links',insert:'Insert',styles:'Styles',colors:'Colors',tools:'Tools'},bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'},docprops:{label:'æ件屬æ§',title:'æ件屬æ§',design:'Design',meta:'Meta è³æ',chooseColor:'Choose',other:'<å ¶ä»>',docTitle:'é é¢æ¨é¡',charset:'åå 編碼',charsetOther:'å ¶ä»åå 編碼',charsetASCII:'ASCII',charsetCE:'ä¸æèªç³»',charsetCT:'æ£é«ä¸æ (Big5)',charsetCR:'æ¯æ夫æ',charsetGR:'å¸èæ',charsetJP:'æ¥æ',charsetKR:'éæ',charsetTR:'åè³å ¶æ',charsetUN:'Unicode (UTF-8)',charsetWE:'西æèªç³»',docType:'æ件é¡å',docTypeOther:'å ¶ä»æ件é¡å',xhtmlDec:'å å« XHTML å®ç¾©',bgColor:'èæ¯é¡è²',bgImage:'èæ¯å½±å',bgFixed:'浮水å°',txtColor:'æåé¡è²',margin:'é é¢éç',marginTop:'ä¸',marginLeft:'å·¦',marginRight:'å³',marginBottom:'ä¸',metaKeywords:'æ件索å¼ééµå (ç¨åå½¢éè[,]åé)',metaDescription:'æ件說æ',metaAuthor:'ä½è ',metaCopyright:'çæ¬ææ',previewHtml:'<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'}}; diff --git a/plugins/a11yhelp/dialogs/a11yhelp.js b/plugins/a11yhelp/dialogs/a11yhelp.js new file mode 100644 index 0000000..933b874 --- /dev/null +++ b/plugins/a11yhelp/dialogs/a11yhelp.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('a11yHelp',function(a){var b=a.lang.accessibilityHelp,c=CKEDITOR.tools.getNextId(),d={8:'BACKSPACE',9:'TAB',13:'ENTER',16:'SHIFT',17:'CTRL',18:'ALT',19:'PAUSE',20:'CAPSLOCK',27:'ESCAPE',33:'PAGE UP',34:'PAGE DOWN',35:'END',36:'HOME',37:'LEFT ARROW',38:'UP ARROW',39:'RIGHT ARROW',40:'DOWN ARROW',45:'INSERT',46:'DELETE',91:'LEFT WINDOW KEY',92:'RIGHT WINDOW KEY',93:'SELECT KEY',96:'NUMPAD 0',97:'NUMPAD 1',98:'NUMPAD 2',99:'NUMPAD 3',100:'NUMPAD 4',101:'NUMPAD 5',102:'NUMPAD 6',103:'NUMPAD 7',104:'NUMPAD 8',105:'NUMPAD 9',106:'MULTIPLY',107:'ADD',109:'SUBTRACT',110:'DECIMAL POINT',111:'DIVIDE',112:'F1',113:'F2',114:'F3',115:'F4',116:'F5',117:'F6',118:'F7',119:'F8',120:'F9',121:'F10',122:'F11',123:'F12',144:'NUM LOCK',145:'SCROLL LOCK',186:'SEMI-COLON',187:'EQUAL SIGN',188:'COMMA',189:'DASH',190:'PERIOD',191:'FORWARD SLASH',192:'GRAVE ACCENT',219:'OPEN BRACKET',220:'BACK SLASH',221:'CLOSE BRAKET',222:'SINGLE QUOTE'};d[CKEDITOR.ALT]='ALT';d[CKEDITOR.SHIFT]='SHIFT';d[CKEDITOR.CTRL]='CTRL';var e=[CKEDITOR.ALT,CKEDITOR.SHIFT,CKEDITOR.CTRL];function f(j){var k,l,m=[];for(var n=0;n<e.length;n++){l=e[n];k=j/e[n];if(k>1&&k<=2){j-=l;m.push(d[l]);}}m.push(d[j]||String.fromCharCode(j));return m.join('+');};var g=/\$\{(.*?)\}/g;function h(j,k){var l=a.config.keystrokes,m,n=l.length;for(var o=0;o<n;o++){m=l[o];if(m[1]==k)break;}return f(m[0]);};function i(){var j='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+c+'_arialbl" tabIndex="-1">%1</div>'+'<span id="'+c+'_arialbl" class="cke_voice_label">'+b.contents+' </span>',k='<h1>%1</h1><dl>%2</dl>',l='<dt>%1</dt><dd>%2</dd>',m=[],n=b.legend,o=n.length;for(var p=0;p<o;p++){var q=n[p],r=[],s=q.items,t=s.length;for(var u=0;u<t;u++){var v=s[u],w;w=l.replace('%1',v.name).replace('%2',v.legend.replace(g,h));r.push(w);}m.push(k.replace('%1',q.name).replace('%2',r.join('')));}return j.replace('%1',m.join(''));};return{title:b.title,minWidth:600,minHeight:400,contents:[{id:'info',label:a.lang.common.generalTab,expand:true,elements:[{type:'html',id:'legends',style:'white-space:normal;',focus:function(){},html:i()+'<style type="text/css">'+'.cke_accessibility_legend'+'{'+'width:600px;'+'height:400px;'+'padding-right:5px;'+'overflow-y:auto;'+'overflow-x:hidden;'+'}'+'.cke_browser_quirks .cke_accessibility_legend,'+'.cke_browser_ie6 .cke_accessibility_legend'+'{'+'height:390px'+'}'+'.cke_accessibility_legend *'+'{'+'white-space:normal;'+'}'+'.cke_accessibility_legend h1'+'{'+'font-size: 20px;'+'border-bottom: 1px solid #AAA;'+'margin: 5px 0px 15px;'+'}'+'.cke_accessibility_legend dl'+'{'+'margin-left: 5px;'+'}'+'.cke_accessibility_legend dt'+'{'+'font-size: 13px;'+'font-weight: bold;'+'}'+'.cke_accessibility_legend dd'+'{'+'margin:10px'+'}'+'</style>'}]}],buttons:[CKEDITOR.dialog.cancelButton]}; +}); diff --git a/plugins/a11yhelp/lang/en.js b/plugins/a11yhelp/lang/en.js new file mode 100644 index 0000000..1019534 --- /dev/null +++ b/plugins/a11yhelp/lang/en.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang('a11yhelp','en',{accessibilityHelp:{title:'Accessibility Instructions',contents:'Help Contents. To close this dialog press ESC.',legend:[{name:'General',items:[{name:'Editor Toolbar',legend:'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.'},{name:'Editor Dialog',legend:'Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page.'},{name:'Editor Context Menu',legend:'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option wtih SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.'},{name:'Editor List Box',legend:'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.'},{name:'Editor Element Path Bar',legend:'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.'}]},{name:'Commands',items:[{name:' Undo command',legend:'Press ${undo}'},{name:' Redo command',legend:'Press ${redo}'},{name:' Bold command',legend:'Press ${bold}'},{name:' Italic command',legend:'Press ${italic}'},{name:' Underline command',legend:'Press ${underline}'},{name:' Link command',legend:'Press ${link}'},{name:' Toolbar Collapse command',legend:'Press ${toolbarCollapse}'},{name:' Accessibility Help',legend:'Press ${a11yHelp}'}]}]}}); diff --git a/plugins/a11yhelp/lang/he.js b/plugins/a11yhelp/lang/he.js new file mode 100644 index 0000000..aaf97f7 --- /dev/null +++ b/plugins/a11yhelp/lang/he.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang('a11yhelp','he',{accessibilityHelp:{title:'××ר××ת × ××ש×ת',contents:'××ר××ת × ××ש×ת. ×ס×××¨× ×××¥ ×סק××פ (ESC).',legend:[{name:'××××',items:[{name:'סר×× ×××××',legend:'×××¥ ×¢× ${toolbarFocus} ××× ×× ××× ×סר×× ×××××. ×¢××ר ××פת×ר ××× ×¢× ×קש ×××× (TAB) ×× ××¥ ש××××. ×¢××ר ××פת×ר ×ק××× ×¢× ×קש ×ש××¤× (SHIFT) + ××× (TAB) ×× ××¥ ××× ×. ×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××פע×× ×ת ××פת×ר ×× ××ר.'},{name:'×××××××× (×××× ×ת תש×××)',legend:'×ת×× ××××××, ×××¥ ××× (TAB) ××× ×× ××× ×ש×× ×××, ×××¥ ש××¤× (SHIFT) + ××× (TAB) ××× ×× ××× ×ש×× ×ק×××, ×××¥ ×× ×ר (ENTER) ××× ×ש××× ×ת ×××××××, ×××¥ ×סק××פ (ESC) ××× ××××. ×ת×× ×××××××× ××¢×× ×ספר ××××× (×ש×× ××ת), ×××¥ ××× (ALT) + F10 ××× ×× ××× ×ש×רת ××××××. × ××× ×××× ××× ×¢× ××× (TAB) ×× ××¥ ש××××. ×¢××ר ×××× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ש××××. ×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××× ×¡ ××××.'},{name:'תפר×× ××קשר (Context Menu)',legend:'×××¥ ${contextMenu} ×× APPLICATION KEY××× ×פת×× ×ת תפר×× ××קשר. ×¢××ר ××פשר×ת ×××× ×¢× ××× (TAB) ×× ××¥ ××××. ×¢××ר ××פשר×ת ×ק×××ת ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ×××¢××. ×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××ר ×ת ××פשר×ת. ×¤×ª× ×ת תת ×תפר×× (Sub-menu) ×©× ××פשר×ת ×× ××××ת ×¢× ×¨××× ×× ×× ×ר (ENTER) ×× ××¥ ש××××. ×××ר ×תפר×× ××× ×¢× ×סק××פ (ESC) ×× ××¥ ש××××. ס××ר ×ת תפר×× ××קשר ×¢× ×סק××פ (ESC).'},{name:'תפר×××× ×¦×¤×× (List boxes)',legend:'×ת×× ×ª×¤×¨×× ×¦×£, ×¢××ר ×פר×× ××× ×¢× ××× (TAB) ×× ××¥ ××××. ×¢××ר ×תפר×× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) or ××¥ ×¢××××. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.'},{name:'×¢×¥ ×××× ××× (Elements Path)',legend:'×××¥ ${elementsPathFocus} ××× ×× ××× ××¢×¥ ××××× ×××. ×¢××ר ×פר×× ××× ×¢× ××× (TAB) ×× ××¥ ××× ×. ×¢××ר ×פר×× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ש××××. ×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××ר ×ת ××××× × ××¢×ר×.'}]},{name:'פק×××ת',items:[{name:' ××××× ×¦×¢× ××ר××',legend:'×××¥ ${undo}'},{name:' ×××¨× ×¢× ×¦×¢× ××ר××',legend:'×××¥ ${redo}'},{name:' ×××ש×',legend:'×××¥ ${bold}'},{name:' ×××××',legend:'×××¥ ${italic}'},{name:' ××ספת ×§× ×ª×ת××',legend:'×××¥ ${underline}'},{name:' ××ספת ××× ×§',legend:'×××¥ ${link}'},{name:' ×××××¥ סר×× ×××××',legend:'×××¥ ${toolbarCollapse}'},{name:' ××ר××ת × ××ש×ת',legend:'×××¥ ${a11yHelp}'}]}]}});CKEDITOR.plugins.setLang('a11yhelp','he',{accessibilityHelp:{title:'××ר××ת × ××ש×ת',contents:'××ר××ת × ××ש×ת. ×ס×××¨× ×××¥ ×סק××פ (ESC).',legend:[{name:'××××',items:[{name:'סר×× ×××××',legend:'×××¥ ×¢× ${toolbarFocus} ××× ×× ××× ×סר×× ×××××. ×¢××ר ××פת×ר ××× ×¢× ×קש ×××× (TAB) ×× ××¥ ש××××. ×¢××ר ××פת×ר ×ק××× ×¢× ×קש ×ש××¤× (SHIFT) + ××× (TAB) ×× ××¥ ××× ×. ×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××פע×× ×ת ××פת×ר ×× ××ר.'},{name:'×××××××× (×××× ×ת תש×××)',legend:'×ת×× ××××××, ×××¥ ××× (TAB) ××× ×× ××× ×ש×× ×××, ×××¥ ש××¤× (SHIFT) + ××× (TAB) ××× ×× ××× ×ש×× ×ק×××, ×××¥ ×× ×ר (ENTER) ××× ×ש××× ×ת ×××××××, ×××¥ ×סק××פ (ESC) ××× ××××. ×ת×× ×××××××× ××¢×× ×ספר ××××× (×ש×× ××ת), ×××¥ ××× (ALT) + F10 ××× ×× ××× ×ש×רת ××××××. × ××× ×××× ××× ×¢× ××× (TAB) ×× ××¥ ש××××. ×¢××ר ×××× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ש××××. ×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××× ×¡ ××××.'},{name:'תפר×× ××קשר (Context Menu)',legend:'×××¥ ${contextMenu} ×× APPLICATION KEY××× ×פת×× ×ת תפר×× ××קשר. ×¢××ר ××פשר×ת ×××× ×¢× ××× (TAB) ×× ××¥ ××××. ×¢××ר ××פשר×ת ×ק×××ת ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ×××¢××. ×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××ר ×ת ××פשר×ת. ×¤×ª× ×ת תת ×תפר×× (Sub-menu) ×©× ××פשר×ת ×× ××××ת ×¢× ×¨××× ×× ×× ×ר (ENTER) ×× ××¥ ש××××. ×××ר ×תפר×× ××× ×¢× ×סק××פ (ESC) ×× ××¥ ש××××. ס××ר ×ת תפר×× ××קשר ×¢× ×סק××פ (ESC).'},{name:'תפר×××× ×¦×¤×× (List boxes)',legend:'×ת×× ×ª×¤×¨×× ×¦×£, ×¢××ר ×פר×× ××× ×¢× ××× (TAB) ×× ××¥ ××××. ×¢××ר ×תפר×× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) or ××¥ ×¢××××. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.'},{name:'×¢×¥ ×××× ××× (Elements Path)',legend:'×××¥ ${elementsPathFocus} ××× ×× ××× ××¢×¥ ××××× ×××. ×¢××ר ×פר×× ××× ×¢× ××× (TAB) ×× ××¥ ××× ×. ×¢××ר ×פר×× ×ק××× ×¢× ×©××¤× (SHIFT) + ××× (TAB) ×× ××¥ ש××××. ×××¥ ר××× ×× ×× ×ר (ENTER) ××× ××××ר ×ת ××××× × ××¢×ר×.'}]},{name:'פק×××ת',items:[{name:' ××××× ×¦×¢× ××ר××',legend:'×××¥ ${undo}'},{name:' ×××¨× ×¢× ×¦×¢× ××ר××',legend:'×××¥ ${redo}'},{name:' ×××ש×',legend:'×××¥ ${bold}'},{name:' ×××××',legend:'×××¥ ${italic}'},{name:' ××ספת ×§× ×ª×ת××',legend:'×××¥ ${underline}'},{name:' ××ספת ××× ×§',legend:'×××¥ ${link}'},{name:' ×××××¥ סר×× ×××××',legend:'×××¥ ${toolbarCollapse}'},{name:' ××ר××ת × ××ש×ת',legend:'×××¥ ${a11yHelp}'}]}]}}); diff --git a/plugins/about/dialogs/about.js b/plugins/about/dialogs/about.js new file mode 100644 index 0000000..eef5614 --- /dev/null +++ b/plugins/about/dialogs/about.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('about',function(a){var b=a.lang.about;return{title:CKEDITOR.env.ie?b.dlgTitle:b.title,minWidth:390,minHeight:230,contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[{type:'html',html:'<style type="text/css">.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+CKEDITOR.plugins.get('about').path+'dialogs/logo_ckeditor.png);'+'background-position:center; '+'background-repeat:no-repeat;'+'margin-bottom:10px;'+'}'+'.cke_about_container a'+'{'+'cursor:pointer !important;'+'color:blue !important;'+'text-decoration:underline !important;'+'}'+'</style>'+'<div class="cke_about_container">'+'<div class="cke_about_logo"></div>'+'<p>'+'CKEditor '+CKEDITOR.version+' (revision '+CKEDITOR.revision+')<br>'+'<a href="http://ckeditor.com/">http://ckeditor.com</a>'+'</p>'+'<p>'+b.help.replace('$1','<a href="http://docs.cksource.com/CKEditor_3.x/Users_Guide/Quick_Reference">'+b.userGuide+'</a>')+'</p>'+'<p>'+b.moreInfo+'<br>'+'<a href="http://ckeditor.com/license">http://ckeditor.com/license</a>'+'</p>'+'<p>'+b.copy.replace('$1','<a href="http://cksource.com/">CKSource</a> - Frederico Knabben')+'</p>'+'</div>'}]}],buttons:[CKEDITOR.dialog.cancelButton]};}); diff --git a/plugins/about/dialogs/logo_ckeditor.png b/plugins/about/dialogs/logo_ckeditor.png new file mode 100644 index 0000000000000000000000000000000000000000..ad0190218c15869fc273b2b5b8e476405bcdab97 GIT binary patch literal 2759 zcmV;&3OMzNP)<h;3K|Lk000e1NJLTq005%^002D*0{{R3_TDLh00090P)t-sCd=sm z|Nn@MjyOC$_xJbo^z@*lrNF|&@9^;O`~9e^tdNzK#_{;q+1cdz{KW3|_5J=_-tn&S z`ThO<@$vE0_51Ps{o(fd`T6-E$mV3)@7VVHS>Eu3>h~qY;_K_{9>?bB=;$)e>7t~h zH_PTS(d**k;-=>Ey6*Q*)$G&r`I6=HTi5NF<ME8`_{Yl1YTfYX=;*cb`ttJf^Yim{ z=Ja4=WY5vkn(6hpySu%<zV`O^5WCxa>Gp_<i{IhlYUA_b_xnNC?OfaM<mBXJ;quDM z%Lla79L408@A>BD=G^%FHq-18yxecu>>bACvhMip?d{C;`g(nScjxs8wbdfY=bG^O zUeoA=+w0cW)|i}~Q{3>5;_<ET_<HE}P}}br!{X5P`+nl`Q`72h;qrOe>)qYmz3}+A z?Dmc3^qb}LHqz^e=JbKz@k!O}k?#0m;qoNP=iuPrD$VH{#N*`U<ru=@RL$fp&gpaD z@e;k<Q&v~P^7-of{rmg-F3;+S?DrMG-xI#w)YQ}?%I8(s?m^4tu(PyP-0($7N-NIk zEzjz0aB&pB-V?sw3%A#=v9S-j+U4cte%<c|v(p>I<8S2i#`OAW)aWS8=#T35k=^U0 z?e|~b@-D>R$@2N<`~9fs^rPzbH`MHa>Gn$5?<&dWSKRNF=JY(&>@U#jG}7xC!s4~+ z^hnX_y7l{~?DkFC?*p;WZRGQL-|-f~;DqG#?Ck8S>h+ZC_c+Afi|O|M{{G<k{6){{ zGsxo;w$yUv^g7h+Fwp8Bz}<-B@{;HDMAz*Oy4el6*>d9YJksj~veInU>JYr!i{S4% z(dw0#m_)|j+S=MX#^62E>}TThgzoru*62&j<UPpY(b3UF)9W9|<_Wgec;fS2(&uB( z<DTdA&G`JS>-Mtf@(Q-reCG6D)ap~)@H@`wB)ivf+wMl#?a}e~vF-O@)#^Rg?V;lC zd)n;D_x#rR{Xf*~Ki2IDwbg*-^RMjomEi6SxY&Z>@u1Wdd;kCkg-Jv~RCr$P+H;IN z+Y$%xt?nLkZQHhO|7_c~ZQJ&>ZQFjf?Yyef+nt`>-fUj(OM33jJ^$=vb~gFsd#0++ zNv{XE|N7<|&vz6QTy$fjbM;Hrw_=}Pw>-m5jm@WDtGaQi<yP#?<%>?7b3fyntl6I9 zuDtxW=UOO6G$y;3(K%sg?tIVfqwf7p)s2=}BGDtojf~A+j~~7NquMhe+bPCN6yvU) zXx!{3#`Aw3Q(8JG_h?1!d`~1QV_YyKL3^X$U+$ilwm!6U?4V~cM$eE@_g;DV50|Pk zf`aDmT!h5HIa(W?cMolxH!m&pa_OLFr5LMc7tB~efCo;H@h+{6Swqo?F<u^<i!sjk zoIksxnE)4K*S+&ki1HW`7}0Lm*!VHUxSqv$f5qctd=W6=rHqV@E-dO<kg|Emml5rc zXl;~YJn1#T3Gigc_gKNKfVo&OiBS||Lz~9N^&&A816*_LWUbV9KJ*K|emyxkg@{LD zG&XuQrlp03mijugekS!DHet5d86b#^<9)R?{wR&@G<ZpUr)qn_3>wtb8dKocM7%vy z<K9!s`VKsbeTPk$s?`9&ulKZXc%;2y@%W`b*VYJ)tnb*fu<wMhLEUxF3cuiY7%|XV zi7_sHaD&E1FV=Um?9!lqt{^yei(fDrvG2@*rxugZp{?=Bv87{kkDi1IEEsm)Spl!_ z3W5hH#)!M%5E1wMNexgGy@SV<7afg&I-ai+0XBRW-_di@+U5et<kA5Iv+%zdVGtYC z&VrCp<7iN~{1qnd+Ih|{w#G{9Z8C0E5w7B;MLgNK1d01$0Hc{R02s}g{mYE>hw0@O z(b&k&J6)^gzBA3fd{H7KGvfsy;@*{}-o$r#en+&8OwqfQ#wAFP1~TeZ0c0c|G7KCV z`(GTGEoM$MX3?OoJ-r6|4qXsppAUi;Pk8(geo3vd4StWtjVt4O5zBbKOa?3|6OA%) zKqFfN8_kk&O$EkyW-?61z9U``rujuJh%zOhu^|jnDaO|0uEhN$aap1<JCEnzh5wte zT<9@EZUyz7^9AzB_6yUG7YvyLlc?_`B~grToplwh;&+3Jk%(oWYBU-wSUv`$XiVp9 z0>_qxdD6}Ja-=~J=>p{IIhzrT0LC8UqwIn(?U;Dax``KrWJnB*@U1+8eJ2&3-ng>0 z<Umrd80*xG_|5DFRii;FpnMf$re6N7Xe>mq>s{d(8`KX$m3$S9vReZqCb7P=4Bo^T zOJ4bx64cG-fr=4{yFt}hND&fsBxmR`%6kn)3ui_**tRhwet^S@cQrag&ftXk1x%K1 z)E*u|G^nSW!f3?AQ;Y|eDM5LBw~BEUucYf0ttX$;laQ8~>toc*Rb;bRjA*nN`rf%- z3!%Q#d=C<(dzQ8GYD0|a0@m~$Q!B>!>c3sTj%6yw9mrgwYSded3VSc3jVqKr`S{v^ z``p)fn%%Psg5|3q-C;%_8UHqHr4jQP5%)O;%&{nskScp^B!$fAZ7k%BAg_@lX|Gj` z6UNb?u7*VEMvWJQnGiERtkSV(?^zgL@+umKE4!om_c5Cx`x?u+d`0i+Z8R%mE3}}o zT*V02*r4{CD90Gle$_O6>4U?lVEi2v<4+$`&Ox5HsTe^-er;o>n(-fOP*3|E^&KM8 zggFG0Hf(VCzt9?QLgK!!2Ac-%k4oggd!63jUJGi*F>Fvz^pj(xlWkHZoh7Ec^}+`f z<KX(AxCR-m%(X}~N=R2@e>Ib?Rx^hFjOVK`#@M;AMIzD#VG_K#XQRVWa)5|`A6)+f zmm`HV^T<`k@0W}c($#2F={*F>SM5FOM!3e>xBW%2V9-b>+tguu@ymDs3kG+({_wB* zo_okrgj~s}L=N1;%Q?NE+QZe253xag@thnZoosPXPl4mFuo&wPAAZB%wMdlbN1JSv zk$O&E0;2lNLaBuch?G8SL1Mqg)ihz&WdO#=h!kVkuy}un#~Amq7~i<>l=?ZmJGw}! z83nS=#VDUC1W*`-ZDdqAQ>Yr9Y{JZf3@OH~Z#w|)O!>4#jFE`<4cGX&LNy!I2?<1u zX`60>q|{;Tyd(A<W;~^_aRzJODUdLFrZ1Q-v^`BHTX9fJ#Ai$z8@pI*+?-;yT1P)6 z77WEG?ld#L_gm1|2=bs73x>s5BK4hTmi^HmKyzb;qJ1+Woorc*@0}78)ZTbe9@LB3 zjan?2$39^b&`pfNQjGFWpFJLLa<gZeiSnREW7zjolicvRYl1wev46Ykv*G_xj4_9% z`?>S;YhSC?{w@DMfbWb?c&`lz5Q=rWoa}5LqqKZ{vU7C0Vj&=4t+%(9#wSo$tV3Dn z!{L#cO*L_G3#AnoS97o_GBUig)0nN(2`JUbxK_~RATT@<c?+jbecv`>)27ea+BCxU z{?w@p7uGaIhCfWq;s9-s9^RB9hA1ORNozz8G45a{MrriP(Fs}^!P}cQI|rSe;o*_E z-3M#f!hLQ+9YyGa8PZm3S~FBNR5nyMv~qHC*w135v5NT?^q%jG{{>TbMQK%m_%Hwf N002ovPDHLkV1f@(614yT literal 0 HcmV?d00001 diff --git a/plugins/adobeair/plugin.js b/plugins/adobeair/plugin.js new file mode 100644 index 0000000..e1d6e8c --- /dev/null +++ b/plugins/adobeair/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=['click','keydown','mousedown','keypress','mouseover','mouseout'];function b(c){var d=c.getElementsByTag('*'),e=d.count(),f;for(var g=0;g<e;g++){f=d.getItem(g);(function(h){for(var i=0;i<a.length;i++)(function(j){var k=h.getAttribute('on'+j);if(h.hasAttribute('on'+j)){h.removeAttribute('on'+j);h.on(j,function(l){var m=/(return\s*)?CKEDITOR\.tools\.callFunction\(([^)]+)\)/.exec(k),n=m&&m[1],o=m&&m[2].split(','),p=/return false;/.test(k);if(o){var q=o.length,r;for(var s=0;s<q;s++){o[s]=r=CKEDITOR.tools.trim(o[s]);var t=r.match(/^(["'])([^"']*?)\1$/);if(t){o[s]=t[2];continue;}if(r.match(/\d+/)){o[s]=parseInt(r,10);continue;}switch(r){case 'this':o[s]=h.$;break;case 'event':o[s]=l.data.$;break;case 'null':o[s]=null;break;}}var u=CKEDITOR.tools.callFunction.apply(window,o);if(n&&u===false)p=1;}if(p)l.data.preventDefault();});}})(a[i]);})(f);}};CKEDITOR.plugins.add('adobeair',{init:function(c){if(!CKEDITOR.env.air)return;c.addCss('body { padding: 8px }');c.on('uiReady',function(){b(c.container);if(c.sharedSpaces)for(var d in c.sharedSpaces)b(c.sharedSpaces[d]);c.on('elementsPathUpdate',function(e){b(e.data.space);});});c.on('contentDom',function(){c.document.on('click',function(d){d.data.preventDefault(true);});});}});CKEDITOR.ui.on('ready',function(c){var d=c.data;if(d._.panel){var e=d._.panel._.panel,f;(function(){if(!e.isLoaded){setTimeout(arguments.callee,30);return;}f=e._.holder;b(f);})();}else if(d instanceof CKEDITOR.dialog)b(d._.element);});})();CKEDITOR.dom.document.prototype.write=CKEDITOR.tools.override(CKEDITOR.dom.document.prototype.write,function(a){function b(c,d,e,f){var g=c.append(d),h=CKEDITOR.htmlParser.fragment.fromHtml(e).children[0].attributes;h&&g.setAttributes(h);f&&g.append(c.getDocument().createText(f));};return function(c,d){if(this.getBody()){var e=this,f=this.getHead();c=c.replace(/(<style[^>]*>)([\s\S]*?)<\/style>/gi,function(g,h,i){b(f,'style',h,i);return '';});c=c.replace(/<base\b[^>]*\/>/i,function(g){b(f,'base',g);return '';});c=c.replace(/<title>([\s\S]*)<\/title>/i,function(g,h){e.$.title=h;return '';});c=c.replace(/<head>([\s\S]*)<\/head>/i,function(g){var h=new CKEDITOR.dom.element('div',e);h.setHtml(g);h.moveChildren(f);return '';});c.replace(/(<body[^>]*>)([\s\S]*)(?=$|<\/body>)/i,function(g,h,i){e.getBody().setHtml(i);var j=CKEDITOR.htmlParser.fragment.fromHtml(h).children[0].attributes;j&&e.getBody().setAttributes(j);});}else a.apply(this,arguments);};}); diff --git a/plugins/ajax/plugin.js b/plugins/ajax/plugin.js new file mode 100644 index 0000000..ff8020b --- /dev/null +++ b/plugins/ajax/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){CKEDITOR.plugins.add('ajax',{requires:['xml']});CKEDITOR.ajax=(function(){var a=function(){if(!CKEDITOR.env.ie||location.protocol!='file:')try{return new XMLHttpRequest();}catch(f){}try{return new ActiveXObject('Msxml2.XMLHTTP');}catch(g){}try{return new ActiveXObject('Microsoft.XMLHTTP');}catch(h){}return null;},b=function(f){return f.readyState==4&&(f.status>=200&&f.status<300||f.status==304||f.status===0||f.status==1223);},c=function(f){if(b(f))return f.responseText;return null;},d=function(f){if(b(f)){var g=f.responseXML;return new CKEDITOR.xml(g&&g.firstChild?g:f.responseText);}return null;},e=function(f,g,h){var i=!!g,j=a();if(!j)return null;j.open('GET',f,i);if(i)j.onreadystatechange=function(){if(j.readyState==4){g(h(j));j=null;}};j.send(null);return i?'':h(j);};return{load:function(f,g){return e(f,g,c);},loadXml:function(f,g){return e(f,g,d);}};})();})(); diff --git a/plugins/autogrow/plugin.js b/plugins/autogrow/plugin.js new file mode 100644 index 0000000..15eb92a --- /dev/null +++ b/plugins/autogrow/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=function(b){if(!b.window)return;var c=b.document,d=b.window.getViewPaneSize().height,e;if(CKEDITOR.env.ie||CKEDITOR.env.gecko)e=c.getBody().$.scrollHeight+(CKEDITOR.env.ie&&CKEDITOR.env.quirks?0:24);else e=c.getDocumentElement().$.offsetHeight;var f=b.config.autoGrow_minHeight,g=b.config.autoGrow_maxHeight;f==undefined&&(b.config.autoGrow_minHeight=f=200);if(f)e=Math.max(e,f);if(g)e=Math.min(e,g);if(e!=d){e=b.fire('autoGrow',{currentHeight:d,newHeight:e}).newHeight;b.resize(b.container.getStyle('width'),e,true);}};CKEDITOR.plugins.add('autogrow',{init:function(b){for(var c in {contentDom:1,key:1,selectionChange:1,insertElement:1})b.on(c,function(d){var e=b.getCommand('maximize');if(d.editor.mode=='wysiwyg'&&(!e||e.state!=CKEDITOR.TRISTATE_ON))setTimeout(function(){a(d.editor);},100);});}});})(); diff --git a/plugins/bbcode/plugin.js b/plugins/bbcode/plugin.js new file mode 100644 index 0000000..8848d92 --- /dev/null +++ b/plugins/bbcode/plugin.js @@ -0,0 +1,9 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){CKEDITOR.on('dialogDefinition',function(r){var s,t=r.data.name,u=r.data.definition;if(t=='link'){u.removeContents('target');u.removeContents('upload');u.removeContents('advanced');s=u.getContents('info');s.remove('emailSubject');s.remove('emailBody');}else if(t=='image'){u.removeContents('advanced');s=u.getContents('Link');s.remove('cmbTarget');s=u.getContents('info');s.remove('txtAlt');s.remove('basic');}});var a={b:'strong',u:'u',i:'em',color:'span',size:'span',quote:'blockquote',code:'code',url:'a',email:'span',img:'span','*':'li',list:'ol'},b={strong:'b',b:'b',u:'u',em:'i',i:'i',code:'code',li:'*'},c={strong:'b',em:'i',u:'u',li:'*',ul:'list',ol:'list',code:'code',a:'link',img:'img',blockquote:'quote'},d={color:'color',size:'font-size'},e={url:'href',email:'mailhref',quote:'cite',list:'listType'},f=CKEDITOR.dtd,g=CKEDITOR.tools.extend({table:1},f.$block,f.$listItem,f.$tableContent,f.$list),h=/\s*(?:;\s*|$)/;function i(r){var s='';for(var t in r){var u=r[t],v=(t+':'+u).replace(h,';');s+=v;}return s;};function j(r){var s={};(r||'').replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(t,u,v){s[u.toLowerCase()]=v;});return s;};function k(r){return r.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(s,t,u,v){t=parseInt(t,10).toString(16);u=parseInt(u,10).toString(16);v=parseInt(v,10).toString(16);var w=[t,u,v];for(var x=0;x<w.length;x++)w[x]=String('0'+w[x]).slice(-2);return '#'+w.join('');});};var l={smiley:':)',sad:':(',wink:';)',laugh:':D',cheeky:':P',blush:':*)',surprise:':-o',indecision:':|',angry:'>:(',angel:'o:)',cool:'8-)',devil:'>:-)',crying:';(',kiss:':-*'},m={},n=[];for(var o in l){m[l[o]]=o;n.push(l[o].replace(/\(|\)|\:|\/|\*|\-|\|/g,function(r){return '\\'+r;}));}n=new RegExp(n.join('|'),'g');var p=(function(){var r=[],s={nbsp:'\xa0',shy:'Â',gt:'>',lt:'<'};for(var t in s)r.push(t);r=new RegExp('&('+r.join('|')+');','g');return function(u){return u.replace(r,function(v,w){return s[w];});};})();CKEDITOR.BBCodeParser=function(){this._={bbcPartsRegex:/(?:\[([^\/\]=]*?)(?:=([^\]]*?))?\])|(?:\[\/([a-z]{1,16})\])/ig};};CKEDITOR.BBCodeParser.prototype={parse:function(r){var B=this;var s,t,u=0;while(s=B._.bbcPartsRegex.exec(r)){var v=s.index;if(v>u){var w=r.substring(u,v);B.onText(w,1);}u=B._.bbcPartsRegex.lastIndex;t=(s[1]||s[3]||'').toLowerCase();if(t&&!a[t]){B.onText(s[0]);continue;}if(s[1]){var x=a[t],y={},z={},A=s[2];if(A){if(t=='list')if(!isNaN(A))A='decimal';else if(/^[a-z]+$/.test(A))A='lower-alpha'; +else if(/^[A-Z]+$/.test(A))A='upper-alpha';if(d[t]){if(t=='size')A+='%';z[d[t]]=A;y.style=i(z);}else if(e[t])y[e[t]]=A;}if(t=='email'||t=='img')y.bbcode=t;B.onTagOpen(x,y,CKEDITOR.dtd.$empty[x]);}else if(s[3])B.onTagClose(a[t]);}if(r.length>u)B.onText(r.substring(u,r.length),1);}};CKEDITOR.htmlParser.fragment.fromBBCode=function(r){var s=new CKEDITOR.BBCodeParser(),t=new CKEDITOR.htmlParser.fragment(),u=[],v=0,w=t,x;function y(D){if(u.length>0)for(var E=0;E<u.length;E++){var F=u[E],G=F.name,H=CKEDITOR.dtd[G],I=w.name&&CKEDITOR.dtd[w.name];if((!I||I[G])&&(!D||!H||H[D]||!CKEDITOR.dtd[D])){F=F.clone();F.parent=w;w=F;u.splice(E,1);E--;}}};function z(D,E){var F=w.children.length,G=F>0&&w.children[F-1],H=!G&&q.getRule(c[w.name],'breakAfterOpen'),I=G&&G.type==CKEDITOR.NODE_ELEMENT&&q.getRule(c[G.name],'breakAfterClose'),J=D&&q.getRule(c[D],E?'breakBeforeClose':'breakBeforeOpen');if(v&&(H||I||J))v--;if(v&&D in g)v++;while(v&&v--)w.children.push(G=new CKEDITOR.htmlParser.element('br'));};function A(D,E){z(D.name,1);E=E||w||t;var F=E.children.length,G=F>0&&E.children[F-1]||null;D.previous=G;D.parent=E;E.children.push(D);if(D.returnPoint){w=D.returnPoint;delete D.returnPoint;}};s.onTagOpen=function(D,E,F){var G=new CKEDITOR.htmlParser.element(D,E);if(CKEDITOR.dtd.$removeEmpty[D]){u.push(G);return;}var H=w.name,I=H&&(CKEDITOR.dtd[H]||(w._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span));if(I&&!I[D]){var J=false,K;if(D==H)A(w,w.parent);else if(D in CKEDITOR.dtd.$listItem){s.onTagOpen('ul',{});K=w;J=true;}else{A(w,w.parent);u.unshift(w);J=true;}if(K)w=K;else w=w.returnPoint||w.parent;if(J){s.onTagOpen.apply(this,arguments);return;}}y(D);z(D);G.parent=w;G.returnPoint=x;x=0;if(G.isEmpty)A(G);else w=G;};s.onTagClose=function(D){for(var E=u.length-1;E>=0;E--){if(D==u[E].name){u.splice(E,1);return;}}var F=[],G=[],H=w;while(H.type&&H.name!=D){if(!H._.isBlockLike)G.unshift(H);F.push(H);H=H.parent;}if(H.type){for(E=0;E<F.length;E++){var I=F[E];A(I,I.parent);}w=H;A(H,H.parent);if(H==w)w=w.parent;u=u.concat(G);}};s.onText=function(D){var E=CKEDITOR.dtd[w.name];if(!E||E['#']){z();y();D.replace(/([\r\n])|[^\r\n]*/g,function(F,G){if(G!==undefined&&G.length)v++;else if(F.length){var H=0;F.replace(n,function(I,J){A(new CKEDITOR.htmlParser.text(F.substring(H,J)),w);A(new CKEDITOR.htmlParser.element('smiley',{desc:m[I]}),w);H=J+I.length;});if(H!=F.length)A(new CKEDITOR.htmlParser.text(F.substring(H,F.length)),w);}});}};s.parse(CKEDITOR.tools.htmlEncode(r));while(w.type){var B=w.parent,C=w; +A(C,B);w=B;}return t;};CKEDITOR.htmlParser.BBCodeWriter=CKEDITOR.tools.createClass({$:function(){var r=this;r._={output:[],rules:[]};r.setRules('list',{breakBeforeOpen:1,breakAfterOpen:1,breakBeforeClose:1,breakAfterClose:1});r.setRules('*',{breakBeforeOpen:1,breakAfterOpen:0,breakBeforeClose:1,breakAfterClose:0});r.setRules('quote',{breakBeforeOpen:1,breakAfterOpen:0,breakBeforeClose:0,breakAfterClose:1});},proto:{setRules:function(r,s){var t=this._.rules[r];if(t)CKEDITOR.tools.extend(t,s,true);else this._.rules[r]=s;},getRule:function(r,s){return this._.rules[r]&&this._.rules[r][s];},openTag:function(r,s){var u=this;if(r in a){if(u.getRule(r,'breakBeforeOpen'))u.lineBreak(1);u.write('[',r);var t=s.option;t&&u.write('=',t);u.write(']');if(u.getRule(r,'breakAfterOpen'))u.lineBreak(1);}else if(r=='br')u._.output.push('\n');},openTagClose:function(){},attribute:function(){},closeTag:function(r){var s=this;if(r in a){if(s.getRule(r,'breakBeforeClose'))s.lineBreak(1);r!='*'&&s.write('[/',r,']');if(s.getRule(r,'breakAfterClose'))s.lineBreak(1);}},text:function(r){this.write(r);},comment:function(){},lineBreak:function(){var r=this;if(!r._.hasLineBreak&&r._.output.length){r.write('\n');r._.hasLineBreak=1;}},write:function(){this._.hasLineBreak=0;var r=Array.prototype.join.call(arguments,'');this._.output.push(r);},reset:function(){this._.output=[];this._.hasLineBreak=0;},getHtml:function(r){var s=this._.output.join('');if(r)this.reset();return p(s);}}});var q=new CKEDITOR.htmlParser.BBCodeWriter();CKEDITOR.plugins.add('bbcode',{requires:['htmldataprocessor','entities'],beforeInit:function(r){var s=r.config;CKEDITOR.tools.extend(s,{enterMode:CKEDITOR.ENTER_BR,basicEntities:false,entities:false,fillEmptyBlocks:false},true);},init:function(r){var s=r.config;function t(v){var w=CKEDITOR.htmlParser.fragment.fromBBCode(v),x=new CKEDITOR.htmlParser.basicWriter();w.writeHtml(x,u);return x.getHtml(true);};var u=new CKEDITOR.htmlParser.filter();u.addRules({elements:{blockquote:function(v){var w=new CKEDITOR.htmlParser.element('div');w.children=v.children;v.children=[w];var x=v.attributes.cite;if(x){var y=new CKEDITOR.htmlParser.element('cite');y.add(new CKEDITOR.htmlParser.text(x.replace(/^"|"$/g,'')));delete v.attributes.cite;v.children.unshift(y);}},span:function(v){var w;if(w=v.attributes.bbcode){if(w=='img'){v.name='img';v.attributes.src=v.children[0].value;v.children=[];}else if(w=='email'){v.name='a';v.attributes.href='mailto:'+v.children[0].value;}delete v.attributes.bbcode; +}},ol:function(v){if(v.attributes.listType){if(v.attributes.listType!='decimal')v.attributes.style='list-style-type:'+v.attributes.listType;}else v.name='ul';delete v.attributes.listType;},a:function(v){if(!v.attributes.href)v.attributes.href=v.children[0].value;},smiley:function(v){v.name='img';var w=v.attributes.desc,x=s.smiley_images[CKEDITOR.tools.indexOf(s.smiley_descriptions,w)],y=CKEDITOR.tools.htmlEncode(s.smiley_path+x);v.attributes={src:y,'data-cke-saved-src':y,title:w,alt:w};}}});r.dataProcessor.htmlFilter.addRules({elements:{$:function(v){var w=v.attributes,x=j(w.style),y,z=v.name;if(z in b)z=b[z];else if(z=='span'){if(y=x.color){z='color';y=k(y);}else if(y=x['font-size']){var A=y.match(/(\d+)%$/);if(A){y=A[1];z='size';}}}else if(z=='ol'||z=='ul'){if(y=x['list-style-type']){switch(y){case 'lower-alpha':y='a';break;case 'upper-alpha':y='A';break;}}else if(z=='ol')y=1;z='list';}else if(z=='blockquote'){try{var B=v.children[0],C=v.children[1],D=B.name=='cite'&&B.children[0].value;if(D){y='"'+D+'"';v.children=C.children;}}catch(G){}z='quote';}else if(z=='a'){if(y=w.href)if(y.indexOf('mailto:')!==-1){z='email';v.children=[new CKEDITOR.htmlParser.text(y.replace('mailto:',''))];y='';}else{var E=v.children.length==1&&v.children[0];if(E&&E.type==CKEDITOR.NODE_TEXT&&E.value==y)y='';z='url';}}else if(z=='img'){v.isEmpty=0;var F=w['data-cke-saved-src'];if(F&&F.indexOf(r.config.smiley_path)!=-1)return new CKEDITOR.htmlParser.text(l[w.alt]);else v.children=[new CKEDITOR.htmlParser.text(F)];}v.name=z;y&&(v.attributes.option=y);return null;},br:function(v){var w=v.next;if(w&&w.name in g)return false;}}},1);r.dataProcessor.writer=q;r.on('beforeSetMode',function(v){v.removeListener();var w=r._.modes.wysiwyg;w.loadData=CKEDITOR.tools.override(w.loadData,function(x){return function(y){return x.call(this,t(y));};});});},afterInit:function(r){var s;if(r._.elementsPath)if(s=r._.elementsPath.filters)s.push(function(t){var u=t.getName(),v=c[u]||false;if(v=='link'&&t.getAttribute('href').indexOf('mailto:')===0)v='email';else if(u=='span'){if(t.getStyle('font-size'))v='size';else if(t.getStyle('color'))v='color';}else if(v=='img'){var w=t.data('cke-saved-src');if(w&&w.indexOf(r.config.smiley_path)===0)v='smiley';}return v;});}});})(); diff --git a/plugins/clipboard/dialogs/paste.js b/plugins/clipboard/dialogs/paste.js new file mode 100644 index 0000000..9af1037 --- /dev/null +++ b/plugins/clipboard/dialogs/paste.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('paste',function(a){var b=a.lang.clipboard,c=CKEDITOR.env.isCustomDomain();function d(e){var f=new CKEDITOR.dom.document(e.document),g=f.$,h=f.getById('cke_actscrpt');h&&h.remove();CKEDITOR.env.ie?g.body.contentEditable='true':g.designMode='on';if(CKEDITOR.env.ie&&CKEDITOR.env.version<8)f.getWindow().on('blur',function(){g.selection.empty();});f.on('keydown',function(i){var j=i.data,k=j.getKeystroke(),l;switch(k){case 27:this.hide();l=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(true);l=1;}l&&j.preventDefault();},this);a.fire('ariaWidget',new CKEDITOR.dom.element(e.frameElement));};return{title:b.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();},onHide:function(){if(CKEDITOR.env.ie)this.getParentEditor().document.getBody().$.contentEditable='true';},onLoad:function(){if((CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&a.lang.dir=='rtl')this.parts.contents.setStyle('overflow','hidden');},onOk:function(){this.commitContent();},contents:[{id:'general',label:a.lang.common.generalTab,elements:[{type:'html',id:'securityMsg',html:'<div style="white-space:normal;width:340px;">'+b.securityMsg+'</div>'},{type:'html',id:'pasteMsg',html:'<div style="white-space:normal;width:340px;">'+b.pasteMsg+'</div>'},{type:'html',id:'editing_area',style:'width: 100%; height: 100%;',html:'',focus:function(){var e=this.getInputElement().$.contentWindow;setTimeout(function(){e.focus();},500);},setup:function(){var e=this.getDialog(),f='<html dir="'+a.config.contentsLangDirection+'"'+' lang="'+(a.config.contentsLanguage||a.langCode)+'">'+'<head><style>body { margin: 3px; height: 95%; } </style></head><body>'+'<script id="cke_actscrpt" type="text/javascript">'+'window.parent.CKEDITOR.tools.callFunction( '+CKEDITOR.tools.addFunction(d,e)+', this );'+'</script></body>'+'</html>',g=CKEDITOR.env.air?'javascript:void(0)':c?"javascript:void((function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})())"':'',h=CKEDITOR.dom.element.createFromHtml('<iframe class="cke_pasteframe" frameborder="0" allowTransparency="true" src="'+g+'"'+' role="region"'+' aria-label="'+b.pasteArea+'"'+' aria-describedby="'+e.getContentElement('general','pasteMsg').domId+'"'+' aria-multiple="true"'+'></iframe>');h.on('load',function(k){k.removeListener();var l=h.getFrameDocument();l.write(f);if(CKEDITOR.env.air)d.call(this,l.getWindow().$); +},e);h.setCustomData('dialog',e);var i=this.getElement();i.setHtml('');i.append(h);if(CKEDITOR.env.ie){var j=CKEDITOR.dom.element.createFromHtml('<span tabindex="-1" style="position:absolute;" role="presentation"></span>');j.on('focus',function(){h.$.contentWindow.focus();});i.append(j);this.focus=function(){j.focus();this.fire('focus');};}this.getInputElement=function(){return h;};if(CKEDITOR.env.ie){i.setStyle('display','block');i.setStyle('height',h.$.offsetHeight+2+'px');}},commit:function(e){var f=this.getElement(),g=this.getDialog().getParentEditor(),h=this.getInputElement().getFrameDocument().getBody(),i=h.getBogus(),j;i&&i.remove();j=h.getHtml();setTimeout(function(){g.fire('paste',{html:j});},0);}}]}]};}); diff --git a/plugins/colordialog/dialogs/colordialog.js b/plugins/colordialog/dialogs/colordialog.js new file mode 100644 index 0000000..9ebcb62 --- /dev/null +++ b/plugins/colordialog/dialogs/colordialog.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('colordialog',function(a){var b=CKEDITOR.dom.element,c=CKEDITOR.document,d=CKEDITOR.tools,e=a.lang.colordialog,f,g={type:'html',html:' '};function h(){c.getById(x).removeStyle('background-color');f.getContentElement('picker','selectedColor').setValue('');};function i(z){if(!(z instanceof CKEDITOR.dom.event))z=new CKEDITOR.dom.event(z);var A=z.getTarget(),B;if(A.getName()=='a'&&(B=A.getChild(0).getHtml()))f.getContentElement('picker','selectedColor').setValue(B);};function j(z){if(!(z instanceof CKEDITOR.dom.event))z=z.data;var A=z.getTarget(),B;if(A.getName()=='a'&&(B=A.getChild(0).getHtml())){c.getById(v).setStyle('background-color',B);c.getById(w).setHtml(B);}};function k(){c.getById(v).removeStyle('background-color');c.getById(w).setHtml(' ');};var l=d.addFunction(k),m=i,n=CKEDITOR.tools.addFunction(m),o=j,p=k,q=CKEDITOR.tools.addFunction(function(z){z=new CKEDITOR.dom.event(z);var A=z.getTarget(),B,C,D=z.getKeystroke(),E=a.lang.dir=='rtl';switch(D){case 38:if(B=A.getParent().getParent().getPrevious()){C=B.getChild([A.getParent().getIndex(),0]);C.focus();p(z,A);o(z,C);}z.preventDefault();break;case 40:if(B=A.getParent().getParent().getNext()){C=B.getChild([A.getParent().getIndex(),0]);if(C&&C.type==1){C.focus();p(z,A);o(z,C);}}z.preventDefault();break;case 32:m(z);z.preventDefault();break;case E?37:39:if(B=A.getParent().getNext()){C=B.getChild(0);if(C.type==1){C.focus();p(z,A);o(z,C);z.preventDefault(true);}else p(null,A);}else if(B=A.getParent().getParent().getNext()){C=B.getChild([0,0]);if(C&&C.type==1){C.focus();p(z,A);o(z,C);z.preventDefault(true);}else p(null,A);}break;case E?39:37:if(B=A.getParent().getPrevious()){C=B.getChild(0);C.focus();p(z,A);o(z,C);z.preventDefault(true);}else if(B=A.getParent().getParent().getPrevious()){C=B.getLast().getChild(0);C.focus();p(z,A);o(z,C);z.preventDefault(true);}else p(null,A);break;default:return;}});function r(){var z=['00','33','66','99','cc','ff'];function A(F,G){for(var H=F;H<F+3;H++){var I=s.$.insertRow(-1);for(var J=G;J<G+3;J++)for(var K=0;K<6;K++)B(I,'#'+z[J]+z[K]+z[H]);}};function B(F,G){var H=new b(F.insertCell(-1));H.setAttribute('class','ColorCell');H.setStyle('background-color',G);H.setStyle('width','15px');H.setStyle('height','15px');var I=H.$.cellIndex+1+18*F.rowIndex;H.append(CKEDITOR.dom.element.createFromHtml('<a href="javascript: void(0);" role="option" aria-posinset="'+I+'"'+' aria-setsize="'+234+'"'+' style="cursor: pointer;display:block;width:100%;height:100% " title="'+CKEDITOR.tools.htmlEncode(G)+'"'+' onkeydown="CKEDITOR.tools.callFunction( '+q+', event, this )"'+' onclick="CKEDITOR.tools.callFunction('+n+', event, this ); return false;"'+' tabindex="-1"><span class="cke_voice_label">'+G+'</span> </a>',CKEDITOR.document)); +};A(0,0);A(3,0);A(0,3);A(3,3);var C=s.$.insertRow(-1);for(var D=0;D<6;D++)B(C,'#'+z[D]+z[D]+z[D]);for(var E=0;E<12;E++)B(C,'#000000');};var s=new b('table');r();var t=s.getHtml(),u=function(z){return CKEDITOR.tools.getNextId()+'_'+z;},v=u('hicolor'),w=u('hicolortext'),x=u('selhicolor'),y=u('color_table_label');return{title:e.title,minWidth:360,minHeight:220,onLoad:function(){f=this;},contents:[{id:'picker',label:e.title,accessKey:'I',elements:[{type:'hbox',padding:0,widths:['70%','10%','30%'],children:[{type:'html',html:'<table role="listbox" aria-labelledby="'+y+'" onmouseout="CKEDITOR.tools.callFunction( '+l+' );">'+(!CKEDITOR.env.webkit?t:'')+'</table><span id="'+y+'" class="cke_voice_label">'+e.options+'</span>',onLoad:function(){var z=CKEDITOR.document.getById(this.domId);z.on('mouseover',j);CKEDITOR.env.webkit&&z.setHtml(t);},focus:function(){var z=this.getElement().getElementsByTag('a').getItem(0);z.focus();}},g,{type:'vbox',padding:0,widths:['70%','5%','25%'],children:[{type:'html',html:'<span>'+e.highlight+'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+v+'" style="border: 1px solid; height: 74px; width: 74px;"></div>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+w+'"> </div><span>'+e.selected+'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+x+'" style="border: 1px solid; height: 20px; width: 74px;"></div>'},{type:'text',label:e.selected,labelStyle:'display:none',id:'selectedColor',style:'width: 74px',onChange:function(){try{c.getById(x).setStyle('background-color',this.getValue());}catch(z){h();}}},g,{type:'button',id:'clear',style:'margin-top: 5px',label:e.clear,onClick:h}]}]}]}]};}); diff --git a/plugins/devtools/lang/en.js b/plugins/devtools/lang/en.js new file mode 100644 index 0000000..7ebce7e --- /dev/null +++ b/plugins/devtools/lang/en.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang('devtools','en',{devTools:{title:'Element Information',dialogName:'Dialog window name',tabName:'Tab name',elementId:'Element ID',elementType:'Element type'}}); diff --git a/plugins/devtools/plugin.js b/plugins/devtools/plugin.js new file mode 100644 index 0000000..141d914 --- /dev/null +++ b/plugins/devtools/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add('devtools',{lang:['en'],init:function(a){a._.showDialogDefinitionTooltips=1;},onLoad:function(){CKEDITOR.document.appendStyleText(CKEDITOR.config.devtools_styles||'#cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff }#cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; }#cke_tooltip ul { padding: 0pt; list-style-type: none; }');}});(function(){function a(d,e,f,g){var h=d.lang.devTools,i='<a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.'+(f?f.type=='text'?'textInput':f.type:'content')+'.html" target="_blank">'+(f?f.type:'content')+'</a>',j='<h2>'+h.title+'</h2>'+'<ul>'+'<li><strong>'+h.dialogName+'</strong> : '+e.getName()+'</li>'+'<li><strong>'+h.tabName+'</strong> : '+g+'</li>';if(f)j+='<li><strong>'+h.elementId+'</strong> : '+f.id+'</li>';j+='<li><strong>'+h.elementType+'</strong> : '+i+'</li>';return j+'</ul>';};function b(d,e,f,g,h,i){var j=e.getDocumentPosition(),k={'z-index':CKEDITOR.dialog._.currentZIndex+10,top:j.y+e.getSize('height')+'px'};c.setHtml(d(f,g,h,i));c.show();if(f.lang.dir=='rtl'){var l=CKEDITOR.document.getWindow().getViewPaneSize();k.right=l.width-j.x-e.getSize('width')+'px';}else k.left=j.x+'px';c.setStyles(k);};var c;CKEDITOR.on('reset',function(){c&&c.remove();c=null;});CKEDITOR.on('dialogDefinition',function(d){var e=d.editor;if(e._.showDialogDefinitionTooltips){if(!c){c=CKEDITOR.dom.element.createFromHtml('<div id="cke_tooltip" tabindex="-1" style="position: absolute"></div>',CKEDITOR.document);c.hide();c.on('mouseover',function(){this.show();});c.on('mouseout',function(){this.hide();});c.appendTo(CKEDITOR.document.getBody());}var f=d.data.definition.dialog,g=e.config.devtools_textCallback||a;f.on('load',function(){var h=f.parts.tabs.getChildren(),i;for(var j=0,k=h.count();j<k;j++){i=h.getItem(j);i.on('mouseover',function(){var l=this.$.id;b(g,this,e,f,null,l.substring(4,l.lastIndexOf('_')));});i.on('mouseout',function(){c.hide();});}f.foreach(function(l){if(l.type in {hbox:1,vbox:1})return;var m=l.getElement();if(m){m.on('mouseover',function(){b(g,this,e,f,l,f._.currentTabId);});m.on('mouseout',function(){c.hide();});}});});}});})(); diff --git a/plugins/dialog/dialogDefinition.js b/plugins/dialog/dialogDefinition.js new file mode 100644 index 0000000..c501932 --- /dev/null +++ b/plugins/dialog/dialogDefinition.js @@ -0,0 +1,4 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ diff --git a/plugins/div/dialogs/div.js b/plugins/div/dialogs/div.js new file mode 100644 index 0000000..80fde5d --- /dev/null +++ b/plugins/div/dialogs/div.js @@ -0,0 +1,8 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){function a(d,e,f){if(!e.is||!e.getCustomData('block_processed')){e.is&&CKEDITOR.dom.element.setMarker(f,e,'block_processed',true);d.push(e);}};function b(d){var e=[],f=d.getChildren();for(var g=0;g<f.count();g++){var h=f.getItem(g);if(!(h.type===CKEDITOR.NODE_TEXT&&/^[ \t\n\r]+$/.test(h.getText())))e.push(h);}return e;};function c(d,e){var f=(function(){var p=CKEDITOR.tools.extend({},CKEDITOR.dtd.$blockLimit);delete p.div;if(d.config.div_wrapTable){delete p.td;delete p.th;}return p;})(),g=CKEDITOR.dtd.div;function h(p){var q=new CKEDITOR.dom.elementPath(p).elements,r;for(var s=0;s<q.length;s++){if(q[s].getName() in f){r=q[s];break;}}return r;};function i(){this.foreach(function(p){if(/^(?!vbox|hbox)/.test(p.type)){if(!p.setup)p.setup=function(q){p.setValue(q.getAttribute(p.id)||'');};if(!p.commit)p.commit=function(q){var r=this.getValue();if('dir'==p.id&&q.getComputedStyle('direction')==r)return;if(r)q.setAttribute(p.id,r);else q.removeAttribute(p.id);};}});};function j(p){var q=[],r={},s=[],t,u=p.document.getSelection(),v=u.getRanges(),w=u.createBookmarks(),x,y,z=p.config.enterMode==CKEDITOR.ENTER_DIV?'div':'p';for(x=0;x<v.length;x++){y=v[x].createIterator();while(t=y.getNextParagraph()){if(t.getName() in f){var A,B=t.getChildren();for(A=0;A<B.count();A++)a(s,B.getItem(A),r);}else{while(!g[t.getName()]&&t.getName()!='body')t=t.getParent();a(s,t,r);}}}CKEDITOR.dom.element.clearAllMarkers(r);var C=l(s),D,E,F;for(x=0;x<C.length;x++){var G=C[x][0];D=G.getParent();for(A=1;A<C[x].length;A++)D=D.getCommonAncestor(C[x][A]);F=new CKEDITOR.dom.element('div',p.document);for(A=0;A<C[x].length;A++){G=C[x][A];while(!G.getParent().equals(D))G=G.getParent();C[x][A]=G;}var H=null;for(A=0;A<C[x].length;A++){G=C[x][A];if(!(G.getCustomData&&G.getCustomData('block_processed'))){G.is&&CKEDITOR.dom.element.setMarker(r,G,'block_processed',true);if(!A)F.insertBefore(G);F.append(G);}}CKEDITOR.dom.element.clearAllMarkers(r);q.push(F);}u.selectBookmarks(w);return q;};function k(p){var q=new CKEDITOR.dom.elementPath(p.getSelection().getStartElement()),r=q.blockLimit,s=r&&r.getAscendant('div',true);return s;};function l(p){var q=[],r=null,s,t;for(var u=0;u<p.length;u++){t=p[u];var v=h(t);if(!v.equals(r)){r=v;q.push([]);}q[q.length-1].push(t);}return q;};function m(p){var q=this.getDialog(),r=q._element&&q._element.clone()||new CKEDITOR.dom.element('div',d.document);this.commit(r,true);p=[].concat(p);var s=p.length,t;for(var u=0;u<s;u++){t=q.getContentElement.apply(q,p[u].split(':')); +t&&t.setup&&t.setup(r,true);}};var n={},o=[];return{title:d.lang.div.title,minWidth:400,minHeight:165,contents:[{id:'info',label:d.lang.common.generalTab,title:d.lang.common.generalTab,elements:[{type:'hbox',widths:['50%','50%'],children:[{id:'elementStyle',type:'select',style:'width: 100%;',label:d.lang.div.styleSelectLabel,'default':'',items:[[d.lang.common.notSet,'']],onChange:function(){m.call(this,['info:class','advanced:dir','advanced:style']);},setup:function(p){for(var q in n)n[q].checkElementRemovable(p,true)&&this.setValue(q);},commit:function(p){var q;if(q=this.getValue()){var r=n[q],s=p.getCustomData('elementStyle')||'';r.applyToObject(p);p.setCustomData('elementStyle',s+r._.definition.attributes.style);}}},{id:'class',type:'text',label:d.lang.common.cssClass,'default':''}]}]},{id:'advanced',label:d.lang.common.advancedTab,title:d.lang.common.advancedTab,elements:[{type:'vbox',padding:1,children:[{type:'hbox',widths:['50%','50%'],children:[{type:'text',id:'id',label:d.lang.common.id,'default':''},{type:'text',id:'lang',label:d.lang.link.langCode,'default':''}]},{type:'hbox',children:[{type:'text',id:'style',style:'width: 100%;',label:d.lang.common.cssStyle,'default':'',commit:function(p){var q=this.getValue()+(p.getCustomData('elementStyle')||'');p.setAttribute('style',q);}}]},{type:'hbox',children:[{type:'text',id:'title',style:'width: 100%;',label:d.lang.common.advisoryTitle,'default':''}]},{type:'select',id:'dir',style:'width: 100%;',label:d.lang.common.langDir,'default':'',items:[[d.lang.common.notSet,''],[d.lang.common.langDirLtr,'ltr'],[d.lang.common.langDirRtl,'rtl']]}]}]}],onLoad:function(){i.call(this);var p=this,q=this.getContentElement('info','elementStyle');d.getStylesSet(function(r){var s;if(r)for(var t=0;t<r.length;t++){var u=r[t];if(u.element&&u.element=='div'){s=u.name;n[s]=new CKEDITOR.style(u);q.items.push([s,s]);q.add(s,s);}}q[q.items.length>1?'enable':'disable']();setTimeout(function(){q.setup(p._element);},0);});},onShow:function(){if(e=='editdiv'){var p=k(d);p&&this.setupContent(this._element=p);}},onOk:function(){if(e=='editdiv')o=[this._element];else o=j(d,true);var p=o.length;for(var q=0;q<p;q++){this.commitContent(o[q]);!o[q].getAttribute('style')&&o[q].removeAttribute('style');}this.hide();},onHide:function(){if(e=='editdiv')this._element.removeCustomData('elementStyle');delete this._element;}};};CKEDITOR.dialog.add('creatediv',function(d){return c(d,'creatediv');});CKEDITOR.dialog.add('editdiv',function(d){return c(d,'editdiv'); +});})(); diff --git a/plugins/docprops/dialogs/docprops.js b/plugins/docprops/dialogs/docprops.js new file mode 100644 index 0000000..a5ecc94 --- /dev/null +++ b/plugins/docprops/dialogs/docprops.js @@ -0,0 +1,10 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('docProps',function(a){var b=a.lang.docprops,c=a.lang.common,d={};function e(n,o){var p=function(){q(this);o(this,this._.parentDialog);},q=function(s){s.removeListener('ok',p);s.removeListener('cancel',q);},r=function(s){s.on('ok',p);s.on('cancel',q);};a.execCommand(n);if(a._.storedDialogs.colordialog)r(a._.storedDialogs.colordialog);else CKEDITOR.on('dialogDefinition',function(s){if(s.data.name!=n)return;var t=s.data.definition;s.removeListener();t.onLoad=CKEDITOR.tools.override(t.onLoad,function(u){return function(){r(this);t.onLoad=u;if(typeof u=='function')u.call(this);};});});};function f(){var n=this.getDialog(),o=n.getContentElement('general',this.id+'Other');if(!o)return;if(this.getValue()=='other'){o.getInputElement().removeAttribute('readOnly');o.focus();o.getElement().removeClass('cke_disabled');}else{o.getInputElement().setAttribute('readOnly',true);o.getElement().addClass('cke_disabled');}};function g(n,o,p){return function(q,r,s){var t=d,u=typeof p!='undefined'?p:this.getValue();if(!u&&n in t)t[n].remove();else if(u&&n in t)t[n].setAttribute('content',u);else if(u){var v=new CKEDITOR.dom.element('meta',a.document);v.setAttribute(o?'http-equiv':'name',n);v.setAttribute('content',u);s.append(v);}};};function h(n,o){return function(){var p=d,q=n in p?p[n].getAttribute('content')||'':'';if(o)return q;this.setValue(q);return null;};};function i(n){return function(o,p,q,r){r.removeAttribute('margin'+n);var s=this.getValue();if(s!=='')r.setStyle('margin-'+n,CKEDITOR.tools.cssLength(s));else r.removeStyle('margin-'+n);};};function j(n){var o={},p=n.getElementsByTag('meta'),q=p.count();for(var r=0;r<q;r++){var s=p.getItem(r);o[s.getAttribute(s.hasAttribute('http-equiv')?'http-equiv':'name').toLowerCase()]=s;}return o;};function k(n,o,p){n.removeStyle(o);if(n.getComputedStyle(o)!=p)n.setStyle(o,p);};var l=function(n,o,p){return{type:'hbox',padding:0,widths:['60%','40%'],children:[CKEDITOR.tools.extend({type:'text',id:n,label:b[o]},p||{},1),{type:'button',id:n+'Choose',label:b.chooseColor,className:'colorChooser',onClick:function(){var q=this;e('colordialog',function(r){var s=q.getDialog();s.getContentElement(s._.currentTabId,n).setValue(r.getContentElement('picker','selectedColor').getValue());});}}]};},m='javascript:void((function(){'+encodeURIComponent('document.open();'+(CKEDITOR.env.isCustomDomain()?"document.domain='"+document.domain+"';":'')+'document.write( \'<html style="background-color: #ffffff; height: 100%"><head></head><body style="width: 100%; height: 100%; margin: 0px">'+b.previewHtml+"</body></html>' );"+'document.close();')+'})())'; +return{title:b.title,minHeight:330,minWidth:500,onShow:function(){var n=a.document,o=n.getElementsByTag('html').getItem(0),p=n.getHead(),q=n.getBody();d=j(n);this.setupContent(n,o,p,q);},onHide:function(){d={};},onOk:function(){var n=a.document,o=n.getElementsByTag('html').getItem(0),p=n.getHead(),q=n.getBody();this.commitContent(n,o,p,q);},contents:[{id:'general',label:c.generalTab,elements:[{type:'text',id:'title',label:b.docTitle,setup:function(n){this.setValue(n.getElementsByTag('title').getItem(0).data('cke-title'));},commit:function(n,o,p,q,r){if(r)return;n.getElementsByTag('title').getItem(0).data('cke-title',this.getValue());}},{type:'hbox',children:[{type:'select',id:'dir',label:c.langDir,style:'width: 100%',items:[[c.notSet,''],[c.langDirLtr,'ltr'],[c.langDirRtl,'rtl']],setup:function(n,o,p,q){this.setValue(q.getDirection()||'');},commit:function(n,o,p,q){var r=this.getValue();if(r)q.setAttribute('dir',r);else q.removeAttribute('dir');q.removeStyle('direction');}},{type:'text',id:'langCode',label:c.langCode,setup:function(n,o){this.setValue(o.getAttribute('xml:lang')||o.getAttribute('lang')||'');},commit:function(n,o,p,q,r){if(r)return;var s=this.getValue();if(s)o.setAttributes({'xml:lang':s,lang:s});else o.removeAttributes({'xml:lang':1,lang:1});}}]},{type:'hbox',children:[{type:'select',id:'charset',label:b.charset,style:'width: 100%',items:[[c.notSet,''],[b.charsetASCII,'us-ascii'],[b.charsetCE,'iso-8859-2'],[b.charsetCT,'big5'],[b.charsetCR,'iso-8859-5'],[b.charsetGR,'iso-8859-7'],[b.charsetJP,'iso-2022-jp'],[b.charsetKR,'iso-2022-kr'],[b.charsetTR,'iso-8859-9'],[b.charsetUN,'utf-8'],[b.charsetWE,'iso-8859-1'],[b.other,'other']],'default':'',onChange:function(){var n=this;n.getDialog().selectedCharset=n.getValue()!='other'?n.getValue():'';f.call(n);},setup:function(){var q=this;q.metaCharset='charset' in d;var n=h(q.metaCharset?'charset':'content-type',1,1),o=n.call(q);!q.metaCharset&&o.match(/charset=[^=]+$/)&&(o=o.substring(o.indexOf('=')+1));if(o){q.setValue(o.toLowerCase());if(!q.getValue()){q.setValue('other');var p=q.getDialog().getContentElement('general','charsetOther');p&&p.setValue(o);}q.getDialog().selectedCharset=o;}f.call(q);},commit:function(n,o,p,q,r){var v=this;if(r)return;var s=v.getValue(),t=v.getDialog().getContentElement('general','charsetOther');s=='other'&&(s=t?t.getValue():'');s&&!v.metaCharset&&(s=(d['content-type']?d['content-type'].getAttribute('content').split(';')[0]:'text/html')+'; charset='+s);var u=g(v.metaCharset?'charset':'content-type',1,s); +u.call(v,n,o,p);}},{type:'text',id:'charsetOther',label:b.charsetOther,onChange:function(){this.getDialog().selectedCharset=this.getValue();}}]},{type:'hbox',children:[{type:'select',id:'docType',label:b.docType,style:'width: 100%',items:[[c.notSet,''],['XHTML 1.1','<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'],['XHTML 1.0 Transitional','<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'],['XHTML 1.0 Strict','<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'],['XHTML 1.0 Frameset','<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'],['HTML 5','<!DOCTYPE html>'],['HTML 4.01 Transitional','<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'],['HTML 4.01 Strict','<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'],['HTML 4.01 Frameset','<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'],['HTML 3.2','<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'],['HTML 2.0','<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'],[b.other,'other']],onChange:f,setup:function(){var o=this;if(a.docType){o.setValue(a.docType);if(!o.getValue()){o.setValue('other');var n=o.getDialog().getContentElement('general','docTypeOther');n&&n.setValue(a.docType);}}f.call(o);},commit:function(n,o,p,q,r){if(r)return;var s=this.getValue(),t=this.getDialog().getContentElement('general','docTypeOther');a.docType=s=='other'?t?t.getValue():'':s;}},{type:'text',id:'docTypeOther',label:b.docTypeOther}]},{type:'checkbox',id:'xhtmlDec',label:b.xhtmlDec,setup:function(){this.setValue(!!a.xmlDeclaration);},commit:function(n,o,p,q,r){if(r)return;if(this.getValue()){a.xmlDeclaration='<?xml version="1.0" encoding="'+(this.getDialog().selectedCharset||'utf-8')+'"?>';o.setAttribute('xmlns','http://www.w3.org/1999/xhtml');}else{a.xmlDeclaration='';o.removeAttribute('xmlns');}}}]},{id:'design',label:b.design,elements:[{type:'hbox',widths:['60%','40%'],children:[{type:'vbox',children:[l('txtColor','txtColor',{setup:function(n,o,p,q){this.setValue(q.getComputedStyle('color'));},commit:function(n,o,p,q,r){if(this.isChanged()||r){q.removeAttribute('text');var s=this.getValue();if(s)q.setStyle('color',s);else q.removeStyle('color');}}}),l('bgColor','bgColor',{setup:function(n,o,p,q){var r=q.getComputedStyle('background-color')||''; +this.setValue(r=='transparent'?'':r);},commit:function(n,o,p,q,r){if(this.isChanged()||r){q.removeAttribute('bgcolor');var s=this.getValue();if(s)q.setStyle('background-color',s);else k(q,'background-color','transparent');}}}),{type:'hbox',widths:['60%','40%'],padding:1,children:[{type:'text',id:'bgImage',label:b.bgImage,setup:function(n,o,p,q){var r=q.getComputedStyle('background-image')||'';if(r=='none')r='';else r=r.replace(/url\(\s*(["']?)\s*([^\)]*)\s*\1\s*\)/i,function(s,t,u){return u;});this.setValue(r);},commit:function(n,o,p,q){q.removeAttribute('background');var r=this.getValue();if(r)q.setStyle('background-image','url('+r+')');else k(q,'background-image','none');}},{type:'button',id:'bgImageChoose',label:c.browseServer,style:'display:inline-block;margin-top:10px;',hidden:true,filebrowser:'design:bgImage'}]},{type:'checkbox',id:'bgFixed',label:b.bgFixed,setup:function(n,o,p,q){this.setValue(q.getComputedStyle('background-attachment')=='fixed');},commit:function(n,o,p,q){if(this.getValue())q.setStyle('background-attachment','fixed');else k(q,'background-attachment','scroll');}}]},{type:'vbox',children:[{type:'html',id:'marginTitle',html:'<div style="text-align: center; margin: 0px auto; font-weight: bold">'+b.margin+'</div>'},{type:'text',id:'marginTop',label:b.marginTop,style:'width: 80px; text-align: center; margin: 0px auto',inputStyle:'text-align: center',setup:function(n,o,p,q){this.setValue(q.getStyle('margin-top')||q.getAttribute('margintop')||'');},commit:i('top'),onLoad:function(){this.getElement().getParent().setStyle('text-align','center');}},{type:'hbox',children:[{type:'text',id:'marginLeft',label:b.marginLeft,style:'width: 80px; text-align: center; margin: 0px auto',inputStyle:'text-align: center',setup:function(n,o,p,q){this.setValue(q.getStyle('margin-left')||q.getAttribute('marginleft')||'');},commit:i('left'),onLoad:function(){this.getElement().getParent().setStyle('text-align','center');}},{type:'text',id:'marginRight',label:b.marginRight,style:'width: 80px; text-align: center; margin: 0px auto',inputStyle:'text-align: center',setup:function(n,o,p,q){this.setValue(q.getStyle('margin-right')||q.getAttribute('marginright')||'');},commit:i('right'),onLoad:function(){this.getElement().getParent().setStyle('text-align','center');}}]},{type:'text',id:'marginBottom',label:b.marginBottom,style:'width: 80px; text-align: center; margin: 0px auto',inputStyle:'text-align: center',setup:function(n,o,p,q){this.setValue(q.getStyle('margin-bottom')||q.getAttribute('marginbottom')||''); +},commit:i('bottom'),onLoad:function(){this.getElement().getParent().setStyle('text-align','center');}}]}]}]},{id:'meta',label:b.meta,elements:[{type:'textarea',id:'metaKeywords',label:b.metaKeywords,setup:h('keywords'),commit:g('keywords')},{type:'textarea',id:'metaDescription',label:b.metaDescription,setup:h('description'),commit:g('description')},{type:'text',id:'metaAuthor',label:b.metaAuthor,setup:h('author'),commit:g('author')},{type:'text',id:'metaCopyright',label:b.metaCopyright,setup:h('copyright'),commit:g('copyright')}]},{id:'preview',label:c.preview,elements:[{type:'html',id:'previewHtml',html:'<iframe src="'+m+'" style="width: 100%; height: 310px" hidefocus="true" frameborder="0" '+'id="cke_docProps_preview_iframe"></iframe>',onLoad:function(){this.getDialog().on('selectPage',function(n){if(n.data.page=='preview'){var o=this;setTimeout(function(){var p=CKEDITOR.document.getById('cke_docProps_preview_iframe').getFrameDocument(),q=p.getElementsByTag('html').getItem(0),r=p.getHead(),s=p.getBody();o.commitContent(p,q,r,s,1);},50);}});CKEDITOR.document.getById('cke_docProps_preview_iframe').getAscendant('table').setStyle('height','100%');}}]}]};}); diff --git a/plugins/docprops/plugin.js b/plugins/docprops/plugin.js new file mode 100644 index 0000000..0869d98 --- /dev/null +++ b/plugins/docprops/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add('docprops',{init:function(a){var b=new CKEDITOR.dialogCommand('docProps');b.modes={wysiwyg:a.config.fullPage};a.addCommand('docProps',b);CKEDITOR.dialog.add('docProps',this.path+'dialogs/docprops.js');a.ui.addButton('DocProps',{label:a.lang.docprops.label,command:'docProps'});}}); diff --git a/plugins/find/dialogs/find.js b/plugins/find/dialogs/find.js new file mode 100644 index 0000000..6fac7c1 --- /dev/null +++ b/plugins/find/dialogs/find.js @@ -0,0 +1,10 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a;function b(i){return i.type==CKEDITOR.NODE_TEXT&&i.getLength()>0&&(!a||!i.isReadOnly());};function c(i){return!(i.type==CKEDITOR.NODE_ELEMENT&&i.isBlockBoundary(CKEDITOR.tools.extend({},CKEDITOR.dtd.$empty,CKEDITOR.dtd.$nonEditable)));};var d=function(){var i=this;return{textNode:i.textNode,offset:i.offset,character:i.textNode?i.textNode.getText().charAt(i.offset):null,hitMatchBoundary:i._.matchBoundary};},e=['find','replace'],f=[['txtFindFind','txtFindReplace'],['txtFindCaseChk','txtReplaceCaseChk'],['txtFindWordChk','txtReplaceWordChk'],['txtFindCyclic','txtReplaceCyclic']];function g(i){var j,k,l,m;j=i==='find'?1:0;k=1-j;var n,o=f.length;for(n=0;n<o;n++){l=this.getContentElement(e[j],f[n][j]);m=this.getContentElement(e[k],f[n][k]);m.setValue(l.getValue());}};var h=function(i,j){var k=new CKEDITOR.style(CKEDITOR.tools.extend({fullMatch:true,childRule:function(){return 0;}},i.config.find_highlight)),l=function(y,z){var A=this,B=new CKEDITOR.dom.walker(y);B.guard=z?c:function(C){!c(C)&&(A._.matchBoundary=true);};B.evaluator=b;B.breakOnFalse=1;if(y.startContainer.type==CKEDITOR.NODE_TEXT){this.textNode=y.startContainer;this.offset=y.startOffset-1;}this._={matchWord:z,walker:B,matchBoundary:false};};l.prototype={next:function(){return this.move();},back:function(){return this.move(true);},move:function(y){var A=this;var z=A.textNode;if(z===null)return d.call(A);A._.matchBoundary=false;if(z&&y&&A.offset>0){A.offset--;return d.call(A);}else if(z&&A.offset<z.getLength()-1){A.offset++;return d.call(A);}else{z=null;while(!z){z=A._.walker[y?'previous':'next'].call(A._.walker);if(A._.matchWord&&!z||A._.walker._.end)break;}A.textNode=z;if(z)A.offset=y?z.getLength()-1:0;else A.offset=0;}return d.call(A);}};var m=function(y,z){this._={walker:y,cursors:[],rangeLength:z,highlightRange:null,isMatched:0};};m.prototype={toDomRange:function(){var y=new CKEDITOR.dom.range(i.document),z=this._.cursors;if(z.length<1){var A=this._.walker.textNode;if(A)y.setStartAfter(A);else return null;}else{var B=z[0],C=z[z.length-1];y.setStart(B.textNode,B.offset);y.setEnd(C.textNode,C.offset+1);}return y;},updateFromDomRange:function(y){var B=this;var z,A=new l(y);B._.cursors=[];do{z=A.next();if(z.character)B._.cursors.push(z);}while(z.character);B._.rangeLength=B._.cursors.length;},setMatched:function(){this._.isMatched=true;},clearMatched:function(){this._.isMatched=false;},isMatched:function(){return this._.isMatched;},highlight:function(){var B=this;if(B._.cursors.length<1)return; +if(B._.highlightRange)B.removeHighlight();var y=B.toDomRange(),z=y.createBookmark();k.applyToRange(y);y.moveToBookmark(z);B._.highlightRange=y;var A=y.startContainer;if(A.type!=CKEDITOR.NODE_ELEMENT)A=A.getParent();A.scrollIntoView();B.updateFromDomRange(y);},removeHighlight:function(){var z=this;if(!z._.highlightRange)return;var y=z._.highlightRange.createBookmark();k.removeFromRange(z._.highlightRange);z._.highlightRange.moveToBookmark(y);z.updateFromDomRange(z._.highlightRange);z._.highlightRange=null;},isReadOnly:function(){if(!this._.highlightRange)return 0;return this._.highlightRange.startContainer.isReadOnly();},moveBack:function(){var A=this;var y=A._.walker.back(),z=A._.cursors;if(y.hitMatchBoundary)A._.cursors=z=[];z.unshift(y);if(z.length>A._.rangeLength)z.pop();return y;},moveNext:function(){var A=this;var y=A._.walker.next(),z=A._.cursors;if(y.hitMatchBoundary)A._.cursors=z=[];z.push(y);if(z.length>A._.rangeLength)z.shift();return y;},getEndCharacter:function(){var y=this._.cursors;if(y.length<1)return null;return y[y.length-1].character;},getNextCharacterRange:function(y){var z,A,B=this._.cursors;if((z=B[B.length-1])&&z.textNode)A=new l(n(z));else A=this._.walker;return new m(A,y);},getCursors:function(){return this._.cursors;}};function n(y,z){var A=new CKEDITOR.dom.range();A.setStart(y.textNode,z?y.offset:y.offset+1);A.setEndAt(i.document.getBody(),CKEDITOR.POSITION_BEFORE_END);return A;};function o(y){var z=new CKEDITOR.dom.range();z.setStartAt(i.document.getBody(),CKEDITOR.POSITION_AFTER_START);z.setEnd(y.textNode,y.offset);return z;};var p=0,q=1,r=2,s=function(y,z){var A=[-1];if(z)y=y.toLowerCase();for(var B=0;B<y.length;B++){A.push(A[B]+1);while(A[B+1]>0&&y.charAt(B)!=y.charAt(A[B+1]-1))A[B+1]=A[A[B+1]-1]+1;}this._={overlap:A,state:0,ignoreCase:!!z,pattern:y};};s.prototype={feedCharacter:function(y){var z=this;if(z._.ignoreCase)y=y.toLowerCase();for(;;){if(y==z._.pattern.charAt(z._.state)){z._.state++;if(z._.state==z._.pattern.length){z._.state=0;return r;}return q;}else if(!z._.state)return p;else z._.state=z._.overlap[z._.state];}return null;},reset:function(){this._.state=0;}};var t=/[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/,u=function(y){if(!y)return true;var z=y.charCodeAt(0);return z>=9&&z<=13||z>=8192&&z<=8202||t.test(y);},v={searchRange:null,matchRange:null,find:function(y,z,A,B,C,D){var M=this;if(!M.matchRange)M.matchRange=new m(new l(M.searchRange),y.length);else{M.matchRange.removeHighlight();M.matchRange=M.matchRange.getNextCharacterRange(y.length); +}var E=new s(y,!z),F=p,G='%';while(G!==null){M.matchRange.moveNext();while(G=M.matchRange.getEndCharacter()){F=E.feedCharacter(G);if(F==r)break;if(M.matchRange.moveNext().hitMatchBoundary)E.reset();}if(F==r){if(A){var H=M.matchRange.getCursors(),I=H[H.length-1],J=H[0],K=new l(o(J),true),L=new l(n(I),true);if(!(u(K.back().character)&&u(L.next().character)))continue;}M.matchRange.setMatched();if(C!==false)M.matchRange.highlight();return true;}}M.matchRange.clearMatched();M.matchRange.removeHighlight();if(B&&!D){M.searchRange=w(1);M.matchRange=null;return arguments.callee.apply(M,Array.prototype.slice.call(arguments).concat([true]));}return false;},replaceCounter:0,replace:function(y,z,A,B,C,D,E){var J=this;a=1;var F=0;if(J.matchRange&&J.matchRange.isMatched()&&!J.matchRange._.isReplaced&&!J.matchRange.isReadOnly()){J.matchRange.removeHighlight();var G=J.matchRange.toDomRange(),H=i.document.createText(A);if(!E){var I=i.getSelection();I.selectRanges([G]);i.fire('saveSnapshot');}G.deleteContents();G.insertNode(H);if(!E){I.selectRanges([G]);i.fire('saveSnapshot');}J.matchRange.updateFromDomRange(G);if(!E)J.matchRange.highlight();J.matchRange._.isReplaced=true;J.replaceCounter++;F=1;}else F=J.find(z,B,C,D,!E);a=0;return F;}};function w(y){var z,A=i.getSelection(),B=i.document.getBody();if(A&&!y){z=A.getRanges()[0].clone();z.collapse(true);}else{z=new CKEDITOR.dom.range();z.setStartAt(B,CKEDITOR.POSITION_AFTER_START);}z.setEndAt(B,CKEDITOR.POSITION_BEFORE_END);return z;};var x=i.lang.findAndReplace;return{title:x.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:350,minHeight:170,buttons:[CKEDITOR.dialog.cancelButton],contents:[{id:'find',label:x.find,title:x.find,accessKey:'',elements:[{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtFindFind',label:x.findWhat,isChanged:false,labelLayout:'horizontal',accessKey:'F'},{type:'button',id:'btnFind',align:'left',style:'width:100%',label:x.find,onClick:function(){var y=this.getDialog();if(!v.find(y.getValueOf('find','txtFindFind'),y.getValueOf('find','txtFindCaseChk'),y.getValueOf('find','txtFindWordChk'),y.getValueOf('find','txtFindCyclic')))alert(x.notFoundMsg);}}]},{type:'vbox',padding:0,children:[{type:'checkbox',id:'txtFindCaseChk',isChanged:false,style:'margin-top:28px',label:x.matchCase},{type:'checkbox',id:'txtFindWordChk',isChanged:false,label:x.matchWord},{type:'checkbox',id:'txtFindCyclic',isChanged:false,'default':true,label:x.matchCyclic}]}]},{id:'replace',label:x.replace,accessKey:'M',elements:[{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtFindReplace',label:x.findWhat,isChanged:false,labelLayout:'horizontal',accessKey:'F'},{type:'button',id:'btnFindReplace',align:'left',style:'width:100%',label:x.replace,onClick:function(){var y=this.getDialog(); +if(!v.replace(y,y.getValueOf('replace','txtFindReplace'),y.getValueOf('replace','txtReplace'),y.getValueOf('replace','txtReplaceCaseChk'),y.getValueOf('replace','txtReplaceWordChk'),y.getValueOf('replace','txtReplaceCyclic')))alert(x.notFoundMsg);}}]},{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtReplace',label:x.replaceWith,isChanged:false,labelLayout:'horizontal',accessKey:'R'},{type:'button',id:'btnReplaceAll',align:'left',style:'width:100%',label:x.replaceAll,isChanged:false,onClick:function(){var y=this.getDialog(),z;v.replaceCounter=0;v.searchRange=w(1);if(v.matchRange){v.matchRange.removeHighlight();v.matchRange=null;}i.fire('saveSnapshot');while(v.replace(y,y.getValueOf('replace','txtFindReplace'),y.getValueOf('replace','txtReplace'),y.getValueOf('replace','txtReplaceCaseChk'),y.getValueOf('replace','txtReplaceWordChk'),false,true)){}if(v.replaceCounter){alert(x.replaceSuccessMsg.replace(/%1/,v.replaceCounter));i.fire('saveSnapshot');}else alert(x.notFoundMsg);}}]},{type:'vbox',padding:0,children:[{type:'checkbox',id:'txtReplaceCaseChk',isChanged:false,label:x.matchCase},{type:'checkbox',id:'txtReplaceWordChk',isChanged:false,label:x.matchWord},{type:'checkbox',id:'txtReplaceCyclic',isChanged:false,'default':true,label:x.matchCyclic}]}]}],onLoad:function(){var y=this,z,A,B=0;this.on('hide',function(){B=0;});this.on('show',function(){B=1;});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(C){return function(D){C.call(y,D);var E=y._.tabs[D],F,G,H;G=D==='find'?'txtFindFind':'txtFindReplace';H=D==='find'?'txtFindWordChk':'txtReplaceWordChk';z=y.getContentElement(D,G);A=y.getContentElement(D,H);if(!E.initialized){F=CKEDITOR.document.getById(z._.inputId);E.initialized=true;}if(B)g.call(this,D);};});},onShow:function(){var B=this;v.searchRange=w();var y=B.getParentEditor().getSelection().getSelectedText(),z=j=='find'?'txtFindFind':'txtFindReplace',A=B.getContentElement(j,z);A.setValue(y);A.select();B.selectPage(j);B[(j=='find'&&B._.editor.readOnly?'hide':'show')+'Page']('replace');},onHide:function(){var y;if(v.matchRange&&v.matchRange.isMatched()){v.matchRange.removeHighlight();i.focus();y=v.matchRange.toDomRange();if(y)i.getSelection().selectRanges([y]);}delete v.matchRange;},onFocus:function(){if(j=='replace')return this.getContentElement('replace','txtFindReplace');else return this.getContentElement('find','txtFindFind');}};};CKEDITOR.dialog.add('find',function(i){return h(i,'find');});CKEDITOR.dialog.add('replace',function(i){return h(i,'replace'); +});})(); diff --git a/plugins/flash/dialogs/flash.js b/plugins/flash/dialogs/flash.js new file mode 100644 index 0000000..ffaeb45 --- /dev/null +++ b/plugins/flash/dialogs/flash.js @@ -0,0 +1,9 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=1,b=2,c=4,d={id:[{type:a,name:'id'}],classid:[{type:a,name:'classid'}],codebase:[{type:a,name:'codebase'}],pluginspage:[{type:c,name:'pluginspage'}],src:[{type:b,name:'movie'},{type:c,name:'src'},{type:a,name:'data'}],name:[{type:c,name:'name'}],align:[{type:a,name:'align'}],title:[{type:a,name:'title'},{type:c,name:'title'}],'class':[{type:a,name:'class'},{type:c,name:'class'}],width:[{type:a,name:'width'},{type:c,name:'width'}],height:[{type:a,name:'height'},{type:c,name:'height'}],hSpace:[{type:a,name:'hSpace'},{type:c,name:'hSpace'}],vSpace:[{type:a,name:'vSpace'},{type:c,name:'vSpace'}],style:[{type:a,name:'style'},{type:c,name:'style'}],type:[{type:c,name:'type'}]},e=['play','loop','menu','quality','scale','salign','wmode','bgcolor','base','flashvars','allowScriptAccess','allowFullScreen'];for(var f=0;f<e.length;f++)d[e[f]]=[{type:c,name:e[f]},{type:b,name:e[f]}];e=['allowFullScreen','play','loop','menu'];for(f=0;f<e.length;f++)d[e[f]][0]['default']=d[e[f]][1]['default']=true;var g=CKEDITOR.tools.cssLength;function h(j,k,l){var r=this;var m=d[r.id];if(!m)return;var n=r instanceof CKEDITOR.ui.dialog.checkbox;for(var o=0;o<m.length;o++){var p=m[o];switch(p.type){case a:if(!j)continue;if(j.getAttribute(p.name)!==null){var q=j.getAttribute(p.name);if(n)r.setValue(q.toLowerCase()=='true');else r.setValue(q);return;}else if(n)r.setValue(!!p['default']);break;case b:if(!j)continue;if(p.name in l){q=l[p.name];if(n)r.setValue(q.toLowerCase()=='true');else r.setValue(q);return;}else if(n)r.setValue(!!p['default']);break;case c:if(!k)continue;if(k.getAttribute(p.name)){q=k.getAttribute(p.name);if(n)r.setValue(q.toLowerCase()=='true');else r.setValue(q);return;}else if(n)r.setValue(!!p['default']);}}};function i(j,k,l){var t=this;var m=d[t.id];if(!m)return;var n=t.getValue()==='',o=t instanceof CKEDITOR.ui.dialog.checkbox;for(var p=0;p<m.length;p++){var q=m[p];switch(q.type){case a:if(!j||q.name=='data'&&k&&!j.hasAttribute('data'))continue;var r=t.getValue();if(n||o&&r===q['default'])j.removeAttribute(q.name);else j.setAttribute(q.name,r);break;case b:if(!j)continue;r=t.getValue();if(n||o&&r===q['default']){if(q.name in l)l[q.name].remove();}else if(q.name in l)l[q.name].setAttribute('value',r);else{var s=CKEDITOR.dom.element.createFromHtml('<cke:param></cke:param>',j.getDocument());s.setAttributes({name:q.name,value:r});if(j.getChildCount()<1)s.appendTo(j);else s.insertBefore(j.getFirst());}break;case c:if(!k)continue;r=t.getValue();if(n||o&&r===q['default'])k.removeAttribute(q.name); +else k.setAttribute(q.name,r);}}};CKEDITOR.dialog.add('flash',function(j){var k=!j.config.flashEmbedTagOnly,l=j.config.flashAddEmbedTag||j.config.flashEmbedTagOnly,m,n='<div>'+CKEDITOR.tools.htmlEncode(j.lang.common.preview)+'<br>'+'<div id="cke_FlashPreviewLoader'+CKEDITOR.tools.getNextNumber()+'" style="display:none"><div class="loading"> </div></div>'+'<div id="cke_FlashPreviewBox'+CKEDITOR.tools.getNextNumber()+'" class="FlashPreviewBox"></div></div>';return{title:j.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){var A=this;A.fakeImage=A.objectNode=A.embedNode=null;m=new CKEDITOR.dom.element('embed',j.document);var o=A.getSelectedElement();if(o&&o.data('cke-real-element-type')&&o.data('cke-real-element-type')=='flash'){A.fakeImage=o;var p=j.restoreRealElement(o),q=null,r=null,s={};if(p.getName()=='cke:object'){q=p;var t=q.getElementsByTag('embed','cke');if(t.count()>0)r=t.getItem(0);var u=q.getElementsByTag('param','cke');for(var v=0,w=u.count();v<w;v++){var x=u.getItem(v),y=x.getAttribute('name'),z=x.getAttribute('value');s[y]=z;}}else if(p.getName()=='cke:embed')r=p;A.objectNode=q;A.embedNode=r;A.setupContent(q,r,s,o);}},onOk:function(){var y=this;var o=null,p=null,q=null;if(!y.fakeImage){if(k){o=CKEDITOR.dom.element.createFromHtml('<cke:object></cke:object>',j.document);var r={classid:'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',codebase:'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'};o.setAttributes(r);}if(l){p=CKEDITOR.dom.element.createFromHtml('<cke:embed></cke:embed>',j.document);p.setAttributes({type:'application/x-shockwave-flash',pluginspage:'http://www.macromedia.com/go/getflashplayer'});if(o)p.appendTo(o);}}else{o=y.objectNode;p=y.embedNode;}if(o){q={};var s=o.getElementsByTag('param','cke');for(var t=0,u=s.count();t<u;t++)q[s.getItem(t).getAttribute('name')]=s.getItem(t);}var v={},w={};y.commitContent(o,p,q,v,w);var x=j.createFakeElement(o||p,'cke_flash','flash',true);x.setAttributes(w);x.setStyles(v);if(y.fakeImage){x.replace(y.fakeImage);j.getSelection().selectElement(x);}else j.insertElement(x);},onHide:function(){if(this.preview)this.preview.setHtml('');},contents:[{id:'info',label:j.lang.common.generalTab,accessKey:'I',elements:[{type:'vbox',padding:0,children:[{type:'hbox',widths:['280px','110px'],align:'right',children:[{id:'src',type:'text',label:j.lang.common.url,required:true,validate:CKEDITOR.dialog.validate.notEmpty(j.lang.flash.validateSrc),setup:h,commit:i,onLoad:function(){var o=this.getDialog(),p=function(q){m.setAttribute('src',q); +o.preview.setHtml('<embed height="100%" width="100%" src="'+CKEDITOR.tools.htmlEncode(m.getAttribute('src'))+'" type="application/x-shockwave-flash"></embed>');};o.preview=o.getContentElement('info','preview').getElement().getChild(3);this.on('change',function(q){if(q.data&&q.data.value)p(q.data.value);});this.getInputElement().on('change',function(q){p(this.getValue());},this);}},{type:'button',id:'browse',filebrowser:'info:src',hidden:true,style:'display:inline-block;margin-top:10px;',label:j.lang.common.browseServer}]}]},{type:'hbox',widths:['25%','25%','25%','25%','25%'],children:[{type:'text',id:'width',style:'width:95px',label:j.lang.common.width,validate:CKEDITOR.dialog.validate.htmlLength(j.lang.common.invalidHtmlLength.replace('%1',j.lang.common.width)),setup:h,commit:i},{type:'text',id:'height',style:'width:95px',label:j.lang.common.height,validate:CKEDITOR.dialog.validate.htmlLength(j.lang.common.invalidHtmlLength.replace('%1',j.lang.common.height)),setup:h,commit:i},{type:'text',id:'hSpace',style:'width:95px',label:j.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(j.lang.flash.validateHSpace),setup:h,commit:i},{type:'text',id:'vSpace',style:'width:95px',label:j.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(j.lang.flash.validateVSpace),setup:h,commit:i}]},{type:'vbox',children:[{type:'html',id:'preview',style:'width:95%;',html:n}]}]},{id:'Upload',hidden:true,filebrowser:'uploadButton',label:j.lang.common.upload,elements:[{type:'file',id:'upload',label:j.lang.common.upload,size:38},{type:'fileButton',id:'uploadButton',label:j.lang.common.uploadSubmit,filebrowser:'info:src','for':['Upload','upload']}]},{id:'properties',label:j.lang.flash.propertiesTab,elements:[{type:'hbox',widths:['50%','50%'],children:[{id:'scale',type:'select',label:j.lang.flash.scale,'default':'',style:'width : 100%;',items:[[j.lang.common.notSet,''],[j.lang.flash.scaleAll,'showall'],[j.lang.flash.scaleNoBorder,'noborder'],[j.lang.flash.scaleFit,'exactfit']],setup:h,commit:i},{id:'allowScriptAccess',type:'select',label:j.lang.flash.access,'default':'',style:'width : 100%;',items:[[j.lang.common.notSet,''],[j.lang.flash.accessAlways,'always'],[j.lang.flash.accessSameDomain,'samedomain'],[j.lang.flash.accessNever,'never']],setup:h,commit:i}]},{type:'hbox',widths:['50%','50%'],children:[{id:'wmode',type:'select',label:j.lang.flash.windowMode,'default':'',style:'width : 100%;',items:[[j.lang.common.notSet,''],[j.lang.flash.windowModeWindow,'window'],[j.lang.flash.windowModeOpaque,'opaque'],[j.lang.flash.windowModeTransparent,'transparent']],setup:h,commit:i},{id:'quality',type:'select',label:j.lang.flash.quality,'default':'high',style:'width : 100%;',items:[[j.lang.common.notSet,''],[j.lang.flash.qualityBest,'best'],[j.lang.flash.qualityHigh,'high'],[j.lang.flash.qualityAutoHigh,'autohigh'],[j.lang.flash.qualityMedium,'medium'],[j.lang.flash.qualityAutoLow,'autolow'],[j.lang.flash.qualityLow,'low']],setup:h,commit:i}]},{type:'hbox',widths:['50%','50%'],children:[{id:'align',type:'select',label:j.lang.common.align,'default':'',style:'width : 100%;',items:[[j.lang.common.notSet,''],[j.lang.common.alignLeft,'left'],[j.lang.flash.alignAbsBottom,'absBottom'],[j.lang.flash.alignAbsMiddle,'absMiddle'],[j.lang.flash.alignBaseline,'baseline'],[j.lang.common.alignBottom,'bottom'],[j.lang.common.alignMiddle,'middle'],[j.lang.common.alignRight,'right'],[j.lang.flash.alignTextTop,'textTop'],[j.lang.common.alignTop,'top']],setup:h,commit:function(o,p,q,r,s){var t=this.getValue(); +i.apply(this,arguments);t&&(s.align=t);}},{type:'html',html:'<div></div>'}]},{type:'fieldset',label:CKEDITOR.tools.htmlEncode(j.lang.flash.flashvars),children:[{type:'vbox',padding:0,children:[{type:'checkbox',id:'menu',label:j.lang.flash.chkMenu,'default':true,setup:h,commit:i},{type:'checkbox',id:'play',label:j.lang.flash.chkPlay,'default':true,setup:h,commit:i},{type:'checkbox',id:'loop',label:j.lang.flash.chkLoop,'default':true,setup:h,commit:i},{type:'checkbox',id:'allowFullScreen',label:j.lang.flash.chkFull,'default':true,setup:h,commit:i}]}]}]},{id:'advanced',label:j.lang.common.advancedTab,elements:[{type:'hbox',widths:['45%','55%'],children:[{type:'text',id:'id',label:j.lang.common.id,setup:h,commit:i},{type:'text',id:'title',label:j.lang.common.advisoryTitle,setup:h,commit:i}]},{type:'hbox',widths:['45%','55%'],children:[{type:'text',id:'bgcolor',label:j.lang.flash.bgcolor,setup:h,commit:i},{type:'text',id:'class',label:j.lang.common.cssClass,setup:h,commit:i}]},{type:'text',id:'style',label:j.lang.common.cssStyle,setup:h,commit:i}]}]};});})(); diff --git a/plugins/flash/images/placeholder.png b/plugins/flash/images/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc6caa7a6abca57d3f1e1376fbd5067d5cd66d0 GIT binary patch literal 256 zcmV+b0ssDqP)<h;3K|Lk000e1NJLTq0027x000{Z0{{R3^;ZYC0000pP)t-s|1&fH z0093YBL5K)|3pOph=~8Hs{h^H|95x)|NsB)?*F^H|CyQpRaO6KY5&a3|7K?7O*3i$ z004+dL_t(|UhS1h3d1lA05y`=to{FMYthhL3R!xL=OW8^BpD2rg}W?5y$g?VySw5@ zHQR&&rG*^8rux|zhTrb&VRu!<+Q~qwO1|Vy#7J~Ec>4p_Nnh8Sn%0^H2yKmXs_)2F ztJy_}S7x3Wy+9bua($h3aU$x8vL^9#zi)q&hjjO!f8h;)*e}{WeFK#M0000<MNUMn GLSTaQZFZ3W literal 0 HcmV?d00001 diff --git a/plugins/forms/dialogs/button.js b/plugins/forms/dialogs/button.js new file mode 100644 index 0000000..819faf9 --- /dev/null +++ b/plugins/forms/dialogs/button.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('button',function(a){function b(c){var e=this;var d=e.getValue();if(d){c.attributes[e.id]=d;if(e.id=='name')c.attributes['data-cke-saved-name']=d;}else{delete c.attributes[e.id];if(e.id=='name')delete c.attributes['data-cke-saved-name'];}};return{title:a.lang.button.title,minWidth:350,minHeight:150,onShow:function(){var e=this;delete e.button;var c=e.getParentEditor().getSelection().getSelectedElement();if(c&&c.is('input')){var d=c.getAttribute('type');if(d in {button:1,reset:1,submit:1}){e.button=c;e.setupContent(c);}}},onOk:function(){var c=this.getParentEditor(),d=this.button,e=!d,f=d?CKEDITOR.htmlParser.fragment.fromHtml(d.getOuterHtml()).children[0]:new CKEDITOR.htmlParser.element('input');this.commitContent(f);var g=new CKEDITOR.htmlParser.basicWriter();f.writeHtml(g);var h=CKEDITOR.dom.element.createFromHtml(g.getHtml(),c.document);if(e)c.insertElement(h);else{h.replace(d);c.getSelection().selectElement(h);}},contents:[{id:'info',label:a.lang.button.title,title:a.lang.button.title,elements:[{id:'name',type:'text',label:a.lang.common.name,'default':'',setup:function(c){this.setValue(c.data('cke-saved-name')||c.getAttribute('name')||'');},commit:b},{id:'value',type:'text',label:a.lang.button.text,accessKey:'V','default':'',setup:function(c){this.setValue(c.getAttribute('value')||'');},commit:b},{id:'type',type:'select',label:a.lang.button.type,'default':'button',accessKey:'T',items:[[a.lang.button.typeBtn,'button'],[a.lang.button.typeSbm,'submit'],[a.lang.button.typeRst,'reset']],setup:function(c){this.setValue(c.getAttribute('type')||'');},commit:b}]}]};}); diff --git a/plugins/forms/dialogs/checkbox.js b/plugins/forms/dialogs/checkbox.js new file mode 100644 index 0000000..946aa98 --- /dev/null +++ b/plugins/forms/dialogs/checkbox.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('checkbox',function(a){return{title:a.lang.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){var c=this;delete c.checkbox;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getAttribute('type')=='checkbox'){c.checkbox=b;c.setupContent(b);}},onOk:function(){var b,c=this.checkbox,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');c.setAttribute('type','checkbox');b.insertElement(c);}this.commitContent({element:c});},contents:[{id:'info',label:a.lang.checkboxAndRadio.checkboxTitle,title:a.lang.checkboxAndRadio.checkboxTitle,startupFocus:'txtName',elements:[{id:'txtName',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){var c=b.element;if(this.getValue())c.data('cke-saved-name',this.getValue());else{c.data('cke-saved-name',false);c.removeAttribute('name');}}},{id:'txtValue',type:'text',label:a.lang.checkboxAndRadio.value,'default':'',accessKey:'V',setup:function(b){var c=b.getAttribute('value');this.setValue(CKEDITOR.env.ie&&c=='on'?'':c);},commit:function(b){var c=b.element,d=this.getValue();if(d&&!(CKEDITOR.env.ie&&d=='on'))c.setAttribute('value',d);else if(CKEDITOR.env.ie){var e=new CKEDITOR.dom.element('input',c.getDocument());c.copyAttributes(e,{value:1});e.replace(c);a.getSelection().selectElement(e);b.element=e;}else c.removeAttribute('value');}},{id:'cmbSelected',type:'checkbox',label:a.lang.checkboxAndRadio.selected,'default':'',accessKey:'S',value:'checked',setup:function(b){this.setValue(b.getAttribute('checked'));},commit:function(b){var c=b.element;if(CKEDITOR.env.ie){var d=!!c.getAttribute('checked'),e=!!this.getValue();if(d!=e){var f=CKEDITOR.dom.element.createFromHtml('<input type="checkbox"'+(e?' checked="checked"':'')+'/>',a.document);c.copyAttributes(f,{type:1,checked:1});f.replace(c);a.getSelection().selectElement(f);b.element=f;}}else{var g=this.getValue();if(g)c.setAttribute('checked','checked');else c.removeAttribute('checked');}}}]}]};}); diff --git a/plugins/forms/dialogs/form.js b/plugins/forms/dialogs/form.js new file mode 100644 index 0000000..0e18671 --- /dev/null +++ b/plugins/forms/dialogs/form.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('form',function(a){var b={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.form.title,minWidth:350,minHeight:200,onShow:function(){var e=this;delete e.form;var c=e.getParentEditor().getSelection().getStartElement(),d=c&&c.getAscendant('form',true);if(d){e.form=d;e.setupContent(d);}},onOk:function(){var c,d=this.form,e=!d;if(e){c=this.getParentEditor();d=c.document.createElement('form');!CKEDITOR.env.ie&&d.append(c.document.createElement('br'));}if(e)c.insertElement(d);this.commitContent(d);},onLoad:function(){function c(e){this.setValue(e.getAttribute(this.id)||'');};function d(e){var f=this;if(f.getValue())e.setAttribute(f.id,f.getValue());else e.removeAttribute(f.id);};this.foreach(function(e){if(b[e.id]){e.setup=c;e.commit=d;}});},contents:[{id:'info',label:a.lang.form.title,title:a.lang.form.title,elements:[{id:'txtName',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(c){this.setValue(c.data('cke-saved-name')||c.getAttribute('name')||'');},commit:function(c){if(this.getValue())c.data('cke-saved-name',this.getValue());else{c.data('cke-saved-name',false);c.removeAttribute('name');}}},{id:'action',type:'text',label:a.lang.form.action,'default':'',accessKey:'T'},{type:'hbox',widths:['45%','55%'],children:[{id:'id',type:'text',label:a.lang.common.id,'default':'',accessKey:'I'},{id:'enctype',type:'select',label:a.lang.form.encoding,style:'width:100%',accessKey:'E','default':'',items:[[''],['text/plain'],['multipart/form-data'],['application/x-www-form-urlencoded']]}]},{type:'hbox',widths:['45%','55%'],children:[{id:'target',type:'select',label:a.lang.common.target,style:'width:100%',accessKey:'M','default':'',items:[[a.lang.common.notSet,''],[a.lang.common.targetNew,'_blank'],[a.lang.common.targetTop,'_top'],[a.lang.common.targetSelf,'_self'],[a.lang.common.targetParent,'_parent']]},{id:'method',type:'select',label:a.lang.form.method,accessKey:'M','default':'GET',items:[['GET','get'],['POST','post']]}]}]}]};}); diff --git a/plugins/forms/dialogs/hiddenfield.js b/plugins/forms/dialogs/hiddenfield.js new file mode 100644 index 0000000..87609c1 --- /dev/null +++ b/plugins/forms/dialogs/hiddenfield.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('hiddenfield',function(a){return{title:a.lang.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){var e=this;delete e.hiddenField;var b=e.getParentEditor(),c=b.getSelection(),d=c.getSelectedElement();if(d&&d.data('cke-real-element-type')&&d.data('cke-real-element-type')=='hiddenfield'){e.hiddenField=d;d=b.restoreRealElement(e.hiddenField);e.setupContent(d);c.selectElement(e.hiddenField);}},onOk:function(){var g=this;var b=g.getValueOf('info','_cke_saved_name'),c=g.getValueOf('info','value'),d=g.getParentEditor(),e=CKEDITOR.env.ie&&!(CKEDITOR.document.$.documentMode>=8)?d.document.createElement('<input name="'+CKEDITOR.tools.htmlEncode(b)+'">'):d.document.createElement('input');e.setAttribute('type','hidden');g.commitContent(e);var f=d.createFakeElement(e,'cke_hidden','hiddenfield');if(!g.hiddenField)d.insertElement(f);else{f.replace(g.hiddenField);d.getSelection().selectElement(f);}return true;},contents:[{id:'info',label:a.lang.hidden.title,title:a.lang.hidden.title,elements:[{id:'_cke_saved_name',type:'text',label:a.lang.hidden.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){if(this.getValue())b.setAttribute('name',this.getValue());else b.removeAttribute('name');}},{id:'value',type:'text',label:a.lang.hidden.value,'default':'',accessKey:'V',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){if(this.getValue())b.setAttribute('value',this.getValue());else b.removeAttribute('value');}}]}]};}); diff --git a/plugins/forms/dialogs/radio.js b/plugins/forms/dialogs/radio.js new file mode 100644 index 0000000..150566e --- /dev/null +++ b/plugins/forms/dialogs/radio.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('radio',function(a){return{title:a.lang.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){var c=this;delete c.radioButton;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getName()=='input'&&b.getAttribute('type')=='radio'){c.radioButton=b;c.setupContent(b);}},onOk:function(){var b,c=this.radioButton,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');c.setAttribute('type','radio');}if(d)b.insertElement(c);this.commitContent({element:c});},contents:[{id:'info',label:a.lang.checkboxAndRadio.radioTitle,title:a.lang.checkboxAndRadio.radioTitle,elements:[{id:'name',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){var c=b.element;if(this.getValue())c.data('cke-saved-name',this.getValue());else{c.data('cke-saved-name',false);c.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.checkboxAndRadio.value,'default':'',accessKey:'V',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('value',this.getValue());else c.removeAttribute('value');}},{id:'checked',type:'checkbox',label:a.lang.checkboxAndRadio.selected,'default':'',accessKey:'S',value:'checked',setup:function(b){this.setValue(b.getAttribute('checked'));},commit:function(b){var c=b.element;if(!(CKEDITOR.env.ie||CKEDITOR.env.opera)){if(this.getValue())c.setAttribute('checked','checked');else c.removeAttribute('checked');}else{var d=c.getAttribute('checked'),e=!!this.getValue();if(d!=e){var f=CKEDITOR.dom.element.createFromHtml('<input type="radio"'+(e?' checked="checked"':'')+'></input>',a.document);c.copyAttributes(f,{type:1,checked:1});f.replace(c);a.getSelection().selectElement(f);b.element=f;}}}}]}]};}); diff --git a/plugins/forms/dialogs/select.js b/plugins/forms/dialogs/select.js new file mode 100644 index 0000000..0090965 --- /dev/null +++ b/plugins/forms/dialogs/select.js @@ -0,0 +1,9 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('select',function(a){function b(k,l,m,n,o){k=j(k);var p;if(n)p=n.createElement('OPTION');else p=document.createElement('OPTION');if(k&&p&&p.getName()=='option'){if(CKEDITOR.env.ie){if(!isNaN(parseInt(o,10)))k.$.options.add(p.$,o);else k.$.options.add(p.$);p.$.innerHTML=l.length>0?l:'';p.$.value=m;}else{if(o!==null&&o<k.getChildCount())k.getChild(o<0?0:o).insertBeforeMe(p);else k.append(p);p.setText(l.length>0?l:'');p.setValue(m);}}else return false;return p;};function c(k){k=j(k);var l=g(k);for(var m=k.getChildren().count()-1;m>=0;m--){if(k.getChild(m).$.selected)k.getChild(m).remove();}h(k,l);};function d(k,l,m,n){k=j(k);if(l<0)return false;var o=k.getChild(l);o.setText(m);o.setValue(n);return o;};function e(k){k=j(k);while(k.getChild(0)&&k.getChild(0).remove()){}};function f(k,l,m){k=j(k);var n=g(k);if(n<0)return false;var o=n+l;o=o<0?0:o;o=o>=k.getChildCount()?k.getChildCount()-1:o;if(n==o)return false;var p=k.getChild(n),q=p.getText(),r=p.getValue();p.remove();p=b(k,q,r,!m?null:m,o);h(k,o);return p;};function g(k){k=j(k);return k?k.$.selectedIndex:-1;};function h(k,l){k=j(k);if(l<0)return null;var m=k.getChildren().count();k.$.selectedIndex=l>=m?m-1:l;return k;};function i(k){k=j(k);return k?k.getChildren():false;};function j(k){if(k&&k.domId&&k.getInputElement().$)return k.getInputElement();else if(k&&k.$)return k;return false;};return{title:a.lang.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){var n=this;delete n.selectBox;n.setupContent('clear');var k=n.getParentEditor().getSelection().getSelectedElement();if(k&&k.getName()=='select'){n.selectBox=k;n.setupContent(k.getName(),k);var l=i(k);for(var m=0;m<l.count();m++)n.setupContent('option',l.getItem(m));}},onOk:function(){var k=this.getParentEditor(),l=this.selectBox,m=!l;if(m)l=k.document.createElement('select');this.commitContent(l);if(m){k.insertElement(l);if(CKEDITOR.env.ie){var n=k.getSelection(),o=n.createBookmarks();setTimeout(function(){n.selectBookmarks(o);},0);}}},contents:[{id:'info',label:a.lang.select.selectInfo,title:a.lang.select.selectInfo,accessKey:'',elements:[{id:'txtName',type:'text',widths:['25%','75%'],labelLayout:'horizontal',label:a.lang.common.name,'default':'',accessKey:'N',style:'width:350px',setup:function(k,l){if(k=='clear')this.setValue(this['default']||'');else if(k=='select')this.setValue(l.data('cke-saved-name')||l.getAttribute('name')||'');},commit:function(k){if(this.getValue())k.data('cke-saved-name',this.getValue()); +else{k.data('cke-saved-name',false);k.removeAttribute('name');}}},{id:'txtValue',type:'text',widths:['25%','75%'],labelLayout:'horizontal',label:a.lang.select.value,style:'width:350px','default':'',className:'cke_disabled',onLoad:function(){this.getInputElement().setAttribute('readOnly',true);},setup:function(k,l){if(k=='clear')this.setValue('');else if(k=='option'&&l.getAttribute('selected'))this.setValue(l.$.value);}},{type:'hbox',widths:['175px','170px'],children:[{id:'txtSize',type:'text',labelLayout:'horizontal',label:a.lang.select.size,'default':'',accessKey:'S',style:'width:175px',validate:function(){var k=CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed);return this.getValue()===''||k.apply(this);},setup:function(k,l){if(k=='select')this.setValue(l.getAttribute('size')||'');if(CKEDITOR.env.webkit)this.getInputElement().setStyle('width','86px');},commit:function(k){if(this.getValue())k.setAttribute('size',this.getValue());else k.removeAttribute('size');}},{type:'html',html:'<span>'+CKEDITOR.tools.htmlEncode(a.lang.select.lines)+'</span>'}]},{type:'html',html:'<span>'+CKEDITOR.tools.htmlEncode(a.lang.select.opAvail)+'</span>'},{type:'hbox',widths:['115px','115px','100px'],children:[{type:'vbox',children:[{id:'txtOptName',type:'text',label:a.lang.select.opText,style:'width:115px',setup:function(k,l){if(k=='clear')this.setValue('');}},{type:'select',id:'cmbName',label:'',title:'',size:5,style:'width:115px;height:75px',items:[],onChange:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbValue'),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=g(this);h(l,o);m.setValue(this.getValue());n.setValue(l.getValue());},setup:function(k,l){if(k=='clear')e(this);else if(k=='option')b(this,l.getText(),l.getText(),this.getDialog().getParentEditor().document);},commit:function(k){var l=this.getDialog(),m=i(this),n=i(l.getContentElement('info','cmbValue')),o=l.getContentElement('info','txtValue').getValue();e(k);for(var p=0;p<m.count();p++){var q=b(k,m.getItem(p).getValue(),n.getItem(p).getValue(),l.getParentEditor().document);if(n.getItem(p).getValue()==o){q.setAttribute('selected','selected');q.selected=true;}}}}]},{type:'vbox',children:[{id:'txtOptValue',type:'text',label:a.lang.select.opValue,style:'width:115px',setup:function(k,l){if(k=='clear')this.setValue('');}},{type:'select',id:'cmbValue',label:'',size:5,style:'width:115px;height:75px',items:[],onChange:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=g(this); +h(l,o);m.setValue(l.getValue());n.setValue(this.getValue());},setup:function(k,l){var n=this;if(k=='clear')e(n);else if(k=='option'){var m=l.getValue();b(n,m,m,n.getDialog().getParentEditor().document);if(l.getAttribute('selected')=='selected')n.getDialog().getContentElement('info','txtValue').setValue(m);}}}]},{type:'vbox',padding:5,children:[{type:'button',id:'btnAdd',style:'',label:a.lang.select.btnAdd,title:a.lang.select.btnAdd,style:'width:100%;',onClick:function(){var k=this.getDialog(),l=k.getParentEditor(),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=k.getContentElement('info','cmbName'),p=k.getContentElement('info','cmbValue');b(o,m.getValue(),m.getValue(),k.getParentEditor().document);b(p,n.getValue(),n.getValue(),k.getParentEditor().document);m.setValue('');n.setValue('');}},{type:'button',id:'btnModify',label:a.lang.select.btnModify,title:a.lang.select.btnModify,style:'width:100%;',onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','txtOptName'),m=k.getContentElement('info','txtOptValue'),n=k.getContentElement('info','cmbName'),o=k.getContentElement('info','cmbValue'),p=g(n);if(p>=0){d(n,p,l.getValue(),l.getValue());d(o,p,m.getValue(),m.getValue());}}},{type:'button',id:'btnUp',style:'width:100%;',label:a.lang.select.btnUp,title:a.lang.select.btnUp,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue');f(l,-1,k.getParentEditor().document);f(m,-1,k.getParentEditor().document);}},{type:'button',id:'btnDown',style:'width:100%;',label:a.lang.select.btnDown,title:a.lang.select.btnDown,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue');f(l,1,k.getParentEditor().document);f(m,1,k.getParentEditor().document);}}]}]},{type:'hbox',widths:['40%','20%','40%'],children:[{type:'button',id:'btnSetValue',label:a.lang.select.btnSetValue,title:a.lang.select.btnSetValue,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbValue'),m=k.getContentElement('info','txtValue');m.setValue(l.getValue());}},{type:'button',id:'btnDelete',label:a.lang.select.btnDelete,title:a.lang.select.btnDelete,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue'),n=k.getContentElement('info','txtOptName'),o=k.getContentElement('info','txtOptValue');c(l);c(m);n.setValue('');o.setValue('');}},{id:'chkMulti',type:'checkbox',label:a.lang.select.chkMulti,'default':'',accessKey:'M',value:'checked',setup:function(k,l){if(k=='select')this.setValue(l.getAttribute('multiple')); +if(CKEDITOR.env.webkit)this.getElement().getParent().setStyle('vertical-align','middle');},commit:function(k){if(this.getValue())k.setAttribute('multiple',this.getValue());else k.removeAttribute('multiple');}}]}]}]};}); diff --git a/plugins/forms/dialogs/textarea.js b/plugins/forms/dialogs/textarea.js new file mode 100644 index 0000000..8c8f723 --- /dev/null +++ b/plugins/forms/dialogs/textarea.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('textarea',function(a){return{title:a.lang.textarea.title,minWidth:350,minHeight:150,onShow:function(){var c=this;delete c.textarea;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getName()=='textarea'){c.textarea=b;c.setupContent(b);}},onOk:function(){var b,c=this.textarea,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('textarea');}this.commitContent(c);if(d)b.insertElement(c);},contents:[{id:'info',label:a.lang.textarea.title,title:a.lang.textarea.title,elements:[{id:'_cke_saved_name',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){if(this.getValue())b.data('cke-saved-name',this.getValue());else{b.data('cke-saved-name',false);b.removeAttribute('name');}}},{id:'cols',type:'text',label:a.lang.textarea.cols,'default':'',accessKey:'C',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed),setup:function(b){var c=b.hasAttribute('cols')&&b.getAttribute('cols');this.setValue(c||'');},commit:function(b){if(this.getValue())b.setAttribute('cols',this.getValue());else b.removeAttribute('cols');}},{id:'rows',type:'text',label:a.lang.textarea.rows,'default':'',accessKey:'R',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed),setup:function(b){var c=b.hasAttribute('rows')&&b.getAttribute('rows');this.setValue(c||'');},commit:function(b){if(this.getValue())b.setAttribute('rows',this.getValue());else b.removeAttribute('rows');}}]}]};}); diff --git a/plugins/forms/dialogs/textfield.js b/plugins/forms/dialogs/textfield.js new file mode 100644 index 0000000..0a36291 --- /dev/null +++ b/plugins/forms/dialogs/textfield.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('textfield',function(a){var b={value:1,size:1,maxLength:1},c={text:1,password:1};return{title:a.lang.textfield.title,minWidth:350,minHeight:150,onShow:function(){var e=this;delete e.textField;var d=e.getParentEditor().getSelection().getSelectedElement();if(d&&d.getName()=='input'&&(c[d.getAttribute('type')]||!d.getAttribute('type'))){e.textField=d;e.setupContent(d);}},onOk:function(){var d,e=this.textField,f=!e;if(f){d=this.getParentEditor();e=d.document.createElement('input');e.setAttribute('type','text');}if(f)d.insertElement(e);this.commitContent({element:e});},onLoad:function(){var d=function(f){var g=f.hasAttribute(this.id)&&f.getAttribute(this.id);this.setValue(g||'');},e=function(f){var g=f.element,h=this.getValue();if(h)g.setAttribute(this.id,h);else g.removeAttribute(this.id);};this.foreach(function(f){if(b[f.id]){f.setup=d;f.commit=e;}});},contents:[{id:'info',label:a.lang.textfield.title,title:a.lang.textfield.title,elements:[{type:'hbox',widths:['50%','50%'],children:[{id:'_cke_saved_name',type:'text',label:a.lang.textfield.name,'default':'',accessKey:'N',setup:function(d){this.setValue(d.data('cke-saved-name')||d.getAttribute('name')||'');},commit:function(d){var e=d.element;if(this.getValue())e.data('cke-saved-name',this.getValue());else{e.data('cke-saved-name',false);e.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.textfield.value,'default':'',accessKey:'V'}]},{type:'hbox',widths:['50%','50%'],children:[{id:'size',type:'text',label:a.lang.textfield.charWidth,'default':'',accessKey:'C',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed)},{id:'maxLength',type:'text',label:a.lang.textfield.maxChars,'default':'',accessKey:'M',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed)}],onLoad:function(){if(CKEDITOR.env.ie7Compat)this.getElement().setStyle('zoom','100%');}},{id:'type',type:'select',label:a.lang.textfield.type,'default':'text',accessKey:'M',items:[[a.lang.textfield.typeText,'text'],[a.lang.textfield.typePass,'password']],setup:function(d){this.setValue(d.getAttribute('type'));},commit:function(d){var e=d.element;if(CKEDITOR.env.ie){var f=e.getAttribute('type'),g=this.getValue();if(f!=g){var h=CKEDITOR.dom.element.createFromHtml('<input type="'+g+'"></input>',a.document);e.copyAttributes(h,{type:1});h.replace(e);a.getSelection().selectElement(h);d.element=h;}}else e.setAttribute('type',this.getValue());}}]}]};}); diff --git a/plugins/forms/images/hiddenfield.gif b/plugins/forms/images/hiddenfield.gif new file mode 100644 index 0000000000000000000000000000000000000000..953f643b60032c36ac92590950577c336f133512 GIT binary patch literal 105 zcmZ?wbhEHb6lM@&n8?8JABg_{Z)j*>U|`SzVg`^n1Cx_W&+?fM`5zlEy44+e;LbT+ zkH8h7N-kQ@I;_|<mfqfeZR_h9DLc;ZID7hMoK>Q}>&=&Wsxvt_U!{00zr0#2QD@sN HCI)K&$9F25 literal 0 HcmV?d00001 diff --git a/plugins/iframe/dialogs/iframe.js b/plugins/iframe/dialogs/iframe.js new file mode 100644 index 0000000..9450ba4 --- /dev/null +++ b/plugins/iframe/dialogs/iframe.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a={scrolling:{'true':'yes','false':'no'},frameborder:{'true':'1','false':'0'}};function b(d){var g=this;var e=g instanceof CKEDITOR.ui.dialog.checkbox;if(d.hasAttribute(g.id)){var f=d.getAttribute(g.id);if(e)g.setValue(a[g.id]['true']==f.toLowerCase());else g.setValue(f);}};function c(d){var h=this;var e=h.getValue()==='',f=h instanceof CKEDITOR.ui.dialog.checkbox,g=h.getValue();if(e)d.removeAttribute(h.att||h.id);else if(f)d.setAttribute(h.id,a[h.id][g]);else d.setAttribute(h.att||h.id,g);};CKEDITOR.dialog.add('iframe',function(d){var e=d.lang.iframe,f=d.lang.common,g=d.plugins.dialogadvtab;return{title:e.title,minWidth:350,minHeight:260,onShow:function(){var j=this;j.fakeImage=j.iframeNode=null;var h=j.getSelectedElement();if(h&&h.data('cke-real-element-type')&&h.data('cke-real-element-type')=='iframe'){j.fakeImage=h;var i=d.restoreRealElement(h);j.iframeNode=i;j.setupContent(i);}},onOk:function(){var l=this;var h;if(!l.fakeImage)h=new CKEDITOR.dom.element('iframe');else h=l.iframeNode;var i={},j={};l.commitContent(h,i,j);var k=d.createFakeElement(h,'cke_iframe','iframe',true);k.setAttributes(j);k.setStyles(i);if(l.fakeImage){k.replace(l.fakeImage);d.getSelection().selectElement(k);}else d.insertElement(k);},contents:[{id:'info',label:f.generalTab,accessKey:'I',elements:[{type:'vbox',padding:0,children:[{id:'src',type:'text',label:f.url,required:true,validate:CKEDITOR.dialog.validate.notEmpty(e.noUrl),setup:b,commit:c}]},{type:'hbox',children:[{id:'width',type:'text',style:'width:100%',labelLayout:'vertical',label:f.width,validate:CKEDITOR.dialog.validate.htmlLength(f.invalidHtmlLength.replace('%1',f.width)),setup:b,commit:c},{id:'height',type:'text',style:'width:100%',labelLayout:'vertical',label:f.height,validate:CKEDITOR.dialog.validate.htmlLength(f.invalidHtmlLength.replace('%1',f.height)),setup:b,commit:c},{id:'align',type:'select','default':'',items:[[f.notSet,''],[f.alignLeft,'left'],[f.alignRight,'right'],[f.alignTop,'top'],[f.alignMiddle,'middle'],[f.alignBottom,'bottom']],style:'width:100%',labelLayout:'vertical',label:f.align,setup:function(h,i){b.apply(this,arguments);if(i){var j=i.getAttribute('align');this.setValue(j&&j.toLowerCase()||'');}},commit:function(h,i,j){c.apply(this,arguments);if(this.getValue())j.align=this.getValue();}}]},{type:'hbox',widths:['50%','50%'],children:[{id:'scrolling',type:'checkbox',label:e.scrolling,setup:b,commit:c},{id:'frameborder',type:'checkbox',label:e.border,setup:b,commit:c}]},{type:'hbox',widths:['50%','50%'],children:[{id:'name',type:'text',label:f.name,setup:b,commit:c},{id:'title',type:'text',label:f.advisoryTitle,setup:b,commit:c}]},{id:'longdesc',type:'text',label:f.longDescr,setup:b,commit:c}]},g&&g.createAdvancedTab(d,{id:1,classes:1,styles:1})]}; +});})(); diff --git a/plugins/iframe/images/placeholder.png b/plugins/iframe/images/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..b40c7b20fc2984e0c9bf8dac94ab1873ab17dc4d GIT binary patch literal 449 zcmV;y0Y3hTP)<h;3K|Lk000e1NJLTq0027x000{Z0ssI2P3vIN00009a7bBm000XU z000XU0RWnu7ytkOAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-M@d9MRCwC#meFm4Fc3hWt1jRboDs|jtUyMH<O#wEFhUq1tl$yi6+8lr;C^rd zLK9Vrno6iX`NJH-ew-i1B<B+Bra7k)kP>?dr9RkOWa3Pmi8JwkBOXVT;&=oo3Y1z} zQ9MqDuslBBjZrdvFPW|b2th8}_Q7aM-HrB2jkP8vX}8-pISj-|T}wU$LZB=G;aiV0 zp?HthPp3!;Yu{<bILefBIf16Z80pVp4BiW|G4J$vl4P@9bMkPYs<>PhVr#LM(}@`G zpv#gN={mfZMR+*HB;K!CF|XH@JfEdM)wt`3Q8b-ASrc1}F|;jOQ&m5U_ZBOfhO(q> zMcKYbYldNYJ?}-Eb(x=N`d7Q#^@=gnH8J8n)-Fz072|mK{Y|VJB{o*fd&u|mW<DS1 re_kfe#F;n~zZ9Q1hf=%Yb?$2b_qff(j7>UT00000NkvXXu0mjfm%_Ew literal 0 HcmV?d00001 diff --git a/plugins/iframedialog/plugin.js b/plugins/iframedialog/plugin.js new file mode 100644 index 0000000..c43ddf7 --- /dev/null +++ b/plugins/iframedialog/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add('iframedialog',{requires:['dialog'],onLoad:function(){CKEDITOR.dialog.addIframe=function(a,b,c,d,e,f,g){var h={type:'iframe',src:c,width:'100%',height:'100%'};if(typeof f=='function')h.onContentLoad=f;else h.onContentLoad=function(){var k=this.getElement(),l=k.$.contentWindow;if(l.onDialogEvent){var m=this.getDialog(),n=function(o){return l.onDialogEvent(o);};m.on('ok',n);m.on('cancel',n);m.on('resize',n);m.on('hide',function(o){m.removeListener('ok',n);m.removeListener('cancel',n);m.removeListener('resize',n);o.removeListener();});l.onDialogEvent({name:'load',sender:this,editor:m._.editor});}};var i={title:b,minWidth:d,minHeight:e,contents:[{id:'iframe',label:b,expand:true,elements:[h]}]};for(var j in g)i[j]=g[j];this.add(a,function(){return i;});};(function(){var a=function(b,c,d){if(arguments.length<3)return;var e=this._||(this._={}),f=c.onContentLoad&&CKEDITOR.tools.bind(c.onContentLoad,this),g=CKEDITOR.tools.cssLength(c.width),h=CKEDITOR.tools.cssLength(c.height);e.frameId=CKEDITOR.tools.getNextId()+'_iframe';b.on('load',function(){var k=CKEDITOR.document.getById(e.frameId),l=k.getParent();l.setStyles({width:g,height:h});});var i={src:'%2',id:e.frameId,frameborder:0,allowtransparency:true},j=[];if(typeof c.onContentLoad=='function')i.onload='CKEDITOR.tools.callFunction(%1);';CKEDITOR.ui.dialog.uiElement.call(this,b,c,j,'iframe',{width:g,height:h},i,'');d.push('<div style="width:'+g+';height:'+h+';" id="'+this.domId+'"></div>');j=j.join('');b.on('show',function(){var k=CKEDITOR.document.getById(e.frameId),l=k.getParent(),m=CKEDITOR.tools.addFunction(f),n=j.replace('%1',m).replace('%2',CKEDITOR.tools.htmlEncode(c.src));l.setHtml(n);});};a.prototype=new CKEDITOR.ui.dialog.uiElement();CKEDITOR.dialog.addUIElement('iframe',{build:function(b,c,d){return new a(b,c,d);}});})();}}); diff --git a/plugins/image/dialogs/image.js b/plugins/image/dialogs/image.js new file mode 100644 index 0000000..3e19f0f --- /dev/null +++ b/plugins/image/dialogs/image.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=function(b,c){var d=1,e=2,f=4,g=8,h=/^\s*(\d+)((px)|\%)?\s*$/i,i=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,j=/^\d+px$/,k=function(){var C=this.getValue(),D=this.getDialog(),E=C.match(h);if(E){if(E[2]=='%')p(D,false);C=E[1];}if(D.lockRatio){var F=D.originalElement;if(F.getCustomData('isReady')=='true')if(this.id=='txtHeight'){if(C&&C!='0')C=Math.round(F.$.width*(C/F.$.height));if(!isNaN(C))D.setValueOf('info','txtWidth',C);}else{if(C&&C!='0')C=Math.round(F.$.height*(C/F.$.width));if(!isNaN(C))D.setValueOf('info','txtHeight',C);}}l(D);},l=function(C){if(!C.originalElement||!C.preview)return 1;C.commitContent(f,C.preview);return 0;};function m(){var C=arguments,D=this.getContentElement('advanced','txtdlgGenStyle');D&&D.commit.apply(D,C);this.foreach(function(E){if(E.commit&&E.id!='txtdlgGenStyle')E.commit.apply(E,C);});};var n;function o(C){if(n)return;n=1;var D=this.getDialog(),E=D.imageElement;if(E){this.commit(d,E);C=[].concat(C);var F=C.length,G;for(var H=0;H<F;H++){G=D.getContentElement.apply(D,C[H].split(':'));G&&G.setup(d,E);}}n=0;};var p=function(C,D){if(!C.getContentElement('info','ratioLock'))return null;var E=C.originalElement;if(!E)return null;if(D=='check'){if(!C.userlockRatio&&E.getCustomData('isReady')=='true'){var F=C.getValueOf('info','txtWidth'),G=C.getValueOf('info','txtHeight'),H=E.$.width*1000/E.$.height,I=F*1000/G;C.lockRatio=false;if(!F&&!G)C.lockRatio=true;else if(!isNaN(H)&&!isNaN(I))if(Math.round(H)==Math.round(I))C.lockRatio=true;}}else if(D!=undefined)C.lockRatio=D;else{C.userlockRatio=1;C.lockRatio=!C.lockRatio;}var J=CKEDITOR.document.getById(w);if(C.lockRatio)J.removeClass('cke_btn_unlocked');else J.addClass('cke_btn_unlocked');J.setAttribute('aria-checked',C.lockRatio);if(CKEDITOR.env.hc){var K=J.getChild(0);K.setHtml(C.lockRatio?CKEDITOR.env.ie?'â ':'â£':CKEDITOR.env.ie?'â¡':'â¢');}return C.lockRatio;},q=function(C){var D=C.originalElement;if(D.getCustomData('isReady')=='true'){var E=C.getContentElement('info','txtWidth'),F=C.getContentElement('info','txtHeight');E&&E.setValue(D.$.width);F&&F.setValue(D.$.height);}l(C);},r=function(C,D){if(C!=d)return;function E(J,K){var L=J.match(h);if(L){if(L[2]=='%'){L[1]+='%';p(F,false);}return L[1];}return K;};var F=this.getDialog(),G='',H=this.id=='txtWidth'?'width':'height',I=D.getAttribute(H);if(I)G=E(I,G);G=E(D.getStyle(H),G);this.setValue(G);},s,t=function(){var C=this.originalElement;C.setCustomData('isReady','true');C.removeListener('load',t);C.removeListener('error',u);C.removeListener('abort',u); +CKEDITOR.document.getById(y).setStyle('display','none');if(!this.dontResetSize)q(this);if(this.firstLoad)CKEDITOR.tools.setTimeout(function(){p(this,'check');},0,this);this.firstLoad=false;this.dontResetSize=false;},u=function(){var E=this;var C=E.originalElement;C.removeListener('load',t);C.removeListener('error',u);C.removeListener('abort',u);var D=CKEDITOR.getUrl(b.skinPath+'images/noimage.png');if(E.preview)E.preview.setAttribute('src',D);CKEDITOR.document.getById(y).setStyle('display','none');p(E,false);},v=function(C){return CKEDITOR.tools.getNextId()+'_'+C;},w=v('btnLockSizes'),x=v('btnResetSize'),y=v('ImagePreviewLoader'),z=v('ImagePreviewBox'),A=v('previewLink'),B=v('previewImage');return{title:b.lang.image[c=='image'?'title':'titleButton'],minWidth:420,minHeight:360,onShow:function(){var I=this;I.imageElement=false;I.linkElement=false;I.imageEditMode=false;I.linkEditMode=false;I.lockRatio=true;I.userlockRatio=0;I.dontResetSize=false;I.firstLoad=true;I.addLink=false;var C=I.getParentEditor(),D=I.getParentEditor().getSelection(),E=D.getSelectedElement(),F=E&&E.getAscendant('a');CKEDITOR.document.getById(y).setStyle('display','none');s=new CKEDITOR.dom.element('img',C.document);I.preview=CKEDITOR.document.getById(B);I.originalElement=C.document.createElement('img');I.originalElement.setAttribute('alt','');I.originalElement.setCustomData('isReady','false');if(F){I.linkElement=F;I.linkEditMode=true;var G=F.getChildren();if(G.count()==1){var H=G.getItem(0).getName();if(H=='img'||H=='input'){I.imageElement=G.getItem(0);if(I.imageElement.getName()=='img')I.imageEditMode='img';else if(I.imageElement.getName()=='input')I.imageEditMode='input';}}if(c=='image')I.setupContent(e,F);}if(E&&E.getName()=='img'&&!E.data('cke-realelement')||E&&E.getName()=='input'&&E.getAttribute('type')=='image'){I.imageEditMode=E.getName();I.imageElement=E;}if(I.imageEditMode){I.cleanImageElement=I.imageElement;I.imageElement=I.cleanImageElement.clone(true,true);I.setupContent(d,I.imageElement);}else I.imageElement=C.document.createElement('img');p(I,true);if(!CKEDITOR.tools.trim(I.getValueOf('info','txtUrl'))){I.preview.removeAttribute('src');I.preview.setStyle('display','none');}},onOk:function(){var D=this;if(D.imageEditMode){var C=D.imageEditMode;if(c=='image'&&C=='input'&&confirm(b.lang.image.button2Img)){C='img';D.imageElement=b.document.createElement('img');D.imageElement.setAttribute('alt','');b.insertElement(D.imageElement);}else if(c!='image'&&C=='img'&&confirm(b.lang.image.img2Button)){C='input'; +D.imageElement=b.document.createElement('input');D.imageElement.setAttributes({type:'image',alt:''});b.insertElement(D.imageElement);}else{D.imageElement=D.cleanImageElement;delete D.cleanImageElement;}}else{if(c=='image')D.imageElement=b.document.createElement('img');else{D.imageElement=b.document.createElement('input');D.imageElement.setAttribute('type','image');}D.imageElement.setAttribute('alt','');}if(!D.linkEditMode)D.linkElement=b.document.createElement('a');D.commitContent(d,D.imageElement);D.commitContent(e,D.linkElement);if(!D.imageElement.getAttribute('style'))D.imageElement.removeAttribute('style');if(!D.imageEditMode){if(D.addLink){if(!D.linkEditMode){b.insertElement(D.linkElement);D.linkElement.append(D.imageElement,false);}else b.insertElement(D.imageElement);}else b.insertElement(D.imageElement);}else if(!D.linkEditMode&&D.addLink){b.insertElement(D.linkElement);D.imageElement.appendTo(D.linkElement);}else if(D.linkEditMode&&!D.addLink){b.getSelection().selectElement(D.linkElement);b.insertElement(D.imageElement);}},onLoad:function(){var D=this;if(c!='image')D.hidePage('Link');var C=D._.element.getDocument();if(D.getContentElement('info','ratioLock')){D.addFocusable(C.getById(x),5);D.addFocusable(C.getById(w),5);}D.commitContent=m;},onHide:function(){var C=this;if(C.preview)C.commitContent(g,C.preview);if(C.originalElement){C.originalElement.removeListener('load',t);C.originalElement.removeListener('error',u);C.originalElement.removeListener('abort',u);C.originalElement.remove();C.originalElement=false;}delete C.imageElement;},contents:[{id:'info',label:b.lang.image.infoTab,accessKey:'I',elements:[{type:'vbox',padding:0,children:[{type:'hbox',widths:['280px','110px'],align:'right',children:[{id:'txtUrl',type:'text',label:b.lang.common.url,required:true,onChange:function(){var C=this.getDialog(),D=this.getValue();if(D.length>0){C=this.getDialog();var E=C.originalElement;C.preview.removeStyle('display');E.setCustomData('isReady','false');var F=CKEDITOR.document.getById(y);if(F)F.setStyle('display','');E.on('load',t,C);E.on('error',u,C);E.on('abort',u,C);E.setAttribute('src',D);s.setAttribute('src',D);C.preview.setAttribute('src',s.$.src);l(C);}else if(C.preview){C.preview.removeAttribute('src');C.preview.setStyle('display','none');}},setup:function(C,D){if(C==d){var E=D.data('cke-saved-src')||D.getAttribute('src'),F=this;this.getDialog().dontResetSize=true;F.setValue(E);F.setInitValue();}},commit:function(C,D){var E=this;if(C==d&&(E.getValue()||E.isChanged())){D.data('cke-saved-src',E.getValue()); +D.setAttribute('src',E.getValue());}else if(C==g){D.setAttribute('src','');D.removeAttribute('src');}},validate:CKEDITOR.dialog.validate.notEmpty(b.lang.image.urlMissing)},{type:'button',id:'browse',style:'display:inline-block;margin-top:10px;',align:'center',label:b.lang.common.browseServer,hidden:true,filebrowser:'info:txtUrl'}]}]},{id:'txtAlt',type:'text',label:b.lang.image.alt,accessKey:'T','default':'',onChange:function(){l(this.getDialog());},setup:function(C,D){if(C==d)this.setValue(D.getAttribute('alt'));},commit:function(C,D){var E=this;if(C==d){if(E.getValue()||E.isChanged())D.setAttribute('alt',E.getValue());}else if(C==f)D.setAttribute('alt',E.getValue());else if(C==g)D.removeAttribute('alt');}},{type:'hbox',children:[{id:'basic',type:'vbox',children:[{type:'hbox',widths:['50%','50%'],children:[{type:'vbox',padding:1,children:[{type:'text',width:'40px',id:'txtWidth',label:b.lang.common.width,onKeyUp:k,onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:function(){var C=this.getValue().match(i),D=!!(C&&parseInt(C[1],10)!==0);if(!D)alert(b.lang.common.invalidWidth);return D;},setup:r,commit:function(C,D,E){var F=this.getValue();if(C==d){if(F)D.setStyle('width',CKEDITOR.tools.cssLength(F));else D.removeStyle('width');!E&&D.removeAttribute('width');}else if(C==f){var G=F.match(h);if(!G){var H=this.getDialog().originalElement;if(H.getCustomData('isReady')=='true')D.setStyle('width',H.$.width+'px');}else D.setStyle('width',CKEDITOR.tools.cssLength(F));}else if(C==g){D.removeAttribute('width');D.removeStyle('width');}}},{type:'text',id:'txtHeight',width:'40px',label:b.lang.common.height,onKeyUp:k,onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:function(){var C=this.getValue().match(i),D=!!(C&&parseInt(C[1],10)!==0);if(!D)alert(b.lang.common.invalidHeight);return D;},setup:r,commit:function(C,D,E){var F=this.getValue();if(C==d){if(F)D.setStyle('height',CKEDITOR.tools.cssLength(F));else D.removeStyle('height');!E&&D.removeAttribute('height');}else if(C==f){var G=F.match(h);if(!G){var H=this.getDialog().originalElement;if(H.getCustomData('isReady')=='true')D.setStyle('height',H.$.height+'px');}else D.setStyle('height',CKEDITOR.tools.cssLength(F));}else if(C==g){D.removeAttribute('height');D.removeStyle('height');}}}]},{id:'ratioLock',type:'html',style:'margin-top:30px;width:40px;height:40px;',onLoad:function(){var C=CKEDITOR.document.getById(x),D=CKEDITOR.document.getById(w);if(C){C.on('click',function(E){q(this);E.data&&E.data.preventDefault(); +},this.getDialog());C.on('mouseover',function(){this.addClass('cke_btn_over');},C);C.on('mouseout',function(){this.removeClass('cke_btn_over');},C);}if(D){D.on('click',function(E){var J=this;var F=p(J),G=J.originalElement,H=J.getValueOf('info','txtWidth');if(G.getCustomData('isReady')=='true'&&H){var I=G.$.height/G.$.width*H;if(!isNaN(I)){J.setValueOf('info','txtHeight',Math.round(I));l(J);}}E.data&&E.data.preventDefault();},this.getDialog());D.on('mouseover',function(){this.addClass('cke_btn_over');},D);D.on('mouseout',function(){this.removeClass('cke_btn_over');},D);}},html:'<div><a href="javascript:void(0)" tabindex="-1" title="'+b.lang.image.lockRatio+'" class="cke_btn_locked" id="'+w+'" role="checkbox"><span class="cke_icon"></span><span class="cke_label">'+b.lang.image.lockRatio+'</span></a>'+'<a href="javascript:void(0)" tabindex="-1" title="'+b.lang.image.resetSize+'" class="cke_btn_reset" id="'+x+'" role="button"><span class="cke_label">'+b.lang.image.resetSize+'</span></a>'+'</div>'}]},{type:'vbox',padding:1,children:[{type:'text',id:'txtBorder',width:'60px',label:b.lang.image.border,'default':'',onKeyUp:function(){l(this.getDialog());},onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:CKEDITOR.dialog.validate.integer(b.lang.image.validateBorder),setup:function(C,D){if(C==d){var E,F=D.getStyle('border-width');F=F&&F.match(/^(\d+px)(?: \1 \1 \1)?$/);E=F&&parseInt(F[1],10);isNaN(parseInt(E,10))&&(E=D.getAttribute('border'));this.setValue(E);}},commit:function(C,D,E){var F=parseInt(this.getValue(),10);if(C==d||C==f){if(!isNaN(F)){D.setStyle('border-width',CKEDITOR.tools.cssLength(F));D.setStyle('border-style','solid');}else if(!F&&this.isChanged()){D.removeStyle('border-width');D.removeStyle('border-style');D.removeStyle('border-color');}if(!E&&C==d)D.removeAttribute('border');}else if(C==g){D.removeAttribute('border');D.removeStyle('border-width');D.removeStyle('border-style');D.removeStyle('border-color');}}},{type:'text',id:'txtHSpace',width:'60px',label:b.lang.image.hSpace,'default':'',onKeyUp:function(){l(this.getDialog());},onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:CKEDITOR.dialog.validate.integer(b.lang.image.validateHSpace),setup:function(C,D){if(C==d){var E,F,G,H=D.getStyle('margin-left'),I=D.getStyle('margin-right');H=H&&H.match(j);I=I&&I.match(j);F=parseInt(H,10);G=parseInt(I,10);E=F==G&&F;isNaN(parseInt(E,10))&&(E=D.getAttribute('hspace'));this.setValue(E);}},commit:function(C,D,E){var F=parseInt(this.getValue(),10); +if(C==d||C==f){if(!isNaN(F)){D.setStyle('margin-left',CKEDITOR.tools.cssLength(F));D.setStyle('margin-right',CKEDITOR.tools.cssLength(F));}else if(!F&&this.isChanged()){D.removeStyle('margin-left');D.removeStyle('margin-right');}if(!E&&C==d)D.removeAttribute('hspace');}else if(C==g){D.removeAttribute('hspace');D.removeStyle('margin-left');D.removeStyle('margin-right');}}},{type:'text',id:'txtVSpace',width:'60px',label:b.lang.image.vSpace,'default':'',onKeyUp:function(){l(this.getDialog());},onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:CKEDITOR.dialog.validate.integer(b.lang.image.validateVSpace),setup:function(C,D){if(C==d){var E,F,G,H=D.getStyle('margin-top'),I=D.getStyle('margin-bottom');H=H&&H.match(j);I=I&&I.match(j);F=parseInt(H,10);G=parseInt(I,10);E=F==G&&F;isNaN(parseInt(E,10))&&(E=D.getAttribute('vspace'));this.setValue(E);}},commit:function(C,D,E){var F=parseInt(this.getValue(),10);if(C==d||C==f){if(!isNaN(F)){D.setStyle('margin-top',CKEDITOR.tools.cssLength(F));D.setStyle('margin-bottom',CKEDITOR.tools.cssLength(F));}else if(!F&&this.isChanged()){D.removeStyle('margin-top');D.removeStyle('margin-bottom');}if(!E&&C==d)D.removeAttribute('vspace');}else if(C==g){D.removeAttribute('vspace');D.removeStyle('margin-top');D.removeStyle('margin-bottom');}}},{id:'cmbAlign',type:'select',widths:['35%','65%'],style:'width:90px',label:b.lang.common.align,'default':'',items:[[b.lang.common.notSet,''],[b.lang.common.alignLeft,'left'],[b.lang.common.alignRight,'right']],onChange:function(){l(this.getDialog());o.call(this,'advanced:txtdlgGenStyle');},setup:function(C,D){if(C==d){var E=D.getStyle('float');switch(E){case 'inherit':case 'none':E='';}!E&&(E=(D.getAttribute('align')||'').toLowerCase());this.setValue(E);}},commit:function(C,D,E){var F=this.getValue();if(C==d||C==f){if(F)D.setStyle('float',F);else D.removeStyle('float');if(!E&&C==d){F=(D.getAttribute('align')||'').toLowerCase();switch(F){case 'left':case 'right':D.removeAttribute('align');}}}else if(C==g)D.removeStyle('float');}}]}]},{type:'vbox',height:'250px',children:[{type:'html',id:'htmlPreview',style:'width:95%;',html:'<div>'+CKEDITOR.tools.htmlEncode(b.lang.common.preview)+'<br>'+'<div id="'+y+'" class="ImagePreviewLoader" style="display:none"><div class="loading"> </div></div>'+'<div id="'+z+'" class="ImagePreviewBox"><table><tr><td>'+'<a href="javascript:void(0)" target="_blank" onclick="return false;" id="'+A+'">'+'<img id="'+B+'" alt="" /></a>'+(b.config.image_previewText||'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.')+'</td></tr></table></div></div>'}]}]}]},{id:'Link',label:b.lang.link.title,padding:0,elements:[{id:'txtUrl',type:'text',label:b.lang.common.url,style:'width: 100%','default':'',setup:function(C,D){if(C==e){var E=D.data('cke-saved-href'); +if(!E)E=D.getAttribute('href');this.setValue(E);}},commit:function(C,D){var F=this;if(C==e)if(F.getValue()||F.isChanged()){var E=decodeURI(F.getValue());D.data('cke-saved-href',E);D.setAttribute('href',E);if(F.getValue()||!b.config.image_removeLinkByEmptyURL)F.getDialog().addLink=true;}}},{type:'button',id:'browse',filebrowser:{action:'Browse',target:'Link:txtUrl',url:b.config.filebrowserImageBrowseLinkUrl},style:'float:right',hidden:true,label:b.lang.common.browseServer},{id:'cmbTarget',type:'select',label:b.lang.common.target,'default':'',items:[[b.lang.common.notSet,''],[b.lang.common.targetNew,'_blank'],[b.lang.common.targetTop,'_top'],[b.lang.common.targetSelf,'_self'],[b.lang.common.targetParent,'_parent']],setup:function(C,D){if(C==e)this.setValue(D.getAttribute('target')||'');},commit:function(C,D){if(C==e)if(this.getValue()||this.isChanged())D.setAttribute('target',this.getValue());}}]},{id:'Upload',hidden:true,filebrowser:'uploadButton',label:b.lang.image.upload,elements:[{type:'file',id:'upload',label:b.lang.image.btnUpload,style:'height:40px',size:38},{type:'fileButton',id:'uploadButton',filebrowser:'info:txtUrl',label:b.lang.image.btnUpload,'for':['Upload','upload']}]},{id:'advanced',label:b.lang.common.advancedTab,elements:[{type:'hbox',widths:['50%','25%','25%'],children:[{type:'text',id:'linkId',label:b.lang.common.id,setup:function(C,D){if(C==d)this.setValue(D.getAttribute('id'));},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('id',this.getValue());}},{id:'cmbLangDir',type:'select',style:'width : 100px;',label:b.lang.common.langDir,'default':'',items:[[b.lang.common.notSet,''],[b.lang.common.langDirLtr,'ltr'],[b.lang.common.langDirRtl,'rtl']],setup:function(C,D){if(C==d)this.setValue(D.getAttribute('dir'));},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('dir',this.getValue());}},{type:'text',id:'txtLangCode',label:b.lang.common.langCode,'default':'',setup:function(C,D){if(C==d)this.setValue(D.getAttribute('lang'));},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('lang',this.getValue());}}]},{type:'text',id:'txtGenLongDescr',label:b.lang.common.longDescr,setup:function(C,D){if(C==d)this.setValue(D.getAttribute('longDesc'));},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('longDesc',this.getValue());}},{type:'hbox',widths:['50%','50%'],children:[{type:'text',id:'txtGenClass',label:b.lang.common.cssClass,'default':'',setup:function(C,D){if(C==d)this.setValue(D.getAttribute('class')); +},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('class',this.getValue());}},{type:'text',id:'txtGenTitle',label:b.lang.common.advisoryTitle,'default':'',onChange:function(){l(this.getDialog());},setup:function(C,D){if(C==d)this.setValue(D.getAttribute('title'));},commit:function(C,D){var E=this;if(C==d){if(E.getValue()||E.isChanged())D.setAttribute('title',E.getValue());}else if(C==f)D.setAttribute('title',E.getValue());else if(C==g)D.removeAttribute('title');}}]},{type:'text',id:'txtdlgGenStyle',label:b.lang.common.cssStyle,'default':'',setup:function(C,D){if(C==d){var E=D.getAttribute('style');if(!E&&D.$.style.cssText)E=D.$.style.cssText;this.setValue(E);var F=D.$.style.height,G=D.$.style.width,H=(F?F:'').match(h),I=(G?G:'').match(h);this.attributesInStyle={height:!!H,width:!!I};}},onChange:function(){o.call(this,['info:cmbFloat','info:cmbAlign','info:txtVSpace','info:txtHSpace','info:txtBorder','info:txtWidth','info:txtHeight']);l(this);},commit:function(C,D){if(C==d&&(this.getValue()||this.isChanged()))D.setAttribute('style',this.getValue());}}]}]};};CKEDITOR.dialog.add('image',function(b){return a(b,'image');});CKEDITOR.dialog.add('imagebutton',function(b){return a(b,'imagebutton');});})(); diff --git a/plugins/link/dialogs/anchor.js b/plugins/link/dialogs/anchor.js new file mode 100644 index 0000000..2d52d84 --- /dev/null +++ b/plugins/link/dialogs/anchor.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('anchor',function(a){var b=function(d){this._.selectedElement=d;var e=d.data('cke-saved-name');this.setValueOf('info','txtName',e||'');};function c(d,e){return d.createFakeElement(e,'cke_anchor','anchor');};return{title:a.lang.anchor.title,minWidth:300,minHeight:60,onOk:function(){var k=this;var d=k.getValueOf('info','txtName'),e={name:d,'data-cke-saved-name':d};if(k._.selectedElement){if(k._.selectedElement.data('cke-realelement')){var f=c(a,a.document.createElement('a',{attributes:e}));f.replace(k._.selectedElement);}else k._.selectedElement.setAttributes(e);}else{var g=a.getSelection(),h=g&&g.getRanges()[0];if(h.collapsed){if(CKEDITOR.plugins.link.synAnchorSelector)e['class']='cke_anchor_empty';if(CKEDITOR.plugins.link.emptyAnchorFix){e.contenteditable='false';e['data-cke-editable']=1;}var i=a.document.createElement('a',{attributes:e});if(CKEDITOR.plugins.link.fakeAnchor)i=c(a,i);h.insertNode(i);}else{if(CKEDITOR.env.ie&&CKEDITOR.env.version<9)e['class']='cke_anchor';var j=new CKEDITOR.style({element:'a',attributes:e});j.type=CKEDITOR.STYLE_INLINE;j.apply(a.document);}}},onHide:function(){delete this._.selectedElement;},onShow:function(){var h=this;var d=a.getSelection(),e=d.getSelectedElement(),f;if(e){if(CKEDITOR.plugins.link.fakeAnchor){var g=CKEDITOR.plugins.link.tryRestoreFakeAnchor(a,e);g&&b.call(h,g);h._.selectedElement=e;}else if(e.is('a')&&e.hasAttribute('name'))b.call(h,e);}else{f=CKEDITOR.plugins.link.getSelectedLink(a);if(f){b.call(h,f);d.selectElement(f);}}h.getContentElement('info','txtName').focus();},contents:[{id:'info',label:a.lang.anchor.title,accessKey:'I',elements:[{type:'text',id:'txtName',label:a.lang.anchor.name,required:true,validate:function(){if(!this.getValue()){alert(a.lang.anchor.errorName);return false;}return true;}}]}]};}); diff --git a/plugins/link/dialogs/link.js b/plugins/link/dialogs/link.js new file mode 100644 index 0000000..355d7c8 --- /dev/null +++ b/plugins/link/dialogs/link.js @@ -0,0 +1,12 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('link',function(a){var b=CKEDITOR.plugins.link,c=function(){var F=this.getDialog(),G=F.getContentElement('target','popupFeatures'),H=F.getContentElement('target','linkTargetName'),I=this.getValue();if(!G||!H)return;G=G.getElement();G.hide();H.setValue('');switch(I){case 'frame':H.setLabel(a.lang.link.targetFrameName);H.getElement().show();break;case 'popup':G.show();H.setLabel(a.lang.link.targetPopupName);H.getElement().show();break;default:H.setValue(I);H.getElement().hide();break;}},d=function(){var F=this.getDialog(),G=['urlOptions','anchorOptions','emailOptions'],H=this.getValue(),I=F.definition.getContents('upload'),J=I&&I.hidden;if(H=='url'){if(a.config.linkShowTargetTab)F.showPage('target');if(!J)F.showPage('upload');}else{F.hidePage('target');if(!J)F.hidePage('upload');}for(var K=0;K<G.length;K++){var L=F.getContentElement('info',G[K]);if(!L)continue;L=L.getElement().getParent().getParent();if(G[K]==H+'Options')L.show();else L.hide();}F.layout();},e=/^javascript:/,f=/^mailto:([^?]+)(?:\?(.+))?$/,g=/subject=([^;?:@&=$,\/]*)/,h=/body=([^;?:@&=$,\/]*)/,i=/^#(.*)$/,j=/^((?:http|https|ftp|news):\/\/)?(.*)$/,k=/^(_(?:self|top|parent|blank))$/,l=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,m=/^javascript:([^(]+)\(([^)]+)\)$/,n=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,o=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,p=function(F,G){var H=G&&(G.data('cke-saved-href')||G.getAttribute('href'))||'',I,J,K,L,M={};if(I=H.match(e))if(y=='encode')H=H.replace(l,function(ae,af,ag){return 'mailto:'+String.fromCharCode.apply(String,af.split(','))+(ag&&w(ag));});else if(y)H.replace(m,function(ae,af,ag){if(af==z.name){M.type='email';var ah=M.email={},ai=/[^,\s]+/g,aj=/(^')|('$)/g,ak=ag.match(ai),al=ak.length,am,an;for(var ao=0;ao<al;ao++){an=decodeURIComponent(w(ak[ao].replace(aj,'')));am=z.params[ao].toLowerCase();ah[am]=an;}ah.address=[ah.name,ah.domain].join('@');}});if(!M.type)if(K=H.match(i)){M.type='anchor';M.anchor={};M.anchor.name=M.anchor.id=K[1];}else if(J=H.match(f)){var N=H.match(g),O=H.match(h);M.type='email';var P=M.email={};P.address=J[1];N&&(P.subject=decodeURIComponent(N[1]));O&&(P.body=decodeURIComponent(O[1]));}else if(H&&(L=H.match(j))){M.type='url';M.url={};M.url.protocol=L[1];M.url.url=L[2];}else M.type='url';if(G){var Q=G.getAttribute('target');M.target={};M.adv={};if(!Q){var R=G.data('cke-pa-onclick')||G.getAttribute('onclick'),S=R&&R.match(n); +if(S){M.target.type='popup';M.target.name=S[1];var T;while(T=o.exec(S[2])){if((T[2]=='yes'||T[2]=='1')&&!(T[1] in {height:1,width:1,top:1,left:1}))M.target[T[1]]=true;else if(isFinite(T[2]))M.target[T[1]]=T[2];}}}else{var U=Q.match(k);if(U)M.target.type=M.target.name=Q;else{M.target.type='frame';M.target.name=Q;}}var V=this,W=function(ae,af){var ag=G.getAttribute(af);if(ag!==null)M.adv[ae]=ag||'';};W('advId','id');W('advLangDir','dir');W('advAccessKey','accessKey');M.adv.advName=G.data('cke-saved-name')||G.getAttribute('name')||'';W('advLangCode','lang');W('advTabIndex','tabindex');W('advTitle','title');W('advContentType','type');CKEDITOR.plugins.link.synAnchorSelector?M.adv.advCSSClasses=C(G):W('advCSSClasses','class');W('advCharset','charset');W('advStyles','style');W('advRel','rel');}var X=M.anchors=[],Y;if(CKEDITOR.plugins.link.emptyAnchorFix){var Z=F.document.getElementsByTag('a');for(i=0,count=Z.count();i<count;i++){Y=Z.getItem(i);if(Y.data('cke-saved-name')||Y.hasAttribute('name'))X.push({name:Y.data('cke-saved-name')||Y.getAttribute('name'),id:Y.getAttribute('id')});}}else{var aa=new CKEDITOR.dom.nodeList(F.document.$.anchors);for(var ab=0,ac=aa.count();ab<ac;ab++){Y=aa.getItem(ab);X[ab]={name:Y.getAttribute('name'),id:Y.getAttribute('id')};}}if(CKEDITOR.plugins.link.fakeAnchor){var ad=F.document.getElementsByTag('img');for(ab=0,ac=ad.count();ab<ac;ab++){if(Y=CKEDITOR.plugins.link.tryRestoreFakeAnchor(F,ad.getItem(ab)))X.push({name:Y.getAttribute('name'),id:Y.getAttribute('id')});}}this._.selectedElement=G;return M;},q=function(F,G){if(G[F])this.setValue(G[F][this.id]||'');},r=function(F){return q.call(this,'target',F);},s=function(F){return q.call(this,'adv',F);},t=function(F,G){if(!G[F])G[F]={};G[F][this.id]=this.getValue()||'';},u=function(F){return t.call(this,'target',F);},v=function(F){return t.call(this,'adv',F);};function w(F){return F.replace(/\\'/g,"'");};function x(F){return F.replace(/'/g,'\\$&');};var y=a.config.emailProtection||'';if(y&&y!='encode'){var z={};y.replace(/^([^(]+)\(([^)]+)\)$/,function(F,G,H){z.name=G;z.params=[];H.replace(/[^,\s]+/g,function(I){z.params.push(I);});});}function A(F){var G,H=z.name,I=z.params,J,K;G=[H,'('];for(var L=0;L<I.length;L++){J=I[L].toLowerCase();K=F[J];L>0&&G.push(',');G.push("'",K?x(encodeURIComponent(F[J])):'',"'");}G.push(')');return G.join('');};function B(F){var G,H=F.length,I=[];for(var J=0;J<H;J++){G=F.charCodeAt(J);I.push(G);}return 'String.fromCharCode('+I.join(',')+')';};function C(F){var G=F.getAttribute('class'); +return G?G.replace(/\s*(?:cke_anchor_empty|cke_anchor)(?:\s*$)?/g,''):'';};var D=a.lang.common,E=a.lang.link;return{title:E.title,minWidth:350,minHeight:230,contents:[{id:'info',label:E.info,title:E.info,elements:[{id:'linkType',type:'select',label:E.type,'default':'url',items:[[E.toUrl,'url'],[E.toAnchor,'anchor'],[E.toEmail,'email']],onChange:d,setup:function(F){if(F.type)this.setValue(F.type);},commit:function(F){F.type=this.getValue();}},{type:'vbox',id:'urlOptions',children:[{type:'hbox',widths:['25%','75%'],children:[{id:'protocol',type:'select',label:D.protocol,'default':'http://',items:[['http://â','http://'],['https://â','https://'],['ftp://â','ftp://'],['news://â','news://'],[E.other,'']],setup:function(F){if(F.url)this.setValue(F.url.protocol||'');},commit:function(F){if(!F.url)F.url={};F.url.protocol=this.getValue();}},{type:'text',id:'url',label:D.url,required:true,onLoad:function(){this.allowOnChange=true;},onKeyUp:function(){var K=this;K.allowOnChange=false;var F=K.getDialog().getContentElement('info','protocol'),G=K.getValue(),H=/^(http|https|ftp|news):\/\/(?=.)/i,I=/^((javascript:)|[#\/\.\?])/i,J=H.exec(G);if(J){K.setValue(G.substr(J[0].length));F.setValue(J[0].toLowerCase());}else if(I.test(G))F.setValue('');K.allowOnChange=true;},onChange:function(){if(this.allowOnChange)this.onKeyUp();},validate:function(){var F=this.getDialog();if(F.getContentElement('info','linkType')&&F.getValueOf('info','linkType')!='url')return true;if(this.getDialog().fakeObj)return true;var G=CKEDITOR.dialog.validate.notEmpty(E.noUrl);return G.apply(this);},setup:function(F){this.allowOnChange=false;if(F.url)this.setValue(F.url.url);this.allowOnChange=true;},commit:function(F){this.onChange();if(!F.url)F.url={};F.url.url=this.getValue();this.allowOnChange=false;}}],setup:function(F){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().show();}},{type:'button',id:'browse',hidden:'true',filebrowser:'info:url',label:D.browseServer}]},{type:'vbox',id:'anchorOptions',width:260,align:'center',padding:0,children:[{type:'fieldset',id:'selectAnchorText',label:E.selectAnchor,setup:function(F){if(F.anchors.length>0)this.getElement().show();else this.getElement().hide();},children:[{type:'hbox',id:'selectAnchor',children:[{type:'select',id:'anchorName','default':'',label:E.anchorName,style:'width: 100%;',items:[['']],setup:function(F){var I=this;I.clear();I.add('');for(var G=0;G<F.anchors.length;G++){if(F.anchors[G].name)I.add(F.anchors[G].name);}if(F.anchor)I.setValue(F.anchor.name); +var H=I.getDialog().getContentElement('info','linkType');if(H&&H.getValue()=='email')I.focus();},commit:function(F){if(!F.anchor)F.anchor={};F.anchor.name=this.getValue();}},{type:'select',id:'anchorId','default':'',label:E.anchorId,style:'width: 100%;',items:[['']],setup:function(F){var H=this;H.clear();H.add('');for(var G=0;G<F.anchors.length;G++){if(F.anchors[G].id)H.add(F.anchors[G].id);}if(F.anchor)H.setValue(F.anchor.id);},commit:function(F){if(!F.anchor)F.anchor={};F.anchor.id=this.getValue();}}],setup:function(F){if(F.anchors.length>0)this.getElement().show();else this.getElement().hide();}}]},{type:'html',id:'noAnchors',style:'text-align: center;',html:'<div role="label" tabIndex="-1">'+CKEDITOR.tools.htmlEncode(E.noAnchors)+'</div>',focus:true,setup:function(F){if(F.anchors.length<1)this.getElement().show();else this.getElement().hide();}}],setup:function(F){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().hide();}},{type:'vbox',id:'emailOptions',padding:1,children:[{type:'text',id:'emailAddress',label:E.emailAddress,required:true,validate:function(){var F=this.getDialog();if(!F.getContentElement('info','linkType')||F.getValueOf('info','linkType')!='email')return true;var G=CKEDITOR.dialog.validate.notEmpty(E.noEmail);return G.apply(this);},setup:function(F){if(F.email)this.setValue(F.email.address);var G=this.getDialog().getContentElement('info','linkType');if(G&&G.getValue()=='email')this.select();},commit:function(F){if(!F.email)F.email={};F.email.address=this.getValue();}},{type:'text',id:'emailSubject',label:E.emailSubject,setup:function(F){if(F.email)this.setValue(F.email.subject);},commit:function(F){if(!F.email)F.email={};F.email.subject=this.getValue();}},{type:'textarea',id:'emailBody',label:E.emailBody,rows:3,'default':'',setup:function(F){if(F.email)this.setValue(F.email.body);},commit:function(F){if(!F.email)F.email={};F.email.body=this.getValue();}}],setup:function(F){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().hide();}}]},{id:'target',label:E.target,title:E.target,elements:[{type:'hbox',widths:['50%','50%'],children:[{type:'select',id:'linkTargetType',label:D.target,'default':'notSet',style:'width : 100%;',items:[[D.notSet,'notSet'],[E.targetFrame,'frame'],[E.targetPopup,'popup'],[D.targetNew,'_blank'],[D.targetTop,'_top'],[D.targetSelf,'_self'],[D.targetParent,'_parent']],onChange:c,setup:function(F){if(F.target)this.setValue(F.target.type||'notSet');c.call(this);},commit:function(F){if(!F.target)F.target={}; +F.target.type=this.getValue();}},{type:'text',id:'linkTargetName',label:E.targetFrameName,'default':'',setup:function(F){if(F.target)this.setValue(F.target.name);},commit:function(F){if(!F.target)F.target={};F.target.name=this.getValue().replace(/\W/gi,'');}}]},{type:'vbox',width:'100%',align:'center',padding:2,id:'popupFeatures',children:[{type:'fieldset',label:E.popupFeatures,children:[{type:'hbox',children:[{type:'checkbox',id:'resizable',label:E.popupResizable,setup:r,commit:u},{type:'checkbox',id:'status',label:E.popupStatusBar,setup:r,commit:u}]},{type:'hbox',children:[{type:'checkbox',id:'location',label:E.popupLocationBar,setup:r,commit:u},{type:'checkbox',id:'toolbar',label:E.popupToolbar,setup:r,commit:u}]},{type:'hbox',children:[{type:'checkbox',id:'menubar',label:E.popupMenuBar,setup:r,commit:u},{type:'checkbox',id:'fullscreen',label:E.popupFullScreen,setup:r,commit:u}]},{type:'hbox',children:[{type:'checkbox',id:'scrollbars',label:E.popupScrollBars,setup:r,commit:u},{type:'checkbox',id:'dependent',label:E.popupDependent,setup:r,commit:u}]},{type:'hbox',children:[{type:'text',widths:['50%','50%'],labelLayout:'horizontal',label:D.width,id:'width',setup:r,commit:u},{type:'text',labelLayout:'horizontal',widths:['50%','50%'],label:E.popupLeft,id:'left',setup:r,commit:u}]},{type:'hbox',children:[{type:'text',labelLayout:'horizontal',widths:['50%','50%'],label:D.height,id:'height',setup:r,commit:u},{type:'text',labelLayout:'horizontal',label:E.popupTop,widths:['50%','50%'],id:'top',setup:r,commit:u}]}]}]}]},{id:'upload',label:E.upload,title:E.upload,hidden:true,filebrowser:'uploadButton',elements:[{type:'file',id:'upload',label:D.upload,style:'height:40px',size:29},{type:'fileButton',id:'uploadButton',label:D.uploadSubmit,filebrowser:'info:url','for':['upload','upload']}]},{id:'advanced',label:E.advanced,title:E.advanced,elements:[{type:'vbox',padding:1,children:[{type:'hbox',widths:['45%','35%','20%'],children:[{type:'text',id:'advId',label:E.id,setup:s,commit:v},{type:'select',id:'advLangDir',label:E.langDir,'default':'',style:'width:110px',items:[[D.notSet,''],[E.langDirLTR,'ltr'],[E.langDirRTL,'rtl']],setup:s,commit:v},{type:'text',id:'advAccessKey',width:'80px',label:E.acccessKey,maxLength:1,setup:s,commit:v}]},{type:'hbox',widths:['45%','35%','20%'],children:[{type:'text',label:E.name,id:'advName',setup:s,commit:v},{type:'text',label:E.langCode,id:'advLangCode',width:'110px','default':'',setup:s,commit:v},{type:'text',label:E.tabIndex,id:'advTabIndex',width:'80px',maxLength:5,setup:s,commit:v}]}]},{type:'vbox',padding:1,children:[{type:'hbox',widths:['45%','55%'],children:[{type:'text',label:E.advisoryTitle,'default':'',id:'advTitle',setup:s,commit:v},{type:'text',label:E.advisoryContentType,'default':'',id:'advContentType',setup:s,commit:v}]},{type:'hbox',widths:['45%','55%'],children:[{type:'text',label:E.cssClasses,'default':'',id:'advCSSClasses',setup:s,commit:v},{type:'text',label:E.charset,'default':'',id:'advCharset',setup:s,commit:v}]},{type:'hbox',widths:['45%','55%'],children:[{type:'text',label:E.rel,'default':'',id:'advRel',setup:s,commit:v},{type:'text',label:E.styles,'default':'',id:'advStyles',setup:s,commit:v}]}]}]}],onShow:function(){var F=this.getParentEditor(),G=F.getSelection(),H=null; +if((H=b.getSelectedLink(F))&&H.hasAttribute('href'))G.selectElement(H);else H=null;this.setupContent(p.apply(this,[F,H]));},onOk:function(){var F={},G=[],H={},I=this,J=this.getParentEditor();this.commitContent(H);switch(H.type||'url'){case 'url':var K=H.url&&H.url.protocol!=undefined?H.url.protocol:'http://',L=H.url&&CKEDITOR.tools.trim(H.url.url)||'';F['data-cke-saved-href']=L.indexOf('/')===0?L:K+L;break;case 'anchor':var M=H.anchor&&H.anchor.name,N=H.anchor&&H.anchor.id;F['data-cke-saved-href']='#'+(M||N||'');break;case 'email':var O,P=H.email,Q=P.address;switch(y){case '':case 'encode':var R=encodeURIComponent(P.subject||''),S=encodeURIComponent(P.body||''),T=[];R&&T.push('subject='+R);S&&T.push('body='+S);T=T.length?'?'+T.join('&'):'';if(y=='encode'){O=["javascript:void(location.href='mailto:'+",B(Q)];T&&O.push("+'",x(T),"'");O.push(')');}else O=['mailto:',Q,T];break;default:var U=Q.split('@',2);P.name=U[0];P.domain=U[1];O=['javascript:',A(P)];}F['data-cke-saved-href']=O.join('');break;}if(H.target)if(H.target.type=='popup'){var V=["window.open(this.href, '",H.target.name||'',"', '"],W=['resizable','status','location','toolbar','menubar','fullscreen','scrollbars','dependent'],X=W.length,Y=function(ai){if(H.target[ai])W.push(ai+'='+H.target[ai]);};for(var Z=0;Z<X;Z++)W[Z]=W[Z]+(H.target[W[Z]]?'=yes':'=no');Y('width');Y('left');Y('height');Y('top');V.push(W.join(','),"'); return false;");F['data-cke-pa-onclick']=V.join('');G.push('target');}else{if(H.target.type!='notSet'&&H.target.name)F.target=H.target.name;else G.push('target');G.push('data-cke-pa-onclick','onclick');}if(H.adv){var aa=function(ai,aj){var ak=H.adv[ai];if(ak)F[aj]=ak;else G.push(aj);};aa('advId','id');aa('advLangDir','dir');aa('advAccessKey','accessKey');if(H.adv.advName)F.name=F['data-cke-saved-name']=H.adv.advName;else G=G.concat(['data-cke-saved-name','name']);aa('advLangCode','lang');aa('advTabIndex','tabindex');aa('advTitle','title');aa('advContentType','type');aa('advCSSClasses','class');aa('advCharset','charset');aa('advStyles','style');aa('advRel','rel');}F.href=F['data-cke-saved-href'];if(!this._.selectedElement){var ab=J.getSelection(),ac=ab.getRanges(true);if(ac.length==1&&ac[0].collapsed){var ad=new CKEDITOR.dom.text(H.type=='email'?H.email.address:F['data-cke-saved-href'],J.document);ac[0].insertNode(ad);ac[0].selectNodeContents(ad);ab.selectRanges(ac);}var ae=new CKEDITOR.style({element:'a',attributes:F});ae.type=CKEDITOR.STYLE_INLINE;ae.apply(J.document);}else{var af=this._.selectedElement,ag=af.data('cke-saved-href'),ah=af.getHtml(); +af.setAttributes(F);af.removeAttributes(G);if(H.adv&&H.adv.advName&&CKEDITOR.plugins.link.synAnchorSelector)af.addClass(af.getChildCount()?'cke_anchor':'cke_anchor_empty');if(ag==ah||H.type=='email'&&ah.indexOf('@')!=-1)af.setHtml(H.type=='email'?H.email.address:F['data-cke-saved-href']);delete this._.selectedElement;}},onLoad:function(){if(!a.config.linkShowAdvancedTab)this.hidePage('advanced');if(!a.config.linkShowTargetTab)this.hidePage('target');},onFocus:function(){var F=this.getContentElement('info','linkType'),G;if(F&&F.getValue()=='url'){G=this.getContentElement('info','url');G.select();}}};}); diff --git a/plugins/link/images/anchor.gif b/plugins/link/images/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..5aa797b2240a432d9f3f1d166ed5542eaf684937 GIT binary patch literal 184 zcmZ?wbhEHb6ky<I*v!c=ZQ8Vk28RFtXa4{H|IB}enKOaxGseaYXU+f_{~0iV;!hSv z1_n+B9gqyj3<j1|1JBG0j>gJ|Uu&?oD;%Ae!z@09(NL_hv#6<cM+(mwx7vpr4xgLw z>Slx0y!YR{?r|LJZgAju=f-$sQVWNL{+Tsz18#+~Ke%+zTWns()WcPwy8dQcr!JH# U&i)o#<isE;*~HKyEXZID0Ma=`?EnA( literal 0 HcmV?d00001 diff --git a/plugins/liststyle/dialogs/liststyle.js b/plugins/liststyle/dialogs/liststyle.js new file mode 100644 index 0000000..d3af418 --- /dev/null +++ b/plugins/liststyle/dialogs/liststyle.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){function a(e,f){var g;try{g=e.getSelection().getRanges()[0];}catch(h){return null;}g.shrink(CKEDITOR.SHRINK_TEXT);return g.getCommonAncestor().getAscendant(f,1);};var b=function(e){return e.type==CKEDITOR.NODE_ELEMENT&&e.is('li');},c={a:'lower-alpha',A:'upper-alpha',i:'lower-roman',I:'upper-roman',1:'decimal',disc:'disc',circle:'circle',square:'square'};function d(e,f){var g=e.lang.list;if(f=='bulletedListStyle')return{title:g.bulletedTitle,minWidth:300,minHeight:50,contents:[{id:'info',accessKey:'I',elements:[{type:'select',label:g.type,id:'type',align:'center',style:'width:150px',items:[[g.notset,''],[g.circle,'circle'],[g.disc,'disc'],[g.square,'square']],setup:function(i){var j=i.getStyle('list-style-type')||c[i.getAttribute('type')]||i.getAttribute('type')||'';this.setValue(j);},commit:function(i){var j=this.getValue();if(j)i.setStyle('list-style-type',j);else i.removeStyle('list-style-type');}}]}],onShow:function(){var i=this.getParentEditor(),j=a(i,'ul');j&&this.setupContent(j);},onOk:function(){var i=this.getParentEditor(),j=a(i,'ul');j&&this.commitContent(j);}};else if(f=='numberedListStyle'){var h=[[g.notset,''],[g.lowerRoman,'lower-roman'],[g.upperRoman,'upper-roman'],[g.lowerAlpha,'lower-alpha'],[g.upperAlpha,'upper-alpha'],[g.decimal,'decimal']];if(!CKEDITOR.env.ie||CKEDITOR.env.version>7)h.concat([[g.armenian,'armenian'],[g.decimalLeadingZero,'decimal-leading-zero'],[g.georgian,'georgian'],[g.lowerGreek,'lower-greek']]);return{title:g.numberedTitle,minWidth:300,minHeight:50,contents:[{id:'info',accessKey:'I',elements:[{type:'hbox',widths:['25%','75%'],children:[{label:g.start,type:'text',id:'start',validate:CKEDITOR.dialog.validate.integer(g.validateStartNumber),setup:function(i){var j=i.getFirst(b).getAttribute('value')||i.getAttribute('start')||1;j&&this.setValue(j);},commit:function(i){var j=i.getFirst(b),k=j.getAttribute('value')||i.getAttribute('start')||1;i.getFirst(b).removeAttribute('value');var l=parseInt(this.getValue(),10);if(isNaN(l))i.removeAttribute('start');else i.setAttribute('start',l);var m=j,n=k,o=isNaN(l)?1:l;while((m=m.getNext(b))&&n++){if(m.getAttribute('value')==n)m.setAttribute('value',o+n-k);}}},{type:'select',label:g.type,id:'type',style:'width: 100%;',items:h,setup:function(i){var j=i.getStyle('list-style-type')||c[i.getAttribute('type')]||i.getAttribute('type')||'';this.setValue(j);},commit:function(i){var j=this.getValue();if(j)i.setStyle('list-style-type',j);else i.removeStyle('list-style-type');}}]}]}],onShow:function(){var i=this.getParentEditor(),j=a(i,'ol'); +j&&this.setupContent(j);},onOk:function(){var i=this.getParentEditor(),j=a(i,'ol');j&&this.commitContent(j);}};}};CKEDITOR.dialog.add('numberedListStyle',function(e){return d(e,'numberedListStyle');});CKEDITOR.dialog.add('bulletedListStyle',function(e){return d(e,'bulletedListStyle');});})(); diff --git a/plugins/pagebreak/images/pagebreak.gif b/plugins/pagebreak/images/pagebreak.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d1cffd64af72709b1180b3b0a51bbfe30bcb8c6 GIT binary patch literal 54 zcmZ?wbhEHb<Y!=IXkcWRIdkU!|Nj+#vM@3*Ff!;c00Bsbfr;0puk*m${3$UTHfcIC HGFSrukc<xG literal 0 HcmV?d00001 diff --git a/plugins/pastefromword/filter/default.js b/plugins/pastefromword/filter/default.js new file mode 100644 index 0000000..1a91980 --- /dev/null +++ b/plugins/pastefromword/filter/default.js @@ -0,0 +1,11 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=CKEDITOR.htmlParser.fragment.prototype,b=CKEDITOR.htmlParser.element.prototype;a.onlyChild=b.onlyChild=function(){var u=this.children,v=u.length,w=v==1&&u[0];return w||null;};b.removeAnyChildWithName=function(u){var v=this.children,w=[],x;for(var y=0;y<v.length;y++){x=v[y];if(!x.name)continue;if(x.name==u){w.push(x);v.splice(y--,1);}w=w.concat(x.removeAnyChildWithName(u));}return w;};b.getAncestor=function(u){var v=this.parent;while(v&&!(v.name&&v.name.match(u)))v=v.parent;return v;};a.firstChild=b.firstChild=function(u){var v;for(var w=0;w<this.children.length;w++){v=this.children[w];if(u(v))return v;else if(v.name){v=v.firstChild(u);if(v)return v;}}return null;};b.addStyle=function(u,v,w){var A=this;var x,y='';if(typeof v=='string')y+=u+':'+v+';';else{if(typeof u=='object')for(var z in u){if(u.hasOwnProperty(z))y+=z+':'+u[z]+';';}else y+=u;w=v;}if(!A.attributes)A.attributes={};x=A.attributes.style||'';x=(w?[y,x]:[x,y]).join(';');A.attributes.style=x.replace(/^;|;(?=;)/,'');};CKEDITOR.dtd.parentOf=function(u){var v={};for(var w in this){if(w.indexOf('$')==-1&&this[w][u])v[w]=1;}return v;};function c(u){var v=u.children,w,x,y=u.children.length,z,A,B=/list-style-type:(.*?)(?:;|$)/,C=CKEDITOR.plugins.pastefromword.filters.stylesFilter;x=u.attributes;if(B.exec(x.style))return;for(var D=0;D<y;D++){w=v[D];if(w.attributes.value&&Number(w.attributes.value)==D+1)delete w.attributes.value;z=B.exec(w.attributes.style);if(z)if(z[1]==A||!A)A=z[1];else{A=null;break;}}if(A){for(D=0;D<y;D++){x=v[D].attributes;x.style&&(x.style=C([['list-style-type']])(x.style)||'');}u.addStyle('list-style-type',A);}};var d=/^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i,e=/^(?:\b0[^\s]*\s*){1,4}$/,f='^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$',g=new RegExp(f),h=new RegExp(f.toUpperCase()),i={decimal:/\d+/,'lower-roman':g,'upper-roman':h,'lower-alpha':/^[a-z]+$/,'upper-alpha':/^[A-Z]+$/},j={disc:/[l\u00B7\u2002]/,circle:/[\u006F\u00D8]/,square:/[\u006E\u25C6]/},k={ol:i,ul:j},l=[[1000,'M'],[900,'CM'],[500,'D'],[400,'CD'],[100,'C'],[90,'XC'],[50,'L'],[40,'XL'],[10,'X'],[9,'IX'],[5,'V'],[4,'IV'],[1,'I']],m='ABCDEFGHIJKLMNOPQRSTUVWXYZ';function n(u){u=u.toUpperCase();var v=l.length,w=0;for(var x=0;x<v;++x)for(var y=l[x],z=y[1].length;u.substr(0,z)==y[1];u=u.substr(z))w+=y[0];return w;};function o(u){u=u.toUpperCase();var v=m.length,w=1;for(var x=1;u.length>0;x*=v){w+=m.indexOf(u.charAt(u.length-1))*x;u=u.substr(0,u.length-1);}return w; +};var p=0,q=null,r,s=CKEDITOR.plugins.pastefromword={utils:{createListBulletMarker:function(u,v){var w=new CKEDITOR.htmlParser.element('cke:listbullet');w.attributes={'cke:listsymbol':u[0]};w.add(new CKEDITOR.htmlParser.text(v));return w;},isListBulletIndicator:function(u){var v=u.attributes&&u.attributes.style;if(/mso-list\s*:\s*Ignore/i.test(v))return true;},isContainingOnlySpaces:function(u){var v;return(v=u.onlyChild())&&/^(:?\s| )+$/.test(v.value);},resolveList:function(u){var v=u.attributes,w;if((w=u.removeAnyChildWithName('cke:listbullet'))&&w.length&&(w=w[0])){u.name='cke:li';if(v.style)v.style=s.filters.stylesFilter([['text-indent'],['line-height'],[/^margin(:?-left)?$/,null,function(x){var y=x.split(' ');x=CKEDITOR.tools.convertToPx(y[3]||y[1]||y[0]);if(!p&&q!==null&&x>q)p=x-q;q=x;v['cke:indent']=p&&Math.ceil(x/p)+1||1;}],[/^mso-list$/,null,function(x){x=x.split(' ');var y=Number(x[0].match(/\d+/)),z=Number(x[1].match(/\d+/));if(z==1){y!==r&&(v['cke:reset']=1);r=y;}v['cke:indent']=z;}]])(v.style,u)||'';if(!v['cke:indent']){q=0;v['cke:indent']=1;}CKEDITOR.tools.extend(v,w.attributes);return true;}else r=q=p=null;return false;},getStyleComponents:(function(){var u=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(u);return function(v,w,x){u.setStyle(v,w);var y={},z=x.length;for(var A=0;A<z;A++)y[x[A]]=u.getStyle(x[A]);return y;};})(),listDtdParents:CKEDITOR.dtd.parentOf('ol')},filters:{flattenList:function(u,v){v=typeof v=='number'?v:1;var w=u.attributes,x;switch(w.type){case 'a':x='lower-alpha';break;case '1':x='decimal';break;}var y=u.children,z;for(var A=0;A<y.length;A++){z=y[A];if(z.name in CKEDITOR.dtd.$listItem){var B=z.attributes,C=z.children,D=C.length,E=C[D-1];if(E.name in CKEDITOR.dtd.$list){u.add(E,A+1);if(!--C.length)y.splice(A--,1);}z.name='cke:li';w.start&&!A&&(B.value=w.start);s.filters.stylesFilter([['tab-stops',null,function(H){var I=H.split(' ')[1].match(d);I&&(q=CKEDITOR.tools.convertToPx(I[0]));}],v==1?['mso-list',null,function(H){H=H.split(' ');var I=Number(H[0].match(/\d+/));I!==r&&(B['cke:reset']=1);r=I;}]:null])(B.style);B['cke:indent']=v;B['cke:listtype']=u.name;B['cke:list-style-type']=x;}else if(z.name in CKEDITOR.dtd.$list){arguments.callee.apply(this,[z,v+1]);y=y.slice(0,A).concat(z.children).concat(y.slice(A+1));u.children=[];for(var F=0,G=y.length;F<G;F++)u.add(y[F]);}}delete u.name;w['cke:list']=1;},assembleList:function(u){var v=u.children,w,x,y,z,A,B,C,D=[],E,F,G,H,I,J; +for(var K=0;K<v.length;K++){w=v[K];if('cke:li'==w.name){w.name='li';x=w;y=x.attributes;G=y['cke:listsymbol'];G=G&&G.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);H=I=J=null;if(y['cke:ignored']){v.splice(K--,1);continue;}y['cke:reset']&&(C=A=B=null);z=Number(y['cke:indent']);if(z!=A)F=E=null;if(!G){H=y['cke:listtype']||'ol';I=y['cke:list-style-type'];}else{if(F&&k[F][E].test(G[1])){H=F;I=E;}else for(var L in k)for(var M in k[L]){if(k[L][M].test(G[1]))if(L=='ol'&&/alpha|roman/.test(M)){var N=/roman/.test(M)?n(G[1]):o(G[1]);if(!J||N<J){J=N;H=L;I=M;}}else{H=L;I=M;break;}}!H&&(H=G[2]?'ol':'ul');}F=H;E=I||(H=='ol'?'decimal':'disc');if(I&&I!=(H=='ol'?'decimal':'disc'))x.addStyle('list-style-type',I);if(H=='ol'&&G){switch(I){case 'decimal':J=Number(G[1]);break;case 'lower-roman':case 'upper-roman':J=n(G[1]);break;case 'lower-alpha':case 'upper-alpha':J=o(G[1]);break;}x.attributes.value=J;}if(!C){D.push(C=new CKEDITOR.htmlParser.element(H));C.add(x);v[K]=C;}else{if(z>A){D.push(C=new CKEDITOR.htmlParser.element(H));C.add(x);B.add(C);}else if(z<A){var O=A-z,P;while(O--&&(P=C.parent))C=P.parent;C.add(x);}else C.add(x);v.splice(K--,1);}B=x;A=z;}else if(C)C=A=B=null;}for(K=0;K<D.length;K++)c(D[K]);C=A=B=r=q=p=null;},falsyFilter:function(u){return false;},stylesFilter:function(u,v){return function(w,x){var y=[];(w||'').replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(A,B,C){B=B.toLowerCase();B=='font-family'&&(C=C.replace(/["']/g,''));var D,E,F,G;for(var H=0;H<u.length;H++){if(u[H]){D=u[H][0];E=u[H][1];F=u[H][2];G=u[H][3];if(B.match(D)&&(!E||C.match(E))){B=G||B;v&&(F=F||C);if(typeof F=='function')F=F(C,x,B);if(F&&F.push)B=F[0],F=F[1];if(typeof F=='string')y.push([B,F]);return;}}}!v&&y.push([B,C]);});for(var z=0;z<y.length;z++)y[z]=y[z].join(':');return y.length?y.join(';')+';':false;};},elementMigrateFilter:function(u,v){return function(w){var x=v?new CKEDITOR.style(u,v)._.definition:u;w.name=x.element;CKEDITOR.tools.extend(w.attributes,CKEDITOR.tools.clone(x.attributes));w.addStyle(CKEDITOR.style.getStyleText(x));};},styleMigrateFilter:function(u,v){var w=this.elementMigrateFilter;return function(x,y){var z=new CKEDITOR.htmlParser.element(null),A={};A[v]=x;w(u,A)(z);z.children=y.children;y.children=[z];};},bogusAttrFilter:function(u,v){if(v.name.indexOf('cke:')==-1)return false;},applyStyleFilter:null},getRules:function(u){var v=CKEDITOR.dtd,w=CKEDITOR.tools.extend({},v.$block,v.$listItem,v.$tableContent),x=u.config,y=this.filters,z=y.falsyFilter,A=y.stylesFilter,B=y.elementMigrateFilter,C=CKEDITOR.tools.bind(this.filters.styleMigrateFilter,this.filters),D=this.utils.createListBulletMarker,E=y.flattenList,F=y.assembleList,G=this.utils.isListBulletIndicator,H=this.utils.isContainingOnlySpaces,I=this.utils.resolveList,J=function(O){O=CKEDITOR.tools.convertToPx(O); +return isNaN(O)?O:O+'px';},K=this.utils.getStyleComponents,L=this.utils.listDtdParents,M=x.pasteFromWordRemoveFontStyles!==false,N=x.pasteFromWordRemoveStyles!==false;return{elementNames:[[/meta|link|script/,'']],root:function(O){O.filterChildren();F(O);},elements:{'^':function(O){var P;if(CKEDITOR.env.gecko&&(P=y.applyStyleFilter))P(O);},$:function(O){var P=O.name||'',Q=O.attributes;if(P in w&&Q.style)Q.style=A([[/^(:?width|height)$/,null,J]])(Q.style)||'';if(P.match(/h\d/)){O.filterChildren();if(I(O))return;B(x['format_'+P])(O);}else if(P in v.$inline){O.filterChildren();if(H(O))delete O.name;}else if(P.indexOf(':')!=-1&&P.indexOf('cke')==-1){O.filterChildren();if(P=='v:imagedata'){var R=O.attributes['o:href'];if(R)O.attributes.src=R;O.name='img';return;}delete O.name;}if(P in L){O.filterChildren();F(O);}},style:function(O){if(CKEDITOR.env.gecko){var P=O.onlyChild().value.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/),Q=P&&P[1],R={};if(Q){Q.replace(/[\n\r]/g,'').replace(/(.+?)\{(.+?)\}/g,function(S,T,U){T=T.split(',');var V=T.length,W;for(var X=0;X<V;X++)CKEDITOR.tools.trim(T[X]).replace(/^(\w+)(\.[\w-]+)?$/g,function(Y,Z,aa){Z=Z||'*';aa=aa.substring(1,aa.length);if(aa.match(/MsoNormal/))return;if(!R[Z])R[Z]={};if(aa)R[Z][aa]=U;else R[Z]=U;});});y.applyStyleFilter=function(S){var T=R['*']?'*':S.name,U=S.attributes&&S.attributes['class'],V;if(T in R){V=R[T];if(typeof V=='object')V=V[U];V&&S.addStyle(V,true);}};}}return false;},p:function(O){if(/MsoListParagraph/.exec(O.attributes['class'])){var P=O.firstChild(function(S){return S.type==CKEDITOR.NODE_TEXT&&!H(S.parent);}),Q=P&&P.parent,R=Q&&Q.attributes;R&&!R.style&&(R.style='mso-list: Ignore;');}O.filterChildren();if(I(O))return;if(x.enterMode==CKEDITOR.ENTER_BR){delete O.name;O.add(new CKEDITOR.htmlParser.element('br'));}else B(x['format_'+(x.enterMode==CKEDITOR.ENTER_P?'p':'div')])(O);},div:function(O){var P=O.onlyChild();if(P&&P.name=='table'){var Q=O.attributes;P.attributes=CKEDITOR.tools.extend(P.attributes,Q);Q.style&&P.addStyle(Q.style);var R=new CKEDITOR.htmlParser.element('div');R.addStyle('clear','both');O.add(R);delete O.name;}},td:function(O){if(O.getAncestor('thead'))O.name='th';},ol:E,ul:E,dl:E,font:function(O){if(G(O.parent)){delete O.name;return;}O.filterChildren();var P=O.attributes,Q=P.style,R=O.parent;if('font'==R.name){CKEDITOR.tools.extend(R.attributes,O.attributes);Q&&R.addStyle(Q);delete O.name;}else{Q=Q||'';if(P.color){P.color!='#000000'&&(Q+='color:'+P.color+';');delete P.color; +}if(P.face){Q+='font-family:'+P.face+';';delete P.face;}if(P.size){Q+='font-size:'+(P.size>3?'large':P.size<3?'small':'medium')+';';delete P.size;}O.name='span';O.addStyle(Q);}},span:function(O){if(G(O.parent))return false;O.filterChildren();if(H(O)){delete O.name;return null;}if(G(O)){var P=O.firstChild(function(Y){return Y.value||Y.name=='img';}),Q=P&&(P.value||'l.'),R=Q&&Q.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(R){var S=D(R,Q),T=O.getAncestor('span');if(T&&/ mso-hide:\s*all|display:\s*none /.test(T.attributes.style))S.attributes['cke:ignored']=1;return S;}}var U=O.children,V=O.attributes,W=V&&V.style,X=U&&U[0];if(W)V.style=A([['line-height'],[/^font-family$/,null,!M?C(x.font_style,'family'):null],[/^font-size$/,null,!M?C(x.fontSize_style,'size'):null],[/^color$/,null,!M?C(x.colorButton_foreStyle,'color'):null],[/^background-color$/,null,!M?C(x.colorButton_backStyle,'color'):null]])(W,O)||'';return null;},b:B(x.coreStyles_bold),i:B(x.coreStyles_italic),u:B(x.coreStyles_underline),s:B(x.coreStyles_strike),sup:B(x.coreStyles_superscript),sub:B(x.coreStyles_subscript),a:function(O){var P=O.attributes;if(P&&!P.href&&P.name)delete O.name;else if(CKEDITOR.env.webkit&&P.href&&P.href.match(/file:\/\/\/[\S]+#/i))P.href=P.href.replace(/file:\/\/\/[^#]+/i,'');},'cke:listbullet':function(O){if(O.getAncestor(/h\d/)&&!x.pasteFromWordNumberedHeadingToList)delete O.name;}},attributeNames:[[/^onmouse(:?out|over)/,''],[/^onload$/,''],[/(?:v|o):\w+/,''],[/^lang/,'']],attributes:{style:A(N?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(O,P,Q){if(P.name in {p:1,div:1}){var R=x.contentsLangDirection=='ltr'?'margin-left':'margin-right';if(Q=='margin')O=K(Q,O,[R])[R];else if(Q!=R)return null;if(O&&!e.test(O))return[R,O];}return null;}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(O,P){if(P.name=='img')return O;}],[/^width|height$/,null,function(O,P){if(P.name in {table:1,td:1,th:1,img:1})return O;}]]:[[/^mso-/],[/-color$/,null,function(O){if(O=='transparent')return false;if(CKEDITOR.env.gecko)return O.replace(/-moz-use-text-color/g,'transparent');}],[/^margin$/,e],['text-indent','0cm'],['page-break-before'],['tab-stops'],['display','none'],M?[/font-?/]:null],N),width:function(O,P){if(P.name in v.$tableContent)return false;},border:function(O,P){if(P.name in v.$tableContent)return false;},'class':z,bgcolor:z,valign:N?z:function(O,P){P.addStyle('vertical-align',O);return false;}},comment:!CKEDITOR.env.ie?function(O,P){var Q=O.match(/<img.*?>/),R=O.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/); +if(R){var S=R[1]||Q&&'l.',T=S&&S.match(/>(?:[(]?)([^\s]+?)([.)]?)</);return D(T,S);}if(CKEDITOR.env.gecko&&Q){var U=CKEDITOR.htmlParser.fragment.fromHtml(Q[0]).children[0],V=P.previous,W=V&&V.value.match(/<v:imagedata[^>]*o:href=['"](.*?)['"]/),X=W&&W[1];X&&(U.attributes.src=X);return U;}return false;}:z};}},t=function(){this.dataFilter=new CKEDITOR.htmlParser.filter();};t.prototype={toHtml:function(u){var v=CKEDITOR.htmlParser.fragment.fromHtml(u,false),w=new CKEDITOR.htmlParser.basicWriter();v.writeHtml(w,this.dataFilter);return w.getHtml(true);}};CKEDITOR.cleanWord=function(u,v){if(CKEDITOR.env.gecko)u=u.replace(/(<!--\[if[^<]*?\])-->([\S\s]*?)<!--(\[endif\]-->)/gi,'$1$2$3');var w=new t(),x=w.dataFilter;x.addRules(CKEDITOR.plugins.pastefromword.getRules(v));v.fire('beforeCleanWord',{filter:x});try{u=w.toHtml(u,false);}catch(y){alert(v.lang.pastefromword.error);}u=u.replace(/cke:.*?".*?"/g,'');u=u.replace(/style=""/g,'');u=u.replace(/<span>/g,'');return u;};})(); diff --git a/plugins/pastetext/dialogs/pastetext.js b/plugins/pastetext/dialogs/pastetext.js new file mode 100644 index 0000000..a5cfd05 --- /dev/null +++ b/plugins/pastetext/dialogs/pastetext.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){CKEDITOR.dialog.add('pastetext',function(a){return{title:a.lang.pasteText.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?368:350,minHeight:240,onShow:function(){this.setupContent();},onOk:function(){this.commitContent();},contents:[{label:a.lang.common.generalTab,id:'general',elements:[{type:'html',id:'pasteMsg',html:'<div style="white-space:normal;width:340px;">'+a.lang.clipboard.pasteMsg+'</div>'},{type:'textarea',id:'content',className:'cke_pastetext',onLoad:function(){var b=this.getDialog().getContentElement('general','pasteMsg').getElement(),c=this.getElement().getElementsByTag('textarea').getItem(0);c.setAttribute('aria-labelledby',b.$.id);c.setStyle('direction',a.config.contentsLangDirection);},focus:function(){this.getElement().focus();},setup:function(){this.setValue('');},commit:function(){var b=this.getValue();setTimeout(function(){a.fire('paste',{text:b});},0);}}]}]};});})(); diff --git a/plugins/placeholder/dialogs/placeholder.js b/plugins/placeholder/dialogs/placeholder.js new file mode 100644 index 0000000..3b7e6d1 --- /dev/null +++ b/plugins/placeholder/dialogs/placeholder.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){function a(b,c){var d=b.lang.placeholder,e=b.lang.common.generalTab;return{title:d.title,minWidth:300,minHeight:80,contents:[{id:'info',label:e,title:e,elements:[{id:'text',type:'text',style:'width: 100%;',label:d.text,'default':'',required:true,validate:CKEDITOR.dialog.validate.notEmpty(d.textMissing),setup:function(f){if(c)this.setValue(f.getText().slice(2,-2));},commit:function(f){var g='[['+this.getValue()+']]';CKEDITOR.plugins.placeholder.createPlaceholder(b,f,g);}}]}],onShow:function(){if(c)this._element=CKEDITOR.plugins.placeholder.getSelectedPlaceHoder(b);this.setupContent(this._element);},onOk:function(){this.commitContent(this._element);delete this._element;}};};CKEDITOR.dialog.add('createplaceholder',function(b){return a(b);});CKEDITOR.dialog.add('editplaceholder',function(b){return a(b,1);});})(); diff --git a/plugins/placeholder/lang/en.js b/plugins/placeholder/lang/en.js new file mode 100644 index 0000000..723a432 --- /dev/null +++ b/plugins/placeholder/lang/en.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang('placeholder','en',{placeholder:{title:'Placeholder Properties',toolbar:'Create Placeholder',text:'Placeholder Text',edit:'Edit Placeholder',textMissing:'The placeholder must contain text.'}}); diff --git a/plugins/placeholder/lang/he.js b/plugins/placeholder/lang/he.js new file mode 100644 index 0000000..4feb2f2 --- /dev/null +++ b/plugins/placeholder/lang/he.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang('placeholder','he',{placeholder:{title:'××פ××× × ×©××ר ×ק××',toolbar:'צ×ר ש××ר ×ק××',text:'ת××× ×©××ר ××ק××',edit:'ער×× ×©××ר ×ק××',textMissing:'ש××ר ××ק×× ×××× ××××× ×קס×.'}}); diff --git a/plugins/placeholder/placeholder.gif b/plugins/placeholder/placeholder.gif new file mode 100644 index 0000000000000000000000000000000000000000..c07078c176ea25623746d36bf111fab9b9765195 GIT binary patch literal 96 zcmZ?wbhEHb6krfwn8*ME|NjHge;`BgCkrD30~3P|NE9T`z+^b3f933l{0li5j)WiH tvL!7&SK)grlj*V*H&&|Ms+>_aN#@I~@O6($sxy6?#M?fu&|qM&1^{HXA;JIv literal 0 HcmV?d00001 diff --git a/plugins/placeholder/plugin.js b/plugins/placeholder/plugin.js new file mode 100644 index 0000000..c49c51d --- /dev/null +++ b/plugins/placeholder/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=/\[\[[^\]]+\]\]/g;CKEDITOR.plugins.add('placeholder',{requires:['dialog'],lang:['en','he'],init:function(b){var c=b.lang.placeholder;b.addCommand('createplaceholder',new CKEDITOR.dialogCommand('createplaceholder'));b.addCommand('editplaceholder',new CKEDITOR.dialogCommand('editplaceholder'));b.ui.addButton('CreatePlaceholder',{label:c.toolbar,command:'createplaceholder',icon:this.path+'placeholder.gif'});if(b.addMenuItems){b.addMenuGroup('placeholder',20);b.addMenuItems({editplaceholder:{label:c.edit,command:'editplaceholder',group:'placeholder',order:1,icon:this.path+'placeholder.gif'}});if(b.contextMenu)b.contextMenu.addListener(function(d,e){if(!d||!d.data('cke-placeholder'))return null;return{editplaceholder:CKEDITOR.TRISTATE_OFF};});}b.on('doubleclick',function(d){if(CKEDITOR.plugins.placeholder.getSelectedPlaceHoder(b))d.data.dialog='editplaceholder';});b.addCss('.cke_placeholder{background-color: #ffff00;'+(CKEDITOR.env.gecko?'cursor: default;':'')+'}');b.on('contentDom',function(){b.document.getBody().on('resizestart',function(d){if(b.getSelection().getSelectedElement().data('cke-placeholder'))d.data.preventDefault();});});CKEDITOR.dialog.add('createplaceholder',this.path+'dialogs/placeholder.js');CKEDITOR.dialog.add('editplaceholder',this.path+'dialogs/placeholder.js');},afterInit:function(b){var c=b.dataProcessor,d=c&&c.dataFilter,e=c&&c.htmlFilter;if(d)d.addRules({text:function(f){return f.replace(a,function(g){return CKEDITOR.plugins.placeholder.createPlaceholder(b,null,g,1);});}});if(e)e.addRules({elements:{span:function(f){if(f.attributes&&f.attributes['data-cke-placeholder'])delete f.name;}}});}});})();CKEDITOR.plugins.placeholder={createPlaceholder:function(a,b,c,d){var e=new CKEDITOR.dom.element('span',a.document);e.setAttributes({contentEditable:'false','data-cke-placeholder':1,'class':'cke_placeholder'});c&&e.setText(c);if(d)return e.getOuterHtml();if(b){if(CKEDITOR.env.ie){e.insertAfter(b);setTimeout(function(){b.remove();e.focus();},10);}else e.replace(b);}else a.insertElement(e);return null;},getSelectedPlaceHoder:function(a){var b=a.getSelection().getRanges()[0];b.shrink(CKEDITOR.SHRINK_TEXT);var c=b.startContainer;while(c&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.data('cke-placeholder')))c=c.getParent();return c;}}; diff --git a/plugins/scayt/dialogs/options.js b/plugins/scayt/dialogs/options.js new file mode 100644 index 0000000..e0834a7 --- /dev/null +++ b/plugins/scayt/dialogs/options.js @@ -0,0 +1,8 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('scaytcheck',function(a){var b=true,c,d=CKEDITOR.document,e=a.name,f=CKEDITOR.plugins.scayt.getUiTabs(a),g,h=[],i=0,j=['dic_create_'+e+',dic_restore_'+e,'dic_rename_'+e+',dic_delete_'+e],k=['mixedCase','mixedWithDigits','allCaps','ignoreDomainNames'];function l(){if(typeof document.forms['optionsbar_'+e]!='undefined')return document.forms['optionsbar_'+e].options;return[];};function m(){if(typeof document.forms['languagesbar_'+e]!='undefined')return document.forms['languagesbar_'+e].scayt_lang;return[];};function n(z,A){if(!z)return;var B=z.length;if(B==undefined){z.checked=z.value==A.toString();return;}for(var C=0;C<B;C++){z[C].checked=false;if(z[C].value==A.toString())z[C].checked=true;}};var o=a.lang.scayt,p=[{id:'options',label:o.optionsTab,elements:[{type:'html',id:'options',html:'<form name="optionsbar_'+e+'"><div class="inner_options">'+'\t<div class="messagebox"></div>'+'\t<div style="display:none;">'+'\t\t<input type="checkbox" name="options" id="allCaps_'+e+'" />'+'\t\t<label for="allCaps" id="label_allCaps_'+e+'"></label>'+'\t</div>'+'\t<div style="display:none;">'+'\t\t<input name="options" type="checkbox" id="ignoreDomainNames_'+e+'" />'+'\t\t<label for="ignoreDomainNames" id="label_ignoreDomainNames_'+e+'"></label>'+'\t</div>'+'\t<div style="display:none;">'+'\t<input name="options" type="checkbox" id="mixedCase_'+e+'" />'+'\t\t<label for="mixedCase" id="label_mixedCase_'+e+'"></label>'+'\t</div>'+'\t<div style="display:none;">'+'\t\t<input name="options" type="checkbox" id="mixedWithDigits_'+e+'" />'+'\t\t<label for="mixedWithDigits" id="label_mixedWithDigits_'+e+'"></label>'+'\t</div>'+'</div></form>'}]},{id:'langs',label:o.languagesTab,elements:[{type:'html',id:'langs',html:'<form name="languagesbar_'+e+'"><div class="inner_langs">'+'\t<div class="messagebox"></div>\t'+' <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol_'+e+'" ></div>'+' <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol_'+e+'"></div>'+'</div></form>'}]},{id:'dictionaries',label:o.dictionariesTab,elements:[{type:'html',style:'',id:'dictionaries',html:'<form name="dictionarybar_'+e+'"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">'+'\t<div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message_'+e+'"> </div>'+'\t<div style="margin:5px auto; width:80%;white-space:normal;"> '+' <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+'\t\t<span class="cke_dialog_ui_labeled_content" >'+'\t\t\t<div class="cke_dialog_ui_input_text">'+'\t\t\t\t<input id="dic_name_'+e+'" type="text" class="cke_dialog_ui_input_text"/>'+'\t\t</div></span></div>'+'\t\t<div style="margin:5px auto; width:80%;white-space:normal;">'+'\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create_'+e+'">'+'\t\t\t\t</a>'+'\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete_'+e+'">'+'\t\t\t\t</a>'+'\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename_'+e+'">'+'\t\t\t\t</a>'+'\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore_'+e+'">'+'\t\t\t\t</a>'+'\t\t</div>'+'\t<div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info_'+e+'"></div>'+'</div></form>'}]},{id:'about',label:o.aboutTab,elements:[{type:'html',id:'about',style:'margin: 5px 5px;',html:'<div id="scayt_about_'+e+'"></div>'}]}],q={title:o.title,minWidth:360,minHeight:220,onShow:function(){var z=this; +z.data=a.fire('scaytDialog',{});z.options=z.data.scayt_control.option();z.chosed_lang=z.sLang=z.data.scayt_control.sLang;if(!z.data||!z.data.scayt||!z.data.scayt_control){alert('Error loading application service');z.hide();return;}var A=0;if(b)z.data.scayt.getCaption(a.langCode||'en',function(B){if(A++>0)return;c=B;s.apply(z);t.apply(z);b=false;});else t.apply(z);z.selectPage(z.data.tab);},onOk:function(){var z=this.data.scayt_control;z.option(this.options);var A=this.chosed_lang;z.setLang(A);z.refresh();},onCancel:function(){var z=l();for(var A in z)z[A].checked=false;n(m(),'');},contents:h},r=CKEDITOR.plugins.scayt.getScayt(a);for(g=0;g<f.length;g++){if(f[g]==1)h[h.length]=p[g];}if(f[2]==1)i=1;var s=function(){var z=this,A=z.data.scayt.getLangList(),B=['dic_create','dic_delete','dic_rename','dic_restore'],C=[],D=[],E=k,F;if(i){for(F=0;F<B.length;F++){C[F]=B[F]+'_'+e;d.getById(C[F]).setHtml('<span class="cke_dialog_ui_button">'+c['button_'+B[F]]+'</span>');}d.getById('dic_info_'+e).setHtml(c.dic_info);}if(f[0]==1)for(F in E){var G='label_'+E[F],H=G+'_'+e,I=d.getById(H);if('undefined'!=typeof I&&'undefined'!=typeof c[G]&&'undefined'!=typeof z.options[E[F]]){I.setHtml(c[G]);var J=I.getParent();J.$.style.display='block';}}var K='<p><img src="'+window.scayt.getAboutInfo().logoURL+'" /></p>'+'<p>'+c.version+window.scayt.getAboutInfo().version.toString()+'</p>'+'<p>'+c.about_throwt_copy+'</p>';d.getById('scayt_about_'+e).setHtml(K);var L=function(U,V){var W=d.createElement('label');W.setAttribute('for','cke_option'+U);W.setHtml(V[U]);if(z.sLang==U)z.chosed_lang=U;var X=d.createElement('div'),Y=CKEDITOR.dom.element.createFromHtml('<input id="cke_option'+U+'" type="radio" '+(z.sLang==U?'checked="checked"':'')+' value="'+U+'" name="scayt_lang" />');Y.on('click',function(){this.$.checked=true;z.chosed_lang=U;});X.append(Y);X.append(W);return{lang:V[U],code:U,radio:X};};if(f[1]==1){for(F in A.rtl)D[D.length]=L(F,A.ltr);for(F in A.ltr)D[D.length]=L(F,A.ltr);D.sort(function(U,V){return V.lang>U.lang?-1:1;});var M=d.getById('scayt_lcol_'+e),N=d.getById('scayt_rcol_'+e);for(F=0;F<D.length;F++){var O=F<D.length/2?M:N;O.append(D[F].radio);}}var P={};P.dic_create=function(U,V,W){var X=W[0]+','+W[1],Y=c.err_dic_create,Z=c.succ_dic_create;window.scayt.createUserDictionary(V,function(aa){x(X);w(W[1]);Z=Z.replace('%s',aa.dname);v(Z);},function(aa){Y=Y.replace('%s',aa.dname);u(Y+'( '+(aa.message||'')+')');});};P.dic_rename=function(U,V){var W=c.err_dic_rename||'',X=c.succ_dic_rename||''; +window.scayt.renameUserDictionary(V,function(Y){X=X.replace('%s',Y.dname);y(V);v(X);},function(Y){W=W.replace('%s',Y.dname);y(V);u(W+'( '+(Y.message||'')+' )');});};P.dic_delete=function(U,V,W){var X=W[0]+','+W[1],Y=c.err_dic_delete,Z=c.succ_dic_delete;window.scayt.deleteUserDictionary(function(aa){Z=Z.replace('%s',aa.dname);x(X);w(W[0]);y('');v(Z);},function(aa){Y=Y.replace('%s',aa.dname);u(Y);});};P.dic_restore=z.dic_restore||(function(U,V,W){var X=W[0]+','+W[1],Y=c.err_dic_restore,Z=c.succ_dic_restore;window.scayt.restoreUserDictionary(V,function(aa){Z=Z.replace('%s',aa.dname);x(X);w(W[1]);v(Z);},function(aa){Y=Y.replace('%s',aa.dname);u(Y);});});function Q(U){var V=d.getById('dic_name_'+e).getValue();if(!V){u(' Dictionary name should not be empty. ');return false;}try{var W=U.data.getTarget().getParent(),X=/(dic_\w+)_[\w\d]+/.exec(W.getId())[1];P[X].apply(null,[W,V,j]);}catch(Y){u(' Dictionary error. ');}return true;};var R=(j[0]+','+j[1]).split(','),S;for(F=0,S=R.length;F<S;F+=1){var T=d.getById(R[F]);if(T)T.on('click',Q,this);}},t=function(){var z=this;if(f[0]==1){var A=l();for(var B=0,C=A.length;B<C;B++){var D=A[B].id,E=d.getById(D);if(E){A[B].checked=false;if(z.options[D.split('_')[0]]==1)A[B].checked=true;if(b)E.on('click',function(){z.options[this.getId().split('_')[0]]=this.$.checked?1:0;});}}}if(f[1]==1){var F=d.getById('cke_option'+z.sLang);n(F.$,z.sLang);}if(i){window.scayt.getNameUserDictionary(function(G){var H=G.dname;x(j[0]+','+j[1]);if(H){d.getById('dic_name_'+e).setValue(H);w(j[1]);}else w(j[0]);},function(){d.getById('dic_name_'+e).setValue('');});v('');}};function u(z){d.getById('dic_message_'+e).setHtml('<span style="color:red;">'+z+'</span>');};function v(z){d.getById('dic_message_'+e).setHtml('<span style="color:blue;">'+z+'</span>');};function w(z){z=String(z);var A=z.split(',');for(var B=0,C=A.length;B<C;B+=1)d.getById(A[B]).$.style.display='inline';};function x(z){z=String(z);var A=z.split(',');for(var B=0,C=A.length;B<C;B+=1)d.getById(A[B]).$.style.display='none';};function y(z){d.getById('dic_name_'+e).$.value=z;};return q;}); diff --git a/plugins/scayt/dialogs/toolbar.css b/plugins/scayt/dialogs/toolbar.css new file mode 100644 index 0000000..48da039 --- /dev/null +++ b/plugins/scayt/dialogs/toolbar.css @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +a{text-decoration:none;padding:2px 4px 4px 6px;display:block;border-width:1px;border-style:solid;margin:0;}a.cke_scayt_toogle:hover,a.cke_scayt_toogle:focus,a.cke_scayt_toogle:active{border-color:#316ac5;background-color:#dff1ff;color:#000;cursor:pointer;margin:0;}a.cke_scayt_toogle{color:#316ac5;border-color:#fff;}.scayt_enabled a.cke_scayt_item{color:#316ac5;border-color:#fff;margin:0;}.scayt_disabled a.cke_scayt_item{color:gray;border-color:#fff;}.scayt_enabled a.cke_scayt_item:hover,.scayt_enabled a.cke_scayt_item:focus,.scayt_enabled a.cke_scayt_item:active{border-color:#316ac5;background-color:#dff1ff;color:#000;cursor:pointer;}.scayt_disabled a.cke_scayt_item:hover,.scayt_disabled a.cke_scayt_item:focus,.scayt_disabled a.cke_scayt_item:active{border-color:gray;background-color:#dff1ff;color:gray;cursor:no-drop;}.cke_scayt_set_on,.cke_scayt_set_off{display:none;}.scayt_enabled .cke_scayt_set_on{display:none;}.scayt_disabled .cke_scayt_set_on{display:inline;}.scayt_disabled .cke_scayt_set_off{display:none;}.scayt_enabled .cke_scayt_set_off{display:inline;} diff --git a/plugins/showblocks/images/block_address.png b/plugins/showblocks/images/block_address.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee67aa245f0120d51f2f38edaee70f14b10570e GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^IzY_N!3-o<B;8#Nq}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMK7AWs*^5RHjfCs=bGFyJ}5<ahioXP*!1vPLBt988bf1^M;m;@blc zI5n|(?Wq68^!>rCi$0g;Eiyc$vVI-oU!%8itj<4<T5@^hww&JCyLw)|XdT1lD@=xm Tl($X+n$F<q>gTe~DWM4flGr|! literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_blockquote.png b/plugins/showblocks/images/block_blockquote.png new file mode 100644 index 0000000000000000000000000000000000000000..cae3aec621af5da1a22171d6c955a06d45e03344 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?p!3-puF6poUDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&i#?!?yMC1I~N#1-6iX6`I@9SSieh55%L@`H3tj*1vyXn?JTP=h1 zq7yq#inQ1U$#A%{JZas0Y|*Yj-<?jXqFN!Js{`Ijt^0n;=3wrjJiDj}wL8DRpP$+w cua~4Rcg2_KHg{&bDbOAUPgg&ebxsLQ0Bi(6<NyEw literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_div.png b/plugins/showblocks/images/block_div.png new file mode 100644 index 0000000000000000000000000000000000000000..c71f397880c27eec92878c76a39ba29fdc8c79c0 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{g!3-pAT1p~;6kC8#h-*Vb!~g&PpI_@;0~BE@ z3Gxg6&+v4+fftac@9E+gA`zaPaD+|5Lo_uZfx%ev0aHK|<7$lvp4}QDO%pUWUChX9 gu%40<AE3g;uyH-3ghgPg5l}0Gr>mdKI;Vst0CM~$$^ZZW literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_h1.png b/plugins/showblocks/images/block_h1.png new file mode 100644 index 0000000000000000000000000000000000000000..3a64347350e5a48d2702f2fc4d436dfb5524b3a8 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?&C|s(MB;LCf(tv(kuC#=47L(MHnu%k5)vC;DY>yMnpz<~Nr#D{ Y!iwS9`#nLcfI1jFUHx3vIVCg!04>HO?EnA( literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_h2.png b/plugins/showblocks/images/block_h2.png new file mode 100644 index 0000000000000000000000000000000000000000..8062ebe8e4b80bfae9dba6f1cbc84b7c2b555976 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?*VDx@L?S#n!G)dYNSA?w0P`#k=BC3P2N_qUJBT-4c=7DO8doF9 fNNuhK(>NH)c^ICE+osk7H8Oa*`njxgN@xNASv4n& literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_h3.png b/plugins/showblocks/images/block_h3.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6a4030284aace8cfa05e67b37966b86355b2aa GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?%hSa%L?S#n!G)dYNSA?w0P`#k=BC3P2N_qUA6V8c*n1$0Z<C&g bgRUS$*%5{({`T3yKwS);u6{1-oD!M<)Ws%G literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_h4.png b/plugins/showblocks/images/block_h4.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7f7951d492342590e22863facc85e94e0b79e1 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&V!3-qtMdT|0DYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?$J50zL?S#n;RplI5pF|=3^ukBMK(7kCkKYhy=%G{bsE!bmPKkf dt!S9##L&E&;e&1D*BGEa22WQ%mvv4FO#lL=CawSg literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_h5.png b/plugins/showblocks/images/block_h5.png new file mode 100644 index 0000000000000000000000000000000000000000..e153de09988a289dff08d61d489c3c7338b593c9 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?$J50zL?S#n!G)dYNS8r_0JFe?&V=A*6{bgq3QHsnEjWrVTveFe e%(Oz4iJ@cy!$Tj3Ri}XZ7(8A5T-G@yGywnxt0t@f literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_h6.png b/plugins/showblocks/images/block_h6.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d993a9d238e58a8116cc24120c3769f6e239fa GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^f<VmA!3-o#^RFlaDYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?!_&nvL}F@kf(tv(kuC!V0p?j8%uUS#jzP>U3QZERJQZ)0&Yxv* ZVJKb9@F*b4cN0(#gQu&X%Q~loCICblBq#s? literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_p.png b/plugins/showblocks/images/block_p.png new file mode 100644 index 0000000000000000000000000000000000000000..4e6035d209b9821cb749ae4dfae48b560cd5e385 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm<3?w=JZgmAxYymzYt_=+h|NsAgeyw*6P=u)@ z$S?Rm!_(~sUO=9lr;B3<M|5(63mZ>M1&>3+5$Ci8pAABUjyE$GRWf)gF>JMO?|24O O$>8bg=d#Wzp$PysVj{=@ literal 0 HcmV?d00001 diff --git a/plugins/showblocks/images/block_pre.png b/plugins/showblocks/images/block_pre.png new file mode 100644 index 0000000000000000000000000000000000000000..d11a0fffbe66e209b8db4b1ef18ce95960743114 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^VnEE#!3-p?Z$2Ldq}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMIneNPw15Q*^Qgd<!M9^z>U2@V209Ek!=f;}v)6L}p2dBgj&IOGy1 g@NDunVAO48-1Co7KKYsRW1v<BPgg&ebxsLQ0INhNBme*a literal 0 HcmV?d00001 diff --git a/plugins/smiley/dialogs/smiley.js b/plugins/smiley/dialogs/smiley.js new file mode 100644 index 0000000..1a4269f --- /dev/null +++ b/plugins/smiley/dialogs/smiley.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('smiley',function(a){var b=a.config,c=a.lang.smiley,d=b.smiley_images,e=b.smiley_columns||8,f,g,h=function(o){var p=o.data.getTarget(),q=p.getName();if(q=='a')p=p.getChild(0);else if(q!='img')return;var r=p.getAttribute('cke_src'),s=p.getAttribute('title'),t=a.document.createElement('img',{attributes:{src:r,'data-cke-saved-src':r,title:s,alt:s,width:p.$.width,height:p.$.height}});a.insertElement(t);g.hide();o.data.preventDefault();},i=CKEDITOR.tools.addFunction(function(o,p){o=new CKEDITOR.dom.event(o);p=new CKEDITOR.dom.element(p);var q,r,s=o.getKeystroke(),t=a.lang.dir=='rtl';switch(s){case 38:if(q=p.getParent().getParent().getPrevious()){r=q.getChild([p.getParent().getIndex(),0]);r.focus();}o.preventDefault();break;case 40:if(q=p.getParent().getParent().getNext()){r=q.getChild([p.getParent().getIndex(),0]);if(r)r.focus();}o.preventDefault();break;case 32:h({data:o});o.preventDefault();break;case t?37:39:case 9:if(q=p.getParent().getNext()){r=q.getChild(0);r.focus();o.preventDefault(true);}else if(q=p.getParent().getParent().getNext()){r=q.getChild([0,0]);if(r)r.focus();o.preventDefault(true);}break;case t?39:37:case CKEDITOR.SHIFT+9:if(q=p.getParent().getPrevious()){r=q.getChild(0);r.focus();o.preventDefault(true);}else if(q=p.getParent().getParent().getPrevious()){r=q.getLast().getChild(0);r.focus();o.preventDefault(true);}break;default:return;}}),j=CKEDITOR.tools.getNextId()+'_smiley_emtions_label',k=['<div><span id="'+j+'" class="cke_voice_label">'+c.options+'</span>','<table role="listbox" aria-labelledby="'+j+'" style="width:100%;height:100%" cellspacing="2" cellpadding="2"',CKEDITOR.env.ie&&CKEDITOR.env.quirks?' style="position:absolute;"':'','><tbody>'],l=d.length;for(f=0;f<l;f++){if(f%e===0)k.push('<tr>');var m='cke_smile_label_'+f+'_'+CKEDITOR.tools.getNextNumber();k.push('<td class="cke_dark_background cke_centered" style="vertical-align: middle;"><a href="javascript:void(0)" role="option"',' aria-posinset="'+(f+1)+'"',' aria-setsize="'+l+'"',' aria-labelledby="'+m+'"',' class="cke_smile cke_hand" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ',i,', event, this );">','<img class="cke_hand" title="',b.smiley_descriptions[f],'" cke_src="',CKEDITOR.tools.htmlEncode(b.smiley_path+d[f]),'" alt="',b.smiley_descriptions[f],'"',' src="',CKEDITOR.tools.htmlEncode(b.smiley_path+d[f]),'"',CKEDITOR.env.ie?" onload=\"this.setAttribute('width', 2); this.removeAttribute('width');\" ":'','><span id="'+m+'" class="cke_voice_label">'+b.smiley_descriptions[f]+'</span>'+'</a>','</td>'); +if(f%e==e-1)k.push('</tr>');}if(f<e-1){for(;f<e-1;f++)k.push('<td></td>');k.push('</tr>');}k.push('</tbody></table></div>');var n={type:'html',id:'smileySelector',html:k.join(''),onLoad:function(o){g=o.sender;},focus:function(){var o=this;setTimeout(function(){var p=o.getElement().getElementsByTag('a').getItem(0);p.focus();},0);},onClick:h,style:'width: 100%; border-collapse: separate;'};return{title:a.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[n]}],buttons:[CKEDITOR.dialog.cancelButton]};}); diff --git a/plugins/smiley/images/angel_smile.gif b/plugins/smiley/images/angel_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..2cf4894758f019612996cb5bd2a716e2a81ec1fc GIT binary patch literal 465 zcmV;?0WSVWNk%w1VH5xq0M$PL{lzEPm>m7K8Ln>^|JO!qF{At9X#BAx{?0`Dx;)aD zGyl~%>82e2z90Yp|NFit|Kn8uvlaW|lKt_;{Oh&;_t^j7P5=7m^4DGbv@HG3T-nEZ z{_mje&v%|^4Ex`GiCPT6P890YrTn}u`lurR{r3OPF8=-R|JrKb$CCfoC-ApP`tsxb z!Zp;hXZ5ii_qiX=v6}tKJo<Vm>gD&popkQ#;>n3v*QYSisZ#&!g!}sV{QLd?|NHch zEC2uhA^8LW002J#EC2ui02BZe000K=z@KnPEE<QDB!wesHjh8bWI7>kt{;i9a;a1( zsLX-1a&0<K;)GSYOe7r*N|F*WwM3C<ayebP6%$@dM;JLN6(=QaUlJM#g&ivg2N_}{ zl_Qiz7#IZwF%ud9H=isOBMlKm7zUp-4iYLgpFBMPszeY5HVzIwA1WO?z85CBL%TW? z6dwpC5FE@J$E!ma2rU2rCJO`$05A;=4-wWv7zqdq2nYlOG64#g=0z<D2{;NqJ~IO# z0S*WdV4;YG3?l-72*J?902l)c8nMveMF0;TKnxg25Xuh=5neC|z<{Gfk03*uJLj=w Hksts&wF%9u literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/angry_smile.gif b/plugins/smiley/images/angry_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..40b52d3a77882c88197787fadaa201826fb95c1f GIT binary patch literal 443 zcmV;s0Yv^sNk%w1VH5xq0M$DH_m4mIZzS|)9r~w4>`o5$WfGM{2lt0F@K+f6dMW+1 zOZb&h_JTrrPz(8+Kk<PqyK_p#IRyE57nxNgYA~hzlrigXAc<NG_gxWmIG6hJ<J(FK z?s_Nvty=M2Bd1dl{{8&AVHx}S_}^e4`}XtOYAoST43J@&nrC*{$FJg44%0yf=-A7g zbuh7wpzCB9gh_Yq=;HqV{?4(Q%vv7wzH9gO@avId&r=ZQS`zV14FCWC0000000000 z00000A^8LW0027xEC2ui02BZe000Kqz@2bNEE<o<q)?$4446!%bKs~x1%d$5=>T}W z4-Zyb9DL7*ga9!v9srB@Hyv1Gi;P95*6|+F2?2EsWIJ6369xt$0308RiUJG_LjwyU zGA9%;2_6{~E;b|>1O$}}8X71R85Sd-HyR`e1Ok-@4-XX;2^J+5DjOR*2n7hYZwwC{ zBO!<r9|*+-l@$jJB@GQ17cDa>1~_$vI}!m2+6^%xARsIT8+Ani5)u~;6A=0kG$sWF l<b=?Bkz+-KgAqy*2sk9bKMWXXDP&mW-#>*)G8PE}06T|mq1*rf literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/broken_heart.gif b/plugins/smiley/images/broken_heart.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6d0166a47735697f12678ffb1a08a1a7200968b GIT binary patch literal 192 zcmZ?wbhEHb6k!ly*v!qaMW5-RKhJG1uA`PLmmS$YHtM{qQh%MV@GMH`b&ABJ5WfHa z|1%%~#h)yU3=G^1Iv_ES84N7B1t&dM@3nZmz)4`Lq8#Vb$|eUN*X#)$C3RYcI%~PT zWqogKk9jz?<75ppLqg&SK|!v_Q_Ety++1HUv98hMODHgWwOC8N)5K}_3f@WSr=k`z j?0o3$&8|}U*w|FGP?9k}PO7Q7L!`31uYW?nAcHjkUg|+l literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/confused_smile.gif b/plugins/smiley/images/confused_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..a52db7a4e5c61690dfd5e8485ef9eb0af1d69a68 GIT binary patch literal 464 zcmV;>0WbbXNk%w1VH5xq0M$PLyoVdum>K`mJOAZd|Ns1}b`|iZ7@KDe{^eu;vlaj1 zQvbFV|KLsk+erW4Q2)ar|Gyvp{qOj&8UOm{|KeAPS`7coEPYkF|JXtQ&N2JqlKbC% zYA~hz>$U&gN0)NF`?MMU=xWWo-u=#8{@q&o^5eay)c(aV^|2lQ?1cWe8UFX!|KCdP z=;Hpm9Os}I{?tSN<yH6f@b1Ag|NZv<@1Xav75>afrI6eI-c9(j9N*OK|JrK(@x{uN zF8}}kA^8LW002J#EC2ui02BZe000K<z@KnPEE<iCq$All5*bN_!m&&;oD2tLz@;d1 z4U6Sk%sLREF2jQnJjO+8WHPA@6dFyZv#~(p1UnZk5g`gPI3FbwJP>3*4k-i|92W#E zJuMs@9}yZ5e?pN2A|E0I2ptn97bX!K5D7yuAuBWy1QP-R8Y^=pH!iY53Ihxj8zdPR z7#SxcBPT8@!#@}-9tb2bySvg0DhmnK4j9=KGXMnuF98eh;*UQW83H~P6$SVe2R1ej z)r2s3@Swm810W0lI8Xrqhy?NkLO>xw0tgTi0vsp+5eq>b6f2I4XoR4+aRHsET*;D1 G5CA*YUCMv} literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/cry_smile.gif b/plugins/smiley/images/cry_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ef6ba4fb5c4b06e3a9162a55c92623f547e8a09 GIT binary patch literal 468 zcmV;_0W1DTNk%w1VH5xq0M$PL|K(hjWDft}OxLF{{@g_W-%6==7W}#>`m-6;m>cM^ zE$OBl|Kd{rz8(Mn{{O@)|JFMF<YfP{6V1Ecy{FWDRl22++mK<ImvX&{S`7Z^YO#ZO z^Ugxd!t(OhUB8AC|G^lSYZ>jSHQ&dQ|Lk<w$FG`acCCp%$%$C-w@LrxR?(?a?!hzv z-%$V3G@NxX|LRQtw+#R8UD}&B?az0yjiCSZZ{fE(=-A8uz7qc3TKe+i^w(0mb4s~~ zBLDyYA^8LW002J#EC2ui02BZe000K@z@KnPEE<o<<WIm96rRc@LBOcCo&^C?0O)pA zSFE-uP-)H@fXYdLxLo5Q!%V72)&fHN@hCDh5gvj(1w0&wEC&Zf3;;Ga836$qHv^HA z3Jnc%05T&K6cs%nBNiAG7AqhiLn<&d6B8I0DG)j}6&)QEszU-E6CJZDECUN77pJ=$ zLj)zV7$`m=)CLF_7Z$NY922G{3MV)YB_RnS8_5$xu@)OK3L_2<J0}Jr2PPGuLKC4T z5<Z}qSHi#t1T!w|qtLHHg$)f71bA`cg*6Eh6jmT&!NP?c2ts6tgi*qej$0%w_+SuY KoG37Z0028eHOOKB literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/devil_smile.gif b/plugins/smiley/images/devil_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..bfb25077de87204f3edacb9c492a329c80c9b5b5 GIT binary patch literal 436 zcmV;l0ZaZzNk%w1VH5xq0M$PLjZ+G0FQNa|IsV#6|HCHFmNEIcJpZ&6t9BLr_T~To z{{6lr%w8S-&O`p%R_Uf3{pD`|;7t9rBba6m|KwNxw;HEY5&XO^{<<Cg!Zpy47yrgC z{`c7TwHg1vAN;f|xrZYC$vpr4_RYKA<*_aQ{`>yB8UF8}*QYT5+G_9X_}RyL=D$Ge z%1ry;ef`c{=-A8m!y@#_Bmd4L_w@Py?1bmYV(f_}?az0ygLwV!z5mWJ`uYF*s3P&Y zG5`PnA^8LW002J#EC2ui02BZe000Kjz@KnPEE<nUqh*;CE-l1oQd(S2gqQ5a2~{o& zzECC$qAEcs)?gqYXqd+c0@NC8?u7gzVvIO&1{Y!<3j`8b7=1PY0XZiQB#a{>Iu(gT z6f2A>3N?`dJPI5hmqQdTBQy#n5Hc_dusR#1LKG<+A_));J0~0^2`{rn0}U5>GXiWe z7YiN>v_B384FU!RY#9Xw9}+zWMLQYSHvkOh784Q@7~n+&9~T+`^z<5*(Lxa(9uFD_ e03TF1aDY!76DBZpSV*v7lOGiZHgrcM2mm`bZN3Ho literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/embaressed_smile.gif b/plugins/smiley/images/embaressed_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..d9cedc56bdb0cdd234679cceabafc9256bc2852c GIT binary patch literal 442 zcmV;r0Y&~tNk%w1VH5xq0M$PL_lh{u$ngEPD*xnD|JOSG_~`wy7uuK^{<j+X)>zrF zIRF3u{pV@_%qjlNH~;2b?db6S&P0@F6#w8&|J_GwFs1&x9{<=viCPT$s3Q24QTdxc zc~A@f@1XpYG5xJt|G^mlz7qfb`}(Un=D$Gu;*#gcV*m0_`lm$wv`f^pXRdb?_JTsn zlrH$OA-|n;?!hzu_t^i}C+DCT{p2>eha&X8YyaXv|Lju#?p^BCrT^M$``>;3)I<9D z|NsC0A^8LW002J#EC2ui02BZe000Kpz@KnPEE<cG<Y0L@5|hda^D=QJNrQ(rp-@n$ z#w13<U_5f9F^mAJJ|~Z|c`%_62#p4)cv4j=1tJ|cCVvnjC2d0!Cog|K3mr6m6^Ah) z2#Yv60Ran<GA02Kp9Pph0~8%1kRm$`JR+Znr$Q772_GLe5d=MW0wW$72${AN9~#Oj zy#x*@8yg+~07DcMC>ks*DGD_$0vpuSZnh)T8wVU57&93j!v;tc76Jn5><0!e83yHx k76Q6hfnkL{1pcf9EXL44LMK9s89?X|qQ#3Civ$4xJDD%WfB*mh literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/envelope.gif b/plugins/smiley/images/envelope.gif new file mode 100644 index 0000000000000000000000000000000000000000..94e0b1fa59d04474bad8443fdc072c41f1fc905e GIT binary patch literal 426 zcmZ?wbhEHb6k!lyxT?YM?~>2||NrmL6nnlv;@|baw<}Hmyx#ilu+6JQI`22?JesZa zdbRw&Gaesz8UEN|{bgVFt@-l*&O7`)Y4dcW?*2C6Z`;-W|NZu1nZ)l$lm31@`eD20 zv;7ViCWv2OZg6Uf-oLw1k5@YU`t<nkA=9_#%m4lR_h)b5iyh|w|NR15%0LaE_>+Z^ zfkA^o2V@w?PYi6w9i|j`=t%XSc(P$ZfC!gYQep#x?ebHZ3sYY7adj|Wk*G^CTJE6G zaxg>SgQ8Poh0PU}t#$#P8g0ySY*}Jr)m02U^-fHje9cvCA&h(so!uHt>^$rf*tpr1 z#KqZJ7?_>;rcR6HTq?xP%q7ge!ikS_8V@t?(rFC5%*+Bz-rUnf**TXnu$(){bkvFU zIPcE=`<GpC*~85u-zmg%jzv&V_)-tI;JLF5LhPpmm@m5YzEzVwa`CGh7q_(9g~#Hm P!mL~}Tv|3lEDY8F&X|=- literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/heart.gif b/plugins/smiley/images/heart.gif new file mode 100644 index 0000000000000000000000000000000000000000..680ae2fc1c73a1ede67a748912235a0026279ddd GIT binary patch literal 183 zcmZ?wbhEHb6k!ly*v!qaMW5-RKhJG1uA`PLmmS$YHtM{qQh%MV@GMH`b&ABJ5WfHa z|1%%~#h)yU3=G^1Iv_ES84N5b1t&dM@3qLz`Q;hBfTb}(bj3$SZci>I$AvFnO*1s~ zDOsr2A=tOzwkOY)_z$Ae3=EU|*mtzNoELC1aW^a1>~rd>j&32v4|R^N35e*9IP=2R bBm2VFA8He>=d0A!3uiU8wzW$NGFSrun#)1b literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/kiss.gif b/plugins/smiley/images/kiss.gif new file mode 100644 index 0000000000000000000000000000000000000000..70e52551417b6d1c551a5217f837e71674118695 GIT binary patch literal 241 zcmZ?wbhEHb6k!lyI3mLEIz{4Hl+bQB)&qVbuk#gNPfR`*tN$p3?|iVp{RD;Gq3Zwt z|2q>Ucd|2Lcd^(1|9}4d{c}4@=iJ6wudXcp|NlP&A)xq^g^>Yhl@3TD$W8{<JO$Oh zl+1Y<tJdYb4sv8**x<8-(eO0`Kg;sNIUYTKJvJV2JdmO!z|*F<kmVXvN8_OjFU(}P zJ}9VpF$qmRp0u~YgQsg_sELZmyK;7C1Bp2)_J*7sKFn+u&YXh2?OINewLF}<#_SFH NGiJ`3t)$3c4FIalP?`V$ literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/lightbulb.gif b/plugins/smiley/images/lightbulb.gif new file mode 100644 index 0000000000000000000000000000000000000000..d44c2ffe6a0ac0f4fdb9bd8bb2921d931ed6b8e9 GIT binary patch literal 368 zcmZ?wbhEHb6k!lyxT?!AJzMhkqr!hLvVK2G`MbsY=WP4`&yxS$jrw~oW@o$7#AN<| zM??O8Jo@{7ZI;2(FZ;5;_uIdonEY$C<^MM=Cp#nlyxv+Hy6g9&NfQ!hPA}S<Z|3mt zjK}}`0eJ?+Z_k(Cnr+_VS^j5l;QvSAB^J~F|Nr;z@B2Sf4F7$<@po<1zw3dgrs(}z z?($=Y_5c6>8OQ>PKUo+V7<3tQK)OMGVqoh%Fs;BtN2=dLnZbdFgQwT6&@*Kl6Z1ud zfC`?q#~7X;n!zEUlW!!DF~>t(ec^671256f3MTqm|H8{e+1c1QSh!hry}4YOm^nE7 z*;%wZJaw5gTiCfZ<T*XV<fOTawH7)hta1?)65w1JAL=TkCg3$gL{MagyM&~|J~uHw WvBR#)e0(QdWzV`wT{!E=U=0Ah#fCfp literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/omg_smile.gif b/plugins/smiley/images/omg_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab7ea69968a82a3fc73b0a6b513928a244e3282d GIT binary patch literal 451 zcmV;!0X+UkNk%w1VH5xq0M$PLxrZVB<!Y8^68_y<{N<1T<5d3DHoBB`v7Ffc_t^jc z{{P)XlxnMwSa<u(GpTkKYcZq$=3D%<EdIM2|Jz6XwG;o~PXFUc|H~}?@1Xs(OZuxh z{qe=-zd--K649wriCPTWwLH*}7xdCg{?tSM)K1^WlIql@`lurOy;1z@wdmN(|KdP> zRl4rz;(1UD{mxwe{qdZ2F#Y5<+M74|^y>5R`}Y0+`I|r3$FJk5K;^M5``>-{xgXTC zXaE2IA^8LW002J#EC2ui02BZe000Kyz@KnPEE<c8i*k7+S{4+G)UvcRpPh)dFbZ`j z6Km1Zc|8IFZ3rYV7{W+PAfw8p0|Wx^Jwav^3NZ>93mJleFmOUi911oFEeA6`3<!W6 z9u-3i7L6+qpdSsOHwp=vn*{_a1Pl-j1|Og+96YFt1qD(REDk#k4j3C75)+z>7P%2z z0?h(6DJdEf$3F`sB@qK9ItMi-4-XpS6=Fgd6cHsGCxA5o0yrBL)j}2+7$hj|3NA7a tDCn6Rat}j~4<>RP5FkR}6$}$Z2w(%iVUu$h06d^q@1n<#Ab$h_06QGh!|nh8 literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/regular_smile.gif b/plugins/smiley/images/regular_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..e5bc34be362f6774593dda685a0e6b6ddd963dfd GIT binary patch literal 450 zcmV;z0X_alNk%w1VH5xq0M$PL{pX9mh8O?kTd|Fx|L14_-c$LzC;#G7{k9tawif^Y z{{P}h|KCgh!y*6ONB`PJ|FRSQx*h+s75?v_iCPS5Fr|@W589s}|H~}=>$U#(*#F%_ zo@fmJ{`&Q?9skxn{>CQ%;#dFNJNC*n|NZv=z99SGeg4u+{{8&_&Lhx}7yso|{<|6f z&N1%6GyeVW^YQ!5yWaoULauid=-A8q;&J=_|9w@uy{FXw=SKh1H0HlRrI6c@VVRe5 zz5oCJA^8LW002J#EC2ui02BZe000Kxz@KnPEE<a&hVsEY5*wT3p}=518qS8}An1k; z)ho8BT@lWLZ}p>VjE9cUBr_ohz>dP?<bG}dFC7XRcOn`J3LSiJ4h|%U3MeLqkR2I) zLI)EhI2AFHDH$*~JT@8;5JLwm6FwC^84oEn0~HlC01*+Y0tE{>A{ZDT4Im>1x(KP6 zN)A=S4J9oy5eNwh%Rd4iTO%q93l0n30oM?3KOZd{I}`yI@BtJT5)j!!ZWu1|791A+ s$|Rt}7tO#73lu1Dh#)~=7B?j#c<|8Bp%a1)JlK<Pv7^V2MS=hTJE}a;<^TWy literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/sad_smile.gif b/plugins/smiley/images/sad_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..ae4cf1e35ba6d509111883da5ecabe3e4b0a4e7a GIT binary patch literal 460 zcmV;-0W<zbNk%w1VH5xq0M$PL|HLN!=Zn*o8veQ*|Ns8~-c$eIOaHYN>82e1<zx7= z9RJ`=|Kd^qvJ?N#G5_61|FaeU=3S9v5B}(CYA~h$);#~>SN^^r|I$1E<XQjhbpP6F zbU2s)*g~FY49&aVnrC+KrWpU_RsGIf{qe>A)I<K#Oo>_y``>;3_t^gLp#T2*`tsxd z`seP!Gw9gMy{FXWu`QQt8Tqgk%9Jku(lr0uNB`R}v4eQ(<@f*n_VuwH{Oh&awLFw+ ztN;K1A^8LW002J#EC2ui02BZe000K*z@KnPEE<iA<ihZH9EnN>qrhw~o=Hn2lCdxh zHY;)wNldtw#iLVkIIhshM59S$zP3uuJ%U<VAQT`d5eq0d96cK*BXB<p69hgK6f6Y~ zFO(c98x9Ra3>qsrJ|6@(B?K@WA1j`pLLw771hpg%8!QAXD=8NPus;kL3nVQ(B^3z) zDk=dcz`+$v2?ZS(*ccT60|&1|6&()~7A`U;5)v^02N2$lKW-v45+3&G0s{~Y!9oTA z4g^R*5F!Ku2?7rAgC}IcfC0ZQTmZ0R#zHI?AV5%{;DE;l42@_U>G6rllPI4A0RTIR CY|IM) literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/shades_smile.gif b/plugins/smiley/images/shades_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..b4540175035281da7afa2b185641392121bde669 GIT binary patch literal 449 zcmV;y0Y3gmNk%w1VH5xq0M$PL|JOpBY7_tCRQAI>sCF0s-c$eLK>y%O|K(f%(>vXq z8~*<O|FstXvlU4Yd0!!uoOLk&!5D-|cjw4rM;fDaIG6s$Ch@v4|L$FGFms7o4CcQ; z>&i_3>{9K|ci6|TYA~hLvuD4Zbm+J@|MYL#n>YX5JMO_VkYSmcXLio9n&YWJv4eR3 zvJ?Kd8S9=1|LIB5sZ#Ff;`Of-_q7?nh7<R>AN}Mu{<<Ca_3;1DGymH#@3AcNxg-1H zWdHyFA^8LW002J#EC2ui02BZe000Kwz@KnPEE<o<q)@;-I1kF-L4aTuo=)Tx!L16O z325;E!;nZAOa}%tn0DbJXX2?(?i|i$GaB)V6%P*%gn|_rgoGJlKN5n2gcTAMiHapd zAuJUXoFFk95}Xep5+xBs9X=u{C@3N(Hz6q!5-b-Hr$SR51$PDj0KY3MxD2^J31I>S z11BdJ7d<pHE({F~Lly}D2LT!o5CPyC1Ps=UKNdPV1S$*f3o_viE!ac{78W)HIq)9= rFX*Au)c}VA2r526Aa`xxkOS8g1PD;$S_6kgT4=0yEsDn>K>z?d7Ms3Y literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/teeth_smile.gif b/plugins/smiley/images/teeth_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d734d15486da5ebf1286f634eac6773e7e6e297 GIT binary patch literal 442 zcmV;r0Y&~tNk%w1VH5xq0M$PLZZn^eV-Nq$H2&sg{N#rJ*+c%_TL1t5|K(f%wG{u= zJlU=`|NH9y!zcgZQUBmg|KCdfy&?bo_WbL$u6Gpw;#b(mudRtb_w@Py<yHIo_?c=I z|I#%7+G_pr#s0S$y{FW<ha!++neews-^Y@da=rPm74GQbnrC+R_3*Kcp!@do{?bhA zo(PFr4FBwO>#HCC#xCXE@_kjh|Nr~`@1V`Q-v8!N{?9<AklX0k%l+9;|G^ml-%tO` zEdT%iA^8LW002J#EC2ui02BZe000Kpz@KnPEE<iFWU^2=5+6y2qxWDI9!@9(!L3Y_ z4Qx?6C?mX(!LAW5CSNqk1mSoP<N~&PAfd%;4ju=C9X@SBNrE6Y7z_mmIWsaeEDZ@m z5E%?I001Bi3K*Rw2OT_@hzJuZogxGr6Cwa81PLFgKU)qNH#;K=1quormI=m~NfibK zI0`sEF%h@MxJx$+0omFC6x3ou5dsPe7bhAkDLNMcCdW?^4KM*3g9jEH-3i}A4-pX| kBrI6Cupxx8eeWVr2;gEvi-S&v`140CqQ#3Ci39-vI~tVBhyVZp literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/thumbs_down.gif b/plugins/smiley/images/thumbs_down.gif new file mode 100644 index 0000000000000000000000000000000000000000..90b9978c094ab81dccd07022255ff4fd31c35f96 GIT binary patch literal 408 zcmZ?wbhEHb6k!lyxT?kQcZ>JGqalCx2Hu)&{_m2{+m)vO_Syf~Vg3J-^}q8DzgAoB zY*#upMep%ShexxO{+;o-FhTs)BAxp)#r~eOSywLddLGBG<t~d#B&TOf{=a5BF`0jV zoAB=qDj$|f{JY}(_gu{N<p%$*2mV^2^#7LYzq?V-7fAfM<@;xg&WG)u^D=n;|NqZG z8BqMm!pOj&#h?Q+2IMCOwyh3R3p{kB`dt_pDnqzf7_UrP$;83Y!oKa|45_IN4kubp z^f+`MyslZNBGAE7wNb)qp}bHcle-TeE4M^h0ApLEFsG!PFdMU`REs=g0Dm4Qr(6TG zxCD=r7(2UISU>~|BNr<dkJNlERzW^NE-tZFCN?D{zPVXin}iOj%F3`YunGxCi-@n^ zASl2mAbM4H)ftifA(v#-Sz|+7xfZcKa${zD_1u-2m7VvEGY>QG?N7|#Ke;<HSOWn3 Cp@Uff literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/thumbs_up.gif b/plugins/smiley/images/thumbs_up.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6332848df0540a77f8c192a6174186e94f0a258 GIT binary patch literal 396 zcmZ?wbhEHb6k!lyxT?VL?`X)My@8KcI^3FVerk%|hwYxP7U{fQY5Hik($03JzgxWj zo{PD@+~Ds?n}6pW{vI;DFhTs^KKma#tY7RfUso>j?Xb<iGakQ|yZl;hxu`_)-zA@? z8+Gr`6nnPc;m;PGe^;FU|NqZGOQ86Zg^__lfk6jk3CK?jY%3im6nN-J^>!aB)Qr(# zVSXm~p~tJ6!NH+GS8r3RbNLPq5v56m2?_!tT5`=Mh8#EENAjiI)MMGy(7@rIn^)h+ zz{SqN!7T2~$&)K6#vm10-o@1KB*`PpBP!3wH+5zi*92xEQC>dYbz*{C5^QYj63)!b z?84Ig{JetfEbQBQik!HZcz6#8@vv};a0*=GIO)X7B)fn`MDhyD?wc;GtjsL0UM0VM J=jO;@4FGr*ZsY&} literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/tounge_smile.gif b/plugins/smiley/images/tounge_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2e657fa323f04ac09ecbe2900ad1351c1e2367f GIT binary patch literal 446 zcmV;v0YUypNk%w1VH5xq0M$PL|K??uWe$s03;fzmx`!YC|Ni~574xeW|JFVC%|vT4 zqyM)X|N7;zO$-0!TmRrq?dbUayBYt@DF5P7|Jp^<K?eWgSO48Z|G^mk@1W0-9NM)! z=D$Gy<yHUw`gu?b|NZv->$UsharxLs|J_H$IRyT`Am5o5{qe=$$C7<jy5Ua@>#HB^ zi6!6E?f=d(=-A8j(o6sJTL0`)|JrK%;*$T^LjT`T|K?HUu`TGhH`vFo|I#$WTo0FP z8UO$PA^8LW002J#EC2ui02BZe000Ktz@KnPEE<cHq>^$ZJ}wu^Wb#NN9?j>(!L?8+ zh^z5w0hk?L5}1d<5}^zb2nFZ>7==OxgDKuU9(frKfq?}yZ9@+L1uhB-1t=K|5DF>~ zAqxwN02w=vAvFjhDUUEBCYwTw7C169F9<d~FA^9BCaH=R7B?da1Hl6cIRpeO5vo5A z4<sWS1RES2&^`eIC&@!$BrzHS9|6|_0U8Ge3vNPT9XbLf6(tQH1P1oXt6>Q}75xnX o=QOEP6sAQ#avGAQ%Yxv*3UL}VEo`z5frb+jDQeuvu}BaAJJJrr?*IS* literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/whatchutalkingabout_smile.gif b/plugins/smiley/images/whatchutalkingabout_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..77098821c622975362f3afbc4e83a515f88dc814 GIT binary patch literal 452 zcmV;#0XzOjNk%w1VH5xq0M$PL|J6JG>WKH(QvS3R|Ns8~`se@JME>b>{mnA&s2cvt zSoXIj|KLrPXcqp$CH}@P|KwEv;Yt3t8UM>H_^=p>S`7X1#s2T0zlIa&xHtH+9QCms z{<<Ci>{4nlrMZV9%9Jke>-hWMee23h|JW-0>$U&RBbRc$&AZ<J?p=LVy8idr|K&`j zklWwX?f>*||G^mU!88B24FBIsqI4PYx-s|k`Tza%=D$Gy=3VE=V)f8O{?tRzkQe*n zWdHyFA^8LW002J#EC2ui02BZe000Kzz@KnPEE<o<<d4B*bUFs*l9_@qAW#DX$%qI* zpiye{0r4i=V%OVf=w7%A4KYC%Bay@Eb}L+R2NoqF01tN;1Oy=j79;^SE(A9v4{1Mm z1q3J_Dvbdr9w!6^4-!KWEEb6>Eg~i&As#4<4yHm85CIpv0RjjL76k<s3LG4#Rt5$D zBmm1MFat6J61JDl3_d$C8QnDr6x7wH69zLo4HfF^J>r%>69@n^86O`Q_!!_6)<O&u u4iGGRuwcUm4H~Mw^EZKm0|x~WCQ!&_0)>m=_(@o3#G=M=QbG<10suQ9l+BC) literal 0 HcmV?d00001 diff --git a/plugins/smiley/images/wink_smile.gif b/plugins/smiley/images/wink_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..b21029548f7d4b48f9a0237e7e89a075750a4abf GIT binary patch literal 458 zcmV;*0X6<dNk%w1VH5xq0M$PLm1h$ByCbD_7}%^d|Jz0X;#2<RWB<b<|K3Ue;Y<Jj z{{Fff|FjnW;7$M1JOAu-{<9eW);<2dKmN=}xrZWoPz(O(YHBd0(2y7Zw;cb@F^O6X z{<j&ei9Y}4UB8AC(Wz4OzH9&GO#k$6-_-5)(nbC8#q`ok@TM61wjKY@Bgu(akYSnT zzd--)UG=dYv4eR3z!m?}H0#Pt|KCvm?1cR5wfw^}@wzelv>E^0JL{_-^Ugy4&p`IW zJpcdyA^8LW002J#EC2ui02BZe000K(z@KnPEE<i8q+>Zb5*x`vp%Gy=oX~>D;Gq#B z8pq^XgeDA@hoNxd`EHYOF`0fmEG<E0Ly?K+1`joM4*(w_AulRRWIqWWBOm}BBL)~O zBnk>POA<o~b^`#D4J#KHnF>8Io<g7oCj|on5i_SSCMGuvtv?Y3E))VK2?PW>AO{OE z3mm->2qFU;!wA+60U6B>5JM3W1O^=y0?`BkI{^U<5RE??8WA`E<P;PD0_yB#2mKiI z8}MPsAwhyWAq@@$Sb*Zg2Mj0}FffSaK#CL@GH`&v@t~1@5;=BrLb9aEBS8QFJ3P3> AT>t<8 literal 0 HcmV?d00001 diff --git a/plugins/specialchar/dialogs/specialchar.js b/plugins/specialchar/dialogs/specialchar.js new file mode 100644 index 0000000..d9fd5f3 --- /dev/null +++ b/plugins/specialchar/dialogs/specialchar.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('specialchar',function(a){var b,c=a.lang.specialChar,d=function(j){var k,l;if(j.data)k=j.data.getTarget();else k=new CKEDITOR.dom.element(j);if(k.getName()=='a'&&(l=k.getChild(0).getHtml())){k.removeClass('cke_light_background');b.hide();var m=a.document.createElement('span');m.setHtml(l);a.insertText(m.getText());}},e=CKEDITOR.tools.addFunction(d),f,g=function(j,k){var l;k=k||j.data.getTarget();if(k.getName()=='span')k=k.getParent();if(k.getName()=='a'&&(l=k.getChild(0).getHtml())){if(f)h(null,f);var m=b.getContentElement('info','htmlPreview').getElement();b.getContentElement('info','charPreview').getElement().setHtml(l);m.setHtml(CKEDITOR.tools.htmlEncode(l));k.getParent().addClass('cke_light_background');f=k;}},h=function(j,k){k=k||j.data.getTarget();if(k.getName()=='span')k=k.getParent();if(k.getName()=='a'){b.getContentElement('info','charPreview').getElement().setHtml(' ');b.getContentElement('info','htmlPreview').getElement().setHtml(' ');k.getParent().removeClass('cke_light_background');f=undefined;}},i=CKEDITOR.tools.addFunction(function(j){j=new CKEDITOR.dom.event(j);var k=j.getTarget(),l,m,n=j.getKeystroke(),o=a.lang.dir=='rtl';switch(n){case 38:if(l=k.getParent().getParent().getPrevious()){m=l.getChild([k.getParent().getIndex(),0]);m.focus();h(null,k);g(null,m);}j.preventDefault();break;case 40:if(l=k.getParent().getParent().getNext()){m=l.getChild([k.getParent().getIndex(),0]);if(m&&m.type==1){m.focus();h(null,k);g(null,m);}}j.preventDefault();break;case 32:d({data:j});j.preventDefault();break;case o?37:39:case 9:if(l=k.getParent().getNext()){m=l.getChild(0);if(m.type==1){m.focus();h(null,k);g(null,m);j.preventDefault(true);}else h(null,k);}else if(l=k.getParent().getParent().getNext()){m=l.getChild([0,0]);if(m&&m.type==1){m.focus();h(null,k);g(null,m);j.preventDefault(true);}else h(null,k);}break;case o?39:37:case CKEDITOR.SHIFT+9:if(l=k.getParent().getPrevious()){m=l.getChild(0);m.focus();h(null,k);g(null,m);j.preventDefault(true);}else if(l=k.getParent().getParent().getPrevious()){m=l.getLast().getChild(0);m.focus();h(null,k);g(null,m);j.preventDefault(true);}else h(null,k);break;default:return;}});return{title:c.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){var j=this.definition.charColumns,k=a.config.extraSpecialChars,l=a.config.specialChars,m=CKEDITOR.tools.getNextId()+'_specialchar_table_label',n=['<table role="listbox" aria-labelledby="'+m+'"'+' style="width: 320px; height: 100%; border-collapse: separate;"'+' align="center" cellspacing="2" cellpadding="2" border="0">'],o=0,p=l.length,q,r; +while(o<p){n.push('<tr>');for(var s=0;s<j;s++,o++){if(q=l[o]){r='';if(q instanceof Array){r=q[1];q=q[0];}else{var t=q.toLowerCase().replace('&','').replace(';','').replace('#','');r=c[t]||q;}var u='cke_specialchar_label_'+o+'_'+CKEDITOR.tools.getNextNumber();n.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+(o+1)+'"',' aria-setsize="'+p+'"',' aria-labelledby="'+u+'"',' style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="',CKEDITOR.tools.htmlEncode(r),'" onkeydown="CKEDITOR.tools.callFunction( '+i+', event, this )"'+' onclick="CKEDITOR.tools.callFunction('+e+', this); return false;"'+' tabindex="-1">'+'<span style="margin: 0 auto;cursor: inherit">'+q+'</span>'+'<span class="cke_voice_label" id="'+u+'">'+r+'</span></a>');}else n.push('<td class="cke_dark_background"> ');n.push('</td>');}n.push('</tr>');}n.push('</tbody></table>','<span id="'+m+'" class="cke_voice_label">'+c.options+'</span>');this.getContentElement('info','charContainer').getElement().setHtml(n.join(''));},contents:[{id:'info',label:a.lang.common.generalTab,title:a.lang.common.generalTab,padding:0,align:'top',elements:[{type:'hbox',align:'top',widths:['320px','90px'],children:[{type:'html',id:'charContainer',html:'',onMouseover:g,onMouseout:h,focus:function(){var j=this.getElement().getElementsByTag('a').getItem(0);setTimeout(function(){j.focus();g(null,j);},0);},onShow:function(){var j=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){j.focus();g(null,j);},0);},onLoad:function(j){b=j.sender;}},{type:'hbox',align:'top',widths:['100%'],children:[{type:'vbox',align:'top',children:[{type:'html',html:'<div></div>'},{type:'html',id:'charPreview',className:'cke_dark_background',style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:'<div> </div>'},{type:'html',id:'htmlPreview',className:'cke_dark_background',style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:'<div> </div>'}]}]}]}]}]};}); diff --git a/plugins/specialchar/lang/en.js b/plugins/specialchar/lang/en.js new file mode 100644 index 0000000..cd637a7 --- /dev/null +++ b/plugins/specialchar/lang/en.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang('specialchar','en',{euro:'Euro sign',lsquo:'Left single quotation mark',rsquo:'Right single quotation mark',ldquo:'Left double quotation mark',rdquo:'Right double quotation mark',ndash:'En dash',mdash:'Em dash',iexcl:'Inverted exclamation mark',cent:'Cent sign',pound:'Pound sign',curren:'Currency sign',yen:'Yen sign',brvbar:'Broken bar',sect:'Section sign',uml:'Diaeresis',copy:'Copyright sign',ordf:'Feminine ordinal indicator',laquo:'Left-pointing double angle quotation mark',not:'Not sign',reg:'Registered sign',macr:'Macron',deg:'Degree sign',sup2:'Superscript two',sup3:'Superscript three',acute:'Acute accent',micro:'Micro sign',para:'Pilcrow sign',middot:'Middle dot',cedil:'Cedilla',sup1:'Superscript one',ordm:'Masculine ordinal indicator',frac14:'Vulgar fraction one quarter',frac12:'Vulgar fraction one half',frac34:'Vulgar fraction three quarters',iquest:'Inverted question mark',agrave:'Latin small letter a with grave',aacute:'Latin small letter a with acute',acirc:'Latin small letter a with circumflex',atilde:'Latin small letter a with tilde',auml:'Latin small letter a with diaeresis',aring:'Latin small letter a with ring above',aelig:'Latin small letter ae',ccedil:'Latin small letter c with cedilla',egrave:'Latin small letter e with grave',eacute:'Latin small letter e with acute',ecirc:'Latin small letter e with circumflex',euml:'Latin small letter e with diaeresis',igrave:'Latin small letter i with grave',iacute:'Latin small letter i with acute',icirc:'Latin small letter i with circumflex',iuml:'Latin small letter i with diaeresis',eth:'Latin small letter eth',ntilde:'Latin small letter n with tilde',ograve:'Latin small letter o with grave',oacute:'Latin small letter o with acute',ocirc:'Latin small letter o with circumflex',otilde:'Latin small letter o with tilde',ouml:'Latin small letter o with diaeresis',times:'Multiplication sign',oslash:'Latin small letter o with stroke',ugrave:'Latin small letter u with grave',uacute:'Latin small letter u with acute',ucirc:'Latin small letter u with circumflex',uuml:'Latin small letter u with diaeresis',yacute:'Latin small letter y with acute',thorn:'Latin small letter thorn',szlig:'Latin small letter sharp s',divide:'Division sign',yuml:'Latin small letter y with diaeresis',oelig:'Latin small ligature oe',372:'Latin capital letter w with circumflex',374:'Latin capital letter y with circumflex',373:'Latin small letter w with circumflex',375:'Latin small letter y with circumflex',8219:'Single high-reversed-9 quotation mark',bdquo:'Double low-9 quotation mark',hellip:'Horizontal ellipsis',trade:'Trade mark sign',9658:'Black right-pointing pointer',bull:'Bullet',rarr:'Rightwards double arrow',harr:'Left right double arrow',diams:'Black diamond suit',asymp:'Almost equal to',sbquo:'Single low-9 quotation mark'}); diff --git a/plugins/styles/styles/default.js b/plugins/styles/styles/default.js new file mode 100644 index 0000000..794f3ac --- /dev/null +++ b/plugins/styles/styles/default.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.stylesSet.add('default',[{name:'Blue Title',element:'h3',styles:{color:'Blue'}},{name:'Red Title',element:'h3',styles:{color:'Red'}},{name:'Marker: Yellow',element:'span',styles:{'background-color':'Yellow'}},{name:'Marker: Green',element:'span',styles:{'background-color':'Lime'}},{name:'Big',element:'big'},{name:'Small',element:'small'},{name:'Typewriter',element:'tt'},{name:'Computer Code',element:'code'},{name:'Keyboard Phrase',element:'kbd'},{name:'Sample Text',element:'samp'},{name:'Variable',element:'var'},{name:'Deleted Text',element:'del'},{name:'Inserted Text',element:'ins'},{name:'Cited Work',element:'cite'},{name:'Inline Quotation',element:'q'},{name:'Language: RTL',element:'span',attributes:{dir:'rtl'}},{name:'Language: LTR',element:'span',attributes:{dir:'ltr'}},{name:'Image on Left',element:'img',attributes:{style:'padding: 5px; margin-right: 5px',border:'2',align:'left'}},{name:'Image on Right',element:'img',attributes:{style:'padding: 5px; margin-left: 5px',border:'2',align:'right'}},{name:'Borderless Table',element:'table',styles:{'border-style':'hidden','background-color':'#E6E6FA'}},{name:'Square Bulleted List',element:'ul',styles:{'list-style-type':'square'}}]); diff --git a/plugins/stylesheetparser/plugin.js b/plugins/stylesheetparser/plugin.js new file mode 100644 index 0000000..adba31f --- /dev/null +++ b/plugins/stylesheetparser/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){function a(c,d,e){var f=c.join(' ');f=f.replace(/(,|>|\+|~)/g,' ');f=f.replace(/\[[^\]]*/g,'');f=f.replace(/#[^\s]*/g,'');f=f.replace(/\:{1,2}[^\s]*/g,'');f=f.replace(/\s+/g,' ');var g=f.split(' '),h=[];for(var i=0;i<g.length;i++){var j=g[i];if(e.test(j)&&!d.test(j))if(CKEDITOR.tools.indexOf(h,j)==-1)h.push(j);}return h;};function b(c,d,e){var f=[],g=[],h;for(h=0;h<c.styleSheets.length;h++){var i=c.styleSheets[h],j=i.ownerNode||i.owningElement;if(j.getAttribute('data-cke-temp'))continue;if(i.href&&i.href.substr(0,9)=='chrome://')continue;var k=i.cssRules||i.rules;for(var l=0;l<k.length;l++)g.push(k[l].selectorText);}var m=a(g,d,e);for(h=0;h<m.length;h++){var n=m[h].split('.'),o=n[0].toLowerCase(),p=n[1];f.push({name:o+'.'+p,element:o,attributes:{'class':p}});}return f;};CKEDITOR.plugins.add('stylesheetparser',{requires:['styles'],onLoad:function(){var c=CKEDITOR.editor.prototype;c.getStylesSet=CKEDITOR.tools.override(c.getStylesSet,function(d){return function(e){var f=this;d.call(this,function(g){var h=f.config.stylesheetParser_skipSelectors||/(^body\.|^\.)/i,i=f.config.stylesheetParser_validSelectors||/\w+\.\w+/;e(f._.stylesDefinitions=g.concat(b(f.document.$,h,i)));});};});}});})(); diff --git a/plugins/table/dialogs/table.js b/plugins/table/dialogs/table.js new file mode 100644 index 0000000..d5e244e --- /dev/null +++ b/plugins/table/dialogs/table.js @@ -0,0 +1,9 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=CKEDITOR.tools.cssLength,b=function(d){var e=this.id;if(!d.info)d.info={};d.info[e]=this.getValue();};function c(d,e){var f=function(h){return new CKEDITOR.dom.element(h,d.document);},g=d.plugins.dialogadvtab;return{title:d.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?310:280,onLoad:function(){var h=this,i=h.getContentElement('advanced','advStyles');if(i)i.on('change',function(j){var k=this.getStyle('width',''),l=h.getContentElement('info','txtWidth');l&&l.setValue(k,true);var m=this.getStyle('height',''),n=h.getContentElement('info','txtHeight');n&&n.setValue(m,true);});},onShow:function(){var p=this;var h=d.getSelection(),i=h.getRanges(),j=null,k=p.getContentElement('info','txtRows'),l=p.getContentElement('info','txtCols'),m=p.getContentElement('info','txtWidth'),n=p.getContentElement('info','txtHeight');if(e=='tableProperties'){if(j=h.getSelectedElement())j=j.getAscendant('table',true);else if(i.length>0){if(CKEDITOR.env.webkit)i[0].shrink(CKEDITOR.NODE_ELEMENT);var o=i[0].getCommonAncestor(true);j=o.getAscendant('table',true);}p._.selectedElement=j;}if(j){p.setupContent(j);k&&k.disable();l&&l.disable();}else{k&&k.enable();l&&l.enable();}m&&m.onChange();n&&n.onChange();},onOk:function(){var h=d.getSelection(),i=this._.selectedElement&&h.createBookmarks(),j=this._.selectedElement||f('table'),k=this,l={};this.commitContent(l,j);if(l.info){var m=l.info;if(!this._.selectedElement){var n=j.append(f('tbody')),o=parseInt(m.txtRows,10)||0,p=parseInt(m.txtCols,10)||0;for(var q=0;q<o;q++){var r=n.append(f('tr'));for(var s=0;s<p;s++){var t=r.append(f('td'));if(!CKEDITOR.env.ie)t.append(f('br'));}}}var u=m.selHeaders;if(!j.$.tHead&&(u=='row'||u=='both')){var v=new CKEDITOR.dom.element(j.$.createTHead());n=j.getElementsByTag('tbody').getItem(0);var w=n.getElementsByTag('tr').getItem(0);for(q=0;q<w.getChildCount();q++){var x=w.getChild(q);if(x.type==CKEDITOR.NODE_ELEMENT&&!x.data('cke-bookmark')){x.renameNode('th');x.setAttribute('scope','col');}}v.append(w.remove());}if(j.$.tHead!==null&&!(u=='row'||u=='both')){v=new CKEDITOR.dom.element(j.$.tHead);n=j.getElementsByTag('tbody').getItem(0);var y=n.getFirst();while(v.getChildCount()>0){w=v.getFirst();for(q=0;q<w.getChildCount();q++){var z=w.getChild(q);if(z.type==CKEDITOR.NODE_ELEMENT){z.renameNode('td');z.removeAttribute('scope');}}w.insertBefore(y);}v.remove();}if(!this.hasColumnHeaders&&(u=='col'||u=='both'))for(r=0;r<j.$.rows.length;r++){z=new CKEDITOR.dom.element(j.$.rows[r].cells[0]); +z.renameNode('th');z.setAttribute('scope','row');}if(this.hasColumnHeaders&&!(u=='col'||u=='both'))for(q=0;q<j.$.rows.length;q++){r=new CKEDITOR.dom.element(j.$.rows[q]);if(r.getParent().getName()=='tbody'){z=new CKEDITOR.dom.element(r.$.cells[0]);z.renameNode('td');z.removeAttribute('scope');}}m.txtHeight?j.setStyle('height',m.txtHeight):j.removeStyle('height');m.txtWidth?j.setStyle('width',m.txtWidth):j.removeStyle('width');if(!j.getAttribute('style'))j.removeAttribute('style');}if(!this._.selectedElement){d.insertElement(j);setTimeout(function(){var A=new CKEDITOR.dom.element(j.$.rows[0].cells[0]),B=new CKEDITOR.dom.range(d.document);B.moveToPosition(A,CKEDITOR.POSITION_AFTER_START);B.select(1);},0);}else try{h.selectBookmarks(i);}catch(A){}},contents:[{id:'info',label:d.lang.table.title,elements:[{type:'hbox',widths:[null,null],styles:['vertical-align:top'],children:[{type:'vbox',padding:0,children:[{type:'text',id:'txtRows','default':3,label:d.lang.table.rows,required:true,controlStyle:'width:5em',validate:function(){var h=true,i=this.getValue();h=h&&CKEDITOR.dialog.validate.integer()(i)&&i>0;if(!h){alert(d.lang.table.invalidRows);this.select();}return h;},setup:function(h){this.setValue(h.$.rows.length);},commit:b},{type:'text',id:'txtCols','default':2,label:d.lang.table.columns,required:true,controlStyle:'width:5em',validate:function(){var h=true,i=this.getValue();h=h&&CKEDITOR.dialog.validate.integer()(i)&&i>0;if(!h){alert(d.lang.table.invalidCols);this.select();}return h;},setup:function(h){this.setValue(h.$.rows[0].cells.length);},commit:b},{type:'html',html:' '},{type:'select',id:'selHeaders','default':'',label:d.lang.table.headers,items:[[d.lang.table.headersNone,''],[d.lang.table.headersRow,'row'],[d.lang.table.headersColumn,'col'],[d.lang.table.headersBoth,'both']],setup:function(h){var i=this.getDialog();i.hasColumnHeaders=true;for(var j=0;j<h.$.rows.length;j++){if(h.$.rows[j].cells[0].nodeName.toLowerCase()!='th'){i.hasColumnHeaders=false;break;}}if(h.$.tHead!==null)this.setValue(i.hasColumnHeaders?'both':'row');else this.setValue(i.hasColumnHeaders?'col':'');},commit:b},{type:'text',id:'txtBorder','default':1,label:d.lang.table.border,controlStyle:'width:3em',validate:CKEDITOR.dialog.validate.number(d.lang.table.invalidBorder),setup:function(h){this.setValue(h.getAttribute('border')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('border',this.getValue());else i.removeAttribute('border');}},{id:'cmbAlign',type:'select','default':'',label:d.lang.common.align,items:[[d.lang.common.notSet,''],[d.lang.common.alignLeft,'left'],[d.lang.common.alignCenter,'center'],[d.lang.common.alignRight,'right']],setup:function(h){this.setValue(h.getAttribute('align')||''); +},commit:function(h,i){if(this.getValue())i.setAttribute('align',this.getValue());else i.removeAttribute('align');}}]},{type:'vbox',padding:0,children:[{type:'hbox',widths:['5em'],children:[{type:'text',id:'txtWidth',controlStyle:'width:5em',label:d.lang.common.width,'default':500,getValue:a,validate:CKEDITOR.dialog.validate.cssLength(d.lang.common.invalidCssLength.replace('%1',d.lang.common.width)),onChange:function(){var h=this.getDialog().getContentElement('advanced','advStyles');h&&h.updateStyle('width',this.getValue());},setup:function(h){var i=h.getStyle('width');i&&this.setValue(i);},commit:b}]},{type:'hbox',widths:['5em'],children:[{type:'text',id:'txtHeight',controlStyle:'width:5em',label:d.lang.common.height,'default':'',getValue:a,validate:CKEDITOR.dialog.validate.cssLength(d.lang.common.invalidCssLength.replace('%1',d.lang.common.height)),onChange:function(){var h=this.getDialog().getContentElement('advanced','advStyles');h&&h.updateStyle('height',this.getValue());},setup:function(h){var i=h.getStyle('width');i&&this.setValue(i);},commit:b}]},{type:'html',html:' '},{type:'text',id:'txtCellSpace',controlStyle:'width:3em',label:d.lang.table.cellSpace,'default':1,validate:CKEDITOR.dialog.validate.number(d.lang.table.invalidCellSpacing),setup:function(h){this.setValue(h.getAttribute('cellSpacing')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('cellSpacing',this.getValue());else i.removeAttribute('cellSpacing');}},{type:'text',id:'txtCellPad',controlStyle:'width:3em',label:d.lang.table.cellPad,'default':1,validate:CKEDITOR.dialog.validate.number(d.lang.table.invalidCellPadding),setup:function(h){this.setValue(h.getAttribute('cellPadding')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('cellPadding',this.getValue());else i.removeAttribute('cellPadding');}}]}]},{type:'html',align:'right',html:''},{type:'vbox',padding:0,children:[{type:'text',id:'txtCaption',label:d.lang.table.caption,setup:function(h){var l=this;l.enable();var i=h.getElementsByTag('caption');if(i.count()>0){var j=i.getItem(0),k=j.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));if(k&&!k.equals(j.getBogus())){l.disable();l.setValue(j.getText());return;}j=CKEDITOR.tools.trim(j.getText());l.setValue(j);}},commit:function(h,i){if(!this.isEnabled())return;var j=this.getValue(),k=i.getElementsByTag('caption');if(j){if(k.count()>0){k=k.getItem(0);k.setHtml('');}else{k=new CKEDITOR.dom.element('caption',d.document);if(i.getChildCount())k.insertBefore(i.getFirst()); +else k.appendTo(i);}k.append(new CKEDITOR.dom.text(j,d.document));}else if(k.count()>0)for(var l=k.count()-1;l>=0;l--)k.getItem(l).remove();}},{type:'text',id:'txtSummary',label:d.lang.table.summary,setup:function(h){this.setValue(h.getAttribute('summary')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('summary',this.getValue());else i.removeAttribute('summary');}}]}]},g&&g.createAdvancedTab(d)]};};CKEDITOR.dialog.add('table',function(d){return c(d,'table');});CKEDITOR.dialog.add('tableProperties',function(d){return c(d,'tableProperties');});})(); diff --git a/plugins/tableresize/plugin.js b/plugins/tableresize/plugin.js new file mode 100644 index 0000000..36c6af5 --- /dev/null +++ b/plugins/tableresize/plugin.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=CKEDITOR.tools.cssLength,b=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks||CKEDITOR.env.version<7);function c(k){return CKEDITOR.env.ie?k.$.clientWidth:parseInt(k.getComputedStyle('width'),10);};function d(k,l){var m=k.getComputedStyle('border-'+l+'-width'),n={thin:'0px',medium:'1px',thick:'2px'};if(m.indexOf('px')<0)if(m in n&&k.getComputedStyle('border-style')!='none')m=n[m];else m=0;return parseInt(m,10);};function e(k){var l=k.$.rows,m=0,n,o,p;for(var q=0,r=l.length;q<r;q++){p=l[q];n=p.cells.length;if(n>m){m=n;o=p;}}return o;};function f(k){var l=[],m=-1,n=k.getComputedStyle('direction')=='rtl',o=e(k),p=new CKEDITOR.dom.element(k.$.tBodies[0]),q=p.getDocumentPosition();for(var r=0,s=o.cells.length;r<s;r++){var t=new CKEDITOR.dom.element(o.cells[r]),u=o.cells[r+1]&&new CKEDITOR.dom.element(o.cells[r+1]);m+=t.$.colSpan||1;var v,w,x,y=t.getDocumentPosition().x;n?w=y+d(t,'left'):v=y+t.$.offsetWidth-d(t,'right');if(u){y=u.getDocumentPosition().x;n?v=y+u.$.offsetWidth-d(u,'right'):w=y+d(u,'left');}else{y=k.getDocumentPosition().x;n?v=y:w=y+k.$.offsetWidth;}x=Math.max(w-v,3);l.push({table:k,index:m,x:v,y:q.y,width:x,height:p.$.offsetHeight,rtl:n});}return l;};function g(k,l){for(var m=0,n=k.length;m<n;m++){var o=k[m];if(l>=o.x&&l<=o.x+o.width)return o;}return null;};function h(k){(k.data||k).preventDefault();};function i(k){var l,m,n,o,p,q,r,s,t,u;function v(){l=null;q=0;o=0;m.removeListener('mouseup',A);n.removeListener('mousedown',z);n.removeListener('mousemove',B);m.getBody().setStyle('cursor','auto');b?n.remove():n.hide();};function w(){var D=l.index,E=CKEDITOR.tools.buildTableMap(l.table),F=[],G=[],H=Number.MAX_VALUE,I=H,J=l.rtl;for(var K=0,L=E.length;K<L;K++){var M=E[K],N=M[D+(J?1:0)],O=M[D+(J?0:1)];N=N&&new CKEDITOR.dom.element(N);O=O&&new CKEDITOR.dom.element(O);if(!N||!O||!N.equals(O)){N&&(H=Math.min(H,c(N)));O&&(I=Math.min(I,c(O)));F.push(N);G.push(O);}}r=F;s=G;t=l.x-H;u=l.x+I;n.setOpacity(0.5);p=parseInt(n.getStyle('left'),10);q=0;o=1;n.on('mousemove',B);m.on('dragstart',h);};function x(){o=0;n.setOpacity(0);q&&y();var D=l.table;setTimeout(function(){D.removeCustomData('_cke_table_pillars');},0);m.removeListener('dragstart',h);};function y(){var D=l.rtl,E=D?s.length:r.length;for(var F=0;F<E;F++){var G=r[F],H=s[F],I=l.table;CKEDITOR.tools.setTimeout(function(J,K,L,M,N,O){J&&J.setStyle('width',a(Math.max(K+O,0)));L&&L.setStyle('width',a(Math.max(M-O,0)));if(N)I.setStyle('width',a(N+O*(D?-1:1)));},0,this,[G,G&&c(G),H,H&&c(H),(!G||!H)&&c(I)+d(I,'left')+d(I,'right'),q]); +}};function z(D){h(D);w();m.on('mouseup',A,this);};function A(D){D.removeListener();x();};function B(D){C(D.data.$.clientX);};m=k.document;n=CKEDITOR.dom.element.createFromHtml('<div data-cke-temp=1 contenteditable=false unselectable=on style="position:absolute;cursor:col-resize;filter:alpha(opacity=0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"></div>',m);if(!b)m.getDocumentElement().append(n);this.attachTo=function(D){if(o)return;if(b){m.getBody().append(n);q=0;}l=D;n.setStyles({width:a(D.width),height:a(D.height),left:a(D.x),top:a(D.y)});b&&n.setOpacity(0.25);n.on('mousedown',z,this);m.getBody().setStyle('cursor','col-resize');n.show();};var C=this.move=function(D){if(!l)return 0;if(!o&&(D<l.x||D>l.x+l.width)){v();return 0;}var E=D-Math.round(n.$.offsetWidth/2);if(o){if(E==t||E==u)return 1;E=Math.max(E,t);E=Math.min(E,u);q=E-p;}n.setStyle('left',a(E));return 1;};};function j(k){var l=k.data.getTarget();if(k.name=='mouseout'){if(!l.is('table'))return;var m=new CKEDITOR.dom.element(k.data.$.relatedTarget||k.data.$.toElement);while(m&&m.$&&!m.equals(l)&&!m.is('body'))m=m.getParent();if(!m||m.equals(l))return;}l.getAscendant('table',1).removeCustomData('_cke_table_pillars');k.removeListener();};CKEDITOR.plugins.add('tableresize',{requires:['tabletools'],init:function(k){k.on('contentDom',function(){var l;k.document.getBody().on('mousemove',function(m){m=m.data;if(l&&l.move(m.$.clientX)){h(m);return;}var n=m.getTarget(),o,p;if(!n.is('table')&&!n.getAscendant('tbody',1))return;o=n.getAscendant('table',1);if(!(p=o.getCustomData('_cke_table_pillars'))){o.setCustomData('_cke_table_pillars',p=f(o));o.on('mouseout',j);o.on('mousedown',j);}var q=g(p,m.$.clientX);if(q){!l&&(l=new i(k));l.attachTo(q);}});});}});})(); diff --git a/plugins/tabletools/dialogs/tableCell.js b/plugins/tabletools/dialogs/tableCell.js new file mode 100644 index 0000000..c7a62bb --- /dev/null +++ b/plugins/tabletools/dialogs/tableCell.js @@ -0,0 +1,8 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('cellProperties',function(a){var b=a.lang.table,c=b.cell,d=a.lang.common,e=CKEDITOR.dialog.validate,f=/^(\d+(?:\.\d+)?)(px|%)$/,g=/^(\d+(?:\.\d+)?)px$/,h=CKEDITOR.tools.bind,i={type:'html',html:' '},j=a.lang.dir=='rtl';function k(l,m){var n=function(){var r=this;p(r);m(r,r._.parentDialog);r._.parentDialog.changeFocus(true);},o=function(){p(this);this._.parentDialog.changeFocus();},p=function(r){r.removeListener('ok',n);r.removeListener('cancel',o);},q=function(r){r.on('ok',n);r.on('cancel',o);};a.execCommand(l);if(a._.storedDialogs.colordialog)q(a._.storedDialogs.colordialog);else CKEDITOR.on('dialogDefinition',function(r){if(r.data.name!=l)return;var s=r.data.definition;r.removeListener();s.onLoad=CKEDITOR.tools.override(s.onLoad,function(t){return function(){q(this);s.onLoad=t;if(typeof t=='function')t.call(this);};});});};return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:200,contents:[{id:'info',label:c.title,accessKey:'I',elements:[{type:'hbox',widths:['40%','5%','40%'],children:[{type:'vbox',padding:0,children:[{type:'hbox',widths:['70%','30%'],children:[{type:'text',id:'width',width:'100px',label:d.width,validate:e.number(c.invalidWidth),onLoad:function(){var l=this.getDialog().getContentElement('info','widthType'),m=l.getElement(),n=this.getInputElement(),o=n.getAttribute('aria-labelledby');n.setAttribute('aria-labelledby',[o,m.$.id].join(' '));},setup:function(l){var m=parseInt(l.getAttribute('width'),10),n=parseInt(l.getStyle('width'),10);!isNaN(m)&&this.setValue(m);!isNaN(n)&&this.setValue(n);},commit:function(l){var m=parseInt(this.getValue(),10),n=this.getDialog().getValueOf('info','widthType');if(!isNaN(m))l.setStyle('width',m+n);else l.removeStyle('width');l.removeAttribute('width');},'default':''},{type:'select',id:'widthType',label:a.lang.table.widthUnit,labelStyle:'visibility:hidden','default':'px',items:[[b.widthPx,'px'],[b.widthPc,'%']],setup:function(l){var m=f.exec(l.getStyle('width')||l.getAttribute('width'));if(m)this.setValue(m[2]);}}]},{type:'hbox',widths:['70%','30%'],children:[{type:'text',id:'height',label:d.height,width:'100px','default':'',validate:e.number(c.invalidHeight),onLoad:function(){var l=this.getDialog().getContentElement('info','htmlHeightType'),m=l.getElement(),n=this.getInputElement(),o=n.getAttribute('aria-labelledby');n.setAttribute('aria-labelledby',[o,m.$.id].join(' '));},setup:function(l){var m=parseInt(l.getAttribute('height'),10),n=parseInt(l.getStyle('height'),10); +!isNaN(m)&&this.setValue(m);!isNaN(n)&&this.setValue(n);},commit:function(l){var m=parseInt(this.getValue(),10);if(!isNaN(m))l.setStyle('height',CKEDITOR.tools.cssLength(m));else l.removeStyle('height');l.removeAttribute('height');}},{id:'htmlHeightType',type:'html',html:'<br />'+b.widthPx}]},i,{type:'select',id:'wordWrap',label:c.wordWrap,'default':'yes',items:[[c.yes,'yes'],[c.no,'no']],setup:function(l){var m=l.getAttribute('noWrap'),n=l.getStyle('white-space');if(n=='nowrap'||m)this.setValue('no');},commit:function(l){if(this.getValue()=='no')l.setStyle('white-space','nowrap');else l.removeStyle('white-space');l.removeAttribute('noWrap');}},i,{type:'select',id:'hAlign',label:c.hAlign,'default':'',items:[[d.notSet,''],[d.alignLeft,'left'],[d.alignCenter,'center'],[d.alignRight,'right']],setup:function(l){var m=l.getAttribute('align'),n=l.getStyle('text-align');this.setValue(n||m||'');},commit:function(l){var m=this.getValue();if(m)l.setStyle('text-align',m);else l.removeStyle('text-align');l.removeAttribute('align');}},{type:'select',id:'vAlign',label:c.vAlign,'default':'',items:[[d.notSet,''],[d.alignTop,'top'],[d.alignMiddle,'middle'],[d.alignBottom,'bottom'],[c.alignBaseline,'baseline']],setup:function(l){var m=l.getAttribute('vAlign'),n=l.getStyle('vertical-align');switch(n){case 'top':case 'middle':case 'bottom':case 'baseline':break;default:n='';}this.setValue(n||m||'');},commit:function(l){var m=this.getValue();if(m)l.setStyle('vertical-align',m);else l.removeStyle('vertical-align');l.removeAttribute('vAlign');}}]},i,{type:'vbox',padding:0,children:[{type:'select',id:'cellType',label:c.cellType,'default':'td',items:[[c.data,'td'],[c.header,'th']],setup:function(l){this.setValue(l.getName());},commit:function(l){l.renameNode(this.getValue());}},i,{type:'text',id:'rowSpan',label:c.rowSpan,'default':'',validate:e.integer(c.invalidRowSpan),setup:function(l){var m=parseInt(l.getAttribute('rowSpan'),10);if(m&&m!=1)this.setValue(m);},commit:function(l){var m=parseInt(this.getValue(),10);if(m&&m!=1)l.setAttribute('rowSpan',this.getValue());else l.removeAttribute('rowSpan');}},{type:'text',id:'colSpan',label:c.colSpan,'default':'',validate:e.integer(c.invalidColSpan),setup:function(l){var m=parseInt(l.getAttribute('colSpan'),10);if(m&&m!=1)this.setValue(m);},commit:function(l){var m=parseInt(this.getValue(),10);if(m&&m!=1)l.setAttribute('colSpan',this.getValue());else l.removeAttribute('colSpan');}},i,{type:'hbox',padding:0,widths:['60%','40%'],children:[{type:'text',id:'bgColor',label:c.bgColor,'default':'',setup:function(l){var m=l.getAttribute('bgColor'),n=l.getStyle('background-color'); +this.setValue(n||m);},commit:function(l){var m=this.getValue();if(m)l.setStyle('background-color',this.getValue());else l.removeStyle('background-color');l.removeAttribute('bgColor');}},{type:'button',id:'bgColorChoose','class':'colorChooser',label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle('vertical-align','bottom');},onClick:function(){var l=this;k('colordialog',function(m){l.getDialog().getContentElement('info','bgColor').setValue(m.getContentElement('picker','selectedColor').getValue());});}}]},i,{type:'hbox',padding:0,widths:['60%','40%'],children:[{type:'text',id:'borderColor',label:c.borderColor,'default':'',setup:function(l){var m=l.getAttribute('borderColor'),n=l.getStyle('border-color');this.setValue(n||m);},commit:function(l){var m=this.getValue();if(m)l.setStyle('border-color',this.getValue());else l.removeStyle('border-color');l.removeAttribute('borderColor');}},{type:'button',id:'borderColorChoose','class':'colorChooser',label:c.chooseColor,style:(j?'margin-right':'margin-left')+': 10px',onLoad:function(){this.getElement().getParent().setStyle('vertical-align','bottom');},onClick:function(){var l=this;k('colordialog',function(m){l.getDialog().getContentElement('info','borderColor').setValue(m.getContentElement('picker','selectedColor').getValue());});}}]}]}]}]}],onShow:function(){var l=this;l.cells=CKEDITOR.plugins.tabletools.getSelectedCells(l._.editor.getSelection());l.setupContent(l.cells[0]);},onOk:function(){var r=this;var l=r._.editor.getSelection(),m=l.createBookmarks(),n=r.cells;for(var o=0;o<n.length;o++)r.commitContent(n[o]);l.selectBookmarks(m);var p=l.getStartElement(),q=new CKEDITOR.dom.elementPath(p);r._.editor._.selectionPreviousPath=q;r._.editor.fire('selectionChange',{selection:l,path:q,element:p});}};}); diff --git a/plugins/templates/dialogs/templates.js b/plugins/templates/dialogs/templates.js new file mode 100644 index 0000000..c412e26 --- /dev/null +++ b/plugins/templates/dialogs/templates.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){var a=CKEDITOR.document;CKEDITOR.dialog.add('templates',function(b){function c(k,l){k.setHtml('');for(var m=0,n=l.length;m<n;m++){var o=CKEDITOR.getTemplates(l[m]),p=o.imagesPath,q=o.templates,r=q.length;for(var s=0;s<r;s++){var t=q[s],u=d(t,p);u.setAttribute('aria-posinset',s+1);u.setAttribute('aria-setsize',r);k.append(u);}}};function d(k,l){var m=CKEDITOR.dom.element.createFromHtml('<a href="javascript:void(0)" tabIndex="-1" role="option" ><div class="cke_tpl_item"></div></a>'),n='<table style="width:350px;" class="cke_tpl_preview" role="presentation"><tr>';if(k.image&&l)n+='<td class="cke_tpl_preview_img"><img src="'+CKEDITOR.getUrl(l+k.image)+'"'+(CKEDITOR.env.ie6Compat?' onload="this.width=this.width"':'')+' alt="" title=""></td>';n+='<td style="white-space:normal;"><span class="cke_tpl_title">'+k.title+'</span><br/>';if(k.description)n+='<span>'+k.description+'</span>';n+='</td></tr></table>';m.getFirst().setHtml(n);m.on('click',function(){e(k.html);});return m;};function e(k){var l=CKEDITOR.dialog.getCurrent(),m=l.getValueOf('selectTpl','chkInsertOpt');if(m){b.on('contentDom',function(n){n.removeListener();l.hide();var o=new CKEDITOR.dom.range(b.document);o.moveToElementEditStart(b.document.getBody());o.select(1);setTimeout(function(){b.fire('saveSnapshot');},0);});b.fire('saveSnapshot');b.setData(k);}else{b.insertHtml(k);l.hide();}};function f(k){var l=k.data.getTarget(),m=g.equals(l);if(m||g.contains(l)){var n=k.data.getKeystroke(),o=g.getElementsByTag('a'),p;if(o){if(m)p=o.getItem(0);else switch(n){case 40:p=l.getNext();break;case 38:p=l.getPrevious();break;case 13:case 32:l.fire('click');}if(p){p.focus();k.data.preventDefault();}}}};CKEDITOR.skins.load(b,'templates');var g,h='cke_tpl_list_label_'+CKEDITOR.tools.getNextNumber(),i=b.lang.templates,j=b.config;return{title:b.lang.templates.title,minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:'selectTpl',label:i.title,elements:[{type:'vbox',padding:5,children:[{id:'selectTplText',type:'html',html:'<span>'+i.selectPromptMsg+'</span>'},{id:'templatesList',type:'html',focus:true,html:'<div class="cke_tpl_list" tabIndex="-1" role="listbox" aria-labelledby="'+h+'">'+'<div class="cke_tpl_loading"><span></span></div>'+'</div>'+'<span class="cke_voice_label" id="'+h+'">'+i.options+'</span>'},{id:'chkInsertOpt',type:'checkbox',label:i.insertOption,'default':j.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var k=this.getContentElement('selectTpl','templatesList'); +g=k.getElement();CKEDITOR.loadTemplates(j.templates_files,function(){var l=(j.templates||'default').split(',');if(l.length){c(g,l);k.focus();}else g.setHtml('<div class="cke_tpl_empty"><span>'+i.emptyListMsg+'</span>'+'</div>');});this._.element.on('keydown',f);},onHide:function(){this._.element.removeListener('keydown',f);}};});})(); diff --git a/plugins/templates/templates/default.js b/plugins/templates/templates/default.js new file mode 100644 index 0000000..5db23b7 --- /dev/null +++ b/plugins/templates/templates/default.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.addTemplates('default',{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath('templates')+'templates/images/'),templates:[{title:'Image and Title',image:'template1.gif',description:'One main image with a title and text that surround the image.',html:'<h3><img style="margin-right: 10px" height="100" width="100" align="left"/>Type the title here</h3><p>Type the text here</p>'},{title:'Strange Template',image:'template2.gif',description:'A template that defines two colums, each one with a title, and some text.',html:'<table cellspacing="0" cellpadding="0" style="width:100%" border="0"><tr><td style="width:50%"><h3>Title 1</h3></td><td></td><td style="width:50%"><h3>Title 2</h3></td></tr><tr><td>Text 1</td><td></td><td>Text 2</td></tr></table><p>More text goes here.</p>'},{title:'Text and Table',image:'template3.gif',description:'A title with some text and a table.',html:'<div style="width: 80%"><h3>Title goes here</h3><table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1"><caption style="border:solid 1px black"><strong>Table title</strong></caption></tr><tr><td> </td><td> </td><td> </td></tr><tr><td> </td><td> </td><td> </td></tr><tr><td> </td><td> </td><td> </td></tr></table><p>Type the text here</p></div>'}]}); diff --git a/plugins/templates/templates/images/template1.gif b/plugins/templates/templates/images/template1.gif new file mode 100644 index 0000000000000000000000000000000000000000..efdabbebd4503ceb55c948fa73b9b83cbd373e57 GIT binary patch literal 375 zcmV--0f_!bNk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB95pDD3{Ep z^T{;k4xj+g%7JRP+$IPq!1Bb&uKB$DQa@x|8x8NO4b`hO25#T<cT?Wp$MV<17dSFF z))BV|H3v{fXt;v7Qz+>OnRw~9=3yE0xyeE4CQ8$(2)Mz>8udZCXX=BRr7DZbW_#-a zYZEHlJM(KAEc4dditDMnJ4(CC+&uK06fIp0D*Z|wX5EYpGb{?;a*WKVoEoWp!Y!`y zeo4*}FFC(bZ<u%9$nH#MiXXad0R3$OV^9jhghduI4C3%%k9`6wT1+QVA-9Z3Kq7Ly z;ql{)kRtK8vxt%(#*z~^va~_+<s_FfO%|-VgJQ~^i&o+sN%QB-n?ivSEo$=-QkX%P V&N}LJD2Az2t6IH^HS2={06Vn%v1I@N literal 0 HcmV?d00001 diff --git a/plugins/templates/templates/images/template2.gif b/plugins/templates/templates/images/template2.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1cebb3aed88265add0a1d87d40de566f86a9619 GIT binary patch literal 333 zcmV-T0kZx_Nk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l)5 z^9hYgr_{iwip@$vOs!XY{ff7r?)dx+qsQEX@;zh1=Oa1&?y=+d0`r>f@duda#%D-q zaHzPUxA@lRm;@PF<R|E*cA3?dNXa+p2?QF-GfH|?csggPiIv$(#R;HFXG)usdMlZ$ zTglrSWDC5)3On^`93?w!B+P8${Ot29eG^?BQk)EhyzR7%T}mCkG)~@fea?}tJ~ZwP zF9_a_+eu$;e~)giKb_z2;$6IfgHG@RnC&3KG71+O{O7Pv!-(!6Y9NRa6GMw06gST5 f=<g#)5$xKPRCn@RN^%%lx_k*Urp%cV3IG5*5PY8V literal 0 HcmV?d00001 diff --git a/plugins/templates/templates/images/template3.gif b/plugins/templates/templates/images/template3.gif new file mode 100644 index 0000000000000000000000000000000000000000..db41cb4fb8fc7eafac8f382810e87147e791ad6e GIT binary patch literal 422 zcmV;X0a^Y>Nk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l%g z^9hYgr_`$T`us4l+^+W<)gC_JviY3#AeC&_xD98m<8-m1jvsB&<_@0<GMBdz090rP zFgS9^!+7$h2y*z>q~XXRsCap^IRqK$(K#c!N9pBf82AawVH$?WN){q&IjedXiz+EX zOS+od%WDgp+d909toAG5`lTy-9D18rOxWx+T}>D*o&1Qa9n5V^96nACtqfi*?*05t zZSMX~zfpQ^<%jRPUfiDEO<g>8=eEuB)DKv}S_cJW8uTxqL`=(AMXYB~Aenu4SM=e_ zrj6M`kqsZ_xrlC}y^5evW>krApudqWP2zFM5Fo{b%sA$2wGU)SI5vkKVQCad(WEn$ zGF`IFr&KONpB8ayRSwduHn4I{;q@zxs8h=VDkqjl*t8<nvaR~I>(;n#c+zd*_U=jy QeEa(S3plV~2n7HDJNoX*`2YX_ literal 0 HcmV?d00001 diff --git a/plugins/uicolor/dialogs/uicolor.js b/plugins/uicolor/dialogs/uicolor.js new file mode 100644 index 0000000..71828e5 --- /dev/null +++ b/plugins/uicolor/dialogs/uicolor.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('uicolor',function(a){var b,c,d,e=a.getUiColor(),f='cke_uicolor_picker'+CKEDITOR.tools.getNextNumber();function g(j){if(/^#/.test(j))j=window.YAHOO.util.Color.hex2rgb(j.substr(1));c.setValue(j,true);c.refresh(f);};function h(j,k){if(k||b._.contents.tab1.livePeview.getValue())a.setUiColor(j);b._.contents.tab1.configBox.setValue('config.uiColor = "#'+c.get('hex')+'"');};d={id:'yuiColorPicker',type:'html',html:"<div id='"+f+"' class='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",onLoad:function(j){var k=CKEDITOR.getUrl('plugins/uicolor/yui/');c=new window.YAHOO.widget.ColorPicker(f,{showhsvcontrols:true,showhexcontrols:true,images:{PICKER_THUMB:k+'assets/picker_thumb.png',HUE_THUMB:k+'assets/hue_thumb.png'}});if(e)g(e);c.on('rgbChange',function(){b._.contents.tab1.predefined.setValue('');h('#'+c.get('hex'));});var l=new CKEDITOR.dom.nodeList(c.getElementsByTagName('input'));for(var m=0;m<l.count();m++)l.getItem(m).addClass('cke_dialog_ui_input_text');}};var i=true;return{title:a.lang.uicolor.title,minWidth:360,minHeight:320,onLoad:function(){b=this;this.setupContent();if(CKEDITOR.env.ie7Compat)b.parts.contents.setStyle('overflow','hidden');},contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[d,{id:'tab1',type:'vbox',children:[{id:'livePeview',type:'checkbox',label:a.lang.uicolor.preview,'default':1,onLoad:function(){i=true;},onChange:function(){if(i)return;var j=this.getValue(),k=j?'#'+c.get('hex'):e;h(k,true);}},{type:'hbox',children:[{id:'predefined',type:'select','default':'',label:a.lang.uicolor.predefined,items:[[''],['Light blue','#9AB8F3'],['Sand','#D2B48C'],['Metallic','#949AAA'],['Purple','#C2A3C7'],['Olive','#A2C980'],['Happy green','#9BD446'],['Jezebel Blue','#14B8C4'],['Burn','#FF893A'],['Easy red','#FF6969'],['Pisces 3','#48B4F2'],['Aquarius 5','#487ED4'],['Absinthe','#A8CF76'],['Scrambled Egg','#C7A622'],['Hello monday','#8E8D80'],['Lovely sunshine','#F1E8B1'],['Recycled air','#B3C593'],['Down','#BCBCA4'],['Mark Twain','#CFE91D'],['Specks of dust','#D1B596'],['Lollipop','#F6CE23']],onChange:function(){var j=this.getValue();if(j){g(j);h(j);CKEDITOR.document.getById('predefinedPreview').setStyle('background',j);}else CKEDITOR.document.getById('predefinedPreview').setStyle('background','');},onShow:function(){var j=a.getUiColor();if(j)this.setValue(j);}},{id:'predefinedPreview',type:'html',html:'<div id="cke_uicolor_preview" style="border: 1px solid black; padding: 3px; width: 30px;"><div id="predefinedPreview" style="width: 30px; height: 30px;"> </div></div>'}]},{id:'configBox',type:'text',label:a.lang.uicolor.config,onShow:function(){var j=a.getUiColor(); +if(j)this.setValue('config.uiColor = "'+j+'"');}}]}]}],buttons:[CKEDITOR.dialog.okButton]};}); diff --git a/plugins/uicolor/lang/en.js b/plugins/uicolor/lang/en.js new file mode 100644 index 0000000..8041e9b --- /dev/null +++ b/plugins/uicolor/lang/en.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang('uicolor','en',{uicolor:{title:'UI Color Picker',preview:'Live preview',config:'Paste this string into your config.js file',predefined:'Predefined color sets'}}); diff --git a/plugins/uicolor/lang/he.js b/plugins/uicolor/lang/he.js new file mode 100644 index 0000000..0374c01 --- /dev/null +++ b/plugins/uicolor/lang/he.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.setLang('uicolor','he',{uicolor:{title:'×××רת צ××¢ ××שק ×שת×ש',preview:'תצ××× ×ק××××',config:'×××ק ×ת ×××§×¡× ××× ×ת×× ×ק×××¥ config.js',predefined:'ק××צ×ת צ××¢×× ××××ר×ת ×ר×ש'}}); diff --git a/plugins/uicolor/plugin.js b/plugins/uicolor/plugin.js new file mode 100644 index 0000000..da770e7 --- /dev/null +++ b/plugins/uicolor/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.plugins.add('uicolor',{requires:['dialog'],lang:['en','he'],init:function(a){if(CKEDITOR.env.ie6Compat)return;a.addCommand('uicolor',new CKEDITOR.dialogCommand('uicolor'));a.ui.addButton('UIColor',{label:a.lang.uicolor.title,command:'uicolor',icon:this.path+'uicolor.gif'});CKEDITOR.dialog.add('uicolor',this.path+'dialogs/uicolor.js');CKEDITOR.scriptLoader.load(CKEDITOR.getUrl('plugins/uicolor/yui/yui.js'));a.element.getDocument().appendStyleSheet(CKEDITOR.getUrl('plugins/uicolor/yui/assets/yui.css'));}}); diff --git a/plugins/uicolor/uicolor.gif b/plugins/uicolor/uicolor.gif new file mode 100644 index 0000000000000000000000000000000000000000..ec33de6e5bc6bb99e438497f20adc8db44e4e8a8 GIT binary patch literal 1108 zcmV-a1grZ;Nk%w1VGsZi0O$Mw4Fd`d1PKlV3l0Se4h0Ji1q==a4G#tm4+jqq2oMkn z5fKUz6A%d#5DOF$4Hgj&6%q>;6A%~^5*ZW}8Wk2A78e{A866iI9TyxP7aSfK9v~PX z8XXB79Sa>E4Idy7At4hYBNZbg7$qbeCMF&yCL${*Bqb~fEGQ@}C@C!{EGI4uEh#K6 zDK9B64=OSeEHW1_GaE59A2T&0H8&_OJqI>7D>yhWIyf^hKn*-OH#0&JKRP`=J2^l* zJ~u-aIz$^hMj<{&CO}9lLr5?=Q3*y$H$74fNJ~6ROF>LaMnF^(O-xEpO-(~r8B$GA zMOYt5Std+cEJb4nQCl@qTsuf+4OU%3Szbv^Xcb&uPhVeFUtd~KY8zr;U{h-%WMO1j zZY*1FG*Nd3UvE8Pa7I;n4rg&qS$q|0aaL_|U0r@1Z*ydFb8BILCv<dhb#!!PfiY=< zI$n(iZi7W~gim9S4|auEW|0?qgkpV#Yip7qfQ58!lPiRVdxnOBbCfoThlhEULTR7| zeU?pbqYi<WSaPKpg_vWCmu`5bBafJQe5Wsyn1hy?i-D*+n3<EBnV5C61%;_ci>Xt3 zwhxf0VSu<9m8xx-s(OUFCZ4K=iMlbNtB{VnKBudjfW`%sx=g97qpYi{g~tz=yIP*R zXp6}jkIE;cymqO(gOtlOt-O+o)&!c%LbAM_pUY9Vys3}a54pUtrORNwyt|ay8mi22 znAs<>%z&TTHk0H8w#<&C+D5y}oSEhhs@qk-%&DE{8?f4C#LTwI%fO=ND7D&l%*@KX z+J~s<IGXYU!r7Ls=trOO4x{rL$l9i~=vlevYR%fUsq-n*+QP2$IH3Ik!RLFV{0-OI z&duVbwev~G=Z@Oi*Q)#)yz^VH{3*`opVQ{A%<Gl4{5rz(ZOrYG(dwkh@`2gszq|ZP z-sjE2{9WVc+2`lu%KUNA`-I)|x8m~0=<?R=^W*XJ?&kfy>if>{``-5Z?E3un|NsC0 z|NsC0|NsC0A^s6Va%Ew3Wn>_CX>@2HM@dak04x9i000mG5C8xO{s8ys%ZKmYHgfUc zwOdy%+_!Ak?A4<;Pae8+>CA!SW{ui2XUpEXW2bJMxNg{_MQf(an6O{FylJa84H~m# z$A$sxr3;rWS*?&2BNogTuUxli!E&_<)hSY-YR!uEij}HVrb>nK#7WboN|Hv2`qXJt zCQOznO?t#g(V;?vB0+N0Xi*|Wh6o7))MpPKJ97g4@xw<?o;!8u$cf`-4H`3J;Jj(W zMopSCWypvL^QB7`D^tLD;j%>wmMc}LNQnZ)$&w>Qo-|>iBnc8DM1}|n0_4Yz95sCK z=%EA04I4CO$cO>sg^Lv@TBu-=0)>eZBu0n`0pf#)4jeWmXvl!!f`tkcCP;|zzyX8? a3>GLzkO0Af0|pEfC_q5K000351OPkalif1_ literal 0 HcmV?d00001 diff --git a/plugins/uicolor/yui/assets/hue_bg.png b/plugins/uicolor/yui/assets/hue_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d9bcdeb5c49910d5c32c9ebbb134200bf138b7b4 GIT binary patch literal 1120 zcmWkuZA?>V6h6*nD|EKy_G>T#efd;-TcIEZRG=3KG$^eF2Q{FAMV4*KY}f{qh`QSV zerz}DmTbC_Y|fEr#w0P0=t#CW_qsTZ+oCcxM!nmzgkYx0y)F9Qv+IxZJb6w|&dGC5 zaz;Z<^@~z7QUPF5prJObvq_J$hJ`xXo5wcl^n8zhtsmg}%|C)|K3%8x)wT6C_ipWb zw=>oa{%CJkw=1x%v!^@U-5DL&ajAP1z;mggH7#{nz-rJ$faL=7qA45La$rShQh@N! zu%sTCvXE1t{K=eCf%*<$g}~m_lTbYf%#DuhOcn)}oyL+UY!^T)N0SIlg&q}p70^Bg z#v`A*ftBD@6%H#L*N*0!pas#aR&fdVH33r!@M?%V4H}RB^=Q5i+Cy}fVbYD}B4EjH z?P{0x>Acg883%O<vmR{oU`T=1rJu3nQQIh{?ZLD|n6?b}C#URvz)qpni|<XN&2wJ& z^7$>a|AzJ?B#N%FVmw`fKNY;g=C3&BXB;Z@Kam~dpydSE;!)<o*L-Ly#&HE+cCFAo z+TF<c@SMxbNEK7^xk@y-f%$G}D(p$X1djzpc%<ZSEibCutVj&ocx;#jt?a2*xSJ(* zS(hAU>KoPs+}MGZ#35TL&dgu1t8ZJCOzunMR5)=3wB`6<04>Wd>f<uA7wWiCfdV(W zmgC&mvrX=E<uf&6<xjIMXi@7q4{m-PEuSK{4EHJ!Ou&UEV1J<_f16%>EGNt=fUO7S z2UdorB;0d<%}W2%DB8|}rj&7Bd@G600GiIAl}DfA(T~fGjEtPSpMM-+!R<h;zoq}r z<JVhPIsmHgnHPnBX{Z?w)h@jz9oScT{Hrf4o~5O6<xrkIV?##Ek3+NVSs$LvdUz-K zVqsBnU~^YH-9S#p2Xmt1(pB-YCH8^zSUli}O-sG;%g)JW+E1+FDa)jvI)wsbavgml zl%;;+l~<A*hJi-fD{Qwu+AWO=8||_8CB2VJ4wK>dW!t0gq&tGw>1(Ck!bL+QCwfHM zFSfg6C%J1(_sXrL%2?h=Gs#tB`jY5~^n-B4=5yiEV7#4=o|0Az*Nu@}Ih_Oz$pHOG zC`&0{EO(L#V`PcEmKepS-spt1Gd{>irzEF%o|nyJB4uhF{YR*@P1evnVor$^%6<|| znF`WIVUCMc(=ZuIiR8<#kjLU}uWTnbQf7F06KORJtfO9XHgzgQe;2kI(+lL6NRM$K zObK})t}2X5(vY~u9{XN8DGugG$E0mSB^Mi(>V!Gl<R-dPm~+Hh=xRZ;O|GF#*k$oG z(!0X;G@n4X2wC<=BhuM8?}#0i8b#hV*+Cto*Dz2|UnMJy$uK=5OgnsQX&U)iT;-NK mNV9m%-8>YlD8E#--~|}G|8JkdYdiH90fD-v+HZu-d;bSJ8}W_+ literal 0 HcmV?d00001 diff --git a/plugins/uicolor/yui/assets/hue_thumb.png b/plugins/uicolor/yui/assets/hue_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..14d5db4862403a43231ac4766301552afa79e8ae GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLl;=8&~`zjDUQ}64!{5 z;QX|b^2DN42FH~Aq*MjZ+{E<Mpwz^a%EFVWHb6z30X`wF|Ns97GJ#~>`+k2Qi@7Ao zFBm9x{S+_IKn6ok7srr_TS*Cr7<jgbC%G^QD7vw!9N-X2N^uBd6=CLFC~>4CR#a^B hhMOMV_Dn1i4C!Z>gq7E&G66L+c)I$ztaD0e0ssu{I5q$P literal 0 HcmV?d00001 diff --git a/plugins/uicolor/yui/assets/picker_mask.png b/plugins/uicolor/yui/assets/picker_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d91932b376af76ccfac030c12eb9fec7ee4c63 GIT binary patch literal 12174 zcmV;9FLBU`P)<h;3K|Lk000e1NJLTq006cC006cK1^@s6bntfs00004XF*Lt007q5 z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBVMAW1|)RCwC# zUE7x9IC4zr>_6|b&%Dfjpyv}j54LBIXFZqhE-_t{2r7|?ya1%Cs>h{sswI&ir4|Fh z$jAgxe*E!Arq9Rc<1hC3+xpMn|Ni&&sREphKX2dqw+!rCg4f<Q^c-!Qd7XLxUfaC) zv#-5v*=ysy9>vHA{v>|sAOH9VUq1Wx=i{&V_yqRn;}h7QkI%<<rLmbm<HtAn4GQ?9 zXxr=eLhZcw@b&ip^V$&jy!{z$@3x80K(BA@#q0ff{aco$Y|r&QE!XAt{POa0Yr8&w z`SOMS{PR!x*T4Qn|Mj2$ML+%fPq%$P{M!%v5B<ZBKYX9SPJG|=1$SO&-ph*~wc|58 zR@C0wueM7-6Zk)Mz!uxPZS@@WGgh!l@K#{&f6L?bD`?9N%&&jf>-7fW_4(VkZ}j!+ z*W3A4Q2+7AAN1S*{zm`&=RfJ^|M;1H`st@nDf0RFlp-IAiA&;HZ{w3b`^>wEDMb|H zcWo7$YKZ}V2ee&$PJPY#JEPa?S+a1^5~E@1g&W3xW#A&D$3t?w{=G7DSsA*r_4-%Y z`s<fFW3LkAx8Hud$&g?E`xpB8=bvwK<ih~lxE&(UPJ#4f(0TwHktaOzy&Ne4C6WZK z26pmwvkg6OpkxWw^?$X$Zrkm;SpvHPxq^BH^7{M=;G#kO^6jCi*T+qUyaM~z|M``E z`Q?|J99cpBZon4je+qCX09+CQmdpN`&jKB|WI77c>|z_E&o@}NSYWQ_Q@Xg&3d|Ou zW&0J1V(Gn21@Ok$tl7ApUjkd|>Gf{~b_Mkc=*rd-*uVe&`%Pc}`s=SZK(DV?u$Q+4 zw*GP77{rl7z$bi8N=|4%dgnzQK{K@X9=v7^ctch^o|!a57b!8M)R5bd+^DZB*f)2h zXi(pP{pA7dU4m@DUcq}~?BDN<UH{hYHL!dtumLll2Iefl&}U}<f0kq5G3S62Q6d{p zZDULOYF5`W0x|Ogtm|v849viK>ws-MON*}ARvB9}^yYkUl^^T(x&iy;x&pXVP)oMH zG4>x1DYCNm`n+yi_f;$KX~32?&=bL&3KR!`?Ad)hXq&kbL*FF~DPi6Lgmfs6L(D+0 zND0vbo2}RNnI*FeDS>21aabAxyE61@^}W7lp{p^l|7<n(`g;AVjBWw@)9(9xeA<1_ zw#poqCUTM-$%GBE!A98L3-&VSDM~&dt<09yrjG9!yk%y#tUAruT7GCPy|FT*B#V?H zQhrp%mPwb}`)~L6Qd{o<Bhc5Y%~$2f`lzqhzjgoGcFj&c3)uC7^ND~CWz9(N7zK-- z<UyL+3H-c(($mZkv<ir<e~n&0n~n#z>WGkjF52;svSZcA8su7jAYiZ3LweO3*sn5! zSD>!n=?3mEUmKmhK6d%BxhCszn^Za-*h3D(8SY6kiNgaaXQX90(eY3K$c_zH0Bie! zBHJ2UyB-p(7Bef5YbLIag?2iM6)3&}lecGR>8-$C0bN;o1$K2uG_Y5@@20Q6ep|mt z*;#x0tH7=ryq?1awzczFEUg2jL1spUI~;shFFVJMWT3#Y2!p-uSjIu7V%f`fjs-Ap z^O>)I7X@&(g2WB97X@e*&x;21dj4(4t<5d)+aC4x2CzHGU+%zOzu(5F>;Cn4UV*tj zZ$V@8yjpp$fL&R8ZO0o+m)B>04HkLJJo2A^{CRu7ZvXb}emug@Fk>GfXvJPL@_-^q z01_^oksZ=)$m(QUUX;~R(;!CYEsBZDLoIZEb1~!wBOR^fg#bCy%lortW+6TF_FY@w z<j2w#Gp%4Ql~uJXQW;n1>&6w46@B~bZ!ZnoFU!@$z>E}`k{^oUMnFB{O&3px81f^O z51QS()3a{J?CEH!+pUC&YHNa5>Eykw2XY`qJYY8f?~*Z#9Wbu!EB)#UYzgYy^IbES z3h4T`vT|kq^`Z574Oq_r_AIDJ0c{44L7>OU1PLbsz#Hu@vK`wj512a*;t0UHoeBa? zk6L-sMY|p{s1$`s7O*7~*BX(c{b~v9`g)Thw{{({Us@kq|5b2nV9S~lBm$l;MJBR- zSsN}46ctdtgi9+$xa(0`+j0;b5@@3(htB#Thl4>@u&CE;xE$KTV_CN$*;#_wksf7p zH>9;!8MRBwYyjM)2y#PKP>c6P+kZ7HSsw`0kDr;x8GBY&%c%cEP&e$K0;+W$c6Ga3 z-f4l|(a#9Tgjm>eL6n{@$mNioz>^;m<O;l4TVMMu;|6FJY;G}jEp%d;MwdWd&nxw_ zWOfbgU4|@tSc;UChc*xDOnN*8X!t!jmMwsJBUWaV0MX~SfUeH(f>>!~orEy~tWx3~ zOIPqpfCGkR(H?r%tE(Zjv@CMcj9p#<%|dfa05{ue+I>B?x*{YBs9Lr@sIdpzjet7C z(j3YXHqYbA7G>{gy$rQE(#f8iq4wzn3QC-$G_@y1j3806bjQvT*z2!Z!CPeq$}$Qt zKiFGHksaJG`+EfLE_ox5tq+;W^uV3*u}1^OjK^IhVL9wdjz0DhDyAkTJeq`!B#Pcg zhP)_7_7G+P^?uQ&deV!Q8k_%Iz3u(DO+Od8Pl9$mZo9rWlUfCjjYrK(<6~b$ZT0S1 zS3O;Ux%tu+)a&a-3?R6yAif2U*Sn8h->)oR%UIXfo6X1d@8#Re{rTQ*_p!In<@$MS zi0rd9cH9YgPHQJ6i50k+-%kgas7Aw(CeRhp9m<d*mds$o(vyjl0)WlBc3L?et`yno zuy-j^*;ndsAweo*v-Gj0{E#DKZqL`9Ws7Fw4YWnFy9^K|W6NvfS$$^%yC5kr0)9)H zAix{R6Sp&f{gy<rth~<E2rRpd6oFF0@uSgpQ*vl6-Pm}`-Vs>n<Idib5=42{%{~qC znjV)LTZ4X+Ax!{UwY40HBb9{&^<3~cXoh5h&^HFP<y%_`ml8M}mb1aCRs(|5a6k&M z_jItx+QySrcOVfXtv$)oe8(x5&9;+zn`K+6pDQ~n!0+~;-X<8gNIk8CNj*f&doO{l z>RTLOFML>EN7Z(g?zUW!g!Hg9HcE;V1EAh^ef|OhyG~Aswq6=s?q4)8Rd863y;SWj zSY7I8OIMc~2-fXFMwH5^wNOOZdAr8m>OGbX*q5qptG2GXdan<;-u3UQn|F<U2kWKQ zhX|d$|E-#ObxmXqNqt@KEHz=Xxi#||J1axH4iKE*V(Carqp1UsdlI%q%p9<_xeYNd za6V9-2h`J+#zu@S0z+=v3CW?7F-2-{DMbX+HcVYXswBw66}fhd-pCG%k-vWV%F@o0 zt_P@K3~_Z9u%iNf9@*!Boh)eqf<{k2>kfk?i04PcV*!JYNDjCSSa=A`)xBsyFVf!o zcEj3Z<YOBW<h7%`0(0vm4S=tW?(T+$t&FU}D?nVdou@55t*t}5?;x;Cl)G`VgQ*cL z0fVFSc-3?v_#K9pKyT!ZW^xcH@+81@HC_|&DPNkmxjq_?+DO2#PMdG_)!nuVJk7!) zxGT!}=z_|+4}rJttH76_l^Pq2viBL=@Ub)c+5@$ht@M~$Ywbv5bCQkgc2ua35+=GG zN`YIWSIlij!4f%oTKd?FnEs%Bf0rB8mzG-mvc2!T>$<&e+vLHr0ak9iY3#aPde)nR zA-C1eupV=%_1K$crutm{Xra05zTK<7Zd!fooV!<E-InbdjBD(pGGuUjb|g2_%~>f@ zjN&Brbhe|X^)|DOW?&^TSXp<hN3_TR1bdr>b-J8|rPncYZ6g>MN)cr9$&910<@S`i zkQl{a<mMbwT5O%8NNex@eQ|a%qqE)2V`5w(kH`#*Wu0m`$i5y}t-wxa5miu!iu{|p z4THf8@Sja*BXB=7qc<+d=4dQ+Mke8KETV&4gf1=uY>Qy;-2thth!_d8NT%MNOLaRo zCuFG|O0c<n-dXxpS}b+gSlusK`gV?&Ys1)^n<7~I+A%h_7wS2TZPab>z;<ggn2fv8 zf!wIq;2`+(7<=fwQKZy)(Ne1i+PX>&U9i--BvN-HZ`yK2WHwUjV^zvpBugv*x@U8x z({-K67HqPx8;i~;!e{od_khhIU{6k}7<LRV7|eniFt8Oox}aCVA}Ijt{U$)84qyU& zX*+-l8j<{9os>aYNF7KD;K_3|HlOG;X68|WyQts~R_Ey{93p$q#vLD)BBQJf!D<A5 z9I&_6&c%=;T6PeU6jpKtyyqZzWL30;k}UfDo@i-g2RH98wSY;zFH(NUf~YDpL}0jx zETRlBJJ}(&wZY<buimT2?-E1?kE{G>rZ2nhQiG*TS=m|!i=sNPks~sAWNwo((+QeE z#&&JLOxr|<K+NqqC9do+f<jgfhWXwCyAA*oQe?O3bf73MYWIHks|DLu{qF^jqJ2|q zEuJ4T;-!@)LRMITVpqc2S$Ev}(9&k~k}^>mJq#Wvwe^U!h^q1|mxGNOYb!WJG9t^^ z7DMZKI!Lj#PN|b)?X9WqMFoppm0nG~SG!I#I0zVZ`DqtCYId&sD^t_0?Sst)+mcAN zUvx@c>}O&7-Gj-m-xe7Z%Keh9Wq_!IMZnTSjO}I%4>EJ4jWgw@5p#Q)LYiP`6fiQd z^$<J5c6GK>Ve27n-UX6~u~jBf+k#TtGMMS9dA;lIYZHi)4l30jO7QF&T(%QhouWT^ zynfVSX2S`ZnZPko&ykt#z}4MKa~F_k(OQ~~<ckJ1gE|nH+Ez&x)?k$EycO)2iJ5BS z39Zd&4n4uVJ1Z;3UL>0%y}dDP!_F!}v#hlq(gM^>trIkoxdHpiniE-2)#zvMuOXYZ z@JTauPGdhoUrzx&2nsFzYz-P9uOq1X=#HU5Icmr1+m7`=TI)3+i)$@z)KfDUFrb|e zMgs?s-Dk1u&Z5gh$7`mpZ50a_t)I09Z_Y2;>j48bSd6fih|8uJJL^RwJv?I9MOj1S zdLU4vQqm5rNLt8_pn<5I7Sa+!IUbUAt>rFsNh$%|eUVd;2@Sq8wo0jAKq5vm`3kt3 z=3N~Rsk>_m9Wl3@TSRJXnS>Dm>Ye59TAeks*WX>pFw%@&JCaPu7;eaM#?H163Yxqm ziO1X{Y;1uY1)XquF~r!S{e#6HD+K5cU}@)0U+V%VRlwA-9$@K^y(J@8pB$}LpzaKz z#@63&zauQRhE`R2<!J8Yu*S{=gPGe#6679OJ5U;$8Oaw<Y7{+6M*Gv-FgWCjkW<{$ zP17qF{Zg$3hn>6msV$Z^{OZT{Yqz~|MKp5@rfxL0c0%O-=ufe>>^uw{kcP3JqOoTg z+bjHcEIkgV+Xd`yFtrAF15DLXpaVjTJA-wc7@{Rz2CcE1z_Vdg<2a#%A@fTHRary$ zx^qPy{_{TkOX+1&?B6kR^}s#nLpfB<^+cJ+!)2=@cHV%N&a^i{jchr@!b(pU4J^^d zO17|ADFAxZ`eGm^1_e)qtT@Ery0EFfmaLv(=|+cN8%<tn7E!XZ&OFvOLPvKRT4fBE zI&@35-S;8ZuKv0RPPeGIVdB#nJ3CL_2s?Xiv#Z7yBSB*=b>Rh$tyRdxLGaieqrB*@ zL#S!P*wWof-%8)Qb4e_g_L$k4z#SDq0S(+`G&PH>PTX|r+7{K~Ti3eID{{XsPtw=} z0bxo@dr1_)!UUvA#=f(B>9TP$k}MsN5fF`Yl1{Sda#ZD%T;wD<f^ioyA<m++h;>_* zrR(uRL+il<i>L+JnOY9wm9-+$udbbEn?0(LOj>$r_hai=7gPtL*qQi|ZPXQR$29gp zkeHn=VZ^I8vx(Xr3C^*P2@HVj>St<aJ1wXah>Oa=0bwJ{*liQX>WaLOu?0&v$0Jsj zZGj8Z3^mjKv_3!Zt()Tzw)7pqx@$jMW2a1WYelRebzTA;ZOaH?<q=cF-cWidT@PIn z?Ng%>FNSYztt>#^x{9&}1iB)CrBSv~c-4}XJO4VNu`kuHu8xMR`H+r@WMy3&f@(oD zV-IQUBfyT>ItFjOyTqV&0>y3{a4&QaiC7u|8A%bSB@^2+!6JcGyO0!VK!4kJZHk>1 znNk-3?ybKKaCMsmp|tx{qUMoqf7#pY9YA&lk%ZZwrPU|5J9327sG0NZzDc%Dr%025 zqCIwz@d$Rqv$k9j0=G{sMPM7F99180rOMfIOX{5lSZj~hBGDq+p)@>{DBd>D(nB2@ zz1GjEM9YEo=n!M0*-1Ij*Dw%_*w@JncJ0>&i~KC^eP`rF2U)|W{@J)VA!A!|1Qar* z*jjIw0i|Z_ef0$;GbCeMEUibRZ?mK78J{kaZ6ym=Hg~jl6AQ>=HEZjAwYpG94|(1j zW6N|q-Bz=DfN-cDdxU)xSwru&TsGqlj#fXTK+$96&LKfghSJ8J%i;Ld466Ic7^EwK zuHB7AWfjo^qGj`m7f~6w&sVL%jGPcDOR5_pYDq3q8i?$oc2L&4#06v<<?$EoipXGE zNe;3`$sh*=YVSyj90(jorckgu1=C1Ik&MB+)?!7BTn*jE=l~4l2WgpM$d0D|LtS8) zRn(GZ-@YY{fb$?L^I#iGmZ(nqu<yh<8X3W4PK{t>775i>3x}i}tq++VK{F93+C@%G zValBBMTkrmmI0*)W{`~}Bamck?hjo=AIT2H;zr=Ov-i5ctc-b|dO^D>y);olB4TMB zC|XiP28;VR$Cqm(8I)rp<q7Mcv7S?ojFHz@2b7wz6?1oteH7T<VneMqXLGVi2w-)7 ztG2_M;>>kC5c^snH_B6o0E;X<Pj@Sa;{o^u%9tW&cS7<*xEbAcVC{ACL=4!y?Yo1w zG;+ey*cE(QH%qVs@L$Aw@i)*4Hb==ARv_wuP0ZRToU;0K6g%K@Sfgbu*%1xWHRXq9 zcYP<&rK;#XkRq-NqGbn?C-SZ#<%2qofP>OGDq4mJAaYlw*nfA;o{!0X+V9n+`Q<ih z7n*V%5liA`lQE_gxkij_pVwPmi=BFqTxJlDPlWX$1F{3vdLV{285~Iw#lk*|uWXFl z?Gj@f<Qp+`_g=dqT9!yA*F{ih+J*gjd8E9xv_Q;TUu${sXnPatMGqd>=20nuSDlk0 zdgAwJ=+@w{od%FmxoH4qYj6Ry<_6@487vZ>V-HCY_L4Ek;gHVAHhozyMcV2<0vW}W z{7{x50y!yd{Q&F2azst1q4hSTulr-+Tp`h%A*?MwAJ_+zEJ?ObOB4spn(@)R)X>2& zf=kQ!usm=ppk%N<3>mc_`qq7y4os*fgh3{fE%yV-ALNecQ9724spY3iR-n%;mLmd6 zE873Ja6=*qeEPg1Cyb7X=BtLlGg9Z#Gl5!Z*j^VXfzjv;q(@hx2?D~5Jdw7U_P2|X zXdzX>N67uq%&cTd!^|?#(m5pyv#$2jQbRr?MwiJL*{)@0>KMC94OKA3K#t72B8eGQ zho%5VV9w47VpMu*-A$wNL!A%GiU-iw7fW|M05Jh}mf1p5fbI&HM3Gac!<DWkrJ13Y zM)IT6)0@^s(n11P*LQdzCp8GSO}yNuP+KY{0=e;YV2_M?(K5wzM6#Jg_JD6Oy-~eq zF|w8(<P_1n+cY~vYtPtb0oh=56XdAysq>nzy#;7ldzS7-AeZ2l+khNtzzZzBJg{dp zb~=mbyw7Y0_M9bK!fawT<A{<%O1{A2D6`$tbu2QhKDX{#XXik%lLURI*MW-zv!ULz z8tI}v{$YL0{nCPm7b18DV|!`#5tjB`kkG46u(8_)$PjBEk|2+5Ok`vuQRdNVhw7?b z#+HRmz!f1RLAHSx7d9TKW;&y>={_?Rk|qSC2C5A~wb;**BF6L!W`$oc0wS#Y$YvKE zd17j5OQIOlnsscaN0*DLL$AtD>*~b_1WCz@B5FbwppQe4OMr?AbDH21$qb#P1Oo$h z`Jrt*5Px-YL<g1*c%Q1VM~j`1_Kt>qh0lp<J~Ae+A!B?a3LYVY8%04){ffoTDo`Y& z*4bldb3X#G;fhdoKICzh<I%CZ19HUB67=1eMefHjDs4{ixT6}I>~&%y-E2w<M@~et zW9GT@t2OHaO-*V{A_2M4jMgza0HM!Cfv6tGs5P}Q_L7WLIss3-SgGpFZ)x0ZyE+k# z8yy!IZB5Br;}x$0@U-f_fr%u&f~AP1#psyZD_z-VWgH3g_--_fBT)!=-J}?rQMo6| zPU@tEmJ~>y05*1A5Qnk%V<damVPv2PO0EM_<mUl)?pWM&MRYb1c-qJfv5K9hrAT@P z)pV(9z|w|&II5weX%tY0Agfa}pl|(Ww|o^0D1f%0B~Oew@+_}=_oV~tuah4Vm~sjP zOOnW$txzf)$rG))!JU#pLdFCzXfv*{2iZH7YzazH-TDy5i;Q~Zs+xTXfR>HvfhCyH zC=hpY#SvhGb9KOVK)%&Y^RnGaB(p=7)*V4_v-Gn7YcXoCFRC_(RZ!S6b8Cfqwbxbv zIj6A?%91d9Xt1|+Of<oyx9UJQIKi57LCiUVylm2)M|jq-ow@^%9>}XTw3;!B44<0% znWwtB|2&P4+P1NSp^2?K9QLkzeJ!ClT9SHNtqA8<27~p{mMh}O4{Na_#LV9CBRDWv z0#Jih47q~#9>@&J3tPNlQHDPawRfPgO~%%`y0s}74Z!7ym6a4BPiw1+ygEt-x+0)F zb#IHD5sR_Ifd)sVNL0&_vGT}Xc+?%csAYn*+Q^s#o56yZ9IR5MSuC&vo8!1&Bi#ab zqlFVvgjB+%|65pFi}1B2Pjo6A6*5T>N(ltKX>(B|m0NHnM|lj~Jr~#sRwic<K_pd* z%=TD7=KSgeZ5t*Oly<L`ofZPw0k$=SEHfE8^sOc1YT)m$mu4#CCGom4YKp0Kpr{ix z1m@VY0>^FJ1-T`NnK`Sm1G_Iw#v}#|WQK-WlSrb8+AYnEC!}nrHzOofG;mq1M+5E# zF0gem)7`OLLSQ3s1BPWaokAx|WSl1)5O_Z6ba(|#QZlH~GNb{nI{^wDZ8k5vpDICX zWG18F@zH)Vr5-va5qopI{6+-mtjzF^x9ma0=x8jY25H&De=xXL-ukp$GA4EJ?nEl- zQ?{Ut(U?OkHjw~DK_d!wv%y_+E+_VTv|H%t<BVF7^pp$0n|2568h|EKdmAzXTujK` zGRwtat#hM<)nsvNo3rntM$L4L?7b%@i=`VquBD3+J6;sn*<xgA0V+LC$dg8L#2N~g zd_G(&l1aL_K(;JCLz0-=9Cl*hco4Ft0KjyBsngKIARYv^=X}`jm*zdG33L|qTcbg@ zCfG%L0un`ozHv7?;4Tp8P^JL6Lgdeh&Cg`)OeT>Hi!TN=lLhqd)(n^$wIw5XbX}6n z`wVcC!1m9<6ftn4w>5(+5MMNCf!6LiiE4Whw^Y6wQ<}v(+fAE42iREv2fEtS=E3Z# z5uh!P+mj_oiZsVqH6tECPhe|8cAs!~*a#jwEAVkGN;B?DgH<vv0<x4H+PBtHWobou zyU$Lm6Ot<iQ$KB#dU`~9dh#55-aax?>?WY8pQ;Rv=0J-zk#a?d`U!O06|i&_pC0~% zs`H#tCai{-F-YNecP#Zgvjn-m4!WXHOEei+>hHL2yn0o89qjDD)2se_dhnP@n|qag zq7K&uG4;zpyE+``=ZwZifMAQ|GqM9DW;}m7&*Dql$%OnMBsqMELWGhrj(%q3(o|;F zm3fVvSr`q@)mGl(=<h&^l+&b0v<OlwQ`q&q$<f#p0J<2XVaQ=$kKxc9A~RBiy|g^Y z`h`+tO^XY_qLexTNrAj?FOY2Rpq3P|0Nh%R*yR8d;uM{r83#5$71$cUFzuc3ye+Sp z@UqdJM{O}SvimGYMBgbu`yqWj6I?1U{-V;`miw`%=e75(oi*fuSiz%Y@Jt<bUENEv zwd?@u`a08@6>b*|dsgt6oOp6bR~u`cPXan(Y?Gy<!Y4HP#dA`!4vXnhw85cSBVq-Q zz#$>ewo|O!dC`^>(LOeEI&2wo%g8#w=7X*X=dws6C9Z=RM)P&R>XeWcW*}*S9|dBO z#E4vw6hn)0PQ$k*rB~U=N_Ki%gBgJqonHde7}<hHk29I0VnpGpvo9+}3}B;-ozlzF zATLH68rav>bdbG3X-bM%8BGh!5%`glVkCChN}~g3BW$M}kFK2>ONsVtFvIPh8-j|! zP`X_o->~@7R1I1~_EP)g01;!(lkT_dq{zVuDO3BhOrBuw4xoebW0<k60MZ)#nw2Dq zrOC1x4ZRH6)?#6#z3Vn5OGxWzAStpe9%yNIwcRXhzb&v6wIqi$wo?oh$`8~bEa`xl z7l1zq6scDEA=zQoZn)<MQX?HOf=b6GNdnsU4#)$<MFxxpP(ASSK<fP6fZe3ZBUdB} zE<Jz)Pd&rfkd47MvXUv5ZjP8+4vES-B~~D)EI#6RMFyz7wS{K^T4x?zjjb|`+hMP- zuM84n5u3jourq1&As^eT40OP%FQye-veyQH%&QjcSRHl*CSrT(j|>}oV0S%e1I!G@ zS(<=GAhvWhk}V>&+|*Y)b=L0-?9AW-BY4bAxj;rqE3At~Ky}WW0=SHa2iUo(K{h79 zoT?DC0FAa;NfwZ-@hm`!>^_u$QRi@h3rq?mNydOZGE=G{H&Tn{xCKvROl{R@LvI^( zB**_YItF)xh#kMXDH{M%hCO)$0MF=nR&EvuhTU2b<g}16dz0zn2seiYW@@q?Xja)% zYDJPWt-|4AhQ8(un3G^fQpDBWhF?uit%xaQvO3!c3RAwfv8`l-KV7J${c2KU5H0<T z5;Qs$Zs}vq(5OsRGqf`d?Cqq8r?Z3ckp)b?SuEKBx7|rF18}5~AxIE#z4Uox*&PJ& zaC+X#1R{{C@t7T;YYnvpXvN&k00IPf0MP6>Ml1Q!wJQMKqreW=pfU8fHKC=;%8?Wy zW7a2QbPj5(!N<S~bXmJi{yqi7=6aJ>Ijz>u$oivp7#D1d0NoTZEjF9$;1MK(IMCCG zx#4mA491Rzkwx{-qhlU*CEw$JHpIZDM;^H+`-KBjpLq;>6vPe?U29I&lkB=&7dC0T zkL-zu_B9&G9&wIzIR`R>lTzb(!J|=U9R-`&X&KV;#bWceXp7Ay_biXxa!>Y)!Gw|^ zRzPXZRpL4+;23w5y4e9ilxJLLJ(vJZZMK~=hmp~M@T|Zw#n?zU2c03D=h^@)oM4jt zsnM*VVdlh?mfl95dUI}PN`okEK2kL0v3MjOvN9u+K?D|Fd;ZM@K@!6VE-4WpdRjVS z`e9&)&ImiJgbn!Hp)7H-n8gVs%>dH{es0F7IG{|}g8|!fpqD#of!gVkQq&1hX3_GZ z_3_C-5c<`Ii&6%I$Pr){sa<DucDM`&wJYU%ZIP^jEE@q5eSZ`PI+;fk=)rLX*^wC_ zYrVWmtR*U}dR*HSW9#jm{$Aj<L!)8Pb<VJIG}+`?z)m|O*4)=<o<9U)%PzF$ympg0 z3HENk7n`!gW7samZe<~(?Z$|D&a_(v?_#hm@|7*dcB=ErwrCX09(!3uHNF&$N=N4* zgSp3not%VnwoR1GAw%zS0DL(AwI@ULk1VE#>-I;}6YGm*O`nF^QD6H`R=aiQ0s=u4 zTza2}Kqg;X`>lWu)lt7?a43FWI*YMWGq5^yjaX|lW+X^@MFS{LxLd9dEvFY2K><K2 zHocdoW^{LkwJiom`dDjX%f17(9)_kaP2m!_D|Fh}m@O49t>Mgp?OA;_w>u?86cFL0 zl^u|i`zRqxP>`3><7&bkb1pweD>LXk79h=KJ3K9)2o~)&cO%)=<GKSNAa`;D%M!h^ zu$yGbOiAVyJUOZK==i5Hc9d2}y`0DyQs(R@RI;kAIV4BWE!;`sSmmlbTizOJ>1g}F zezt&oXXmE4tL+eryM}%D`&caP0o?<5GC3n&x1^uY*oC}O)4&Ny&lDB0x4RvToOh&) zr$x!r&{le0YierKcvjGr`MhwQN2@c|(vL0gU66c2WH&Pd(};GS(b>6m9(kOx2U$5v z@|0jSjm6$YCkMz`nb*JIW&u`KPe-hr@wz*AM^1+0bSRGYKYlwV;Do^T4dXIFHa6J1 z)5oZS&(qlha)lDCehAo6iE0Y?R>0YuTY#ACrKQ=>*;xRyl>~C^y1g2X{k0@ro$W{? zwvM-s$pDz_i65J#OcG%Bz!;8vLC%YD?so%r2z*0VV~N1-I_u_z2H-X|cn0LCMglSM zk_53Mlgw>~!{KUf$8{>kWIt>;QEu|Y(%7QI@3#!A20N#nd+-LJ&->U1fju>|lm~u` zMVtiAa2v1VIPJr2mh<AcF;HS<_ZgsSk6$?TyN>ANV{@gxO%YTY*rpumms_z`G6*Nz z@vOfDix06fV0>$B$utX(vNk(w-AuBv%gzxK2aX60xFRL6_ufZ}bZ!6>Cu>P8z_~%E zH<=FdoV||Vfm~{K063R%M}Vz=BS&@=XYTJbm>oS$PO`<-#+Jr*?h<A#NRaJ(F0eI# z2N)cdz9!iu1f}JDp8#?%Ky^Xe7FMxbvoZzxgtT$BwDtdc{8wzxIU_}qa)m8vl-1Wp zUHQ1ij>J)Bt`PObM)kSZ8H|g?k<=*@;I^`DUND+wP){p6|2G-|G5*}WiV*^B=KId- z;G@Tf8k-jmEBQtPM31$T_1&(cVlBrp3fd&t$w|wntNq&V-IN5&It_E4@Imd|Kl?!< zfuUTc3zAHObCRvo`Z^&~rld%Ai4Mrxfz*f=J2kV1&iOMk#tIN2lVt<S_<2bOiZky! zoy+m>AiQla>BXSp(9++bG|?7bP^y}FKW_JBeC3hEjw3ZfkQ=ooGj?Ibj8S#saVB*- z(a3wWYzYE&Mi#gdr2U=EcHfQNhXCmfHXuAzgA3lI-REUKqmoum9Ai$?F!CHEmD0~z zqF9XWl^>uxWn#1olpsOM+>$6(x}0oQrzmhdPl^o4kuac)((nmM5;-1}WlGssZT7om z&`$%t(;*_@Mk^abP-k3?V4{ACM!F=WN2VN=j44B&BSj(rM^iD32B1+VaO%L_i|*Y4 zY*t?&sLqff4*OA7!ZgPku1D6@utwCJ{WyPAO_H%kf$k=8h&W*C==PQYs~c!Wj2#U! zFn*)-F<uN1C8N+Wd$7l0Zh)eW<Yfsn*DD%+mIw|rZ0xjoKn$%KW)94CY(P&^q`|%I z%*vDEfGVBrL5{~P&@;=9%(SJtZX)W~>|TRRDm+6Dq3p;2+49V@!K-(?{xPPPoF1to z$x0H=yC}mJp~L3**vIz?8MOj$Qro8;i>#|LTTB(5kG`YF^a7^fmu>C|j@F))CsXdp z2*c0Hi~~%Z-PZrVI2D6HRvrQW5r+0;$An*<4jfMfb~H<CCa9F{%43c0v?hN5o$92C zqfAB_5PNqi<nKB_9R|BmxI|#J+mhACXxn<y>xr6qu(0VIU{6XB%fdUt+7GKM$ZQ7d z+*G-q^3AhAkG6UGeKe43wk=Z~@{qi^8g4~a7kh3;^x0=fpYx<ha?<w<xHD_lNM^Ps zs6q830gIn<%l24%sH5R|P)0jsioJux3z1WXIuaxzrcKC_=P)+macH3&i6lst#WQmO zsw6^`BtnwsETA7fCxPS&9bs&X0aXVi8mQQt4K8QcI5$dtg0Ta@ht^=y3iJx8ELH~R z_w}_2r2ey_bJ+TNL^EUkoXO6Xk^dhEA~WZpOh-}IFm352((9uPKFru)d!g*S6a#^z zS#RPU=Q01$M9}E@W<iK%ts3o|s19T>@Ed05BU<|1?Y@y9GNH9cw6|*ydMtC~bu#Ur zW^%V9`U#e%tuqzfu>F?#-9|w@YT*rZk~0~*#cRn2ktxkSAW3Ed%?xnei<~%b>YUvy zQB0iuZb_Yd#{V~D+^D7_lR5mbj7|2~MWfx0!AN^YIy$^?2|Zp0fzVvE@~A_$*cnVA zMw#g)ypC<gCxeVV^t&Wo4x)i{coO(LC}+;m*q$80faj>q2vdiFXhx6E0)LqSNUxhI zVW-W=i}3ha-8{;~vjY#ZReptXbC!%U_7TS<<#h*49XcddFz8&+VQpzLHIvtFG}ukc ztmOZTJf~!aiH*rPc@pR;9nD7=JCGdVDq<116>`I1b5xT@tC-Dp5?2cO>`Zi$Oc?Cc z(=Nq~W}cBGvz~W!9>~};tnKM?az?r*E|O;jW_03+7UVQwICongNlHz~C-}PvCLZYw zR_qcowKa`$hP?y!^;8FkQe+UQgE~86O1M%&)(VWI%!rlfG4Y`wbreh^=ZP%0M8brg z;dU5oO-Jt}hg^{e*c8v~l#?WMUt?_~z?@+B^hF06nQ2~sj#!{Wam0bn8hwA4g(GPp zre)|l%aSOn8U*|Kj6IRW895IgvD0rHxqx+pbT_1PaWqhU>-R^eY8dPASqqQe_aWKy zbYM@gdG;KmUU;{SlVCmuz<nh9n*x3Y<Y$6<#>zWeg767aWXd_QWP{P+&9)h)*5Dlk z!wjP}|BcZa_lfvoG{C0G|7UodwcV@AJHfqqjue^oy9ceoY@nI}^Q?wH6;v~TLW`Kr zXy79tKO?#FmJgG$lhVOuZE*2ZjE(?$gwY2R3`cIyVJA+KNNfEK$gcDqZHkf0VMdOe zm>Iv^1hyK8I~oYO9l-Us@yB|M4gsFj<5}h%0z<ZA4Kn3$Cmm(pK`p(VGhGBX#o%XZ z?mJ^2bT~#Pi$5XIEC<;82q1@Ki3dt*P5c>Yagcd)ZD(q&^V&IE^>F~$_5al^!k4%1 zJn&9?;+~W-ewCt^;T`NeM?jwi+M(lXmEnk#nsGM*Cu2AujAFmD9g=3^cRpazg{)2P zn8^slCiA+?NR(!+NuZ1{S-MkuZF%6gv9{}!d*XLgzfH?4N!?6zAmK9F0seNx-8fs1 zXDviP*JZL(3;|+<;j`Pb3|s~}q7~H5vaL6j*f~=voG(jG12zp0Lhxjb*#NQD5r-zc z8>nBrJig*G4d%vKNVex5w1@9RM?K}U<_D?ky?<0-r@?(R`7<F~j_Ua-DRkEMB-_q1 z@$fm%)WpvkLgx9{!#X<&F7INFwDI;^pqK^5?8P6qK<7GbdE?(Hqo*ms<}?E8kxmdW zcC)h8=)>p`ot`?H2s#>^rZ4^=FlN|z7;uANn-1>IN}N2Cr3Zk`BP^T*Bp+h=GXQ?n zq4@~xH~`i&0DT(!&VYJ`-9wFiKyS}TnG}0}0I747b%*zVRH^Xn>CK)NJe~mTrv#t_ zcabwXLIlFM0P-}L$AMa&#=dX$_}d`x3eTZ?RLY=?o8@$7*!k>srvp9PW)jSU?U;_9 z^Qe?K+IdESZGby%u+M1qd$#NeEItDAvw?m9$ftmLQX9{>7*l{gdPf)rHlFHin8at8 zf231nfja`;X`qjQ{TPtT2$-J+=#L;%GCuZM%zFe-GoTq|EqXG0J-rjFA!)<E$4KYP z|BmD7@}o>YD@D%G+(%jVtWGl1QAU{d2%u&<<*Zbo86f4@e+txxnf@rS&tmU0L4FkI zvtVzu0H1hQIRnIJ0C_feJe#F6_kc5iO=q3M`0__VKFhGvjLYYO_Y5XJ1jJ{7c^Yep zHW&J!52nA`qtNH$?S3o4*oSLk&tTSPNrW?X?<5;9naK^$U}fVxx$Ap|<T-vP;4^{E zPXXW)LH;bT9|_#%I?>$u2f@bg3gWkxHK%Fp4+8RMf$}i0&g=*$e&(C#qxaD0ZvpHl zv+I<EDo+IDQ$cjLM0zHOXC&753hXDaE5Gaa`~Et}u~=%TT;Y^Y{C<Ib`i10=`5*cq zwg?~noyured5?>6`Mm!BUmxWOUFGBaUp^pXA9e5eL-vl3cNcl?@AS6vgTG5D@?CMq zTi=Sx2mN33JO2+a9~-FUJu&myl|RHap8Fr(82g7GfB2M~pO3%P<NpL009r=Zt$joe QQ~&?~07*qoM6N<$f&<h~%m4rY literal 0 HcmV?d00001 diff --git a/plugins/uicolor/yui/assets/picker_thumb.png b/plugins/uicolor/yui/assets/picker_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..78445a2fe060047216b3692980ebabfb0683c3c6 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s3?%0jwTl2LmUKs7M+Sy#H?H_c7y<c`C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$ZGeh61AIbUf%JbcD6UwV4CFAE1o;L3 z|Icv!6fe*~20c#~$B>F!NeM|wNi2*CXBkqA8W@y2&T>3yVv%g*IK)!uk)}MmImzx& dTmu6$gLVMJ@>Lg{{{wY0c)I$ztaD0e0szdFI<Ei# literal 0 HcmV?d00001 diff --git a/plugins/uicolor/yui/assets/yui.css b/plugins/uicolor/yui/assets/yui.css new file mode 100644 index 0000000..d606e92 --- /dev/null +++ b/plugins/uicolor/yui/assets/yui.css @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}.cke_uicolor_picker .yui-picker-panel{background:#e3e3e3;border-color:#888;}.cke_uicolor_picker .yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.cke_uicolor_picker .yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.cke_uicolor_picker .yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.cke_uicolor_picker .yui-picker{position:relative;}.cke_uicolor_picker .yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.cke_uicolor_picker .yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.cke_uicolor_picker .yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .cke_uicolor_picker .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale');}.cke_uicolor_picker .yui-picker-mask{position:absolute;z-index:1;top:0;left:0;}.cke_uicolor_picker .yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.cke_uicolor_picker .yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.cke_uicolor_picker .yui-picker-controls .hd{background:transparent;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls .bd{height:100px;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.cke_uicolor_picker .yui-picker-controls li{padding:2px;list-style:none;margin:0;}.cke_uicolor_picker .yui-picker-controls input{font-size:.85em;width:2.4em;}.cke_uicolor_picker .yui-picker-hex-controls{clear:both;padding:2px;}.cke_uicolor_picker .yui-picker-hex-controls input{width:4.6em;}.cke_uicolor_picker .yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;} diff --git a/plugins/uicolor/yui/yui.js b/plugins/uicolor/yui/yui.js new file mode 100644 index 0000000..ee0cad1 --- /dev/null +++ b/plugins/uicolor/yui/yui.js @@ -0,0 +1,76 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/*jsl:ignoreall*/ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueOf"],D={isArray:function(G){return A.toString.apply(G)===F;},isBoolean:function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error("Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.length>1){N.pop();}N.push("}");}return N.join("");},substitute:function(V,H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if(!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1796"});(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},get:function(y){var AA,Y,z,x,G;if(y){if(y[l]||y.item){return y;}if(typeof y==="string"){AA=y;y=K.getElementById(y);if(y&&y.id===AA){return y;}else{if(y&&K.all){y=null;Y=K.all[AA];for(x=0,G=Y.length;x<G;++x){if(Y[x].id===AA){return Y[x];}}}}return y;}if(y.DOM_EVENTS){y=y.get("element");}if("length" in y){z=[];for(x=0,G=y.length;x<G;++x){z[z.length]=E.Dom.get(y[x]);}return z;}return y;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];G=S(AF[v],q);x=S(AF[v],R);if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC==c)){if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G}); +},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,Y=K[t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibling){return G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;Y.setAttribute(G,x);},getAttribute:function(Y,G){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;return Y.getAttribute(G);},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B); +}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1796"});YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:function(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,YAHOO.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]=a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{try{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.removeListener(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN]; +I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready();M._tryPreloadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=YAHOO.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O[N.TYPE],O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener; +/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */ +if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E); +}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1796"});YAHOO.register("yahoo-dom-event", YAHOO, {version: "2.7.0", build: "1796"}); +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue; +}if(!this.isOverTarget(P,d,this.mode,U)){c.outEvts.push(d);}I[S]=true;delete this.dragOvers[S];}for(var R in a.groups){if("string"!=typeof R){continue;}for(S in this.ids[R]){var G=this.ids[R][S];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=a){if(this.isOverTarget(P,G,this.mode,U)){D[R]=true;if(L){c.dropEvts.push(G);}else{if(!I[G.id]){c.enterEvts.push(G);}else{c.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:c.outEvts,enter:c.enterEvts,over:c.overEvts,drop:c.dropEvts,point:P,draggedRegion:U,sourceRegion:this.locationCache[a.id],validDrop:L};for(var C in D){Q.push(C);}if(L&&!c.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(V);a.fireEvent("invalidDropEvent",{e:V});}}for(S=0;S<E.length;S++){var Y=null;if(c[E[S]+"Evts"]){Y=c[E[S]+"Evts"];}if(Y&&Y.length){var H=E[S].charAt(0).toUpperCase()+E[S].substr(1),X="onDrag"+H,J="b4Drag"+H,O="drag"+H+"Event",W="drag"+H;if(this.mode){if(a.events[J]){a[J](V,Y,Q);a.fireEvent(J+"Event",{event:V,info:Y,group:Q});}if(a.events[W]){a[X](V,Y,Q);a.fireEvent(O,{event:V,info:Y,group:Q});}}else{for(var Z=0,T=Y.length;Z<T;++Z){if(a.events[J]){a[J](V,Y[Z].id,Q[0]);a.fireEvent(J+"Event",{event:V,info:Y[Z].id,group:Q[0]});}if(a.events[W]){a[X](V,Y[Z].id,Q[0]);a.fireEvent(O,{event:V,info:Y[Z].id,group:Q[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLocation:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.getEl(),K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C.el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(C,E){var D=YAHOO.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id); +}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this.config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||(E===false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D); +}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1796"});/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +(function(){var B=YAHOO.util.Dom.getXY,A=YAHOO.util.Event,D=Array.prototype.slice;function C(G,E,F,H){C.ANIM_AVAIL=(!YAHOO.lang.isUndefined(YAHOO.util.Anim));if(G){this.init(G,E,true);this.initSlider(H);this.initThumb(F);}}YAHOO.lang.augmentObject(C,{getHorizSlider:function(F,G,I,H,E){return new C(F,F,new YAHOO.widget.SliderThumb(G,F,I,H,0,0,E),"horiz");},getVertSlider:function(G,H,E,I,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,0,0,E,I,F),"vert");},getSliderRegion:function(G,H,J,I,E,K,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,J,I,E,K,F),"region");},SOURCE_UI_EVENT:1,SOURCE_SET_VALUE:2,SOURCE_KEY_EVENT:3,ANIM_AVAIL:false},true);YAHOO.extend(C,YAHOO.util.DragDrop,{_mouseDown:false,dragOnly:true,initSlider:function(E){this.type=E;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=C.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=true;this.keyIncrement=20;this.moveComplete=true;this.animationDuration=0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0];},initThumb:function(F){var E=this;this.thumb=F;F.cacheBetweenDrags=true;if(F._isHoriz&&F.xTicks&&F.xTicks.length){this.tickPause=Math.round(360/F.xTicks.length);}else{if(F.yTicks&&F.yTicks.length){this.tickPause=Math.round(360/F.yTicks.length);}}F.onAvailable=function(){return E.setStartSliderState();};F.onMouseDown=function(){E._mouseDown=true;return E.focus();};F.startDrag=function(){E._slideStart();};F.onDrag=function(){E.fireEvents(true);};F.onMouseUp=function(){E.thumbMouseUp();};},onAvailable:function(){this._bindKeyEvents();},_bindKeyEvents:function(){A.on(this.id,"keydown",this.handleKeyDown,this,true);A.on(this.id,"keypress",this.handleKeyPress,this,true);},handleKeyPress:function(F){if(this.enableKeys){var E=A.getCharCode(F);switch(E){case 37:case 38:case 39:case 40:case 36:case 35:A.preventDefault(F);break;default:}}},handleKeyDown:function(J){if(this.enableKeys){var G=A.getCharCode(J),F=this.thumb,H=this.getXValue(),E=this.getYValue(),I=true;switch(G){case 37:H-=this.keyIncrement;break;case 38:E-=this.keyIncrement;break;case 39:H+=this.keyIncrement;break;case 40:E+=this.keyIncrement;break;case 36:H=F.leftConstraint;E=F.topConstraint;break;case 35:H=F.rightConstraint;E=F.bottomConstraint;break;default:I=false;}if(I){if(F._isRegion){this._setRegionValue(C.SOURCE_KEY_EVENT,H,E,true);}else{this._setValue(C.SOURCE_KEY_EVENT,(F._isHoriz?H:E),true);}A.stopEvent(J);}}},setStartSliderState:function(){this.setThumbCenterPoint();this.baselinePos=B(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion){if(this.deferredSetRegionValue){this._setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null;}else{this.setRegionValue(0,0,true,true,true);}}else{if(this.deferredSetValue){this._setValue.apply(this,this.deferredSetValue);this.deferredSetValue=null;}else{this.setValue(0,true,true,true);}}},setThumbCenterPoint:function(){var E=this.thumb.getEl();if(E){this.thumbCenterPoint={x:parseInt(E.offsetWidth/2,10),y:parseInt(E.offsetHeight/2,10)};}},lock:function(){this.thumb.lock();this.locked=true;},unlock:function(){this.thumb.unlock();this.locked=false;},thumbMouseUp:function(){this._mouseDown=false;if(!this.isLocked()&&!this.moveComplete){this.endMove();}},onMouseUp:function(){this._mouseDown=false;if(this.backgroundEnabled&&!this.isLocked()&&!this.moveComplete){this.endMove();}},getThumb:function(){return this.thumb;},focus:function(){this.valueChangeSource=C.SOURCE_UI_EVENT;var E=this.getEl();if(E.focus){try{E.focus();}catch(F){}}this.verifyOffset();return !this.isLocked();},onChange:function(E,F){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue();},getXValue:function(){return this.thumb.getXValue();},getYValue:function(){return this.thumb.getYValue();},setValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setValue.apply(this,E);},_setValue:function(I,L,G,H,E){var F=this.thumb,K,J;if(!F.available){this.deferredSetValue=arguments;return false;}if(this.isLocked()&&!H){return false;}if(isNaN(L)){return false;}if(F._isRegion){return false;}this._silent=E;this.valueChangeSource=I||C.SOURCE_SET_VALUE;F.lastOffset=[L,L];this.verifyOffset(true);this._slideStart();if(F._isHoriz){K=F.initPageX+L+this.thumbCenterPoint.x;this.moveThumb(K,F.initPageY,G);}else{J=F.initPageY+L+this.thumbCenterPoint.y;this.moveThumb(F.initPageX,J,G);}return true;},setRegionValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setRegionValue.apply(this,E);},_setRegionValue:function(F,J,H,I,G,K){var L=this.thumb,E,M;if(!L.available){this.deferredSetRegionValue=arguments;return false;}if(this.isLocked()&&!G){return false;}if(isNaN(J)){return false;}if(!L._isRegion){return false;}this._silent=K;this.valueChangeSource=F||C.SOURCE_SET_VALUE;L.lastOffset=[J,H];this.verifyOffset(true);this._slideStart();E=L.initPageX+J+this.thumbCenterPoint.x;M=L.initPageY+H+this.thumbCenterPoint.y;this.moveThumb(E,M,I);return true;},verifyOffset:function(F){var G=B(this.getEl()),E=this.thumb;if(!this.thumbCenterPoint||!this.thumbCenterPoint.x){this.setThumbCenterPoint();}if(G){if(G[0]!=this.baselinePos[0]||G[1]!=this.baselinePos[1]){this.setInitPosition();this.baselinePos=G;E.initPageX=this.initPageX+E.startOffset[0];E.initPageY=this.initPageY+E.startOffset[1];E.deltaSetXY=null;this.resetThumbConstraints();return false;}}return true;},moveThumb:function(K,J,I,G){var L=this.thumb,M=this,F,E,H;if(!L.available){return;}L.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);E=L.getTargetCoord(K,J);F=[Math.round(E.x),Math.round(E.y)];if(this.animate&&L._graduated&&!I){this.lock();this.curCoord=B(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){M.moveOneTick(F); +},this.tickPause);}else{if(this.animate&&C.ANIM_AVAIL&&!I){this.lock();H=new YAHOO.util.Motion(L.id,{points:{to:F}},this.animationDuration,YAHOO.util.Easing.easeOut);H.onComplete.subscribe(function(){M.unlock();if(!M._mouseDown){M.endMove();}});H.animate();}else{L.setDragElPos(K,J);if(!G&&!this._mouseDown){this.endMove();}}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart();this.fireEvent("slideStart");}this._sliding=true;}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var E=this._silent;this._sliding=false;this._silent=false;this.moveComplete=false;if(!E){this.onSlideEnd();this.fireEvent("slideEnd");}}},moveOneTick:function(F){var H=this.thumb,G=this,I=null,E,J;if(H._isRegion){I=this._getNextX(this.curCoord,F);E=(I!==null)?I[0]:this.curCoord[0];I=this._getNextY(this.curCoord,F);J=(I!==null)?I[1]:this.curCoord[1];I=E!==this.curCoord[0]||J!==this.curCoord[1]?[E,J]:null;}else{if(H._isHoriz){I=this._getNextX(this.curCoord,F);}else{I=this._getNextY(this.curCoord,F);}}if(I){this.curCoord=I;this.thumb.alignElWithMouse(H.getEl(),I[0]+this.thumbCenterPoint.x,I[1]+this.thumbCenterPoint.y);if(!(I[0]==F[0]&&I[1]==F[1])){setTimeout(function(){G.moveOneTick(F);},this.tickPause);}else{this.unlock();if(!this._mouseDown){this.endMove();}}}else{this.unlock();if(!this._mouseDown){this.endMove();}}},_getNextX:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[0]>F[0]){J=H.tickSize-this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]-J,E[1]);I=[G.x,G.y];}else{if(E[0]<F[0]){J=H.tickSize+this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]+J,E[1]);I=[G.x,G.y];}else{}}return I;},_getNextY:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[1]>F[1]){J=H.tickSize-this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]-J);I=[G.x,G.y];}else{if(E[1]<F[1]){J=H.tickSize+this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]+J);I=[G.x,G.y];}else{}}return I;},b4MouseDown:function(E){if(!this.backgroundEnabled){return false;}this.thumb.autoOffset();this.resetThumbConstraints();},onMouseDown:function(F){if(!this.backgroundEnabled||this.isLocked()){return false;}this._mouseDown=true;var E=A.getPageX(F),G=A.getPageY(F);this.focus();this._slideStart();this.moveThumb(E,G);},onDrag:function(F){if(this.backgroundEnabled&&!this.isLocked()){var E=A.getPageX(F),G=A.getPageY(F);this.moveThumb(E,G,true,true);this.fireEvents();}},endMove:function(){this.unlock();this.fireEvents();this.moveComplete=true;this._slideEnd();},resetThumbConstraints:function(){var E=this.thumb;E.setXConstraint(E.leftConstraint,E.rightConstraint,E.xTickSize);E.setYConstraint(E.topConstraint,E.bottomConstraint,E.xTickSize);},fireEvents:function(G){var F=this.thumb,I,H,E;if(!G){F.cachePosition();}if(!this.isLocked()){if(F._isRegion){I=F.getXValue();H=F.getYValue();if(I!=this.previousX||H!=this.previousY){if(!this._silent){this.onChange(I,H);this.fireEvent("change",{x:I,y:H});}}this.previousX=I;this.previousY=H;}else{E=F.getValue();if(E!=this.previousVal){if(!this._silent){this.onChange(E);this.fireEvent("change",E);}}this.previousVal=E;}}},toString:function(){return("Slider ("+this.type+") "+this.id);}});YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);YAHOO.widget.Slider=C;})();YAHOO.widget.SliderThumb=function(G,B,E,D,A,F,C){if(G){YAHOO.widget.SliderThumb.superclass.constructor.call(this,G,B);this.parentElId=B;}this.isTarget=false;this.tickSize=C;this.maintainOffset=true;this.initSlider(E,D,A,F,C);this.scroll=false;};YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:true,_isHoriz:false,_prevVal:0,_graduated:false,getOffsetFromParent0:function(C){var A=YAHOO.util.Dom.getXY(this.getEl()),B=C||YAHOO.util.Dom.getXY(this.parentElId);return[(A[0]-B[0]),(A[1]-B[1])];},getOffsetFromParent:function(H){var A=this.getEl(),E,I,F,B,K,D,C,J,G;if(!this.deltaOffset){I=YAHOO.util.Dom.getXY(A);F=H||YAHOO.util.Dom.getXY(this.parentElId);E=[(I[0]-F[0]),(I[1]-F[1])];B=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);K=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);D=B-E[0];C=K-E[1];if(isNaN(D)||isNaN(C)){}else{this.deltaOffset=[D,C];}}else{J=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);G=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);E=[J+this.deltaOffset[0],G+this.deltaOffset[1]];}return E;},initSlider:function(D,C,A,E,B){this.initLeft=D;this.initRight=C;this.initUp=A;this.initDown=E;this.setXConstraint(D,C,B);this.setYConstraint(A,E,B);if(B&&B>1){this._graduated=true;}this._isHoriz=(D||C);this._isVert=(A||E);this._isRegion=(this._isHoriz&&this._isVert);},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this);this.tickSize=0;this._graduated=false;},getValue:function(){return(this._isHoriz)?this.getXValue():this.getYValue();},getXValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[0])){this.lastOffset=A;return(A[0]-this.startOffset[0]);}else{return(this.lastOffset[0]-this.startOffset[0]);}},getYValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[1])){this.lastOffset=A;return(A[1]-this.startOffset[1]);}else{return(this.lastOffset[1]-this.startOffset[1]);}},toString:function(){return"SliderThumb "+this.id;},onChange:function(A,B){}});(function(){var A=YAHOO.util.Event,B=YAHOO.widget;function C(I,F,H,D){var G=this,J={min:false,max:false},E,K;this.minSlider=I;this.maxSlider=F;this.activeSlider=I;this.isHoriz=I.thumb._isHoriz;E=this.minSlider.thumb.onMouseDown;K=this.maxSlider.thumb.onMouseDown;this.minSlider.thumb.onMouseDown=function(){G.activeSlider=G.minSlider;E.apply(this,arguments);};this.maxSlider.thumb.onMouseDown=function(){G.activeSlider=G.maxSlider;K.apply(this,arguments);};this.minSlider.thumb.onAvailable=function(){I.setStartSliderState();J.min=true;if(J.max){G.fireEvent("ready",G);}};this.maxSlider.thumb.onAvailable=function(){F.setStartSliderState();J.max=true;if(J.min){G.fireEvent("ready",G);}};I.onMouseDown=F.onMouseDown=function(L){return this.backgroundEnabled&&G._handleMouseDown(L); +};I.onDrag=F.onDrag=function(L){G._handleDrag(L);};I.onMouseUp=F.onMouseUp=function(L){G._handleMouseUp(L);};I._bindKeyEvents=function(){G._bindKeyEvents(this);};F._bindKeyEvents=function(){};I.subscribe("change",this._handleMinChange,I,this);I.subscribe("slideStart",this._handleSlideStart,I,this);I.subscribe("slideEnd",this._handleSlideEnd,I,this);F.subscribe("change",this._handleMaxChange,F,this);F.subscribe("slideStart",this._handleSlideStart,F,this);F.subscribe("slideEnd",this._handleSlideEnd,F,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);D=YAHOO.lang.isArray(D)?D:[0,H];D[0]=Math.min(Math.max(parseInt(D[0],10)|0,0),H);D[1]=Math.max(Math.min(parseInt(D[1],10)|0,H),0);if(D[0]>D[1]){D.splice(0,2,D[1],D[0]);}this.minVal=D[0];this.maxVal=D[1];this.minSlider.setValue(this.minVal,true,true,true);this.maxSlider.setValue(this.maxVal,true,true,true);}C.prototype={minVal:-1,maxVal:-1,minRange:0,_handleSlideStart:function(E,D){this.fireEvent("slideStart",D);},_handleSlideEnd:function(E,D){this.fireEvent("slideEnd",D);},_handleDrag:function(D){B.Slider.prototype.onDrag.call(this.activeSlider,D);},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue();},_handleMaxChange:function(){this.activeSlider=this.maxSlider;this.updateValue();},_bindKeyEvents:function(D){A.on(D.id,"keydown",this._handleKeyDown,this,true);A.on(D.id,"keypress",this._handleKeyPress,this,true);},_handleKeyDown:function(D){this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);},_handleKeyPress:function(D){this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);},setValues:function(H,K,I,E,J){var F=this.minSlider,M=this.maxSlider,D=F.thumb,L=M.thumb,N=this,G={min:false,max:false};if(D._isHoriz){D.setXConstraint(D.leftConstraint,L.rightConstraint,D.tickSize);L.setXConstraint(D.leftConstraint,L.rightConstraint,L.tickSize);}else{D.setYConstraint(D.topConstraint,L.bottomConstraint,D.tickSize);L.setYConstraint(D.topConstraint,L.bottomConstraint,L.tickSize);}this._oneTimeCallback(F,"slideEnd",function(){G.min=true;if(G.max){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});this._oneTimeCallback(M,"slideEnd",function(){G.max=true;if(G.min){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});F.setValue(H,I,E,false);M.setValue(K,I,E,false);},setMinValue:function(F,H,I,E){var G=this.minSlider,D=this;this.activeSlider=G;D=this;this._oneTimeCallback(G,"slideEnd",function(){D.updateValue(E);setTimeout(function(){D._cleanEvent(G,"slideEnd");},0);});G.setValue(F,H,I);},setMaxValue:function(D,H,I,F){var G=this.maxSlider,E=this;this.activeSlider=G;this._oneTimeCallback(G,"slideEnd",function(){E.updateValue(F);setTimeout(function(){E._cleanEvent(G,"slideEnd");},0);});G.setValue(D,H,I);},updateValue:function(J){var E=this.minSlider.getValue(),K=this.maxSlider.getValue(),F=false,D,M,H,I,L,G;if(E!=this.minVal||K!=this.maxVal){F=true;D=this.minSlider.thumb;M=this.maxSlider.thumb;H=this.isHoriz?"x":"y";G=this.minSlider.thumbCenterPoint[H]+this.maxSlider.thumbCenterPoint[H];I=Math.max(K-G-this.minRange,0);L=Math.min(-E-G-this.minRange,0);if(this.isHoriz){I=Math.min(I,M.rightConstraint);D.setXConstraint(D.leftConstraint,I,D.tickSize);M.setXConstraint(L,M.rightConstraint,M.tickSize);}else{I=Math.min(I,M.bottomConstraint);D.setYConstraint(D.leftConstraint,I,D.tickSize);M.setYConstraint(L,M.bottomConstraint,M.tickSize);}}this.minVal=E;this.maxVal=K;if(F&&!J){this.fireEvent("change",this);}},selectActiveSlider:function(H){var E=this.minSlider,D=this.maxSlider,J=E.isLocked()||!E.backgroundEnabled,G=D.isLocked()||!E.backgroundEnabled,F=YAHOO.util.Event,I;if(J||G){this.activeSlider=J?D:E;}else{if(this.isHoriz){I=F.getPageX(H)-E.thumb.initPageX-E.thumbCenterPoint.x;}else{I=F.getPageY(H)-E.thumb.initPageY-E.thumbCenterPoint.y;}this.activeSlider=I*2>D.getValue()+E.getValue()?D:E;}},_handleMouseDown:function(D){if(!D._handled){D._handled=true;this.selectActiveSlider(D);return B.Slider.prototype.onMouseDown.call(this.activeSlider,D);}else{return false;}},_handleMouseUp:function(D){B.Slider.prototype.onMouseUp.apply(this.activeSlider,arguments);},_oneTimeCallback:function(F,D,E){F.subscribe(D,function(){F.unsubscribe(D,arguments.callee);E.apply({},[].slice.apply(arguments));});},_cleanEvent:function(K,E){var J,I,D,G,H,F;if(K.__yui_events&&K.events[E]){for(I=K.__yui_events.length;I>=0;--I){if(K.__yui_events[I].type===E){J=K.__yui_events[I];break;}}if(J){H=J.subscribers;F=[];G=0;for(I=0,D=H.length;I<D;++I){if(H[I]){F[G++]=H[I];}}J.subscribers=F;}}}};YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);B.Slider.getHorizDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,G,0,0,F),E=new B.SliderThumb(K,H,0,G,0,0,F);return new C(new B.Slider(H,H,I,"horiz"),new B.Slider(H,H,E,"horiz"),G,D);};B.Slider.getVertDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,0,0,G,F),E=new B.SliderThumb(K,H,0,0,0,G,F);return new B.DualSlider(new B.Slider(H,H,I,"vert"),new B.Slider(H,H,E,"vert"),G,D);};YAHOO.widget.DualSlider=C;})();YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.7.0",build:"1796"});/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,setter:null,getter:null,validator:null,getValue:function(){var A=this.value;if(this.getter){A=this.getter.call(this.owner,this.name);}return A;},setValue:function(F,B){var E,A=this.owner,C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.setter){F=this.setter.call(A,F,this.name);if(F===undefined){}}if(this.method){this.method.call(A,F,this.name);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};if(C){this._written=false;}this._initialConfig=this._initialConfig||{};for(var A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig,true);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return null;}return B.getValue();},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var C=[],B;for(B in this._configs){if(A.hasOwnProperty(this._configs,B)&&!A.isUndefined(this._configs[B])){C[C.length]=B;}}return C;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.util.AttributeProvider;var A=function(D,E){this.init.apply(this,arguments);};A.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true,"change":true};A.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(F,D){var E=this.get("element");if(E){E[D]=F;}},DEFAULT_HTML_GETTER:function(D){var E=this.get("element"),F;if(E){F=E[D];}return F;},appendChild:function(D){D=D.get?D.get("element"):D;return this.get("element").appendChild(D);},getElementsByTagName:function(D){return this.get("element").getElementsByTagName(D);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(D,E){D=D.get?D.get("element"):D;E=(E&&E.get)?E.get("element"):E;return this.get("element").insertBefore(D,E);},removeChild:function(D){D=D.get?D.get("element"):D;return this.get("element").removeChild(D);},replaceChild:function(D,E){D=D.get?D.get("element"):D;E=E.get?E.get("element"):E;return this.get("element").replaceChild(D,E);},initAttributes:function(D){},addListener:function(H,G,I,F){var E=this.get("element")||this.get("id");F=F||this;var D=this;if(!this._events[H]){if(E&&this.DOM_EVENTS[H]){YAHOO.util.Event.addListener(E,H,function(J){if(J.srcElement&&!J.target){J.target=J.srcElement;}D.fireEvent(H,J);},I,F);}this.createEvent(H,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(E,D){return this.unsubscribe.apply(this,arguments);},addClass:function(D){B.addClass(this.get("element"),D);},getElementsByClassName:function(E,D){return B.getElementsByClassName(E,D,this.get("element"));},hasClass:function(D){return B.hasClass(this.get("element"),D);},removeClass:function(D){return B.removeClass(this.get("element"),D);},replaceClass:function(E,D){return B.replaceClass(this.get("element"),E,D);},setStyle:function(E,D){return B.setStyle(this.get("element"),E,D);},getStyle:function(D){return B.getStyle(this.get("element"),D);},fireQueue:function(){var E=this._queue;for(var F=0,D=E.length;F<D;++F){this[E[F][0]].apply(this,E[F][1]);}},appendTo:function(E,F){E=(E.get)?E.get("element"):B.get(E);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:E}); +F=(F&&F.get)?F.get("element"):B.get(F);var D=this.get("element");if(!D){return false;}if(!E){return false;}if(D.parent!=E){if(F){E.insertBefore(D,F);}else{E.appendChild(D);}}this.fireEvent("appendTo",{type:"appendTo",target:E});return D;},get:function(D){var F=this._configs||{},E=F.element;if(E&&!F[D]&&!YAHOO.lang.isUndefined(E.value[D])){this._setHTMLAttrConfig(D);}return C.prototype.get.call(this,D);},setAttributes:function(J,G){var E={},H=this._configOrder;for(var I=0,D=H.length;I<D;++I){if(J[H[I]]!==undefined){E[H[I]]=true;this.set(H[I],J[H[I]],G);}}for(var F in J){if(J.hasOwnProperty(F)&&!E[F]){this.set(F,J[F],G);}}},set:function(E,G,D){var F=this.get("element");if(!F){this._queue[this._queue.length]=["set",arguments];if(this._configs[E]){this._configs[E].value=G;}return;}if(!this._configs[E]&&!YAHOO.lang.isUndefined(F[E])){this._setHTMLAttrConfig(E);}return C.prototype.set.apply(this,arguments);},setAttributeConfig:function(D,E,F){this._configOrder.push(D);C.prototype.setAttributeConfig.apply(this,arguments);},createEvent:function(E,D){this._events[E]=true;return C.prototype.createEvent.apply(this,arguments);},init:function(E,D){this._initElement(E,D);},destroy:function(){var D=this.get("element");YAHOO.util.Event.purgeElement(D,true);this.unsubscribeAll();if(D&&D.parentNode){D.parentNode.removeChild(D);}this._queue=[];this._events={};this._configs={};this._configOrder=[];},_initElement:function(F,E){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];E=E||{};E.element=E.element||F||null;var H=false;var D=A.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var G in D){if(D.hasOwnProperty(G)){this.DOM_EVENTS[G]=D[G];}}if(typeof E.element==="string"){this._setHTMLAttrConfig("id",{value:E.element});}if(B.get(E.element)){H=true;this._initHTMLElement(E);this._initContent(E);}YAHOO.util.Event.onAvailable(E.element,function(){if(!H){this._initHTMLElement(E);}this.fireEvent("available",{type:"available",target:B.get(E.element)});},this,true);YAHOO.util.Event.onContentReady(E.element,function(){if(!H){this._initContent(E);}this.fireEvent("contentReady",{type:"contentReady",target:B.get(E.element)});},this,true);},_initHTMLElement:function(D){this.setAttributeConfig("element",{value:B.get(D.element),readOnly:true});},_initContent:function(D){this.initAttributes(D);this.setAttributes(D,true);this.fireQueue();},_setHTMLAttrConfig:function(D,F){var E=this.get("element");F=F||{};F.name=D;F.setter=F.setter||this.DEFAULT_HTML_SETTER;F.getter=F.getter||this.DEFAULT_HTML_GETTER;F.value=F.value||E[D];this._configs[D]=new YAHOO.util.Attribute(F,this);}};YAHOO.augment(A,C);YAHOO.util.Element=A;})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1796"});/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +YAHOO.util.Color=function(){var A="0",B=YAHOO.lang.isArray,C=YAHOO.lang.isNumber;return{real2dec:function(D){return Math.min(255,Math.round(D*256));},hsv2rgb:function(H,O,M){if(B(H)){return this.hsv2rgb.call(this,H[0],H[1],H[2]);}var D,I,L,G=Math.floor((H/60)%6),J=(H/60)-G,F=M*(1-O),E=M*(1-J*O),N=M*(1-(1-J)*O),K;switch(G){case 0:D=M;I=N;L=F;break;case 1:D=E;I=M;L=F;break;case 2:D=F;I=M;L=N;break;case 3:D=F;I=E;L=M;break;case 4:D=N;I=F;L=M;break;case 5:D=M;I=F;L=E;break;}K=this.real2dec;return[K(D),K(I),K(L)];},rgb2hsv:function(D,H,I){if(B(D)){return this.rgb2hsv.apply(this,D);}D/=255;H/=255;I/=255;var G,L,E=Math.min(Math.min(D,H),I),J=Math.max(Math.max(D,H),I),K=J-E,F;switch(J){case E:G=0;break;case D:G=60*(H-I)/K;if(H<I){G+=360;}break;case H:G=(60*(I-D)/K)+120;break;case I:G=(60*(D-H)/K)+240;break;}L=(J===0)?0:1-(E/J);F=[Math.round(G),L,J];return F;},rgb2hex:function(F,E,D){if(B(F)){return this.rgb2hex.apply(this,F);}var G=this.dec2hex;return G(F)+G(E)+G(D);},dec2hex:function(D){D=parseInt(D,10)|0;D=(D>255||D<0)?0:D;return(A+D.toString(16)).slice(-2).toUpperCase();},hex2dec:function(D){return parseInt(D,16);},hex2rgb:function(D){var E=this.hex2dec;return[E(D.slice(0,2)),E(D.slice(2,4)),E(D.slice(4,6))];},websafe:function(F,E,D){if(B(F)){return this.websafe.apply(this,F);}var G=function(H){if(C(H)){H=Math.min(Math.max(0,H),255);var I,J;for(I=0;I<256;I=I+51){J=I+51;if(H>=I&&H<=J){return(H-I>25)?J:I;}}}return H;};return[G(F),G(E),G(D)];}};}();(function(){var J=0,F=YAHOO.util,C=YAHOO.lang,D=YAHOO.widget.Slider,B=F.Color,E=F.Dom,I=F.Event,A=C.substitute,H="yui-picker";function G(L,K){J=J+1;K=K||{};if(arguments.length===1&&!YAHOO.lang.isString(L)&&!L.nodeName){K=L;L=K.element||null;}if(!L&&!K.element){L=this._createHostElement(K);}G.superclass.constructor.call(this,L,K);this.initPicker();}YAHOO.extend(G,YAHOO.util.Element,{ID:{R:H+"-r",R_HEX:H+"-rhex",G:H+"-g",G_HEX:H+"-ghex",B:H+"-b",B_HEX:H+"-bhex",H:H+"-h",S:H+"-s",V:H+"-v",PICKER_BG:H+"-bg",PICKER_THUMB:H+"-thumb",HUE_BG:H+"-hue-bg",HUE_THUMB:H+"-hue-thumb",HEX:H+"-hex",SWATCH:H+"-swatch",WEBSAFE_SWATCH:H+"-websafe-swatch",CONTROLS:H+"-controls",RGB_CONTROLS:H+"-rgb-controls",HSV_CONTROLS:H+"-hsv-controls",HEX_CONTROLS:H+"-hex-controls",HEX_SUMMARY:H+"-hex-summary",CONTROLS_LABEL:H+"-controls-label"},TXT:{ILLEGAL_HEX:"Illegal hex value entered",SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"\u00B0",PERCENT:"%"},IMAGE:{PICKER_THUMB:"../../build/colorpicker/assets/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"},DEFAULT:{PICKER_SIZE:180},OPT:{HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv",RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcontrols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"},skipAnim:true,_createHostElement:function(){var K=document.createElement("div");if(this.CSS.BASE){K.className=this.CSS.BASE;}return K;},_updateHueSlider:function(){var K=this.get(this.OPT.PICKER_SIZE),L=this.get(this.OPT.HUE);L=K-Math.round(L/360*K);if(L===K){L=0;}this.hueSlider.setValue(L,this.skipAnim);},_updatePickerSlider:function(){var L=this.get(this.OPT.PICKER_SIZE),M=this.get(this.OPT.SATURATION),K=this.get(this.OPT.VALUE);M=Math.round(M*L/100);K=Math.round(L-(K*L/100));this.pickerSlider.setRegionValue(M,K,this.skipAnim);},_updateSliders:function(){this._updateHueSlider();this._updatePickerSlider();},setValue:function(L,K){K=(K)||false;this.set(this.OPT.RGB,L,K);this._updateSliders();},hueSlider:null,pickerSlider:null,_getH:function(){var K=this.get(this.OPT.PICKER_SIZE),L=(K-this.hueSlider.getValue())/K;L=Math.round(L*360);return(L===360)?0:L;},_getS:function(){return this.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE);},_getV:function(){var K=this.get(this.OPT.PICKER_SIZE);return(K-this.pickerSlider.getYValue())/K;},_updateSwatch:function(){var M=this.get(this.OPT.RGB),O=this.get(this.OPT.WEBSAFE),N=this.getElement(this.ID.SWATCH),L=M.join(","),K=this.get(this.OPT.TXT);E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CURRENT_COLOR,{"rgb":"#"+this.get(this.OPT.HEX)});N=this.getElement(this.ID.WEBSAFE_SWATCH);L=O.join(",");E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CLOSEST_WEBSAFE,{"rgb":"#"+B.rgb2hex(O)});},_getValuesFromSliders:function(){this.set(this.OPT.RGB,B.hsv2rgb(this._getH(),this._getS(),this._getV()));},_updateFormFields:function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).value=this.get(this.OPT.SATURATION);this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML=B.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=B.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=B.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX);},_onHueSliderChange:function(N){var L=this._getH(),K=B.hsv2rgb(L,1,1),M="rgb("+K.join(",")+")";this.set(this.OPT.HUE,L,true);E.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",M);if(this.hueSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();}this._updateFormFields();this._updateSwatch();},_onPickerSliderChange:function(M){var L=this._getS(),K=this._getV();this.set(this.OPT.SATURATION,Math.round(L*100),true);this.set(this.OPT.VALUE,Math.round(K*100),true);if(this.pickerSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders(); +}this._updateFormFields();this._updateSwatch();},_getCommand:function(K){var L=I.getCharCode(K);if(L===38){return 3;}else{if(L===13){return 6;}else{if(L===40){return 4;}else{if(L>=48&&L<=57){return 1;}else{if(L>=97&&L<=102){return 2;}else{if(L>=65&&L<=70){return 2;}else{if("8, 9, 13, 27, 37, 39".indexOf(L)>-1||K.ctrlKey||K.metaKey){return 5;}else{return 0;}}}}}}}},_useFieldValue:function(L,K,N){var M=K.value;if(N!==this.OPT.HEX){M=parseInt(M,10);}if(M!==this.get(N)){this.set(N,M);}},_rgbFieldKeypress:function(M,K,O){var N=this._getCommand(M),L=(M.shiftKey)?10:1;switch(N){case 6:this._useFieldValue.apply(this,arguments);break;case 3:this.set(O,Math.min(this.get(O)+L,255));this._updateFormFields();break;case 4:this.set(O,Math.max(this.get(O)-L,0));this._updateFormFields();break;default:}},_hexFieldKeypress:function(L,K,N){var M=this._getCommand(L);if(M===6){this._useFieldValue.apply(this,arguments);}},_hexOnly:function(L,K){var M=this._getCommand(L);switch(M){case 6:case 5:case 1:break;case 2:if(K!==true){break;}default:I.stopEvent(L);return false;}},_numbersOnly:function(K){return this._hexOnly(K,true);},getElement:function(K){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[K]];},_createElements:function(){var N,M,P,O,L,K=this.get(this.OPT.IDS),Q=this.get(this.OPT.TXT),S=this.get(this.OPT.IMAGES),R=function(U,V){var W=document.createElement(U);if(V){C.augmentObject(W,V,true);}return W;},T=function(U,V){var W=C.merge({autocomplete:"off",value:"0",size:3,maxlength:3},V);W.name=W.id;return new R(U,W);};L=this.get("element");N=new R("div",{id:K[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.PICKER_THUMB],className:"yui-picker-thumb"});P=new R("img",{src:S.PICKER_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"});P=new R("img",{src:S.HUE_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.CONTROLS],className:"yui-picker-controls"});L.appendChild(N);L=N;N=new R("div",{className:"hd"});M=new R("a",{id:K[this.ID.CONTROLS_LABEL],href:"#"});N.appendChild(M);L.appendChild(N);N=new R("div",{className:"bd"});L.appendChild(N);L=N;N=new R("ul",{id:K[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.R+" "));O=new T("input",{id:K[this.ID.R],className:"yui-picker-r"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.G+" "));O=new T("input",{id:K[this.ID.G],className:"yui-picker-g"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.B+" "));O=new T("input",{id:K[this.ID.B],className:"yui-picker-b"});M.appendChild(O);N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.H+" "));O=new T("input",{id:K[this.ID.H],className:"yui-picker-h"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.DEG));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.S+" "));O=new T("input",{id:K[this.ID.S],className:"yui-picker-s"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.V+" "));O=new T("input",{id:K[this.ID.V],className:"yui-picker-v"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});M=new R("li",{id:K[this.ID.R_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.G_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.B_HEX]});N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});N.appendChild(document.createTextNode(Q.HEX+" "));M=new T("input",{id:K[this.ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});N.appendChild(M);L.appendChild(N);L=this.get("element");N=new R("div",{id:K[this.ID.SWATCH],className:"yui-picker-swatch"});L.appendChild(N);N=new R("div",{id:K[this.ID.WEBSAFE_SWATCH],className:"yui-picker-websafe-swatch"});L.appendChild(N);},_attachRGBHSV:function(L,K){I.on(this.getElement(L),"keydown",function(N,M){M._rgbFieldKeypress(N,this,K);},this);I.on(this.getElement(L),"keypress",this._numbersOnly,this,true);I.on(this.getElement(L),"blur",function(N,M){M._useFieldValue(N,this,K);},this);},_updateRGB:function(){var K=[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)];this.set(this.OPT.RGB,K);this._updateSliders();},_initElements:function(){var O=this.OPT,N=this.get(O.IDS),L=this.get(O.ELEMENTS),K,M,P;for(K in this.ID){if(C.hasOwnProperty(this.ID,K)){N[this.ID[K]]=N[K];}}M=E.get(N[this.ID.PICKER_BG]);if(!M){this._createElements();}else{}for(K in N){if(C.hasOwnProperty(N,K)){M=E.get(N[K]);P=E.generateId(M);N[K]=P;N[N[K]]=P;L[P]=M;}}},initPicker:function(){this._initSliders();this._bindUI();this.syncUI(true);},_initSliders:function(){var K=this.ID,L=this.get(this.OPT.PICKER_SIZE);this.hueSlider=D.getVertSlider(this.getElement(K.HUE_BG),this.getElement(K.HUE_THUMB),0,L);this.pickerSlider=D.getSliderRegion(this.getElement(K.PICKER_BG),this.getElement(K.PICKER_THUMB),0,L,0,L);this.set(this.OPT.ANIMATE,this.get(this.OPT.ANIMATE));},_bindUI:function(){var K=this.ID,L=this.OPT;this.hueSlider.subscribe("change",this._onHueSliderChange,this,true);this.pickerSlider.subscribe("change",this._onPickerSliderChange,this,true);I.on(this.getElement(K.WEBSAFE_SWATCH),"click",function(M){this.setValue(this.get(L.WEBSAFE));},this,true);I.on(this.getElement(K.CONTROLS_LABEL),"click",function(M){this.set(L.SHOW_CONTROLS,!this.get(L.SHOW_CONTROLS));I.preventDefault(M);},this,true);this._attachRGBHSV(K.R,L.RED);this._attachRGBHSV(K.G,L.GREEN);this._attachRGBHSV(K.B,L.BLUE);this._attachRGBHSV(K.H,L.HUE); +this._attachRGBHSV(K.S,L.SATURATION);this._attachRGBHSV(K.V,L.VALUE);I.on(this.getElement(K.HEX),"keydown",function(N,M){M._hexFieldKeypress(N,this,L.HEX);},this);I.on(this.getElement(this.ID.HEX),"keypress",this._hexOnly,this,true);I.on(this.getElement(this.ID.HEX),"blur",function(N,M){M._useFieldValue(N,this,L.HEX);},this);},syncUI:function(K){this.skipAnim=K;this._updateRGB();this.skipAnim=false;},_updateRGBFromHSV:function(){var L=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100],K=B.hsv2rgb(L);this.set(this.OPT.RGB,K);this._updateSliders();},_updateHex:function(){var N=this.get(this.OPT.HEX),K=N.length,O,M,L;if(K===3){O=N.split("");for(M=0;M<K;M=M+1){O[M]=O[M]+O[M];}N=O.join("");}if(N.length!==6){return false;}L=B.hex2rgb(N);this.setValue(L);},_hideShowEl:function(M,K){var L=(C.isString(M)?this.getElement(M):M);E.setStyle(L,"display",(K)?"":"none");},initAttributes:function(K){K=K||{};G.superclass.initAttributes.call(this,K);this.setAttributeConfig(this.OPT.PICKER_SIZE,{value:K.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:K.hue||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:K.saturation||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:C.isNumber(K.value)?K.value:100,validator:C.isNumber});this.setAttributeConfig(this.OPT.RED,{value:C.isNumber(K.red)?K.red:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:C.isNumber(K.green)?K.green:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:C.isNumber(K.blue)?K.blue:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:K.hex||"FFFFFF",validator:C.isString});this.setAttributeConfig(this.OPT.RGB,{value:K.rgb||[255,255,255],method:function(O){this.set(this.OPT.RED,O[0],true);this.set(this.OPT.GREEN,O[1],true);this.set(this.OPT.BLUE,O[2],true);var Q=B.websafe(O),P=B.rgb2hex(O),N=B.rgb2hsv(O);this.set(this.OPT.WEBSAFE,Q,true);this.set(this.OPT.HEX,P,true);if(N[1]){this.set(this.OPT.HUE,N[0],true);}this.set(this.OPT.SATURATION,Math.round(N[1]*100),true);this.set(this.OPT.VALUE,Math.round(N[2]*100),true);},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(N){if(N){N.showEvent.subscribe(function(){this.pickerSlider.focus();},this,true);}}});this.setAttributeConfig(this.OPT.WEBSAFE,{value:K.websafe||[255,255,255]});var M=K.ids||C.merge({},this.ID),L;if(!K.ids&&J>1){for(L in M){if(C.hasOwnProperty(M,L)){M[L]=M[L]+J;}}}this.setAttributeConfig(this.OPT.IDS,{value:M,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:K.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:K.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:C.isBoolean(K.showcontrols)?K.showcontrols:true,method:function(N){var O=E.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0];this._hideShowEl(O,N);this.getElement(this.ID.CONTROLS_LABEL).innerHTML=(N)?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS;}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:C.isBoolean(K.showrgbcontrols)?K.showrgbcontrols:true,method:function(N){this._hideShowEl(this.ID.RGB_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:C.isBoolean(K.showhsvcontrols)?K.showhsvcontrols:false,method:function(N){this._hideShowEl(this.ID.HSV_CONTROLS,N);if(N&&this.get(this.OPT.SHOW_HEX_SUMMARY)){this.set(this.OPT.SHOW_HEX_SUMMARY,false);}}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:C.isBoolean(K.showhexcontrols)?K.showhexcontrols:false,method:function(N){this._hideShowEl(this.ID.HEX_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:C.isBoolean(K.showwebsafe)?K.showwebsafe:true,method:function(N){this._hideShowEl(this.ID.WEBSAFE_SWATCH,N);}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:C.isBoolean(K.showhexsummary)?K.showhexsummary:true,method:function(N){this._hideShowEl(this.ID.HEX_SUMMARY,N);if(N&&this.get(this.OPT.SHOW_HSV_CONTROLS)){this.set(this.OPT.SHOW_HSV_CONTROLS,false);}}});this.setAttributeConfig(this.OPT.ANIMATE,{value:C.isBoolean(K.animate)?K.animate:true,method:function(N){if(this.pickerSlider){this.pickerSlider.animate=N;this.hueSlider.animate=N;}}});this.on(this.OPT.HUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.SATURATION+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.VALUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.RED+"Change",this._updateRGB,this,true);this.on(this.OPT.GREEN+"Change",this._updateRGB,this,true);this.on(this.OPT.BLUE+"Change",this._updateRGB,this,true);this.on(this.OPT.HEX+"Change",this._updateHex,this,true);this._initElements();}});YAHOO.widget.ColorPicker=G;})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.7.0",build:"1796"}); + +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if("style" in D){B.Dom.setStyle(D,C,F+E);}else{if(C in D){D[C]=F;}}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)]; +}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})(); +/* +TERMS OF USE - EASING EQUATIONS +Open source under the BSD License. +Copyright 2001 Robert Penner All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]); +}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"}); diff --git a/plugins/wsc/dialogs/ciframe.html b/plugins/wsc/dialogs/ciframe.html new file mode 100644 index 0000000..e174702 --- /dev/null +++ b/plugins/wsc/dialogs/ciframe.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html> +<head> + <title></title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <script type="text/javascript"> + +function gup( name ) +{ + name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ; + var regexS = '[\\?&]' + name + '=([^&#]*)' ; + var regex = new RegExp( regexS ) ; + var results = regex.exec( window.location.href ) ; + + if ( results ) + return results[ 1 ] ; + else + return '' ; +} + +var interval; + +function sendData2Master() +{ + var destination = window.parent.parent ; + try + { + if ( destination.XDTMaster ) + { + var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ; + window.clearInterval( interval ) ; + } + } + catch (e) {} +} + +function onLoad() +{ + interval = window.setInterval( sendData2Master, 100 ); +} + +</script> +</head> +<body onload="onLoad()"><p></p></body> +</html> diff --git a/plugins/wsc/dialogs/tmpFrameset.html b/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000..105f8b2 --- /dev/null +++ b/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> +<!-- +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html> +<head> + <title></title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <script type="text/javascript"> + +function doLoadScript( url ) +{ + if ( !url ) + return false ; + + var s = document.createElement( "script" ) ; + s.type = "text/javascript" ; + s.src = url ; + document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ; + + return true ; +} + +var opener; +function tryLoad() +{ + opener = window.parent; + + // get access to global parameters + var oParams = window.opener.oldFramesetPageParams; + + // make frameset rows string prepare + var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ; + document.getElementById( 'itFrameset' ).rows = sFramesetRows ; + + // dynamic including init frames and crossdomain transport code + // from config sproxy_js_frameset url + var addScriptUrl = oParams.sproxy_js_frameset ; + doLoadScript( addScriptUrl ) ; +} + + </script> +</head> + +<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0"> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame> + <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame> +</frameset> +</html> diff --git a/plugins/wsc/dialogs/wsc.css b/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000..0764cd5 --- /dev/null +++ b/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html,body{background-color:transparent;margin:0;padding:0;}body{padding:10px;}body,td,input,select,textarea{font-size:11px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;}.midtext{padding:0;margin:10px;}.midtext p{padding:0;margin:10px;}.Button{border:#737357 1px solid;color:#3b3b1f;background-color:#c7c78f;}.PopupTabArea{color:#737357;background-color:#e3e3c7;}.PopupTitleBorder{border-bottom:#d5d59d 1px solid;}.PopupTabEmptyArea{padding-left:10px;border-bottom:#d5d59d 1px solid;}.PopupTab,.PopupTabSelected{border-right:#d5d59d 1px solid;border-top:#d5d59d 1px solid;border-left:#d5d59d 1px solid;padding:3px 5px 3px 5px;color:#737357;}.PopupTab{margin-top:1px;border-bottom:#d5d59d 1px solid;cursor:pointer;}.PopupTabSelected{font-weight:bold;cursor:default;padding-top:4px;border-bottom:#f1f1e3 1px solid;background-color:#f1f1e3;} diff --git a/plugins/wsc/dialogs/wsc.js b/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000..9f1f950 --- /dev/null +++ b/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add('checkspell',function(a){var b=CKEDITOR.tools.getNextNumber(),c='cke_frame_'+b,d='cke_data_'+b,e='cke_error_'+b,f,g=document.location.protocol||'http:',h=a.lang.spellCheck.notAvailable,i='<textarea style="display: none" id="'+d+'"'+' rows="10"'+' cols="40">'+' </textarea><div'+' id="'+e+'"'+' style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;">'+'</div><iframe'+' src=""'+' style="width:100%;background-color:#f1f1e3;"'+' frameborder="0"'+' name="'+c+'"'+' id="'+c+'"'+' allowtransparency="1">'+'</iframe>',j=a.config.wsc_customLoaderScript||g+'//loader.spellchecker.net/sproxy_fck/sproxy.php'+'?plugin=fck2'+'&customerid='+a.config.wsc_customerId+'&cmd=script&doc=wsc&schema=22';if(a.config.wsc_customLoaderScript)h+='<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">'+a.lang.spellCheck.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+'</p>';function k(m,n){var o=0;return function(){if(typeof window.doSpell=='function'){if(typeof f!='undefined')window.clearInterval(f);l(m);}else if(o++==180)window._cancelOnError(n);};};window._cancelOnError=function(m){if(typeof window.WSC_Error=='undefined'){CKEDITOR.document.getById(c).setStyle('display','none');var n=CKEDITOR.document.getById(e);n.setStyle('display','block');n.setHtml(m||a.lang.spellCheck.notAvailable);}};function l(m){var n=new window._SP_FCK_LangCompare(),o=CKEDITOR.getUrl(a.plugins.wsc.path+'dialogs/'),p=o+'tmpFrameset.html';window.gFCKPluginName='wsc';n.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:d,lang:a.config.wsc_lang||n.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang||n.getSPLangCode(a.langCode),winType:c,onCancel:function(){m.hide();},onFinish:function(q){a.focus();m.getParentEditor().setData(q.value);m.hide();},staticFrame:p,framesetPath:p,iframePath:o+'ciframe.html',schemaURI:o+'wsc.css',userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(','),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(e).setStyle('display','none');CKEDITOR.document.getById(c).setStyle('display','block');};return{title:a.config.wsc_dialogTitle||a.lang.spellCheck.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var m=this.getContentElement('general','content').getElement();m.setHtml(i);m.getChild(2).setStyle('height',this._.contentSize.height+'px'); +if(typeof window.doSpell!='function')CKEDITOR.document.getHead().append(CKEDITOR.document.createElement('script',{attributes:{type:'text/javascript',src:j}}));var n=a.getData();CKEDITOR.document.getById(d).setValue(n);f=window.setInterval(k(this,h),250);},onHide:function(){window.ooo=undefined;window.int_framsetLoaded=undefined;window.framesetLoaded=undefined;window.is_window_opened=false;},contents:[{id:'general',label:a.config.wsc_dialogTitle||a.lang.spellCheck.title,padding:0,elements:[{type:'html',id:'content',html:''}]}]};});CKEDITOR.dialog.on('resize',function(a){var b=a.data,c=b.dialog;if(c._.name=='checkspell'){var d=c.getContentElement('general','content').getElement(),e=d&&d.getChild(2);e&&e.setSize('height',b.height);e&&e.setSize('width',b.width);}}); diff --git a/plugins/xml/plugin.js b/plugins/xml/plugin.js new file mode 100644 index 0000000..a5b3126 --- /dev/null +++ b/plugins/xml/plugin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function(){CKEDITOR.plugins.add('xml',{});CKEDITOR.xml=function(a){var b=null;if(typeof a=='object')b=a;else{var c=(a||'').replace(/ /g,'\xa0');if(window.DOMParser)b=new DOMParser().parseFromString(c,'text/xml');else if(window.ActiveXObject){try{b=new ActiveXObject('MSXML2.DOMDocument');}catch(d){try{b=new ActiveXObject('Microsoft.XmlDom');}catch(d){}}if(b){b.async=false;b.resolveExternals=false;b.validateOnParse=false;b.loadXML(c);}}}this.baseXml=b;};CKEDITOR.xml.prototype={selectSingleNode:function(a,b){var c=this.baseXml;if(b||(b=c))if(CKEDITOR.env.ie||b.selectSingleNode)return b.selectSingleNode(a);else if(c.evaluate){var d=c.evaluate(a,b,null,9,null);return d&&d.singleNodeValue||null;}return null;},selectNodes:function(a,b){var c=this.baseXml,d=[];if(b||(b=c))if(CKEDITOR.env.ie||b.selectNodes)return b.selectNodes(a);else if(c.evaluate){var e=c.evaluate(a,b,null,5,null);if(e){var f;while(f=e.iterateNext())d.push(f);}}return d;},getInnerXml:function(a,b){var c=this.selectSingleNode(a,b),d=[];if(c){c=c.firstChild;while(c){if(c.xml)d.push(c.xml);else if(window.XMLSerializer)d.push(new XMLSerializer().serializeToString(c));c=c.nextSibling;}}return d.length?d.join(''):null;}};})(); diff --git a/skins/kama/dialog.css b/skins/kama/dialog.css new file mode 100644 index 0000000..d08b36f --- /dev/null +++ b/skins/kama/dialog.css @@ -0,0 +1,10 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +body .cke_dialog{visibility:visible;}.cke_skin_kama table.cke_dialog.cke_browser_gecko{display:block;}.cke_skin_kama .cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;position:relative;_position:static;}.cke_skin_kama .cke_dialog_tl,.cke_skin_kama .cke_dialog_tr,.cke_skin_kama .cke_dialog_tc,.cke_skin_kama .cke_dialog_bl,.cke_skin_kama .cke_dialog_br,.cke_skin_kama .cke_dialog_bc,.cke_skin_kama .cke_dialog_ml,.cke_skin_kama .cke_dialog_mr{display:none;}.cke_skin_kama .cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_title,.cke_skin_kama .cke_browser_ie6 .cke_dialog_title,.cke_skin_kama .cke_browser_ie7 .cke_dialog_title{margin-bottom:22px;}.cke_skin_kama .cke_browser_iequirks.cke_single_page .cke_dialog_title,.cke_skin_kama .cke_browser_ie6.cke_single_page .cke_dialog_title,.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_title{margin-bottom:10px;}.cke_skin_kama .cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:none;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px;}.cke_skin_kama .cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:none;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px;}.cke_skin_kama .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_kama .cke_dialog_footer .cke_resizer{margin-top:20px;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_footer .cke_resizer,.cke_skin_kama .cke_browser_ie6 .cke_dialog_footer .cke_resizer{margin-top:27px;}.cke_skin_kama .cke_dialog_tabs{height:23px;display:inline-block;_display:block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_tabs,.cke_skin_kama .cke_browser_ie6 .cke_dialog_tabs,.cke_skin_kama .cke_browser_ie7 .cke_dialog_tabs{top:33px;}.cke_skin_kama .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_kama a.cke_dialog_tab,.cke_skin_kama a:link.cke_dialog_tab,.cke_skin_kama a:active.cke_dialog_tab,.cke_skin_kama a:hover.cke_dialog_tab,.cke_skin_kama a:visited.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer;}.cke_skin_kama .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_kama a:hover.cke_dialog_tab{background-color:#f1f1e3;}.cke_skin_kama .cke_hc a:hover.cke_dialog_tab{padding:2px 6px!important;border-width:3px;}.cke_skin_kama a.cke_dialog_tab_selected,.cke_skin_kama a:link.cke_dialog_tab_selected,.cke_skin_kama a:active.cke_dialog_tab_selected,.cke_skin_kama a:hover.cke_dialog_tab_selected,.cke_skin_kama a:visited.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default;}.cke_skin_kama .cke_hc a.cke_dialog_tab_selected,.cke_skin_kama .cke_hc a:link.cke_dialog_tab_selected,.cke_skin_kama .cke_hc a:active.cke_dialog_tab_selected,.cke_skin_kama .cke_hc a:hover.cke_dialog_tab_selected,.cke_skin_kama .cke_hc a:visited.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px;}.cke_skin_kama .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_kama .cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px;}.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_contents{margin-top:0;position:relative;margin-bottom:-22px;} +.cke_skin_kama .cke_dialog_ui_vbox table,.cke_skin_kama .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_kama .cke_dialog_ui_vbox_child{padding:5px 0;}.cke_skin_kama input.cke_dialog_ui_input_text,.cke_skin_kama input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_kama div.cke_dialog_ui_input_text,.cke_skin_kama div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;_width:99.9%;}.cke_skin_kama .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,.cke_skin_kama .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px;}.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,.cke_skin_kama .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px;}.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important;}.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px;}.cke_skin_kama .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password{border-width:0;}.cke_skin_kama .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password{border-width:1px;}.cke_skin_kama textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}.cke_skin_kama div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_kama div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_kama .cke_rtl .cke_dialog_ui_labeled_content{_width:95%;}.cke_skin_kama .cke_dialog_ui_hbox{width:100%;}.cke_skin_kama .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_dialog_ui_hbox_child,.cke_skin_kama .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_kama a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;_background:none;padding:5px 0;text-align:center;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button{padding:0;}.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span{width:70px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span{width:100px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span{padding:5px 15px;text-align:center;color:#3b3b1f;background:#53D9F0 none;display:inline-block;cursor:default;}.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button span.cke_dialog_ui_button{margin:0;}.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button{display:inline-block;padding-top:3px;padding-bottom:2px;margin:2px 0;}.cke_skin_kama a.cke_dialog_ui_button_ok span,.cke_skin_kama a.cke_dialog_ui_button_cancel span{width:60px;padding-right:20px;padding-left:20px;}.cke_skin_kama a.cke_dialog_ui_button_ok{background-position:0 -1143px;}.cke_skin_kama a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1219px;}.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1219px;} +.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span{background-color:#B8E834;margin-right:0;}.cke_skin_kama a.cke_dialog_ui_button_cancel{background-position:0 -1104px;}.cke_skin_kama a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1245px;}.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1245px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span{background-color:#F65D20;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span{background-image:none;}.cke_skin_kama span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px;+margin:2px 0;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_kama a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_kama a:hover.cke_dialog_ui_button,.cke_skin_kama a:focus.cke_dialog_ui_button,.cke_skin_kama a:active.cke_dialog_ui_button{background-position:0 -1179px;}.cke_skin_kama .cke_hc a:hover.cke_dialog_ui_button,.cke_skin_kama .cke_hc a:focus.cke_dialog_ui_button,.cke_skin_kama .cke_hc a:active.cke_dialog_ui_button{border-width:2px;}.cke_skin_kama .cke_browser_iequirks a:hover.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a:focus.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a:active.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:hover.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:focus.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:active.cke_dialog_ui_button span{background-image:none;background:#F7A922;}.cke_skin_kama .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}.cke_skin_kama .cke_browser_ie7 .cke_dialog_footer_buttons{position:static;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_kama .cke_dialog_footer_buttons span.cke_dialog_ui_button{margin:7px 0;text-align:center;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons a.cke_dialog_ui_button{display:block;padding:0;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{padding-bottom:5px;padding-top:6px;margin-bottom:0;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_ok .cke_dialog_ui_button{background-position:right -1214px;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_cancel .cke_dialog_ui_button{background-position:right -1242px;}.cke_skin_kama .cke_browser_ie9.cke_rtl .cke_dialog_footer_buttons td{padding-left:2px;}.cke_skin_kama strong{font-weight:bold;}.cke_skin_kama .cke_dialog .cke_dialog_body .cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;_background-image:url(images/sprites_ie6.png);}.cke_skin_kama .cke_dialog_close_button span{display:none;}.cke_skin_kama .cke_dialog_close_button:hover{background-position:0 -1045px;}.cke_skin_kama .cke_ltr .cke_dialog_close_button{right:10px;}.cke_skin_kama .cke_browser_ie8.cke_rtl .cke_dialog_close_button{left:8px;}.cke_skin_kama .cke_rtl .cke_dialog_close_button{left:10px;}.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button{left:16px;top:0;}.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button{position:absolute;left:10px;top:5px;}.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_footer{margin-top:22px;}.cke_skin_kama .cke_browser_ie6 .cke_dialog_close_button,.cke_skin_kama .cke_browser_iequirks .cke_dialog_close_button{top:7px;} +.cke_skin_kama .cke_browser_ie7.cke_ltr .cke_dialog_close_button{margin-top:0;}.cke_skin_kama .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_kama .cke_dialog_ui_input_file{width:100%;height:25px;}.cke_skin_kama .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_kama .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_kama .cke_dialog .cke_centered{text-align:center;}.cke_skin_kama .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_kama .cke_dialog a.cke_btn_locked,.cke_skin_kama .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_kama .cke_dialog a.cke_btn_locked .cke_icon{display:none;}.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_kama .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_kama .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;}.cke_skin_kama .cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white;}.cke_skin_kama .cke_dialog .ImagePreviewBox table td{white-space:normal;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_page_contents{_position:absolute;}.cke_skin_kama .cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_kama .cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}.cke_skin_kama .cke_dialog .cke_pastetext{width:346px;height:170px;}.cke_skin_kama .cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none;}.cke_skin_kama .cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black;}.cke_skin_kama .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_kama .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_kama .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_kama .cke_disabled{color:#a0a0a0;}.cke_skin_kama .cke_hc .cke_dialog_title,.cke_skin_kama .cke_hc .cke_dialog_tabs,.cke_skin_kama .cke_hc .cke_dialog_contents,.cke_skin_kama .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_kama .cke_hc .cke_dialog_title{border-top:1px solid;}.cke_skin_kama .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_kama .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px;}.cke_skin_kama .cke_dialog_body .cke_label{display:none;}.cke_skin_kama .cke_dialog_body label.cke_required{font-weight:bold;}.cke_skin_kama .cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit;}.cke_skin_kama .cke_hc a.cke_btn_locked,.cke_skin_kama .cke_hc a.cke_btn_unlocked,.cke_skin_kama .cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px;}.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_locked,.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_unlocked,.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_reset{float:right;}.cke_skin_kama .cke_hc a.cke_btn_locked .cke_icon{display:inline;}.cke_skin_kama a.cke_smile img{border:2px solid #eaead1;}.cke_skin_kama a.cke_smile:focus img,.cke_skin_kama a.cke_smile:active img,.cke_skin_kama a.cke_smile:hover img{border-color:#C7C78F;}.cke_skin_kama .cke_hc .cke_dialog_tabs a,.cke_skin_kama .cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_kama .cke_hc .ImagePreviewBox{width:260px;}.cke_skin_kama .cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px;} +.cke_skin_kama .cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px;} diff --git a/skins/kama/editor.css b/skins/kama/editor.css new file mode 100644 index 0000000..c9d336f --- /dev/null +++ b/skins/kama/editor.css @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_kama *,.cke_skin_kama a:hover,.cke_skin_kama a:link,.cke_skin_kama a:visited,.cke_skin_kama a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif;}.cke_skin_kama .cke_rtl *,.cke_skin_kama .cke_rtl a:hover,.cke_skin_kama .cke_rtl a:link,.cke_skin_kama .cke_rtl a:visited,.cke_skin_kama .cke_rtl a:active,.cke_rtl .cke_skin_kama *,.cke_rtl .cke_skin_kama a:hover,.cke_rtl .cke_skin_kama a:link,.cke_rtl .cke_skin_kama a:visited,.cke_rtl .cke_skin_kama a:active{text-align:right;}.cke_skin_kama iframe{vertical-align:inherit;}.cke_skin_kama textarea{white-space:pre;}.cke_skin_kama .cke_browser_gecko textarea{cursor:text;}.cke_skin_kama .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_kama input[type="text"],.cke_skin_kama input[type="password"]{cursor:text;}.cke_skin_kama input[type="text"][disabled],.cke_skin_kama input[type="password"][disabled]{cursor:default;}.cke_skin_kama fieldset{padding:10px;border:2px groove #E0DFE3;}.cke_skin_kama{display:block;}span.cke_skin_kama{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #D3D3D3;padding:5px;}.cke_skin_kama span.cke_browser_webkit,.cke_skin_kama span.cke_browser_gecko18{display:block;}.cke_skin_kama .cke_wrapper{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-color:#d3d3d3;background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1950px;display:block;_display:inline-block;padding:5px;}.cke_shared .cke_skin_kama .cke_wrapper{padding-bottom:0;}.cke_skin_kama .cke_browser_ie6 .cke_wrapper,.cke_skin_kama .cke_browser_iequirks .cke_wrapper{background-image:none;}.cke_skin_kama .cke_editor{display:inline-table;width:100%;}.cke_skin_kama .cke_browser_webkit .cke_editor{display:table;}.cke_skin_kama .ltr .cke_browser_ie iframe{margin-right:-10px;}.cke_skin_kama .rtl .cke_browser_ie iframe{margin-left:-10px;}.cke_skin_kama .cke_browser_opera .cke_editor.cke_skin_kama .cke_resizer{display:table;}.cke_skin_kama .cke_contents{margin:5px;}.cke_skin_kama .cke_hc .cke_contents{border:1px solid black;}.cke_skin_kama .cke_contents iframe{background-color:#fff;}.cke_skin_kama .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_kama textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre;}.cke_skin_kama .cke_browser_iequirks textarea.cke_source{_white-space:normal;}.cke_skin_kama .cke_resizer{width:12px;height:12px;margin-top:9px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1428px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_kama .cke_browser_air .cke_resizer,.cke_skin_kama .cke_browser_air .cke_rtl .cke_resizer{cursor:move;}.cke_skin_kama .cke_resizer_rtl{cursor:sw-resize;background-position:0 -1455px;float:left;}.cke_skin_kama .cke_resizer_horizontal,.cke_skin_kama .cke_rtl .cke_resizer_horizontal{cursor:e-resize;}.cke_skin_kama .cke_resizer_vertical,.cke_skin_kama .cke_rtl .cke_resizer_vertical{cursor:n-resize;}.cke_skin_kama .cke_maximized .cke_resizer{display:none;}.cke_skin_kama .cke_browser_ie6 .cke_contents textarea,.cke_skin_kama .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_kama .cke_browser_ie.cke_browser_quirks .cke_contents iframe{position:absolute;top:0;}.cke_skin_kama .cke_browser_ie6 .cke_editor,.cke_skin_kama .cke_browser_ie7 .cke_editor{display:inline-block;}.cke_skin_kama .cke_browser_ie6 .cke_editor,.cke_shared .cke_skin_kama .cke_browser_ie7 .cke_wrapper{padding-bottom:5px;}.cke_skin_kama .cke_voice_label{display:none;}.cke_skin_kama legend.cke_voice_label{display:none;}.cke_skin_kama .cke_browser_ie legend.cke_voice_label{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_kama .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;} +.cke_skin_kama .cke_contextmenu{margin:0;}.cke_skin_kama .cke_panel iframe{width:100%;height:100%;}html.cke_skin_kama_container{overflow:auto;overflow-x:hidden;}body.cke_panel_frame{overflow:auto;}.cke_panel_frame .cke_label{display:none;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}.cke_skin_kama .cke_button_textcolor_panel,.cke_skin_kama .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_kama .cke_toolbox{display:none;}}.cke_skin_kama .cke_browser_webkit .cke_toolbox,.cke_skin_kama .cke_browser_webkit .cke_toolbox>span{white-space:normal;}.cke_skin_kama .cke_toolbox{clear:both;padding-bottom:1px;}.cke_skin_kama a.cke_toolbox_collapser,.cke_skin_kama a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -1366px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:1px outset #D3D3D3;margin:11px 0 2px;cursor:pointer;}.cke_skin_kama .cke_rtl a.cke_toolbox_collapser,.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_kama a.cke_toolbox_collapser span{display:none;}.cke_skin_kama .cke_hc a.cke_toolbox_collapser span{font-size:10px;font-weight:bold;font-family:Arial;display:inline;}.cke_skin_kama a.cke_toolbox_collapser_min,.cke_skin_kama a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -1387px;background-repeat:no-repeat;margin:2px 4px;}.cke_skin_kama .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -1408px;}.cke_skin_kama .cke_separator{display:inline-block;border-left:solid 1px #D3D3D3;margin:3px 2px 0;height:16px;vertical-align:top;}.cke_skin_kama .cke_break{font-size:0;clear:left;}.cke_skin_kama .cke_rtl .cke_break{clear:right;}.cke_skin_kama .cke_toolbar_start{display:none;}.cke_skin_kama .cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:repeat-x;background-position:0 -500px;float:left;margin-right:6px;margin-bottom:5px;padding:2px;display:inline;} +.cke_skin_kama .cke_rtl .cke_toolgroup{float:right;margin-right:0;margin-left:6px;}.cke_skin_kama .cke_button a,.cke_skin_kama .cke_button a:hover,.cke_skin_kama .cke_button a:focus,.cke_skin_kama .cke_button a:active,.cke_skin_kama .cke_button a.cke_off{border-radius:3px;outline:none;padding:2px 4px;height:18px;display:inline-block;cursor:default;}.cke_skin_kama .cke_button a,.cke_skin_kama .cke_button a.cke_off{filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_kama .cke_hc .cke_button a,.cke_skin_kama .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_kama .cke_button a.cke_on{background-color:#a3d7ff;filter:alpha(opacity=100);opacity:1;padding:2px 4px;}.cke_skin_kama .cke_hc .cke_button a.cke_on{padding:0 2px!important;border-width:3px;}.cke_skin_kama .cke_button a.cke_disabled *{filter:alpha(opacity=30);opacity:.3;}.cke_skin_kama .cke_browser_ie .cke_button a.cke_disabled *,.cke_skin_kama .cke_browser_ie a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,.cke_skin_kama .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_kama .cke_browser_ie6 .cke_button a.cke_disabled *,.cke_skin_kama .cke_browser_ie6 a:hover.cke_button .cke_disabled *,.cke_skin_kama .cke_browser_ie .cke_button.cke_noalphafix a.cke_disabled *{filter:alpha(opacity=30);}.cke_skin_kama .cke_hc .cke_button a.cke_disabled *,.cke_skin_kama .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled *{filter:alpha(opacity=60);opacity:.6;}.cke_skin_kama .cke_button a:hover.cke_on,.cke_skin_kama .cke_button a:focus.cke_on,.cke_skin_kama .cke_button a:active.cke_on,.cke_skin_kama .cke_button a:hover.cke_off,.cke_skin_kama .cke_button a:focus.cke_off,.cke_skin_kama .cke_button a:active.cke_off{filter:alpha(opacity=100);opacity:1;padding:2px 4px;}.cke_skin_kama .cke_button a:hover,.cke_skin_kama .cke_button a:focus,.cke_skin_kama .cke_button a:active{background-color:#dff1ff;}.cke_skin_kama .cke_button a:hover.cke_on,.cke_skin_kama .cke_button a:focus.cke_on,.cke_skin_kama .cke_button a:active.cke_on{background-color:#86caff;}.cke_skin_kama .cke_hc .cke_button a:hover,.cke_skin_kama .cke_hc .cke_button a:focus,.cke_skin_kama .cke_hc .cke_button a:active{padding:0 2px!important;border-width:3px;}.cke_skin_kama .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;cursor:default;}.cke_skin_kama .cke_rtl .cke_button .cke_icon{background-image:url(icons_rtl.png);}.cke_skin_kama .cke_browser_ie .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_kama .cke_browser_ie6 .cke_button .cke_icon,.cke_skin_kama .cke_browser_ie6 .cke_rtl .cke_button .cke_icon,.cke_skin_kama .cke_browser_ie .cke_button.cke_noalphafix .cke_icon,.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button.cke_noalphafix .cke_icon{filter:;}.cke_skin_kama .cke_button .cke_label{cursor:default;display:none;padding-left:3px;line-height:18px;}.cke_skin_kama .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_kama .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_kama .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_kama .cke_button .cke_buttonarrow{display:inline-block;height:17px;width:8px;background-position:2px -1469px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;cursor:default;}.cke_skin_kama .cke_browser_ie .cke_button .cke_buttonarrow{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');} +.cke_skin_kama .cke_browser_ie6 .cke_button .cke_buttonarrow{filter:;}.cke_skin_kama .cke_browser_gecko .cke_toolbar,.cke_skin_kama .cke_browser_gecko .cke_button a,.cke_skin_kama .cke_browser_gecko .cke_button a.cke_off,.cke_skin_kama .cke_browser_gecko .cke_button .cke_icon,.cke_skin_kama .cke_browser_gecko .cke_button .cke_buttonarrow,.cke_skin_kama .cke_browser_gecko .cke_separator,.cke_skin_kama .cke_browser_gecko .cke_toolbar_start{display:block;float:left;}.cke_skin_kama .cke_browser_gecko.cke_hc .cke_button .cke_icon{display:none;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button a,.cke_skin_kama .cke_browser_gecko .cke_rtl.cke_button a.cke_off,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_icon,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_separator,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar_start{float:right;}.cke_skin_kama .cke_browser_gecko .cke_button .cke_label,.cke_skin_kama .cke_browser_gecko .cke_break{float:left;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_label,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_break{float:right;}.cke_skin_kama .cke_browser_webkit .cke_toolbar{float:left;}.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_toolbar{float:right;}.cke_skin_kama .cke_browser_ie .cke_button .cke_label{line-height:16px;}.cke_skin_kama .cke_browser_ie .cke_rcombo,.cke_skin_kama .cke_browser_ie .cke_rcombo *{cursor:default;}.cke_skin_kama .cke_browser_ie .cke_toolbox{padding-bottom:5px;_padding-bottom:6px;}.cke_shared .cke_skin_kama .cke_browser_ie .cke_toolbox{padding-bottom:0;}.cke_skin_kama .cke_contextmenu{padding:2px;}.cke_skin_kama .cke_menuitem a{display:block;}.cke_skin_kama .cke_menuitem span{cursor:default;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{background-color:#D3D3D3;display:block;}.cke_hc .cke_menuitem a:hover,.cke_hc .cke_menuitem a:focus,.cke_hc .cke_menuitem a:active{border:2px solid;}.cke_skin_kama .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon{background-image:url(icons_rtl.png);}.cke_browser_ie .cke_skin_kama .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_kama .cke_menuitem .cke_icon,.cke_browser_ie .cke_skin_kama .cke_menuitem.cke_noalphafix .cke_icon{filter:;}.cke_skin_kama .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_browser_ie .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon,.cke_browser_ie .cke_skin_kama .cke_menuitem.cke_noalphafix .cke_disabled .cke_icon{filter:;}.cke_skin_kama .cke_menuitem .cke_icon_wrapper{background-color:#D3D3D3;border:solid 4px #D3D3D3;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;clear:both;}.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}.cke_skin_kama .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#D3D3D3;border:solid 4px #D3D3D3;} +.cke_skin_kama .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;}.cke_skin_kama .cke_frameLoaded .cke_menuitem .cke_label{filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_kama .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{background-color:#D3D3D3;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;}.cke_skin_kama .cke_menuseparator{background-color:#D3D3D3;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_kama .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1411px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_kama .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1390px;background-repeat:no-repeat;}.cke_skin_kama .cke_menuarrow span{display:none;}.cke_hc .cke_skin_kama .cke_menuarrow{width:auto;margin-top:0;}.cke_hc .cke_skin_kama .cke_menuarrow span{display:inline;}.cke_browser_ie.cke_ltr .cke_skin_kama .cke_menuarrow{position:absolute;right:2px;}.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuarrow{position:absolute;left:2px;}.cke_skin_kama .cke_rcombo{display:inline;}.cke_skin_kama .cke_rcombopanel{border:1px solid #8F8F73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;height:auto;_height:100px;}.cke_skin_kama .cke_rcombo a,.cke_skin_kama .cke_rcombo a:active,.cke_skin_kama .cke_rcombo a:hover{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:repeat-x;background-position:0 -100px;border-bottom:1px solid #DAD9D9;border-right:1px solid #DAD9D9;float:left;padding:2px;height:21px;margin-right:6px;margin-bottom:5px;}.cke_skin_kama .cke_rtl .cke_rcombo a,.cke_skin_kama .cke_rtl .cke_rcombo a:active,.cke_skin_kama .cke_rtl .cke_rcombo a:hover{float:right;margin-right:0;margin-left:6px;}.cke_skin_kama .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_kama .cke_rcombo .cke_label{display:none;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity=70);opacity:.70;}.cke_skin_kama .cke_rtl .cke_rcombo .cke_label{margin-right:0;margin-left:5px;}.cke_skin_kama .cke_rcombo .cke_inline_label{line-height:21px;font-style:italic;color:#666;}.cke_skin_kama .cke_hc .cke_rcombo .cke_openbutton{vertical-align:top;}.cke_skin_kama .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_kama .cke_rcombo .cke_text{filter:alpha(opacity=70);opacity:.70;height:21px;line-height:21px;width:60px;text-overflow:ellipsis;overflow:hidden;display:inline-block;margin:0 2px 0 4px;cursor:default;}.cke_skin_kama .cke_rtl .cke_rcombo .cke_text{margin:0 4px 0 2px;}.cke_skin_kama .cke_rcombo .cke_openbutton{display:inline-block;}.cke_skin_kama .cke_rcombo .cke_openbutton .cke_icon{display:inline-block;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -68px;background-repeat:no-repeat;width:17px;height:19px;margin:1px 2px;}.cke_skin_kama .cke_hc .cke_rcombo .cke_openbutton .cke_icon{background:none;}.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_openbutton{margin-bottom:0;}.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_kama .cke_rcombo .cke_off a:active .cke_text,.cke_skin_kama .cke_rcombo .cke_on .cke_text{border-color:#316ac5;filter:alpha(opacity=100);opacity:1;} +.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_kama .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_text,.cke_skin_kama .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_kama .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50);}.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);}.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_openbutton,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_label{float:left;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_kama .cke_browser_ie7 .cke_rcombo .cke_text{line-height:18px;}.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_text{height:auto;line-height:17px;}.cke_skin_kama .cke_rtl .cke_rcombo .cke_font .cke_text,.cke_skin_kama .cke_rtl .cke_rcombo .cke_fontSize .cke_text{direction:ltr;}@media print{.cke_path{display:none;}}.cke_skin_kama .cke_path{display:inline-block;float:left;margin-top:5px;}.cke_skin_kama .cke_rtl .cke_path{float:right;}.cke_shared .cke_skin_kama .cke_path{_width:100%;margin:0 0 5px;}.cke_skin_kama .cke_path a,.cke_skin_kama .cke_path .cke_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;}.cke_skin_kama .cke_path .cke_empty{visibility:hidden;}.cke_skin_kama .cke_rtl .cke_path a,.cke_skin_kama .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_kama .cke_path a:hover,.cke_skin_kama .cke_path a:focus,.cke_skin_kama .cke_path a:active{background-color:#dff1ff;padding:1px 4px 0;outline:none;color:#000;}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_kama .cke_path .cke_label{display:none;}.cke_skin_kama .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_kama .cke_button_docProps .cke_icon{background-position:0 -16px;}.cke_skin_kama .cke_button_newpage .cke_icon{background-position:0 -48px;}.cke_skin_kama .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_kama .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_kama .cke_button_copy .cke_icon{background-position:0 -112px;}.cke_skin_kama .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_kama .cke_button_pastetext .cke_icon{background-position:0 -144px;}.cke_skin_kama .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_kama .cke_button_replace .cke_icon{background-position:0 -256px;} +.cke_skin_kama .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_kama .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_kama .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_kama .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_kama .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_kama .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_kama .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_kama .cke_button_superscript .cke_icon{background-position:0 -384px;}.cke_skin_kama .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_kama .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_kama .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_kama .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_kama .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_kama .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_kama .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_kama .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_kama .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_kama .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_kama .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_kama .cke_button_checkspell .cke_icon,.cke_skin_kama .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_kama .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_kama .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_kama .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_kama .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_kama .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_kama .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_kama .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_kama .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_kama .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_kama .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_kama .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_kama .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_kama .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_kama .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_kama .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_kama .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_kama .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_kama .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_kama .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_kama .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_kama .cke_mixed_dir_content .cke_button_numberedlist .cke_icon{background-position:0 -1217px;}.cke_skin_kama .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon{background-position:0 -1233px;}.cke_skin_kama .cke_button_outdent .cke_icon{background-position:0 -432px;}.cke_skin_kama .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_kama .cke_mixed_dir_content .cke_button_indent .cke_icon{background-position:0 -1265px;}.cke_skin_kama .cke_mixed_dir_content .cke_button_outdent .cke_icon{background-position:0 -1249px;}.cke_skin_kama .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_kama .cke_button_justifycenter .cke_icon{background-position:0 -480px;}.cke_skin_kama .cke_button_justifyright .cke_icon{background-position:0 -496px;}.cke_skin_kama .cke_button_justifyblock .cke_icon{background-position:0 -512px;}.cke_skin_kama .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_kama .cke_button_creatediv .cke_icon{background-position:0 -1168px;} +.cke_skin_kama .cke_button_editdiv .cke_icon{background-position:0 -1184px;}.cke_skin_kama .cke_button_removediv .cke_icon{background-position:0 -1200px;}.cke_skin_kama .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_kama .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_kama .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_kama .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_kama .cke_button_maximize .cke_icon{background-position:0 -1040px;}.cke_skin_kama .cke_button_editdiv .cke_icon{background-position:0 -1184px;}.cke_skin_kama .cke_button_bidirtl .cke_icon{background-position:0 -1072px;}.cke_skin_kama .cke_button_bidiltr .cke_icon{background-position:0 -1056px;}.cke_skin_kama .cke_button_iframe .cke_icon{background-position:0 -1279px;}.cke_skin_kama .cke_button_source .cke_label{display:inline;}.cke_skin_kama .cke_styles_panel{width:150px;height:170px;}.cke_skin_kama .cke_format_panel{width:150px;height:170px;}.cke_skin_kama .cke_font_panel{width:150px;height:170px;}.cke_skin_kama .cke_fontSize_panel{height:170px;}.cke_skin_kama .cke_fontSize .cke_text{width:25px;}.cke_skin_kama .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}html .cke_skin_kama{visibility:inherit;}html.cke_skin_kama_container{visibility:visible;} diff --git a/skins/kama/icons.png b/skins/kama/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3bf195dd35a2dd3773a5cae7e4712a1133a5d5 GIT binary patch literal 5598 zcmX|FbySq!)4#imfaKDPfD0%gAt}w0i!@S#APoW{upkJMOGrzobeAAVs^k}0QE5a% zX({Pgy5qOLf4rY_?wPrB=bq=8JI|f@oG1F8?p;c<Yh(ZbN)2^Y1A>GDaD|!_M$n>? z6PpO)Dn|XmQvk^6{tXDo$U+c|>~`t~Iso`_0e}qy;P{dtR{-!924K}10GTuZnA~4k zeOChj2JUGap$U7gtEgOF0+>z*0}7RvmUfuL4-*zPT(@OI7Kn+7QA$Y_kpX5&fodwi z%K5hH*Y4=(7%zXmk;ywAvC8cl!{izymzvty+1aHdWMjm9{mso`83?Pga*r`_a$092 zBOo%}(@$7G4W#PehB{|&&P-OhxK$}A7yt1g_2^uA5%u5npLOa?*h}mk|FUgIOL326 zs>2R)9`tt_S=sF*Rze6#!<$=MJA;k62nEHn%S$~EVj@HYez~(P1T*eLSy)tbXvrUQ z6X-c~%yqOeqEHCu&HkmurXF8f-TvE}nns(}lg|)aF(!HjD$P~CNQcQL6V=t#4N7#+ z;o)KH#8^q`dz`uy5bM1-hn}6mmLn0wQXNgWDgAZJ#D=}Onbj+zqL&wtrLo~VI@(cD zQAejIV%pje4hz*O!<|iv#l^*`QQGqN?=LQ(hx<#uzCJyf*n<Q{5ly{Y>ga<42{xs> zi*s}$+Ugvts-B*n85tRV6^_g(-J|_oDu(Q>g}M6220p$XfW1^sQxPiA3gyzPsK`g% zy9cDDOG@5vZPJj6Ra5a<b1JLm=jWWA5|K!@(#y+}sr;muQ<M(bsHmv8iAF2x>t9}8 zvR%)cnVCsVO{MUt`&d_ZoO#1bgz_SZD6@5c&=qi6Er@7o-B8ttN`1?7_wL2TMQbbW zO+^ibq$DP_%IkT^lk}ncrluCIJ{|L&8%<A+kB?cDl&+_Ykg653nSXd&*>IT-blcX^ zPvf1OoOZ@DB(sL5Rz{m%8T<PBrZ%qS=H}ANDIBC;@9yr-Gev$IJrZ%6kk!+(_l!a5 znG1bdVvtq2d;<*%3It+e<u!d57YB6a<1E*bU&JLrm46&(-GJTw>FgQsyU289d;TW+ zE{XQ9{r&yhS~0Y0Eo9mQiEq+r<>VxMmn0JFnGAauS7sMC&Z;WPOG``3%HHGg_^qw2 z?d|QIot@p?-Mzg%!rp^}145RMj*bYioSdATo}LoE)${XnLhOX&3X&fvA>09omw~P! zP+S~+1OTm;hN_a0@A!JwsXyIFdWRK<ac!cj0J&^C;t54NwowY=IZNv)qM<Q9sXjhA z!M);|`E0^%qQ%eW!+Np5-G_{Hu^nkxoS?ayC^XBOE{gK1E>48|Hcjl9+lS@@w}rvs zW0r%+r|Duh9@Iq(f9(I9fb7CMeqNGa`cG!5*XcI2^CRSOjj2F8Smee{xVO5JFvl42 zC2JN}CMc&W@g>)WQCw+n`k~Y-nwH;p6Y1*eI`mgXpB}A`Dl7;yPrD`4&<>pyc5`w0 zD$Ov9k<wNYVEn)j*aZa4WfC2XLJByQBfFJ2lhkk0Hr!Adm^IR-%tFgNnYugRM9(oi zFfgE0z7eIS@BR;3k=;PKWn<&*SV7sWFz{jz_nXieTEG95wY24}^Yt}{mJQOLl-6wz zyAYIlV&pMxv?`}{)%P@F3IaN<al#aVI4F#`J>rX5J9ZXC*dYAAL7UtVO+*;&5pQ{J z2y3h=XHuO6nG=wQR#dnG9CX!>DDRWbUzOF#JqeA9;^N{LkZq-_KYvFsppz6CU)Y*_ zT+qvxWoY`qMwPe5`q4B+mOPT}qFCiw@YY`q*`qz2hI!+cFp_wHQ_^?a+HyyQf2j;3 zkzSTL>QUjDR&e?*JrF$GDHP9||KoT!mFLg3R?ojGi^vwgqvgws4s-XG@4qhTA}~j) zN7GmGTok3wrg>CxTUVuMP&QV~Z8lOiR(zr(@$W`xMa*#`(l-e&Ci0srk2i*sffa|a zQ{n5RZ>ZRqmdYb*icO+7NFt;v0%hGd4EZYTm3=FYRPpA&GlIo8YLj1!Ao^Bh%Q!26 z)<s<$%_k@@{z(^eZ2t!{bMtq>CwtCh+8>fb?hlFU7!p@h45C(hSB5&`(>urev!w&q z)0{a|*vWpRbGL=Vl`)8!-kPThk`u+8NLI1FgJ&AsA<lL6PhZdwAK{+3Gm+h(0LXx! z<Kr==sBdsZ0i+FP6I11aB0Px;vz~TLEH-nzj9<f_8ehsXVVCTJtq7Rj_Q5XAFJFBA zoRl<=XI(h<eHuL7Nx(KLCqa@Lk7Q<MmJWKeG_No{sURxq8E_etli)Kgulv$x`K49s z>0*dV<R7^Fn`_U`cWl_cRR?VK%Y5k|X~WmgxJ{m;kVsM%!3Gwe+_`z!Y=RlpH}eR( zfPlPj?@~5>wI0S%hc`!3f14)}Cir!j)2^hbh9)FnLdSZkT5B^Z*P1GOfL&ZRu9K4D zYoZ-{c%mkCQR%c=MKWFTF)MqKXCV<K`W=UA2wwnIk)6hXkA%zDc>7*XHY!7Lp!09& zgFM3_8Kogbh#>SDaLRbAk4Z@eIxro>kGhnEUU>&SAajRO`~_5JzL+zE8>R!}m@Ch= zb&vmhmy@RB85h)ggg<6(ow_%~TZVDz(qKJrXyCoB&QQ>Sn9j<_I{u8e&i6%S7#7wa zpbhEM0dVSmkOUWO`{3+;muJ$qXVeNU?)X7G+Us#f0dGvFd3ey5A#pW&bpF_kbYUSK zy&xyb&rElCBE5wz_t*0J{8Ko9Q^lHavjc3KO`D<~b<H0D_PuD<D8c@o7ftxRhLSaU zo6x|b@^b#kPYDoZL2Xi-n4G|HcqqkJYwPJ-%2@WVqmGa!n1eNv<P<>~dDW(e_*h$- zqY-d~OED0Ua@bNXktx3)e5T0o9uLnckl_HF-<y25=g@U8e|sglGB4b*cvDs!6U!uI zX~;?Zgz<H&V=X=dCY5e)DcbeLAJ4Tye&tBs&9|Ms>+J6v>v070MyJ!e4?-fD3m&g( zED8~KR)7Bdc~87s!RTIOL`1;=uM$ORE(N-fpuCSd>Eg)^pnXaE&9+p9lq1||Gwd3g zl+ZERp5QfAv%@E{gtB+jA7FDPwE9v3C^EQ3WkAuJimf0bkw70HZaF3mzfoH1Hh6cu zYk0s~Y#_{rd2|QQwb-vGZP)vKE6>~PWn&I|^3_Gzh=l+Q#qh)2LOXQ_tlR@Rrl^j2 zj}z#&Z<c!k?6eR%Hku-Z6O=QkLr9i<mlFXKtLxjoxcTkTI}%9N2?%appVdY_2N5`r z@|6?W^2O2Fp}^E~w6vYhlA}>D<<yU5eKlEMEp(_UO%gjzC|Bn^jdPlFs6Eo2lZQ7r zMb{Ay)Wzu7RYZF75_7nnWU_MtwX&76^-Er+SEP7xSJwv|=m-0U>Ta_IXH<~!_STYV zU%ZHOm0-h(>%11#Z!-|qCvJ#%_IKm-+_9G=?I7Ui#bS445xgLi7a6b5tJC=~=AE&m zR$OCOr}ntVhi_@IalP-^2nM-g+f}n5fBF$8xB7{Vl&MfCb7L@`--<UcF(foJ6k6Y$ zmxm2?usT*&3dw{@0-Pvco(#bD^q8tk!g^9H9^rJ9MAIpVCN~w?;iN=>J@FfY1R4U` zEkf*R+2LEq0bPph&#U@VwNC(4Dt*r;ZoB2PJ?$xgb`>S<9S5Ltg$S!8iQ3#ZXmb0P zcF~-uTxt-2Iz8R*ifqOuQP+zhIg8AJWIu@@Eh!NcQlFft2<%uf%~Ni19EsYs0S!}b zl3JvFBv-m_9@PB*3;?~TPL=rZyy)ncwXN`M_tA!=Y^h>JYGO&$(M%W}-4YJ~jJjub zn0q6whb?*vzuwu-^?XsXz>^V^NFRwKhP~wx6c=i|UStinP}j+Z?Vc~z@PRyX2#`P> zu@`(2WtSA7wmy)M`v-xI#mMbLegd{L2$hkBjPIYW^?Oec&+;6Ai29(<wFKB7@Az-7 z7y@hGwVz8Sm1l!H3q7eqW@P|}DJUu``b+)!=(~T)?P4(P(ZS~PzHzOx<GOik5FMbH zzvJ?IZ+|M#d!ajdtsjaF_1PHzRDQhKjJIs`Y=Hu@+d}`)y8qjCqAvRiDE=?&wRycO z6uVc^HdQA`304%@vvv7fT3V=iS01pY(latLj!%}AmGO}?+&4BhX26f?KXf|QiuJkp z&i|dC><aJ2tR&vApy4eX<YCYRk8Kwp2BxagcejYJZ4CVP=`Vj7%KFIZ-w0{896SD6 z;_^6#nfK3jA5Tt@A6iGGqNLilWAsN`+qF%V+4zbo`jO#bdZyS2IeqQE$B%71JUnU& zB_$5Wb%nJYACee#*$&=v(h3pTY(uQs+1ce9)<UO5^QD9(Bp&hG!bBXC5adp`L~%<u z4FNl2?5&i(($l6stVQ#8hO50*v#X=yZl+|<=D%n&)RShC^>UUbY1!Nx`rz#rvAFNo zLS>@%=Wchm{hT0wxq!ba=O02QG~XrGQ`lu~`H8fTt`*N9Et@9Rrj7@-DCBmcOh!51 z=~j(2I}LFDjw!YzXnUyDu#vTv;FZB*E&LMr&k}!rIPHE6+*<>u0}lmj1AwW$PgP&e z^Tl)l6Q-Nf_`}n4^7A&UWk=H|_2-3U%1s!v>Ld$~typsMbtL1PmXO@@wL{p^3b6t# zsIn_EnuW}}W9lRAOyR4(Zb;blcnQEgU(>xS<KCa^W8@L!HB6O-id$@A7*1q)L=vDT zo$1!QzB=^0i<IE^Ooab_xCo4hPTST2O*BF8fJVRKREuF`Vql;FpiM&PHXlD9pKWS< z(BA9Xg74)_Ovwz}O|jjC1^&}6TS%VM_FP{qQ&k-#Q!kqCeO*`qr<u#=-shE^J!7o9 zS<btXUswBRMfxiu4t_1&tY!xHGd;tXOca9MrkcDlryKP{a0N*nLohV?kQg|u{jLa` zFqx#X&hh_D0lFn}pMHEcR_lP7aINnnCe3uLzxAc3U;eO`;+nrjrP@`w`oHGWp8J}4 zauR2yuP!RV<@nBFje@4TpAk0L&-ZA+vA&1_at-+`x!+~-jb%U1=ko;y56c`}(Fs=h zf=^XA<GCCh9bMKaX%%z7j{DCMd0ta{vGBZK;_c8&qk&VbsQaJ)o=@wP)c;+MC3+Mn z&%!!_Wmac(<t+Y{DuB%-<p|obh3?KLs6r)a4D@(JUvAsdaR`~Qi+FvE4yS!pa8lap zwQ-;PiR;em2%?l20#zfjq97J-H)l~NwR?g%OT02d6H2K9R1mTk@bWZKp2MrrQwhHL zCMCr$$CNgGAH>3y|E97yuK$s8Nr?RhI2$1x5tQ&yK}BJ1A}v6tU46wU?wt_KPn;V} zSJ139SX13T8Hv=?GWpdLv_D>Dtaa1qrAYfPb?o4$H28lKB%Qnl$TG|3x@*a!W$0Q3 zNu<2k$?*+aF`}qZH$D%jhLW<h;w_H-v^TVz^gh2|6W!7ghik)2iK;k*LN!S3Ai~^f z@7q$P*u$%th}S7!yS1uD<=#p2ICQ4Dd8MeOSUz7-WSv0LiAqBfjX%0Xy@f~Kr_o-e z`$c5)q!g>El4d=K74oPq`}oFsPKb*bh8Pl3r^QiK$G{)zkX|9W=S*s+eeE|b%;qaQ zR$ab5&1m|TV(6QcYx_k;z{R`Rr})9N)>u||I&~S2yX8ifwS5M64Zn6|C_~cI$D<5V z_M;3Oj)D=h_e#rTCd`yMGTRi>dU=u0Yx4gOuU@^PWLaed;EihGz;XnoxA&)I4zkZD zzX;aV)yD(#dZPDC2r!Sm-um94I=`;2?%-@b!Rqr_8x&xh%Bd|{PJXKBp^n?ggPQ@c z4tXNEyFv9}ha>y?4FI?XS47B)hV1CoOF9TQOO`Ng+nu$lw*CTby_8v;PnpS<XE;ka zBm!r<NEV+1BO}w9u8~%^IAaVH(6vjN#mP!T0R8yIhG79c7!IoNI;}q>VuoO&2O`Mx zHx0v@{r&j(Xn}CeW3ST}+pVWgm_tK(1_p4?JPFrK5>}JYWEsduLxdf#K-jUeo_$4n zG0Q7m+Y>4uiFcd6emn$Ig9C0&77W_S7-Mv~i(C!^!b)W#R4<;TTAr*SeJ+{7F!A|C zgjTWr-r%oXH%*x0M!8qr*@@Qj>GY_5pq`1bs7zBJo)X3Owyf;jD~-bK=Snq2p<chn z;f(>upPmqpgdqXf=)zjA+i6CGqA!h+hBSB@KeNclsmk-XMw&vJN9Y;4p)S#M4Xhpy zk00Mf?c|SA0Q%>jc^@$RSV_8?6=r2Kq+)FBO_sOTv}vRb%i85CEFSS(>d0DD@mW-< zU-<e!)rYYrY%M9F*F#3|=yKn#>A4HDg~EGC`)_I%OvnbY(ev}PtXS_r;xN?{^&OHY z&Oc<VAKJP)>~P&KM_f9-;^9DAtI=`0xuAqxuJjRe8{a{ZW5QnbE-iR18jadEggZo8 ztS9GkR)fIFFi0x-Pq;~gldpI<fm0iqrS@Fm<+}wQVhbKZpi+-#9g821v7`*__5N_! z2(s*z_8+5MI-9#nGPuAXYyIslc*fKm#Q{qrBhd3?^6DkqVaT@^Jj80n{Q6WcmQR+m zmf98`{;@#V#XSv;3y}`=_1IhWyx!83b+=0HKNq)5-LS^2=1&i;C8DeQ&HNqaFm{@t za_ml^nef-QdYU?&$m&n_+^6PD6VpvcOEb0KyGYVjAdh`~eCl20te=>&Ur(4&l#8GD za8A^1pWi+zvO$~_@rLrO;1|4laEYM(^`5QLBy{i4QvloSZ86f!g>9ZEu+|I9A2%;s zvZPL1vNVG9<$nYTm1LUbB#bXRQ?FgkGZkPo9OWl5r;qw>OHEph)<-<DkL`fLCu{?& zj*_4N{^7GD@1ToB@Q;d@g0m^pi(8QKQJB?UpTRdakvWg;@U&48d)RNcX!isyy*Q7= z8k6)Nt(CGP=|^>JHjk)-Qfa-|c9M>z^64f6j;nK|=Om-_E+<X>4wS@@tUbK12;{cJ zWz5kxQQPSC{_~3IvAp=9M?<;#Fs{h%3q%@aT5Y_7w1dBAZ@56hD+_bkollY7CMa!^ z&Va|g>C|r%cWl~NmkJy6->v+-JzMGS7Icoe98gJ+Z^z|yWK@aYxx+T;9rb4h;}G~X zxU{vkb!Cf#Z$-hgI!JDKc(43xUtbjr#3dwHHF_4eDj2m^9hU&$e|V7l*v$=vSap{P zfCKBZuiNr{Fa0aCNcSTNl_CKD$4XoRzk<YD?em*$MEaky=<O#YBpmLhyu`cy*_}N) zYH(UDVQLqOORzfPdTKS{OhlrWBL^1`t-^G<G+Rxz_#e6f>?I43rJn0kPD!~+_{Rh^ M(7LLX%GRO(1EjHd^8f$< literal 0 HcmV?d00001 diff --git a/skins/kama/icons_rtl.png b/skins/kama/icons_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..83eee28ac79d5e00e8ec9136ba491c8c0a2b8352 GIT binary patch literal 5600 zcmX|_by!s2)4=a8ARPh%N-P3Ox4_cfB@H5qGy($By+|l4A=2H5fJk>NjkN4n7U}Np zWr^SV{_%dE=iZrf&YeHz+?hLbPt<cARZ^lyL;wJgs;epKV<iOu;E@yHV6{(4Uz)Lk z&`r(E0|1Dr{#_s-J(CVQ$!x8ruMGhHPXGWG1_0<gtlR<sF9879wgdo)Q~;oL{rb9B z1psh>=URr!SQ{oq#k)HIN4x)lj7(~3>P0*^j(~u{t`#FBUsza}6bdaQ0v?L-RFVM< zEX6<noJ>vq<>1aUH2KahTya!okW>YEqM~wreSK#S+C!P|CbIn}0b)>47&5w-lseEv z1K^sT>c#D1g2?)xf*rH=7iWJuz56MvP&DsD;6AVw@u_uTewRE0Ck7@GP<mwl>X~~I z*+oAwyK?V+Ny(#l2CNJ5|Lq?h9#1so(8<bO-`(lD-@~PgJlGuQ3U!-yAT1~?ym-Y8 zX9IL?`<MH>Xk=vQ9QVgI)|-cXDRsv9G&BtNEoZ&y4&f%c`id<-eId59%_d6Q+k2$S zLl+kp9W#Hwm6RjYpn&l3?G5<)8fWt(-92c3Gh$9}_tlri)8)l&JRzaGThPYe|3tL4 zK7IOhiMbNi(gHoUP?|G1-X~dKU!R+zEGsX+y#-&KZTR~73}wL1<7fmmbUD?O&+|nY z<yF_0sRXsu9xExmfB!x`J>CC@{X-d@%d-=*2U&+}%MEY!eSF;k<`O9lIWSKL_=)b1 zA9*s*p9A9J-@cU}?%yX6t|a5KWKmGc%gesT;NpvQP)kb_DUMT1$%%*V{rK^NO<7q^ zPw(#Tj*%&Mad9yvC56PjzP7#|ox$oUNO~KOo6&JL;R3L{UK7;RWK~lClv2#Ds(O2S z+tGnY{82?BCgzs%)6*~1ISpxSYHH!))4wvX*X)c&qv_@4nUYZiDg}(@HN_Q;cWHo5 z*RHZhtb>EY@pQUaCUS0Ts`;ytudi=P(@suK4z-l*c?#3u;9#yPq-W|<&|yYWSJ&n} zTt?TNzi#7!q~cv7I5;>65Ed@08o9kar!t?Wf0Psv9S>F*MQ5_&sE#|n51cGC-8x!f zQ&z>-`g3-6#-|CVRB0p9`u!y_jZ#WV)OSPlO9QRJ@cP!$`rh@=A7v#aC8ee12L}g- zhlfW;N5{v<CnqPTr>9uk^Ye4;TfV%!#QJh|b%nuTu(5h`bA$CAyIsN3zrSH~0OYB! zV*tplPuT$grM9|~yrJ*(ZYDaw0F~C?p-^G-c*d0GsU=NV=k8}JW@60&tFK>c|Ef*z zx+HjJ6lc{Vy^Y7TBGViti4&TJnvTV38|y2hZE&F=s!!T9>~hgjno5F5N4vi4?+ob@ zA>G$*qZYP9#9iYXTbRrEK$(kx`IBsu4L*sBmmpR%mUuN!4=PytI@q-x{dA;Yz(y!d zt2mcvq-@;bX@Wb>PX**GLNprLml21JyuhG%TeIXfb?!nMWVnKmSVJn&^z5wGlV70s z)L+@uS-F&C*oIWp?^VToR%`8jpP$N{q*0{LIsLW3;fPBGf1az}og$7(;RP1o8r~!5 z)+QDQXFXizLhHNWZU;kZb?~?X!Pb;3ok|N!n%tHE$%@0rO}EdhwP5nN@A%Vfh(8B> zpL(qX?PVyCb3ax;?C<ZtW8a+gv^c1jS3r7coV}wR&tfj#YA&$`YokO)K$Pjlj)X&w z9v(b2pP!W5Wn`rLKCwXI0aoeEbFrh^JdhYH-LtrrG92^+)mj-Dj=>R`We)9+BG!!@ z3OIJ5<wt_fJ~~sI5234g`27BeUkUbe+X)z%nm_me!@LjTD+6@gn+9^b|HWcsHS|K4 z>3SqobY^9#yF(_heJ8virW?Z4E_K;AUgWXCbJ|DmdcASSDDJuT3GY@>;<5UdTa!fH z>o~SfKY=fWR1<`mUwHZ_2pi+5n^a@n8Pr<?NUX9MaRp=a2XzIKr=-kHtt<?q^fW^L z&T26dxxaPi;wVB>TS4|FJ*fyHijQtO^?R(UOnL70cv_(5<Xe20dbH?SA&`*kqkf2a zQE_o`=s$cGf>KgQ!@?To{dX*==px_HX}h+a@iD7Y$|{P85HkB~Mi;2^9uBSBX^^aJ z>XFe|N9$S9*~d1Q?urF_t(O>7g><}OxB<R+{+|{Is5KW&b>!e=lTZBj-)Sd4z!p!w z%)qlEj(TY!16}Ovbm|%oT)dvK$no^{@=ik|X8I-nagmOO9-kkzw~vmtsSXEvG9Bz- znZ-1x#j*Bduo-mD<UcpuKi~FmaNd6V+D<0cBVdD37~;FP*ctS*<75U^UXd1Rfef6Y z6<~oV1x|6QuZE3Z&^t=HguJFiGaI@V?$zETvK`BBs>Wcx#<cxgFVqpKXQxjv#ID!2 z`Meftiql|$gg>P>_}gcwA=Iy`k!lkg7xgN@4f#wP`HVd`QJ;3aA2+>Xhm4sMu0T+w z`qn^L%nBq=-2xWVQ)git{m~D8s>j2uRppKEZp+zp5f@e5^QM}pq_iAd%7f!z^vAe_ z%cexI1TZu*5{L4>l{3mKt)4Cg122rsjLnT6ln#fMrq@}OZsV2`Y1%Ly+l=MC@@6`d zo>`+?oE)m&-6JnXypUGiyi1<T{X=D3R$AI|8Nt;sJ!5NRWF-0UM|I#;ZTVnz0s!O6 zsi(~E8+LA9ap*m3$V@QSI*TllP%A4PtmZNI`+Vf;Q_A&;XGn_PZuD|9yu7bGE*n)d z?ZPM?TP6}kv6F<OQEmcQepLblG`nIMS<mT#$v*iEVApU)Fp8pUIy^jU8u_%YuC7X2 zp^MI%a-}b{Vkca%?>yD$d{g3$<?eq>_>1jYmHoH@p9l=U0s{AsR%6z1q6OED1O)oZ z%ajZ{Q!Qpl8$U!<Khy9?28Ne*x*~{adqn3a@T!UyoVPv{m{l~oEp-)A{@$y`9oNoE z2AUlucr~_a3Fia&M_xm757JcnNhk6%nI1%Mv9iZzs<j2FH<rUB)1YE63RJeRMD>r5 zKhV(C)s<qhR|3|M*}nf2Lp_<BQ>5;SyGl5D(Z?LI5urrr<8TVQx;zR{s`ZpmfRc8e zHmx0wOjSzSJ^%=%MH32vwR`{*QmRI3R?L8JnT?8<gi-P@t(<K44UU9PQ$)s}52#cb z>6J6V2i;)}j`$wD@=s~CE=Y#94oUtC%qg%}TZ4hkgdl296Vz`%*a$hk(^a^34@LGQ zv$-W~IkG{-il4wKVLO{I4GqKd^I01Dj3VtNVfie7SL#bRIv0k8;BZO~E(JY>L{NJb z$I_XIvG_N%x~JqfRdM&!_!oqfM&-C>d`chS@bYKTV)COxnLTN_UFM?P^NpZ^b+tZR zYsr!C2?nEf>`Ysx@iAK-g~n1NtGLNoji?34x0PER9^$Y})!qj{G=nA73;P*}TylHM z_0sa#oq8J+lz05b7q+xz{!S*mE1nz&B@4;!wA<T7KPV`BM-4GZh(GFaFStyFM@RF= z()X%{>I?dFcgVuk(-#gdFj>9JR_w=jzfIbo59a~BSb{^`-39SKw;x9=Tgl=F1ExKA zFY$pC8p4!d5DjlL8!RWxQ-YBUbF<_IWgx>L_{Ld;)wCSVp;`C3mMjHQ$vz@|@WZw| zDF~3B5^9`9KKMw-N4Q;Ewb^9%!a6Mlf_wxB3Xxl;Jai=Y!m3OK=x`}Wniqa*%Ut(n z2VS<JD_>smE{dIWmW6jOxlOsUvoRDWM&1N><miVZ9plM677l0$m(YvMS;g}IKLP;Z z$Hq*@?6|-rIq4Cns-Svv@J*?Q%~OCRi~dpb-7N;C%JK+b3A0;s5TuJ7Rk`(3gVn^V zVJme^pc!mIndQDVk|lmj3lBg2I~}&%t`6;>ezGevz$o6|-RyuY*R^z=QMl1a|A2om zqHx+yG1#Ow^0c+Le+|L^ry8wsOVawB&*A6#oNQoozjTn6zkR1d=b_xediEH<#Z^)7 zXIlR38o7Jp8C?AQ{C5fb!ABK%#L(P^Iqw-4?t{jac-6^@IUqNs;$>5H&B-XYW(uE0 zz$2KJ&+b%J!P2PY!OLdPA0%?cHFhKEB2JSdVy=Iy*Pa1>lROEtt+qI@-4SE=p=2JI zGc<F=ZY?%87PGpGTcN3e<z=tm$@)l*-mg}yOmdkqHnvKkO?0`-NEu8{G|k=pxX`*% zRUPpJcwTKY-|A=kb5_r|-e#$b5_qDS%)^OkVXt=$aL&V-J(@U&$TYdVNds(W+R;-9 zx_oA)eKVY#GoqDkg*JI+D!=MS_>*{FHddAo6RlPWz4I=4Vv8kvz7d{~Vd*{G=*>;0 z2`$cb!7Hkb(Jv(>AqmuBy6;eL1`oo)!KvWl`*LWkPVljw1wU}~jSx(U<?)PY#l90? zSfh`o{kIZ7a+88{?>S>PWPe%Xuj=0j+{|q>wS<^U;b;sJ94dz}@XSXjCMD@mmXw#5 z1`f!Blai8*Vl_fFG#t4oauX-yU|}KtOQUj@7-D{c!*NB>&^mOQ1Q+bFK73z~hX5BG zig$4+1P(>C5!3LPy8R@iAi&*kyLi<?(u!V}zL*v6=fg=|;nNw-_TT<~f1eLJnD?B6 zI{jhwps*s?e8%FA1O6mS{HZDbJ~X_Xo_HCuWZ3$c?UpnGMzKIa$!znsB3Se}vdxLk z>q6m$8I|J1JuAl8CIR(iTMXbiibRN$ZysE5U165Y?oE?3=LOK3Y$qNk1=AcxRs<+O zW=6%MK?reoVQxK*??ANBAZ1cfbTf5QQ4yK)hon(nUS3-O(X-xEgq<l`p8OpbtZyda z(>pscs9&=;F&N{)%^f0y0&`?Z`mD@0alb?ut@jWcH_AJ5y4K~|`L6Tz3`gK(y5m@{ z5IK8(73My-?tO?aU<^z-0EizA^Kfj~W%_yd*35neBHvuYC7Zl{{V=Vu(|!WenAuB< zNdmZXq^*I5+4saWyf17p5PDyi^cfXAewmZu&pOXhODBKC5yB@OXS}aJ;tXq?%JA5C zIE99|Ui&SNRns%oBRZs}Fo(#D>T0}grqhvh<A%pA#;}9Ho6cB_s7($1ZD^Qm_Sxd= zYjX<=3q4UxmLn48s4IJI?YH+CnO!ktx6_!vBI7q*>xgX67<o5{q{UA?ym9v32N8df z&>!O}<)4O43im1OqNzoG%Ib5z7@HC*W#@s6p@h#{N%f^wx6PidJvW398kNsGhmD*) zuIEx_G}8ZW2-lx8F1Nz&c|}GFPi?Yb=?={}FBJ+h+ZS@9SCTO^N!%g1Hw6_MIB@OZ ziWb}$IulkPaL;m&5`mcpBU1Ol(R%a(8V?J|<R04ocaNy3br<*g?J#(GdI${9=P+<X zhM3jnTcL&QoBYpErHpJZv^k6Zoabl4|0D`FOOOwIujYBt=I<rK=_8_<x%M5sIr8K) z){uGF7B{?!CdoHcu`}OK4$pdsqs($xf3`ik$W;05gMw(eH=g3ef`j>qFJSsAf8YE6 z#*G#{Vu48tL^Qfs&21PF6eTwLmkoghs5YC4IpFzUjG}or=2)M5Y7oZo*(dU98VQ5A z@)Pyy;jf-`9>a-L%t}6N**zHSU=s)G03_!VPjTzobU`vt4eV3;^>6F&ri3&&%i8C_ zoW^>2{MHY^n>{jJlvN-4ZoShp$ouF#*1{e}%3n^ntB`6SQkV1u`eupd5)6t}zxU&R z_NQ*%H|Br~{Wdmzwyh_i;pxilccMqJ^RHjn;^gOl-B96u4@m4^Il652s;d)O1(CI1 z{qfp)>*VA#P!LD_+#HL6B2!zTTV(~djb5KEh<nw1I!gkSv>hXoxXGmsFIUE-FXDs& z%ShzA)ipBK)owxQJ|K4%dk?ktkH+agrNe<WFe0sohgBW=q8|z?<T<6rWw10rGF<oq zbU~LWS(K}+Xh1zFQ^?uQ6~Z|IpquFUU9#|w5@2gSoB3A$0(jeQTy-|n!tw#2+kWjO zGabCWJ8Io;H>LxkdokZ}cD<-8E75WiWnE*BQ<9dIFFB?{38`zlR^kHZ+6fmWs*K)l zkx!pm-`_uVEi<`roqL2C3i8KAJn!X_kZhKk_<3_iURwi1nu-+t-W-L04!K)7?*Koi zB8)J$D7U<!{dw)INFz5g6sU{dOBuN6sOr4UuHY!|2-(@+kzy?7fCoqn6ILKSO=FMn zHyC!}BRPu_*KsBveIuL>)U`edqBEve*3()%0bd@Acxx;0Cn5`dS=`(4u(OG8F4qG> z$5#4HN}xpX<bQ1en~htRxRS$trY3~srEOIJHin|X*oM3nE(r4p`4#0U#4TI=43aJe zN#};lbEP-H>0f>hT#ZEvc0yty)_V>0M=Kwt5j{uUc!6%ba$Zcbk>8dZWn$%*FV%?f zUpg|mBQDFW%f5_V{QWZ=5;?*~4UTsDsNUQqwll4x3hst~%>){C)I~3bs)ozl(1&Kp ztmjcCJKt4^5BsHY57Bb|S`l$A?9yyH%SuZw=s;%okKn`59&J3HMaSN2rgeJp%FJ;O zNinMnVypQ!6CUV>&vWO+#-inW9~!AC%BFZBI<Vh}vxdMXm?Z5D)A)j`=9gzwE4z+l za(9UvT^rJ^n9Pnxf<gliQ>|MXDqaQ6mzm^TZ2$2*$e12)63)4(O(xf3yT9KyIhX3y zB*+DGwaSYl?0a}s$r|1TGGSX0U%2W)Pud5Q$)w~cz>Z9@{Y8t@aNW-SYl|i3G_4nw z*mD$UTH&ukpd0&d)BUTEa2kEEMq*H-A$ixvK+lF|JbY7@#D>-J9Z=7-of?)M-swC| z_~p%AxnBJAl{(4`1S|A&3YwD9sPo{S?TpY3n9>EFP)3FGywa{zS7C{790O<Am|4n; zK6n6%(mua{Lw*5YDm&~4Vo~vf2Jc3eDc+@INZaO`NgehsI4e)Au%^{!Q`G2?u!1nP zHt%#Lvgw57N6l=@-#;EJTH$ON4QK-0J%;$5#A8l#X=f2=I`k4ZO5#Xe7P|gD0kzc# zVK||<fS-3sL)XFk1MGLvsF(xKM8_Jz`oRH7Qd?64*Zf_O%Klr{ZgKOCbHQyJRH{4m zE{RtX8n!fwf8g342&GQm^j|A@V-$4L$!P5EqS#&bu{o9@aP>aOTYAE+slELc5gQg5 z+PzjsYVo_GqT)&szo~HNFw{2e_tljynaHzNA|Na*EQSB|{x+O%26-q9OtrP_7%D1u zhdP+t<lz7UmrIKkk<At<x=Jni0IYMaCBy<%S>{yfgl2F3OYY<ICu{o=1H-NmEB)+T z<xY2Jr#$z6W25BR5C*9`dc8o~7AEn4<JI<0On$!-TdPmjuqAgN7j_2$eh(~<z|M5n Ru%}Fby0VT^g@WaW{{hG4-#P#Q literal 0 HcmV?d00001 diff --git a/skins/kama/images/dialog_sides.gif b/skins/kama/images/dialog_sides.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f91b4753ad672ecbbda36ddd0522f6f93dadd1d GIT binary patch literal 48 zcmZ?wbhEHbRA69aXkcWxdUfvq|Nj+#vM@3L1#}pI03^e}#NN}-!TmCvfx#L8L+uN$ literal 0 HcmV?d00001 diff --git a/skins/kama/images/dialog_sides.png b/skins/kama/images/dialog_sides.png new file mode 100644 index 0000000000000000000000000000000000000000..1042a61cf9f3c3839d1c4fafa0ad9d83396253ef GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xp=xbhE&{2`t$$4J+tA0B`Qsl z9vhhqtp$qJRd?FDPMdF@e_dDMD`Urf=8xG5b(}}eFZ`0d!ouSpw?IAXqxlYhq!kV@ Y*liGXlBs6f3N(+w)78&qol`;+0EeeJRsaA1 literal 0 HcmV?d00001 diff --git a/skins/kama/images/dialog_sides_rtl.png b/skins/kama/images/dialog_sides_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f7b49fcc3ed5a8fa763d0ad0372f86c8582b20 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xqG@ehE&{2($V8fPfJKhU`;Ah zc*d3_ry$0V<ftIVnpCJTt>x09fWpQlD(0qaDhB!Y^fDE`igwg9eSAM}o@l*f2hbU8 Z4D<GL{eSw`^aRjI22WQ%mvv4FO#tQFHbwvd literal 0 HcmV?d00001 diff --git a/skins/kama/images/mini.gif b/skins/kama/images/mini.gif new file mode 100644 index 0000000000000000000000000000000000000000..54d910741607aeef28fb9b5882f77f14a3d975ab GIT binary patch literal 183 zcmV;o07(BwNk%w1VGsZ?0HOx~nVHN00DyOQcc7r80DypIW|;s0|NsC0A^8LW000L7 zEC2ui01yB$000Agc)HyFFv{5oF_bJUwc?N^8lWRyWF#Iz8eXjXprlOQc&_jKVd<V* zkW!KqD<>P$Qd9j}#|1MMRnVHftai)I0hk4V(@-do3I{afTNt=~7q!&zhQ}M^!I~t% lw;gm1W_k-^4+91Sga8FY3}$4Fii8ejXLS&6nq4;u06XFIMo9nw literal 0 HcmV?d00001 diff --git a/skins/kama/images/noimage.png b/skins/kama/images/noimage.png new file mode 100644 index 0000000000000000000000000000000000000000..159811305af7fc78662a53949f9c62bd702785af GIT binary patch literal 2115 zcmV-J2)y@+P)<h;3K|Lk000e1NJLTq001Ze001Zm0{{R3yC6tk00093P)t-s+g4WG zTwL2!RN|kX+gMoQprGyM<>Ho>++t$jfPmRaN!?~<++bkXLqpg`M%qnH+*(@WuCC*= zv+nTj+f!5FhKAvZiQ<}?-*<Q0S6AP7c;J41<HW?`k&)xc$>EHQ<H*S4t*zsuqwn+a z*+fL+ySwe><KAv=;;5+MkdW{9_2QG0;?B<7US8Z-SmM#q;g^@%PEOu$Z`n&r*g-+v zY;50jblg={;*^x^-`?6vO5u)<<HpA2(9q+xwd1j|<GsD($H(4vcHCuU<Fc~k&CTF} zf#8CI;-#hIyu9!9^4m~Q<IK$Ajg8}~s@q#z<GQ-zwzl4FZR5Va-f?l@eSPid=HtS` z-+6iC#l_lCP})&Z?(gmI^6=xZu;aJ4;DdwWo15a8nBH@9;+>t|a&q5ubK|eC;+&k} zgoNRWitg>}<EyLTi;M2@@8Yek;fRRaU0vXOeB+&++DAv?nVI95nBHV$-DzpvYis7c zz1?td-+Fr5NJ!$Ip6>4K<<ipQ!NKLv&)H5+<e#47w6x^Y)8eC}++JSl*Vga(_t-x_ z>ekfk+}q{E#Me7J>(bHOVPWE?rr?K%;Dm(Xm6h64Q}6Nb*FHY!#>MR6-{6IX-+X-I z%F5>4+~J3Z;f00e!NKCVxZ<&~;;O3SqN3ugtl@%!<hr`sQBmW#xZ}&q<gu~izrWpR zXyd1++fq{Ej*i`GYVPal<D8uC@a^N&)Z@d$-C<(t&CBMmuI}>i<fWzW^6%ow$>P1e z;;ydZ#KhvOtLC({;-aGCtgP(Y+2*ma<h8Zrx3}V_r{kuk<+{1$$;se`hUdGw>)hMx z+uH5p;oyjf;E9RksHoz~%Hqq*<G{e-goEIUir|Zj+EP;M)YIXUljFI$<e;D0RaNN7 z$JRMH*g!zpN=oI<&ek_K<f^LKQ&ZVcP~K){=(@S&yu9Sr*5tCX;hdb}!NKCg!{V~C z<j>FIou1*CnBt3z=eoJ#jg8})n&6C#;Ej#qx3}JMbKrV<S#Yci000F3Nkl<ZcwRlw z1F-Z+6oAnl+cutU+qP}n#&6rUZQHiZwe7vh%<flHneNKzTS?H$uc3*fP*Bj=v130% zQBfbUU>7tBO*{x<B|7Nh;^-KaxNXG>tyZfK3kwUxgN0tN*J@X6OH7P%ba6R|MjaCq zA3fCS^<jZ|d202c|5K~gd2qmlqefBCqmx<;sSoAkjCuTc2mG+G#h5WU;PU{VeE1`Z z(gy~fIRs|Mj*N`Z(9pQAOoc)jZ~!!BqtFfY_n68Ejf=CgN=<zQZQY7pQ#Yqt#l@L$ z&Y2r1@H<>trNaG^w6x&h;0X}?rKOdWz!A`Z9|xkD8K>f`UV#Y?778OHBSXx=QYf4d zoK}L{Q!~*TtJJk6Fh&?D5QJPX2q1&OfL$*X3k0A6uYHxe2KBE^0~AtRv$6lS_4Mtw zjmdb8w%ey$-|jzKQydZk_OE`ld4h0VagD&R{(3`^$bu@Iv<q*NkZK_+YPfD|5P<zb zxEWnpSA4o<V`K8%DHbCmBSq92k`W@+P>Wz|F(np;w+L$1T|t*mx13G3-F40Aw`c@9 zL2Z;#D6&TC32e8>&v@;sZF2I)mdogy^|n{%#!lK$`8FOL+{->kqn*o!Q&9ZdT8hya zJJ)vob|e5rp^%1ahwoV6vbpfmrNU;DyYo|7C5b{g9~)~xp8^}MtSyt#I%b%psG&iG zJBt||G?}cda+pLp|0#Mv83t8ePNQkM%(Af1?7Hn1&|J&A%4#b~576<-vaWL11-=d% zjn3E4Bu&oGSEtcv9DHfzU9xYFqYbj3X$xMyv<nDG(n&h9oBwmo*&PyHQb2&6=A|#q zwQB<+x#CQxtCvb!8Qs|;lM`ikGgh@q>zk620x(KK`!SZ(ByE*QR@b!~_Z6C8;XY$~ zUEONQDrvnAqx;eCz@ACxt*$HG6s>%H00x>89eAybjwzilk+fp83w8hb?EbuE^JAhJ z4EY}FF(BrSQGb)G7>t<GW%KSm{ey-ap5D8OF;%;F(_Qn2G=Ijszj(K2sc?GV0omQ0 zUmDHGY9FkYnq85#b&*+0|NdvN9jA6^4=~kWuCiL?7mvGm>XRo_^U^P?TAn+Y1rHE_ zni#6(xk`Dp*RS@tv%k3M@Zn7t&6_X1D#9_Usz<Aq4=TeeGTpsiSm17UI-#eBkUkri z@h|$^2dXeCL3O$E@TvhDubx{|ao0;=L;PM`+TWu0rMqW(hbv1_3^p#kua~Y|I@Nya z5tf30r}*LsY?sREJNJ6oz|a`PsDN>MSrI*i%%e-j6MXo5XJ>^opYKB$zvO6U3O$0= z3qz|IC~Lr`ua^};XHRw(6BB$8(H!zg5bq|pvFFeuV5s|YG-%VelSQAyCZv#&k664V zAt7N4cG)c!6Me{hf)g7X>XnP+d$Dm&DP%HHygT2`jc3lyEx$laRFL^?xRj&toe^}W zHa;0GEXa4`dHDM?hdMhuhnW8UJfP3tD98k-IT0*xQ~{2_R}dFsjM>TMT3T{AmK;ki zcZli18~1!6BBy|?LIZR*fvg}FjN^S6;&M40&uLiiJvkf>m&x=PS74Iv$cEj9I}aw8 z3u^H!bBh<h=Ww|oKmQDq>8Q6YMezoAmY&mQ&3gCl6I1WNV$>{I@G?DfCd0dk^LaeL t9L{?@PmZPK&<CDd0a3vxu<5Moe*xgDR7U()XIcON002ovPDHLkV1lp=pwR#T literal 0 HcmV?d00001 diff --git a/skins/kama/images/sprites.png b/skins/kama/images/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb4e1c6c37e5ffa475f73bb252adbec70135ac4 GIT binary patch literal 7086 zcmc(EWl)?=ur3<hT^Gn=8yphc7Fe7t79hY9Am|257WbeVJV<bt06`Mmg9H-X9X1dw zfyFi0-S4~So_l}Y^XF8Zs+pRecY3;}`swL<=V>HVPo0dInHUQTi%e5P)c`ZnVqp=C z6F$I5Jto1NSXeBcnySi1K8xra5+9?Ph5-}8r`Y=J#52$Ex!;CRuoLqUn�~;+yNk z0q<ZHvnGMoEPrN#8kZaM8#|pF-Z5h*H4%cr9HHryI7BL7AQ7Go2ak?e#t-0$sW)1B z8|Z%!t_ks~_Av|YvKq~(ySPFJo&)Pfu@!N?uDMIGl1KIa?_o-zn_dL;SjG_Z#c81U zlVuDloZhY+K4<+$2H7w$?-u^@JZP|$zPOy_$&1X<Rx-rfpn#lXnN(QJ8%fG{A`iLo z9~Ns#4Hy_Ce0J+9?W{DZc@~l3<dm)}we&s6xuPM@8Su2>!muQ0T76HFX6vPWK8Ivj zBU46ro#%PE;MC&Q{F22)n$sDa2Vv)6E4215vB*X6b?Pnarm48KwI2D__7-*h$d7Me zo4<lhtTYoQ*@leLybN=HPzq|*0Rn^GR9B`uUm9^dj@OHU_?2;gqu=bE%uY0=aR~?t zs464F-{_=4;u#(vEa{j&Gk6<EOJ}AEi@ALtt<x@4GFQT_W&o%}wR&dOw%6kgX=`&A z&vEMxfa<HJ99ACan(9A`oZvUM`jBQ_a_Sc*^htn$ZBTH~Zjj4Jb+I_Gt)p;RhF9%= z!jSv()Sg32`*dsU@%POX$oa!vpruXm(+nwlwggJ)GFn3e32Um3Gpb{>3*N53=$DzL zlamsK2%wJB9aUPg?JXY?P?=4*K-ITv;cxX#rt{T;*zoZ1tE;dl;<CvQ?QgVyHMC0f zzXetJRH4hBoEJQ0dH=fOm%EgUwiN5A7}D38k9N_OnseEjnsZnbNx3hEq}<9-Z66X! zCbaI<?BhOoj7(osNRDQr&r&6%NLRHuR>n+%?5IV1dwHnDZx(?zk;WL|(-S16pAMJM z0-T!jlQ@!c7Nd^KL)DY789wfaMYjEtHuv(VdBu_X1nh0corx!R`VA<dBAJN?`r%Cd z@l!rqSp5L$qjBI?1l>6xHlwG#w!NKH7bh-w(LVYhr1n!it*#BsRLe>SrzA=7^a(-A zI770Mrao0>UwiGxT0&i%2#i6XfNHXmwE~*4uU$k@5ughOGi2gf2r*=CyrkXQ+A7ri zs)jMpA|%Grcf(zm7$NYIlf>*hnEuQEl-S5IT)-BVo@cG+N}h@L<<0AHU}8>A91r%< z?vU;zx%lv~YH~V*{mYm6n!_YhQ&SVbTHiM^nc?AC6BtirJ#hgiC%Qk(#Czhp9L*DY zhH*h{(5;^Y(MX~f>1(k&1;1ZiHjgoPR%cSE>(87UHRowYv1O1-{Spv;3~w9K<qD6| z;R?Uj#Vr5q{0ao8JNz34ro93fkX^+w(9>fCo-Ea2_YTcIQpLwe%4!KDr4R;SAxyOJ zWT+CNB$1Sz7|;U-fZ)qC&G19rWUT*_BQUALMi=5IgMpi!A~PISn7nm8zOyv)pB|U~ zzxm`p(#n4^bWVxhJ$>uoU|*=2|FM=*7l)gh+mV`&9|TUWJv2?J&$#FPU_pyJUK$_a zQWn?47<4*JvV`ClB_#PBqq)d4>?WI-mzPkb&xnhP7olI|K{T+rw^+<GUx^-~32nRE z6N7)v9FaV|+1S{?xcpv>iawXL2g(;N(;qPq=4;JCsf5Af?`_busE{1{b6UTSRX0-B zu^%Y?f}`Ng$>wpiSCOXa_Z}Ls&${}}ACaku+z8%6=(4-ng@vv+Y_{W_l+CTf;{`OQ z5p3uJj(9|URrMyRmrD7UU``-zc%wvd<5I80S=|yR6mTfPPT52gcRl-rl34XT=hx^i z^d(F5D_jHF>A5+7t_yC?>$|>v#@~of{^^O!>|aV|6{fEP(nNkP1Fu*vZprUL5V4Ix zF=>n4>fp`MA-5c$jM)H=!O~~9_c++s_L_uh-!9ZaiYt6-u4$@8O-KFwUk)0quB(FX z2%lxmwR9hwdz0rrK{;RMgl0KrYD`r{Lkqv|p5>eD`Dek*%}I9m^M5x_Z6UL_J;G;l z`^|~mrk>GD<nB!*Xm8J7LyZNAR&<;3*}XTK&7I%)fBIFpV%ro`wX{!QYz*G%hb)t` zSL&(0bk$xb{aL@@vyo|FY`p38>a^Y<TuxA9Z=n@UR1T&wJ^<1(-`moYZ>wrd4Wu#+ zqiju{J;Q+ir4UCKhi-Ed1HSMhm1HF+P5w+go2$yzC%2xpM_qH`cONWx*Q~}FYy1`# z798K7)7abFGh^!@nIo8(nE0e%Nxz(EGjS&Wxl{e&S(0w?Sfla$!z7X}i{U(?!V-7E zrA!RfR$c76HbIg9|0o^MSf?LJr?P4}>^7{NyQ{pI*l2oM2}_x83s|*Wp`j^I(J6f> z{`ZV<m|cSZ@UpfmJeNI{Rg1Na_ofU<pdzd@Oe!CI2JhbH9j?%Bf1S@LQNc%*9~S(4 zEPNb&Yej|%JYPHP*q)AXpdgL_bnwNFS-eY^qVFBEGy?>=-b{?2nAknIms%_H6_4~% zD6O>~<gW{pJQW~X33zUKIlF4zjwbDseZX;dd>ws}9VR7<eUxO)7_`AfI>tmt-XV3R z;ke(7|E)`^2`+B-bMUe}lqjd7cMhS_ULd=k;K#KZz`UODR6To@#RFp1*VY-eW_6F% zTQ~afNG*CSZs0H`8K=NO_}*~#Q&JAI-Q$M^HNl91k%FTfkpNGVKDb`@VZ(|jLWQEQ zTwdU+-jK=-9T&Rv*9I4<uK@r=N|^}sHmi^!iv}K7mj}O$BG^^;`bZIbpwlB1ovi6+ zDS2}|Sl#Sz!9WVruIs#`&Ge-ZNJkLUTdE&t+)^FLGaQLNf7@a*9hKX$UXp1Nw93nM z8W+7ZD*|H2wUxDY#33p(?U4s+Gp|zB2_M9I8n&)gf6npv&7D*Gg6oG{!DhN9JOJg( z7<9bu?l`(5Pv#~sGDuAxQ(4g^z#e8oXzh^6sTn*^7N)v7FLZen9iOgHDlXL3Y^%!L z86Pe=A-1fw>(9{PM8W;yvV16D^-}{b7x;kk@LC=5HF5%2G6eY?Z<7Xml`rWuv@@EN zL0q2B4@t{!YpAX-U7zetprGL8;qk&cDme!q&XC3Q{?*ppu{bZTo>$t-AF|XE*I}8F z7Blp?vZ4G8^s%Mbojk}t%MJ`Z>uM<}EAu{q5fVh#21|{+pB0m;rdjV3N>>-Zc6U@? zRu+fnOM(uF;iW>Yd*20WO0@H|KHMcMFm}FC;@}GKUTxpcC9$R>VhK?BHLfT}j{ESJ zsH*si?3agI6T{4X)QKV*;$BGzloUMfi1}!1q6CEiMFua+Dsp8j1F(QuYLkPDcuFWr zC6B8+Z5fXE-_d-Xk~PJW>lH#tX6l_KctDD&CpvI8F5jKSeG=xb&w<;$3k_k`4kIrP z=U`aYe#y|`#`v`SJL<n)%rjKDAH3fQs70^VC(4I#sNz-sxiNlW&~y~n^D-oU6|cFA z2YXP%;;A^<)TasmBzbf5WhHG&#)li{Sa@gxmVQrP0XM#n0BSm-@nm2yx0C3|wEBAV z^tL<Ih>s}&Eed8MeRImDtZ3ccn#8u18Xw^*7_?|a77m+X_$n+PW*rt~ul-sPO&}j1 zpkeWn-%+#YbjtWA3tg~(T}H!chN(Y$wpkWsu!Al*zyO_ii5N?iVi;-8?zCFzT=T$R zrDB79WP9MyZ-E1HYrdJzWco$pe9*SJzNmJ;lb4;nJfY!&ywS)3+99Y?C%~Yh5+g`V zd2E^i)5?|Zprcsogi9DtM57_oNU2z+wq1S5;K!JM+73IYsBO^z;`H)f3{=GOF}4)S zq+2AGsceUkO`Wg+75N$|S{Okr|7~x|V};%sK*9jt8Ens2JAm!2CYC;esS{_XR9#65 zNs@;DY;8>)bfl*%MXQKrYuicW4eq#tihf{}iZ9Cx64om{_yga6Do!Y#IhAgTRFG3F zNx1Sfg3L|vz9BYllXzcd=rLF*_NP$nxsn}%H+4dwCAO11Fzn!~{f!8_hiIUxU<t*j zT_3THCx!MMf8cU3WPQvjF(n9CBGwva-<FkTO@TRfdF+#RGKvSNNWYs91zd)yvZDcs zq0N=UuPh#>mlPbn4%(fC1oT~W2?VGjWy$j<`%GQCX*D|pL+XUQ7t>i6`4aeG9C<Ln z8Kerh*A`ss48{@i#Su9;2wCIyNWUlkIVc_S&22pOQ%Qzv@#9ske~*fB*7cs)pJ2L* zw{A)9oFnd3fm*^POaWlPQ68edLl{>mm{<hP{?qwAQ8^>2$)s2SWH$@!_MAR-g3So> z2(#56|AwpvH}Xy;N0D-OekQXdQ3xGvb+eFJp7<_fT}-C45ObyTF5)cwe4>mX9l~J= z_Q)i&PE>d69yic}HKA=Ax7vqU<U|c#x_<nPV^+Z5^h2)BZi}u^5y{Vx13N;=c1Rs9 zoXPi1>rdEw!5~`qrbGc`f<<Tg?+^EQ@U(SV>(pih1}+1p5~k|o4m>i?)A-qBiJL~# zF&}~FSj{Hi>A#sD+`QMj<gT*j7ffjAUmq#bwo<b@HN@bgV~4;_)u$f!D{Q`rl>A+M zu`{VqJoJ<r(b%aTA;rb8Bs9y?99w}B!|1BoArw+4u8bhthPV0JZ|qra7?9t@+8G=K zzeP!C7^uTT2#uaA#@>Sxr}aTaNFxXXl*tmyZWXhGA@P(ORCHhK0FQa7eN>&egxfxc z-FwiF9|k}K2)HG|AorM)V65Xq_cACH4g$3Q)Rh-W7Q((;HKjdN!o^#C`{E}`q~_FZ z08}Ilu37BTXUd^q*_j-Yo2AB+Z*1SEgY!G)^m^7PE8m*C`@?MDb}0%pny*XU6qd~- z0q_67A`#EY8Q30`HF!?xko<u~F*u`cc<c~sS7m=0;<P?mNuRAR$_W+SJNVu~*)s8R zWp`9E6rJU~YxQ~==rjb*3Wfm^)Y`kWTa%h%f3HNMI#mZM5BIS1-mU_27Z1Lf`WS47 z5X(I?h?zKoY);%Z5FbK66Bs+2E2Hnt$<i%1x_72O?wx#eyj{x`hC{y<xgT^grwSXN z-nn~QlY#bT_+F7E;0z0V>^E)hpnKuh$)bxhW#O9A;yb1v;Z!{z!s2aGFia-nE2B>5 zT5KyO!reqocPw#wz6>I3V5?p<LlU<c@i<zvoWSur6fJU39uLMY6cjdDb*iYqqqOTD zi7<aakAI&XU$i!zrHbu8L`OZ2SH%|^mWvf5vP!9pwk6(Vc9ta_<{Oy5)Uu`|1L2}j z&m)PKIt?b4%zsnhP7Xm!ga2~IiA7)|bRcd~K~7Q7&3rIQFp4(w3{{9z<|d?;8U`va z0c928mX)$AWxx>c2Sd|CgjlqprSLCWA86w?c9fRiSvpd8w*1PbB$5}G=AfC)n8Gn= z3sMNr%Lo^{tnbhMG2+`wbQ?gZ82A_@S0XMdvv@`6XM-~sp4Y6!c`6&ni<my)JiYWu zAyQP(Q+AspB4&r<fD>S$11iu%4I0V-N76w&cGn101s;Got{WBajK|E*h!hJYFkdSe zGGd2@MlO7Kp>wmfzNLX4cSpIWly|wABKF-vzx&cdgU2XSj+(%?9V*85WNP;vD$Jp+ zR%HFAhxZ`m%{d~|i{0+Hkc0hDMv}WW0{&^L*Rq%UQUpb>O%Q+T=YF=`zKR{xp{t2> z+cMLV^$C{2Dtes-sZ+T9?Lz~V?EqAq&g?McFgc7j5`F9_ksS1K{arL+u6$tS|L80U zYiy(gx+xI{(=X?72Ig<6%Ztj$OH7~tajH)Z`IDum9KrI~^-pQRS)L#9tcKFrndRZ- zP6gIJT(&@`AyO9d^|m*jF%`aUi?eLF4&C|)fusEZQZh{AK&U+aIMCgP3s0v<(wlX( zDVg+w&5?S3tCP*Hk==M<>n@|`*@U{yl0MzM-)R|Nay1oPwiu8TPizcwQg`61p9M4; zt-KX;GHwFBLQ>6JNRt`6KASK6+(O6EaLi+L+4{J&!f{(=aBj{PQ9TvC3V8phS~;S| zv((WMy?9kyU_%XJZF#QdR@3}^^E(jVH24xELG<YnAci=qsID_0`<)aIHhf6EpvO9A zf;cZVVS=#=3qB~^y<@?gQ)Bev%%m6dz&#$PjP0)wOHGxDiUfT<RteL$kBD6DyvdK8 zB_ARu?@Q-1HVcB{r={It8IS5q=NB{qj6%7u$G{m06dwg99IM#q(FX})F%*t_iiXz6 zejAT?ya1y~3OjnVTb#JWw3h~GKTHgediqQQG|Tr7F4*ti>8WQ>XdAtM_cTTiN!;F5 zLog^HVBi~U^^~mP{#p%m=%wtC;;a5k5#N$Fv#IhcOADI_vzxO7994o-vmf32@g=-| za#Yegn}%y`SQ9(-hiG9gMY`u>&`Ujo1%(#r4C=)zV0JXImE%jj=y)%MpA058Mq>Sy z0R=_p1jCFm0|Ru?OPN^9PaY&BOhlV!Vd=0SiOq#$^jaaAQbA4+L(C!h;Kgqf3o>AC zU3~WwHAWgIm8^#ixTUaYP*_o23BCah=5fOmF1D5us^6`<U0Ix)u%?U45(+(*W+YkL zcw=lZYP`tVye1GEaoAr+2WA<4hM86?LhMu!;6*rL)ozsjl?8V*jJv+GW|F*n%+J<n z)_DiLt5@biLwR{>WMsNzsOIK2+r{9L74kK6pKq$RH45U5-x2(R>?|oHa>i2M+E|jV z!?L%l;?b<O((T|VV~!rPb6YT-3-{M9E_S*!_@}-6!V4>=r-eLUyGRe4FIDl|wXy92 zm{%D?7Zb3H*376`pdEzJ{tnZU2CohZ)>}eMObbFp2wBYtv6Bx+*f7LGfVuCXx=LLv zNt{;1UV^xA$58q-6?5_+xJX>i17-IwKN&B1VHIqhmfv72stsuKycGB>+&FsYF*cn( z+&sR+-87Wd^ACwR+LZYiKKn8Qud$@WE&~r-Fb;@TwQ(h3-M#$$m;3E)VHIy9ae9h$ zPYdr2={-l4Z6VRxfw^y)Exm%R(xMMLURXD3VsxsH6@9$TZmTHz9Kacn=o1T*a~kuC zm-wZ~s)Eo7KQ!sP?NjM1LL3sU^E=IsX)QURyW<;fJ1AGRhJiuK!-Zj8pEnbtGiVZG z>^^_kBFf?|K_{Q%aVc?7rmHS1@!q62$2Iq+p&mY{b-1_cdnKAK{}cDzKw54Ci;Rry z1EonKg6l|ylect1JkOQlSo|8qx?kTCbJ;Sog7dMml4a-On&!{$ZdB5xm<_3DS~1Pu z!c)#_?rP5JIw})Hk^H4@pOGjLwvSwH5Uj>KWNiC7R1lzZ%-N^b=YCBr^qJrdqgrfZ zi-ko&VCt`e!otF`CA30EYiny$;@s@)c^P)6I&QWL#q0PE`7sEoU*`zE4bCJm5)6aE zwkIbiT{ky3R}xsICsjzHW@f&BCW_Rb(%{ZaPoGkSO*9IV`9v~KL-z8lpT5BINW-ER zd`>HT_k)kqi%&>sAM`*Pu`|w3Zlm;>E=(r6o2{av!jI_dokP)j_`EVH$M?a(KN}nm zUN=TWL|ATAi8s%`>tQH+_`rh__xrWX=+{x;X$3RGqvM}0SL$EZZKUW4s%~*({(a5& zQMbwuxrEBOv>7@t(M4D!%KZ2u=Mu6acsg~xEe*EA>j)E^a%ji=o|r=zp6qfEok)1V zq*%R>UY|X&oC1%tA&dJ-9x`y;y|l#>Cv%R*FXK%7lRJpS#xJH+RQ^s~(0oF4JicC0 zm{d2_kQCQqkmeFsDCO4t?l$4KA6APw=L<{V>x~<Fd+xuqODTkFUjAvmU!aJ3^%Vz- z+Bq{~CrwssWXSmiiS>gd!Q%73v>IUFNc>6C3&$QCvvhlH?|FEOI*i5T*5cSZEb!BK z3o|EukFKf=+hq@IOb*Sq{1EB2FjQw~eu3kF1HNn#q!S-WvCk~K6*#E<U@x1KZC4W* zUw_w@<F@x0tR-v^ZZvEp!@0C-zc}<|q%*V11`ZfX`MZzhd=u{Vj5<%NZbfIHX&yJ) zr9%FN*yp7A7YDq%x8Fz^r~y<lNV`6e|12Ciwio(rX~1MrfcM$_z{VXs+#UM}boAiJ zZC&x413;;Heja!|@9%Zp_JqVG`#j=>VpYt*^*zs>>P^NaVBM_`g+^PUZBL5Pa@Utu zn+h)!x9{FJj|GhfeZBgHbB(;C%8Ek&qR<{-PlCnVCA{PP`{VrN@NAtay?Fs57c#~X zWFv05=na!ai|-Mf<%Qf@$h~b&&-E2f%?%s)KGt)7XNvT|If~umhz~n))EetUF^u*1 zwXC<K=Y|qUj}4Hor{8AFY53W*zfzP`hlTk7J#!QA&+9w@+gGNm-nq%<&NSxO(dtH_ zJ`$dkV?(3jU%vVVc;;qoKDo+xj<ud-6s+gP{(W=qukELkn@=ZkZj{gcO1H}N|4B;q zCgb&_x|*Ny|EZz8nVd<XsZnYeB3-g0`-cRb(#xCX-8VF98%e}4pq;+<BbgBpyZ&$# z+kywu{C%M9nzspka<kx<CnQfTm@wuJ(Q2}E#|M$qKDUk^3K2HiadR79{HG{3{-_hd zQp>xhaIb5B{{O7j{1>$9|5Mlb@6~jATmW?}(Ogt(UIv1jr!jpV!!p05=CpA956W0L znQ#q`DHMFbkkP>yF8S^ohDUy@8SY+<;gXq>l|&eCaxjuLM(q`*cVJZ8FskC1KBbEj zs`Mfgv-$wDLW}8m$x13Jy`~sRBUvdh@RkrGQ6`6=4ir&9sELVpwI+ta%(bKbSXCuI z1%w(JP7MH|#>O*4Kqw5hx&nk+SS-%~6H`-XegG5G)91T^HyZ<M_1yO)E^E%VIn1@r Rm^vJmrkb8=HTcEb{{;yeZDRlc literal 0 HcmV?d00001 diff --git a/skins/kama/images/sprites_ie6.png b/skins/kama/images/sprites_ie6.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb305c8d360e647fb2cd15714a408e8eb6a3b21 GIT binary patch literal 2724 zcmZWqc{tSj7ygW)A>9;;tgTeGESZGNEo9$9i70DPmQX~}UJ5NrqO?g0*S?3bjj_%c z%b3NCWz0;njIoZH`Ci@se$VfpbKdhl=a2K8=e+NE?BsCruZ;>D0RVqlTbaA8XITIc zIC1zoT6~-;vz}m)E+>zJ!X70y03rk@J6DT!62L&NrpP}Uh+-|UvKx-k6%Dr5XhFim z><_p*JCSt}y+^>Hq1cj^2<<RfJtVfK52z-R5E77%Oa3wg98=f=N|b+0QeXyV&0)}S z7{?MG5a_>RzL9ISVZj;!*}&%=#UVS{MdwYBi`cTO0_3`V?X*lm1Z?T7;)<6t<SCbb z4e-v%uAWmVz5$kf_d~vlYk?ZjMJ4Ex`f7-#AXJARY6yiNfWnUmqK%+ynw?1il=ef{ zjiFdWDCUGP{siF}fD(}8=YYNr?i!I_1L*#7;iIF=&%xFPy72LF&^p1$0IM(Ii?3j` zEC4V}Mf4cx__ecnLaggIKNC!R2GBe3`wJ+@{VMzf_IEPo^T5mxu<#w|^su3C5`{$t z(08z001WU`P$A$IfwZ0tM*TBo6{Wm#0F{9Z0x%uoR908;D?v?FT|;%1!@yj1ZB=Vk zb#rxtJ#kuCtyufB2C9|h|J+blU;AMgQQd$R)^BRAuk$9(3hGs%#w|^aEjd&GHSB6^ zs_$+@L+HJ}<ataJI+q4on=nl+=x=n;+0+iT%C%xzpf>dY+G1zhI?&G>Q^sK1!sr~R zO9k86p3m47MPC_c#|k?S<2tYrV_c|9vt(kounX1M(}C^5-5gu!>+b6A?W$m^<9i6V z#uuT!L;bzo1l+)F#&RXwkkX4I;Rfs3$i9BOaL9m2z&B1E?H?pS!>GpJ7Q{gkd9Z(w zIDnqEq!I_oL@Ij5iAti;Ny8+{aQm#w2$?=gCSm71$Eg%5jY1z88=+Ij=o1Y32%E;3 z9Hos;&?m=P(_`!@#sqtEYLdm6W=_tqnA20Ub5rc8nO}3$^W5p*^Ro+!voo`tnHla9 zhdZ~#UEwayuPrU`mif!8i;FzL>e>p#TNSQBYXY7S;wu${Pk*jD%EjRnKur<@{}jHq zC(XelF=eauLL%JCBN70~bwx<Zz`)xq`E?QzWo>VP7)ETB(A<rpD_mS>Os&oTc8wuT zQy=^EN2_2ssR}=~Z@E`ax@VDzzs-1&lUDdjT9y&0u3WY)#6G<if1$S8^Nfenwc@C= zR|3-mhy@na7mBZt1714#%C$5;I?|ktV{!$`+|1GG<{j#;^IZQov)8@3?_hxmpQQK# z`Q15bHqBdZA3Xa*YH0ABDkeBG)^I4xB)a}h93dXlEj=|Qr|orS_H0af%R`HwbpvMm zWn|=Zgv-8ij`m(N#ZPJW@qUaBB#lTdd7<N_5#eSlnSHI{8RxQFXSB3gakyaORK^>5 zanZs2QNn$Gj|h_F9KTImbX9B1q3n2^pK?Pcar>rFV$sKf>CE$Fq{#-RE#+BbzE^Ee z&2UXQdJ#=0Ek;XwdY-PVsHiCGXlMSg|C0V%$Fm}eUBa+U?^w;wE>f9f%Jp~q6n$`T zh?exm*>7dT4T6=3Z|XJ!j4Dj&7GT9C){D(`%mO7cP#S_q&|H-dw1C9%Ay5EgNhTf> z3+Jn%RACD~iSF<tLPR6y+)nC>Axh)6Y-pkLXUk-T!@>RE{tr}5wVYn>5K1SGO9Jmz z(Zq2-kOGOYjwQ|@!t>$be05Z%NYow_5?*6=x6Owu++>rtV7kdkoQTg3vKlXxf8}Cx zAScbmCJ!wljJc(YDnQjd6uWYQZxZMkD)iV?tv~y>b?8Du#-W-@j%Ccs3*);d50<xF z-q+;!b|m$&vRm1~K#d4;$|W0pH7TJE*<qyt?hNx2QHp~p#fd(Z$R{eN*4&oe&1Y*o zHG|z%Qwu|cC2igDDPBAG(Y8JKdhxI)&ectqU*a#`^NWgf)#g5?Av@a@&y*o+jC`+{ z<E_H>k`zA{MMn_6CdaF6&ct7~eLj+Gsu*{pX>f9&Q}N98s*qE1VSarzHBF|OHF0&B z_Kt6Qo6ecmX+=jzdxlXzYFFcwC*?OrKioTKziP5KJx^aYIOwBOP+VNlBaBm!Iu?h= z3r__h97(GZzlz>hJrl&=|I$7N8<wY6en5+;SpL<}H6a!I0HN2s=XrxDD-u9IGx!m; z@ZurNcHep9n7v=quFbKsE6Q{*sNZzh9ts*>==$GM$)Oz_eFvk}i7HoDFOy>bj;AFh zC1*7DYidp;L|J2>60%I%PCGfx)kaX%U#Gn@Y%ZgiWIJB{dvw=HS?<l2F>epC`a8~_ zlag#Z{4Y6#j>u>0gj}2?c3t?~w#`0kx32NYPdXvQM^wF=V&h3RU&FiFbt_ekeOZr+ z<7xL>)!ycO*1x{iUDQ=vvT*V7j^XOq*!b+vr4ItJeY<7!uSRm0+7+f1UzX>_U%l_| zR*x7hB|2XXec#Q~E8Q0u#GHsxxD_9w%goC1TE5Ux6ldu`*%M6TY`&3{`PSV4iNxfP zj1{(PT?!8N9>qom2Tu+d8W?DMv`|A!1(B0oc^T?Au}PC^gzw*j*6d$1>^1Up+}xCU z_cIelV$18?U%R`zxvdEp<GE{{>S;rBXJvZRUkUppPN~oRdP}m94)U-SoWeLVY6~-l zb{5}BcV7!~WWFNg3>sSH({oB~rL-2)Q*@96Egp4CUtH?P`^<PbFV1QF`2K@IIGle* z_laD#&%V=hZiDF_&KI`Z2FgBhPuHM4#9~Vij;r942uAMip|i}T!-?Lo@c6APx$FxI zRnrGDyV$#SYL7JA)vYVg5MUIEG@_4bdxlr5|Lvzy+feEH%scu>j?1Jn+a<B5ytTE| zRNGgt%>vQwA5@ZIm_e{>OlBSmGT>-t*3N4tI*75P8b7RROqpL3F~+}dN2vpYWUT*N zggu;fBr(O_Aa>sWZPvxUFV_C4g?{qNaGWy`978+vM|3tGrHosl_b3N)z1fyJN98}< zl}5MoTH!mC#c@K3&F9NhpB<;jeYgpDTBta9ZAZhrPzr~!Q&S~V-n1vH>LC-v=_|0f z-V@q{IFK@1R7o^8l%a{RqNODM%=>fGmo3@;dYlxsqwfO(8J{J(I!?l5ROb$HV2LvU zdJ%02_zc23J8jCPmqt_(oDV>HW3wV~m$|*L11-5%QV#_=qyp=<wl>RPQC6tbshAdy zwiMH*hT81a?B|sqpw~ycQm*3a_fir%AAy&|ge1z2Z`0KFhT#J2)Y4;d`zp+0pJkov z%HsH{t2J>%P`B)gOq1_L?DaB|9*OsVv78a*YFs<o{I0YrX-G}+p}OF9|M^I*#8ip$ z>&?4*Q*_NQ(v+$iHZSh`DNWVjTM16Th!c-hb@t(#=lQ?{ueOpILr$#OuTJod^_%4r zT8nn^c;}4?k!cj}gVVo4eolYLO@6R<4Uw|2kLQw>dN$#PmTEbF;q0;C)jZ^4XQ+l} zO!&*fIX2eupQc<>v+1Kp>TmtBO+Wa@EB`ah{|Tf6Y?uyjV}Z>+W{~goC*J~CQDf`B O6<Aw1m=_*Df9GE{Jc{c8 literal 0 HcmV?d00001 diff --git a/skins/kama/images/toolbar_start.gif b/skins/kama/images/toolbar_start.gif new file mode 100644 index 0000000000000000000000000000000000000000..1774246c2ef37fa17cdcd971b3db38c713989818 GIT binary patch literal 105 zcmZ?wbhEHbWM&Xx*v!DNYH`cTMJ){#5iK=Q6WWtDtnAH5a-ToFbl$Y$qHMnfGs+q& z!l!hn{{R1<0Spv>vM@3*@G|Itcpx(vSj09kT*<OnVs>=evpCkexyN`q)l}NV7#XYq D|1u-x literal 0 HcmV?d00001 diff --git a/skins/kama/skin.js b/skins/kama/skin.js new file mode 100644 index 0000000..39ac0f4 --- /dev/null +++ b/skins/kama/skin.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.skins.add('kama',(function(){var a='cke_ui_color';return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},richcombo:{canGroup:false},templates:{css:['templates.css']},margins:[0,0,0,0],init:function(b){if(b.config.width&&!isNaN(b.config.width))b.config.width-=12;var c=[],d=/\$color/g,e='/* UI Color Support */.cke_skin_kama .cke_menuitem .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{\tbackground-color: transparent !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuseparator{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{\tbackground-color: $color !important;}';if(CKEDITOR.env.webkit){e=e.split('}').slice(0,-1);for(var f=0;f<e.length;f++)e[f]=e[f].split('{');}function g(j){var k=j.getById(a);if(!k){k=j.getHead().append('style');k.setAttribute('id',a);k.setAttribute('type','text/css');}return k;};function h(j,k,l){var m,n,o;for(var p=0;p<j.length;p++){if(CKEDITOR.env.webkit)for(n=0;n<k.length;n++){o=k[n][1];for(m=0;m<l.length;m++)o=o.replace(l[m][0],l[m][1]);j[p].$.sheet.addRule(k[n][0],o);}else{o=k;for(m=0;m<l.length;m++)o=o.replace(l[m][0],l[m][1]);if(CKEDITOR.env.ie)j[p].$.styleSheet.cssText+=o;else j[p].$.innerHTML+=o;}}};var i=/\$color/g;CKEDITOR.tools.extend(b,{uiColor:null,getUiColor:function(){return this.uiColor;},setUiColor:function(j){var k,l=g(CKEDITOR.document),m='.'+b.id,n=[m+' .cke_wrapper',m+'_dialog .cke_dialog_contents',m+'_dialog a.cke_dialog_tab',m+'_dialog .cke_dialog_footer'].join(','),o='background-color: $color !important;'; +if(CKEDITOR.env.webkit)k=[[n,o]];else k=n+'{'+o+'}';return(this.setUiColor=function(p){var q=[[i,p]];b.uiColor=p;h([l],k,q);h(c,e,q);})(j);}});b.on('menuShow',function(j){var k=j.data[0],l=k.element.getElementsByTag('iframe').getItem(0).getFrameDocument();if(!l.getById('cke_ui_color')){var m=g(l);c.push(m);var n=b.getUiColor();if(n)h([m],e,[[i,n]]);}});if(b.config.uiColor)b.setUiColor(b.config.uiColor);}};})());(function(){CKEDITOR.dialog?a():CKEDITOR.on('dialogPluginReady',a);function a(){CKEDITOR.dialog.on('resize',function(b){var c=b.data,d=c.width,e=c.height,f=c.dialog,g=f.parts.contents;if(c.skin!='kama')return;g.setStyles({width:d+'px',height:e+'px'});});};})(); diff --git a/skins/kama/templates.css b/skins/kama/templates.css new file mode 100644 index 0000000..906a72c --- /dev/null +++ b/skins/kama/templates.css @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_kama .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow-y:auto;overflow-x:hidden;width:100%;height:220px;}.cke_skin_kama .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_kama .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_kama .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_kama .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_kama .cke_tpl_preview span{white-space:normal;}.cke_skin_kama .cke_tpl_title{font-weight:bold;}.cke_skin_kama .cke_tpl_list a:active .cke_tpl_item,.cke_skin_kama .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_kama .cke_tpl_list a:focus .cke_tpl_item{border:#f93 1px solid;background-color:#fffacd;}.cke_skin_kama .cke_tpl_list a:active *,.cke_skin_kama .cke_tpl_list a:hover *,.cke_skin_kama .cke_tpl_list a:focus *{cursor:pointer;}.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:active,.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:hover,.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:focus{background-position:0 0;}.cke_skin_kama .cke_hc .cke_tpl_list a:active .cke_tpl_item,.cke_skin_kama .cke_hc .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_kama .cke_hc .cke_tpl_list a:focus .cke_tpl_item{border-width:3px;}.cke_skin_kama .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;} diff --git a/skins/office2003/dialog.css b/skins/office2003/dialog.css new file mode 100644 index 0000000..c8a8c23 --- /dev/null +++ b/skins/office2003/dialog.css @@ -0,0 +1,9 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +body .cke_dialog{visibility:visible;}.cke_skin_office2003 table.cke_dialog.cke_browser_gecko{display:block;}.cke_skin_office2003 .cke_dialog_body{margin-left:16px;margin-right:16px;margin-top:2px;margin-bottom:20px;z-index:1;position:relative;_position:static;}.cke_skin_office2003 .cke_dialog_tl,.cke_skin_office2003 .cke_dialog_tr,.cke_skin_office2003 .cke_dialog_tc,.cke_skin_office2003 .cke_dialog_bl,.cke_skin_office2003 .cke_dialog_br,.cke_skin_office2003 .cke_dialog_bc{background-image:url(images/sprites.png);background-repeat:no-repeat;position:absolute;_background-image:url(images/sprites_ie6.png);_z-index:-1;}.cke_skin_office2003 .cke_dialog_tl{background-position:-16px -16px;height:16px;width:16px;top:0;left:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_tl{background-position:-16px -397px;}.cke_skin_office2003 .cke_dialog_tr{background-position:-16px -76px;height:16px;width:16px;top:0;right:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_tr{background-position:-16px -457px;}.cke_skin_office2003 .cke_dialog_tc{background-position:0 -136px;background-repeat:repeat-x;height:16px;top:0;left:16px;right:16px;}.cke_skin_office2003 .cke_dialog_bl{background-position:-16px -196px;height:51px;width:30px;bottom:0;left:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_bl{background-position:-16px -517px;}.cke_skin_office2003 .cke_dialog_br{background-position:-16px -263px;height:51px;width:30px;bottom:0;right:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_br{background-position:-16px -584px;}.cke_skin_office2003 .cke_dialog_bc{background-position:0 -330px;background-repeat:repeat-x;height:51px;bottom:0;left:30px;right:30px;}.cke_skin_office2003 .cke_dialog_ml,.cke_skin_office2003 .cke_dialog_mr{background-image:url(images/dialog_sides.png);background-repeat:repeat-y;position:absolute;width:16px;top:16px;bottom:51px;_background-image:url(images/dialog_sides.gif);_top:auto;}.cke_skin_office2003 .cke_rtl .cke_dialog_ml,.cke_skin_office2003 .cke_rtl .cke_dialog_mr{background-image:url(images/dialog_sides_rtl.png);_background-image:url(images/dialog_sides.gif);}.cke_skin_office2003 .cke_dialog_ml{background-position:0 0;left:0;}.cke_skin_office2003 .cke_dialog_mr{background-position:-16px 0;right:0;}.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_ml,.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_mr{margin-top:3px;}.cke_skin_office2003 .cke_dialog_title{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -678px;background-repeat:repeat-x;font-weight:bold;font-size:14pt;color:#0E3460;background-color:#8db1ff;padding:3px 10px 26px 10px;cursor:move;position:relative;}.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_title{position:static;}.cke_skin_office2003 .cke_dialog_contents{background-color:#f7f8fd;border:#2b66c9 1px solid;overflow:auto;padding:5px 10px;}.cke_skin_office2003 .cke_dialog_footer{background-color:#8db1ff;text-align:right;}.cke_skin_office2003 .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_office2003 .cke_dialog_footer .cke_resizer{margin-top:21px;}.cke_skin_office2003 .cke_dialog_tabs{height:23px;background-color:#8db1ff;display:inline-block;margin-left:10px;margin-right:10px;margin-top:-23px;position:absolute;z-index:2;}.cke_skin_office2003 .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_office2003 a.cke_dialog_tab,.cke_skin_office2003 a:link.cke_dialog_tab,.cke_skin_office2003 a:active.cke_dialog_tab,.cke_skin_office2003 a:hover.cke_dialog_tab,.cke_skin_office2003 a:visited.cke_dialog_tab{color:#0E3460;border-left:1px solid #2b66c9;border-right:1px solid #2b66c9;border-top:1px solid #2b66c9;height:14px;padding:4px 5px;display:inline-block;cursor:pointer;}.cke_skin_office2003 .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_office2003 a:hover.cke_dialog_tab{background-color:#f7f8fd;} +.cke_skin_office2003 .cke_hc a:hover.cke_dialog_tab{padding:2px 3px!important;border-width:3px;}.cke_skin_office2003 a.cke_dialog_tab_selected,.cke_skin_office2003 a:link.cke_dialog_tab_selected,.cke_skin_office2003 a:active.cke_dialog_tab_selected,.cke_skin_office2003 a:hover.cke_dialog_tab_selected,.cke_skin_office2003 a:visited.cke_dialog_tab_selected{border-bottom:1px solid #f7f8fd;background-color:#f7f8fd;font-weight:bold;cursor:default;}.cke_skin_office2003 .cke_hc a.cke_dialog_tab_selected,.cke_skin_office2003 .cke_hc a:link.cke_dialog_tab_selected,.cke_skin_office2003 .cke_hc a:active.cke_dialog_tab_selected,.cke_skin_office2003 .cke_hc a:hover.cke_dialog_tab_selected,.cke_skin_office2003 .cke_hc a:visited.cke_dialog_tab_selected{padding:2px 3px!important;border-width:3px;}.cke_skin_office2003 .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_office2003 .cke_hc .cke_dialog_tabs a,.cke_skin_office2003 .cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_office2003 .cke_single_page .cke_dialog_title{padding-bottom:3px;}.cke_skin_office2003 .cke_dialog_ui_vbox table,.cke_skin_office2003 .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_office2003 .cke_dialog_ui_vbox_child{padding:5px 0;}.cke_skin_office2003 input.cke_dialog_ui_input_text,.cke_skin_office2003 input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_office2003 div.cke_dialog_ui_input_text,.cke_skin_office2003 div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;_width:99.9%;}.cke_skin_office2003 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,.cke_skin_office2003 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px;}.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,.cke_skin_office2003 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px;}.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important;}.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px;}.cke_skin_office2003 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password{border-width:0;}.cke_skin_office2003 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password{border-width:1px;}.cke_skin_office2003 textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}.cke_skin_office2003 div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_office2003 .cke_rtl .cke_dialog_ui_labeled_content{_width:95%;}.cke_skin_office2003 div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_office2003 .cke_dialog_ui_hbox{width:100%;}.cke_skin_office2003 .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_dialog_ui_hbox_child,.cke_skin_office2003 .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_office2003 a.cke_dialog_ui_button{border-collapse:separate;cursor:default;}.cke_skin_office2003 a.cke_dialog_ui_button_ok span,.cke_skin_office2003 a.cke_dialog_ui_button_cancel span{width:60px;} +.cke_skin_office2003 span.cke_dialog_ui_button{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -678px;background-repeat:repeat-x;border:#0E3460 1px solid;padding:2px 10px;text-align:center;color:#0E3460;background-color:#8db1ff;display:inline-block;cursor:default;}.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_office2003 a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_office2003 a:focus span.cke_dialog_ui_button,.cke_skin_office2003 a:active span.cke_dialog_ui_button{background-color:#8db1ff;}.cke_skin_office2003 .cke_hc a:focus span.cke_dialog_ui_button,.cke_skin_office2003 .cke_hc a:active span.cke_dialog_ui_button{border-width:2px;}.cke_skin_office2003 .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_office2003 .cke_dialog_footer_buttons span.cke_dialog_ui_button{margin:7px 0;}.cke_skin_office2003 .cke_browser_ie7 .cke_dialog_footer_buttons{position:static;}.cke_skin_office2003 strong{font-weight:bold;}.cke_skin_office2003 a.cke_dialog_close_button,.cke_skin_office2003 a:hover.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_ie6 a.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_ie6 a:hover.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:-20px -655px;position:absolute;cursor:pointer;text-align:center;height:21px;width:21px;top:4px;_background-image:url(images/sprites_ie6.png);}.cke_skin_office2003 a.cke_dialog_close_button span{display:none;}.cke_skin_office2003 .cke_ltr a.cke_dialog_close_button{right:10px;_right:22px;}.cke_skin_office2003 .cke_rtl a.cke_dialog_close_button,.cke_skin_office2003 .cke_rtl a:hover.cke_dialog_close_button{left:10px;_left:16px;_top:6px;}.cke_skin_office2003 .cke_browser_ie6.cke_rtl a.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_ie6.cke_rtl a:hover.cke_dialog_close_button{position:relative;float:left;margin-top:-55px;margin-left:-7px;}.cke_skin_office2003 .cke_browser_iequirks.cke_rtl.cke_single_page a.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_iequirks.cke_rtl.cke_single_page a:hover.cke_dialog_close_button{margin-top:-32px;}.cke_skin_office2003 .cke_browser_iequirks.cke_ltr a.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_iequirks.cke_ltr a:hover.cke_dialog_close_button{margin-top:0;}.cke_skin_office2003 .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_office2003 .cke_dialog_ui_input_file{width:100%;height:25px;}.cke_skin_office2003 .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_office2003 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_office2003 .cke_dialog .cke_centered{text-align:center;}.cke_skin_office2003 .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_office2003 .cke_dialog a.cke_btn_locked,.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_office2003 .cke_dialog a.cke_btn_locked .cke_icon{display:none;}.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_office2003 .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;}.cke_skin_office2003 .cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:210px;width:230px;padding:2px;background-color:white;} +.cke_skin_office2003 .cke_dialog .ImagePreviewBox table td{white-space:normal;}.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_page_contents{_position:absolute;}.cke_skin_office2003 .cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_office2003 .cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}.cke_skin_office2003 .cke_dialog .cke_pastetext{width:346px;height:170px;}.cke_skin_office2003 .cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none;}.cke_skin_office2003 .cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black;}.cke_skin_office2003 .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_office2003 .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_office2003 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_office2003 .cke_disabled{color:#a0a0a0;}.cke_skin_office2003 .cke_hc .cke_dialog_title,.cke_skin_office2003 .cke_hc .cke_dialog_tabs,.cke_skin_office2003 .cke_hc .cke_dialog_contents,.cke_skin_office2003 .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_title{border-top:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px;}.cke_skin_office2003 .cke_dialog_body .cke_label{display:none;}.cke_skin_office2003 .cke_dialog_body label.cke_required{font-weight:bold;}.cke_skin_office2003 .cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit;}.cke_skin_office2003 .cke_hc a.cke_btn_locked,.cke_skin_office2003 .cke_hc a.cke_btn_unlocked,.cke_skin_office2003 .cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px;}.cke_skin_office2003 .cke_hc a.cke_btn_locked .cke_icon{display:inline;}.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_locked,.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_unlocked,.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_reset{float:right;}.cke_skin_office2003 .cke_dialog_contents a.colorChooser{display:block;margin-top:12px;margin-left:10px;width:40px;}.cke_skin_office2003 .cke_dialog_contents a.colorChooser .cke_dialog_ui_button{width:100%;}.cke_skin_office2003 .cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px;} diff --git a/skins/office2003/editor.css b/skins/office2003/editor.css new file mode 100644 index 0000000..0429862 --- /dev/null +++ b/skins/office2003/editor.css @@ -0,0 +1,14 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_office2003 *,.cke_skin_office2003 a:hover,.cke_skin_office2003 a:link,.cke_skin_office2003 a:visited,.cke_skin_office2003 a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_skin_office2003 .cke_rtl *,.cke_skin_office2003 .cke_rtl a:hover,.cke_skin_office2003 .cke_rtl a:link,.cke_skin_office2003 .cke_rtl a:visited,.cke_skin_office2003 .cke_rtl a:active,.cke_rtl .cke_skin_office2003 *,.cke_rtl .cke_skin_office2003 a:hover,.cke_rtl .cke_skin_office2003 a:link,.cke_rtl .cke_skin_office2003 a:visited,.cke_rtl .cke_skin_office2003 a:active{text-align:right;}.cke_skin_office2003 iframe{vertical-align:inherit;}.cke_skin_office2003 textarea{white-space:pre;}.cke_skin_office2003 .cke_browser_gecko textarea{cursor:text;}.cke_skin_office2003 .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_office2003 input[type="text"],.cke_skin_office2003 input[type="password"]{cursor:text;}.cke_skin_office2003 input[type="text"][disabled],.cke_skin_office2003 input[type="password"][disabled]{cursor:default;}.cke_skin_office2003 fieldset{padding:10px;border:2px groove #E0DFE3;}.cke_skin_office2003 .cke_editor{display:inline-table;width:100%;}.cke_skin_office2003 .cke_browser_webkit .cke_editor{display:table;}.cke_skin_office2003 span.cke_browser_webkit,.cke_skin_office2003 span.cke_browser_gecko18{display:block;}.cke_skin_office2003,.cke_skin_office2003 .cke_wrapper{display:block;}.cke_skin_office2003 .cke_top,.cke_skin_office2003 .cke_bottom,.cke_shared .cke_skin_office2003{background-color:#f7f8fd;}.cke_skin_office2003 .cke_top{border-top:solid 1px #fafaf5;border-left:solid 1px #fafaf5;border-right:solid 1px #696969;border-bottom:solid 2px #696969;}.cke_skin_office2003 .cke_rtl .cke_top{border-left:solid 1px #696969;border-right:solid 1px #fafaf5;}.cke_skin_office2003 .cke_bottom{border-left:solid 1px #696969;border-right:solid 1px #696969;border-bottom:solid 1px #696969;}.cke_skin_office2003 .cke_contents{border:solid 1px #696969;background-color:white;}.cke_skin_office2003 .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_office2003 textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;white-space:pre;background-color:#fff;}.cke_skin_office2003 .cke_browser_iequirks textarea.cke_source{_white-space:normal;}.cke_skin_office2003 .cke_resizer{width:12px;height:12px;margin-top:16px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1088px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_office2003 .cke_browser_air .cke_resizer,.cke_skin_office2003 .cke_browser_air .cke_rtl .cke_resizer{cursor:move;}.cke_skin_office2003 .cke_resizer_rtl{cursor:sw-resize;background-position:0 -1115px;float:left;}.cke_skin_office2003 .cke_resizer_horizontal,.cke_skin_office2003 .cke_rtl .cke_resizer_horizontal{cursor:e-resize;}.cke_skin_office2003 .cke_resizer_vertical,.cke_skin_office2003 .cke_rtl .cke_resizer_vertical{cursor:n-resize;}.cke_skin_office2003 .cke_maximized .cke_resizer{display:none;}.cke_skin_office2003 .cke_browser_ie6 .cke_contents textarea,.cke_skin_office2003 .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_office2003 .cke_voice_label{display:none;}.cke_skin_office2003 legend.cke_voice_label{display:none;}.cke_skin_office2003 .cke_browser_ie legend.cke_voice_label{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_office2003 .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.cke_skin_office2003 .cke_panel iframe{width:100%;height:100%;}cke_skin_office2003 .cke_panel_frame .cke_label{display:none;}html.cke_skin_office2003_container{overflow:auto;overflow-x:hidden;} +body.cke_panel_frame{overflow:auto;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}.cke_skin_office2003 .cke_button_textcolor_panel,.cke_skin_office2003 .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_office2003 .cke_toolbox{display:none;}}.cke_skin_office2003 .cke_browser_webkit .cke_toolbox,.cke_skin_office2003 .cke_browser_webkit .cke_toolbox>span{white-space:normal;}.cke_skin_office2003 .cke_toolbox{clear:both;padding-bottom:1px;}.cke_skin_office2003 a.cke_toolbox_collapser,.cke_skin_office2003 a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -1026px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:outset 1px;margin:11px 2px 2px;cursor:pointer;}.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser,.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_office2003 a.cke_toolbox_collapser span{display:none;}.cke_skin_office2003 .cke_hc a.cke_toolbox_collapser span{font-size:10px;font-weight:bold;font-family:Arial;display:inline;}.cke_skin_office2003 a.cke_toolbox_collapser_min,.cke_skin_office2003 a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -1047px;background-repeat:no-repeat;margin:2px;}.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -1068px;}.cke_skin_office2003 .cke_toolbar{background-color:#d6dff7;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -962px;background-repeat:repeat-x;display:inline-block;float:left;!height:28px;!line-height:28px;}.cke_skin_office2003 .cke_rtl .cke_toolbar{float:right;}.cke_skin_office2003 .cke_toolgroup{display:inline-block;float:left;height:28px;}.cke_skin_office2003 .cke_browser_ie .cke_toolgroup{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolgroup{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup{#float:none;}.cke_skin_office2003 .cke_separator{display:inline-block;float:left;border-left:solid 1px #B2CBFF;margin:6px 2px;height:16px;} +.cke_skin_office2003 .cke_browser_ie .cke_separator{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_separator{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator{#float:none;}.cke_skin_office2003 .cke_break{clear:left;}.cke_skin_office2003 .cke_rtl .cke_break{clear:right;}.cke_skin_office2003 .cke_toolbar_start{display:inline-block;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;background-position:-27px -765px;width:10px;height:28px;float:left;}.cke_skin_office2003 .cke_browser_ie .cke_toolbar_start{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolbar_start{background-position:-27px -816px;float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start{#float:none;}.cke_skin_office2003 .cke_toolbar_end{display:inline-block;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;background-position:-29px -861px;width:4px;height:28px;float:left;}.cke_skin_office2003 .cke_browser_ie .cke_toolbar_end{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolbar_end{background-position:-29px -907px;float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end{#float:none;}.cke_skin_office2003 .cke_browser_ie9 .cke_rtl .cke_separator,.cke_skin_office2003 .cke_browser_ie9 .cke_rtl .cke_toolbar_start,.cke_skin_office2003 .cke_browser_ie9 .cke_rtl .cke_toolbar_end{vertical-align:middle;}.cke_skin_office2003 .cke_button a,.cke_skin_office2003 .cke_button a:hover,.cke_skin_office2003 .cke_button a:focus,.cke_skin_office2003 .cke_button a:active,.cke_skin_office2003 .cke_button a.cke_off{border:solid 1px transparent;border-radius:3px;outline:none;padding-top:2px;padding-left:4px;padding-right:4px;padding-bottom:2px;margin-top:2px;height:18px;vertical-align:top;_border:none;_margin:3px 1px 1px 1px;cursor:default;display:inline-block;}.cke_skin_office2003 .cke_button a,.cke_skin_office2003 .cke_button a.cke_off{filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_office2003 .cke_hc .cke_button a,.cke_skin_office2003 .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);_border:1px solid transparent;}.cke_skin_office2003 .cke_button a.cke_on{border:solid 1px #316ac5;background-color:#c1d2ee;filter:alpha(opacity=100);opacity:1;_margin:2px 0 0 0;}.cke_skin_office2003 .cke_hc .cke_button a:hover,.cke_skin_office2003 .cke_hc .cke_button a:focus,.cke_skin_office2003 .cke_hc .cke_button a:active{padding:0 2px!important;border-width:3px;}.cke_skin_office2003 .cke_button a.cke_disabled *{filter:alpha(opacity=30);opacity:.3;}.cke_skin_office2003 .cke_browser_ie .cke_button a.cke_disabled *,.cke_skin_office2003 .cke_browser_ie a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,.cke_skin_office2003 .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_office2003 .cke_browser_ie6 .cke_button a.cke_disabled *,.cke_skin_office2003 .cke_browser_ie6 a:hover.cke_button .cke_disabled *,.cke_skin_office2003 .cke_browser_ie .cke_button.cke_noalphafix a.cke_disabled *{filter:alpha(opacity=30);}.cke_skin_office2003 .cke_hc .cke_button a.cke_disabled *,.cke_skin_office2003 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled *{filter:alpha(opacity=60);opacity:.6;}.cke_skin_office2003 .cke_button a:hover,.cke_skin_office2003 .cke_button a:focus,.cke_skin_office2003 .cke_button a:active{border:solid 1px #316ac5;background-color:#dff1ff;filter:alpha(opacity=100);opacity:1;vertical-align:top;_margin:2px 0 0 0;padding:2px 4px;}.cke_skin_office2003 .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;cursor:default;} +.cke_skin_office2003 .cke_rtl .cke_button .cke_icon{background-image:url(icons_rtl.png);}.cke_skin_office2003 .cke_browser_ie .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_office2003 .cke_browser_ie6 .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_ie6 .cke_rtl .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_ie .cke_button.cke_noalphafix .cke_icon,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button.cke_noalphafix .cke_icon{filter:;}.cke_skin_office2003 .cke_button .cke_label{display:none;padding-left:3px;cursor:default;vertical-align:middle;_background-image:url(images/sprites_ie6.png);_background-position:0 -970px;_background-repeat:repeat-x;}.cke_skin_office2003 .cke_button a:hover .cke_label{_background-color:#dff1ff;_background-image:none;}.cke_skin_office2003 .cke_button a.cke_on .cke_label{_background-color:#c1d2ee;_background-image:none;}.cke_skin_office2003 .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_office2003 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_office2003 .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_office2003 .cke_button .cke_buttonarrow{display:inline-block;height:18px;width:8px;background-position:2px -1004px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;cursor:default;}.cke_skin_office2003 .cke_browser_ie .cke_button .cke_buttonarrow{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_office2003 .cke_browser_ie6 .cke_button .cke_buttonarrow{filter:;}.cke_skin_office2003 .cke_rtl .cke_button .cke_buttonarrow{background-position:0 -1004px;}.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar,.cke_skin_office2003 .cke_browser_gecko18 .cke_button a,.cke_skin_office2003 .cke_browser_gecko18 .cke_button a.cke_off,.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_buttonarrow,.cke_skin_office2003 .cke_browser_gecko18 .cke_separator,.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_start,.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_end{display:block;float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_separator,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_end{float:right;}.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_break{float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl span.cke_inline_label{float:right;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_break{float:right;}.cke_skin_office2003 .cke_browser_gecko18 .cke_separator{margin-top:4px;}.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label{padding-top:3px;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end{float:none;}.cke_skin_office2003 .cke_browser_ie8 .cke_toolbar,.cke_skin_office2003 .cke_browser_ie8 .cke_toolgroup{vertical-align:top;}.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar,.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup{vertical-align:baseline;} +.cke_skin_office2003 .cke_browser_iequirks .cke_separator{vertical-align:text-bottom;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo,.cke_skin_office2003 .cke_browser_ie .cke_rcombo *{cursor:default;}.cke_skin_office2003 .cke_contextmenu{padding:2px;}.cke_skin_office2003 .cke_menuitem a{display:block;}.cke_skin_office2003 .cke_menuitem span{cursor:default;}.cke_skin_office2003 .cke_menuitem a:hover,.cke_skin_office2003 .cke_menuitem a:focus,.cke_skin_office2003 .cke_menuitem a:active{background-color:#8db1ff;display:block;}.cke_hc .cke_menuitem a:hover,.cke_hc .cke_menuitem a:focus,.cke_hc .cke_menuitem a:active{border:2px solid;}.cke_skin_office2003 .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon{background-image:url(icons_rtl.png);}.cke_browser_ie .cke_skin_office2003 .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_office2003 .cke_menuitem .cke_icon,.cke_browser_ie .cke_skin_office2003 .cke_menuitem.cke_noalphafix .cke_icon{filter:;}.cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_browser_ie .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon,.cke_browser_ie .cke_skin_office2003 .cke_menuitem.cke_noalphafix .cke_disabled .cke_icon{filter:;}.cke_skin_office2003 .cke_menuitem .cke_icon_wrapper{background-color:#f7f8fd;border:solid 4px #f7f8fd;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;clear:both;}.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_office2003 .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}.cke_skin_office2003 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#f7f8fd;border:solid 4px #f7f8fd;}.cke_skin_office2003 .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;}.cke_skin_office2003 .cke_frameLoaded .cke_menuitem .cke_label{filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_office2003 .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_office2003 .cke_menuitem a:hover .cke_label,.cke_skin_office2003 .cke_menuitem a:focus .cke_label,.cke_skin_office2003 .cke_menuitem a:active .cke_label{background-color:#8db1ff;}.cke_skin_office2003 .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_office2003 .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_office2003 .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;}.cke_skin_office2003 .cke_menuseparator{background-color:#f7f8fd;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_office2003 .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1071px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_office2003 .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-position:0 -1050px;} +.cke_skin_office2003 .cke_menuarrow span{display:none;}.cke_hc .cke_skin_office2003 .cke_menuarrow{width:auto;margin-top:0;}.cke_hc .cke_skin_office2003 .cke_menuarrow span{display:inline;}.cke_browser_ie.cke_ltr .cke_skin_office2003 .cke_menuarrow{position:absolute;right:2px;}.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuarrow{position:absolute;left:2px;}.cke_skin_office2003 .cke_rcombo{display:inline-block;margin-left:2px;margin-right:2px;margin-top:2px;vertical-align:top;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo{#display:inline;}.cke_skin_office2003 .cke_rcombopanel{border:1px solid #316ac5;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;}.cke_skin_office2003 .cke_rcombo a{display:inline-block;float:left;filter:alpha(opacity=70);opacity:.70;}.cke_skin_office2003 .cke_rtl .cke_rcombo a{float:right;}.cke_skin_office2003 .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_office2003 .cke_rcombo .cke_label{display:inline-block;float:left;cursor:default;line-height:24px;height:24px;vertical-align:top;padding-left:4px;padding-right:5px;filter:alpha(opacity=70);opacity:.70;_background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);_background-position:0 -962px;_background-repeat:repeat-x;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_label{float:right;padding-right:4px;padding-left:5px;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_office2003 .cke_rcombo .cke_inline_label{color:#fff;}.cke_skin_office2003 .cke_rcombo .cke_text{border:1px solid #8f8f73;background-color:#fff;height:14px;width:60px;padding-top:4px;padding-bottom:4px;padding-left:5px;padding-right:5px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:top;cursor:default;}.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_text{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_text{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_office2003 .cke_browser_iequirks .cke_rcombo .cke_text{height:22px;}.cke_skin_office2003 .cke_rcombo .cke_openbutton{display:inline-block;border-top:1px solid #8f8f73;border-bottom:1px solid #8f8f73;}.cke_skin_office2003 .cke_rcombo .cke_openbutton .cke_icon{display:inline-block;background-position:5px -1002px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;width:14px;height:22px;}.cke_skin_office2003 .cke_browser_iequirks .cke_rcombo .cke_openbutton .cke_icon{height:20px;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_openbutton .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_openbutton .cke_icon{filter:;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_openbutton .cke_icon{background:none;filter:;}.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_openbutton{border-right:1px solid #8f8f73;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_openbutton{border-left:1px solid #8f8f73;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_office2003 .cke_rcombo .cke_off a:hover,.cke_skin_office2003 .cke_rcombo .cke_off a:focus,.cke_skin_office2003 .cke_rcombo .cke_off a:active,.cke_skin_office2003 .cke_rcombo .cke_on a{filter:alpha(opacity=100);opacity:1;}.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_text,.cke_skin_office2003 .cke_rcombo .cke_on .cke_text{border-color:#316ac5;} +.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_office2003 .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text,.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50);}.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_openbutton,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo a,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label{float:none;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_font .cke_text,.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_fontSize .cke_text{direction:ltr;}@media print{.cke_path{display:none;}}.cke_skin_office2003 .cke_path{padding:3px 3px 0 3px;display:inline-block;float:left;}.cke_skin_office2003 .cke_rtl .cke_path{float:right;}.cke_skin_office2003 .cke_path a,.cke_skin_office2003 .cke_path .cke_empty{display:inline-block;float:left;border:solid 1px #f7f8fd;background-color:#f7f8fd;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;margin-bottom:3px;cursor:default;}.cke_skin_office2003 .cke_path .cke_empty{visibility:hidden;}.cke_skin_office2003 .cke_rtl .cke_path a,.cke_skin_office2003 .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_office2003 .cke_path a:hover,.cke_skin_office2003 .cke_path a:focus,.cke_skin_office2003 .cke_path a:active{border:solid 1px #316ac5;background-color:#dff1ff;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;outline:none;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_office2003 .cke_path .cke_label{display:none;}.cke_skin_office2003 .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_office2003 .cke_button_docProps .cke_icon{background-position:0 -16px;}.cke_skin_office2003 .cke_button_newpage .cke_icon{background-position:0 -48px;} +.cke_skin_office2003 .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_office2003 .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_office2003 .cke_button_copy .cke_icon{background-position:0 -112px;}.cke_skin_office2003 .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_office2003 .cke_button_pastetext .cke_icon{background-position:0 -144px;}.cke_skin_office2003 .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_office2003 .cke_button_replace .cke_icon{background-position:0 -256px;}.cke_skin_office2003 .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_office2003 .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_office2003 .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_office2003 .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_office2003 .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_office2003 .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_office2003 .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_office2003 .cke_button_superscript .cke_icon{background-position:0 -384px;}.cke_skin_office2003 .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_office2003 .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_office2003 .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_office2003 .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_office2003 .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_office2003 .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_office2003 .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_office2003 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_office2003 .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_office2003 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_office2003 .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_office2003 .cke_button_checkspell .cke_icon,.cke_skin_office2003 .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_office2003 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_office2003 .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_office2003 .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_office2003 .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_office2003 .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_office2003 .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_office2003 .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_office2003 .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_office2003 .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_office2003 .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_office2003 .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_office2003 .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_office2003 .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_office2003 .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_office2003 .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_office2003 .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_office2003 .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_office2003 .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_office2003 .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_office2003 .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_office2003 .cke_mixed_dir_content .cke_button_numberedlist .cke_icon{background-position:0 -1217px;}.cke_skin_office2003 .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon{background-position:0 -1233px;} +.cke_skin_office2003 .cke_button_outdent .cke_icon{background-position:0 -432px;}.cke_skin_office2003 .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_office2003 .cke_mixed_dir_content .cke_button_indent .cke_icon{background-position:0 -1265px;}.cke_skin_office2003 .cke_mixed_dir_content .cke_button_outdent .cke_icon{background-position:0 -1249px;}.cke_skin_office2003 .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_office2003 .cke_button_justifycenter .cke_icon{background-position:0 -480px;}.cke_skin_office2003 .cke_button_justifyright .cke_icon{background-position:0 -496px;}.cke_skin_office2003 .cke_button_justifyblock .cke_icon{background-position:0 -512px;}.cke_skin_office2003 .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_office2003 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_office2003 .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_office2003 .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_office2003 .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_office2003 .cke_button_maximize .cke_icon{background-position:0 -1040px;}.cke_skin_office2003 .cke_button_creatediv .cke_icon{background-position:0 -1168px;}.cke_skin_office2003 .cke_button_editdiv .cke_icon{background-position:0 -1184px;}.cke_skin_office2003 .cke_button_removediv .cke_icon{background-position:0 -1200px;}.cke_skin_office2003 .cke_button_bidirtl .cke_icon{background-position:0 -1072px;}.cke_skin_office2003 .cke_button_bidiltr .cke_icon{background-position:0 -1056px;}.cke_skin_office2003 .cke_button_iframe .cke_icon{background-position:0 -1279px;}.cke_skin_office2003 .cke_button_source .cke_label{display:inline;}.cke_skin_office2003 .cke_styles_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_format_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_font_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_fontSize_panel{height:170px;}.cke_skin_office2003 .cke_fontSize .cke_text{width:20px;}.cke_skin_office2003 .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}html .cke_skin_office2003{visibility:inherit;}html.cke_skin_office2003_container{visibility:visible;} diff --git a/skins/office2003/icons.png b/skins/office2003/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3bf195dd35a2dd3773a5cae7e4712a1133a5d5 GIT binary patch literal 5598 zcmX|FbySq!)4#imfaKDPfD0%gAt}w0i!@S#APoW{upkJMOGrzobeAAVs^k}0QE5a% zX({Pgy5qOLf4rY_?wPrB=bq=8JI|f@oG1F8?p;c<Yh(ZbN)2^Y1A>GDaD|!_M$n>? z6PpO)Dn|XmQvk^6{tXDo$U+c|>~`t~Iso`_0e}qy;P{dtR{-!924K}10GTuZnA~4k zeOChj2JUGap$U7gtEgOF0+>z*0}7RvmUfuL4-*zPT(@OI7Kn+7QA$Y_kpX5&fodwi z%K5hH*Y4=(7%zXmk;ywAvC8cl!{izymzvty+1aHdWMjm9{mso`83?Pga*r`_a$092 zBOo%}(@$7G4W#PehB{|&&P-OhxK$}A7yt1g_2^uA5%u5npLOa?*h}mk|FUgIOL326 zs>2R)9`tt_S=sF*Rze6#!<$=MJA;k62nEHn%S$~EVj@HYez~(P1T*eLSy)tbXvrUQ z6X-c~%yqOeqEHCu&HkmurXF8f-TvE}nns(}lg|)aF(!HjD$P~CNQcQL6V=t#4N7#+ z;o)KH#8^q`dz`uy5bM1-hn}6mmLn0wQXNgWDgAZJ#D=}Onbj+zqL&wtrLo~VI@(cD zQAejIV%pje4hz*O!<|iv#l^*`QQGqN?=LQ(hx<#uzCJyf*n<Q{5ly{Y>ga<42{xs> zi*s}$+Ugvts-B*n85tRV6^_g(-J|_oDu(Q>g}M6220p$XfW1^sQxPiA3gyzPsK`g% zy9cDDOG@5vZPJj6Ra5a<b1JLm=jWWA5|K!@(#y+}sr;muQ<M(bsHmv8iAF2x>t9}8 zvR%)cnVCsVO{MUt`&d_ZoO#1bgz_SZD6@5c&=qi6Er@7o-B8ttN`1?7_wL2TMQbbW zO+^ibq$DP_%IkT^lk}ncrluCIJ{|L&8%<A+kB?cDl&+_Ykg653nSXd&*>IT-blcX^ zPvf1OoOZ@DB(sL5Rz{m%8T<PBrZ%qS=H}ANDIBC;@9yr-Gev$IJrZ%6kk!+(_l!a5 znG1bdVvtq2d;<*%3It+e<u!d57YB6a<1E*bU&JLrm46&(-GJTw>FgQsyU289d;TW+ zE{XQ9{r&yhS~0Y0Eo9mQiEq+r<>VxMmn0JFnGAauS7sMC&Z;WPOG``3%HHGg_^qw2 z?d|QIot@p?-Mzg%!rp^}145RMj*bYioSdATo}LoE)${XnLhOX&3X&fvA>09omw~P! zP+S~+1OTm;hN_a0@A!JwsXyIFdWRK<ac!cj0J&^C;t54NwowY=IZNv)qM<Q9sXjhA z!M);|`E0^%qQ%eW!+Np5-G_{Hu^nkxoS?ayC^XBOE{gK1E>48|Hcjl9+lS@@w}rvs zW0r%+r|Duh9@Iq(f9(I9fb7CMeqNGa`cG!5*XcI2^CRSOjj2F8Smee{xVO5JFvl42 zC2JN}CMc&W@g>)WQCw+n`k~Y-nwH;p6Y1*eI`mgXpB}A`Dl7;yPrD`4&<>pyc5`w0 zD$Ov9k<wNYVEn)j*aZa4WfC2XLJByQBfFJ2lhkk0Hr!Adm^IR-%tFgNnYugRM9(oi zFfgE0z7eIS@BR;3k=;PKWn<&*SV7sWFz{jz_nXieTEG95wY24}^Yt}{mJQOLl-6wz zyAYIlV&pMxv?`}{)%P@F3IaN<al#aVI4F#`J>rX5J9ZXC*dYAAL7UtVO+*;&5pQ{J z2y3h=XHuO6nG=wQR#dnG9CX!>DDRWbUzOF#JqeA9;^N{LkZq-_KYvFsppz6CU)Y*_ zT+qvxWoY`qMwPe5`q4B+mOPT}qFCiw@YY`q*`qz2hI!+cFp_wHQ_^?a+HyyQf2j;3 zkzSTL>QUjDR&e?*JrF$GDHP9||KoT!mFLg3R?ojGi^vwgqvgws4s-XG@4qhTA}~j) zN7GmGTok3wrg>CxTUVuMP&QV~Z8lOiR(zr(@$W`xMa*#`(l-e&Ci0srk2i*sffa|a zQ{n5RZ>ZRqmdYb*icO+7NFt;v0%hGd4EZYTm3=FYRPpA&GlIo8YLj1!Ao^Bh%Q!26 z)<s<$%_k@@{z(^eZ2t!{bMtq>CwtCh+8>fb?hlFU7!p@h45C(hSB5&`(>urev!w&q z)0{a|*vWpRbGL=Vl`)8!-kPThk`u+8NLI1FgJ&AsA<lL6PhZdwAK{+3Gm+h(0LXx! z<Kr==sBdsZ0i+FP6I11aB0Px;vz~TLEH-nzj9<f_8ehsXVVCTJtq7Rj_Q5XAFJFBA zoRl<=XI(h<eHuL7Nx(KLCqa@Lk7Q<MmJWKeG_No{sURxq8E_etli)Kgulv$x`K49s z>0*dV<R7^Fn`_U`cWl_cRR?VK%Y5k|X~WmgxJ{m;kVsM%!3Gwe+_`z!Y=RlpH}eR( zfPlPj?@~5>wI0S%hc`!3f14)}Cir!j)2^hbh9)FnLdSZkT5B^Z*P1GOfL&ZRu9K4D zYoZ-{c%mkCQR%c=MKWFTF)MqKXCV<K`W=UA2wwnIk)6hXkA%zDc>7*XHY!7Lp!09& zgFM3_8Kogbh#>SDaLRbAk4Z@eIxro>kGhnEUU>&SAajRO`~_5JzL+zE8>R!}m@Ch= zb&vmhmy@RB85h)ggg<6(ow_%~TZVDz(qKJrXyCoB&QQ>Sn9j<_I{u8e&i6%S7#7wa zpbhEM0dVSmkOUWO`{3+;muJ$qXVeNU?)X7G+Us#f0dGvFd3ey5A#pW&bpF_kbYUSK zy&xyb&rElCBE5wz_t*0J{8Ko9Q^lHavjc3KO`D<~b<H0D_PuD<D8c@o7ftxRhLSaU zo6x|b@^b#kPYDoZL2Xi-n4G|HcqqkJYwPJ-%2@WVqmGa!n1eNv<P<>~dDW(e_*h$- zqY-d~OED0Ua@bNXktx3)e5T0o9uLnckl_HF-<y25=g@U8e|sglGB4b*cvDs!6U!uI zX~;?Zgz<H&V=X=dCY5e)DcbeLAJ4Tye&tBs&9|Ms>+J6v>v070MyJ!e4?-fD3m&g( zED8~KR)7Bdc~87s!RTIOL`1;=uM$ORE(N-fpuCSd>Eg)^pnXaE&9+p9lq1||Gwd3g zl+ZERp5QfAv%@E{gtB+jA7FDPwE9v3C^EQ3WkAuJimf0bkw70HZaF3mzfoH1Hh6cu zYk0s~Y#_{rd2|QQwb-vGZP)vKE6>~PWn&I|^3_Gzh=l+Q#qh)2LOXQ_tlR@Rrl^j2 zj}z#&Z<c!k?6eR%Hku-Z6O=QkLr9i<mlFXKtLxjoxcTkTI}%9N2?%appVdY_2N5`r z@|6?W^2O2Fp}^E~w6vYhlA}>D<<yU5eKlEMEp(_UO%gjzC|Bn^jdPlFs6Eo2lZQ7r zMb{Ay)Wzu7RYZF75_7nnWU_MtwX&76^-Er+SEP7xSJwv|=m-0U>Ta_IXH<~!_STYV zU%ZHOm0-h(>%11#Z!-|qCvJ#%_IKm-+_9G=?I7Ui#bS445xgLi7a6b5tJC=~=AE&m zR$OCOr}ntVhi_@IalP-^2nM-g+f}n5fBF$8xB7{Vl&MfCb7L@`--<UcF(foJ6k6Y$ zmxm2?usT*&3dw{@0-Pvco(#bD^q8tk!g^9H9^rJ9MAIpVCN~w?;iN=>J@FfY1R4U` zEkf*R+2LEq0bPph&#U@VwNC(4Dt*r;ZoB2PJ?$xgb`>S<9S5Ltg$S!8iQ3#ZXmb0P zcF~-uTxt-2Iz8R*ifqOuQP+zhIg8AJWIu@@Eh!NcQlFft2<%uf%~Ni19EsYs0S!}b zl3JvFBv-m_9@PB*3;?~TPL=rZyy)ncwXN`M_tA!=Y^h>JYGO&$(M%W}-4YJ~jJjub zn0q6whb?*vzuwu-^?XsXz>^V^NFRwKhP~wx6c=i|UStinP}j+Z?Vc~z@PRyX2#`P> zu@`(2WtSA7wmy)M`v-xI#mMbLegd{L2$hkBjPIYW^?Oec&+;6Ai29(<wFKB7@Az-7 z7y@hGwVz8Sm1l!H3q7eqW@P|}DJUu``b+)!=(~T)?P4(P(ZS~PzHzOx<GOik5FMbH zzvJ?IZ+|M#d!ajdtsjaF_1PHzRDQhKjJIs`Y=Hu@+d}`)y8qjCqAvRiDE=?&wRycO z6uVc^HdQA`304%@vvv7fT3V=iS01pY(latLj!%}AmGO}?+&4BhX26f?KXf|QiuJkp z&i|dC><aJ2tR&vApy4eX<YCYRk8Kwp2BxagcejYJZ4CVP=`Vj7%KFIZ-w0{896SD6 z;_^6#nfK3jA5Tt@A6iGGqNLilWAsN`+qF%V+4zbo`jO#bdZyS2IeqQE$B%71JUnU& zB_$5Wb%nJYACee#*$&=v(h3pTY(uQs+1ce9)<UO5^QD9(Bp&hG!bBXC5adp`L~%<u z4FNl2?5&i(($l6stVQ#8hO50*v#X=yZl+|<=D%n&)RShC^>UUbY1!Nx`rz#rvAFNo zLS>@%=Wchm{hT0wxq!ba=O02QG~XrGQ`lu~`H8fTt`*N9Et@9Rrj7@-DCBmcOh!51 z=~j(2I}LFDjw!YzXnUyDu#vTv;FZB*E&LMr&k}!rIPHE6+*<>u0}lmj1AwW$PgP&e z^Tl)l6Q-Nf_`}n4^7A&UWk=H|_2-3U%1s!v>Ld$~typsMbtL1PmXO@@wL{p^3b6t# zsIn_EnuW}}W9lRAOyR4(Zb;blcnQEgU(>xS<KCa^W8@L!HB6O-id$@A7*1q)L=vDT zo$1!QzB=^0i<IE^Ooab_xCo4hPTST2O*BF8fJVRKREuF`Vql;FpiM&PHXlD9pKWS< z(BA9Xg74)_Ovwz}O|jjC1^&}6TS%VM_FP{qQ&k-#Q!kqCeO*`qr<u#=-shE^J!7o9 zS<btXUswBRMfxiu4t_1&tY!xHGd;tXOca9MrkcDlryKP{a0N*nLohV?kQg|u{jLa` zFqx#X&hh_D0lFn}pMHEcR_lP7aINnnCe3uLzxAc3U;eO`;+nrjrP@`w`oHGWp8J}4 zauR2yuP!RV<@nBFje@4TpAk0L&-ZA+vA&1_at-+`x!+~-jb%U1=ko;y56c`}(Fs=h zf=^XA<GCCh9bMKaX%%z7j{DCMd0ta{vGBZK;_c8&qk&VbsQaJ)o=@wP)c;+MC3+Mn z&%!!_Wmac(<t+Y{DuB%-<p|obh3?KLs6r)a4D@(JUvAsdaR`~Qi+FvE4yS!pa8lap zwQ-;PiR;em2%?l20#zfjq97J-H)l~NwR?g%OT02d6H2K9R1mTk@bWZKp2MrrQwhHL zCMCr$$CNgGAH>3y|E97yuK$s8Nr?RhI2$1x5tQ&yK}BJ1A}v6tU46wU?wt_KPn;V} zSJ139SX13T8Hv=?GWpdLv_D>Dtaa1qrAYfPb?o4$H28lKB%Qnl$TG|3x@*a!W$0Q3 zNu<2k$?*+aF`}qZH$D%jhLW<h;w_H-v^TVz^gh2|6W!7ghik)2iK;k*LN!S3Ai~^f z@7q$P*u$%th}S7!yS1uD<=#p2ICQ4Dd8MeOSUz7-WSv0LiAqBfjX%0Xy@f~Kr_o-e z`$c5)q!g>El4d=K74oPq`}oFsPKb*bh8Pl3r^QiK$G{)zkX|9W=S*s+eeE|b%;qaQ zR$ab5&1m|TV(6QcYx_k;z{R`Rr})9N)>u||I&~S2yX8ifwS5M64Zn6|C_~cI$D<5V z_M;3Oj)D=h_e#rTCd`yMGTRi>dU=u0Yx4gOuU@^PWLaed;EihGz;XnoxA&)I4zkZD zzX;aV)yD(#dZPDC2r!Sm-um94I=`;2?%-@b!Rqr_8x&xh%Bd|{PJXKBp^n?ggPQ@c z4tXNEyFv9}ha>y?4FI?XS47B)hV1CoOF9TQOO`Ng+nu$lw*CTby_8v;PnpS<XE;ka zBm!r<NEV+1BO}w9u8~%^IAaVH(6vjN#mP!T0R8yIhG79c7!IoNI;}q>VuoO&2O`Mx zHx0v@{r&j(Xn}CeW3ST}+pVWgm_tK(1_p4?JPFrK5>}JYWEsduLxdf#K-jUeo_$4n zG0Q7m+Y>4uiFcd6emn$Ig9C0&77W_S7-Mv~i(C!^!b)W#R4<;TTAr*SeJ+{7F!A|C zgjTWr-r%oXH%*x0M!8qr*@@Qj>GY_5pq`1bs7zBJo)X3Owyf;jD~-bK=Snq2p<chn z;f(>upPmqpgdqXf=)zjA+i6CGqA!h+hBSB@KeNclsmk-XMw&vJN9Y;4p)S#M4Xhpy zk00Mf?c|SA0Q%>jc^@$RSV_8?6=r2Kq+)FBO_sOTv}vRb%i85CEFSS(>d0DD@mW-< zU-<e!)rYYrY%M9F*F#3|=yKn#>A4HDg~EGC`)_I%OvnbY(ev}PtXS_r;xN?{^&OHY z&Oc<VAKJP)>~P&KM_f9-;^9DAtI=`0xuAqxuJjRe8{a{ZW5QnbE-iR18jadEggZo8 ztS9GkR)fIFFi0x-Pq;~gldpI<fm0iqrS@Fm<+}wQVhbKZpi+-#9g821v7`*__5N_! z2(s*z_8+5MI-9#nGPuAXYyIslc*fKm#Q{qrBhd3?^6DkqVaT@^Jj80n{Q6WcmQR+m zmf98`{;@#V#XSv;3y}`=_1IhWyx!83b+=0HKNq)5-LS^2=1&i;C8DeQ&HNqaFm{@t za_ml^nef-QdYU?&$m&n_+^6PD6VpvcOEb0KyGYVjAdh`~eCl20te=>&Ur(4&l#8GD za8A^1pWi+zvO$~_@rLrO;1|4laEYM(^`5QLBy{i4QvloSZ86f!g>9ZEu+|I9A2%;s zvZPL1vNVG9<$nYTm1LUbB#bXRQ?FgkGZkPo9OWl5r;qw>OHEph)<-<DkL`fLCu{?& zj*_4N{^7GD@1ToB@Q;d@g0m^pi(8QKQJB?UpTRdakvWg;@U&48d)RNcX!isyy*Q7= z8k6)Nt(CGP=|^>JHjk)-Qfa-|c9M>z^64f6j;nK|=Om-_E+<X>4wS@@tUbK12;{cJ zWz5kxQQPSC{_~3IvAp=9M?<;#Fs{h%3q%@aT5Y_7w1dBAZ@56hD+_bkollY7CMa!^ z&Va|g>C|r%cWl~NmkJy6->v+-JzMGS7Icoe98gJ+Z^z|yWK@aYxx+T;9rb4h;}G~X zxU{vkb!Cf#Z$-hgI!JDKc(43xUtbjr#3dwHHF_4eDj2m^9hU&$e|V7l*v$=vSap{P zfCKBZuiNr{Fa0aCNcSTNl_CKD$4XoRzk<YD?em*$MEaky=<O#YBpmLhyu`cy*_}N) zYH(UDVQLqOORzfPdTKS{OhlrWBL^1`t-^G<G+Rxz_#e6f>?I43rJn0kPD!~+_{Rh^ M(7LLX%GRO(1EjHd^8f$< literal 0 HcmV?d00001 diff --git a/skins/office2003/icons_rtl.png b/skins/office2003/icons_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..83eee28ac79d5e00e8ec9136ba491c8c0a2b8352 GIT binary patch literal 5600 zcmX|_by!s2)4=a8ARPh%N-P3Ox4_cfB@H5qGy($By+|l4A=2H5fJk>NjkN4n7U}Np zWr^SV{_%dE=iZrf&YeHz+?hLbPt<cARZ^lyL;wJgs;epKV<iOu;E@yHV6{(4Uz)Lk z&`r(E0|1Dr{#_s-J(CVQ$!x8ruMGhHPXGWG1_0<gtlR<sF9879wgdo)Q~;oL{rb9B z1psh>=URr!SQ{oq#k)HIN4x)lj7(~3>P0*^j(~u{t`#FBUsza}6bdaQ0v?L-RFVM< zEX6<noJ>vq<>1aUH2KahTya!okW>YEqM~wreSK#S+C!P|CbIn}0b)>47&5w-lseEv z1K^sT>c#D1g2?)xf*rH=7iWJuz56MvP&DsD;6AVw@u_uTewRE0Ck7@GP<mwl>X~~I z*+oAwyK?V+Ny(#l2CNJ5|Lq?h9#1so(8<bO-`(lD-@~PgJlGuQ3U!-yAT1~?ym-Y8 zX9IL?`<MH>Xk=vQ9QVgI)|-cXDRsv9G&BtNEoZ&y4&f%c`id<-eId59%_d6Q+k2$S zLl+kp9W#Hwm6RjYpn&l3?G5<)8fWt(-92c3Gh$9}_tlri)8)l&JRzaGThPYe|3tL4 zK7IOhiMbNi(gHoUP?|G1-X~dKU!R+zEGsX+y#-&KZTR~73}wL1<7fmmbUD?O&+|nY z<yF_0sRXsu9xExmfB!x`J>CC@{X-d@%d-=*2U&+}%MEY!eSF;k<`O9lIWSKL_=)b1 zA9*s*p9A9J-@cU}?%yX6t|a5KWKmGc%gesT;NpvQP)kb_DUMT1$%%*V{rK^NO<7q^ zPw(#Tj*%&Mad9yvC56PjzP7#|ox$oUNO~KOo6&JL;R3L{UK7;RWK~lClv2#Ds(O2S z+tGnY{82?BCgzs%)6*~1ISpxSYHH!))4wvX*X)c&qv_@4nUYZiDg}(@HN_Q;cWHo5 z*RHZhtb>EY@pQUaCUS0Ts`;ytudi=P(@suK4z-l*c?#3u;9#yPq-W|<&|yYWSJ&n} zTt?TNzi#7!q~cv7I5;>65Ed@08o9kar!t?Wf0Psv9S>F*MQ5_&sE#|n51cGC-8x!f zQ&z>-`g3-6#-|CVRB0p9`u!y_jZ#WV)OSPlO9QRJ@cP!$`rh@=A7v#aC8ee12L}g- zhlfW;N5{v<CnqPTr>9uk^Ye4;TfV%!#QJh|b%nuTu(5h`bA$CAyIsN3zrSH~0OYB! zV*tplPuT$grM9|~yrJ*(ZYDaw0F~C?p-^G-c*d0GsU=NV=k8}JW@60&tFK>c|Ef*z zx+HjJ6lc{Vy^Y7TBGViti4&TJnvTV38|y2hZE&F=s!!T9>~hgjno5F5N4vi4?+ob@ zA>G$*qZYP9#9iYXTbRrEK$(kx`IBsu4L*sBmmpR%mUuN!4=PytI@q-x{dA;Yz(y!d zt2mcvq-@;bX@Wb>PX**GLNprLml21JyuhG%TeIXfb?!nMWVnKmSVJn&^z5wGlV70s z)L+@uS-F&C*oIWp?^VToR%`8jpP$N{q*0{LIsLW3;fPBGf1az}og$7(;RP1o8r~!5 z)+QDQXFXizLhHNWZU;kZb?~?X!Pb;3ok|N!n%tHE$%@0rO}EdhwP5nN@A%Vfh(8B> zpL(qX?PVyCb3ax;?C<ZtW8a+gv^c1jS3r7coV}wR&tfj#YA&$`YokO)K$Pjlj)X&w z9v(b2pP!W5Wn`rLKCwXI0aoeEbFrh^JdhYH-LtrrG92^+)mj-Dj=>R`We)9+BG!!@ z3OIJ5<wt_fJ~~sI5234g`27BeUkUbe+X)z%nm_me!@LjTD+6@gn+9^b|HWcsHS|K4 z>3SqobY^9#yF(_heJ8virW?Z4E_K;AUgWXCbJ|DmdcASSDDJuT3GY@>;<5UdTa!fH z>o~SfKY=fWR1<`mUwHZ_2pi+5n^a@n8Pr<?NUX9MaRp=a2XzIKr=-kHtt<?q^fW^L z&T26dxxaPi;wVB>TS4|FJ*fyHijQtO^?R(UOnL70cv_(5<Xe20dbH?SA&`*kqkf2a zQE_o`=s$cGf>KgQ!@?To{dX*==px_HX}h+a@iD7Y$|{P85HkB~Mi;2^9uBSBX^^aJ z>XFe|N9$S9*~d1Q?urF_t(O>7g><}OxB<R+{+|{Is5KW&b>!e=lTZBj-)Sd4z!p!w z%)qlEj(TY!16}Ovbm|%oT)dvK$no^{@=ik|X8I-nagmOO9-kkzw~vmtsSXEvG9Bz- znZ-1x#j*Bduo-mD<UcpuKi~FmaNd6V+D<0cBVdD37~;FP*ctS*<75U^UXd1Rfef6Y z6<~oV1x|6QuZE3Z&^t=HguJFiGaI@V?$zETvK`BBs>Wcx#<cxgFVqpKXQxjv#ID!2 z`Meftiql|$gg>P>_}gcwA=Iy`k!lkg7xgN@4f#wP`HVd`QJ;3aA2+>Xhm4sMu0T+w z`qn^L%nBq=-2xWVQ)git{m~D8s>j2uRppKEZp+zp5f@e5^QM}pq_iAd%7f!z^vAe_ z%cexI1TZu*5{L4>l{3mKt)4Cg122rsjLnT6ln#fMrq@}OZsV2`Y1%Ly+l=MC@@6`d zo>`+?oE)m&-6JnXypUGiyi1<T{X=D3R$AI|8Nt;sJ!5NRWF-0UM|I#;ZTVnz0s!O6 zsi(~E8+LA9ap*m3$V@QSI*TllP%A4PtmZNI`+Vf;Q_A&;XGn_PZuD|9yu7bGE*n)d z?ZPM?TP6}kv6F<OQEmcQepLblG`nIMS<mT#$v*iEVApU)Fp8pUIy^jU8u_%YuC7X2 zp^MI%a-}b{Vkca%?>yD$d{g3$<?eq>_>1jYmHoH@p9l=U0s{AsR%6z1q6OED1O)oZ z%ajZ{Q!Qpl8$U!<Khy9?28Ne*x*~{adqn3a@T!UyoVPv{m{l~oEp-)A{@$y`9oNoE z2AUlucr~_a3Fia&M_xm757JcnNhk6%nI1%Mv9iZzs<j2FH<rUB)1YE63RJeRMD>r5 zKhV(C)s<qhR|3|M*}nf2Lp_<BQ>5;SyGl5D(Z?LI5urrr<8TVQx;zR{s`ZpmfRc8e zHmx0wOjSzSJ^%=%MH32vwR`{*QmRI3R?L8JnT?8<gi-P@t(<K44UU9PQ$)s}52#cb z>6J6V2i;)}j`$wD@=s~CE=Y#94oUtC%qg%}TZ4hkgdl296Vz`%*a$hk(^a^34@LGQ zv$-W~IkG{-il4wKVLO{I4GqKd^I01Dj3VtNVfie7SL#bRIv0k8;BZO~E(JY>L{NJb z$I_XIvG_N%x~JqfRdM&!_!oqfM&-C>d`chS@bYKTV)COxnLTN_UFM?P^NpZ^b+tZR zYsr!C2?nEf>`Ysx@iAK-g~n1NtGLNoji?34x0PER9^$Y})!qj{G=nA73;P*}TylHM z_0sa#oq8J+lz05b7q+xz{!S*mE1nz&B@4;!wA<T7KPV`BM-4GZh(GFaFStyFM@RF= z()X%{>I?dFcgVuk(-#gdFj>9JR_w=jzfIbo59a~BSb{^`-39SKw;x9=Tgl=F1ExKA zFY$pC8p4!d5DjlL8!RWxQ-YBUbF<_IWgx>L_{Ld;)wCSVp;`C3mMjHQ$vz@|@WZw| zDF~3B5^9`9KKMw-N4Q;Ewb^9%!a6Mlf_wxB3Xxl;Jai=Y!m3OK=x`}Wniqa*%Ut(n z2VS<JD_>smE{dIWmW6jOxlOsUvoRDWM&1N><miVZ9plM677l0$m(YvMS;g}IKLP;Z z$Hq*@?6|-rIq4Cns-Svv@J*?Q%~OCRi~dpb-7N;C%JK+b3A0;s5TuJ7Rk`(3gVn^V zVJme^pc!mIndQDVk|lmj3lBg2I~}&%t`6;>ezGevz$o6|-RyuY*R^z=QMl1a|A2om zqHx+yG1#Ow^0c+Le+|L^ry8wsOVawB&*A6#oNQoozjTn6zkR1d=b_xediEH<#Z^)7 zXIlR38o7Jp8C?AQ{C5fb!ABK%#L(P^Iqw-4?t{jac-6^@IUqNs;$>5H&B-XYW(uE0 zz$2KJ&+b%J!P2PY!OLdPA0%?cHFhKEB2JSdVy=Iy*Pa1>lROEtt+qI@-4SE=p=2JI zGc<F=ZY?%87PGpGTcN3e<z=tm$@)l*-mg}yOmdkqHnvKkO?0`-NEu8{G|k=pxX`*% zRUPpJcwTKY-|A=kb5_r|-e#$b5_qDS%)^OkVXt=$aL&V-J(@U&$TYdVNds(W+R;-9 zx_oA)eKVY#GoqDkg*JI+D!=MS_>*{FHddAo6RlPWz4I=4Vv8kvz7d{~Vd*{G=*>;0 z2`$cb!7Hkb(Jv(>AqmuBy6;eL1`oo)!KvWl`*LWkPVljw1wU}~jSx(U<?)PY#l90? zSfh`o{kIZ7a+88{?>S>PWPe%Xuj=0j+{|q>wS<^U;b;sJ94dz}@XSXjCMD@mmXw#5 z1`f!Blai8*Vl_fFG#t4oauX-yU|}KtOQUj@7-D{c!*NB>&^mOQ1Q+bFK73z~hX5BG zig$4+1P(>C5!3LPy8R@iAi&*kyLi<?(u!V}zL*v6=fg=|;nNw-_TT<~f1eLJnD?B6 zI{jhwps*s?e8%FA1O6mS{HZDbJ~X_Xo_HCuWZ3$c?UpnGMzKIa$!znsB3Se}vdxLk z>q6m$8I|J1JuAl8CIR(iTMXbiibRN$ZysE5U165Y?oE?3=LOK3Y$qNk1=AcxRs<+O zW=6%MK?reoVQxK*??ANBAZ1cfbTf5QQ4yK)hon(nUS3-O(X-xEgq<l`p8OpbtZyda z(>pscs9&=;F&N{)%^f0y0&`?Z`mD@0alb?ut@jWcH_AJ5y4K~|`L6Tz3`gK(y5m@{ z5IK8(73My-?tO?aU<^z-0EizA^Kfj~W%_yd*35neBHvuYC7Zl{{V=Vu(|!WenAuB< zNdmZXq^*I5+4saWyf17p5PDyi^cfXAewmZu&pOXhODBKC5yB@OXS}aJ;tXq?%JA5C zIE99|Ui&SNRns%oBRZs}Fo(#D>T0}grqhvh<A%pA#;}9Ho6cB_s7($1ZD^Qm_Sxd= zYjX<=3q4UxmLn48s4IJI?YH+CnO!ktx6_!vBI7q*>xgX67<o5{q{UA?ym9v32N8df z&>!O}<)4O43im1OqNzoG%Ib5z7@HC*W#@s6p@h#{N%f^wx6PidJvW398kNsGhmD*) zuIEx_G}8ZW2-lx8F1Nz&c|}GFPi?Yb=?={}FBJ+h+ZS@9SCTO^N!%g1Hw6_MIB@OZ ziWb}$IulkPaL;m&5`mcpBU1Ol(R%a(8V?J|<R04ocaNy3br<*g?J#(GdI${9=P+<X zhM3jnTcL&QoBYpErHpJZv^k6Zoabl4|0D`FOOOwIujYBt=I<rK=_8_<x%M5sIr8K) z){uGF7B{?!CdoHcu`}OK4$pdsqs($xf3`ik$W;05gMw(eH=g3ef`j>qFJSsAf8YE6 z#*G#{Vu48tL^Qfs&21PF6eTwLmkoghs5YC4IpFzUjG}or=2)M5Y7oZo*(dU98VQ5A z@)Pyy;jf-`9>a-L%t}6N**zHSU=s)G03_!VPjTzobU`vt4eV3;^>6F&ri3&&%i8C_ zoW^>2{MHY^n>{jJlvN-4ZoShp$ouF#*1{e}%3n^ntB`6SQkV1u`eupd5)6t}zxU&R z_NQ*%H|Br~{Wdmzwyh_i;pxilccMqJ^RHjn;^gOl-B96u4@m4^Il652s;d)O1(CI1 z{qfp)>*VA#P!LD_+#HL6B2!zTTV(~djb5KEh<nw1I!gkSv>hXoxXGmsFIUE-FXDs& z%ShzA)ipBK)owxQJ|K4%dk?ktkH+agrNe<WFe0sohgBW=q8|z?<T<6rWw10rGF<oq zbU~LWS(K}+Xh1zFQ^?uQ6~Z|IpquFUU9#|w5@2gSoB3A$0(jeQTy-|n!tw#2+kWjO zGabCWJ8Io;H>LxkdokZ}cD<-8E75WiWnE*BQ<9dIFFB?{38`zlR^kHZ+6fmWs*K)l zkx!pm-`_uVEi<`roqL2C3i8KAJn!X_kZhKk_<3_iURwi1nu-+t-W-L04!K)7?*Koi zB8)J$D7U<!{dw)INFz5g6sU{dOBuN6sOr4UuHY!|2-(@+kzy?7fCoqn6ILKSO=FMn zHyC!}BRPu_*KsBveIuL>)U`edqBEve*3()%0bd@Acxx;0Cn5`dS=`(4u(OG8F4qG> z$5#4HN}xpX<bQ1en~htRxRS$trY3~srEOIJHin|X*oM3nE(r4p`4#0U#4TI=43aJe zN#};lbEP-H>0f>hT#ZEvc0yty)_V>0M=Kwt5j{uUc!6%ba$Zcbk>8dZWn$%*FV%?f zUpg|mBQDFW%f5_V{QWZ=5;?*~4UTsDsNUQqwll4x3hst~%>){C)I~3bs)ozl(1&Kp ztmjcCJKt4^5BsHY57Bb|S`l$A?9yyH%SuZw=s;%okKn`59&J3HMaSN2rgeJp%FJ;O zNinMnVypQ!6CUV>&vWO+#-inW9~!AC%BFZBI<Vh}vxdMXm?Z5D)A)j`=9gzwE4z+l za(9UvT^rJ^n9Pnxf<gliQ>|MXDqaQ6mzm^TZ2$2*$e12)63)4(O(xf3yT9KyIhX3y zB*+DGwaSYl?0a}s$r|1TGGSX0U%2W)Pud5Q$)w~cz>Z9@{Y8t@aNW-SYl|i3G_4nw z*mD$UTH&ukpd0&d)BUTEa2kEEMq*H-A$ixvK+lF|JbY7@#D>-J9Z=7-of?)M-swC| z_~p%AxnBJAl{(4`1S|A&3YwD9sPo{S?TpY3n9>EFP)3FGywa{zS7C{790O<Am|4n; zK6n6%(mua{Lw*5YDm&~4Vo~vf2Jc3eDc+@INZaO`NgehsI4e)Au%^{!Q`G2?u!1nP zHt%#Lvgw57N6l=@-#;EJTH$ON4QK-0J%;$5#A8l#X=f2=I`k4ZO5#Xe7P|gD0kzc# zVK||<fS-3sL)XFk1MGLvsF(xKM8_Jz`oRH7Qd?64*Zf_O%Klr{ZgKOCbHQyJRH{4m zE{RtX8n!fwf8g342&GQm^j|A@V-$4L$!P5EqS#&bu{o9@aP>aOTYAE+slELc5gQg5 z+PzjsYVo_GqT)&szo~HNFw{2e_tljynaHzNA|Na*EQSB|{x+O%26-q9OtrP_7%D1u zhdP+t<lz7UmrIKkk<At<x=Jni0IYMaCBy<%S>{yfgl2F3OYY<ICu{o=1H-NmEB)+T z<xY2Jr#$z6W25BR5C*9`dc8o~7AEn4<JI<0On$!-TdPmjuqAgN7j_2$eh(~<z|M5n Ru%}Fby0VT^g@WaW{{hG4-#P#Q literal 0 HcmV?d00001 diff --git a/skins/office2003/images/dialog_sides.gif b/skins/office2003/images/dialog_sides.gif new file mode 100644 index 0000000000000000000000000000000000000000..5840d01738024e136c0e3f7fc112fa70845dcc31 GIT binary patch literal 48 zcmZ?wbhEHbRA69aXkcW}PCNPk|9{1wEQ}050UZV)0Ld^gvG??IaK8*^V6X-NBb^Gt literal 0 HcmV?d00001 diff --git a/skins/office2003/images/dialog_sides.png b/skins/office2003/images/dialog_sides.png new file mode 100644 index 0000000000000000000000000000000000000000..7da9821879b9c5b9753084e6a461f44b3c8bc171 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xp=xbhE&{2`t$$4J+q;L(WV)a z9vhhqtp$qXpK;fB>8$^q`BYcoD`Urf=8xG5b(}}eFZ`0d!ouSpw?IAXqxlYhq!kV@ YSm=tX`_u_20nKCZboFyt=akR{0IIAxQUCw| literal 0 HcmV?d00001 diff --git a/skins/office2003/images/dialog_sides_rtl.png b/skins/office2003/images/dialog_sides_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..24fe13aedb4cd5f95a3bbda0eef1588e8f915246 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xqG@ehE&{2>gmu(N=rycU`;Ah zc*d3_ry$0V<ftIVnpCJTt>x09fWpSpH4n3RJRH7X_R3WFD%w%c^zr@E)7Aft1Q;2Z aco=4cbNyGg|8*N^B!j1`pUXO@geCx)^*J*D literal 0 HcmV?d00001 diff --git a/skins/office2003/images/mini.gif b/skins/office2003/images/mini.gif new file mode 100644 index 0000000000000000000000000000000000000000..54d910741607aeef28fb9b5882f77f14a3d975ab GIT binary patch literal 183 zcmV;o07(BwNk%w1VGsZ?0HOx~nVHN00DyOQcc7r80DypIW|;s0|NsC0A^8LW000L7 zEC2ui01yB$000Agc)HyFFv{5oF_bJUwc?N^8lWRyWF#Iz8eXjXprlOQc&_jKVd<V* zkW!KqD<>P$Qd9j}#|1MMRnVHftai)I0hk4V(@-do3I{afTNt=~7q!&zhQ}M^!I~t% lw;gm1W_k-^4+91Sga8FY3}$4Fii8ejXLS&6nq4;u06XFIMo9nw literal 0 HcmV?d00001 diff --git a/skins/office2003/images/noimage.png b/skins/office2003/images/noimage.png new file mode 100644 index 0000000000000000000000000000000000000000..159811305af7fc78662a53949f9c62bd702785af GIT binary patch literal 2115 zcmV-J2)y@+P)<h;3K|Lk000e1NJLTq001Ze001Zm0{{R3yC6tk00093P)t-s+g4WG zTwL2!RN|kX+gMoQprGyM<>Ho>++t$jfPmRaN!?~<++bkXLqpg`M%qnH+*(@WuCC*= zv+nTj+f!5FhKAvZiQ<}?-*<Q0S6AP7c;J41<HW?`k&)xc$>EHQ<H*S4t*zsuqwn+a z*+fL+ySwe><KAv=;;5+MkdW{9_2QG0;?B<7US8Z-SmM#q;g^@%PEOu$Z`n&r*g-+v zY;50jblg={;*^x^-`?6vO5u)<<HpA2(9q+xwd1j|<GsD($H(4vcHCuU<Fc~k&CTF} zf#8CI;-#hIyu9!9^4m~Q<IK$Ajg8}~s@q#z<GQ-zwzl4FZR5Va-f?l@eSPid=HtS` z-+6iC#l_lCP})&Z?(gmI^6=xZu;aJ4;DdwWo15a8nBH@9;+>t|a&q5ubK|eC;+&k} zgoNRWitg>}<EyLTi;M2@@8Yek;fRRaU0vXOeB+&++DAv?nVI95nBHV$-DzpvYis7c zz1?td-+Fr5NJ!$Ip6>4K<<ipQ!NKLv&)H5+<e#47w6x^Y)8eC}++JSl*Vga(_t-x_ z>ekfk+}q{E#Me7J>(bHOVPWE?rr?K%;Dm(Xm6h64Q}6Nb*FHY!#>MR6-{6IX-+X-I z%F5>4+~J3Z;f00e!NKCVxZ<&~;;O3SqN3ugtl@%!<hr`sQBmW#xZ}&q<gu~izrWpR zXyd1++fq{Ej*i`GYVPal<D8uC@a^N&)Z@d$-C<(t&CBMmuI}>i<fWzW^6%ow$>P1e z;;ydZ#KhvOtLC({;-aGCtgP(Y+2*ma<h8Zrx3}V_r{kuk<+{1$$;se`hUdGw>)hMx z+uH5p;oyjf;E9RksHoz~%Hqq*<G{e-goEIUir|Zj+EP;M)YIXUljFI$<e;D0RaNN7 z$JRMH*g!zpN=oI<&ek_K<f^LKQ&ZVcP~K){=(@S&yu9Sr*5tCX;hdb}!NKCg!{V~C z<j>FIou1*CnBt3z=eoJ#jg8})n&6C#;Ej#qx3}JMbKrV<S#Yci000F3Nkl<ZcwRlw z1F-Z+6oAnl+cutU+qP}n#&6rUZQHiZwe7vh%<flHneNKzTS?H$uc3*fP*Bj=v130% zQBfbUU>7tBO*{x<B|7Nh;^-KaxNXG>tyZfK3kwUxgN0tN*J@X6OH7P%ba6R|MjaCq zA3fCS^<jZ|d202c|5K~gd2qmlqefBCqmx<;sSoAkjCuTc2mG+G#h5WU;PU{VeE1`Z z(gy~fIRs|Mj*N`Z(9pQAOoc)jZ~!!BqtFfY_n68Ejf=CgN=<zQZQY7pQ#Yqt#l@L$ z&Y2r1@H<>trNaG^w6x&h;0X}?rKOdWz!A`Z9|xkD8K>f`UV#Y?778OHBSXx=QYf4d zoK}L{Q!~*TtJJk6Fh&?D5QJPX2q1&OfL$*X3k0A6uYHxe2KBE^0~AtRv$6lS_4Mtw zjmdb8w%ey$-|jzKQydZk_OE`ld4h0VagD&R{(3`^$bu@Iv<q*NkZK_+YPfD|5P<zb zxEWnpSA4o<V`K8%DHbCmBSq92k`W@+P>Wz|F(np;w+L$1T|t*mx13G3-F40Aw`c@9 zL2Z;#D6&TC32e8>&v@;sZF2I)mdogy^|n{%#!lK$`8FOL+{->kqn*o!Q&9ZdT8hya zJJ)vob|e5rp^%1ahwoV6vbpfmrNU;DyYo|7C5b{g9~)~xp8^}MtSyt#I%b%psG&iG zJBt||G?}cda+pLp|0#Mv83t8ePNQkM%(Af1?7Hn1&|J&A%4#b~576<-vaWL11-=d% zjn3E4Bu&oGSEtcv9DHfzU9xYFqYbj3X$xMyv<nDG(n&h9oBwmo*&PyHQb2&6=A|#q zwQB<+x#CQxtCvb!8Qs|;lM`ikGgh@q>zk620x(KK`!SZ(ByE*QR@b!~_Z6C8;XY$~ zUEONQDrvnAqx;eCz@ACxt*$HG6s>%H00x>89eAybjwzilk+fp83w8hb?EbuE^JAhJ z4EY}FF(BrSQGb)G7>t<GW%KSm{ey-ap5D8OF;%;F(_Qn2G=Ijszj(K2sc?GV0omQ0 zUmDHGY9FkYnq85#b&*+0|NdvN9jA6^4=~kWuCiL?7mvGm>XRo_^U^P?TAn+Y1rHE_ zni#6(xk`Dp*RS@tv%k3M@Zn7t&6_X1D#9_Usz<Aq4=TeeGTpsiSm17UI-#eBkUkri z@h|$^2dXeCL3O$E@TvhDubx{|ao0;=L;PM`+TWu0rMqW(hbv1_3^p#kua~Y|I@Nya z5tf30r}*LsY?sREJNJ6oz|a`PsDN>MSrI*i%%e-j6MXo5XJ>^opYKB$zvO6U3O$0= z3qz|IC~Lr`ua^};XHRw(6BB$8(H!zg5bq|pvFFeuV5s|YG-%VelSQAyCZv#&k664V zAt7N4cG)c!6Me{hf)g7X>XnP+d$Dm&DP%HHygT2`jc3lyEx$laRFL^?xRj&toe^}W zHa;0GEXa4`dHDM?hdMhuhnW8UJfP3tD98k-IT0*xQ~{2_R}dFsjM>TMT3T{AmK;ki zcZli18~1!6BBy|?LIZR*fvg}FjN^S6;&M40&uLiiJvkf>m&x=PS74Iv$cEj9I}aw8 z3u^H!bBh<h=Ww|oKmQDq>8Q6YMezoAmY&mQ&3gCl6I1WNV$>{I@G?DfCd0dk^LaeL t9L{?@PmZPK&<CDd0a3vxu<5Moe*xgDR7U()XIcON002ovPDHLkV1lp=pwR#T literal 0 HcmV?d00001 diff --git a/skins/office2003/images/sprites.png b/skins/office2003/images/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d3a727b7456eb6c6942ba967dd64cad948aba5 GIT binary patch literal 6119 zcmdT|cUV)|w#TuHiYO527=%y+MnHNQC3FaaV59_)D!l{}T3~DtS`bk~kJ1T4s6r?q zqx2R8L<EFr2qjb@gd**sbKiI0+`03;^4~k>JA3W3&)NIid+oh`>$g_yO^E)PQ+%h` z*x1e(8h|Yhq!t_7(N8Ci9n`{tH9Zf+A-IM94K@NrfN}70%*j|E%(nmien~1!IcPcQ zZ(t2)V`IPY{W-*zo_X=0@pzD-sqXQSV;9*^u$SNNUuR<jxEq46TZW7-W@#n}=p%lm zX80^w7z>J7=ds|3oL`juX}ZS_7eY>t-3<Kc$WL1OF`E2mWzQ{rzL|VC^VRRkmmVYw zo>N@<=}>e)=OKWg$kDTy)29!;NK`lGY8^_p35aq-7Ia^SvKsNl)`3_B^+6c*_!?zl zX$QrcBjM-Lmds}|pLP6l>S#a<r@p{HixsPvY9*k0#A4R$#u$K#00NN{WW1QJo$<n) zO%Cyel)VddctDg;@^ix37ne0fXpgN}ug}Miy`-a4Cc&9?YPW6!C$L|<#a@<RkI~Sg z7?r;%_UIDrFM$90c{7dqzWqhh%5G97y5o74E#nJM-Q&IYRNsk+vJ6@@T(2ih2DG3i z9MBvFv~wqvCG2Rl;#M9Y__vKs`J5Q5OfIq`Sbr~!D3Gx~gqokD{+y%VSz!1qc*Go6 zxCxJ4c<1*pp=kaVhWz9NG&YDZ%L2B`g?>5AIif&wdgSwF-W21YG{8SyQCdD;El0y9 z1f{kn_V5HoIa>U(ee;w3*OXKdO{J~K&+Z5-;CMV*8=HJq^K<4tRpi!G_*KktMl)Cq z9A28lNp{TJxWKR^LOG+_jBy)vO}=?hd`4fm{-fuwVc{~jI>UqW?mj6M5*57TdHD47 z&YijrJm+&Q1PgNi?=<#ZSK6uqwsC*?!T3&6l-InDev5IOO1R^>|GJ<5+}Zz4Epu50 zrZG$)Rf+dP<Gj%wj}MN*-uwM|OKMKQ%x($zzZ{sq8+NC~Qu-?&BwWu<j3yXIY^a3K zbAaipoLhpNb(ev1u^rNTt54C5BEY`*jw)cKByc8w%ke(Phan2OA<s63>P1f6Rgxbw z4@CKrs%<PF!XOmAR)>5hap4a5gWC9z!ocnI-~HzGs@KbqrE;9Y84?_%uaQ8_^)rEl z5|}2pkZazCn?c$3@EAj&EajdpBQYVUXx2&?n5`H7B4~E~x?O|#5+)YmS|j4a?>x?> zv>4dp6B+YGD(H(j5JmCxg7IKYt_fdE8%59L9fx5;79DmzI(V*<ljVX`8Fi&HF9cVt zNg^kpdLd5~EeqpprPPcyPQ+wpm#j&dSP!1;Rf#R<{t)_GGd68<z21#}YozX!oO-*v z3{)627EjQcN5bAO70lk>JTLKQ3p`M$Hat5_zlEQ=KU<9q1_Gf7U(^*Khc5j-`V$~I z92hw4FtHI8B>_wVyFk-XOZv)wP0HebV`qP|Fp#Sd4vGXf=Aj)%>VgN9XT3Zyil>hE ze{h3$il=oyXUypra`k1My?Z$&H+i6~ym;#N^@xzSV=<FP96P9H>z^<tqCHQMC0r|{ zTX7uus^BmO@j|`w#3v~Z#e_YUWJ8#WQpB+GL=)qvzFwrO=-yW@nrK?)5oa@T+`ZB6 zjwJar<>zS}5J@4aaP+rf1v+40eCAT*KG%ipWX95^xdvdRGkvhA%&uiQ>qdlk{r1nv z`=j)o--^mw{1F?^Xmw2TLfWx%+NC~q;gzuH2(=bLH+;A|-0pHzeQx!kx2ak-;QO|E zR%T}L7W{R&F8r?1RTRu*aifBh=&jAR&V}AyI8cFOMZeIF+`!vkmO{`RzU!S$YcQ)j z-0aGC2?=v)#ee%MnU~~s#G0NS!8^awev(-Ak<?mz{{LuJfVjvXrpcaDUkUdz11n9@ z+wUXOdX2=7*9vi8j=a-J_bQJO%MY1qAf`-*P%QkPE5^vgJp5?<rRaQenM>eBxa4VR zkF#;(5?9)lr8q};l7k&ajPH`pC(Gq+MQ=Qfu7W>TEL1DXQw^$1jkQH@rYpwCV&B?y ztN>euH`8okqdkk#9!;I3ys6^b1DSI#4OU1Nt;XqiNL$rgaoLn7aQu;fcLKj<CLSO_ z3T#Gu$*)$fNt1`Oj=5*Gn74Vl?o+<o-o!W>G*CS2*v6Vbd%5wa`p9gd-W8&afsJl8 zU3Ss?!S)&ehKRKxlc#$81JAq9#(e?OC`dYoz;DLP*!aY}Lt!bC55XEIaDZg@9XI}$ zSWb?9Ejb`yr-o6>v~Pl1jU$+6gs0enf#%?*yL_J`aB*WIu_5QEYXg8?9(p+U%5{rQ z<wp8ZQ6V6;LBK3Ga-t)qLwgK6lt#Ho30&>_c5Jq{Qc*e9a0++z%)1g+h;NrCNPfoj z@R}0sp$j2W*5eT+zOcJzlD@b@Lc&lV&YpnfyGp9_|H&Wz3%sqgzpcpsi&u+W*I>;I zQ8)MWAz*qJrF3@oO@=a6TAXI%2_2U0gtEsGrDbRqo-OJZSZ^|gOBBp;wIS~G*iC^u z^8-(6iU<TTL~vjxS^?_bWz@1QGEsc&zjvSh-jaVYd7LJ5bHZYqr2j=aDjSdt0Mjec zjhBICo88@e%YD?Q&Gq@axZgdpHz?cC*uS`uzpM+h8C!h&^R>)%_@q$_RD>oA_o!9# zK7gZL9NIgsBh*9dj{jQ`J6Ju@xZX=jb$zVETfdW~u#6hY%td9cB~#DtDk)Yvdr($K z7=&yi+mXZMQvUu?GUjy?IKn$eW9{vB?Ak}=jyeK@Wf}4;c_QNyX~{vq5Z(yM@yS<~ zA9$4mMWI9Z7Oe+fjU5kIOed;~k3JuHQ0<cteCuO%H)rjZV06j5$NI5rs^rpOYdiU& zPuWk2N;Fl*b*!lUHbDEuCRe`F28WvgZY%w+IVWz2{ei#hBWxgLI+VNCGU!FfxwERI z>I+tKo?YpXdu@h~O3NwEC{m9=?eH~GT$ikFh`FkkSKT+25&IyPHF-V<A)4h$<}Nh) z<zHRkih{e4Lo;f$A-ZgNuK>MZRModTJKej{_CIl!5#~MHsa(K`?eDnEJ<(B?uR0(h z0NyqL3&nLDkQ1IiP~SJc!%vr9;>t=54PxbjHIQnLl1(srr`lgq)LL)2x5Vtp3qZp@ z@AFX3`@8VnebG4Y)Ut7Y<&|QL!E!hK{fQdRz}2jUIR_9-Q-Hr|p5K+a_CQpWx`ozO z`~lOVT*P;5#XAy%Y+2`{o}gp8gmU&+r?>JE8=+{bvQ?-{{Q+td&<hv06z8%MH#J4I zl*Uo19Z^1kk+<KgU&|afZGq23jVPRPY}Ls|YS9k*2BFn^EH^0AM1#E`eUHPBuA-`Y zep2qkYX#5Aiz1(S=l1x27zxmLj@0vZIYm`TBh|T@xJ+N#ld#7A0nnspKLA<*VM3=& zU>jry`te#CZhj^NPI_uLgwQSw`h44?_TTNuKTLP#?b{}HMwRgXJH~qU>{mD^XE74w zM<h1y&epIdAZy#B6R53)k?vLfeT4g65FXZH|Di8(N2hjc)N64$92X%U`gW1Dd2}<n zB2ghS#H=ZzTxNf_XSoZxw+kIjBV>13f6DLO+(^WN<fh*;d#9##c}XFL>rvrlwlGpG zjb9-*OHcLNGwPSfK^DLc#k2nPV9)`hGV&HIl%>Bfp|+#ZwH3DUir9<_h}mA9OT=|g z<C?BLU(O=TVfVg{0fDQl+PjKfQ|HG0_PXVC!St=#y@Ijkw9?P@BoH!ct#)zwx|ZcS zb-y!fJ&GJUpSYAXSx*8?t<7j}Lbl0Jza2YpUSiM_`>_V9PXLlA%w7KLbF=(H{1SF- zyf?tMXY}e`c+~mbY@@Lv?S_Wo3IXi``50fJa@FjVWxE!i`^N0Hd|On7@g`<#ui%pY zsw%^5e=aHG*~iAz#E6*|A8093n37Qa9KadM(q0PIrXA>2{kGr!a9Kg#;wc#}VvP3I zjIW$A`69lNIMTrZcG=vBlEG;eoQqs{mt#3=?oB=P30-+?Y^JyYDcJ<*ED}PVM7`yV znv>gaAW0|5ddvD^DvFZAch}^a7C%HXwF{f}bJ;UivE;_WtP2joAG>Y%h6=}GFb5E} z>BRGMe%$;iH1zcabMt_t*oSJulH0pgp0a~u_!fsLmHBlD*eX8_qGEmx$)1#g0Awk? zGGe~X+{#b^XvP>ZLEE)>!XTy4FvdF)IhXF$KV0F-Tpl$g%VIx4OuSTLZ7(<8bmuqV zXWD>D&j}5W@E6|qUxDM($)?$reCpTmly>_R7jOI2xHvdv?c7Xm{@!b){gPJQGr5FN zlf*_V%PbXP{Ca3}ykG9La7lKxDbX4(m#ji3piZBGcmnN}H%i(j{gK?}*Ek2)D=e#H z@en@UEOKcQSo-CwyC}1O-uQtUD&(8(q!I(~DOxrFw$=INhI0vapmTR@%|FLC5H}sF zqhmA=0$L<yVavxaH!h5>>2del<XW1VWC#Z{Ydd{R;4!nc`?ycaYxH&1d6jw}=bE1i zLbGZTscwd|XSB`?adCivL&O@hqQTZTh89EOjN*c^8kh;V8WV1BR}o|Z8pr_%)k2~* zhD>C=K1n@&f6RSp#w1~f<*AqrCiadgO}^JC=;rok5-T3-ZB#B6bvn29do_5kDMSij zNtT1M0W0tTVQ%i{o^~ME&^7M&Ta7_A>SE0|J67(k-NXtrGsX9j;)fLp3pJ<kaz&nc z7Xu=Ts!UUA9<}M<2B+8ef;Z9b$2&K}WIx?<uA&e<R#PcyOZ>j5PaBG$eJ}Qpzj?GK zG>shV%ct=Hu8h^191U#3o3$BU_*hg@EZo*}abo&aTUDH*c5jOMn6!7TRczEo*<i7f z=%dsL=V+QZjTJ;tbdqHR_ofO8pY=SN#Y^+Ph6N8K^tquchQK$J5jFnP1p#g<{+-}L zpA*VyzdnxU_5n_uKCEOuei<+BK6y#EpzCHzts3J9#5Asi*L}Q)cl&+92h&r~QAelf zmY?m_uQdl)M(Dt9nu9D7+xT>C<cHysny}(RIHW*Nrq}ZGT2zv4*S#A2jJ?;+4&Qi< z8efcMzmn6dlR8L%p}S1Vbbtq?t~03mB!)MEme%KDq<Zag^vReyoJ<@=w@f521w~r< ztU@|ntmoXzQ@(ybD>gA}+~Yl9%%fOA_ezi#!1Rq>CbQs)5){tPYsd%99gBHo+H+38 z%+XG5@~Nk#*>tt+)7Q?vY67jzP>qbIj8|P^Rhp*4pw87ArP;NQT2?0(7GWCQ#wooT z_7_$_pIl#p#>1UrTJKTYuO{U@3{fnCxseThc}wN9z)wk8(I-s?i2?EWHsg1UEN(Z8 zwD@TDP|%7LWZ-0<OM;*L@2y*9kyC}fo_-HT>vR>@zfA>(pk&jS>dBs#W2B4eFH(!s z1>N7|xfXtC&*}WlDA)SAvD*^jcJ_R*$5fI#a}XZf@WEjCne1=vRSK^qY6Az`6#G&- zjS)-fCN~D!A<)Ns@eot=;<rmMKZ9=?{d66CGL9>DywI&d?_<hckm@V9p)~P+6>@b= zu!&gJ%OoC-{+`=3zF~-AiVfDba^#v>#znU`1K<d}NUDcZ2GjScbXtWvJ*V_Yol_Cw zRLS`ykykYzzg)4wW$+aBUKnoTdCymNzBl2j&25z#q*BeGrca3(BJ5SaG>iR&wksDF ztnvOVQ-xtKq|oMtkX)ciIU+@Q-_%T~z^RA?q|bG$6#F5Sh1Us)r0KRha*MPf%UP}9 zhIXr`+)(-CayZL|>E*A!9|#PVsHd1cc`vH~3s(oQf=#Cd1LW{?qfJlBzv3(z5-X^n zTqEl~DZ5_EjTwHO#Ut%X_A;FdQdy505DqrBUvfKh-4MSJ8RHh`l_RaxV;#yfZ2DVe zhMORod%MYW7rmv5nce<{-39*_r0{jRq1x_d=j2MkrN1!Hzfbu5DG>cZH9?Q7f`FJ1 zaxrDK^K3NB^13Sd>N^^+=?Wu1PVQDZE&70=%4H(`J_RpN5a*3Bn`vD*2Cx<4`1H#a z&098PH{bT7zY2ibI|BkU|11PK(V~$xj|oJy+^y`5_P=NJ+DF|{_w<(fj8*NNxq$>R zBrB3^8WHI%vj4SgW3<~TeoTIfmtqwEEiInBO@c1`JZ%(Dl&&e+?!dy)Qw_>Xap>8D z@<lLOOcjDjnWU@yQ{WO@1=IUa?T;fJq~Q83m3QXaYf^R>sxUX_^jjV-Bq#&EjSM9v z%dQ&eK<zL9Rm{K9oqKmXE`EE&C*XMVsLcEkUSrOvUDy6$+4vpW<n>V4E(@zm4zu*f zM193QlyAkhT9|nu6rEIbzO&OpJkq|Az|Kuo7is5|%Oxg$XZ#BHf9zSv@z$uXGr`t0 z;Rp#|%Yz8<AxG=@*6R*+KUqImS4_yi(^xo2NULI}YK*3}*I3T{{a^<78xeI|B7WvH z2TdEonneqi<>4BaG1Eg8x1Y9c{y}^T@f)x4xVjJ+K&q+7>`KZcS8df5U+3?MKNCmv z_Yh>_>WVAMCR7Zl#iuMxmx1hLDSOp1=cl@u4A;NJrGHLsUBK@?9OXP%>argusjbm8 z;Xgwfr1wu%;WsaQXMl}Stv*o(0pB$ee&<uPzUxvLUWp<J6Z{7~{9~mKyp__=ERrOT zALMG;?o`y(hYzSm2m>Suml?&nyeHYN+S=NZ0(hTEpmGcVAWV>?s?g;!2eLf`GXoqC z56Cm_T(MRipBIRFYOn!mG+;Ot=3Htwel7>M@kD~T#FkxQAB~<O8Mhzo`~nX0@-nWi zsj*BKOti6lBkhZ^r_;p*+vC#<0h&HC_CnvM;P_f{u37ux`TU0=749^vK!NX#2bbd; zu3fR41j`i~y;Mb?^YD+xpa-R;r4v`~9TPLcNer~cio%RA$2;eT%e=0tX2%CDw<gPq zwYyIRmBDumf#d2c!2Cl$`mx=1)U?mpc<HiLxlzdla+uqDEzuqy)*u03<kX`AR`Zu` tX)Cpd<CwbSjJLLifAsl(Ro>*<=inz_>#DDms{B52LtO}%aKrJze*mAuuRj0) literal 0 HcmV?d00001 diff --git a/skins/office2003/images/sprites_ie6.png b/skins/office2003/images/sprites_ie6.png new file mode 100644 index 0000000000000000000000000000000000000000..94073b2a454b6f0d0a46b981971173c95d02c54c GIT binary patch literal 2715 zcma)7X;_oT8jaV5x?x+Zh`3x!Z(XR0TDc0M7D0AGSp@~Xpg~YUSriZi+X^Zo3I-%3 zK!7Ma#3Y0*A&5j`0t5*OArO`j0z{D=zAxW$qiyf+d!94rJ@0vD=9wS!%sg;*vR=Dt z^C}Dmv)0ze(nVX3V=&8mzgntwjwP*Uv}H+{i?s!&ylu-E2J??=&JJ!?+E9y%eQWZM zZfv*EE4ANigyZ3GIHm1IzPr(otI@E}QKi3yD%fQtA}B6vMEM~6k7D$G8JbK*AHPCV zULh&3(8n}1g@&Zi(5E!yDGg248ancnj;7L)R63f*K++iKGY0aEfu>a<X;tX6D&$!e zn$AShnP>(R$zY=C)ku0Zno*5pRHK<SNM;R6s6hxdXl5<)sU$tK7A4dogj$qXhmh)E zQXN99*AgYw!=!qI%tEr+Xf7MhWg}!ZOlBhm9JqjkP&hD!gA_Ev1&s)$5vDXE`LEH! zCb+N(DQbd?nvlXbaN!%Iv>7UGh6}l9nbvT%gv+>aWeZf<qE(ctRUTBygQ+}-%7f{A zh|Y%@e2Bq^=>mu@fEfaaA%Lsfpqe(QUI?*-8kP`ZzDMgjH1!=2t3$);fH<8RPAAmZ zscGzlI3f*41T~5@jUwocSo1~<HH$UPV(5)T^F{(SOEk?Ah}RABx-~6Q4NnU4q#A(? z6v#BKGO$&q5%hv;Nr#|U)7lHR_G*N3P$<`Q$iWV|Ml=A51~gp*pk!b{Gzf|YHC=<C zWC)N9f!#wu_Yf#i01^e*tpK_eV9zknGYrax0ogFvqXc@CpiBwKl%QO>*f#?7jeznI zKt2LWRcN0I=u?4m6(CoE{iDFZXM+7>z`$pMLu0_u7^u+dxR#(|98hRg4GgOR)dz5T z7DDEx<`>|FMHod<;}&t8_O>kvcX4vXoE+)KeQx~htt~P4mv6PvHY=~&c!gmwtJi-X zOE3iDCT*w_ZtG~JBh^{AV$Hq)n+?~s3BlI#7q`fskHqA&XS=q>hZwC&a4u<b;J#Z7 z+Cib?cK;-MPMZG4<D{%+t@ZNdYehkU)US1(AGvP4x5{nDcW&qOlh>@eSU^a}?=TR@ zrZxmNgr(igX{YTxca|{CUKl3!1EiVx>r2~ttc=8<&6xPM*adR_-+0T^#q=`r{%-Tb zB&#q6H`;@i<(q0xs|6?HR$|iQFSw&Ko{+t2##vt*M=r+y8MY}_e3^&AR8uBZ5n5lF zSso+o_!~g`BqqMjBm94u@Lm#c=KZCet@BlV>R5uo#3!yB{S)Vl|JtycH-BySZXE5X zm+?y5g||38J-v{Ac5K#@JY=iuYZi4>_C4r$0zhv2b-3mwsqOhkpZkfd?)<xy&*KgH zb(+pzKT>)%jZPiM&Eb<?ial<Y)*|T-ie$Fbao%oFwozAoB`N#s{Br-tF-lw87k`vd zM_=5(<3CqWuqh%;ls<=6>6%NoP+P}YNnThxldK4{X;P9`hO$4odpgW@OG);Hga5Mb z=&w05x2)4K+{^<$(Y?7dCHdwjahxi<E))yXc1&D^vCQbXuKgbQ(2YwG5mvez%F9bF z75M!~WvI_3xB6NTh<I?^bE(9g;<G+IU8G*%?|~eO`^RjLy2U!a=iBq`?fLxZ)7YPU zG!E<NMoCHJ5>JcOjrW8@uXnCqoz#f6NFqB=zEchiDenz*U6>4YPB=vtzE<8d^3<#N z<F|wELnSUcjIm7nyEPn2O$|o?_4ZQ60AQ?t8E)xa=@<}iY<A+1*`X7M;%q}{VYIt} znTL%?V;sogLa@^e7ToVUi*<Bz^d%CX6Q56F7by+^toI|-knZ7k_{bo7#<6x3jSLF% zbD7rL=iulFFs7!cQz=|7<=01X#`Em(<IYm5jlP8D4?dfsF1ULZrxd_l-Ooo1^yh%n zvH6CEs#w(qLqqmA{ZY1dk-p0f^WSfuDtd&aoVK<;-E}M{vS)H&a&kbJNnUU>J{E}^ z6%0tpgM;Kja^o*W@~Du-4??f8H4TQ+uz>cl^*Ryi-ho^bW8>@Ix`TUJrey@CVdmZQ zx|YB13gO*<#>86Re#zKom9vKx8yhljCzH&a4#Bp!YutJ(R@}Z+%~ZACDT)R`&Bc-Z z(b1p=yhIoon-9Nz{!>hACqR%WrXtPd6XiKkERv6lsd={3C-t@pW=WmB>Gb%AX&b{C zQ!}%=x?{d&iZ?vnTW^c1beVO1eLr>;J$}4?V&3G|*}ClTI<t$pO|f}pt$jCKxY%lJ zcF?Vo2iHDc^HxuZ714pomc{9IO7DF0!y5-9)yYLqrxb(|B|am|=dJg-@{Du)Jj3j1 zs|e?V1A~8kFp^)sF{8lusr-QCK!&=|KIb;wYUTbKdcuo@1TOc5p24^QVO*WHS#4n8 zd$}+q23g(}Qta8Z-{kPS%fCM=UX02ViiAI$N}ikZ_W4M&&Mqq}Gs`RNI?s47Dgs|V z6+Er=#=9TgAb~A&N&*<C(BVY%ThzuqF`u+utrQL#z^Aa*FSgzB4nuNli{AkSGr3!w z0xlJtRhAw<<K^o5v9!3nI9z<hXr1YmJtY@KQI#*aUVCRsf{1P7<921G(A29}4`01{ z|1h*@d&RE(X;t*nJd4yl#k<_~^-Fi*ExiJxiXOV1`_<R?1wN+1^5GWK;@yDL&qthH z@?JLFK3UtJrijn>v`Q|__86{|J-k{Kvf(H@@K*O$ldQgAv?{-_W#Y*<iGA#b%MGj+ z98*fU!sPMESeoprNuqxPjxn*ja-wSEM(+hL3d63hjuV9czAJyZ=3)zYnLK<+EPvf6 zW*uY)w6lL>9i&#C<n#DaJPDtbM#AHB(z1+5#9pZ0Cn{Bn$CF4e?d0VU@#@$o!MnDe zOv4-H4&9mfw492MEjH~>B)Ua63tk2k1mNuO*=$4eQ(%yD!o5co0T*LVg{HoHR;0fN z^o~xzMg7p4njU0JJG0G+R&YGeJISi{ydz$ir=r-=juH2;L~iCzuDk6CKlga9x%=ni z`$e~9m_k_bcieFQk}IQX$@WN2?lzOz=ENqVnX0XZ=G8ZyveI9@6vOd}v-X>%C1gFE zBk$vjD-zd^|EG-<rs|cJ26w()cIyYsb%VuOcYm|w#RPF2Hy06{9><#BV;=z5V>i9u zep~P)J5&E{ZDYR&mw^aRjjFrWUK6#OSK|aDp_?!hkz%ngEV>`uA{Lv>MnC5V?t587 z90}bFqamUdb2>SP=675Y=wLA2Hc0UOMKK!m)vRMN+Wd8vH(IvCgn^KEM5;PE{5zMJ z7@Yl%8{@B@*^7ynQGGVa$EzxRmYh8HA;N&^y4i=sx4=}JXEmoM*B6Sa<5qP4^V?+U zgQ=@KH`CTDq)tEMc5<`UVzN|eyh#%(ncaA8-+}Dd-(@j=M9p6x)&Ex}&qGTq=|6Qs S_4=cqSJ+xPS(aN|`0c;amm`}1 literal 0 HcmV?d00001 diff --git a/skins/office2003/skin.js b/skins/office2003/skin.js new file mode 100644 index 0000000..cfde6a9 --- /dev/null +++ b/skins/office2003/skin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.skins.add('office2003',(function(){return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},separator:{canGroup:false},templates:{css:['templates.css']},margins:[0,14,18,14]};})());(function(){CKEDITOR.dialog?a():CKEDITOR.on('dialogPluginReady',a);function a(){CKEDITOR.dialog.on('resize',function(b){var c=b.data,d=c.width,e=c.height,f=c.dialog,g=f.parts.contents;if(c.skin!='office2003')return;g.setStyles({width:d+'px',height:e+'px'});if(!CKEDITOR.env.ie||CKEDITOR.env.ie9Compat)return;var h=function(){var i=f.parts.dialog.getChild([0,0,0]),j=i.getChild(0),k=j.getSize('width');e+=j.getChild(0).getSize('height')+1;var l=i.getChild(2);l.setSize('width',k);l=i.getChild(7);l.setSize('width',k-28);l=i.getChild(4);l.setSize('height',e);l=i.getChild(5);l.setSize('height',e);};setTimeout(h,100);if(b.editor.lang.dir=='rtl')setTimeout(h,1000);});};})(); diff --git a/skins/office2003/templates.css b/skins/office2003/templates.css new file mode 100644 index 0000000..aaa5c05 --- /dev/null +++ b/skins/office2003/templates.css @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_office2003 .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow:auto;width:100%;height:220px;}.cke_skin_office2003 .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_office2003 .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_office2003 .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_office2003 .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_office2003 .cke_tpl_preview span{white-space:normal;}.cke_skin_office2003 .cke_tpl_title{font-weight:bold;}.cke_skin_office2003 .cke_tpl_list a:active .cke_tpl_item,.cke_skin_office2003 .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_office2003 .cke_tpl_list a:focus .cke_tpl_item{border:#f93 1px solid!important;background-color:#fffacd!important;}.cke_skin_office2003 .cke_tpl_list a:active *,.cke_skin_office2003 .cke_tpl_list a:hover *,.cke_skin_office2003 .cke_tpl_list a:focus *{cursor:pointer;}.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:active,.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:hover,.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:focus{background-position:0 0;}.cke_skin_office2003 .cke_tpl_list a:active .cke_tpl_item,.cke_skin_office2003 .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_office2003 .cke_tpl_list a:focus .cke_tpl_item{border-width:3px;}.cke_skin_office2003 .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;} diff --git a/skins/v2/dialog.css b/skins/v2/dialog.css new file mode 100644 index 0000000..4d18db4 --- /dev/null +++ b/skins/v2/dialog.css @@ -0,0 +1,9 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +body .cke_dialog{visibility:visible;}.cke_skin_v2 table.cke_dialog.cke_browser_gecko{display:block;}.cke_skin_v2 .cke_dialog_body{margin-left:16px;margin-right:16px;margin-top:2px;margin-bottom:20px;z-index:1;position:relative;_position:static;}.cke_skin_v2 .cke_dialog_tl,.cke_skin_v2 .cke_dialog_tr,.cke_skin_v2 .cke_dialog_tc,.cke_skin_v2 .cke_dialog_bl,.cke_skin_v2 .cke_dialog_br,.cke_skin_v2 .cke_dialog_bc{background-image:url(images/sprites.png);background-repeat:no-repeat;position:absolute;_background-image:url(images/sprites_ie6.png);_z-index:-1;}.cke_skin_v2 .cke_dialog_tl{background-position:-16px -16px;height:16px;width:16px;top:0;left:0;}.cke_skin_v2 .cke_rtl .cke_dialog_tl{background-position:-16px -397px;}.cke_skin_v2 .cke_dialog_tr{background-position:-16px -76px;height:16px;width:16px;top:0;right:0;}.cke_skin_v2 .cke_rtl .cke_dialog_tr{background-position:-16px -457px;}.cke_skin_v2 .cke_dialog_tc{background-position:0 -136px;background-repeat:repeat-x;height:16px;top:0;left:16px;right:16px;}.cke_skin_v2 .cke_dialog_bl{background-position:-16px -196px;height:51px;width:30px;bottom:0;left:0;}.cke_skin_v2 .cke_rtl .cke_dialog_bl{background-position:-16px -517px;}.cke_skin_v2 .cke_dialog_br{background-position:-16px -263px;height:51px;width:30px;bottom:0;right:0;}.cke_skin_v2 .cke_rtl .cke_dialog_br{background-position:-16px -584px;}.cke_skin_v2 .cke_dialog_bc{background-position:0 -330px;background-repeat:repeat-x;height:51px;bottom:0;left:30px;right:30px;}.cke_skin_v2 .cke_dialog_ml,.cke_skin_v2 .cke_dialog_mr{background-image:url(images/dialog_sides.png);background-repeat:repeat-y;position:absolute;width:16px;top:16px;bottom:51px;_background-image:url(images/dialog_sides.gif);_top:auto;}.cke_skin_v2 .cke_rtl .cke_dialog_ml,.cke_skin_v2 .cke_rtl .cke_dialog_mr{background-image:url(images/dialog_sides_rtl.png);_background-image:url(images/dialog_sides.gif);}.cke_skin_v2 .cke_dialog_ml{background-position:0 0;left:0;}.cke_skin_v2 .cke_dialog_mr{background-position:-16px 0;right:0;}.cke_skin_v2 .cke_browser_iequirks .cke_dialog_ml,.cke_skin_v2 .cke_browser_iequirks .cke_dialog_mr{margin-top:3px;}.cke_skin_v2 .cke_dialog_title{font-weight:bold;font-size:14pt;color:#737357;background-color:#e3e3c7;padding:3px 10px 26px 10px;cursor:move;position:relative;}.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_title{position:static;}.cke_skin_v2 .cke_dialog_contents{background-color:#f1f1e3;border:#d5d59d 1px solid;overflow:auto;padding:5px 10px;}.cke_skin_v2 .cke_dialog_footer{background-color:#e3e3c7;text-align:right;}.cke_skin_v2 .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_v2 .cke_dialog_footer .cke_resizer{margin-top:21px;}.cke_skin_v2 .cke_dialog_tabs{height:23px;background-color:#e3e3c7;display:inline-block;margin-left:10px;margin-right:10px;margin-top:-23px;position:absolute;z-index:2;}.cke_skin_v2 .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_v2 a.cke_dialog_tab,.cke_skin_v2 a:link.cke_dialog_tab,.cke_skin_v2 a:active.cke_dialog_tab,.cke_skin_v2 a:hover.cke_dialog_tab,.cke_skin_v2 a:visited.cke_dialog_tab{color:#737357;border-left:1px solid #d5d59d;border-right:1px solid #d5d59d;border-top:1px solid #d5d59d;height:14px;padding:4px 5px;display:inline-block;cursor:pointer;}.cke_skin_v2 .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_v2 a:hover.cke_dialog_tab{background-color:#f1f1e3;}.cke_skin_v2 .cke_hc a:hover.cke_dialog_tab{padding:2px 3px!important;border-width:3px;}.cke_skin_v2 a.cke_dialog_tab_selected,.cke_skin_v2 a:link.cke_dialog_tab_selected,.cke_skin_v2 a:active.cke_dialog_tab_selected,.cke_skin_v2 a:hover.cke_dialog_tab_selected,.cke_skin_v2 a:visited.cke_dialog_tab_selected{border-bottom:1px solid #f1f1e3;background-color:#f1f1e3;font-weight:bold;cursor:default;}.cke_skin_v2 .cke_hc a.cke_dialog_tab_selected,.cke_skin_v2 .cke_hc a:link.cke_dialog_tab_selected,.cke_skin_v2 .cke_hc a:active.cke_dialog_tab_selected,.cke_skin_v2 .cke_hc a:hover.cke_dialog_tab_selected,.cke_skin_v2 .cke_hc a:visited.cke_dialog_tab_selected{padding:2px 3px!important;border-width:3px;} +.cke_skin_v2 .cke_hc .cke_dialog_tabs a,.cke_skin_v2 .cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_v2 .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_v2 .cke_single_page .cke_dialog_title{padding-bottom:3px;}.cke_skin_v2 .cke_dialog_ui_vbox table,.cke_skin_v2 .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_v2 .cke_dialog_ui_vbox_child{padding:5px 0;}.cke_skin_v2 input.cke_dialog_ui_input_text,.cke_skin_v2 input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_v2 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password{border-width:0;}.cke_skin_v2 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password{border-width:1px;}.cke_skin_v2 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,.cke_skin_v2 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px;}.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,.cke_skin_v2 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px;}.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important;}.cke_skin_v2 div.cke_dialog_ui_input_text,.cke_skin_v2 div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;_width:99.9%;}.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px;}.cke_skin_v2 textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}.cke_skin_v2 div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_v2 .cke_rtl .cke_dialog_ui_labeled_content{_width:95%;}.cke_skin_v2 div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_v2 .cke_dialog_ui_hbox{width:100%;}.cke_skin_v2 .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_dialog_ui_hbox_child,.cke_skin_v2 .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_v2 a.cke_dialog_ui_button{border-collapse:separate;cursor:default;}.cke_skin_v2 a.cke_dialog_ui_button_ok span,.cke_skin_v2 a.cke_dialog_ui_button_cancel span{width:60px;}.cke_skin_v2 span.cke_dialog_ui_button{border:#737357 1px solid;padding:2px 10px;text-align:center;color:#3b3b1f;background-color:#c7c78f;display:inline-block;cursor:default;}.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_v2 a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_v2 a:focus span.cke_dialog_ui_button,.cke_skin_v2 a:active span.cke_dialog_ui_button{background-color:#e3e3c7;}.cke_skin_v2 .cke_hc a:focus span.cke_dialog_ui_button,.cke_skin_v2 .cke_hc a:active span.cke_dialog_ui_button{border-width:2px;}.cke_skin_v2 .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_v2 .cke_dialog_footer_buttons span.cke_dialog_ui_button{margin:7px 0;}.cke_skin_v2 .cke_browser_ie7 .cke_dialog_footer_buttons{position:static;}.cke_skin_v2 strong{font-weight:bold;}.cke_skin_v2 a.cke_dialog_close_button,.cke_skin_v2 a:hover.cke_dialog_close_button,.cke_skin_v2 .cke_browser_ie6 a.cke_dialog_close_button,.cke_skin_v2 .cke_browser_ie6 a:hover.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:-16px -651px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;_background-image:url(images/sprites_ie6.png);} +.cke_skin_v2 a.cke_dialog_close_button span{display:none;}.cke_skin_v2 a:hover.cke_dialog_close_button{background-position:-16px -687px;}.cke_skin_v2 .cke_ltr a.cke_dialog_close_button,.cke_skin_v2 .cke_ltr a:hover.cke_dialog_close_button{right:10px;_right:22px;}.cke_skin_v2 .cke_rtl a.cke_dialog_close_button,.cke_skin_v2 .cke_rtl a:hover.cke_dialog_close_button{left:10px;_left:16px;_top:7px;}.cke_skin_v2 .cke_browser_ie6.cke_rtl a.cke_dialog_close_button,.cke_skin_v2 .cke_browser_ie6.cke_rtl a:hover.cke_dialog_close_button{position:relative;float:left;margin-top:-55px;margin-left:-7px;}.cke_skin_v2 .cke_browser_iequirks.cke_rtl.cke_single_page a.cke_dialog_close_button,.cke_skin_v2 .cke_browser_iequirks.cke_rtl.cke_single_page a:hover.cke_dialog_close_button{margin-top:-32px;}.cke_skin_v2 .cke_browser_iequirks.cke_ltr a.cke_dialog_close_button,.cke_skin_v2 .cke_browser_iequirks.cke_ltr a:hover.cke_dialog_close_button{margin-top:0;}.cke_skin_v2 .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_v2 .cke_dialog_ui_input_file{width:100%;height:25px;}.cke_skin_v2 .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_v2 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_v2 .cke_dialog .cke_centered{text-align:center;}.cke_skin_v2 .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_v2 .cke_dialog a.cke_btn_locked,.cke_skin_v2 .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_v2 .cke_dialog a.cke_btn_locked .cke_icon{display:none;}.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_v2 .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_v2 .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;}.cke_skin_v2 .cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:210px;width:230px;padding:2px;background-color:white;}.cke_skin_v2 .cke_dialog .ImagePreviewBox table td{white-space:normal;}.cke_skin_v2 .cke_browser_iequirks .cke_dialog_page_contents{_position:absolute;}.cke_skin_v2 .cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_v2 .cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}.cke_skin_v2 .cke_dialog .cke_pastetext{width:346px;height:170px;}.cke_skin_v2 .cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none;}.cke_skin_v2 .cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black;}.cke_skin_v2 .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_v2 .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_v2 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_v2 .cke_disabled{color:#a0a0a0;}.cke_skin_v2 .cke_hc .cke_dialog_title,.cke_skin_v2 .cke_hc .cke_dialog_tabs,.cke_skin_v2 .cke_hc .cke_dialog_contents,.cke_skin_v2 .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_title{border-top:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px;}.cke_skin_v2 .cke_dialog_body .cke_label{display:none;}.cke_skin_v2 .cke_dialog_body label.cke_required{font-weight:bold;}.cke_skin_v2 .cke_hc .cke_dialog_body .cke_label{display:inline;cursor:inherit;}.cke_skin_v2 .cke_hc a.cke_btn_locked,.cke_skin_v2 .cke_hc a.cke_btn_unlocked,.cke_skin_v2 .cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;padding:0 2px;} +.cke_skin_v2 .cke_hc a.cke_btn_locked .cke_icon{display:inline;}.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_locked,.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_unlocked,.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_reset{float:right;}.cke_skin_v2 a.cke_smile img{border:2px solid #eaead1;}.cke_skin_v2 a.cke_smile:focus img,.cke_skin_v2 a.cke_smile:active img,.cke_skin_v2 a.cke_smile:hover img{border-color:#C7C78F;}.cke_skin_v2 .cke_dialog_contents a.colorChooser{display:block;margin-top:12px;margin-left:10px;width:40px;}.cke_skin_v2 .cke_dialog_contents a.colorChooser .cke_dialog_ui_button{width:100%;}.cke_skin_v2 .cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px;} diff --git a/skins/v2/editor.css b/skins/v2/editor.css new file mode 100644 index 0000000..3f3c895 --- /dev/null +++ b/skins/v2/editor.css @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_v2 *,.cke_skin_v2 a:hover,.cke_skin_v2 a:link,.cke_skin_v2 a:visited,.cke_skin_v2 a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_skin_v2 .cke_rtl *,.cke_skin_v2 .cke_rtl a:hover,.cke_skin_v2 .cke_rtl a:link,.cke_skin_v2 .cke_rtl a:visited,.cke_skin_v2 .cke_rtl a:active,.cke_rtl .cke_skin_v2 *,.cke_rtl .cke_skin_v2 a:hover,.cke_rtl .cke_skin_v2 a:link,.cke_rtl .cke_skin_v2 a:visited,.cke_rtl .cke_skin_v2 a:active{text-align:right;}.cke_skin_v2 iframe{vertical-align:inherit;}.cke_skin_v2 textarea{white-space:pre;}.cke_skin_v2 .cke_browser_gecko textarea{cursor:text;}.cke_skin_v2 .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_v2 input[type="text"],.cke_skin_v2 input[type="password"]{cursor:text;}.cke_skin_v2 input[type="text"][disabled],.cke_skin_v2 input[type="password"][disabled]{cursor:default;}.cke_skin_v2 fieldset{padding:10px;border:2px groove #E0DFE3;}.cke_skin_v2 .cke_editor{display:inline-table;width:100%;}.cke_skin_v2 .cke_browser_webkit .cke_editor{display:table;}.cke_skin_v2{display:block;}.cke_skin_v2 span.cke_browser_webkit,.cke_skin_v2 span.cke_browser_gecko18{display:block;}.cke_skin_v2 .cke_wrapper{display:block;}.cke_skin_v2 .cke_browser_opera .cke_editor{display:table;}.cke_skin_v2 .cke_top,.cke_skin_v2 .cke_bottom,.cke_shared .cke_skin_v2{background-color:#efefde;}.cke_skin_v2 .cke_top{border-top:solid 1px #fafaf5;border-left:solid 1px #fafaf5;border-right:solid 1px #696969;border-bottom:solid 2px #696969;}.cke_skin_v2 .cke_rtl .cke_top{border-left:solid 1px #696969;border-right:solid 1px #fafaf5;}.cke_skin_v2 .cke_bottom{border-left:solid 1px #696969;border-right:solid 1px #696969;border-bottom:solid 1px #696969;}.cke_skin_v2 .cke_contents{border:solid 1px #696969;background-color:white;}.cke_skin_v2 .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_v2 textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre;}.cke_skin_v2 .cke_browser_iequirks textarea.cke_source{_white-space:normal;}.cke_skin_v2 .cke_resizer{width:12px;height:12px;margin-top:16px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -801px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_v2 .cke_browser_air .cke_resizer,.cke_skin_v2 .cke_browser_air .cke_rtl .cke_resizer{cursor:move;}.cke_skin_v2 .cke_resizer_rtl{cursor:sw-resize;background-position:0 -828px;float:left;}.cke_skin_v2 .cke_resizer_horizontal,.cke_skin_v2 .cke_rtl .cke_resizer_horizontal{cursor:e-resize;}.cke_skin_v2 .cke_resizer_vertical,.cke_skin_v2 .cke_rtl .cke_resizer_vertical{cursor:n-resize;}.cke_skin_v2 .cke_maximized .cke_resizer{display:none;}.cke_skin_v2 .cke_browser_ie6 .cke_contents textarea,.cke_skin_v2 .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_v2 .cke_voice_label{display:none;}.cke_skin_v2 legend.cke_voice_label{display:none;}.cke_skin_v2 .cke_browser_ie legend.cke_voice_label{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_v2 .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.cke_skin_v2 .cke_panel iframe{width:100%;height:100%;}.cke_skin_v2 .cke_panel_frame .cke_label{display:none;}html.cke_skin_v2_container{overflow:auto;overflow-x:hidden;}body.cke_panel_frame{overflow:auto;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;} +.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}.cke_skin_v2 .cke_button_textcolor_panel,.cke_skin_v2 .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_v2 .cke_toolbox{display:none;}}.cke_skin_v2 .cke_browser_webkit .cke_toolbox,.cke_skin_v2 .cke_browser_webkit .cke_toolbox>span{white-space:normal;}.cke_skin_v2 .cke_toolbox{clear:both;padding-bottom:1px;}.cke_skin_v2 a.cke_toolbox_collapser,.cke_skin_v2 a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -739px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:outset 1px;margin:11px 2px 2px;cursor:pointer;}.cke_skin_v2 a.cke_toolbox_collapser span{display:none;}.cke_skin_v2 .cke_hc a.cke_toolbox_collapser span{font-size:10px;font-weight:bold;font-family:Arial;display:inline;}.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser,.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_v2 a.cke_toolbox_collapser_min,.cke_skin_v2 a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -760px;background-repeat:no-repeat;margin:2px;}.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -781px;}.cke_skin_v2 .cke_toolbar{padding-top:1px;padding-bottom:1px;display:inline-block;float:left;}.cke_skin_v2 .cke_rtl .cke_toolbar{float:right;}.cke_skin_v2 .cke_toolgroup{display:inline-block;float:left;}.cke_skin_v2 .cke_browser_ie .cke_toolgroup{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_toolgroup{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup{#float:none;}.cke_skin_v2 .cke_separator{display:inline-block;float:left;border-left:solid 1px #999;margin:4px 2px;height:16px;}.cke_skin_v2 .cke_browser_ie .cke_separator{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_separator{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator{#float:none;}.cke_skin_v2 .cke_break{clear:left;}.cke_skin_v2 .cke_rtl .cke_break{clear:right;}.cke_skin_v2 .cke_toolbar_start{display:inline-block;background-image:url(images/toolbar_start.gif);background-repeat:no-repeat;margin:4px 2px 0 2px;width:3px;height:20px;float:left;}.cke_skin_v2 .cke_browser_ie .cke_toolbar_start{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_toolbar_start{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start{#float:none;}.cke_skin_v2 .cke_toolbar_end{display:inline-block;float:left;} +.cke_skin_v2 .cke_browser_ie .cke_toolbar_end{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_toolbar_end{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end{#float:none;}.cke_skin_v2 .cke_browser_ie9 .cke_rtl .cke_separator,.cke_skin_v2 .cke_browser_ie9 .cke_rtl .cke_toolbar_start,.cke_skin_v2 .cke_browser_ie9 .cke_rtl .cke_toolbar_end{vertical-align:middle;}.cke_skin_v2 .cke_button a,.cke_skin_v2 .cke_button a:hover,.cke_skin_v2 .cke_button a:focus,.cke_skin_v2 .cke_button a:active,.cke_skin_v2 .cke_button a.cke_off{border:solid 1px #efefde;display:inline-block;border-radius:3px;outline:none;padding-top:2px;padding-left:4px;padding-right:4px;padding-bottom:2px;height:18px;cursor:default;}.cke_skin_v2 .cke_button a,.cke_skin_v2 .cke_button a.cke_off{background-color:#efefde;filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_v2 .cke_hc .cke_button a,.cke_skin_v2 .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);}.cke_skin_v2 .cke_button a.cke_on{border:solid 1px #316ac5;background-color:#a3d7ff;filter:alpha(opacity=100);opacity:1;}.cke_skin_v2 .cke_button a.cke_disabled *{filter:alpha(opacity=30);opacity:.3;}.cke_skin_v2 .cke_browser_ie .cke_button a.cke_disabled *,.cke_skin_v2 .cke_browser_ie a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,.cke_skin_v2 .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_v2 .cke_browser_ie6 .cke_button a.cke_disabled *,.cke_skin_v2 .cke_browser_ie6 a:hover.cke_button .cke_disabled *,.cke_skin_v2 .cke_browser_ie .cke_button.cke_noalphafix a.cke_disabled *{filter:alpha(opacity=30);}.cke_skin_v2 .cke_hc .cke_button a.cke_disabled *,.cke_skin_v2 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled *{filter:alpha(opacity=60);opacity:.6;}.cke_skin_v2 .cke_button a:hover,.cke_skin_v2 .cke_button a:focus,.cke_skin_v2 .cke_button a:active{border:solid 1px #316ac5;background-color:#dff1ff;padding:2px 4px;}.cke_skin_v2 .cke_hc .cke_button a:hover,.cke_skin_v2 .cke_hc .cke_button a:focus,.cke_skin_v2 .cke_hc .cke_button a:active{padding:0 2px!important;border-width:3px;}.cke_skin_v2 .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;cursor:default;}.cke_skin_v2 .cke_rtl .cke_button .cke_icon{background-image:url(icons_rtl.png);}.cke_skin_v2 .cke_browser_ie .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_v2 .cke_browser_ie6 .cke_button .cke_icon,.cke_skin_v2 .cke_browser_ie6 .cke_rtl .cke_button .cke_icon,.cke_skin_v2 .cke_browser_ie .cke_button.cke_noalphafix .cke_icon,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button.cke_noalphafix .cke_icon{filter:;}.cke_skin_v2 .cke_button .cke_label{cursor:default;display:none;padding-left:3px;vertical-align:middle;}.cke_skin_v2 .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_v2 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_v2 .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_v2 .cke_button .cke_buttonarrow{display:inline-block;height:17px;width:8px;background-position:2px -717px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;cursor:default;}.cke_skin_v2 .cke_rtl .cke_button .cke_buttonarrow{background-position:0 -717px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);}.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar,.cke_skin_v2 .cke_browser_gecko18 .cke_button a,.cke_skin_v2 .cke_browser_gecko18 .cke_button a.cke_off,.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_icon,.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_buttonarrow,.cke_skin_v2 .cke_browser_gecko18 .cke_separator,.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar_start{display:block;float:left;} +.cke_skin_v2 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_separator,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start{float:right;}.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_break{float:left;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl span.cke_inline_label{float:right;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_break{float:right;}.cke_skin_v2 .cke_browser_gecko18 .cke_separator{margin-top:4px;}.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label{padding-top:3px;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end{float:none;}.cke_skin_v2 .cke_browser_ie8 .cke_toolbar,.cke_skin_v2 .cke_browser_ie8 .cke_toolgroup{vertical-align:top;}.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar,.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup{vertical-align:baseline;}.cke_skin_v2 .cke_browser_ie .cke_rcombo,.cke_skin_v2 .cke_browser_ie .cke_rcombo *{cursor:default;}.cke_skin_v2 .cke_contextmenu{padding:2px;}.cke_skin_v2 .cke_menuitem a{display:block;}.cke_skin_v2 .cke_menuitem span{cursor:default;}.cke_skin_v2 .cke_menuitem a:hover,.cke_skin_v2 .cke_menuitem a:focus,.cke_skin_v2 .cke_menuitem a:active{background-color:#8f8f73;display:block;}.cke_hc .cke_menuitem a:hover,.cke_hc .cke_menuitem a:focus,.cke_hc .cke_menuitem a:active{border:2px solid;}.cke_skin_v2 .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon{background-image:url(icons_rtl.png);}.cke_browser_ie .cke_skin_v2 .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_v2 .cke_menuitem .cke_icon,.cke_browser_ie .cke_skin_v2 .cke_menuitem.cke_noalphafix .cke_icon{filter:;}.cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_browser_ie .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon,.cke_browser_ie .cke_skin_v2 .cke_menuitem.cke_noalphafix .cke_disabled .cke_icon{filter:;}.cke_skin_v2 .cke_menuitem .cke_icon_wrapper{background-color:#e3e3c7;border:solid 4px #e3e3c7;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;clear:both;}.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_v2 .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}.cke_skin_v2 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#e3e3c7;border:solid 4px #e3e3c7;}.cke_skin_v2 .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;} +.cke_skin_v2 .cke_frameLoaded .cke_menuitem .cke_label{filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_v2 .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_v2 .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_v2 .cke_menuitem a:hover .cke_label,.cke_skin_v2 .cke_menuitem a:focus .cke_label,.cke_skin_v2 .cke_menuitem a:active .cke_label{background-color:#8f8f73;color:white;}.cke_skin_v2 .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_v2 .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_v2 .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;color:black;}.cke_skin_v2 .cke_menuseparator{background-color:#e3e3c7;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_v2 .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -784px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_v2 .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-position:0 -763px;}.cke_skin_v2 .cke_menuarrow span{display:none;}.cke_hc .cke_skin_v2 .cke_menuarrow{width:auto;margin-top:0;}.cke_hc .cke_skin_v2 .cke_menuarrow span{display:inline;}.cke_browser_ie.cke_ltr .cke_skin_v2 .cke_menuarrow{position:absolute;right:2px;}.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuarrow{position:absolute;left:2px;}.cke_skin_v2 .cke_rcombo{display:inline-block;margin-left:2px;margin-right:2px;margin-top:2px;vertical-align:top;}.cke_skin_v2 .cke_browser_ie .cke_rcombo{#display:inline;}.cke_skin_v2 .cke_rcombopanel{border:1px solid #316ac5;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;}.cke_skin_v2 .cke_rcombo a{display:inline-block;float:left;filter:alpha(opacity=70);opacity:.70;}.cke_skin_v2 .cke_rtl .cke_rcombo a{float:right;}.cke_skin_v2 .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_v2 .cke_rcombo .cke_label{float:left;line-height:20px;line-height:22px\9;height:22px;padding-left:4px;padding-right:5px;filter:alpha(opacity=70);opacity:.70;background-color:#f1f1e3;cursor:default;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_label{float:right;padding-right:4px;padding-left:5px;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_v2 .cke_rcombo .cke_inline_label{color:#fff;}.cke_skin_v2 .cke_rcombo .cke_text{border:1px solid #8f8f73;background-color:#fff;height:12px;width:60px;padding-top:4px;padding-bottom:4px;padding-left:5px;padding-right:5px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:top;cursor:default;}.cke_skin_v2 .cke_ltr .cke_rcombo .cke_text{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_text{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_text{height:22px;}.cke_skin_v2 .cke_rcombo .cke_openbutton{display:inline-block;border-top:1px solid #8f8f73;border-bottom:1px solid #8f8f73;}.cke_skin_v2 .cke_rcombo .cke_openbutton .cke_icon{display:inline-block;background-position:5px -715px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;width:14px;height:20px;}.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_openbutton .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_openbutton .cke_icon{filter:;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_openbutton .cke_icon{background:none;filter:;}.cke_skin_v2 .cke_ltr .cke_rcombo .cke_openbutton{border-right:1px solid #8f8f73;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;} +.cke_skin_v2 .cke_rtl .cke_rcombo .cke_openbutton{border-left:1px solid #8f8f73;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_v2 .cke_rcombo .cke_off a:hover,.cke_skin_v2 .cke_rcombo .cke_off a:focus,.cke_skin_v2 .cke_rcombo .cke_off a:active,.cke_skin_v2 .cke_rcombo .cke_on a{filter:alpha(opacity=100);opacity:1;}.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_text,.cke_skin_v2 .cke_rcombo .cke_on .cke_text{border-color:#316ac5;}.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_v2 .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text,.cke_skin_v2 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50);}.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);}.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_openbutton,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo a,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label{float:none;}.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_openbutton{height:22px;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_font .cke_text,.cke_skin_v2 .cke_rtl .cke_rcombo .cke_fontSize .cke_text{direction:ltr;}@media print{.cke_path{display:none;}}.cke_skin_v2 .cke_path{padding:3px 3px 0 3px;display:inline-block;float:left;}.cke_skin_v2 .cke_rtl .cke_path{float:right;}.cke_skin_v2 .cke_path a,.cke_skin_v2 .cke_path .cke_empty{display:inline-block;float:left;border:solid 1px #efefde;background-color:#efefde;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;margin-bottom:3px;cursor:default;}.cke_skin_v2 .cke_path .cke_empty{visibility:hidden;}.cke_skin_v2 .cke_rtl .cke_path a,.cke_skin_v2 .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_v2 .cke_path a:hover,.cke_skin_v2 .cke_path a:focus,.cke_skin_v2 .cke_path a:active{border:solid 1px #316ac5;background-color:#dff1ff;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;outline:none;} +.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_v2 .cke_path .cke_label{display:none;}.cke_skin_v2 .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_v2 .cke_button_docProps .cke_icon{background-position:0 -16px;}.cke_skin_v2 .cke_button_newpage .cke_icon{background-position:0 -48px;}.cke_skin_v2 .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_v2 .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_v2 .cke_button_copy .cke_icon{background-position:0 -112px;}.cke_skin_v2 .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_v2 .cke_button_pastetext .cke_icon{background-position:0 -144px;}.cke_skin_v2 .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_v2 .cke_button_replace .cke_icon{background-position:0 -256px;}.cke_skin_v2 .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_v2 .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_v2 .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_v2 .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_v2 .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_v2 .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_v2 .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_v2 .cke_button_superscript .cke_icon{background-position:0 -384px;}.cke_skin_v2 .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_v2 .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_v2 .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_v2 .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_v2 .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_v2 .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_v2 .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_v2 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_v2 .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_v2 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_v2 .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_v2 .cke_button_checkspell .cke_icon,.cke_skin_v2 .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_v2 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_v2 .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_v2 .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_v2 .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_v2 .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_v2 .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_v2 .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_v2 .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_v2 .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_v2 .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_v2 .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_v2 .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_v2 .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_v2 .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_v2 .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_v2 .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_v2 .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_v2 .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_v2 .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_v2 .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_v2 .cke_mixed_dir_content .cke_button_numberedlist .cke_icon{background-position:0 -1217px;}.cke_skin_v2 .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon{background-position:0 -1233px;}.cke_skin_v2 .cke_button_outdent .cke_icon{background-position:0 -432px;} +.cke_skin_v2 .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_v2 .cke_mixed_dir_content .cke_button_indent .cke_icon{background-position:0 -1265px;}.cke_skin_v2 .cke_mixed_dir_content .cke_button_outdent .cke_icon{background-position:0 -1249px;}.cke_skin_v2 .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_v2 .cke_button_justifycenter .cke_icon{background-position:0 -480px;}.cke_skin_v2 .cke_button_justifyright .cke_icon{background-position:0 -496px;}.cke_skin_v2 .cke_button_justifyblock .cke_icon{background-position:0 -512px;}.cke_skin_v2 .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_v2 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_v2 .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_v2 .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_v2 .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_v2 .cke_button_maximize .cke_icon{background-position:0 -1040px;}.cke_skin_v2 .cke_button_creatediv .cke_icon{background-position:0 -1168px;}.cke_skin_v2 .cke_button_editdiv .cke_icon{background-position:0 -1184px;}.cke_skin_v2 .cke_button_removediv .cke_icon{background-position:0 -1200px;}.cke_skin_v2 .cke_button_bidirtl .cke_icon{background-position:0 -1072px;}.cke_skin_v2 .cke_button_bidiltr .cke_icon{background-position:0 -1056px;}.cke_skin_v2 .cke_button_iframe .cke_icon{background-position:0 -1279px;}.cke_skin_v2 .cke_button_source .cke_label{display:inline;display:inline-block;}.cke_skin_v2 .cke_styles_panel{width:150px;height:170px;}.cke_skin_v2 .cke_format_panel{width:150px;height:170px;}.cke_skin_v2 .cke_font_panel{width:150px;height:170px;}.cke_skin_v2 .cke_fontSize_panel{height:170px;}.cke_skin_v2 .cke_fontSize .cke_text{width:20px;}.cke_skin_v2 .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}html .cke_skin_v2{visibility:inherit;}html.cke_skin_v2_container{visibility:visible;} diff --git a/skins/v2/icons.png b/skins/v2/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3bf195dd35a2dd3773a5cae7e4712a1133a5d5 GIT binary patch literal 5598 zcmX|FbySq!)4#imfaKDPfD0%gAt}w0i!@S#APoW{upkJMOGrzobeAAVs^k}0QE5a% zX({Pgy5qOLf4rY_?wPrB=bq=8JI|f@oG1F8?p;c<Yh(ZbN)2^Y1A>GDaD|!_M$n>? z6PpO)Dn|XmQvk^6{tXDo$U+c|>~`t~Iso`_0e}qy;P{dtR{-!924K}10GTuZnA~4k zeOChj2JUGap$U7gtEgOF0+>z*0}7RvmUfuL4-*zPT(@OI7Kn+7QA$Y_kpX5&fodwi z%K5hH*Y4=(7%zXmk;ywAvC8cl!{izymzvty+1aHdWMjm9{mso`83?Pga*r`_a$092 zBOo%}(@$7G4W#PehB{|&&P-OhxK$}A7yt1g_2^uA5%u5npLOa?*h}mk|FUgIOL326 zs>2R)9`tt_S=sF*Rze6#!<$=MJA;k62nEHn%S$~EVj@HYez~(P1T*eLSy)tbXvrUQ z6X-c~%yqOeqEHCu&HkmurXF8f-TvE}nns(}lg|)aF(!HjD$P~CNQcQL6V=t#4N7#+ z;o)KH#8^q`dz`uy5bM1-hn}6mmLn0wQXNgWDgAZJ#D=}Onbj+zqL&wtrLo~VI@(cD zQAejIV%pje4hz*O!<|iv#l^*`QQGqN?=LQ(hx<#uzCJyf*n<Q{5ly{Y>ga<42{xs> zi*s}$+Ugvts-B*n85tRV6^_g(-J|_oDu(Q>g}M6220p$XfW1^sQxPiA3gyzPsK`g% zy9cDDOG@5vZPJj6Ra5a<b1JLm=jWWA5|K!@(#y+}sr;muQ<M(bsHmv8iAF2x>t9}8 zvR%)cnVCsVO{MUt`&d_ZoO#1bgz_SZD6@5c&=qi6Er@7o-B8ttN`1?7_wL2TMQbbW zO+^ibq$DP_%IkT^lk}ncrluCIJ{|L&8%<A+kB?cDl&+_Ykg653nSXd&*>IT-blcX^ zPvf1OoOZ@DB(sL5Rz{m%8T<PBrZ%qS=H}ANDIBC;@9yr-Gev$IJrZ%6kk!+(_l!a5 znG1bdVvtq2d;<*%3It+e<u!d57YB6a<1E*bU&JLrm46&(-GJTw>FgQsyU289d;TW+ zE{XQ9{r&yhS~0Y0Eo9mQiEq+r<>VxMmn0JFnGAauS7sMC&Z;WPOG``3%HHGg_^qw2 z?d|QIot@p?-Mzg%!rp^}145RMj*bYioSdATo}LoE)${XnLhOX&3X&fvA>09omw~P! zP+S~+1OTm;hN_a0@A!JwsXyIFdWRK<ac!cj0J&^C;t54NwowY=IZNv)qM<Q9sXjhA z!M);|`E0^%qQ%eW!+Np5-G_{Hu^nkxoS?ayC^XBOE{gK1E>48|Hcjl9+lS@@w}rvs zW0r%+r|Duh9@Iq(f9(I9fb7CMeqNGa`cG!5*XcI2^CRSOjj2F8Smee{xVO5JFvl42 zC2JN}CMc&W@g>)WQCw+n`k~Y-nwH;p6Y1*eI`mgXpB}A`Dl7;yPrD`4&<>pyc5`w0 zD$Ov9k<wNYVEn)j*aZa4WfC2XLJByQBfFJ2lhkk0Hr!Adm^IR-%tFgNnYugRM9(oi zFfgE0z7eIS@BR;3k=;PKWn<&*SV7sWFz{jz_nXieTEG95wY24}^Yt}{mJQOLl-6wz zyAYIlV&pMxv?`}{)%P@F3IaN<al#aVI4F#`J>rX5J9ZXC*dYAAL7UtVO+*;&5pQ{J z2y3h=XHuO6nG=wQR#dnG9CX!>DDRWbUzOF#JqeA9;^N{LkZq-_KYvFsppz6CU)Y*_ zT+qvxWoY`qMwPe5`q4B+mOPT}qFCiw@YY`q*`qz2hI!+cFp_wHQ_^?a+HyyQf2j;3 zkzSTL>QUjDR&e?*JrF$GDHP9||KoT!mFLg3R?ojGi^vwgqvgws4s-XG@4qhTA}~j) zN7GmGTok3wrg>CxTUVuMP&QV~Z8lOiR(zr(@$W`xMa*#`(l-e&Ci0srk2i*sffa|a zQ{n5RZ>ZRqmdYb*icO+7NFt;v0%hGd4EZYTm3=FYRPpA&GlIo8YLj1!Ao^Bh%Q!26 z)<s<$%_k@@{z(^eZ2t!{bMtq>CwtCh+8>fb?hlFU7!p@h45C(hSB5&`(>urev!w&q z)0{a|*vWpRbGL=Vl`)8!-kPThk`u+8NLI1FgJ&AsA<lL6PhZdwAK{+3Gm+h(0LXx! z<Kr==sBdsZ0i+FP6I11aB0Px;vz~TLEH-nzj9<f_8ehsXVVCTJtq7Rj_Q5XAFJFBA zoRl<=XI(h<eHuL7Nx(KLCqa@Lk7Q<MmJWKeG_No{sURxq8E_etli)Kgulv$x`K49s z>0*dV<R7^Fn`_U`cWl_cRR?VK%Y5k|X~WmgxJ{m;kVsM%!3Gwe+_`z!Y=RlpH}eR( zfPlPj?@~5>wI0S%hc`!3f14)}Cir!j)2^hbh9)FnLdSZkT5B^Z*P1GOfL&ZRu9K4D zYoZ-{c%mkCQR%c=MKWFTF)MqKXCV<K`W=UA2wwnIk)6hXkA%zDc>7*XHY!7Lp!09& zgFM3_8Kogbh#>SDaLRbAk4Z@eIxro>kGhnEUU>&SAajRO`~_5JzL+zE8>R!}m@Ch= zb&vmhmy@RB85h)ggg<6(ow_%~TZVDz(qKJrXyCoB&QQ>Sn9j<_I{u8e&i6%S7#7wa zpbhEM0dVSmkOUWO`{3+;muJ$qXVeNU?)X7G+Us#f0dGvFd3ey5A#pW&bpF_kbYUSK zy&xyb&rElCBE5wz_t*0J{8Ko9Q^lHavjc3KO`D<~b<H0D_PuD<D8c@o7ftxRhLSaU zo6x|b@^b#kPYDoZL2Xi-n4G|HcqqkJYwPJ-%2@WVqmGa!n1eNv<P<>~dDW(e_*h$- zqY-d~OED0Ua@bNXktx3)e5T0o9uLnckl_HF-<y25=g@U8e|sglGB4b*cvDs!6U!uI zX~;?Zgz<H&V=X=dCY5e)DcbeLAJ4Tye&tBs&9|Ms>+J6v>v070MyJ!e4?-fD3m&g( zED8~KR)7Bdc~87s!RTIOL`1;=uM$ORE(N-fpuCSd>Eg)^pnXaE&9+p9lq1||Gwd3g zl+ZERp5QfAv%@E{gtB+jA7FDPwE9v3C^EQ3WkAuJimf0bkw70HZaF3mzfoH1Hh6cu zYk0s~Y#_{rd2|QQwb-vGZP)vKE6>~PWn&I|^3_Gzh=l+Q#qh)2LOXQ_tlR@Rrl^j2 zj}z#&Z<c!k?6eR%Hku-Z6O=QkLr9i<mlFXKtLxjoxcTkTI}%9N2?%appVdY_2N5`r z@|6?W^2O2Fp}^E~w6vYhlA}>D<<yU5eKlEMEp(_UO%gjzC|Bn^jdPlFs6Eo2lZQ7r zMb{Ay)Wzu7RYZF75_7nnWU_MtwX&76^-Er+SEP7xSJwv|=m-0U>Ta_IXH<~!_STYV zU%ZHOm0-h(>%11#Z!-|qCvJ#%_IKm-+_9G=?I7Ui#bS445xgLi7a6b5tJC=~=AE&m zR$OCOr}ntVhi_@IalP-^2nM-g+f}n5fBF$8xB7{Vl&MfCb7L@`--<UcF(foJ6k6Y$ zmxm2?usT*&3dw{@0-Pvco(#bD^q8tk!g^9H9^rJ9MAIpVCN~w?;iN=>J@FfY1R4U` zEkf*R+2LEq0bPph&#U@VwNC(4Dt*r;ZoB2PJ?$xgb`>S<9S5Ltg$S!8iQ3#ZXmb0P zcF~-uTxt-2Iz8R*ifqOuQP+zhIg8AJWIu@@Eh!NcQlFft2<%uf%~Ni19EsYs0S!}b zl3JvFBv-m_9@PB*3;?~TPL=rZyy)ncwXN`M_tA!=Y^h>JYGO&$(M%W}-4YJ~jJjub zn0q6whb?*vzuwu-^?XsXz>^V^NFRwKhP~wx6c=i|UStinP}j+Z?Vc~z@PRyX2#`P> zu@`(2WtSA7wmy)M`v-xI#mMbLegd{L2$hkBjPIYW^?Oec&+;6Ai29(<wFKB7@Az-7 z7y@hGwVz8Sm1l!H3q7eqW@P|}DJUu``b+)!=(~T)?P4(P(ZS~PzHzOx<GOik5FMbH zzvJ?IZ+|M#d!ajdtsjaF_1PHzRDQhKjJIs`Y=Hu@+d}`)y8qjCqAvRiDE=?&wRycO z6uVc^HdQA`304%@vvv7fT3V=iS01pY(latLj!%}AmGO}?+&4BhX26f?KXf|QiuJkp z&i|dC><aJ2tR&vApy4eX<YCYRk8Kwp2BxagcejYJZ4CVP=`Vj7%KFIZ-w0{896SD6 z;_^6#nfK3jA5Tt@A6iGGqNLilWAsN`+qF%V+4zbo`jO#bdZyS2IeqQE$B%71JUnU& zB_$5Wb%nJYACee#*$&=v(h3pTY(uQs+1ce9)<UO5^QD9(Bp&hG!bBXC5adp`L~%<u z4FNl2?5&i(($l6stVQ#8hO50*v#X=yZl+|<=D%n&)RShC^>UUbY1!Nx`rz#rvAFNo zLS>@%=Wchm{hT0wxq!ba=O02QG~XrGQ`lu~`H8fTt`*N9Et@9Rrj7@-DCBmcOh!51 z=~j(2I}LFDjw!YzXnUyDu#vTv;FZB*E&LMr&k}!rIPHE6+*<>u0}lmj1AwW$PgP&e z^Tl)l6Q-Nf_`}n4^7A&UWk=H|_2-3U%1s!v>Ld$~typsMbtL1PmXO@@wL{p^3b6t# zsIn_EnuW}}W9lRAOyR4(Zb;blcnQEgU(>xS<KCa^W8@L!HB6O-id$@A7*1q)L=vDT zo$1!QzB=^0i<IE^Ooab_xCo4hPTST2O*BF8fJVRKREuF`Vql;FpiM&PHXlD9pKWS< z(BA9Xg74)_Ovwz}O|jjC1^&}6TS%VM_FP{qQ&k-#Q!kqCeO*`qr<u#=-shE^J!7o9 zS<btXUswBRMfxiu4t_1&tY!xHGd;tXOca9MrkcDlryKP{a0N*nLohV?kQg|u{jLa` zFqx#X&hh_D0lFn}pMHEcR_lP7aINnnCe3uLzxAc3U;eO`;+nrjrP@`w`oHGWp8J}4 zauR2yuP!RV<@nBFje@4TpAk0L&-ZA+vA&1_at-+`x!+~-jb%U1=ko;y56c`}(Fs=h zf=^XA<GCCh9bMKaX%%z7j{DCMd0ta{vGBZK;_c8&qk&VbsQaJ)o=@wP)c;+MC3+Mn z&%!!_Wmac(<t+Y{DuB%-<p|obh3?KLs6r)a4D@(JUvAsdaR`~Qi+FvE4yS!pa8lap zwQ-;PiR;em2%?l20#zfjq97J-H)l~NwR?g%OT02d6H2K9R1mTk@bWZKp2MrrQwhHL zCMCr$$CNgGAH>3y|E97yuK$s8Nr?RhI2$1x5tQ&yK}BJ1A}v6tU46wU?wt_KPn;V} zSJ139SX13T8Hv=?GWpdLv_D>Dtaa1qrAYfPb?o4$H28lKB%Qnl$TG|3x@*a!W$0Q3 zNu<2k$?*+aF`}qZH$D%jhLW<h;w_H-v^TVz^gh2|6W!7ghik)2iK;k*LN!S3Ai~^f z@7q$P*u$%th}S7!yS1uD<=#p2ICQ4Dd8MeOSUz7-WSv0LiAqBfjX%0Xy@f~Kr_o-e z`$c5)q!g>El4d=K74oPq`}oFsPKb*bh8Pl3r^QiK$G{)zkX|9W=S*s+eeE|b%;qaQ zR$ab5&1m|TV(6QcYx_k;z{R`Rr})9N)>u||I&~S2yX8ifwS5M64Zn6|C_~cI$D<5V z_M;3Oj)D=h_e#rTCd`yMGTRi>dU=u0Yx4gOuU@^PWLaed;EihGz;XnoxA&)I4zkZD zzX;aV)yD(#dZPDC2r!Sm-um94I=`;2?%-@b!Rqr_8x&xh%Bd|{PJXKBp^n?ggPQ@c z4tXNEyFv9}ha>y?4FI?XS47B)hV1CoOF9TQOO`Ng+nu$lw*CTby_8v;PnpS<XE;ka zBm!r<NEV+1BO}w9u8~%^IAaVH(6vjN#mP!T0R8yIhG79c7!IoNI;}q>VuoO&2O`Mx zHx0v@{r&j(Xn}CeW3ST}+pVWgm_tK(1_p4?JPFrK5>}JYWEsduLxdf#K-jUeo_$4n zG0Q7m+Y>4uiFcd6emn$Ig9C0&77W_S7-Mv~i(C!^!b)W#R4<;TTAr*SeJ+{7F!A|C zgjTWr-r%oXH%*x0M!8qr*@@Qj>GY_5pq`1bs7zBJo)X3Owyf;jD~-bK=Snq2p<chn z;f(>upPmqpgdqXf=)zjA+i6CGqA!h+hBSB@KeNclsmk-XMw&vJN9Y;4p)S#M4Xhpy zk00Mf?c|SA0Q%>jc^@$RSV_8?6=r2Kq+)FBO_sOTv}vRb%i85CEFSS(>d0DD@mW-< zU-<e!)rYYrY%M9F*F#3|=yKn#>A4HDg~EGC`)_I%OvnbY(ev}PtXS_r;xN?{^&OHY z&Oc<VAKJP)>~P&KM_f9-;^9DAtI=`0xuAqxuJjRe8{a{ZW5QnbE-iR18jadEggZo8 ztS9GkR)fIFFi0x-Pq;~gldpI<fm0iqrS@Fm<+}wQVhbKZpi+-#9g821v7`*__5N_! z2(s*z_8+5MI-9#nGPuAXYyIslc*fKm#Q{qrBhd3?^6DkqVaT@^Jj80n{Q6WcmQR+m zmf98`{;@#V#XSv;3y}`=_1IhWyx!83b+=0HKNq)5-LS^2=1&i;C8DeQ&HNqaFm{@t za_ml^nef-QdYU?&$m&n_+^6PD6VpvcOEb0KyGYVjAdh`~eCl20te=>&Ur(4&l#8GD za8A^1pWi+zvO$~_@rLrO;1|4laEYM(^`5QLBy{i4QvloSZ86f!g>9ZEu+|I9A2%;s zvZPL1vNVG9<$nYTm1LUbB#bXRQ?FgkGZkPo9OWl5r;qw>OHEph)<-<DkL`fLCu{?& zj*_4N{^7GD@1ToB@Q;d@g0m^pi(8QKQJB?UpTRdakvWg;@U&48d)RNcX!isyy*Q7= z8k6)Nt(CGP=|^>JHjk)-Qfa-|c9M>z^64f6j;nK|=Om-_E+<X>4wS@@tUbK12;{cJ zWz5kxQQPSC{_~3IvAp=9M?<;#Fs{h%3q%@aT5Y_7w1dBAZ@56hD+_bkollY7CMa!^ z&Va|g>C|r%cWl~NmkJy6->v+-JzMGS7Icoe98gJ+Z^z|yWK@aYxx+T;9rb4h;}G~X zxU{vkb!Cf#Z$-hgI!JDKc(43xUtbjr#3dwHHF_4eDj2m^9hU&$e|V7l*v$=vSap{P zfCKBZuiNr{Fa0aCNcSTNl_CKD$4XoRzk<YD?em*$MEaky=<O#YBpmLhyu`cy*_}N) zYH(UDVQLqOORzfPdTKS{OhlrWBL^1`t-^G<G+Rxz_#e6f>?I43rJn0kPD!~+_{Rh^ M(7LLX%GRO(1EjHd^8f$< literal 0 HcmV?d00001 diff --git a/skins/v2/icons_rtl.png b/skins/v2/icons_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..83eee28ac79d5e00e8ec9136ba491c8c0a2b8352 GIT binary patch literal 5600 zcmX|_by!s2)4=a8ARPh%N-P3Ox4_cfB@H5qGy($By+|l4A=2H5fJk>NjkN4n7U}Np zWr^SV{_%dE=iZrf&YeHz+?hLbPt<cARZ^lyL;wJgs;epKV<iOu;E@yHV6{(4Uz)Lk z&`r(E0|1Dr{#_s-J(CVQ$!x8ruMGhHPXGWG1_0<gtlR<sF9879wgdo)Q~;oL{rb9B z1psh>=URr!SQ{oq#k)HIN4x)lj7(~3>P0*^j(~u{t`#FBUsza}6bdaQ0v?L-RFVM< zEX6<noJ>vq<>1aUH2KahTya!okW>YEqM~wreSK#S+C!P|CbIn}0b)>47&5w-lseEv z1K^sT>c#D1g2?)xf*rH=7iWJuz56MvP&DsD;6AVw@u_uTewRE0Ck7@GP<mwl>X~~I z*+oAwyK?V+Ny(#l2CNJ5|Lq?h9#1so(8<bO-`(lD-@~PgJlGuQ3U!-yAT1~?ym-Y8 zX9IL?`<MH>Xk=vQ9QVgI)|-cXDRsv9G&BtNEoZ&y4&f%c`id<-eId59%_d6Q+k2$S zLl+kp9W#Hwm6RjYpn&l3?G5<)8fWt(-92c3Gh$9}_tlri)8)l&JRzaGThPYe|3tL4 zK7IOhiMbNi(gHoUP?|G1-X~dKU!R+zEGsX+y#-&KZTR~73}wL1<7fmmbUD?O&+|nY z<yF_0sRXsu9xExmfB!x`J>CC@{X-d@%d-=*2U&+}%MEY!eSF;k<`O9lIWSKL_=)b1 zA9*s*p9A9J-@cU}?%yX6t|a5KWKmGc%gesT;NpvQP)kb_DUMT1$%%*V{rK^NO<7q^ zPw(#Tj*%&Mad9yvC56PjzP7#|ox$oUNO~KOo6&JL;R3L{UK7;RWK~lClv2#Ds(O2S z+tGnY{82?BCgzs%)6*~1ISpxSYHH!))4wvX*X)c&qv_@4nUYZiDg}(@HN_Q;cWHo5 z*RHZhtb>EY@pQUaCUS0Ts`;ytudi=P(@suK4z-l*c?#3u;9#yPq-W|<&|yYWSJ&n} zTt?TNzi#7!q~cv7I5;>65Ed@08o9kar!t?Wf0Psv9S>F*MQ5_&sE#|n51cGC-8x!f zQ&z>-`g3-6#-|CVRB0p9`u!y_jZ#WV)OSPlO9QRJ@cP!$`rh@=A7v#aC8ee12L}g- zhlfW;N5{v<CnqPTr>9uk^Ye4;TfV%!#QJh|b%nuTu(5h`bA$CAyIsN3zrSH~0OYB! zV*tplPuT$grM9|~yrJ*(ZYDaw0F~C?p-^G-c*d0GsU=NV=k8}JW@60&tFK>c|Ef*z zx+HjJ6lc{Vy^Y7TBGViti4&TJnvTV38|y2hZE&F=s!!T9>~hgjno5F5N4vi4?+ob@ zA>G$*qZYP9#9iYXTbRrEK$(kx`IBsu4L*sBmmpR%mUuN!4=PytI@q-x{dA;Yz(y!d zt2mcvq-@;bX@Wb>PX**GLNprLml21JyuhG%TeIXfb?!nMWVnKmSVJn&^z5wGlV70s z)L+@uS-F&C*oIWp?^VToR%`8jpP$N{q*0{LIsLW3;fPBGf1az}og$7(;RP1o8r~!5 z)+QDQXFXizLhHNWZU;kZb?~?X!Pb;3ok|N!n%tHE$%@0rO}EdhwP5nN@A%Vfh(8B> zpL(qX?PVyCb3ax;?C<ZtW8a+gv^c1jS3r7coV}wR&tfj#YA&$`YokO)K$Pjlj)X&w z9v(b2pP!W5Wn`rLKCwXI0aoeEbFrh^JdhYH-LtrrG92^+)mj-Dj=>R`We)9+BG!!@ z3OIJ5<wt_fJ~~sI5234g`27BeUkUbe+X)z%nm_me!@LjTD+6@gn+9^b|HWcsHS|K4 z>3SqobY^9#yF(_heJ8virW?Z4E_K;AUgWXCbJ|DmdcASSDDJuT3GY@>;<5UdTa!fH z>o~SfKY=fWR1<`mUwHZ_2pi+5n^a@n8Pr<?NUX9MaRp=a2XzIKr=-kHtt<?q^fW^L z&T26dxxaPi;wVB>TS4|FJ*fyHijQtO^?R(UOnL70cv_(5<Xe20dbH?SA&`*kqkf2a zQE_o`=s$cGf>KgQ!@?To{dX*==px_HX}h+a@iD7Y$|{P85HkB~Mi;2^9uBSBX^^aJ z>XFe|N9$S9*~d1Q?urF_t(O>7g><}OxB<R+{+|{Is5KW&b>!e=lTZBj-)Sd4z!p!w z%)qlEj(TY!16}Ovbm|%oT)dvK$no^{@=ik|X8I-nagmOO9-kkzw~vmtsSXEvG9Bz- znZ-1x#j*Bduo-mD<UcpuKi~FmaNd6V+D<0cBVdD37~;FP*ctS*<75U^UXd1Rfef6Y z6<~oV1x|6QuZE3Z&^t=HguJFiGaI@V?$zETvK`BBs>Wcx#<cxgFVqpKXQxjv#ID!2 z`Meftiql|$gg>P>_}gcwA=Iy`k!lkg7xgN@4f#wP`HVd`QJ;3aA2+>Xhm4sMu0T+w z`qn^L%nBq=-2xWVQ)git{m~D8s>j2uRppKEZp+zp5f@e5^QM}pq_iAd%7f!z^vAe_ z%cexI1TZu*5{L4>l{3mKt)4Cg122rsjLnT6ln#fMrq@}OZsV2`Y1%Ly+l=MC@@6`d zo>`+?oE)m&-6JnXypUGiyi1<T{X=D3R$AI|8Nt;sJ!5NRWF-0UM|I#;ZTVnz0s!O6 zsi(~E8+LA9ap*m3$V@QSI*TllP%A4PtmZNI`+Vf;Q_A&;XGn_PZuD|9yu7bGE*n)d z?ZPM?TP6}kv6F<OQEmcQepLblG`nIMS<mT#$v*iEVApU)Fp8pUIy^jU8u_%YuC7X2 zp^MI%a-}b{Vkca%?>yD$d{g3$<?eq>_>1jYmHoH@p9l=U0s{AsR%6z1q6OED1O)oZ z%ajZ{Q!Qpl8$U!<Khy9?28Ne*x*~{adqn3a@T!UyoVPv{m{l~oEp-)A{@$y`9oNoE z2AUlucr~_a3Fia&M_xm757JcnNhk6%nI1%Mv9iZzs<j2FH<rUB)1YE63RJeRMD>r5 zKhV(C)s<qhR|3|M*}nf2Lp_<BQ>5;SyGl5D(Z?LI5urrr<8TVQx;zR{s`ZpmfRc8e zHmx0wOjSzSJ^%=%MH32vwR`{*QmRI3R?L8JnT?8<gi-P@t(<K44UU9PQ$)s}52#cb z>6J6V2i;)}j`$wD@=s~CE=Y#94oUtC%qg%}TZ4hkgdl296Vz`%*a$hk(^a^34@LGQ zv$-W~IkG{-il4wKVLO{I4GqKd^I01Dj3VtNVfie7SL#bRIv0k8;BZO~E(JY>L{NJb z$I_XIvG_N%x~JqfRdM&!_!oqfM&-C>d`chS@bYKTV)COxnLTN_UFM?P^NpZ^b+tZR zYsr!C2?nEf>`Ysx@iAK-g~n1NtGLNoji?34x0PER9^$Y})!qj{G=nA73;P*}TylHM z_0sa#oq8J+lz05b7q+xz{!S*mE1nz&B@4;!wA<T7KPV`BM-4GZh(GFaFStyFM@RF= z()X%{>I?dFcgVuk(-#gdFj>9JR_w=jzfIbo59a~BSb{^`-39SKw;x9=Tgl=F1ExKA zFY$pC8p4!d5DjlL8!RWxQ-YBUbF<_IWgx>L_{Ld;)wCSVp;`C3mMjHQ$vz@|@WZw| zDF~3B5^9`9KKMw-N4Q;Ewb^9%!a6Mlf_wxB3Xxl;Jai=Y!m3OK=x`}Wniqa*%Ut(n z2VS<JD_>smE{dIWmW6jOxlOsUvoRDWM&1N><miVZ9plM677l0$m(YvMS;g}IKLP;Z z$Hq*@?6|-rIq4Cns-Svv@J*?Q%~OCRi~dpb-7N;C%JK+b3A0;s5TuJ7Rk`(3gVn^V zVJme^pc!mIndQDVk|lmj3lBg2I~}&%t`6;>ezGevz$o6|-RyuY*R^z=QMl1a|A2om zqHx+yG1#Ow^0c+Le+|L^ry8wsOVawB&*A6#oNQoozjTn6zkR1d=b_xediEH<#Z^)7 zXIlR38o7Jp8C?AQ{C5fb!ABK%#L(P^Iqw-4?t{jac-6^@IUqNs;$>5H&B-XYW(uE0 zz$2KJ&+b%J!P2PY!OLdPA0%?cHFhKEB2JSdVy=Iy*Pa1>lROEtt+qI@-4SE=p=2JI zGc<F=ZY?%87PGpGTcN3e<z=tm$@)l*-mg}yOmdkqHnvKkO?0`-NEu8{G|k=pxX`*% zRUPpJcwTKY-|A=kb5_r|-e#$b5_qDS%)^OkVXt=$aL&V-J(@U&$TYdVNds(W+R;-9 zx_oA)eKVY#GoqDkg*JI+D!=MS_>*{FHddAo6RlPWz4I=4Vv8kvz7d{~Vd*{G=*>;0 z2`$cb!7Hkb(Jv(>AqmuBy6;eL1`oo)!KvWl`*LWkPVljw1wU}~jSx(U<?)PY#l90? zSfh`o{kIZ7a+88{?>S>PWPe%Xuj=0j+{|q>wS<^U;b;sJ94dz}@XSXjCMD@mmXw#5 z1`f!Blai8*Vl_fFG#t4oauX-yU|}KtOQUj@7-D{c!*NB>&^mOQ1Q+bFK73z~hX5BG zig$4+1P(>C5!3LPy8R@iAi&*kyLi<?(u!V}zL*v6=fg=|;nNw-_TT<~f1eLJnD?B6 zI{jhwps*s?e8%FA1O6mS{HZDbJ~X_Xo_HCuWZ3$c?UpnGMzKIa$!znsB3Se}vdxLk z>q6m$8I|J1JuAl8CIR(iTMXbiibRN$ZysE5U165Y?oE?3=LOK3Y$qNk1=AcxRs<+O zW=6%MK?reoVQxK*??ANBAZ1cfbTf5QQ4yK)hon(nUS3-O(X-xEgq<l`p8OpbtZyda z(>pscs9&=;F&N{)%^f0y0&`?Z`mD@0alb?ut@jWcH_AJ5y4K~|`L6Tz3`gK(y5m@{ z5IK8(73My-?tO?aU<^z-0EizA^Kfj~W%_yd*35neBHvuYC7Zl{{V=Vu(|!WenAuB< zNdmZXq^*I5+4saWyf17p5PDyi^cfXAewmZu&pOXhODBKC5yB@OXS}aJ;tXq?%JA5C zIE99|Ui&SNRns%oBRZs}Fo(#D>T0}grqhvh<A%pA#;}9Ho6cB_s7($1ZD^Qm_Sxd= zYjX<=3q4UxmLn48s4IJI?YH+CnO!ktx6_!vBI7q*>xgX67<o5{q{UA?ym9v32N8df z&>!O}<)4O43im1OqNzoG%Ib5z7@HC*W#@s6p@h#{N%f^wx6PidJvW398kNsGhmD*) zuIEx_G}8ZW2-lx8F1Nz&c|}GFPi?Yb=?={}FBJ+h+ZS@9SCTO^N!%g1Hw6_MIB@OZ ziWb}$IulkPaL;m&5`mcpBU1Ol(R%a(8V?J|<R04ocaNy3br<*g?J#(GdI${9=P+<X zhM3jnTcL&QoBYpErHpJZv^k6Zoabl4|0D`FOOOwIujYBt=I<rK=_8_<x%M5sIr8K) z){uGF7B{?!CdoHcu`}OK4$pdsqs($xf3`ik$W;05gMw(eH=g3ef`j>qFJSsAf8YE6 z#*G#{Vu48tL^Qfs&21PF6eTwLmkoghs5YC4IpFzUjG}or=2)M5Y7oZo*(dU98VQ5A z@)Pyy;jf-`9>a-L%t}6N**zHSU=s)G03_!VPjTzobU`vt4eV3;^>6F&ri3&&%i8C_ zoW^>2{MHY^n>{jJlvN-4ZoShp$ouF#*1{e}%3n^ntB`6SQkV1u`eupd5)6t}zxU&R z_NQ*%H|Br~{Wdmzwyh_i;pxilccMqJ^RHjn;^gOl-B96u4@m4^Il652s;d)O1(CI1 z{qfp)>*VA#P!LD_+#HL6B2!zTTV(~djb5KEh<nw1I!gkSv>hXoxXGmsFIUE-FXDs& z%ShzA)ipBK)owxQJ|K4%dk?ktkH+agrNe<WFe0sohgBW=q8|z?<T<6rWw10rGF<oq zbU~LWS(K}+Xh1zFQ^?uQ6~Z|IpquFUU9#|w5@2gSoB3A$0(jeQTy-|n!tw#2+kWjO zGabCWJ8Io;H>LxkdokZ}cD<-8E75WiWnE*BQ<9dIFFB?{38`zlR^kHZ+6fmWs*K)l zkx!pm-`_uVEi<`roqL2C3i8KAJn!X_kZhKk_<3_iURwi1nu-+t-W-L04!K)7?*Koi zB8)J$D7U<!{dw)INFz5g6sU{dOBuN6sOr4UuHY!|2-(@+kzy?7fCoqn6ILKSO=FMn zHyC!}BRPu_*KsBveIuL>)U`edqBEve*3()%0bd@Acxx;0Cn5`dS=`(4u(OG8F4qG> z$5#4HN}xpX<bQ1en~htRxRS$trY3~srEOIJHin|X*oM3nE(r4p`4#0U#4TI=43aJe zN#};lbEP-H>0f>hT#ZEvc0yty)_V>0M=Kwt5j{uUc!6%ba$Zcbk>8dZWn$%*FV%?f zUpg|mBQDFW%f5_V{QWZ=5;?*~4UTsDsNUQqwll4x3hst~%>){C)I~3bs)ozl(1&Kp ztmjcCJKt4^5BsHY57Bb|S`l$A?9yyH%SuZw=s;%okKn`59&J3HMaSN2rgeJp%FJ;O zNinMnVypQ!6CUV>&vWO+#-inW9~!AC%BFZBI<Vh}vxdMXm?Z5D)A)j`=9gzwE4z+l za(9UvT^rJ^n9Pnxf<gliQ>|MXDqaQ6mzm^TZ2$2*$e12)63)4(O(xf3yT9KyIhX3y zB*+DGwaSYl?0a}s$r|1TGGSX0U%2W)Pud5Q$)w~cz>Z9@{Y8t@aNW-SYl|i3G_4nw z*mD$UTH&ukpd0&d)BUTEa2kEEMq*H-A$ixvK+lF|JbY7@#D>-J9Z=7-of?)M-swC| z_~p%AxnBJAl{(4`1S|A&3YwD9sPo{S?TpY3n9>EFP)3FGywa{zS7C{790O<Am|4n; zK6n6%(mua{Lw*5YDm&~4Vo~vf2Jc3eDc+@INZaO`NgehsI4e)Au%^{!Q`G2?u!1nP zHt%#Lvgw57N6l=@-#;EJTH$ON4QK-0J%;$5#A8l#X=f2=I`k4ZO5#Xe7P|gD0kzc# zVK||<fS-3sL)XFk1MGLvsF(xKM8_Jz`oRH7Qd?64*Zf_O%Klr{ZgKOCbHQyJRH{4m zE{RtX8n!fwf8g342&GQm^j|A@V-$4L$!P5EqS#&bu{o9@aP>aOTYAE+slELc5gQg5 z+PzjsYVo_GqT)&szo~HNFw{2e_tljynaHzNA|Na*EQSB|{x+O%26-q9OtrP_7%D1u zhdP+t<lz7UmrIKkk<At<x=Jni0IYMaCBy<%S>{yfgl2F3OYY<ICu{o=1H-NmEB)+T z<xY2Jr#$z6W25BR5C*9`dc8o~7AEn4<JI<0On$!-TdPmjuqAgN7j_2$eh(~<z|M5n Ru%}Fby0VT^g@WaW{{hG4-#P#Q literal 0 HcmV?d00001 diff --git a/skins/v2/images/dialog_sides.gif b/skins/v2/images/dialog_sides.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f91b4753ad672ecbbda36ddd0522f6f93dadd1d GIT binary patch literal 48 zcmZ?wbhEHbRA69aXkcWxdUfvq|Nj+#vM@3L1#}pI03^e}#NN}-!TmCvfx#L8L+uN$ literal 0 HcmV?d00001 diff --git a/skins/v2/images/dialog_sides.png b/skins/v2/images/dialog_sides.png new file mode 100644 index 0000000000000000000000000000000000000000..1042a61cf9f3c3839d1c4fafa0ad9d83396253ef GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xp=xbhE&{2`t$$4J+tA0B`Qsl z9vhhqtp$qJRd?FDPMdF@e_dDMD`Urf=8xG5b(}}eFZ`0d!ouSpw?IAXqxlYhq!kV@ Y*liGXlBs6f3N(+w)78&qol`;+0EeeJRsaA1 literal 0 HcmV?d00001 diff --git a/skins/v2/images/dialog_sides_rtl.png b/skins/v2/images/dialog_sides_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f7b49fcc3ed5a8fa763d0ad0372f86c8582b20 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%xqG@ehE&{2($V8fPfJKhU`;Ah zc*d3_ry$0V<ftIVnpCJTt>x09fWpQlD(0qaDhB!Y^fDE`igwg9eSAM}o@l*f2hbU8 Z4D<GL{eSw`^aRjI22WQ%mvv4FO#tQFHbwvd literal 0 HcmV?d00001 diff --git a/skins/v2/images/mini.gif b/skins/v2/images/mini.gif new file mode 100644 index 0000000000000000000000000000000000000000..54d910741607aeef28fb9b5882f77f14a3d975ab GIT binary patch literal 183 zcmV;o07(BwNk%w1VGsZ?0HOx~nVHN00DyOQcc7r80DypIW|;s0|NsC0A^8LW000L7 zEC2ui01yB$000Agc)HyFFv{5oF_bJUwc?N^8lWRyWF#Iz8eXjXprlOQc&_jKVd<V* zkW!KqD<>P$Qd9j}#|1MMRnVHftai)I0hk4V(@-do3I{afTNt=~7q!&zhQ}M^!I~t% lw;gm1W_k-^4+91Sga8FY3}$4Fii8ejXLS&6nq4;u06XFIMo9nw literal 0 HcmV?d00001 diff --git a/skins/v2/images/noimage.png b/skins/v2/images/noimage.png new file mode 100644 index 0000000000000000000000000000000000000000..159811305af7fc78662a53949f9c62bd702785af GIT binary patch literal 2115 zcmV-J2)y@+P)<h;3K|Lk000e1NJLTq001Ze001Zm0{{R3yC6tk00093P)t-s+g4WG zTwL2!RN|kX+gMoQprGyM<>Ho>++t$jfPmRaN!?~<++bkXLqpg`M%qnH+*(@WuCC*= zv+nTj+f!5FhKAvZiQ<}?-*<Q0S6AP7c;J41<HW?`k&)xc$>EHQ<H*S4t*zsuqwn+a z*+fL+ySwe><KAv=;;5+MkdW{9_2QG0;?B<7US8Z-SmM#q;g^@%PEOu$Z`n&r*g-+v zY;50jblg={;*^x^-`?6vO5u)<<HpA2(9q+xwd1j|<GsD($H(4vcHCuU<Fc~k&CTF} zf#8CI;-#hIyu9!9^4m~Q<IK$Ajg8}~s@q#z<GQ-zwzl4FZR5Va-f?l@eSPid=HtS` z-+6iC#l_lCP})&Z?(gmI^6=xZu;aJ4;DdwWo15a8nBH@9;+>t|a&q5ubK|eC;+&k} zgoNRWitg>}<EyLTi;M2@@8Yek;fRRaU0vXOeB+&++DAv?nVI95nBHV$-DzpvYis7c zz1?td-+Fr5NJ!$Ip6>4K<<ipQ!NKLv&)H5+<e#47w6x^Y)8eC}++JSl*Vga(_t-x_ z>ekfk+}q{E#Me7J>(bHOVPWE?rr?K%;Dm(Xm6h64Q}6Nb*FHY!#>MR6-{6IX-+X-I z%F5>4+~J3Z;f00e!NKCVxZ<&~;;O3SqN3ugtl@%!<hr`sQBmW#xZ}&q<gu~izrWpR zXyd1++fq{Ej*i`GYVPal<D8uC@a^N&)Z@d$-C<(t&CBMmuI}>i<fWzW^6%ow$>P1e z;;ydZ#KhvOtLC({;-aGCtgP(Y+2*ma<h8Zrx3}V_r{kuk<+{1$$;se`hUdGw>)hMx z+uH5p;oyjf;E9RksHoz~%Hqq*<G{e-goEIUir|Zj+EP;M)YIXUljFI$<e;D0RaNN7 z$JRMH*g!zpN=oI<&ek_K<f^LKQ&ZVcP~K){=(@S&yu9Sr*5tCX;hdb}!NKCg!{V~C z<j>FIou1*CnBt3z=eoJ#jg8})n&6C#;Ej#qx3}JMbKrV<S#Yci000F3Nkl<ZcwRlw z1F-Z+6oAnl+cutU+qP}n#&6rUZQHiZwe7vh%<flHneNKzTS?H$uc3*fP*Bj=v130% zQBfbUU>7tBO*{x<B|7Nh;^-KaxNXG>tyZfK3kwUxgN0tN*J@X6OH7P%ba6R|MjaCq zA3fCS^<jZ|d202c|5K~gd2qmlqefBCqmx<;sSoAkjCuTc2mG+G#h5WU;PU{VeE1`Z z(gy~fIRs|Mj*N`Z(9pQAOoc)jZ~!!BqtFfY_n68Ejf=CgN=<zQZQY7pQ#Yqt#l@L$ z&Y2r1@H<>trNaG^w6x&h;0X}?rKOdWz!A`Z9|xkD8K>f`UV#Y?778OHBSXx=QYf4d zoK}L{Q!~*TtJJk6Fh&?D5QJPX2q1&OfL$*X3k0A6uYHxe2KBE^0~AtRv$6lS_4Mtw zjmdb8w%ey$-|jzKQydZk_OE`ld4h0VagD&R{(3`^$bu@Iv<q*NkZK_+YPfD|5P<zb zxEWnpSA4o<V`K8%DHbCmBSq92k`W@+P>Wz|F(np;w+L$1T|t*mx13G3-F40Aw`c@9 zL2Z;#D6&TC32e8>&v@;sZF2I)mdogy^|n{%#!lK$`8FOL+{->kqn*o!Q&9ZdT8hya zJJ)vob|e5rp^%1ahwoV6vbpfmrNU;DyYo|7C5b{g9~)~xp8^}MtSyt#I%b%psG&iG zJBt||G?}cda+pLp|0#Mv83t8ePNQkM%(Af1?7Hn1&|J&A%4#b~576<-vaWL11-=d% zjn3E4Bu&oGSEtcv9DHfzU9xYFqYbj3X$xMyv<nDG(n&h9oBwmo*&PyHQb2&6=A|#q zwQB<+x#CQxtCvb!8Qs|;lM`ikGgh@q>zk620x(KK`!SZ(ByE*QR@b!~_Z6C8;XY$~ zUEONQDrvnAqx;eCz@ACxt*$HG6s>%H00x>89eAybjwzilk+fp83w8hb?EbuE^JAhJ z4EY}FF(BrSQGb)G7>t<GW%KSm{ey-ap5D8OF;%;F(_Qn2G=Ijszj(K2sc?GV0omQ0 zUmDHGY9FkYnq85#b&*+0|NdvN9jA6^4=~kWuCiL?7mvGm>XRo_^U^P?TAn+Y1rHE_ zni#6(xk`Dp*RS@tv%k3M@Zn7t&6_X1D#9_Usz<Aq4=TeeGTpsiSm17UI-#eBkUkri z@h|$^2dXeCL3O$E@TvhDubx{|ao0;=L;PM`+TWu0rMqW(hbv1_3^p#kua~Y|I@Nya z5tf30r}*LsY?sREJNJ6oz|a`PsDN>MSrI*i%%e-j6MXo5XJ>^opYKB$zvO6U3O$0= z3qz|IC~Lr`ua^};XHRw(6BB$8(H!zg5bq|pvFFeuV5s|YG-%VelSQAyCZv#&k664V zAt7N4cG)c!6Me{hf)g7X>XnP+d$Dm&DP%HHygT2`jc3lyEx$laRFL^?xRj&toe^}W zHa;0GEXa4`dHDM?hdMhuhnW8UJfP3tD98k-IT0*xQ~{2_R}dFsjM>TMT3T{AmK;ki zcZli18~1!6BBy|?LIZR*fvg}FjN^S6;&M40&uLiiJvkf>m&x=PS74Iv$cEj9I}aw8 z3u^H!bBh<h=Ww|oKmQDq>8Q6YMezoAmY&mQ&3gCl6I1WNV$>{I@G?DfCd0dk^LaeL t9L{?@PmZPK&<CDd0a3vxu<5Moe*xgDR7U()XIcON002ovPDHLkV1lp=pwR#T literal 0 HcmV?d00001 diff --git a/skins/v2/images/sprites.png b/skins/v2/images/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..982717bf33ee787a446a3cfab6d0d966a75a193b GIT binary patch literal 5389 zcmb`Lc|4Te`^TxIQi($Glt<auB8oyLOTsAoU`7iSV=QG~+hk8@>M48DFw9JbF_uAD zlC5bNhLMp$m@&p!#?E*2_5AmJp5H&e`;T+(*E!egI_J7y*XKU(>%?CJnjP3DxsQ*J z?|}IgV;f#?z{j_9V$W{g+cTgQlaKER+1%L3E`-X;a*MMc?};TQp`uDrorW3CmZzT- zO~k}~iF&+Cu({&0eEJ*RGUC~{myUfk9_h$5Y(xYD4DQP$)gHp^G8B-)Jgz+?+9l+x zCvj42U)rrMslAWByY8uYe^!2X{lWkg_CPc1m9BY4X6@qKCwfQH!HzP@YTas<{#_K_ zhM%_^-t(|)rp0h$2yD_%2yauQ-6px{aP0KV(>w}}u-WWQhc``ZkMR5V2k;gOXm4w4 z;Sxo7B^Fjn=(n6!$*RPzHwYQ71B;rpJEE7{H#Rkw?L9=<J@0gMbt|!?qjmLm^tVHj zzjRupRkN1bH57($C5Eob{%YQb4__X-;CEwGu;4JI!2u(zZ*$dOYTA%zHR?XQZhAYw z%CiX<O428g>9)3)4FP}nH;I`2bMxO=_%_zd^{-8U59ucwbD9=*gKI_H@<jLd<QVsm zuqNuJ{=BgWd+EY?K%m0)fOJUG)JfG!zUD)YJ&&%c+xfn`B~`1T&#<1J!$YGD_U)6& ziMO_rOCfg1rdV00pnIe^2t<01ps>OEr6B&ZJFrs{R|yb|k50eULKrrWbd&|fWk=dc z{QRDm8awZ<o$mNcD0RV-(Emp`vIoifSmN7lG9z@F08B~K7SIemunKV3KkSQ3%QL<0 zolCkBbWReN^=bi?{N<~u6@RPBoFw<{T<MC2N?Zu6p=ogdYA^9=SFm<QkAfVg1KJ1u zb{C|P6jBDda0?rFIGO}m1oh^m5;QS4F}fH5YY@dXWf&5dM0_)$!VT+FZ{UAT`Ho?c zGbxV|B}@mzDnY#Jukla`X+v0-f;YNeIn;v|8;Ko|Ah<vA39KeUE1}sEfFIbk>iBH< zw$~CUj)DR%hN5Pu!(!%ZYOk%e3=vz471#O%N=`cu;~KlU4nnR*&%$6d`hmnb`S32y zD6)EkMQPjOz>A@Gq3CKGH9r&4dM{9&dxL~3&=Wntd>M)A^-5-u7(O|eMV5DI6Gn+C zA4Z}lMMiXthq82C`nZg211;M~z!;p`%v-m**&{u&yNT$T?b7Sw{FAXjB{CK`EL87I ziWX<7zyl=GG=!^sXYvga4a2mk-C>Q4%lSx*Du^!DUZBUFdVc<&nvi2n+oH&QfEC>9 zkvN;Mb33vASGP8P{j!Q7Rb#nM5)A)97WwxK{XNSG;xq(znfz#yN+xOR?Jb5#524db zC6i0nQ4U>RIIjntcUZ1vZwQ{!ZWWb2IrYAnb7~uRIPuNLO|nhH+4J+C5-cO`d{{9q z14UvX)?6J)+_+_h51_?zKB?JcHH1cg+k7BVSk1?rw!va2{D^lc30oc;jg_yasekHq zfO@CIlc(mC+E<FXVQuusk*u_M2ri_BUi+f{n8Z&9^=9Tmo|$DehIFN(?=<^ds#mf0 zM%rF!?d5dta%keYmw`2W(R-Gq&P*9z8wEz(x-}6lcra=0hL>{amJob&TCz3!WzyfA zE<N>jJV*pM(1L0444q5m<vP<pjaE}7iWl&yIxxou0uLHo)Jngoqo3ui8GroM0>7Hy z+i`JB9|h=?$xAos#wY`Ef(kEy`k4mn`rG$~fjj}?Vqj0e4`Di^!K;3l+I#*^4+h6t ztf74^ne~M|ko-%jDxB6<*ieNx#{29uHf0AQ6g})yyaMzXY~sEl^S7G)8b3Q8`Pss8 z^?{zEO{xMXdt+n6cM^gY`1Wj>;lS)Sg9oCf<?-$6pS02(e?|6Do;N*4i1?{a&*>eX z3qd#G;z>IY!%;IoyM;q~V=3B_r=$X{gO^MB4}=eq$?~^wIkT$~U0tcUyp2P%GnyjX zR`M>N682n0ia}=E2*RuGc(;cEI1Ix8V+C|g8W*b)rCg-=5wU1+rbEcK<eg{AsZ59Q z#pP0c>ab^chRJjjJW%caTjrbp%8)Gt!5ZQ9+?L8)Ns_rN)>2SbNb%PJU&JC7EtAu_ z^=E*7?iTpIrPQ1q`H@tbmoLW68~e4O6008S0cnIhFsR|H?wK^eDCHi{uE6^<UGitN zZ%&wnM#!hO;obN=+$26l!;ZTaCH|g|VoEuUF+Y!|QUo>ig)}a$Dt?dos%{!S(cqrC zs9?kU*Rl;0r*`;9oZD7OfHC*g^Cjjue5ri`Gom3^78ZnV`5N{P8JigP?SmOGY$c5; zDDrPg+?MFF_$Cs*88>cq5eoip6d?)|_A%A3yqd3J_IawRPytp{`3>6f1#jURa~>?0 zjZ=5>dODAq;PX4hXc(_`t_=DzASWAWFOK{QT)3lL+ty^CVZ*UW_PscQ*GtNfS%(Dd zs6?*#X~2O%lbWYWaC>CK>3u$waD8XzRI)Z*IzaRc0X`Z0?m$CCxygBHxo$K2D^fAI z_3NH}h?O#*!_oN0$`g&NUi&$Cg4QKxSwjhysJz{^VyX=sgrr|<4!$1St4(**OKO*i zP@?`>c)S4=xaV3afygdhzYeUuto=b5Z#R~gFk_d}D@F$~9~YQahZVCv3rN#EKUf?4 zuMOXOea&78hfJvb6cm7JQ@4NAr~TXRSupqdz>@%(3zLl(V2OTCFj4ZEPZ=KMpfGLD zJ+~u$Lzr0$`;$QyUs8faqjDU0rV9p=tV0aaiJNZa7JUUhuKf<4IAjv;<KzjnW=Ddf zY}5$7EbA%$!j*w+%VvhYNERQG^ylr@(}Ogl8zEU(lqj=M2O^U3I@{+cgBUDY=U0SJ zpYHa0l(v8QyF>UcocXnyr>V)#tvD<D>$O;v4O6j#b&$j53RtALV|;;MR%++0VX+$S zJ)JZ;_mC`hr=WDNk6L@s{yCcZF$S&rM$s_q;Mte(e)mN8S~UPwyukW_bEC_fZ|`f- z7u7Hj-iKtdgkDL~x>Q-yJqQ^VE5($uQgIf<f*s!N;L#;X2g6~hTPfhKCM;V7D-3d% z?5ehAzJl*HYkw)$77!rj)N4-{ayhE1jTPTRedcBM>o{Pyqv_pTG0>}lr!{8I<#-Jz zFIDeHFL0*!h|?z<22ZI`2P9Orl{eoV2Y7I}d;ixVz{mGOtIn%A8j??-BY);(9j}*y zuNCZBz9Y7YuQwix&K{{~GW6DgMkjLxc*73wV4rhFaH^cU@or@*Gl+X`*Aia%HfPw% z)~Cpe$;FQ@A~);qNw4Xwe0+Iw)P++afTPfP=FW0d@wGO$cF|UhGOgkgY=0M5KrWu@ zZ2}V_#2B%vuumgYXjhb%t03*7v#3JYBm9}~P|(R`bDjZ~E8wwr*@0Y<TN`6^3{dA; zywg`<e$4sA=$TO$P+vu^Y97M6R_?%dc#3-x7r<)`PacN*wkrPRr~FzQVK?46@jfGH zgq)vqGCtbqJT>V<8VwNQR}h9l3KoZziklD+V5ffg$LdMb#tHi{Y>`h5qq=yyCPtKq zE!ls!fo7%)VnxEuC`cl9MNPtJ4N?K0v~(t7dd|2sFmhRDQ4<$;1@@wS)RQW)sNpPg z=#^Esd(SB5PFO}B8p2={LH2N*YG0ehPT9AW2UCD27Eke$Ex?1bJ=$(94`naMh!C+T z-Qx(?lJtPJ!26Dw;Wo*0qVoG>&^J$j%N;#sx-*|2Ty_EL>F>SmmYI|nEc=Jj;}DFv z_8=m#ebyT)(|t@qk~V36bTwdiLQYItcD$zJ9{*1E#N*9eA5dF`xMruP;jvTttY3ba zQ4au!;UlK57c^0$Q6~Uc^J2X8PR$BKTEJX_1?3xKEgujEz1gi}w`CytD{B80&G#{? z!1A}YALLM4sryc$W2|D0?nSL0^SHfk(9z;HtJTr<Amv+2|DCxQQA&e&%R}!T{?mHv zUs5*AiTZkDh`xfBNU&N`WqtFlfaIJ<Hjy^I#k2X*T|2X%H@hfle3A0Rj6qy8BsOu~ z%?r;@W<}-aM@N*UmD5M7ALubv4~Er16#Zega?@s;<fsq9hrSd!wv3dN;ps1Hg8z-G z{hJas4sNG~n_)p@?ss{btpkT<(|VU4#&u9$wse(qDmap|GBe9VSw}da2%8;Wj6SQk zLsbPHLQcdeW>q3z%uB$JPLGK!eyDh&g8ORU_I;xa_S~>=7##{x_V0ls>&gS@NEQ1? z&+<jJluE|cTE9AXI&J#>Q@S#SoU!w&3OYR0`&OF_8vp3ee}=cMBjfMA4ygt#{$CZt z7LO5jax|pkf}d2b=$jLGET+!kp?GvLyxcP2+k0ZaKxnr?owxs>LG%#B*LkgzemL<$ zmhrhHE+lZit?BL^r1e=IjWZYAee<t}e{*MYpPbMlX^Bg)MnV&z;^$Ni$}8nUSMl}1 zqTo|#h!11(&O0V+hc^uOh1)0WR7OOoGBH%9QlbzSXCWWfLqDFl2-vve`cTfyF}^r4 z$9z#+vQ=E_*E)BngA0oD+H$F|HK&|NbRp!G3<xY;{yG$QbJIwHq)lf~3hR<>ZCghc z!U7+Z>2hDT9_$y^y?M**ERl6Gvm(VU#l**eR~bZug&+zfF*>88=wKFuth-HMSZSYF zkH||xnZK%<Rk*mr;&*u!M$5;X6an_t-|kzHw36=bd?@VZzzvBT83&dJ4Sqm1od4)` z4PNGSOLEVQYk1)(iW9Qc0N26bo*2i$5ZouvY-r^Gvd$KCt~8R{c;ZEbdlc{iO@a`B zGeoRLD3A`&^%?k*@T%ZRO9#9&(EwQj4Lnx`4&u+|RWa<wx*%Eci^&gf`{x+a%mZR7 zb<Q~dJo`iVM8pa|ab>33^tOBc^rX6>PVP;1##^d!3D-6%$J)8H(dB+Xa^<h8uo4w! z?7`%V?^(sa$;x0VeK3l@tEUdRO3=~uKa<Vg+U%TbqkemJkiYZrc1^`2Cohak*3fth z_g*Z51w-(@Zd<juZs&p}<PGH`C38_gqd(UrOCy3hdhft@Zcs!`ROzH_^%%Z897K6R z9MzuE9>@I*O{9}>)x^~!M_IgzC_H@qR<~yWuWtS~{+c9N5oK+bxk9;9%pFS@)Dx9J zk@CjGpi!@DwQZCq-|`1ee4SS%@Uim$1ok+cs3-pr0{;cfcgeZ3pekCssfraMo7??; zM7`Q)rT*{A{yqCZX~SM+Q-qii;<EbK`W@?YXQ7~@=lq!BU-}XY@72U8p{%~8Ap65b zhZJ6KfyawFvEzI`#^5D_qY&j=NX^st=r({@e-X{H!0}C`m#s1cnVOMwmnG!$Y(AW{ z_a~CkSZk-JE5;K2VCPV@uTilQ%wD+XX<{?o)ZHuaZ*)aS;CVr}%+yI<UQ=W5e<9vV z<T2V_F*35k&f^vGyd4Kj&Km<>gu40ZKGiUh+J(D(zW5-&@~g#V{R+djqTs?Wc4M!Q z7wtr{8KnDi8=<R@0~UB7BxFG7w#<p6FEx_X^N==P_G00WSQE~0FmlJ4U|xtj*i-ox zf|G!tuGnCz`0z)nY~k&P=h_Qd^ImjPo#MxOx3Skq;|`ZEDP|f7UElB*Xqs96aezMc z)Kp^7-kS2aDg(+W2Y9Kt&S0bcGY}`C=|>y_B}5oBqH^7p9oX>`yRIegK2{UJ<{sS9 z$b1QdJDK4)34Mh5QO`o2VZ^YFufiarXNTOe**p|?k5_tb(B4y0xHM=6@?DsROF{2- z?+gu&M#bqX+?8MMB|{fB$w5m1hruZ@;2C9^7BO>^)r<9RInD0uzqZ&bK%2gF8T7`g z;!5wp$@j49D`yefJf^jzGTXXm86H)KeSO`2s&#fvLn0-+XdCweP`(!FJv5!0H|*t6 zGTH6ki6wzXy|b6nwt(q_3~II92lU3T+!B;$Y3BIIqw0uTU&Ei!N4Z<PMU!#&^9b1O zoa#|!bw0Z5U2Wv&2Jt;0=u_^L`pHZ~&(hpTBX)gUGgaa5Eal@<{WdkVGzffmjn2D1 zTD3?3Brq3(>%&>n?h82XrtNu-<wtPTFlFBb@_>m%&7qj=kvB89E=&7A(@T`XYw4W! z25ndDJeRqb2<zN|cEgp4d^3ZMr4i|&y2$Wu8^EUHP(Hg8Rk_PxeZKqd^pC1J!<<NN zKdIp92BywzD8t3y!}?_XQgieWOLks=h4v!>I-#7H24dvAn2%oI4K&0t7tYl$4@JM| zp-?xihnuuM2QA0Ask~nTkebzvZ#EB%Nl2~4X^}xcDzi!--E42uP+D`|y8rwAeE0YP zmc6Rv*4FX&Z9;_FOYWpaQ4Su?t&-Zd`a}T~<y66K-X>|a{2kLq=gXB=A-0$7NQeJ# zvxn*)K|yOiN(B}Q&jUaO7XJL=>FR{@T~{PRo@<y?`_Zqw4t&17O2p3kl-CY_gpOM1 zv{=ZwF=7+HzBaEbCz37J1qDWzZAG^i{(tE{ML*pXjCFRQsy@sHZ+SE~0UDzLHy-~7 Dw9Jf5 literal 0 HcmV?d00001 diff --git a/skins/v2/images/sprites_ie6.png b/skins/v2/images/sprites_ie6.png new file mode 100644 index 0000000000000000000000000000000000000000..4389b65b8a3a1064dc31b992d48600a1fd9310ca GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^b_@*6FIbp?tdfL)8$gP&ILO_JVcj{Imq3nmfKQ0) zMIeKLAtJ&&EiJ9MIDFl@rbCC8T)jH?<HyI-Hu3ET$}yG%`2{mLJiCzw;v{*yyD)UH z%6b4foCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#Cc6N)w$hfF_Dg_zY&~5ZLn>~)z3G_6 zWXRAKcsl05PN&2Lry17=w5>~j%9!?$cb9%>(VJ~~yNv85TrYm#CeLZ5GPz^5=%3$L zN@K6*Un>0YYS+5gd~xe)-(5S($M8dP&FiW?dGl{G-qA0KE#Jt%p!dJ|;Q!_WbNBR> z#9se8yF_LWQ2nlE@#7oTy%vA<?-)Bs;r<Yy(s|c^Uwrv5u&y@zSIDWL*QehZT>X_8 zRkk&5+R80oOzMBty!_qzeDXYfo6Xl3U;g_xzrHr~SHP*5*PqMmul%Z;v3+aYvxO)M z@66v9AO720UM-@!ZO(qXOTWBc3(vY1|DyJB#e4UtY3^2amw%Pi*f;2X@s+SM<9mPT z0}?&Yb`HDww%oNlwqIgNEIxAerm3I6HupR7v9DQxVaae{@h`?Ze-)qp+ZFi+#P@Xd Kb6Mw<&;$Td5Zy`u literal 0 HcmV?d00001 diff --git a/skins/v2/images/toolbar_start.gif b/skins/v2/images/toolbar_start.gif new file mode 100644 index 0000000000000000000000000000000000000000..1774246c2ef37fa17cdcd971b3db38c713989818 GIT binary patch literal 105 zcmZ?wbhEHbWM&Xx*v!DNYH`cTMJ){#5iK=Q6WWtDtnAH5a-ToFbl$Y$qHMnfGs+q& z!l!hn{{R1<0Spv>vM@3*@G|Itcpx(vSj09kT*<OnVs>=evpCkexyN`q)l}NV7#XYq D|1u-x literal 0 HcmV?d00001 diff --git a/skins/v2/skin.js b/skins/v2/skin.js new file mode 100644 index 0000000..00c2f2d --- /dev/null +++ b/skins/v2/skin.js @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.skins.add('v2',(function(){return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},separator:{canGroup:false},templates:{css:['templates.css']},margins:[0,14,18,14]};})());(function(){CKEDITOR.dialog?a():CKEDITOR.on('dialogPluginReady',a);function a(){CKEDITOR.dialog.on('resize',function(b){var c=b.data,d=c.width,e=c.height,f=c.dialog,g=f.parts.contents;if(c.skin!='v2')return;g.setStyles({width:d+'px',height:e+'px'});if(!CKEDITOR.env.ie||CKEDITOR.env.ie9Compat)return;setTimeout(function(){var h=f.parts.dialog.getChild([0,0,0]),i=h.getChild(0),j=i.getSize('width');e+=i.getChild(0).getSize('height')+1;var k=h.getChild(2);k.setSize('width',j);k=h.getChild(7);k.setSize('width',j-28);k=h.getChild(4);k.setSize('height',e);k=h.getChild(5);k.setSize('height',e);},100);});};})(); diff --git a/skins/v2/templates.css b/skins/v2/templates.css new file mode 100644 index 0000000..2b732af --- /dev/null +++ b/skins/v2/templates.css @@ -0,0 +1,6 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +.cke_skin_v2 .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow:auto;width:100%;height:220px;}.cke_skin_v2 .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_v2 .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_v2 .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_v2 .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_v2 .cke_tpl_preview span{white-space:normal;}.cke_skin_v2 .cke_tpl_title{font-weight:bold;}.cke_skin_v2 .cke_tpl_list a:active .cke_tpl_item,.cke_skin_v2 .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_v2 .cke_tpl_list a:focus .cke_tpl_item{border:#f93 1px solid!important;background-color:#fffacd!important;}.cke_skin_v2 .cke_tpl_list a:active *,.cke_skin_v2 .cke_tpl_list a:hover *,.cke_skin_v2 .cke_tpl_list a:focus *{cursor:pointer;}.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:active,.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:hover,.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:focus{background-position:0 0;}.cke_skin_v2 .cke_tpl_list a:active .cke_tpl_item,.cke_skin_v2 .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_v2 .cke_tpl_list a:focus .cke_tpl_item{border-width:3px;}.cke_skin_v2 .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;} diff --git a/themes/default/theme.js b/themes/default/theme.js new file mode 100644 index 0000000..0ba1e91 --- /dev/null +++ b/themes/default/theme.js @@ -0,0 +1,8 @@ +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.themes.add('default',(function(){var a={};function b(c,d){var e,f;f=c.config.sharedSpaces;f=f&&f[d];f=f&&CKEDITOR.document.getById(f);if(f){var g='<span class="cke_shared " dir="'+c.lang.dir+'"'+'>'+'<span class="'+c.skinClass+' '+c.id+' cke_editor_'+c.name+'">'+'<span class="'+CKEDITOR.env.cssClass+'">'+'<span class="cke_wrapper cke_'+c.lang.dir+'">'+'<span class="cke_editor">'+'<div class="cke_'+d+'">'+'</div></span></span></span></span></span>',h=f.append(CKEDITOR.dom.element.createFromHtml(g,f.getDocument()));if(f.getCustomData('cke_hasshared'))h.hide();else f.setCustomData('cke_hasshared',1);e=h.getChild([0,0,0,0]);!c.sharedSpaces&&(c.sharedSpaces={});c.sharedSpaces[d]=e;c.on('focus',function(){for(var i=0,j,k=f.getChildren();j=k.getItem(i);i++){if(j.type==CKEDITOR.NODE_ELEMENT&&!j.equals(h)&&j.hasClass('cke_shared'))j.hide();}h.show();});c.on('destroy',function(){h.remove();});}return e;};return{build:function(c,d){var e=c.name,f=c.element,g=c.elementMode;if(!f||g==CKEDITOR.ELEMENT_MODE_NONE)return;if(g==CKEDITOR.ELEMENT_MODE_REPLACE)f.hide();var h=c.fire('themeSpace',{space:'top',html:''}).html,i=c.fire('themeSpace',{space:'contents',html:''}).html,j=c.fireOnce('themeSpace',{space:'bottom',html:''}).html,k=i&&c.config.height,l=c.config.tabIndex||c.element.getAttribute('tabindex')||0;if(!i)k='auto';else if(!isNaN(k))k+='px';var m='',n=c.config.width;if(n){if(!isNaN(n))n+='px';m+='width: '+n+';';}var o=h&&b(c,'top'),p=b(c,'bottom');o&&(o.setHtml(h),h='');p&&(p.setHtml(j),j='');var q='<style>.'+c.skinClass+'{visibility:hidden;}</style>';if(a[c.skinClass])q='';else a[c.skinClass]=1;var r=CKEDITOR.dom.element.createFromHtml(['<span id="cke_',e,'" class="',c.skinClass,' ',c.id,' cke_editor_',e,'" dir="',c.lang.dir,'" title="',CKEDITOR.env.gecko?' ':'','" lang="',c.langCode,'"'+(CKEDITOR.env.webkit?' tabindex="'+l+'"':'')+' role="application"'+' aria-labelledby="cke_',e,'_arialbl"'+(m?' style="'+m+'"':'')+'>'+'<span id="cke_',e,'_arialbl" class="cke_voice_label">'+c.lang.editor+'</span>'+'<span class="',CKEDITOR.env.cssClass,'" role="presentation"><span class="cke_wrapper cke_',c.lang.dir,'" role="presentation"><table class="cke_editor" border="0" cellspacing="0" cellpadding="0" role="presentation"><tbody><tr',h?'':' style="display:none"',' role="presentation"><td id="cke_top_',e,'" class="cke_top" role="presentation">',h,'</td></tr><tr',i?'':' style="display:none"',' role="presentation"><td id="cke_contents_',e,'" class="cke_contents" style="height:',k,'" role="presentation">',i,'</td></tr><tr',j?'':' style="display:none"',' role="presentation"><td id="cke_bottom_',e,'" class="cke_bottom" role="presentation">',j,'</td></tr></tbody></table>'+q+'</span>'+'</span>'+'</span>'].join('')); +r.getChild([1,0,0,0,0]).unselectable();r.getChild([1,0,0,0,2]).unselectable();if(g==CKEDITOR.ELEMENT_MODE_REPLACE)r.insertAfter(f);else f.append(r);c.container=r;r.disableContextMenu();c.on('contentDirChanged',function(s){var t=(c.lang.dir!=s.data?'add':'remove')+'Class';r.getChild(1)[t]('cke_mixed_dir_content');var u=this.sharedSpaces&&this.sharedSpaces[this.config.toolbarLocation];u&&u.getParent().getParent()[t]('cke_mixed_dir_content');});c.fireOnce('themeLoaded');c.fireOnce('uiReady');},buildDialog:function(c){var d=CKEDITOR.tools.getNextNumber(),e=CKEDITOR.dom.element.createFromHtml(['<div class="',c.id,'_dialog cke_editor_',c.name.replace('.','\\.'),'_dialog cke_skin_',c.skinName,'" dir="',c.lang.dir,'" lang="',c.langCode,'" role="dialog" aria-labelledby="%title#"><table class="cke_dialog',' '+CKEDITOR.env.cssClass,' cke_',c.lang.dir,'" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="%body" role="presentation"><div id="%title#" class="%title" role="presentation"></div><a id="%close_button#" class="%close_button" href="javascript:void(0)" title="'+c.lang.common.close+'" role="button"><span class="cke_label">X</span></a>'+'<div id="%tabs#" class="%tabs" role="tablist"></div>'+'<table class="%contents" role="presentation">'+'<tr>'+'<td id="%contents#" class="%contents" role="presentation"></td>'+'</tr>'+'<tr>'+'<td id="%footer#" class="%footer" role="presentation"></td>'+'</tr>'+'</table>'+'</div>'+'<div id="%tl#" class="%tl"></div>'+'<div id="%tc#" class="%tc"></div>'+'<div id="%tr#" class="%tr"></div>'+'<div id="%ml#" class="%ml"></div>'+'<div id="%mr#" class="%mr"></div>'+'<div id="%bl#" class="%bl"></div>'+'<div id="%bc#" class="%bc"></div>'+'<div id="%br#" class="%br"></div>'+'</td></tr>'+'</table>',CKEDITOR.env.ie?'':'<style>.cke_dialog{visibility:hidden;}</style>','</div>'].join('').replace(/#/g,'_'+d).replace(/%/g,'cke_dialog_')),f=e.getChild([0,0,0,0,0]),g=f.getChild(0),h=f.getChild(1);g.unselectable();h.unselectable();return{element:e,parts:{dialog:e.getChild(0),title:g,close:h,tabs:f.getChild(2),contents:f.getChild([3,0,0,0]),footer:f.getChild([3,0,1,0])}};},destroy:function(c){var d=c.container,e=c.element;if(d){d.clearCustomData();d.remove();}if(e){e.clearCustomData();c.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&e.show();delete c.element;}}};})());CKEDITOR.editor.prototype.getThemeSpace=function(a){var b='cke_'+a,c=this._[b]||(this._[b]=CKEDITOR.document.getById(b+'_'+this.name));return c;};CKEDITOR.editor.prototype.resize=function(a,b,c,d){var e=this.container,f=CKEDITOR.document.getById('cke_contents_'+this.name),g=d?e.getChild(1):e; +CKEDITOR.env.webkit&&g.setStyle('display','none');g.setSize('width',a,true);if(CKEDITOR.env.webkit){g.$.offsetWidth;g.setStyle('display','');}var h=c?0:(g.$.offsetHeight||0)-(f.$.clientHeight||0);f.setStyle('height',Math.max(b-h,0)+'px');this.fire('resize');};CKEDITOR.editor.prototype.getResizable=function(a){return a?CKEDITOR.document.getById('cke_contents_'+this.name):this.container;}; -- 2.20.1