Mimimum syndical pour en faire un produit zope / cmf.
[ckeditor.git] / skins / ckeditor / _source / core / dom / document.js
diff --git a/skins/ckeditor/_source/core/dom/document.js b/skins/ckeditor/_source/core/dom/document.js
new file mode 100644 (file)
index 0000000..8880de8
--- /dev/null
@@ -0,0 +1,251 @@
+/*\r
+Copyright (c) 2003-2011, 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
+               appendStyleText : function( cssStyleText )\r
+               {\r
+                       if ( this.$.createStyleSheet )\r
+                       {\r
+                               var styleSheet = this.$.createStyleSheet( "" );\r
+                               styleSheet.cssText = cssStyleText ;\r
+                       }\r
+                       else\r
+                       {\r
+                               var style = new CKEDITOR.dom.element( 'style', this );\r
+                               style.append( new CKEDITOR.dom.text( cssStyleText, this ) );\r
+                               this.getHead().append( style );\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 && ! ( document.documentMode > 8 ) ) && namespace )\r
+                               tagName = namespace + ':' + tagName;\r
+                       return new CKEDITOR.dom.nodeList( this.$.getElementsByTagName( tagName ) );\r
+               },\r
+\r
+               /**\r
+                * Gets the &lt;head&gt; element for this document.\r
+                * @returns {CKEDITOR.dom.element} The &lt;head&gt; 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
+                       if ( !head )\r
+                               head = this.getDocumentElement().append( new CKEDITOR.dom.element( 'head' ), true );\r
+                       else\r
+                       head = new CKEDITOR.dom.element( head );\r
+\r
+                       return (\r
+                       this.getHead = function()\r
+                               {\r
+                                       return head;\r
+                               })();\r
+               },\r
+\r
+               /**\r
+                * Gets the &lt;body&gt; element for this document.\r
+                * @returns {CKEDITOR.dom.element} The &lt;body&gt; 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
+                       this.getBody = function()\r
+                               {\r
+                                       return body;\r
+                               })();\r
+               },\r
+\r
+               /**\r
+                * Gets the DOM document element for this document.\r
+                * @returns {CKEDITOR.dom.element} The DOM document element.\r
+                */\r
+               getDocumentElement : function()\r
+               {\r
+                       var documentElement = new CKEDITOR.dom.element( this.$.documentElement );\r
+\r
+                       return (\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
+                */\r
+               getWindow : function()\r
+               {\r
+                       var win = new CKEDITOR.dom.window( this.$.parentWindow || this.$.defaultView );\r
+\r
+                       return (\r
+                       this.getWindow = function()\r
+                               {\r
+                                       return win;\r
+                               })();\r
+               },\r
+\r
+               /**\r
+                * Defines the document contents through document.write. Note that the\r
+                * previous document contents will be lost (cleaned).\r
+                * @since 3.5\r
+                * @param {String} html The HTML defining the document contents.\r
+                * @example\r
+                * document.write(\r
+                *     '&lt;html&gt;' +\r
+                *         '&lt;head&gt;&lt;title&gt;Sample Doc&lt;/title&gt;&lt;/head&gt;' +\r
+                *         '&lt;body&gt;Document contents created by code&lt;/body&gt;' +\r
+                *      '&lt;/html&gt;' );\r
+                */\r
+               write : function( html )\r
+               {\r
+                       // Don't leave any history log in IE. (#5657)\r
+                       this.$.open( 'text/html', 'replace' );\r
+\r
+                       // Support for custom document.domain in IE.\r
+                       CKEDITOR.env.isCustomDomain() &&  ( this.$.domain = document.domain );\r
+\r
+                       this.$.write( html );\r
+                       this.$.close();\r
+               }\r
+       });\r