--- /dev/null
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which\r
+ * represents a DOM document.\r
+ */\r
+\r
+/**\r
+ * Represents a DOM document.\r
+ * @constructor\r
+ * @augments CKEDITOR.dom.domObject\r
+ * @param {Object} domDocument A native DOM document.\r
+ * @example\r
+ * var document = new CKEDITOR.dom.document( document );\r
+ */\r
+CKEDITOR.dom.document = function( domDocument )\r
+{\r
+ CKEDITOR.dom.domObject.call( this, domDocument );\r
+};\r
+\r
+// PACKAGER_RENAME( CKEDITOR.dom.document )\r
+\r
+CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject();\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.dom.document.prototype,\r
+ /** @lends CKEDITOR.dom.document.prototype */\r
+ {\r
+ /**\r
+ * Appends a CSS file to the document.\r
+ * @param {String} cssFileUrl The CSS file URL.\r
+ * @example\r
+ * <b>CKEDITOR.document.appendStyleSheet( '/mystyles.css' )</b>;\r
+ */\r
+ appendStyleSheet : function( cssFileUrl )\r
+ {\r
+ if ( this.$.createStyleSheet )\r
+ this.$.createStyleSheet( cssFileUrl );\r
+ else\r
+ {\r
+ var link = new CKEDITOR.dom.element( 'link' );\r
+ link.setAttributes(\r
+ {\r
+ rel :'stylesheet',\r
+ type : 'text/css',\r
+ href : cssFileUrl\r
+ });\r
+\r
+ this.getHead().append( link );\r
+ }\r
+ },\r
+\r
+ createElement : function( name, attribsAndStyles )\r
+ {\r
+ var element = new CKEDITOR.dom.element( name, this );\r
+\r
+ if ( attribsAndStyles )\r
+ {\r
+ if ( attribsAndStyles.attributes )\r
+ element.setAttributes( attribsAndStyles.attributes );\r
+\r
+ if ( attribsAndStyles.styles )\r
+ element.setStyles( attribsAndStyles.styles );\r
+ }\r
+\r
+ return element;\r
+ },\r
+\r
+ createText : function( text )\r
+ {\r
+ return new CKEDITOR.dom.text( text, this );\r
+ },\r
+\r
+ focus : function()\r
+ {\r
+ this.getWindow().focus();\r
+ },\r
+\r
+ /**\r
+ * Gets and element based on its id.\r
+ * @param {String} elementId The element id.\r
+ * @returns {CKEDITOR.dom.element} The element instance, or null if not found.\r
+ * @example\r
+ * var element = <b>CKEDITOR.document.getById( 'myElement' )</b>;\r
+ * alert( element.getId() ); // "myElement"\r
+ */\r
+ getById : function( elementId )\r
+ {\r
+ var $ = this.$.getElementById( elementId );\r
+ return $ ? new CKEDITOR.dom.element( $ ) : null;\r
+ },\r
+\r
+ getByAddress : function( address, normalized )\r
+ {\r
+ var $ = this.$.documentElement;\r
+\r
+ for ( var i = 0 ; $ && i < address.length ; i++ )\r
+ {\r
+ var target = address[ i ];\r
+\r
+ if ( !normalized )\r
+ {\r
+ $ = $.childNodes[ target ];\r
+ continue;\r
+ }\r
+\r
+ var currentIndex = -1;\r
+\r
+ for (var j = 0 ; j < $.childNodes.length ; j++ )\r
+ {\r
+ var candidate = $.childNodes[ j ];\r
+\r
+ if ( normalized === true &&\r
+ candidate.nodeType == 3 &&\r
+ candidate.previousSibling &&\r
+ candidate.previousSibling.nodeType == 3 )\r
+ {\r
+ continue;\r
+ }\r
+\r
+ currentIndex++;\r
+\r
+ if ( currentIndex == target )\r
+ {\r
+ $ = candidate;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ return $ ? new CKEDITOR.dom.node( $ ) : null;\r
+ },\r
+\r
+ getElementsByTag : function( tagName, namespace )\r
+ {\r
+ if ( !CKEDITOR.env.ie && namespace )\r
+ tagName = namespace + ':' + tagName;\r
+ return new CKEDITOR.dom.nodeList( this.$.getElementsByTagName( tagName ) );\r
+ },\r
+\r
+ /**\r
+ * Gets the <head> element for this document.\r
+ * @returns {CKEDITOR.dom.element} The <head> element.\r
+ * @example\r
+ * var element = <b>CKEDITOR.document.getHead()</b>;\r
+ * alert( element.getName() ); // "head"\r
+ */\r
+ getHead : function()\r
+ {\r
+ var head = this.$.getElementsByTagName( 'head' )[0];\r
+ head = new CKEDITOR.dom.element( head );\r
+\r
+ return (\r
+ /** @ignore */\r
+ this.getHead = function()\r
+ {\r
+ return head;\r
+ })();\r
+ },\r
+\r
+ /**\r
+ * Gets the <body> element for this document.\r
+ * @returns {CKEDITOR.dom.element} The <body> element.\r
+ * @example\r
+ * var element = <b>CKEDITOR.document.getBody()</b>;\r
+ * alert( element.getName() ); // "body"\r
+ */\r
+ getBody : function()\r
+ {\r
+ var body = new CKEDITOR.dom.element( this.$.body );\r
+\r
+ return (\r
+ /** @ignore */\r
+ this.getBody = function()\r
+ {\r
+ return body;\r
+ })();\r
+ },\r
+\r
+ getDocumentElement : function()\r
+ {\r
+ var documentElement = new CKEDITOR.dom.element( this.$.documentElement );\r
+\r
+ return (\r
+ /** @ignore */\r
+ this.getDocumentElement = function()\r
+ {\r
+ return documentElement;\r
+ })();\r
+ },\r
+\r
+ /**\r
+ * Gets the window object that holds this document.\r
+ * @returns {CKEDITOR.dom.window} The window object.\r
+ * @example\r
+ */\r
+ getWindow : function()\r
+ {\r
+ var win = new CKEDITOR.dom.window( this.$.parentWindow || this.$.defaultView );\r
+\r
+ return (\r
+ /** @ignore */\r
+ this.getWindow = function()\r
+ {\r
+ return win;\r
+ })();\r
+ }\r
+ });\r