CKEditor

by EpokK

HTML

<script src="http://ckeditor.com/apps/ckeditor/4.0/ckeditor.js"></script>
<textarea id="editor1">Test</textarea>

JavaScript

CKEDITOR.replace('editor1', {
    on: {
        paste: function(event) {
            var editor = event.editor;
            var value = event.data.dataValue;
           
            var html = ''; // recuperer le HTML de value
            var stylesheet = ''; // recuperer le stylesheet de value
           
            styliner(html, stylesheet, function(content) {
                event.data.dataValue = content;
            });
        }
    }
});

var styliner = (function( doc ) {
	'use strict';

	function inIframe( callback ) {
		var iframe = doc.createElement( 'iframe' );
		iframe.addEventListener( 'load', function() {
			callback( iframe.contentDocument );

			iframe.parentElement.removeChild( iframe );
		} );

		doc.body.appendChild( iframe );
	}

	function createDocument( iDoc, html, stylesheet ) {
		iDoc.open();
		iDoc.write(
			'<!DOCTYPE>' +
			'<html>' +
				'<head>' +
					'<style>' + stylesheet + '</style>' +
				'</head>' +
				'<body>' + html + '</body>' +
			'</html>'
		);
		iDoc.close();
	}

	function styleArr2Obj( style ) {
		return style.cssText.split( /;\s*/ ).reduce( function( obj, rule ) {
			rule = rule.split( ':' );
			obj[ rule[ 0 ] ] = rule[ 1 ];
			return obj;
		}, {} );
	}

	return function( html, stylesheet, callback ) {
		inIframe( function( iDoc ) {
			createDocument( iDoc, html, stylesheet );

			var rules = iDoc.styleSheets[ 0 ].cssRules,
				rule,
				$iDoc = jQuery( iDoc );

			for ( var i = 0, l = rules.length; i < l; ++i ) {
				rule = rules[ i ];
				$iDoc.find( rule.selectorText ).css( styleArr2Obj( rule.style ) );
			}

			callback( iDoc.body.innerHTML );
		} );
	};
})( document );