diff --git a/lib/utils/images.js b/lib/utils/images.js index 61a52dc24..1e9031773 100644 --- a/lib/utils/images.js +++ b/lib/utils/images.js @@ -22,7 +22,11 @@ var convertSVG = function(source, dest, options) { if (error.code == 127) error = new Error("Need to install 'svgexport' using 'npm install svgexport -g'"); return d.reject(error); } - d.resolve(); + if (fs.existsSync(dest)) { + d.resolve(); + } else { + d.reject(new Error("Error converting "+source)); + } }); return d.promise; diff --git a/lib/utils/page.js b/lib/utils/page.js index ccf5dfa02..20caf7991 100644 --- a/lib/utils/page.js +++ b/lib/utils/page.js @@ -4,6 +4,7 @@ var path = require('path'); var cheerio = require('cheerio'); var domSerializer = require('dom-serializer'); var request = require('request'); +var crc = require("crc"); var links = require('./links'); var imgUtils = require('./images'); @@ -123,7 +124,7 @@ function normalizeHtml(src, options) { // If image is external and ebook, then downlaod the images if (isExternal) { origin = src; - src = "/"+fs.getUniqueFilename(outputRoot, path.basename(src)); + src = "/"+crc.crc32(origin).toString(16)+path.extname(origin); src = links.toAbsolute(src, options.base, options.output); isExternal = false; } @@ -226,6 +227,7 @@ function normalizeHtml(src, options) { function convertImages(images, options) { if (!options.convertImages) return Q(); + var downloaded = []; options.book.log.debug.ln("convert ", images.length, "images to png"); return _.reduce(images, function(prev, image) { @@ -235,8 +237,9 @@ function convertImages(images, options) { // Write image if need to be download .then(function() { - if (!image.origin) return; + if (!image.origin && !_.contains(downloaded, image.origin)) return; options.book.log.debug("download image", image.origin, "..."); + downloaded.push(image.origin); return options.book.log.debug.promise(fs.writeStream(imgin, request(image.origin))); }) @@ -247,7 +250,7 @@ function convertImages(images, options) { }) // Convert - .then(function(){ + .then(function() { if (!image.dest) return; var imgout = path.resolve(options.book.options.output, image.dest); options.book.log.debug("convert image", image.source, "to", image.dest, "..."); diff --git a/package.json b/package.json index 1076a5a44..f5f3e0546 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "URIjs": "1.14.1", "request": "2.51.0", "npm": "2.4.1", - "dom-serializer": "git+https://github.com/SamyPesse/dom-serializer.git#57ed9a2c3dfa964022ce7d71859c558ba7721785" + "dom-serializer": "0.1.0" }, "devDependencies": { "mocha": "1.18.2", diff --git a/test/ebook.js b/test/ebook.js index 9432afacf..c3e29d97c 100644 --- a/test/ebook.js +++ b/test/ebook.js @@ -1,6 +1,7 @@ var path = require('path'); var _ = require('lodash'); var assert = require('assert'); +var cheerio = require('cheerio'); var fs = require("fs"); var fsUtil = require("../lib/utils/fs"); @@ -15,26 +16,22 @@ describe('eBook Generator', function () { it('should correctly convert svg images to png', function(done) { testGeneration(books[4], "ebook", function(output) { - var readmeContent = fs.readFileSync(path.join(output, "index.html"), {encoding: "utf8"}); - var pageContent = fs.readFileSync(path.join(output, "sub/PAGE.html"), {encoding: "utf8"}); + // Check that all images exists + _.each([ + "index.html", + "sub/PAGE.html" + ], function(pageName) { + var pageFile = path.join(output, pageName); + var pageFolder = path.dirname(pageFile); + var pageContent = fs.readFileSync(pageFile, {encoding: "utf8"}); + var $ = cheerio.load(pageContent); - // Remote image - assert(pageContent.indexOf('src="../Tux.png"') >= 0); - assert(fs.existsSync(path.join(output, "Tux.png"))); - - assert(fs.existsSync(path.join(output, "test.png"))); - assert(fs.existsSync(path.join(output, "NewTux.png"))); - - assert(!fs.existsSync(path.join(output, "test_0.png"))); - assert(!fs.existsSync(path.join(output, "sub/test.png"))); - assert(!fs.existsSync(path.join(output, "sub/NewTux.png"))); - - assert(pageContent.indexOf('src="../test.png"') >= 0); - assert(pageContent.indexOf('src="../NewTux.png"') >= 0); - assert(pageContent.indexOf('= 0); - assert(readmeContent.indexOf('src="NewTux.png"') >= 0); + $("img").each(function() { + var src = $(this).attr("src"); + console.log(path.resolve(pageFolder, src)); + assert(fs.existsSync(path.resolve(pageFolder, src)), src+" not found for page "+pageName); + }) + }); }, done); }); }); diff --git a/test/fixtures/test4/README.md b/test/fixtures/test4/README.md index 19892a518..d73be6927 100644 --- a/test/fixtures/test4/README.md +++ b/test/fixtures/test4/README.md @@ -5,3 +5,7 @@ A description ![test image to be converted](./test.svg) ![test url](http://upload.wikimedia.org/wikipedia/commons/b/b0/NewTux.svg) ![test image to be converted, second use](./test.svg) + +# Test with youtube videos that have the same filename: +![youtube1](http://img.youtube.com/vi/9bZkp7q19f0/0.jpg) +![youtube2](http://img.youtube.com/vi/IkV2HQLAKHY/0.jpg) diff --git a/test/fixtures/test4/sub/PAGE.md b/test/fixtures/test4/sub/PAGE.md index 6de478e40..a98a9422a 100644 --- a/test/fixtures/test4/sub/PAGE.md +++ b/test/fixtures/test4/sub/PAGE.md @@ -8,8 +8,8 @@ ## Inline svg {% html %} - - + + {% endhtml %}