2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license
\r
7 * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which
\r
8 * represents a DOM document.
\r
12 * Represents a DOM document.
\r
14 * @augments CKEDITOR.dom.domObject
\r
15 * @param {Object} domDocument A native DOM document.
\r
17 * var document = new CKEDITOR.dom.document( document );
\r
19 CKEDITOR.dom.document = function( domDocument )
\r
21 CKEDITOR.dom.domObject.call( this, domDocument );
\r
24 // PACKAGER_RENAME( CKEDITOR.dom.document )
\r
26 CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject();
\r
28 CKEDITOR.tools.extend( CKEDITOR.dom.document.prototype,
\r
29 /** @lends CKEDITOR.dom.document.prototype */
\r
32 * Appends a CSS file to the document.
\r
33 * @param {String} cssFileUrl The CSS file URL.
\r
35 * <b>CKEDITOR.document.appendStyleSheet( '/mystyles.css' )</b>;
\r
37 appendStyleSheet : function( cssFileUrl )
\r
39 if ( this.$.createStyleSheet )
\r
40 this.$.createStyleSheet( cssFileUrl );
\r
43 var link = new CKEDITOR.dom.element( 'link' );
\r
51 this.getHead().append( link );
\r
55 createElement : function( name, attribsAndStyles )
\r
57 var element = new CKEDITOR.dom.element( name, this );
\r
59 if ( attribsAndStyles )
\r
61 if ( attribsAndStyles.attributes )
\r
62 element.setAttributes( attribsAndStyles.attributes );
\r
64 if ( attribsAndStyles.styles )
\r
65 element.setStyles( attribsAndStyles.styles );
\r
71 createText : function( text )
\r
73 return new CKEDITOR.dom.text( text, this );
\r
78 this.getWindow().focus();
\r
82 * Gets and element based on its id.
\r
83 * @param {String} elementId The element id.
\r
84 * @returns {CKEDITOR.dom.element} The element instance, or null if not found.
\r
86 * var element = <b>CKEDITOR.document.getById( 'myElement' )</b>;
\r
87 * alert( element.getId() ); // "myElement"
\r
89 getById : function( elementId )
\r
91 var $ = this.$.getElementById( elementId );
\r
92 return $ ? new CKEDITOR.dom.element( $ ) : null;
\r
95 getByAddress : function( address, normalized )
\r
97 var $ = this.$.documentElement;
\r
99 for ( var i = 0 ; $ && i < address.length ; i++ )
\r
101 var target = address[ i ];
\r
105 $ = $.childNodes[ target ];
\r
109 var currentIndex = -1;
\r
111 for (var j = 0 ; j < $.childNodes.length ; j++ )
\r
113 var candidate = $.childNodes[ j ];
\r
115 if ( normalized === true &&
\r
116 candidate.nodeType == 3 &&
\r
117 candidate.previousSibling &&
\r
118 candidate.previousSibling.nodeType == 3 )
\r
125 if ( currentIndex == target )
\r
133 return $ ? new CKEDITOR.dom.node( $ ) : null;
\r
136 getElementsByTag : function( tagName, namespace )
\r
138 if ( !CKEDITOR.env.ie && namespace )
\r
139 tagName = namespace + ':' + tagName;
\r
140 return new CKEDITOR.dom.nodeList( this.$.getElementsByTagName( tagName ) );
\r
144 * Gets the <head> element for this document.
\r
145 * @returns {CKEDITOR.dom.element} The <head> element.
\r
147 * var element = <b>CKEDITOR.document.getHead()</b>;
\r
148 * alert( element.getName() ); // "head"
\r
150 getHead : function()
\r
152 var head = this.$.getElementsByTagName( 'head' )[0];
\r
153 head = new CKEDITOR.dom.element( head );
\r
157 this.getHead = function()
\r
164 * Gets the <body> element for this document.
\r
165 * @returns {CKEDITOR.dom.element} The <body> element.
\r
167 * var element = <b>CKEDITOR.document.getBody()</b>;
\r
168 * alert( element.getName() ); // "body"
\r
170 getBody : function()
\r
172 var body = new CKEDITOR.dom.element( this.$.body );
\r
176 this.getBody = function()
\r
182 getDocumentElement : function()
\r
184 var documentElement = new CKEDITOR.dom.element( this.$.documentElement );
\r
188 this.getDocumentElement = function()
\r
190 return documentElement;
\r
195 * Gets the window object that holds this document.
\r
196 * @returns {CKEDITOR.dom.window} The window object.
\r
199 getWindow : function()
\r
201 var win = new CKEDITOR.dom.window( this.$.parentWindow || this.$.defaultView );
\r
205 this.getWindow = function()
\r