Jump to content

User:Kxx/fix images.js: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
No edit summary
Line 2: Line 2:
const srcRegex =
const srcRegex =
/^((?:https?:)?\/\/upload\.wikimedia\.org\/.*)\/thumb(\/.*\/)(\d{14}%21|)(.*\.[Ss][Vv][Gg])\/\d+px-\4\.png$/;
/^((?:https?:)?\/\/upload\.wikimedia\.org\/.*)\/thumb(\/.*\/)(\d{14}%21|)(.*\.[Ss][Vv][Gg])\/\d+px-\4\.png$/;
let observer = new ResizeObserver((entries) => {
$(entries).each((index, entry) => {
let obj = $(entry.target);
let div = obj.parent();
let scaleX = div.width() / obj.width();
let scaleY = div.height() / obj.height();
obj.css({scale: `${scaleX} ${scaleY}`});
})
});
$('img').each((index, elem) => {
$('img').each((index, elem) => {
let img = $(elem);
let img = $(elem);
Line 26: Line 17:
div.width(img.width()).height(img.height());
div.width(img.width()).height(img.height());
let obj = $('<object type="image/svg+xml">').appendTo(div);
let obj = $('<object type="image/svg+xml">').appendTo(div);
let width = parseFloat(img.attr('data-file-width'));
let height = parseFloat(img.attr('data-file-height'));
let scaleX = img.width() / width;
let scaleY = img.height() / height;
obj.css({
obj.css({
display: 'block',
display: 'block',
transformOrigin: 'top left'
transformOrigin: 'top left',
scale: `${scaleX} ${scaleY}`
})
})
observer.observe(obj[0]);
obj.width(width).height(height);
obj.attr('src', src);
obj.attr('src', src);
if (typeof data !== 'string') {
if (typeof data !== 'string') {

Revision as of 04:04, 9 June 2024

(() => {
    const srcRegex =
        /^((?:https?:)?\/\/upload\.wikimedia\.org\/.*)\/thumb(\/.*\/)(\d{14}%21|)(.*\.[Ss][Vv][Gg])\/\d+px-\4\.png$/;
    $('img').each((index, elem) => {
        let img = $(elem);
        let matches = srcRegex.exec(img.attr('src'));
        if (matches) {
            let src = matches.slice(1, 5).join('');
            $.get(src).done((data) => {
                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 obj = $('<object type="image/svg+xml">').appendTo(div);
                let width = parseFloat(img.attr('data-file-width'));
                let height = parseFloat(img.attr('data-file-height'));
                let scaleX = img.width() / width;
                let scaleY = img.height() / height;
                obj.css({
                    display: 'block',
                    transformOrigin: 'top left',
                    scale: `${scaleX} ${scaleY}`
                })
                obj.width(width).height(height);
                obj.attr('src', src);
                if (typeof data !== 'string') {
                    data = new XMLSerializer().serializeToString(data);
                }
                obj.attr('data', `data:image/svg+xml,${encodeURIComponent(data)}`)
                img.replaceWith(div);
            });
        }
    });
})();