{\r
switch ( domNode.nodeType )\r
{\r
+ // Safari don't consider document as element node type. (#3389)\r
+ case CKEDITOR.NODE_DOCUMENT :\r
+ return new CKEDITOR.dom.document( domNode );\r
+\r
case CKEDITOR.NODE_ELEMENT :\r
return new CKEDITOR.dom.element( domNode );\r
\r
CKEDITOR.NODE_ELEMENT = 1;\r
\r
/**\r
+ * Document node type.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.NODE_DOCUMENT = 9;\r
+\r
+/**\r
* Text node type.\r
* @constant\r
* @example\r
var parentNode = node.parentNode;\r
var currentIndex = -1;\r
\r
- for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )\r
+ if ( parentNode )\r
{\r
- var candidate = parentNode.childNodes[i];\r
-\r
- if ( normalized &&\r
- candidate.nodeType == 3 &&\r
- candidate.previousSibling &&\r
- candidate.previousSibling.nodeType == 3 )\r
+ for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )\r
{\r
- continue;\r
- }\r
+ var candidate = parentNode.childNodes[i];\r
\r
- currentIndex++;\r
+ if ( normalized &&\r
+ candidate.nodeType == 3 &&\r
+ candidate.previousSibling &&\r
+ candidate.previousSibling.nodeType == 3 )\r
+ {\r
+ continue;\r
+ }\r
\r
- if ( candidate == node )\r
- break;\r
- }\r
+ currentIndex++;\r
+\r
+ if ( candidate == node )\r
+ break;\r
+ }\r
\r
- address.unshift( currentIndex );\r
+ address.unshift( currentIndex );\r
+ }\r
\r
- node = node.parentNode;\r
+ node = parentNode;\r
}\r
\r
return address;\r
var document = new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument );\r
\r
return (\r
- /** @ignore */\r
this.getDocument = function()\r
{\r
return document;\r
child.parentNode.removeChild( child ) ;\r
}\r
}\r
+ },\r
+\r
+ isReadOnly : function()\r
+ {\r
+ var current = this;\r
+ while( current )\r
+ {\r
+ if ( current.type == CKEDITOR.NODE_ELEMENT )\r
+ {\r
+ if ( current.is( 'body' ) || current.getCustomData( '_cke_notReadOnly' ) )\r
+ break;\r
+\r
+ if ( current.getAttribute( 'contentEditable' ) == 'false' )\r
+ return current;\r
+ else if ( current.getAttribute( 'contentEditable' ) == 'true' )\r
+ break;\r
+ }\r
+ current = current.getParent();\r
+ }\r
+\r
+ return false;\r
}\r
}\r
);\r