define ( [
'jquery' ,
'/common/common-util.js' ,
'/bower_components/hyperjson/hyperjson.js' ,
'/bower_components/nthen/index.js' ,
] , function ( $ , Util , Hyperjson , nThen ) {
var module = {
ext : '.html' , // default
exts : [ '.html' , '.doc' ]
} ;
var exportMediaTags = function ( inner , cb ) {
var $clone = $ ( inner ) . clone ( ) ;
nThen ( function ( waitFor ) {
$ ( inner ) . find ( 'media-tag' ) . each ( function ( i , el ) {
var blob = Util . find ( el , [ '_mediaObject' , '_blob' , 'content' ] ) ;
if ( ! blob ) { return ; }
Util . blobToImage ( blob , waitFor ( function ( imgSrc ) {
$clone . find ( 'media-tag[src="' + $ ( el ) . attr ( 'src' ) + '"] img' )
. attr ( 'src' , imgSrc ) ;
$clone . find ( 'media-tag' ) . parent ( )
. find ( '.cke_widget_drag_handler_container' ) . remove ( ) ;
} ) ) ;
} ) ;
} ) . nThen ( function ( ) {
cb ( $clone [ 0 ] ) ;
} ) ;
} ;
var cleanHtml = function ( inner ) {
return inner . innerHTML . replace ( /<img[^>]*class="cke_anchor"[^>]*data-cke-realelement="([^"]*)"[^>]*>/g ,
function ( match , realElt ) {
//console.log("returning realElt \"" + unescape(realElt)+ "\".");
return decodeURIComponent ( realElt ) ;
} ) ;
} ;
module . getHTML = function ( inner ) {
return ( '<!DOCTYPE html>\n' + '<html>\n' +
' <head><meta charset="utf-8"></head>\n <body>' +
cleanHtml ( inner ) +
' </body>\n</html>'
) ;
} ;
var exportDoc = function ( inner ) {
var preHtml = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word' xmlns='http://www.w3.org/TR/REC-html40'><head><meta charset='utf-8'><title>Export HTML To Doc</title></head><body>" ;
var postHtml = "</body></html>" ;
var _html = preHtml + cleanHtml ( inner ) + postHtml ;
return _html ;
} ;
module . main = function ( userDoc , cb , ext ) {
if ( ! ext || module . exts . indexOf ( ext ) === - 1 ) { ext = module . ext ; }
var inner ;
if ( userDoc && userDoc . tagName ) {
inner = userDoc ;
} else {
try {
if ( Array . isArray ( userDoc ) ) {
inner = Hyperjson . toDOM ( userDoc ) ;
} else {
console . error ( 'This Pad is not an array!' , userDoc ) ;
return void cb ( '' ) ;
}
} catch ( e ) {
console . log ( JSON . stringify ( userDoc ) ) ;
console . error ( userDoc ) ;
console . error ( e ) ;
return void cb ( '' ) ;
}
}
exportMediaTags ( inner , function ( toExport ) {
if ( ext === ".doc" ) {
var blob = new Blob ( [ '\ufeff' , exportDoc ( toExport ) ] , {
type : 'application/msword'
} ) ;
return void cb ( blob ) ;
}
var html = module . getHTML ( toExport ) ;
cb ( new Blob ( [ html ] , { type : "text/html;charset=utf-8" } ) ) ;
} ) ;
} ;
return module ;
} ) ;