MediaWiki:Gadget-Koordinater.js

Merk: Etter publisering vil det kanskje være nødvendig å slette mellomlageret i nettleseren din for å se endringene.

  • Firefox / Safari: Hold Shift mens du klikker på Oppdater, eller trykk enten Ctrl+F5 eller Ctrl+R (⌘+R på Mac)
  • Google Chrome: Trykk Ctrl+Shift+R (⌘+Shift+R på Mac)
  • Internet Explorer / Edge: Hold Ctrl mens du trykker på Oppdater eller trykk Ctrl+F5
  • Opera: Ttrykk Ctrl+F5.
// Kopiert fra [[:commons:User:Dschwen/coordinates.js]] og fornorsket
// Script to embed Coordinate template generation in MediaWiki's edit page
// inspired by [[:en:User:Pilaf/livepreview.js]]

(function(){

    // Defaults
    var coord_templatename = 'koord',
        accuracy = 5,
        defaulttype = 'landmark';

    function parseQuerystring(url, delimiter) {
        var result = {}, 
        queryString = url.substring(url.indexOf(delimiter) + 1),
        re = /([^&=]+)=([^&]*)/g, m;
    
        while (m = re.exec(queryString)) {
            result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
        }
        return result;
    }
    
    function insertCoords() {
        var coordbox = $('#CoordinateBox').val(),
            coordstr = '',
            latlon = '',
            source = '(ukjent)',
            qs = '';
        
        mw.log("Check");
        try {
            // Google Maps
            if(coordbox.match(/^(http|https):\/\/maps\.google\./) || coordbox.match(/(http|https):\/\/(www\.)?google\.([a-zA-Z]+)\/maps/) ) {
                source = 'Google Maps';
                m = coordbox.match(/@([0-9-.]+),([0-9-.]+),/);
                latlon = m.slice(1);
    
            // Bing Maps
            } else if ( coordbox.match(/^(http|https):\/\/(www\.)?bing\.com\/maps/) ) {
                source = 'Bing Maps';
                qs = parseQuerystring(coordbox, '?');
                mw.log(qs.cp);
                latlon = qs.cp.split('~');
        
            // Wikimapia
            } else if ( coordbox.match(/^(http|https):\/\/(www\.)?wikimapia\.org/) ) {
                source = 'Wikimapia';
                qs = parseQuerystring(coordbox, '#');
                latlon = [qs.lat, qs.lon];
    
            // OpenStreetMap
            } else if ( coordbox.match(/^(http|https):\/\/(www\.)?openstreetmap\.org/) ) {
                source = 'OpenStreetMap';
                qs = parseQuerystring(coordbox, '?');
                latlon = [qs.lat, qs.lon];
            } else {
                alert("Beklager, klarte ikke å tolke URLen. Rapporter gjerne problemet på Torget hvis du tror URLen er gyldig.");             
            }
            
        } catch (err) {
            alert("Beklager, klarte ikke å tolke URLen fra " + source + ". Rapporter gjerne problemet på Torget hvis du tror URLen er gyldig."); 
            return;
        }
    
        var mark_ns = (latlon[0] < 0) ? 'S' : 'N',
            mark_ew = (latlon[1] < 0) ? 'W' : 'E',
            lat = Math.abs(latlon[0]),
            lon = Math.abs(latlon[1]),
            lat_m = ( lat - Math.floor(lat) ) * 60.0,
            lon_m = ( lon - Math.floor(lon) ) * 60.0,
            lat_s = ( lat_m - Math.floor(lat_m) ) * 60.0,
            lon_s = ( lon_m - Math.floor(lon_m) ) * 60.0;
    
        coordstr =
            '{{'+coord_templatename
            + '|' + Math.floor(lat)
            + '|' + Math.floor(lat_m)
            + '|' + lat_s.toPrecision(accuracy)
            + '|' + mark_ns
            + '|' + Math.floor(lon)
            + '|' + Math.floor(lon_m)
            + '|' + lon_s.toPrecision(accuracy)
            + '|' + mark_ew
            + '|type:' + defaulttype
            + '|vis=tittel}}\n';
        
        var editbox = $('#wpTextbox1'),
            first_section = (editbox.val()).indexOf('\n=='),
            first_template = (editbox.val()).indexOf('\n{{');
    
        if (first_template >-1 && (first_section>-1 ? first_section >=first_template : true)) {
            var editbox_content_1 = (editbox.val()).substr(0,first_template);
            var editbox_content_2 = (editbox.val()).substr(first_template);
            editbox.val(editbox_content_1 + coordstr + editbox_content_2);
        } else {
            var editbox_content = editbox.val();
            editbox.val(coordstr + editbox_content);
        }

        var sumbox = $('#wpSummary');
        
        var sumstr = sumbox.val().replace(/\s*Legger til koordinater.*$/, '');
        if (sumstr.length && !/[.!?]$/.test(sumstr)) sumstr += '.';
        if (sumstr.length) sumstr += ' ';
        sumstr += 'Legger til koordinater fra ' + source + ', se [[Hjelp:Koordinater]].';
        sumbox.val(sumstr);
    }

    $(function(){
        
        // Insert the coordinate Form into the edit box.
        $('#editpage-copywarn').each(function(i, copywarn){
            var CoordinatesHTML =  '<div style="border: 1px solid gray; padding: 3px; margin-top: 2px; margin-bottom:2px;">'
            CoordinatesHTML += '<input type="button" id="InterpretCoordinates" value="Sett inn '+coord_templatename+'" /> ';
            CoordinatesHTML += '<input type="text" size="80" id="CoordinateBox" />';
            CoordinatesHTML += '&nbsp;&nbsp;&nbsp;(<a href="//no.wikipedia.org/w/index.php?title=Hjelp:Koordinater">Brukerveiledning</a>)</div>';
            $(copywarn).prepend(CoordinatesHTML);
        });
    
        // Coordinate interpretation
        $('#InterpretCoordinates').click(insertCoords);
        
    });
    
})();