diff --git a/test.js b/test.js
index 29a277f..ba31237 100644
--- a/test.js
+++ b/test.js
@@ -7,8 +7,12 @@
var cssFileName = 'ebook.css';
var pageName = 'ebook.xhtml';
var ebookName = "ebook-" + document.title + ".epub";
+var imgSrcRegex = //gi, '
');
// rawContent = rawContent.replace(/<[^<>]+>/gi, '');
+ extractImgs(rawContent);
+ rawContent = replaceImgs(rawContent);
+
+ alert();
+
return '' +
'' +
'' +
@@ -101,6 +110,59 @@ function prepareEbookContent(rawContent) {
'';
}
+function extractImgs(rawContent) {
+ $(rawContent).find('img').each(function (index, elem) {
+ var imgsrc = $(elem).attr('src');
+ try {
+ if (imgsrc.indexOf('http') === 0) {
+ allImgSrc[imgsrc] = 'img-' + index + '.' + getFileExtension(imgsrc);
+ }
+ } catch (e) {
+ }
+ });
+}
+
+function replaceImgs(rawContent) {
+ // Object.keys(allImgSrc).forEach(function (imgsrc) {
+ // rawContent = rawContent.replace(new RegExp(imgsrc, 'gi'), allImgSrc[imgsrc]);
+ // });
+ var keys = Object.keys(allImgSrc);
+ for (var i = 0; i < keys.length; i++) {
+ rawContent = rawContent.replace(keys[i], 'images/' + allImgSrc[keys[i]]);
+ }
+ return rawContent;
+}
+
+function getImagesIndex() {
+ return Object.keys(allImgSrc).reduce(function (prev, elem, index) {
+ return prev + '\n' + ' ';
+ }, '');
+}
+
+function getFileExtension(fileName) {
+ var tmpFileName = fileName.split('.').pop();
+ if (tmpFileName.indexOf('?') > 0) {
+ tmpFileName = tmpFileName.split('?')[0];
+ }
+ if (tmpFileName.trim() === '') {
+ return 'jpg'; //TODO
+ }
+ return tmpFileName;
+}
+
+function deferredAddZip(url, filename, zip) {
+ var deferred = $.Deferred();
+ JSZipUtils.getBinaryContent(url, function (err, data) {
+ if(err) {
+ deferred.reject(err);
+ } else {
+ zip.file(filename, data, {binary:true});
+ deferred.resolve(data);
+ }
+ });
+ return deferred;
+}
+
// http://ebooks.stackexchange.com/questions/1183/what-is-the-minimum-required-content-for-a-valid-epub
function buildEbook(ebookContent) {
var zip = new JSZip();
@@ -119,27 +181,6 @@ function buildEbook(ebookContent) {
var oebps = zip.folder("OEBPS");
- oebps.file('content.opf',
- '' +
- '' +
- '' +
- 'Title' +
- 'isbn' +
- '2014-03-27T09:14:09Z' +
- 'en' +
- '' +
- '' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- '' +
- '' +
- '' +
- '' +
- ''
- );
-
oebps.file('toc.xhtml',
'' +
'' +
@@ -183,9 +224,59 @@ function buildEbook(ebookContent) {
prepareEbookContent(ebookContent)
);
+ oebps.file('content.opf',
+ '' +
+ '' +
+ '' +
+ 'Title' +
+ 'isbn' +
+ '2014-03-27T09:14:09Z' +
+ 'en' +
+ '' +
+ '' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ getImagesIndex() +
+ '' +
+ '' +
+ '' +
+ '' +
+ ''
+ );
- zip.generateAsync({type:"blob"})
- .then(function(content) {
- saveAs(content, ebookName);
+ ///////////////
+ ///////////////
+ var imgs = oebps.folder("images");
+ var imgsPromises = [];
+ // allImgSrc.forEach(function (imgSrc, index) {
+ Object.keys(allImgSrc).forEach(function (imgSrc, index) {
+ var tmpDeffered = deferredAddZip(imgSrc, allImgSrc[imgSrc], imgs);
+ imgsPromises.push(tmpDeffered);
});
+
+ var done = false;
+
+ $.when.apply($, imgsPromises).done(function () {
+ done = true;
+ zip.generateAsync({type:"blob"})
+ .then(function(content) {
+ saveAs(content, ebookName);
+ });
+ console.log("done !");
+ }).fail(function (err) {
+ alert(err);
+ });
+
+ setTimeout(function () {
+ if (done) {
+ return;
+ }
+ zip.generateAsync({type:"blob"})
+ .then(function(content) {
+ saveAs(content, ebookName);
+ });
+ }, 5000);
+
}