X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fplugins%2Ffakeobjects%2Fplugin.js;fp=_source%2Fplugins%2Ffakeobjects%2Fplugin.js;h=137c677f99ef6bd0c29002894a8a0acb05fc1ad8;hb=ea7e3453c7b0f023b050aca6d9f83ab372860d91;hp=0000000000000000000000000000000000000000;hpb=b93873b6532ee7515fb0d6f8b73176c44fad28f7;p=ckeditor.git diff --git a/_source/plugins/fakeobjects/plugin.js b/_source/plugins/fakeobjects/plugin.js new file mode 100644 index 0000000..137c677 --- /dev/null +++ b/_source/plugins/fakeobjects/plugin.js @@ -0,0 +1,111 @@ +/* +Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +(function() +{ + var htmlFilterRules = + { + elements : + { + $ : function( element ) + { + var realHtml = element.attributes._cke_realelement, + realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ), + realElement = realFragment && realFragment.children[ 0 ]; + + if ( realElement ) + { + // If we have width/height in the element, we must move it into + // the real element. + + var style = element.attributes.style; + + if ( style ) + { + // Get the width from the style. + var match = /(?:^|\s)width\s*:\s*(\d+)/.exec( style ), + width = match && match[1]; + + // Get the height from the style. + match = /(?:^|\s)height\s*:\s*(\d+)/.exec( style ); + var height = match && match[1]; + + if ( width ) + realElement.attributes.width = width; + + if ( height ) + realElement.attributes.height = height; + } + } + + return realElement; + } + } + }; + + CKEDITOR.plugins.add( 'fakeobjects', + { + requires : [ 'htmlwriter' ], + + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( htmlFilter ) + htmlFilter.addRules( htmlFilterRules ); + } + }); +})(); + +CKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable ) +{ + var lang = this.lang.fakeobjects; + var attributes = + { + 'class' : className, + src : CKEDITOR.getUrl( 'images/spacer.gif' ), + _cke_realelement : encodeURIComponent( realElement.getOuterHtml() ), + alt : lang[ realElementType ] || lang.unknown + }; + if ( realElementType ) + attributes._cke_real_element_type = realElementType; + if ( isResizable ) + attributes._cke_resizable = isResizable; + + return this.document.createElement( 'img', { attributes : attributes } ); +}; + +CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable ) +{ + var writer = new CKEDITOR.htmlParser.basicWriter(); + + realElement.writeHtml( writer ); + + var html = writer.getHtml(); + var lang = this.lang.fakeobjects; + + var attributes = + { + 'class' : className, + src : CKEDITOR.getUrl( 'images/spacer.gif' ), + _cke_realelement : encodeURIComponent( html ), + alt : lang[ realElementType ] || lang.unknown + }; + + if ( realElementType ) + attributes._cke_real_element_type = realElementType; + + if ( isResizable ) + attributes._cke_resizable = isResizable; + + return new CKEDITOR.htmlParser.element( 'img', attributes ); +}; + +CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement ) +{ + var html = decodeURIComponent( fakeElement.getAttribute( '_cke_realelement' ) ); + return CKEDITOR.dom.element.createFromHtml( html, this.document ); +};