Improved image-minimizer
* Don't minimize images that are too wide -> they will get stretched otherwise * Don't try to modify the issue/comment when nothing changed * Fixed typo
This commit is contained in:
parent
9f8e8c0856
commit
c08a4e851b
|
@ -4,7 +4,12 @@
|
||||||
module.exports = async ({github, context}) => {
|
module.exports = async ({github, context}) => {
|
||||||
const IGNORE_KEY = '<!-- IGNORE IMAGE MINIFY -->';
|
const IGNORE_KEY = '<!-- IGNORE IMAGE MINIFY -->';
|
||||||
const IGNORE_ALT_NAME_END = 'ignoreImageMinify';
|
const IGNORE_ALT_NAME_END = 'ignoreImageMinify';
|
||||||
|
// Targeted maximum height
|
||||||
const IMG_MAX_HEIGHT_PX = 600;
|
const IMG_MAX_HEIGHT_PX = 600;
|
||||||
|
// maximum width of GitHub issues/comments
|
||||||
|
const IMG_MAX_WIDTH_PX = 800;
|
||||||
|
// all images that have a lower aspect ration (-> have a smaller width) than this will be minimized
|
||||||
|
const MIN_ASPECT_RATION = IMG_MAX_WIDTH_PX / IMG_MAX_HEIGHT_PX
|
||||||
|
|
||||||
// Get the body of the image
|
// Get the body of the image
|
||||||
let initialBody = null;
|
let initialBody = null;
|
||||||
|
@ -38,6 +43,8 @@ module.exports = async ({github, context}) => {
|
||||||
|
|
||||||
// Require the probe lib for getting the image dimensions
|
// Require the probe lib for getting the image dimensions
|
||||||
const probe = require('probe-image-size');
|
const probe = require('probe-image-size');
|
||||||
|
|
||||||
|
var wasMatchModified = false;
|
||||||
|
|
||||||
// Try to find and replace the images with minimized ones
|
// Try to find and replace the images with minimized ones
|
||||||
let newBody = await replaceAsync(initialBody, REGEX_IMAGE_LOOKUP, async (match, g1, g2) => {
|
let newBody = await replaceAsync(initialBody, REGEX_IMAGE_LOOKUP, async (match, g1, g2) => {
|
||||||
|
@ -48,7 +55,7 @@ module.exports = async ({github, context}) => {
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
let shouldModifiy = false;
|
let shouldModify = false;
|
||||||
try {
|
try {
|
||||||
console.log(`Probing ${g2}`);
|
console.log(`Probing ${g2}`);
|
||||||
let probeResult = await probe(g2);
|
let probeResult = await probe(g2);
|
||||||
|
@ -58,15 +65,26 @@ module.exports = async ({github, context}) => {
|
||||||
if (probeResult.hUnits != 'px') {
|
if (probeResult.hUnits != 'px') {
|
||||||
throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`;
|
throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`;
|
||||||
}
|
}
|
||||||
|
if (probeResult.height <= 0) {
|
||||||
|
throw `Unexpected probeResult.height (height is invalid: ${probeResult.height})`;
|
||||||
|
}
|
||||||
|
if (probeResult.wUnits != 'px') {
|
||||||
|
throw `Unexpected probeResult.wUnits (expected px but got ${probeResult.wUnits})`;
|
||||||
|
}
|
||||||
|
if (probeResult.width <= 0) {
|
||||||
|
throw `Unexpected probeResult.width (width is invalid: ${probeResult.width})`;
|
||||||
|
}
|
||||||
|
console.log(`Probing resulted in ${probeResult.width}x${probeResult.height}px`);
|
||||||
|
|
||||||
shouldModifiy = probeResult.height > IMG_MAX_HEIGHT_PX;
|
shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && (probeResult.width / probeResult.height) < MIN_ASPECT_RATION;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
console.log('Probing failed:', e);
|
console.log('Probing failed:', e);
|
||||||
// Immediately abort
|
// Immediately abort
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldModifiy) {
|
if (shouldModify) {
|
||||||
|
wasMatchModified = true;
|
||||||
console.log(`Modifying match '${match}'`);
|
console.log(`Modifying match '${match}'`);
|
||||||
return `<img alt="${g1}" src="${g2}" height=${IMG_MAX_HEIGHT_PX} />`;
|
return `<img alt="${g1}" src="${g2}" height=${IMG_MAX_HEIGHT_PX} />`;
|
||||||
}
|
}
|
||||||
|
@ -74,6 +92,11 @@ module.exports = async ({github, context}) => {
|
||||||
console.log(`Match '${match}' is ok/will not be modified`);
|
console.log(`Match '${match}' is ok/will not be modified`);
|
||||||
return match;
|
return match;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!wasMatchModified) {
|
||||||
|
console.log('Nothing was modified. Skipping update');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Update the corresponding element
|
// Update the corresponding element
|
||||||
if (context.eventName == 'issue_comment') {
|
if (context.eventName == 'issue_comment') {
|
||||||
|
|
Loading…
Reference in New Issue