Jump to content

MediaWiki:Common.js: Difference between revisions

From Costa Sano MediaWiki
No edit summary
No edit summary
Line 38: Line 38:


/************************************************************
/************************************************************
  * 2. AUTOMATIC GEOCODING (Page Forms–safe)
  * 2. GENERIC PAGE FORMS GEOCODING WITH DEBOUNCE
  ************************************************************/
  ************************************************************/
$(function () {


    const addr = $('input[name$="[Address]"]');
(function () {
    const lat  = $('input[name$="[Latitude]"]');
    const lon  = $('input[name$="[Longitude]"]');


     console.log("Geocoding fields found:",
     function setupGeocoding(addressField, latField, lonField) {
        addr.length, lat.length, lon.length);


    if (!addr.length || !lat.length || !lon.length) {
        const addr = $('input[name$="[' + addressField + ']"]');
         console.log("Required fields not found for geocoding");
        const lat  = $('input[name$="[' + latField + ']"]');
        return;
        const lon  = $('input[name$="[' + lonField + ']"]');
    }
 
        if (!addr.length || !lat.length || !lon.length) {
            return;
         }
 
        let debounceTimer = null;
 
        addr.on('input', function () {
 
            clearTimeout(debounceTimer);


    addr.on('change', function () {
            debounceTimer = setTimeout(function () {


        const q = addr.val().trim();
                const q = addr.val().trim();
        if (!q) return;
                if (!q) return;


        console.log("Geocoding address:", q);
                const url =
                    'https://nominatim.openstreetmap.org/search' +
                    '?format=json&limit=1&q=' + encodeURIComponent(q);


        const url =
                $.getJSON(url, function (data) {
            'https://nominatim.openstreetmap.org/search' +
                    if (data && data.length) {
            '?format=json&limit=1&q=' + encodeURIComponent(q);
                        lat.val(data[0].lat).trigger('change');
                        lon.val(data[0].lon).trigger('change');
                    }
                });


        $.getJSON(url, function (data) {
            }, 500); // debounce delay (ms)
            if (data && data.length) {
                lat.val(data[0].lat).trigger('change');
                lon.val(data[0].lon).trigger('change');
            }
         });
         });
     });
     }
});
 
    // === ENABLE FOR PLACE ===
    setupGeocoding('Address', 'Latitude', 'Longitude');
 
})();




/************************************************************
/************************************************************
  * 3. OSM LINK BELOW LONGITUDE FIELD
  * 3. GENERIC OSM LINK HELPER
  ************************************************************/
  ************************************************************/
$(function () {


    const lat = $('input[name$="[Latitude]"]');
(function () {
    const lon = $('input[name$="[Longitude]"]');


     if (!lat.length || !lon.length) return;
     function setupOSMLink(latField, lonField) {


    const linkBox =
        const lat = $('input[name$="[' + latField + ']"]');
        $('<div id="pf-osm-link" style="margin-top:4px;"></div>');
        const lon = $('input[name$="[' + lonField + ']"]');
    lon.closest('td').append(linkBox);


    function updateOSMLink() {
        if (!lat.length || !lon.length) return;


         const la = lat.val();
         const linkBox =
         const lo = lon.val();
            $('<div class="pf-osm-link" style="margin-top:4px;"></div>');
         lon.closest('td').append(linkBox);


         if (la && lo) {
         function update() {
            const url =
 
                'https://www.openstreetmap.org/?mlat=' + la +
            const la = lat.val();
                '&mlon=' + lo;
            const lo = lon.val();
            linkBox.html(
 
                '<a href="' + url +
            if (la && lo) {
                '" target="_blank">View on OpenStreetMap</a>'
                const url =
            );
                    'https://www.openstreetmap.org/?mlat=' + la +
        } else {
                    '&mlon=' + lo;
            linkBox.empty();
                linkBox.html(
                    '<a href="' + url +
                    '" target="_blank">View on OpenStreetMap</a>'
                );
            } else {
                linkBox.empty();
            }
         }
         }
        lat.on('change keyup', update);
        lon.on('change keyup', update);
        update();
     }
     }


     lat.on('change keyup', updateOSMLink);
     // === ENABLE FOR PLACE ===
    lon.on('change keyup', updateOSMLink);
    setupOSMLink('Latitude', 'Longitude');


    updateOSMLink();
})();
});

Revision as of 15:45, 16 February 2026

/************************************************************
 * 1. AUTO‑PURGE FOR ALL DASHBOARD:* PAGES
 ************************************************************/
$(function () {

    // Prevent purge logic from running on edit, history, diff, preview, etc.
    if (mw.config.get('wgAction') !== 'view') return;

    const title = mw.config.get('wgPageName');

    if (title && title.startsWith('Dashboard:')) {

        // Only purge once
        if (!location.search.includes('mw_purged=1')) {

            new mw.Api().get({
                action: 'query',
                meta: 'tokens',
                type: 'csrf'
            }).done(function (data) {

                const token = data.query.tokens.csrftoken;

                new mw.Api().post({
                    action: 'purge',
                    titles: title,
                    token: token
                }).always(function () {

                    // Reload the dashboard normally, marked as purged
                    const url = mw.util.getUrl(title, { mw_purged: 1 });
                    location.replace(url);
                });
            });
        }
    }
});

/************************************************************
 * 2. GENERIC PAGE FORMS GEOCODING WITH DEBOUNCE
 ************************************************************/

(function () {

    function setupGeocoding(addressField, latField, lonField) {

        const addr = $('input[name$="[' + addressField + ']"]');
        const lat  = $('input[name$="[' + latField + ']"]');
        const lon  = $('input[name$="[' + lonField + ']"]');

        if (!addr.length || !lat.length || !lon.length) {
            return;
        }

        let debounceTimer = null;

        addr.on('input', function () {

            clearTimeout(debounceTimer);

            debounceTimer = setTimeout(function () {

                const q = addr.val().trim();
                if (!q) return;

                const url =
                    'https://nominatim.openstreetmap.org/search' +
                    '?format=json&limit=1&q=' + encodeURIComponent(q);

                $.getJSON(url, function (data) {
                    if (data && data.length) {
                        lat.val(data[0].lat).trigger('change');
                        lon.val(data[0].lon).trigger('change');
                    }
                });

            }, 500); // debounce delay (ms)
        });
    }

    // === ENABLE FOR PLACE ===
    setupGeocoding('Address', 'Latitude', 'Longitude');

})();


/************************************************************
 * 3. GENERIC OSM LINK HELPER
 ************************************************************/

(function () {

    function setupOSMLink(latField, lonField) {

        const lat = $('input[name$="[' + latField + ']"]');
        const lon = $('input[name$="[' + lonField + ']"]');

        if (!lat.length || !lon.length) return;

        const linkBox =
            $('<div class="pf-osm-link" style="margin-top:4px;"></div>');
        lon.closest('td').append(linkBox);

        function update() {

            const la = lat.val();
            const lo = lon.val();

            if (la && lo) {
                const url =
                    'https://www.openstreetmap.org/?mlat=' + la +
                    '&mlon=' + lo;
                linkBox.html(
                    '<a href="' + url +
                    '" target="_blank">View on OpenStreetMap</a>'
                );
            } else {
                linkBox.empty();
            }
        }

        lat.on('change keyup', update);
        lon.on('change keyup', update);
        update();
    }

    // === ENABLE FOR PLACE ===
    setupOSMLink('Latitude', 'Longitude');

})();