diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-02-13 13:56:04 +0100 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-02-13 13:56:04 +0100 |
commit | d8ed34beba05bde85af420cc4e42a065021653dc (patch) | |
tree | 14a98389f20ef6cf768db851d46267701fa3d4d8 /lib | |
parent | 3154d37e41da68a16ef29ec69d8896acd9da336a (diff) | |
download | gitbook-d8ed34beba05bde85af420cc4e42a065021653dc.zip gitbook-d8ed34beba05bde85af420cc4e42a065021653dc.tar.gz gitbook-d8ed34beba05bde85af420cc4e42a065021653dc.tar.bz2 |
Add method to fetch remote image with AssetsInliner
Diffstat (limited to 'lib')
-rw-r--r-- | lib/output/assets-inliner.js | 51 | ||||
-rw-r--r-- | lib/output/base.js | 4 | ||||
-rw-r--r-- | lib/output/folder.js | 6 | ||||
-rw-r--r-- | lib/utils/fs.js | 28 |
4 files changed, 76 insertions, 13 deletions
diff --git a/lib/output/assets-inliner.js b/lib/output/assets-inliner.js index 65ecbfa..2156bef 100644 --- a/lib/output/assets-inliner.js +++ b/lib/output/assets-inliner.js @@ -3,7 +3,12 @@ var util = require('util'); var path = require('path'); var FolderOutput = require('./folder'); +var Promise = require('../utils/promise'); +var fs = require('../utils/fs'); var imagesUtil = require('../utils/images'); +var location = require('../utils/location'); + +var DEFAULT_ASSETS_FOLDER = 'assets'; /* Utility mixin to inline all the assets in a book: @@ -32,19 +37,45 @@ AssetsInliner.prototype.onOutputSVG = function(page, svg) { }; // Output an image as a file -AssetsInliner.prototype.onOutputImage = function(page, imgFile) { - if (path.extname(imgFile).toLowerCase() != '.svg') { - return imgFile; +AssetsInliner.prototype.onOutputImage = function(page, src) { + var that = this; + var isSVG = false; + var ext = path.extname(src).toLowerCase(); + if (ext == '.svg') { + isSVG = false; + ext = '.png'; } - // Convert SVG to PNG - var filename = _.uniqueId('svg_') + '.png'; - return imagesUtil.convertSVGToPNG(page.resolve(imgFile), this.resolve(filename)) + return Promise() - // Return relative path from the page - .thenResolve(function() { - return page.relative('/' + filename); - }); + // Allocate a new file + .then(function() { + + return that. + }) + + // Download file if external + .then(function() { + if (!location.isExternal(src)) return; + + return fs.download(src, ) + + }) + .then(function() { + if (path.extname(src).toLowerCase() != '.svg') { + return src; + } + + // Convert SVG to PNG + var filename = _.uniqueId('svg_') + '.png'; + return imagesUtil.convertSVGToPNG(page.resolve(src), this.resolve(filename)) + .thenResolve('/' + filename); + }) + + // Return relative path from the page + .thenResolve(function(filename) { + return page.relative('/' + filename); + }); }; diff --git a/lib/output/base.js b/lib/output/base.js index dd62cff..688ecb7 100644 --- a/lib/output/base.js +++ b/lib/output/base.js @@ -106,9 +106,9 @@ Output.prototype.onOutputSVG = function(page, svg) { }; // Output an image as a file +// Normalize the relative link Output.prototype.onOutputImage = function(page, imgFile) { - // Don't replace it - return imgFile; + return page.relative(imgFile); }; // Finish the generation diff --git a/lib/output/folder.js b/lib/output/folder.js index 4b1d9fa..aabdcc4 100644 --- a/lib/output/folder.js +++ b/lib/output/folder.js @@ -74,5 +74,11 @@ FolderOutput.prototype.writeFile = function(filename, buf) { }); }; +// Create a new unique file +// Returns its filename +FolderOutput.prototype.createNewFile = function(base, filename) { + +}; + module.exports = FolderOutput; diff --git a/lib/utils/fs.js b/lib/utils/fs.js index ea9546b..bf5e51d 100644 --- a/lib/utils/fs.js +++ b/lib/utils/fs.js @@ -2,6 +2,8 @@ var fs = require('graceful-fs'); var mkdirp = require('mkdirp'); var destroy = require('destroy'); var tmp = require('tmp'); +var request = require('request'); +var path = require('path'); var Promise = require('./promise'); @@ -59,6 +61,28 @@ function genTmpFile(opts) { .get(0); } +// Download an image +function download(uri, dest) { + return writeStream(dest, request(uri)); +} + +// Find a filename available in a folder +function uniqueFilename(base, filename) { + var ext = path.extname(filename); + filename = path.resolve(base, filename); + filename = path.join(path.dirname(filename), path.basename(filename, ext)); + + var _filename = filename+ext; + + var i = 0; + while (fs.existsSync(filename)) { + _filename = filename + '_' + i + ext; + i = i + 1; + } + + return path.relative(base, _filename); +} + module.exports = { exists: fileExists, existsSync: fs.existsSync, @@ -70,5 +94,7 @@ module.exports = { readdir: Promise.nfbind(fs.readdir), writeStream: writeStream, copy: copyFile, - tmpFile: genTmpFile + tmpFile: genTmpFile, + download: download, + uniqueFilename: uniqueFilename }; |