Jump to content

MediaWiki:Common.js: Difference between revisions

From Costa Sano MediaWiki
No edit summary
No edit summary
Line 36: Line 36:
     }
     }
});
});


/************************************************************
/************************************************************
  * 2. AUTOMATIC GEOCODING (your existing code, unchanged)
  * 2. AUTOMATIC GEOCODING (updated for current Form:Place)
  ************************************************************/
  ************************************************************/
$(function() {
$(function () {
     const addr = $('input[name="Place[address]"]');
 
     const lat  = $('input[name="Place[latitude]"]');
     const addr = $('input[name="Address"]');
     const lon  = $('input[name="Place[longitude]"]');
     const lat  = $('input[name="Latitude"]');
     const lon  = $('input[name="Longitude"]');


     console.log("Address fields found:", addr.length);
     console.log("Address fields found:", addr.length);


     if (addr.length === 0) {
     if (!addr.length || !lat.length || !lon.length) {
         console.log("Address field not found");
         console.log("Geocoding fields not found");
         return;
         return;
     }
     }


     addr.on('change', function() {
     addr.on('change', function () {
        console.log("Address changed:", addr.val());


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


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


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


/************************************************************
/************************************************************
  * 3. OSM LINK BELOW LONGITUDE FIELD (your existing code)
  * 3. OSM LINK BELOW LONGITUDE FIELD (updated)
  ************************************************************/
  ************************************************************/
$(function() {
$(function () {
     const lat = $('input[name="Place[latitude]"]');
 
     const lon = $('input[name="Place[longitude]"]');
     const lat = $('input[name="Latitude"]');
     const lon = $('input[name="Longitude"]');
 
    if (!lat.length || !lon.length) return;


    // Add a small container under the longitude field
     const linkBox = $('<div id="pf-osm-link" style="margin-top:4px;"></div>');
     const linkBox = $('<div id="pf-osm-link" style="margin-top:4px;"></div>');
     lon.closest('td').append(linkBox);
     lon.closest('td').append(linkBox);


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


    // Update whenever coordinates change
     lat.on('change keyup', updateOSMLink);
     lat.on('change keyup', updateOSMLink);
     lon.on('change keyup', updateOSMLink);
     lon.on('change keyup', updateOSMLink);


    // Initial update (for editing existing pages)
     updateOSMLink();
     updateOSMLink();
});
});

Revision as of 15:32, 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. AUTOMATIC GEOCODING (updated for current Form:Place)
 ************************************************************/
$(function () {

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

    console.log("Address fields found:", addr.length);

    if (!addr.length || !lat.length || !lon.length) {
        console.log("Geocoding fields not found");
        return;
    }

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

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

        console.log("Geocoding address:", q);

        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');
            }
        });
    });
});


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

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

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

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

    function updateOSMLink() {

        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', updateOSMLink);
    lon.on('change keyup', updateOSMLink);

    updateOSMLink();
});