diff options
author | Johan Preynat <johan.preynat@gmail.com> | 2016-05-03 11:29:17 +0200 |
---|---|---|
committer | Johan Preynat <johan.preynat@gmail.com> | 2016-05-03 11:29:17 +0200 |
commit | 0923d1aa24ba3659082f54814f1e2a40f41dcd57 (patch) | |
tree | 56fb53e40f2eb2a5bbfeb8347dc3af8a84fdd88a | |
parent | ffe6c36f2f7815d956f38908078cfe0b805cb0d7 (diff) | |
download | gitbook-0923d1aa24ba3659082f54814f1e2a40f41dcd57.zip gitbook-0923d1aa24ba3659082f54814f1e2a40f41dcd57.tar.gz gitbook-0923d1aa24ba3659082f54814f1e2a40f41dcd57.tar.bz2 |
lib/output/modifiers/inlinePng.js: Add modifier to save inline PNG images
-rw-r--r-- | lib/output/modifiers/inlinePng.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/output/modifiers/inlinePng.js b/lib/output/modifiers/inlinePng.js new file mode 100644 index 0000000..161f164 --- /dev/null +++ b/lib/output/modifiers/inlinePng.js @@ -0,0 +1,47 @@ +var crc = require('crc'); +var path = require('path'); + +var imagesUtil = require('../../utils/images'); +var fs = require('../../utils/fs'); +var LocationUtils = require('../../utils/location'); + +var editHTMLElement = require('./editHTMLElement'); + +/** + Convert all inline PNG images to PNG file + + @param {String} rootFolder + @param {HTMLDom} $ + @return {Promise} +*/ +function inlinePng(rootFolder, currentFile, $) { + var currentDirectory = path.dirname(currentFile); + + return editHTMLElement($, 'img', function($img) { + var src = $img.attr('src'); + if (!LocationUtils.isDataURI(src)) { + return; + } + + // We avoid generating twice the same PNG + var hash = crc.crc32(src).toString(16); + var fileName = hash + '.png'; + + // Result file path + var filePath = path.join(rootFolder, fileName); + + return fs.assertFile(filePath, function() { + return imagesUtil.convertInlinePNG(src, filePath); + }) + .then(function() { + // Convert filename to a relative filename + fileName = LocationUtils.relative(currentDirectory, fileName); + + // Replace src + $img.attr('src', fileName); + }); + }); +} + + +module.exports = inlinePng; |