esp-ckeditor 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +32 -0
- data/Rakefile +28 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/_bootstrap.js +87 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/ckeditor.js +141 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/ckeditor_base.js +227 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/ckeditor_basic.js +238 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/command.js +209 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/commanddefinition.js +129 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/config.js +423 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dataprocessor.js +65 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/comment.js +32 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/document.js +251 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/documentfragment.js +49 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/domobject.js +258 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/element.js +1691 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/elementpath.js +119 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/event.js +145 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/node.js +696 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/nodelist.js +26 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/range.js +2054 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/rangelist.js +213 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/text.js +128 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/walker.js +462 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom/window.js +96 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dom.js +20 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/dtd.js +266 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/editor.js +1060 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/editor_basic.js +186 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/env.js +305 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/event.js +342 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/eventInfo.js +120 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/focusmanager.js +152 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/basicwriter.js +145 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/cdata.js +43 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/comment.js +60 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/element.js +308 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/filter.js +288 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/fragment.js +518 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser/text.js +53 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/htmlparser.js +224 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/lang.js +157 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/loader.js +240 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/plugindefinition.js +83 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/plugins.js +103 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/resourcemanager.js +238 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/scriptloader.js +180 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/skins.js +184 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/themes.js +19 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/tools.js +763 -0
- data/app/assets/javascripts/esp-ckeditor/_source/core/ui.js +128 -0
- data/app/assets/javascripts/esp-ckeditor/_source/lang/_languages.js +27 -0
- data/app/assets/javascripts/esp-ckeditor/_source/lang/en.js +815 -0
- data/app/assets/javascripts/esp-ckeditor/_source/lang/ru.js +815 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/a11yhelp/dialogs/a11yhelp.js +222 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/a11yhelp/lang/en.js +108 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/a11yhelp/lang/he.js +216 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/a11yhelp/plugin.js +47 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/basicstyles/plugin.js +129 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/button/plugin.js +290 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/clipboard/dialogs/paste.js +223 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/clipboard/plugin.js +453 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/contextmenu/plugin.js +179 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/dialog/dialogDefinition.js +1166 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/dialog/plugin.js +3308 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/dialogadvtab/plugin.js +208 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/dialogui/plugin.js +1541 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/domiterator/plugin.js +361 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/editingblock/plugin.js +278 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/elementspath/plugin.js +218 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/enterkey/plugin.js +433 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/entities/plugin.js +250 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/dialogs/esp_attachment.js +234 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/images/esp_attachment.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/lang/en.js +22 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/lang/ru.js +22 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/lang/uk.js +22 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_attachment/plugin.js +23 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/dialogs/esp_audio.js +207 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/images/esp_audio.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/images/placeholder.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/lang/en.js +18 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/lang/ru.js +18 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/lang/uk.js +18 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_audio/plugin.js +182 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_blockquote/dialogs/esp_blockquote.js +132 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_blockquote/plugin.js +235 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/dialogs/esp_image.js +1414 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/images/esp_image.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/lang/en.js +9 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/lang/ru.js +9 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/lang/uk.js +9 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_image/plugin.js +80 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/dialogs/esp_anchor.js +145 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/dialogs/esp_link.js +1396 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/images/anchor.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/images/esp_anchor.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/images/esp_link.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/images/esp_unlink.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/lang/en.js +8 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/lang/ru.js +8 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/lang/uk.js +8 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_link/plugin.js +379 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_address.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_blockquote.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_div.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h1.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h2.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h3.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h4.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h5.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_h6.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_p.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/block_pre.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/images/esp_showblocks.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_showblocks/plugin.js +163 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/dialogs/esp_video.js +277 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/images/esp_video.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/images/placeholder.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/lang/en.js +19 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/lang/ru.js +19 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/lang/uk.js +19 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/esp_video/plugin.js +182 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/fakeobjects/plugin.js +175 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/filebrowser/plugin.js +534 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/find/dialogs/find.js +915 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/find/plugin.js +47 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/floatpanel/plugin.js +428 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/format/plugin.js +197 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/htmldataprocessor/plugin.js +596 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/htmlwriter/plugin.js +319 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/image/dialogs/image.js +1407 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/image/plugin.js +81 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/indent/plugin.js +461 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/justify/plugin.js +253 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/keystrokes/plugin.js +225 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/list/plugin.js +774 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/listblock/plugin.js +266 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/liststyle/dialogs/liststyle.js +225 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/liststyle/plugin.js +66 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/maximize/plugin.js +353 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/menu/plugin.js +541 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/panel/plugin.js +400 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/pastefromword/filter/default.js +1367 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/pastefromword/plugin.js +141 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/pastetext/dialogs/pastetext.js +67 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/pastetext/plugin.js +98 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/popup/plugin.js +64 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/removeformat/plugin.js +185 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/resize/plugin.js +168 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/richcombo/plugin.js +381 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/selection/plugin.js +1729 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/showborders/plugin.js +207 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/sourcearea/plugin.js +209 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/styles/plugin.js +1700 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/styles/styles/default.js +88 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/stylescombo/plugin.js +218 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/tab/plugin.js +367 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/table/dialogs/table.js +623 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/table/plugin.js +78 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/tabletools/dialogs/tableCell.js +525 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/tabletools/plugin.js +1194 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/toolbar/plugin.js +545 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/undo/plugin.js +578 -0
- data/app/assets/javascripts/esp-ckeditor/_source/plugins/wysiwygarea/plugin.js +1347 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/dialog.css +988 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/editor.css +25 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/elementspath.css +73 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/icons.css +367 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/icons.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/icons_rtl.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/dialog_sides.gif +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/dialog_sides.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/dialog_sides_rtl.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/mini.gif +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/noimage.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/sprites.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/sprites_ie6.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/images/toolbar_start.gif +0 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/mainui.css +209 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/menu.css +232 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/panel.css +227 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/presets.css +49 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/reset.css +85 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/richcombo.css +287 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/skin.js +236 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/templates.css +88 -0
- data/app/assets/javascripts/esp-ckeditor/_source/skins/kama/toolbar.css +412 -0
- data/app/assets/javascripts/esp-ckeditor/_source/themes/default/theme.js +407 -0
- data/app/assets/javascripts/esp-ckeditor/application.js +8 -0
- data/app/assets/javascripts/esp-ckeditor/ckeditor.js +137 -0
- data/app/assets/javascripts/esp-ckeditor/ckeditor.pack +194 -0
- data/app/assets/javascripts/esp-ckeditor/ckeditor_source.js +35 -0
- data/app/assets/javascripts/esp-ckeditor/ckpackager.jar +0 -0
- data/app/assets/javascripts/esp-ckeditor/ckpackager.txt +2 -0
- data/app/assets/javascripts/esp-ckeditor/config.js +147 -0
- data/app/assets/javascripts/esp-ckeditor/contents.css +38 -0
- data/app/assets/javascripts/esp-ckeditor/images/spacer.gif +0 -0
- data/app/assets/javascripts/esp-ckeditor/init_ckeditor.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/a11yhelp/lang/en.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/a11yhelp/lang/he.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/a11yhelp/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/basicstyles/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/button/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/clipboard/dialogs/paste.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/clipboard/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/contextmenu/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/dialog/dialogDefinition.js +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/dialog/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/dialogadvtab/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/dialogui/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/domiterator/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/editingblock/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/elementspath/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/enterkey/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/entities/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/dialogs/esp_attachment.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/images/esp_attachment.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/lang/en.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/lang/ru.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/lang/uk.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_attachment/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/dialogs/esp_audio.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/images/esp_audio.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/images/placeholder.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/lang/en.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/lang/ru.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/lang/uk.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_audio/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_blockquote/dialogs/esp_blockquote.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_blockquote/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/dialogs/esp_image.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/images/esp_image.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/lang/en.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/lang/ru.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/lang/uk.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_image/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/dialogs/esp_anchor.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/dialogs/esp_link.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/images/anchor.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/images/esp_anchor.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/images/esp_link.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/images/esp_unlink.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/lang/en.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/lang/ru.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/lang/uk.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_link/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_address.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_blockquote.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_div.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h1.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h2.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h3.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h4.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h5.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_h6.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_p.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/block_pre.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/images/esp_showblocks.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_showblocks/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/dialogs/esp_video.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/images/esp_video.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/images/placeholder.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/lang/en.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/lang/ru.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/lang/uk.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/esp_video/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/fakeobjects/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/filebrowser/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/find/dialogs/find.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/find/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/floatpanel/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/format/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/htmldataprocessor/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/htmlwriter/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/image/dialogs/image.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/image/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/indent/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/justify/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/keystrokes/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/list/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/listblock/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/liststyle/dialogs/liststyle.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/liststyle/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/maximize/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/menu/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/panel/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/pastefromword/filter/default.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/pastefromword/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/pastetext/dialogs/pastetext.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/pastetext/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/popup/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/removeformat/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/resize/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/richcombo/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/selection/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/showborders/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/sourcearea/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/styles/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/styles/styles/default.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/stylescombo/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/tab/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/table/dialogs/table.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/table/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/tabletools/dialogs/tableCell.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/tabletools/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/toolbar/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/undo/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/plugins/wysiwygarea/plugin.js +1 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/dialog.css +988 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/editor.css +25 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/elementspath.css +73 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/icons.css +367 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/icons.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/icons_rtl.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/images/dialog_sides.gif +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/images/dialog_sides.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/images/dialog_sides_rtl.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/images/mini.gif +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/images/noimage.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/images/sprites.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/images/sprites_ie6.png +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/images/toolbar_start.gif +0 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/mainui.css +209 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/menu.css +232 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/panel.css +227 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/presets.css +49 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/reset.css +85 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/richcombo.css +287 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/skin.js +236 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/templates.css +88 -0
- data/app/assets/javascripts/esp-ckeditor/skins/kama/toolbar.css +412 -0
- data/app/inputs/ckeditor_input.rb +42 -0
- data/config/routes.rb +2 -0
- data/lib/esp-ckeditor/engine.rb +9 -0
- data/lib/esp-ckeditor/version.rb +3 -0
- data/lib/esp-ckeditor.rb +17 -0
- data/lib/tasks/esp-ckeditor_tasks.rake +4 -0
- metadata +434 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
|
|
3
|
+
For licensing, see LICENSE.html or http://ckeditor.com/license
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function()
|
|
7
|
+
{
|
|
8
|
+
// Elements that may be considered the "Block boundary" in an element path.
|
|
9
|
+
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 };
|
|
10
|
+
|
|
11
|
+
// Elements that may be considered the "Block limit" in an element path.
|
|
12
|
+
var pathBlockLimitElements = { body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,form:1,fieldset:1 };
|
|
13
|
+
|
|
14
|
+
// Check if an element contains any block element.
|
|
15
|
+
var checkHasBlock = function( element )
|
|
16
|
+
{
|
|
17
|
+
var childNodes = element.getChildren();
|
|
18
|
+
|
|
19
|
+
for ( var i = 0, count = childNodes.count() ; i < count ; i++ )
|
|
20
|
+
{
|
|
21
|
+
var child = childNodes.getItem( i );
|
|
22
|
+
|
|
23
|
+
if ( child.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[ child.getName() ] )
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return false;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @class
|
|
32
|
+
*/
|
|
33
|
+
CKEDITOR.dom.elementPath = function( lastNode )
|
|
34
|
+
{
|
|
35
|
+
var block = null;
|
|
36
|
+
var blockLimit = null;
|
|
37
|
+
var elements = [];
|
|
38
|
+
|
|
39
|
+
var e = lastNode;
|
|
40
|
+
|
|
41
|
+
while ( e )
|
|
42
|
+
{
|
|
43
|
+
if ( e.type == CKEDITOR.NODE_ELEMENT )
|
|
44
|
+
{
|
|
45
|
+
if ( !this.lastElement )
|
|
46
|
+
this.lastElement = e;
|
|
47
|
+
|
|
48
|
+
var elementName = e.getName();
|
|
49
|
+
if ( CKEDITOR.env.ie && e.$.scopeName != 'HTML' )
|
|
50
|
+
elementName = e.$.scopeName.toLowerCase() + ':' + elementName;
|
|
51
|
+
|
|
52
|
+
if ( !blockLimit )
|
|
53
|
+
{
|
|
54
|
+
if ( !block && pathBlockElements[ elementName ] )
|
|
55
|
+
block = e;
|
|
56
|
+
|
|
57
|
+
if ( pathBlockLimitElements[ elementName ] )
|
|
58
|
+
{
|
|
59
|
+
// DIV is considered the Block, if no block is available (#525)
|
|
60
|
+
// and if it doesn't contain other blocks.
|
|
61
|
+
if ( !block && elementName == 'div' && !checkHasBlock( e ) )
|
|
62
|
+
block = e;
|
|
63
|
+
else
|
|
64
|
+
blockLimit = e;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
elements.push( e );
|
|
69
|
+
|
|
70
|
+
if ( elementName == 'body' )
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
e = e.getParent();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
this.block = block;
|
|
77
|
+
this.blockLimit = blockLimit;
|
|
78
|
+
this.elements = elements;
|
|
79
|
+
};
|
|
80
|
+
})();
|
|
81
|
+
|
|
82
|
+
CKEDITOR.dom.elementPath.prototype =
|
|
83
|
+
{
|
|
84
|
+
/**
|
|
85
|
+
* Compares this element path with another one.
|
|
86
|
+
* @param {CKEDITOR.dom.elementPath} otherPath The elementPath object to be
|
|
87
|
+
* compared with this one.
|
|
88
|
+
* @returns {Boolean} "true" if the paths are equal, containing the same
|
|
89
|
+
* number of elements and the same elements in the same order.
|
|
90
|
+
*/
|
|
91
|
+
compare : function( otherPath )
|
|
92
|
+
{
|
|
93
|
+
var thisElements = this.elements;
|
|
94
|
+
var otherElements = otherPath && otherPath.elements;
|
|
95
|
+
|
|
96
|
+
if ( !otherElements || thisElements.length != otherElements.length )
|
|
97
|
+
return false;
|
|
98
|
+
|
|
99
|
+
for ( var i = 0 ; i < thisElements.length ; i++ )
|
|
100
|
+
{
|
|
101
|
+
if ( !thisElements[ i ].equals( otherElements[ i ] ) )
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return true;
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
contains : function( tagNames )
|
|
109
|
+
{
|
|
110
|
+
var elements = this.elements;
|
|
111
|
+
for ( var i = 0 ; i < elements.length ; i++ )
|
|
112
|
+
{
|
|
113
|
+
if ( elements[ i ].getName() in tagNames )
|
|
114
|
+
return elements[ i ];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
|
|
3
|
+
For licensing, see LICENSE.html or http://ckeditor.com/license
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @fileOverview Defines the {@link CKEDITOR.dom.event} class, which
|
|
8
|
+
* represents the a native DOM event object.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Represents a native DOM event object.
|
|
13
|
+
* @constructor
|
|
14
|
+
* @param {Object} domEvent A native DOM event object.
|
|
15
|
+
* @example
|
|
16
|
+
*/
|
|
17
|
+
CKEDITOR.dom.event = function( domEvent )
|
|
18
|
+
{
|
|
19
|
+
/**
|
|
20
|
+
* The native DOM event object represented by this class instance.
|
|
21
|
+
* @type Object
|
|
22
|
+
* @example
|
|
23
|
+
*/
|
|
24
|
+
this.$ = domEvent;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
CKEDITOR.dom.event.prototype =
|
|
28
|
+
{
|
|
29
|
+
/**
|
|
30
|
+
* Gets the key code associated to the event.
|
|
31
|
+
* @returns {Number} The key code.
|
|
32
|
+
* @example
|
|
33
|
+
* alert( event.getKey() ); "65" is "a" has been pressed
|
|
34
|
+
*/
|
|
35
|
+
getKey : function()
|
|
36
|
+
{
|
|
37
|
+
return this.$.keyCode || this.$.which;
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Gets a number represeting the combination of the keys pressed during the
|
|
42
|
+
* event. It is the sum with the current key code and the {@link CKEDITOR.CTRL},
|
|
43
|
+
* {@link CKEDITOR.SHIFT} and {@link CKEDITOR.ALT} constants.
|
|
44
|
+
* @returns {Number} The number representing the keys combination.
|
|
45
|
+
* @example
|
|
46
|
+
* alert( event.getKeystroke() == 65 ); // "a" key
|
|
47
|
+
* alert( event.getKeystroke() == CKEDITOR.CTRL + 65 ); // CTRL + "a" key
|
|
48
|
+
* alert( event.getKeystroke() == CKEDITOR.CTRL + CKEDITOR.SHIFT + 65 ); // CTRL + SHIFT + "a" key
|
|
49
|
+
*/
|
|
50
|
+
getKeystroke : function()
|
|
51
|
+
{
|
|
52
|
+
var keystroke = this.getKey();
|
|
53
|
+
|
|
54
|
+
if ( this.$.ctrlKey || this.$.metaKey )
|
|
55
|
+
keystroke += CKEDITOR.CTRL;
|
|
56
|
+
|
|
57
|
+
if ( this.$.shiftKey )
|
|
58
|
+
keystroke += CKEDITOR.SHIFT;
|
|
59
|
+
|
|
60
|
+
if ( this.$.altKey )
|
|
61
|
+
keystroke += CKEDITOR.ALT;
|
|
62
|
+
|
|
63
|
+
return keystroke;
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Prevents the original behavior of the event to happen. It can optionally
|
|
68
|
+
* stop propagating the event in the event chain.
|
|
69
|
+
* @param {Boolean} [stopPropagation] Stop propagating this event in the
|
|
70
|
+
* event chain.
|
|
71
|
+
* @example
|
|
72
|
+
* var element = CKEDITOR.document.getById( 'myElement' );
|
|
73
|
+
* element.on( 'click', function( ev )
|
|
74
|
+
* {
|
|
75
|
+
* // The DOM event object is passed by the "data" property.
|
|
76
|
+
* var domEvent = ev.data;
|
|
77
|
+
* // Prevent the click to chave any effect in the element.
|
|
78
|
+
* domEvent.preventDefault();
|
|
79
|
+
* });
|
|
80
|
+
*/
|
|
81
|
+
preventDefault : function( stopPropagation )
|
|
82
|
+
{
|
|
83
|
+
var $ = this.$;
|
|
84
|
+
if ( $.preventDefault )
|
|
85
|
+
$.preventDefault();
|
|
86
|
+
else
|
|
87
|
+
$.returnValue = false;
|
|
88
|
+
|
|
89
|
+
if ( stopPropagation )
|
|
90
|
+
this.stopPropagation();
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
stopPropagation : function()
|
|
94
|
+
{
|
|
95
|
+
var $ = this.$;
|
|
96
|
+
if ( $.stopPropagation )
|
|
97
|
+
$.stopPropagation();
|
|
98
|
+
else
|
|
99
|
+
$.cancelBubble = true;
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Returns the DOM node where the event was targeted to.
|
|
104
|
+
* @returns {CKEDITOR.dom.node} The target DOM node.
|
|
105
|
+
* @example
|
|
106
|
+
* var element = CKEDITOR.document.getById( 'myElement' );
|
|
107
|
+
* element.on( 'click', function( ev )
|
|
108
|
+
* {
|
|
109
|
+
* // The DOM event object is passed by the "data" property.
|
|
110
|
+
* var domEvent = ev.data;
|
|
111
|
+
* // Add a CSS class to the event target.
|
|
112
|
+
* domEvent.getTarget().addClass( 'clicked' );
|
|
113
|
+
* });
|
|
114
|
+
*/
|
|
115
|
+
|
|
116
|
+
getTarget : function()
|
|
117
|
+
{
|
|
118
|
+
var rawNode = this.$.target || this.$.srcElement;
|
|
119
|
+
return rawNode ? new CKEDITOR.dom.node( rawNode ) : null;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// For the followind constants, we need to go over the Unicode boundaries
|
|
124
|
+
// (0x10FFFF) to avoid collision.
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* CTRL key (0x110000).
|
|
128
|
+
* @constant
|
|
129
|
+
* @example
|
|
130
|
+
*/
|
|
131
|
+
CKEDITOR.CTRL = 0x110000;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* SHIFT key (0x220000).
|
|
135
|
+
* @constant
|
|
136
|
+
* @example
|
|
137
|
+
*/
|
|
138
|
+
CKEDITOR.SHIFT = 0x220000;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* ALT key (0x440000).
|
|
142
|
+
* @constant
|
|
143
|
+
* @example
|
|
144
|
+
*/
|
|
145
|
+
CKEDITOR.ALT = 0x440000;
|
|
@@ -0,0 +1,696 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
|
|
3
|
+
For licensing, see LICENSE.html or http://ckeditor.com/license
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @fileOverview Defines the {@link CKEDITOR.dom.node} class which is the base
|
|
8
|
+
* class for classes that represent DOM nodes.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Base class for classes representing DOM nodes. This constructor may return
|
|
13
|
+
* an instance of a class that inherits from this class, like
|
|
14
|
+
* {@link CKEDITOR.dom.element} or {@link CKEDITOR.dom.text}.
|
|
15
|
+
* @augments CKEDITOR.dom.domObject
|
|
16
|
+
* @param {Object} domNode A native DOM node.
|
|
17
|
+
* @constructor
|
|
18
|
+
* @see CKEDITOR.dom.element
|
|
19
|
+
* @see CKEDITOR.dom.text
|
|
20
|
+
* @example
|
|
21
|
+
*/
|
|
22
|
+
CKEDITOR.dom.node = function( domNode )
|
|
23
|
+
{
|
|
24
|
+
if ( domNode )
|
|
25
|
+
{
|
|
26
|
+
switch ( domNode.nodeType )
|
|
27
|
+
{
|
|
28
|
+
// Safari don't consider document as element node type. (#3389)
|
|
29
|
+
case CKEDITOR.NODE_DOCUMENT :
|
|
30
|
+
return new CKEDITOR.dom.document( domNode );
|
|
31
|
+
|
|
32
|
+
case CKEDITOR.NODE_ELEMENT :
|
|
33
|
+
return new CKEDITOR.dom.element( domNode );
|
|
34
|
+
|
|
35
|
+
case CKEDITOR.NODE_TEXT :
|
|
36
|
+
return new CKEDITOR.dom.text( domNode );
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Call the base constructor.
|
|
40
|
+
CKEDITOR.dom.domObject.call( this, domNode );
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return this;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject();
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Element node type.
|
|
50
|
+
* @constant
|
|
51
|
+
* @example
|
|
52
|
+
*/
|
|
53
|
+
CKEDITOR.NODE_ELEMENT = 1;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Document node type.
|
|
57
|
+
* @constant
|
|
58
|
+
* @example
|
|
59
|
+
*/
|
|
60
|
+
CKEDITOR.NODE_DOCUMENT = 9;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Text node type.
|
|
64
|
+
* @constant
|
|
65
|
+
* @example
|
|
66
|
+
*/
|
|
67
|
+
CKEDITOR.NODE_TEXT = 3;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Comment node type.
|
|
71
|
+
* @constant
|
|
72
|
+
* @example
|
|
73
|
+
*/
|
|
74
|
+
CKEDITOR.NODE_COMMENT = 8;
|
|
75
|
+
|
|
76
|
+
CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11;
|
|
77
|
+
|
|
78
|
+
CKEDITOR.POSITION_IDENTICAL = 0;
|
|
79
|
+
CKEDITOR.POSITION_DISCONNECTED = 1;
|
|
80
|
+
CKEDITOR.POSITION_FOLLOWING = 2;
|
|
81
|
+
CKEDITOR.POSITION_PRECEDING = 4;
|
|
82
|
+
CKEDITOR.POSITION_IS_CONTAINED = 8;
|
|
83
|
+
CKEDITOR.POSITION_CONTAINS = 16;
|
|
84
|
+
|
|
85
|
+
CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype,
|
|
86
|
+
/** @lends CKEDITOR.dom.node.prototype */
|
|
87
|
+
{
|
|
88
|
+
/**
|
|
89
|
+
* Makes this node a child of another element.
|
|
90
|
+
* @param {CKEDITOR.dom.element} element The target element to which
|
|
91
|
+
* this node will be appended.
|
|
92
|
+
* @returns {CKEDITOR.dom.element} The target element.
|
|
93
|
+
* @example
|
|
94
|
+
* var p = new CKEDITOR.dom.element( 'p' );
|
|
95
|
+
* var strong = new CKEDITOR.dom.element( 'strong' );
|
|
96
|
+
* strong.appendTo( p );
|
|
97
|
+
*
|
|
98
|
+
* // result: "<p><strong></strong></p>"
|
|
99
|
+
*/
|
|
100
|
+
appendTo : function( element, toStart )
|
|
101
|
+
{
|
|
102
|
+
element.append( this, toStart );
|
|
103
|
+
return element;
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
clone : function( includeChildren, cloneId )
|
|
107
|
+
{
|
|
108
|
+
var $clone = this.$.cloneNode( includeChildren );
|
|
109
|
+
|
|
110
|
+
var removeIds = function( node )
|
|
111
|
+
{
|
|
112
|
+
if ( node.nodeType != CKEDITOR.NODE_ELEMENT )
|
|
113
|
+
return;
|
|
114
|
+
|
|
115
|
+
if ( !cloneId )
|
|
116
|
+
node.removeAttribute( 'id', false );
|
|
117
|
+
node.removeAttribute( 'data-cke-expando', false );
|
|
118
|
+
|
|
119
|
+
if ( includeChildren )
|
|
120
|
+
{
|
|
121
|
+
var childs = node.childNodes;
|
|
122
|
+
for ( var i=0; i < childs.length; i++ )
|
|
123
|
+
removeIds( childs[ i ] );
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// The "id" attribute should never be cloned to avoid duplication.
|
|
128
|
+
removeIds( $clone );
|
|
129
|
+
|
|
130
|
+
return new CKEDITOR.dom.node( $clone );
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
hasPrevious : function()
|
|
134
|
+
{
|
|
135
|
+
return !!this.$.previousSibling;
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
hasNext : function()
|
|
139
|
+
{
|
|
140
|
+
return !!this.$.nextSibling;
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Inserts this element after a node.
|
|
145
|
+
* @param {CKEDITOR.dom.node} node The node that will precede this element.
|
|
146
|
+
* @returns {CKEDITOR.dom.node} The node preceding this one after
|
|
147
|
+
* insertion.
|
|
148
|
+
* @example
|
|
149
|
+
* var em = new CKEDITOR.dom.element( 'em' );
|
|
150
|
+
* var strong = new CKEDITOR.dom.element( 'strong' );
|
|
151
|
+
* strong.insertAfter( em );
|
|
152
|
+
*
|
|
153
|
+
* // result: "<em></em><strong></strong>"
|
|
154
|
+
*/
|
|
155
|
+
insertAfter : function( node )
|
|
156
|
+
{
|
|
157
|
+
node.$.parentNode.insertBefore( this.$, node.$.nextSibling );
|
|
158
|
+
return node;
|
|
159
|
+
},
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Inserts this element before a node.
|
|
163
|
+
* @param {CKEDITOR.dom.node} node The node that will succeed this element.
|
|
164
|
+
* @returns {CKEDITOR.dom.node} The node being inserted.
|
|
165
|
+
* @example
|
|
166
|
+
* var em = new CKEDITOR.dom.element( 'em' );
|
|
167
|
+
* var strong = new CKEDITOR.dom.element( 'strong' );
|
|
168
|
+
* strong.insertBefore( em );
|
|
169
|
+
*
|
|
170
|
+
* // result: "<strong></strong><em></em>"
|
|
171
|
+
*/
|
|
172
|
+
insertBefore : function( node )
|
|
173
|
+
{
|
|
174
|
+
node.$.parentNode.insertBefore( this.$, node.$ );
|
|
175
|
+
return node;
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
insertBeforeMe : function( node )
|
|
179
|
+
{
|
|
180
|
+
this.$.parentNode.insertBefore( node.$, this.$ );
|
|
181
|
+
return node;
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Retrieves a uniquely identifiable tree address for this node.
|
|
186
|
+
* The tree address returned is an array of integers, with each integer
|
|
187
|
+
* indicating a child index of a DOM node, starting from
|
|
188
|
+
* <code>document.documentElement</code>.
|
|
189
|
+
*
|
|
190
|
+
* For example, assuming <code><body></code> is the second child
|
|
191
|
+
* of <code><html></code> (<code><head></code> being the first),
|
|
192
|
+
* and we would like to address the third child under the
|
|
193
|
+
* fourth child of <code><body></code>, the tree address returned would be:
|
|
194
|
+
* [1, 3, 2]
|
|
195
|
+
*
|
|
196
|
+
* The tree address cannot be used for finding back the DOM tree node once
|
|
197
|
+
* the DOM tree structure has been modified.
|
|
198
|
+
*/
|
|
199
|
+
getAddress : function( normalized )
|
|
200
|
+
{
|
|
201
|
+
var address = [];
|
|
202
|
+
var $documentElement = this.getDocument().$.documentElement;
|
|
203
|
+
var node = this.$;
|
|
204
|
+
|
|
205
|
+
while ( node && node != $documentElement )
|
|
206
|
+
{
|
|
207
|
+
var parentNode = node.parentNode;
|
|
208
|
+
|
|
209
|
+
if ( parentNode )
|
|
210
|
+
{
|
|
211
|
+
// Get the node index. For performance, call getIndex
|
|
212
|
+
// directly, instead of creating a new node object.
|
|
213
|
+
address.unshift( this.getIndex.call( { $ : node }, normalized ) );
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
node = parentNode;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return address;
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Gets the document containing this element.
|
|
224
|
+
* @returns {CKEDITOR.dom.document} The document.
|
|
225
|
+
* @example
|
|
226
|
+
* var element = CKEDITOR.document.getById( 'example' );
|
|
227
|
+
* alert( <strong>element.getDocument().equals( CKEDITOR.document )</strong> ); // "true"
|
|
228
|
+
*/
|
|
229
|
+
getDocument : function()
|
|
230
|
+
{
|
|
231
|
+
return new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument );
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
getIndex : function( normalized )
|
|
235
|
+
{
|
|
236
|
+
// Attention: getAddress depends on this.$
|
|
237
|
+
|
|
238
|
+
var current = this.$,
|
|
239
|
+
index = 0;
|
|
240
|
+
|
|
241
|
+
while ( ( current = current.previousSibling ) )
|
|
242
|
+
{
|
|
243
|
+
// When normalizing, do not count it if this is an
|
|
244
|
+
// empty text node or if it's a text node following another one.
|
|
245
|
+
if ( normalized && current.nodeType == 3 &&
|
|
246
|
+
( !current.nodeValue.length ||
|
|
247
|
+
( current.previousSibling && current.previousSibling.nodeType == 3 ) ) )
|
|
248
|
+
{
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
index++;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return index;
|
|
256
|
+
},
|
|
257
|
+
|
|
258
|
+
getNextSourceNode : function( startFromSibling, nodeType, guard )
|
|
259
|
+
{
|
|
260
|
+
// If "guard" is a node, transform it in a function.
|
|
261
|
+
if ( guard && !guard.call )
|
|
262
|
+
{
|
|
263
|
+
var guardNode = guard;
|
|
264
|
+
guard = function( node )
|
|
265
|
+
{
|
|
266
|
+
return !node.equals( guardNode );
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
var node = ( !startFromSibling && this.getFirst && this.getFirst() ),
|
|
271
|
+
parent;
|
|
272
|
+
|
|
273
|
+
// Guarding when we're skipping the current element( no children or 'startFromSibling' ).
|
|
274
|
+
// send the 'moving out' signal even we don't actually dive into.
|
|
275
|
+
if ( !node )
|
|
276
|
+
{
|
|
277
|
+
if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false )
|
|
278
|
+
return null;
|
|
279
|
+
node = this.getNext();
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
while ( !node && ( parent = ( parent || this ).getParent() ) )
|
|
283
|
+
{
|
|
284
|
+
// The guard check sends the "true" paramenter to indicate that
|
|
285
|
+
// we are moving "out" of the element.
|
|
286
|
+
if ( guard && guard( parent, true ) === false )
|
|
287
|
+
return null;
|
|
288
|
+
|
|
289
|
+
node = parent.getNext();
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if ( !node )
|
|
293
|
+
return null;
|
|
294
|
+
|
|
295
|
+
if ( guard && guard( node ) === false )
|
|
296
|
+
return null;
|
|
297
|
+
|
|
298
|
+
if ( nodeType && nodeType != node.type )
|
|
299
|
+
return node.getNextSourceNode( false, nodeType, guard );
|
|
300
|
+
|
|
301
|
+
return node;
|
|
302
|
+
},
|
|
303
|
+
|
|
304
|
+
getPreviousSourceNode : function( startFromSibling, nodeType, guard )
|
|
305
|
+
{
|
|
306
|
+
if ( guard && !guard.call )
|
|
307
|
+
{
|
|
308
|
+
var guardNode = guard;
|
|
309
|
+
guard = function( node )
|
|
310
|
+
{
|
|
311
|
+
return !node.equals( guardNode );
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
var node = ( !startFromSibling && this.getLast && this.getLast() ),
|
|
316
|
+
parent;
|
|
317
|
+
|
|
318
|
+
// Guarding when we're skipping the current element( no children or 'startFromSibling' ).
|
|
319
|
+
// send the 'moving out' signal even we don't actually dive into.
|
|
320
|
+
if ( !node )
|
|
321
|
+
{
|
|
322
|
+
if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false )
|
|
323
|
+
return null;
|
|
324
|
+
node = this.getPrevious();
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
while ( !node && ( parent = ( parent || this ).getParent() ) )
|
|
328
|
+
{
|
|
329
|
+
// The guard check sends the "true" paramenter to indicate that
|
|
330
|
+
// we are moving "out" of the element.
|
|
331
|
+
if ( guard && guard( parent, true ) === false )
|
|
332
|
+
return null;
|
|
333
|
+
|
|
334
|
+
node = parent.getPrevious();
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if ( !node )
|
|
338
|
+
return null;
|
|
339
|
+
|
|
340
|
+
if ( guard && guard( node ) === false )
|
|
341
|
+
return null;
|
|
342
|
+
|
|
343
|
+
if ( nodeType && node.type != nodeType )
|
|
344
|
+
return node.getPreviousSourceNode( false, nodeType, guard );
|
|
345
|
+
|
|
346
|
+
return node;
|
|
347
|
+
},
|
|
348
|
+
|
|
349
|
+
getPrevious : function( evaluator )
|
|
350
|
+
{
|
|
351
|
+
var previous = this.$, retval;
|
|
352
|
+
do
|
|
353
|
+
{
|
|
354
|
+
previous = previous.previousSibling;
|
|
355
|
+
retval = previous && new CKEDITOR.dom.node( previous );
|
|
356
|
+
}
|
|
357
|
+
while ( retval && evaluator && !evaluator( retval ) )
|
|
358
|
+
return retval;
|
|
359
|
+
},
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Gets the node that follows this element in its parent's child list.
|
|
363
|
+
* @param {Function} evaluator Filtering the result node.
|
|
364
|
+
* @returns {CKEDITOR.dom.node} The next node or null if not available.
|
|
365
|
+
* @example
|
|
366
|
+
* var element = CKEDITOR.dom.element.createFromHtml( '<div><b>Example</b> <i>next</i></div>' );
|
|
367
|
+
* var first = <strong>element.getFirst().getNext()</strong>;
|
|
368
|
+
* alert( first.getName() ); // "i"
|
|
369
|
+
*/
|
|
370
|
+
getNext : function( evaluator )
|
|
371
|
+
{
|
|
372
|
+
var next = this.$, retval;
|
|
373
|
+
do
|
|
374
|
+
{
|
|
375
|
+
next = next.nextSibling;
|
|
376
|
+
retval = next && new CKEDITOR.dom.node( next );
|
|
377
|
+
}
|
|
378
|
+
while ( retval && evaluator && !evaluator( retval ) )
|
|
379
|
+
return retval;
|
|
380
|
+
},
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Gets the parent element for this node.
|
|
384
|
+
* @returns {CKEDITOR.dom.element} The parent element.
|
|
385
|
+
* @example
|
|
386
|
+
* var node = editor.document.getBody().getFirst();
|
|
387
|
+
* var parent = node.<strong>getParent()</strong>;
|
|
388
|
+
* alert( node.getName() ); // "body"
|
|
389
|
+
*/
|
|
390
|
+
getParent : function()
|
|
391
|
+
{
|
|
392
|
+
var parent = this.$.parentNode;
|
|
393
|
+
return ( parent && parent.nodeType == 1 ) ? new CKEDITOR.dom.node( parent ) : null;
|
|
394
|
+
},
|
|
395
|
+
|
|
396
|
+
getParents : function( closerFirst )
|
|
397
|
+
{
|
|
398
|
+
var node = this;
|
|
399
|
+
var parents = [];
|
|
400
|
+
|
|
401
|
+
do
|
|
402
|
+
{
|
|
403
|
+
parents[ closerFirst ? 'push' : 'unshift' ]( node );
|
|
404
|
+
}
|
|
405
|
+
while ( ( node = node.getParent() ) )
|
|
406
|
+
|
|
407
|
+
return parents;
|
|
408
|
+
},
|
|
409
|
+
|
|
410
|
+
getCommonAncestor : function( node )
|
|
411
|
+
{
|
|
412
|
+
if ( node.equals( this ) )
|
|
413
|
+
return this;
|
|
414
|
+
|
|
415
|
+
if ( node.contains && node.contains( this ) )
|
|
416
|
+
return node;
|
|
417
|
+
|
|
418
|
+
var start = this.contains ? this : this.getParent();
|
|
419
|
+
|
|
420
|
+
do
|
|
421
|
+
{
|
|
422
|
+
if ( start.contains( node ) )
|
|
423
|
+
return start;
|
|
424
|
+
}
|
|
425
|
+
while ( ( start = start.getParent() ) );
|
|
426
|
+
|
|
427
|
+
return null;
|
|
428
|
+
},
|
|
429
|
+
|
|
430
|
+
getPosition : function( otherNode )
|
|
431
|
+
{
|
|
432
|
+
var $ = this.$;
|
|
433
|
+
var $other = otherNode.$;
|
|
434
|
+
|
|
435
|
+
if ( $.compareDocumentPosition )
|
|
436
|
+
return $.compareDocumentPosition( $other );
|
|
437
|
+
|
|
438
|
+
// IE and Safari have no support for compareDocumentPosition.
|
|
439
|
+
|
|
440
|
+
if ( $ == $other )
|
|
441
|
+
return CKEDITOR.POSITION_IDENTICAL;
|
|
442
|
+
|
|
443
|
+
// Only element nodes support contains and sourceIndex.
|
|
444
|
+
if ( this.type == CKEDITOR.NODE_ELEMENT && otherNode.type == CKEDITOR.NODE_ELEMENT )
|
|
445
|
+
{
|
|
446
|
+
if ( $.contains )
|
|
447
|
+
{
|
|
448
|
+
if ( $.contains( $other ) )
|
|
449
|
+
return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING;
|
|
450
|
+
|
|
451
|
+
if ( $other.contains( $ ) )
|
|
452
|
+
return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
if ( 'sourceIndex' in $ )
|
|
456
|
+
{
|
|
457
|
+
return ( $.sourceIndex < 0 || $other.sourceIndex < 0 ) ? CKEDITOR.POSITION_DISCONNECTED :
|
|
458
|
+
( $.sourceIndex < $other.sourceIndex ) ? CKEDITOR.POSITION_PRECEDING :
|
|
459
|
+
CKEDITOR.POSITION_FOLLOWING;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// For nodes that don't support compareDocumentPosition, contains
|
|
464
|
+
// or sourceIndex, their "address" is compared.
|
|
465
|
+
|
|
466
|
+
var addressOfThis = this.getAddress(),
|
|
467
|
+
addressOfOther = otherNode.getAddress(),
|
|
468
|
+
minLevel = Math.min( addressOfThis.length, addressOfOther.length );
|
|
469
|
+
|
|
470
|
+
// Determinate preceed/follow relationship.
|
|
471
|
+
for ( var i = 0 ; i <= minLevel - 1 ; i++ )
|
|
472
|
+
{
|
|
473
|
+
if ( addressOfThis[ i ] != addressOfOther[ i ] )
|
|
474
|
+
{
|
|
475
|
+
if ( i < minLevel )
|
|
476
|
+
{
|
|
477
|
+
return addressOfThis[ i ] < addressOfOther[ i ] ?
|
|
478
|
+
CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING;
|
|
479
|
+
}
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Determinate contains/contained relationship.
|
|
485
|
+
return ( addressOfThis.length < addressOfOther.length ) ?
|
|
486
|
+
CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING :
|
|
487
|
+
CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING;
|
|
488
|
+
},
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Gets the closest ancestor node of this node, specified by its name.
|
|
492
|
+
* @param {String} reference The name of the ancestor node to search or
|
|
493
|
+
* an object with the node names to search for.
|
|
494
|
+
* @param {Boolean} [includeSelf] Whether to include the current
|
|
495
|
+
* node in the search.
|
|
496
|
+
* @returns {CKEDITOR.dom.node} The located ancestor node or null if not found.
|
|
497
|
+
* @since 3.6.1
|
|
498
|
+
* @example
|
|
499
|
+
* // Suppose we have the following HTML structure:
|
|
500
|
+
* // <div id="outer"><div id="inner"><p><b>Some text</b></p></div></div>
|
|
501
|
+
* // If node == <b>
|
|
502
|
+
* ascendant = node.getAscendant( 'div' ); // ascendant == <div id="inner">
|
|
503
|
+
* ascendant = node.getAscendant( 'b' ); // ascendant == null
|
|
504
|
+
* ascendant = node.getAscendant( 'b', true ); // ascendant == <b>
|
|
505
|
+
* ascendant = node.getAscendant( { div: 1, p: 1} ); // Searches for the first 'div' or 'p': ascendant == <div id="inner">
|
|
506
|
+
*/
|
|
507
|
+
getAscendant : function( reference, includeSelf )
|
|
508
|
+
{
|
|
509
|
+
var $ = this.$,
|
|
510
|
+
name;
|
|
511
|
+
|
|
512
|
+
if ( !includeSelf )
|
|
513
|
+
$ = $.parentNode;
|
|
514
|
+
|
|
515
|
+
while ( $ )
|
|
516
|
+
{
|
|
517
|
+
if ( $.nodeName && ( name = $.nodeName.toLowerCase(), ( typeof reference == 'string' ? name == reference : name in reference ) ) )
|
|
518
|
+
return new CKEDITOR.dom.node( $ );
|
|
519
|
+
|
|
520
|
+
$ = $.parentNode;
|
|
521
|
+
}
|
|
522
|
+
return null;
|
|
523
|
+
},
|
|
524
|
+
|
|
525
|
+
hasAscendant : function( name, includeSelf )
|
|
526
|
+
{
|
|
527
|
+
var $ = this.$;
|
|
528
|
+
|
|
529
|
+
if ( !includeSelf )
|
|
530
|
+
$ = $.parentNode;
|
|
531
|
+
|
|
532
|
+
while ( $ )
|
|
533
|
+
{
|
|
534
|
+
if ( $.nodeName && $.nodeName.toLowerCase() == name )
|
|
535
|
+
return true;
|
|
536
|
+
|
|
537
|
+
$ = $.parentNode;
|
|
538
|
+
}
|
|
539
|
+
return false;
|
|
540
|
+
},
|
|
541
|
+
|
|
542
|
+
move : function( target, toStart )
|
|
543
|
+
{
|
|
544
|
+
target.append( this.remove(), toStart );
|
|
545
|
+
},
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Removes this node from the document DOM.
|
|
549
|
+
* @param {Boolean} [preserveChildren] Indicates that the children
|
|
550
|
+
* elements must remain in the document, removing only the outer
|
|
551
|
+
* tags.
|
|
552
|
+
* @example
|
|
553
|
+
* var element = CKEDITOR.dom.element.getById( 'MyElement' );
|
|
554
|
+
* <strong>element.remove()</strong>;
|
|
555
|
+
*/
|
|
556
|
+
remove : function( preserveChildren )
|
|
557
|
+
{
|
|
558
|
+
var $ = this.$;
|
|
559
|
+
var parent = $.parentNode;
|
|
560
|
+
|
|
561
|
+
if ( parent )
|
|
562
|
+
{
|
|
563
|
+
if ( preserveChildren )
|
|
564
|
+
{
|
|
565
|
+
// Move all children before the node.
|
|
566
|
+
for ( var child ; ( child = $.firstChild ) ; )
|
|
567
|
+
{
|
|
568
|
+
parent.insertBefore( $.removeChild( child ), $ );
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
parent.removeChild( $ );
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
return this;
|
|
576
|
+
},
|
|
577
|
+
|
|
578
|
+
replace : function( nodeToReplace )
|
|
579
|
+
{
|
|
580
|
+
this.insertBefore( nodeToReplace );
|
|
581
|
+
nodeToReplace.remove();
|
|
582
|
+
},
|
|
583
|
+
|
|
584
|
+
trim : function()
|
|
585
|
+
{
|
|
586
|
+
this.ltrim();
|
|
587
|
+
this.rtrim();
|
|
588
|
+
},
|
|
589
|
+
|
|
590
|
+
ltrim : function()
|
|
591
|
+
{
|
|
592
|
+
var child;
|
|
593
|
+
while ( this.getFirst && ( child = this.getFirst() ) )
|
|
594
|
+
{
|
|
595
|
+
if ( child.type == CKEDITOR.NODE_TEXT )
|
|
596
|
+
{
|
|
597
|
+
var trimmed = CKEDITOR.tools.ltrim( child.getText() ),
|
|
598
|
+
originalLength = child.getLength();
|
|
599
|
+
|
|
600
|
+
if ( !trimmed )
|
|
601
|
+
{
|
|
602
|
+
child.remove();
|
|
603
|
+
continue;
|
|
604
|
+
}
|
|
605
|
+
else if ( trimmed.length < originalLength )
|
|
606
|
+
{
|
|
607
|
+
child.split( originalLength - trimmed.length );
|
|
608
|
+
|
|
609
|
+
// IE BUG: child.remove() may raise JavaScript errors here. (#81)
|
|
610
|
+
this.$.removeChild( this.$.firstChild );
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
break;
|
|
614
|
+
}
|
|
615
|
+
},
|
|
616
|
+
|
|
617
|
+
rtrim : function()
|
|
618
|
+
{
|
|
619
|
+
var child;
|
|
620
|
+
while ( this.getLast && ( child = this.getLast() ) )
|
|
621
|
+
{
|
|
622
|
+
if ( child.type == CKEDITOR.NODE_TEXT )
|
|
623
|
+
{
|
|
624
|
+
var trimmed = CKEDITOR.tools.rtrim( child.getText() ),
|
|
625
|
+
originalLength = child.getLength();
|
|
626
|
+
|
|
627
|
+
if ( !trimmed )
|
|
628
|
+
{
|
|
629
|
+
child.remove();
|
|
630
|
+
continue;
|
|
631
|
+
}
|
|
632
|
+
else if ( trimmed.length < originalLength )
|
|
633
|
+
{
|
|
634
|
+
child.split( trimmed.length );
|
|
635
|
+
|
|
636
|
+
// IE BUG: child.getNext().remove() may raise JavaScript errors here.
|
|
637
|
+
// (#81)
|
|
638
|
+
this.$.lastChild.parentNode.removeChild( this.$.lastChild );
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
break;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
if ( !CKEDITOR.env.ie && !CKEDITOR.env.opera )
|
|
645
|
+
{
|
|
646
|
+
child = this.$.lastChild;
|
|
647
|
+
|
|
648
|
+
if ( child && child.type == 1 && child.nodeName.toLowerCase() == 'br' )
|
|
649
|
+
{
|
|
650
|
+
// Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324).
|
|
651
|
+
child.parentNode.removeChild( child ) ;
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
},
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* Checks if this node is read-only (should not be changed).
|
|
658
|
+
* @returns {Boolean}
|
|
659
|
+
* @since 3.5
|
|
660
|
+
* @example
|
|
661
|
+
* // For the following HTML:
|
|
662
|
+
* // <div contenteditable="false">Some <b>text</b></div>
|
|
663
|
+
*
|
|
664
|
+
* // If "ele" is the above <div>
|
|
665
|
+
* ele.isReadOnly(); // true
|
|
666
|
+
*/
|
|
667
|
+
isReadOnly : function()
|
|
668
|
+
{
|
|
669
|
+
var element = this;
|
|
670
|
+
if ( this.type != CKEDITOR.NODE_ELEMENT )
|
|
671
|
+
element = this.getParent();
|
|
672
|
+
|
|
673
|
+
if ( element && typeof element.$.isContentEditable != 'undefined' )
|
|
674
|
+
return ! ( element.$.isContentEditable || element.data( 'cke-editable' ) );
|
|
675
|
+
else
|
|
676
|
+
{
|
|
677
|
+
// Degrade for old browsers which don't support "isContentEditable", e.g. FF3
|
|
678
|
+
var current = element;
|
|
679
|
+
while( current )
|
|
680
|
+
{
|
|
681
|
+
if ( current.is( 'body' ) || !!current.data( 'cke-editable' ) )
|
|
682
|
+
break;
|
|
683
|
+
|
|
684
|
+
if ( current.getAttribute( 'contentEditable' ) == 'false' )
|
|
685
|
+
return true;
|
|
686
|
+
else if ( current.getAttribute( 'contentEditable' ) == 'true' )
|
|
687
|
+
break;
|
|
688
|
+
|
|
689
|
+
current = current.getParent();
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
return false;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
);
|