MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
Line 33: Line 33:




// -------------------------
mw.loader.load('https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@main/dist/en/v7.0.0/legacy/ol.js');
// Load Leaflet
mw.loader.load('/maps/elemara/elemara-map.js');
// -------------------------
mw.loader.load('https://unpkg.com/leaflet@1.9.4/dist/leaflet.js');
mw.loader.load('/maps/orethil/leaflet-map.js');
 
 
// -------------------------
// Leaflet popup cleanup / wiki-link conversion
// -------------------------
mw.loader.using(['jquery'], function() {
    function processPopup($popup) {
        // 1. Update any <strong> title tags that are not already links.
        $popup.find('strong').each(function() {
            var titleText = $(this).text().trim();
            if (titleText.length > 0 && $(this).find('a').length === 0) {
                var link = $('<a>')
                    .attr('href', '/' + encodeURIComponent(titleText.replace(/ /g, '_')))
                    .attr('target', '_blank')
                    .text(titleText);
                $(this).html(link);
            }
        });
 
        // 2. Get the popup's HTML content.
        var htmlContent = $popup.html();
 
        // 3. Replace wiki-style link markup [PageName] with clickable links.
        var newContent = htmlContent.replace(/\[([^\]]+)\]/g, function(match, p1) {
            if (p1.trim().toLowerCase().startsWith('img:')) {
                return match;
            }
            var pageName = p1.replace(/ /g, '_');
            return '<a href="/' + encodeURIComponent(pageName) + '" target="_blank">' + p1 + '</a>';
        });
 
        // 4. Replace custom image markup [img:...] with image element.
        newContent = newContent.replace(/\[img:([^\]]+)\]/gi, function(match, p1) {
            var imageFile = p1.trim();
            var src;
 
            if (/^https?:\/\//.test(imageFile)) {
                src = imageFile;
            } else {
                src = '/images/' + encodeURIComponent(imageFile);
            }
 
            return '<img src="' + src + '" alt="' + imageFile + '" style="max-width:50%; display:block; margin-top:5px; margin-bottom:5px;">';
        });
 
        // 5. Update the popup content.
        $popup.html(newContent);
    }
 
    // Use a MutationObserver to detect when new popup content is added.
    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.addedNodes) {
                $(mutation.addedNodes).each(function() {
                    var $node = $(this);
 
                    if ($node.hasClass('leaflet-popup-content')) {
                        processPopup($node);
                    } else {
                        $node.find('.leaflet-popup-content').each(function() {
                            processPopup($(this));
                        });
                    }
                });
            }
        });
    });
 
    observer.observe(document.body, { childList: true, subtree: true });
});