44 lines
1.6 KiB
JavaScript
44 lines
1.6 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const crc_1 = __importDefault(require("crc"));
|
|
const path_1 = __importDefault(require("path"));
|
|
const images_1 = __importDefault(require("../../utils/images"));
|
|
const fs_1 = __importDefault(require("../../utils/fs"));
|
|
const location_1 = __importDefault(require("../../utils/location"));
|
|
const editHTMLElement_1 = __importDefault(require("./editHTMLElement"));
|
|
/**
|
|
Convert all inline PNG images to PNG file
|
|
|
|
@param {string} rootFolder
|
|
@param {HTMLDom} $
|
|
@return {Promise}
|
|
*/
|
|
function inlinePng(rootFolder, currentFile, $) {
|
|
const currentDirectory = path_1.default.dirname(currentFile);
|
|
return (0, editHTMLElement_1.default)($, "img", ($img) => {
|
|
const src = $img.attr("src");
|
|
if (!location_1.default.isDataURI(src)) {
|
|
return;
|
|
}
|
|
// We avoid generating twice the same PNG
|
|
const hash = crc_1.default.crc32(src).toString(16);
|
|
let fileName = `${hash}.png`;
|
|
// Result file path
|
|
const filePath = path_1.default.join(rootFolder, fileName);
|
|
return fs_1.default
|
|
.assertFile(filePath, () => {
|
|
return images_1.default.convertInlinePNG(src, filePath);
|
|
})
|
|
.then(() => {
|
|
// Convert filename to a relative filename
|
|
fileName = location_1.default.relative(currentDirectory, fileName);
|
|
// Replace src
|
|
$img.attr("src", fileName);
|
|
});
|
|
});
|
|
}
|
|
exports.default = inlinePng;
|