MediaWiki:Gadget-WikidataCoords.js

Från Wikipedia

OBS: Efter du har publicerat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.

  • Firefox / Safari: Håll ned Skift och klicka på Uppdatera sidan eller tryck Ctrl-F5 eller Ctrl-R (⌘-R på Mac)
  • Google Chrome: Tryck Ctrl-Skift-R (⌘-Skift-R på Mac)
  • Internet Explorer / Edge: Håll ned Ctrl och klicka på Uppdatera eller tryck Ctrl-F5
  • Opera: Tryck Ctrl-F5.
//<nowiki>
$( function() {
	'use strict';
	var v = mw.config.get();
	var api = new mw.Api();
	var iwapi = new mw.ForeignApi( 'https://www.wikidata.org/w/api.php' );
	function decToDms( dec ) {
		var absdec = Math.abs(dec);
		var d = Math.floor( absdec );
		var m = Math.floor( 60 * ( absdec - d ) );
		var s = Math.round( 3600 * ( absdec - d ) - 60 * m );
		if ( s === 60 ) {
			m = m + 1;
			s = 0;
		}
		if ( m === 60 ) {
			d = d + 1;
			m = 0;
		}
		var d_with_sign = d;
		if (dec<0) {
			d_with_sign = -1*d;
		}
		return [ d_with_sign, m, s ];
	}
	if ( v.wgWikibaseItemId ) {
		if ( !$( '#mw-indicator-coordinates' ).length ) {
			iwapi.get( {
				action: 'wbgetentities',
				ids: v.wgWikibaseItemId,
				props: 'claims',
				formatversion: 2
			} ).done( function( wikidatares ) {
				var entitiesobj = wikidatares.entities;
				var entityobj;
				var claimsobj;
				var geoarr;
				var geoobj;
				var snakobj;
				var datavalueobj;
				var valueobj;
				if ( entitiesobj ) {
					entityobj = entitiesobj[ v.wgWikibaseItemId ];
					if ( entityobj ) {
						claimsobj = entityobj.claims;
						if ( claimsobj ) {
							geoarr = claimsobj.P625;
							if ( Array.isArray( geoarr ) ) {
								geoobj = geoarr[ 0 ];
								if ( geoobj ) {
									snakobj = geoobj.mainsnak;
									if ( snakobj ) {
										datavalueobj = snakobj.datavalue;
										if ( datavalueobj ) {
											valueobj = datavalueobj.value;
											if ( valueobj ) {
												if ( valueobj.globe ) {
													$.getJSON( v.wgScript + '?title=MediaWiki:Gadget-WikidataCoords.json&action=raw&ctype=text/json', function( globenames ) {
														var latCard = 'N';
														var lonCard = 'E';
														var tpl = '{{Coord';
														var lat;
														var lon;
														var latArr;
														var lonArr;
														var latD;
														var lonD;
														var globe;
														if ( globenames ) {
															globe = globenames[ valueobj.globe.match( /Q[0-9]+$/ ) ];
															if ( valueobj.hasOwnProperty( 'latitude' ) && valueobj.hasOwnProperty( 'longitude' ) ) {
																lat = valueobj.latitude;
																lon = valueobj.longitude;
																latArr = decToDms( lat );
																lonArr = decToDms( lon );
																latD = latArr[ 0 ];
																lonD = lonArr[ 0 ];
																if ( latD < 0 ) {
																	latCard = 'S';
																}
																if ( lonD < 0 ) {
																	lonCard = 'W';
																}
																latD = Math.abs( latD );
																lonD = Math.abs( lonD );
																tpl += '|' + latD + '|' + latArr[ 1 ] + '|' + latArr[ 2 ] + '|' + latCard;
																tpl += '|' + lonD + '|' + lonArr[ 1 ] + '|' + lonArr[ 2 ] + '|' + lonCard;
																tpl += '|display=title';
																if ( globe ) {
																	tpl += '|globe:' + globe;
																}
																tpl += '}}';
																api.get( {
																	action: 'parse',
																	title: v.wgPageName,
																	text: tpl,
																	prop: 'indicators',
																	formatversion: 2
																} ).done( function( parseres ) {
																	var parseobj = parseres.parse;
																	var indicatorsobj;
																	var coords;
																	var coordsElem;
																	var indicatorElem;
																	if ( parseobj ) {
																		indicatorsobj = parseobj.indicators;
																		if ( indicatorsobj ) {
																			coords = indicatorsobj.coordinates;
																			if ( coords ) {
																				coordsElem = $( coords );
																				indicatorElem = coordsElem.wrap( '<div id="mw-indicator-coordinates" class="mw-indicator gadget-wikidatacoords"></div>' ).parent();
																				$( '.mw-indicators' ).prepend( indicatorElem );
																				mw.hook( 'coordinatesadded' ).fire();
																			}
																		}
																	}
																} );
															}
														}
													} );
												}
											}
										}
									}
								}
							}
						}
					}
				}
			} );
		}
	}
} );
//</nowiki>