1 /* 2 * CKEditor - The text editor for Internet - http://ckeditor.com 3 * Copyright (C) 2003-2008 Frederico Caldeira Knabben 4 * 5 * == BEGIN LICENSE == 6 * 7 * Licensed under the terms of any of the following licenses at your 8 * choice: 9 * 10 * - GNU General Public License Version 2 or later (the "GPL") 11 * http://www.gnu.org/licenses/gpl.html 12 * 13 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") 14 * http://www.gnu.org/licenses/lgpl.html 15 * 16 * - Mozilla Public License Version 1.1 or later (the "MPL") 17 * http://www.mozilla.org/MPL/MPL-1.1.html 18 * 19 * == END LICENSE == 20 */ 21 22 /** 23 * @fileOverview Defines the {@link CKEDITOR.dom.node} class, which is the base 24 * class for classes that represent DOM nodes. 25 */ 26 27 /** 28 * Base class for classes representing DOM nodes. This constructor may return 29 * and instance of classes that inherits this class, like 30 * {@link CKEDITOR.dom.element} or {@link CKEDITOR.dom.text}. 31 * @augments CKEDITOR.dom.domObject 32 * @param {Object} domNode A native DOM node. 33 * @constructor 34 * @see CKEDITOR.dom.element 35 * @see CKEDITOR.dom.text 36 * @example 37 */ 38 CKEDITOR.dom.node = function( domNode ) 39 { 40 if ( domNode ) 41 { 42 switch ( domNode.nodeType ) 43 { 44 case 1 : // ELEMENT_NODE 45 return new CKEDITOR.dom.element( domNode ); 46 47 case 3 : // TEXT_NODE 48 return new CKEDITOR.dom.text( domNode ); 49 } 50 51 /** 52 * The native DOM node represented by this class instance. 53 * @type Object 54 * @example 55 * var element = new CKEDITOR.dom.node( document.body ); 56 * alert( element.$.nodeType ); // "1" 57 */ 58 this.$ = domNode; 59 } 60 61 return this; 62 }; 63 64 CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject(); 65 66 CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype, 67 /** @lends CKEDITOR.dom.node.prototype */ 68 { 69 /** 70 * Makes this node child of another element. 71 * @param {CKEDITOR.dom.element} element The target element to which append 72 * this node. 73 * @returns {CKEDITOR.dom.element} The target element. 74 * @example 75 * var p = new CKEDITOR.dom.element( 'p' ); 76 * var strong = new CKEDITOR.dom.element( 'strong' ); 77 * strong.appendTo( p ); 78 * 79 * // result: "<p><strong></strong></p>" 80 */ 81 appendTo : function( element ) 82 { 83 element.append( this ); 84 return element; 85 }, 86 87 /** 88 * Gets the parent element for this node. 89 * @returns {CKEDITOR.dom.element} The parent element. 90 * @example 91 * var node = editor.document.getBody().getFirst(); 92 * var parent = node.<b>getParent()</b>; 93 * alert( node.getName() ); // "body" 94 */ 95 getParent : function() 96 { 97 var parent = this.$.parentNode; 98 return parent ? new CKEDITOR.dom.element( this.$.parentNode ) : null; 99 }, 100 101 /** 102 * Inserts this element after a node. 103 * @param {CKEDITOR.dom.node} node The that will preceed this element. 104 * @returns {CKEDITOR.dom.node} The node preceeding this one after 105 * insertion. 106 * @example 107 * var em = new CKEDITOR.dom.element( 'em' ); 108 * var strong = new CKEDITOR.dom.element( 'strong' ); 109 * strong.insertAfter( em ); 110 * 111 * // result: "<em></em><strong></strong>" 112 */ 113 insertAfter : function( node ) 114 { 115 node.$.parentNode.insertBefore( this.$, node.$.nextSibling ); 116 return node; 117 }, 118 119 /** 120 * Inserts this element before a node. 121 * @param {CKEDITOR.dom.node} node The that will be after this element. 122 * @returns {CKEDITOR.dom.node} The node after this one after insertion. 123 * @example 124 * var em = new CKEDITOR.dom.element( 'em' ); 125 * var strong = new CKEDITOR.dom.element( 'strong' ); 126 * strong.insertBefore( em ); 127 * 128 * // result: "<strong></strong><em></em>" 129 */ 130 insertBefore : function( node ) 131 { 132 node.$.parentNode.insertBefore( this.$, node.$ ); 133 } 134 } 135 ); 136