JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _source / plugins / fakeobjects / plugin.js
diff --git a/_source/plugins/fakeobjects/plugin.js b/_source/plugins/fakeobjects/plugin.js
new file mode 100644 (file)
index 0000000..137c677
--- /dev/null
@@ -0,0 +1,111 @@
+/*\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
+(function()\r
+{\r
+       var htmlFilterRules =\r
+       {\r
+               elements :\r
+               {\r
+                       $ : function( element )\r
+                       {\r
+                               var realHtml = element.attributes._cke_realelement,\r
+                                       realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ),\r
+                                       realElement = realFragment && realFragment.children[ 0 ];\r
+\r
+                               if ( realElement )\r
+                               {\r
+                                       // If we have width/height in the element, we must move it into\r
+                                       // the real element.\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+)/.exec( style ),\r
+                                                       width = match && match[1];\r
+\r
+                                               // Get the height from the style.\r
+                                               match = /(?:^|\s)height\s*:\s*(\d+)/.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
+       var attributes =\r
+       {\r
+               'class' : className,\r
+               src : CKEDITOR.getUrl( 'images/spacer.gif' ),\r
+               _cke_realelement : encodeURIComponent( realElement.getOuterHtml() ),\r
+               alt : lang[ realElementType ] || lang.unknown\r
+       };\r
+       if ( realElementType )\r
+               attributes._cke_real_element_type = realElementType;\r
+       if ( isResizable )\r
+               attributes._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 writer = new CKEDITOR.htmlParser.basicWriter();\r
+\r
+       realElement.writeHtml( writer );\r
+\r
+       var html = writer.getHtml();\r
+       var lang = this.lang.fakeobjects;\r
+\r
+       var attributes =\r
+       {\r
+               'class' : className,\r
+               src : CKEDITOR.getUrl( 'images/spacer.gif' ),\r
+               _cke_realelement : encodeURIComponent( html ),\r
+               alt : lang[ realElementType ] || lang.unknown\r
+       };\r
+\r
+       if ( realElementType )\r
+               attributes._cke_real_element_type = realElementType;\r
+\r
+       if ( isResizable )\r
+               attributes._cke_resizable = isResizable;\r
+\r
+       return new CKEDITOR.htmlParser.element( 'img', attributes );\r
+};\r
+\r
+CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement )\r
+{\r
+       var html = decodeURIComponent( fakeElement.getAttribute( '_cke_realelement' ) );\r
+       return CKEDITOR.dom.element.createFromHtml( html, this.document );\r
+};\r