MediaWiki:Gadget-yqlgeo.js
Megjelenés
Megjegyzés: közzététel után frissítened kell a böngésződ gyorsítótárát, hogy lásd a változásokat.
- Firefox / Safari: tartsd lenyomva a Shift gombot és kattints a Frissítés gombra a címsorban, vagy használd a Ctrl–F5 vagy Ctrl–R (Macen ⌘–R) billentyűkombinációt
- Google Chrome: használd a Ctrl–Shift–R (Macen ⌘–Shift–R) billentyűkombinációt
- Edge: tartsd nyomva a Ctrl-t, és kattints a Frissítés gombra, vagy nyomj Ctrl–F5-öt
/*
YQL Geo library by Christian Heilmann
Homepage: http://isithackday.com/hacks/geo/yql-geo-library/
Copyright (c)2010 Christian Heilmann
Code licensed under the BSD License:
http://wait-till-i.com/license.txt
*/
var yqlgeo = function(){
var callback;
function get(){
var args = arguments;
for(var i=0;i<args.length;i++){
if(typeof args[i] === 'function'){
callback = args[i];
}
}
if(args[0] === 'visitor'){getVisitor();}
if(typeof args[0] === 'string' && args[0] != 'visitor'){
if(args[0]){
if(/^http:\/\/.*/.test(args[0])){
getFromURL(args[0]);
} else if(/^[\d+\.?]+$/.test(args[0])){
getFromIP(args[0]);
} else {
getFromText(args[0]);
}
}
}
var lat = args[0];
var lon = args[1];
if(typeof lat.join !== undefined && args[0][1]){
lat = args[0][0];
lon = args[0][1];
};
if(isFinite(lat) && isFinite(lon)){
if(lat > -90 && lat < 90 &&
lon > -180 && lon < 180){
getFromLatLon(lat,lon);
}
}
}
function getVisitor(){
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(
function(position){
getFromLatLon(position.coords.latitude,
position.coords.longitude);
},
function(error){
retrieveip();
}
);
} else{
retrieveip();
}
};
function getFromIP(ip){
var yql = 'select * from geo.places where woeid in ('+
'select place.woeid from flickr.places where (lat,lon) in('+
'select Latitude,Longitude from ip.location'+
' where ip="'+ip+'"))';
load(yql,'yqlgeo.retrieved');
};
function retrieveip(){
jsonp('http://jsonip.appspot.com/?callback=yqlgeo.ipin');
};
function ipin(o){
getFromIP(o.ip);
};
function getFromLatLon(lat,lon){
var yql = 'select * from geo.places where woeid in ('+
'select place.woeid from flickr.places where lat='+
lat + ' and lon=' + lon + ')';
load(yql,'yqlgeo.retrieved');
};
function getFromURL(url){
var yql = 'select * from geo.places where woeid in ('+
'select match.place.woeId from geo.placemaker where '+
'documentURL="' + url + '" and '+
'documentType="text/html" and appid="")';
load(yql,'yqlgeo.retrieved');
}
function getFromText(text){
var yql = 'select * from geo.places where woeid in ('+
'select match.place.woeId from geo.placemaker where'+
' documentContent = "' + text + '" and '+
'documentType="text/plain" and appid = "")';
load(yql,'yqlgeo.retrieved');
};
function jsonp(src){
if(document.getElementById('yqlgeodata')){
var old = document.getElementById('yqlgeodata');
old.parentNode.removeChild(old);
}
var head = document.getElementsByTagName('head')[0];
var s = document.createElement('script');
s.setAttribute('id','yqlgeodata');
s.setAttribute('src',src);
head.appendChild(s);
};
function load(yql,cb){
if(document.getElementById('yqlgeodata')){
var old = document.getElementById('yqlgeodata');
old.parentNode.removeChild(old);
}
var src = 'http://query.yahooapis.com/v1/public/yql?q='+
encodeURIComponent(yql) + '&format=json&callback=' + cb + '&'+
'env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys';
var head = document.getElementsByTagName('head')[0];
var s = document.createElement('script');
s.setAttribute('id','yqlgeodata');
s.setAttribute('src',src);
head.appendChild(s);
};
function retrieved(o){
if(o.query.results){
callback(o.query.results);
} else {
callback({error:o.query});
}
};
return {
get:get,
retrieved:retrieved,
ipin:ipin
};
}();