User:Kxx/fix images.js: Difference between revisions
Appearance
< User:Kxx
Content deleted Content added
No edit summary |
No edit summary |
||
Line 9: | Line 9: | ||
} |
} |
||
if (/\.svg$/i.test(matches[4]) && matches[6] === '.png') { |
if (/\.svg$/i.test(matches[4]) && matches[6] === '.png') { |
||
let width = img.width(); |
|||
let height = img.height(); |
|||
let img2 = $('<img>').insertAfter(img); |
let img2 = $('<img>').insertAfter(img); |
||
img2.attr('src', matches.slice(1, 5).join('')); |
img2.attr('src', matches.slice(1, 5).join('')); |
||
Line 21: | Line 19: | ||
verticalAlign: img.css('vertical-align') |
verticalAlign: img.css('vertical-align') |
||
}); |
}); |
||
div.width(width).height(height); |
div.width(img.width()).height(img.height()); |
||
let |
let div2 = $('<div>').appendTo(div); |
||
let scaleX = width / img2.width(); |
let scaleX = img.width() / img2.width(); |
||
let scaleY = height / img2.height(); |
let scaleY = img.height() / img2.height(); |
||
div2.css({ |
|||
transformOrigin: 'top left', |
transformOrigin: 'top left', |
||
scale: `${scaleX} ${scaleY}` |
scale: `${scaleX} ${scaleY}` |
||
}); |
}); |
||
let obj = $('<object type="image/svg+xml">').appendTo(div2); |
|||
obj.attr('data', matches.slice(1, 5).join('')); |
|||
img.replaceWith(div); |
img.replaceWith(div); |
||
img2.remove(); |
img2.remove(); |
Revision as of 03:46, 26 May 2024
(() => {
const srcRegex =
/^((?:https?:)?\/\/upload\.wikimedia\.org\/.*)\/thumb(\/.*\/)(\d{14}%21|)(.*)\/(\d+)px-\4(.*)$/;
$('img').each((index, elem) => {
let img = $(elem);
let matches = srcRegex.exec(img.attr('src'));
if (!matches) {
return;
}
if (/\.svg$/i.test(matches[4]) && matches[6] === '.png') {
let img2 = $('<img>').insertAfter(img);
img2.attr('src', matches.slice(1, 5).join(''));
img2.on('load', () => {
let div = $('<div>');
div.attr('class', img.attr('class'));
div.css({
display: 'inline-block',
overflow: 'clip',
verticalAlign: img.css('vertical-align')
});
div.width(img.width()).height(img.height());
let div2 = $('<div>').appendTo(div);
let scaleX = img.width() / img2.width();
let scaleY = img.height() / img2.height();
div2.css({
transformOrigin: 'top left',
scale: `${scaleX} ${scaleY}`
});
let obj = $('<object type="image/svg+xml">').appendTo(div2);
obj.attr('data', matches.slice(1, 5).join(''));
img.replaceWith(div);
img2.remove();
});
} else if (matches[6] === '' && devicePixelRatio !== 1) {
let width = Math.round(img.width() * devicePixelRatio);
img.attr('src', `${matches[1]}/thumb${matches.slice(2, 5).join('')}/${width}px-${matches[4]}`);
img.on('error', () => {
img.attr('src', matches.slice(1, 5).join(''));
img.off('error');
});
}
img.removeAttr('srcset');
});
})();