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 );