--- /dev/null
+/*\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
+(function()\r
+{\r
+ var htmlFilterRules =\r
+ {\r
+ elements :\r
+ {\r
+ $ : function( element )\r
+ {\r
+ var attributes = element.attributes,\r
+ realHtml = attributes && attributes[ 'data-cke-realelement' ],\r
+ realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ),\r
+ realElement = realFragment && realFragment.children[ 0 ];\r
+\r
+ // If we have width/height in the element, we must move it into\r
+ // the real element.\r
+ if ( realElement && element.attributes[ 'data-cke-resizable' ] )\r
+ {\r
+ var style = element.attributes.style;\r
+\r
+ if ( style )\r
+ {\r
+ // Get the width from the style.\r
+ var match = /(?:^|\s)width\s*:\s*(\d+)/i.exec( style ),\r
+ width = match && match[1];\r
+\r
+ // Get the height from the style.\r
+ match = /(?:^|\s)height\s*:\s*(\d+)/i.exec( style );\r
+ var height = match && match[1];\r
+\r
+ if ( width )\r
+ realElement.attributes.width = width;\r
+\r
+ if ( height )\r
+ realElement.attributes.height = height;\r
+ }\r
+ }\r
+\r
+ return realElement;\r
+ }\r
+ }\r
+ };\r
+\r
+ CKEDITOR.plugins.add( 'fakeobjects',\r
+ {\r
+ requires : [ 'htmlwriter' ],\r
+\r
+ afterInit : function( editor )\r
+ {\r
+ var dataProcessor = editor.dataProcessor,\r
+ htmlFilter = dataProcessor && dataProcessor.htmlFilter;\r
+\r
+ if ( htmlFilter )\r
+ htmlFilter.addRules( htmlFilterRules );\r
+ }\r
+ });\r
+})();\r
+\r
+CKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable )\r
+{\r
+ var lang = this.lang.fakeobjects,\r
+ label = lang[ realElementType ] || lang.unknown;\r
+\r
+ var attributes =\r
+ {\r
+ 'class' : className,\r
+ src : CKEDITOR.getUrl( 'images/spacer.gif' ),\r
+ 'data-cke-realelement' : encodeURIComponent( realElement.getOuterHtml() ),\r
+ 'data-cke-real-node-type' : realElement.type,\r
+ alt : label,\r
+ title : label,\r
+ align : realElement.getAttribute( 'align' ) || ''\r
+ };\r
+\r
+ if ( realElementType )\r
+ attributes[ 'data-cke-real-element-type' ] = realElementType;\r
+\r
+ if ( isResizable )\r
+ attributes[ 'data-cke-resizable' ] = isResizable;\r
+\r
+ return this.document.createElement( 'img', { attributes : attributes } );\r
+};\r
+\r
+CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable )\r
+{\r
+ var lang = this.lang.fakeobjects,\r
+ label = lang[ realElementType ] || lang.unknown,\r
+ html;\r
+\r
+ var writer = new CKEDITOR.htmlParser.basicWriter();\r
+ realElement.writeHtml( writer );\r
+ html = writer.getHtml();\r
+\r
+ var attributes =\r
+ {\r
+ 'class' : className,\r
+ src : CKEDITOR.getUrl( 'images/spacer.gif' ),\r
+ 'data-cke-realelement' : encodeURIComponent( html ),\r
+ 'data-cke-real-node-type' : realElement.type,\r
+ alt : label,\r
+ title : label,\r
+ align : realElement.attributes.align || ''\r
+ };\r
+\r
+ if ( realElementType )\r
+ attributes[ 'data-cke-real-element-type' ] = realElementType;\r
+\r
+ if ( isResizable )\r
+ attributes[ 'data-cke-resizable' ] = isResizable;\r
+\r
+ return new CKEDITOR.htmlParser.element( 'img', attributes );\r
+};\r
+\r
+CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement )\r
+{\r
+ if ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT )\r
+ return null;\r
+\r
+ return CKEDITOR.dom.element.createFromHtml(\r
+ decodeURIComponent( fakeElement.data( 'cke-realelement' ) ),\r
+ this.document );\r
+};\r