// ==UserScript==
// @name Map Linker GoogleMaps
// @description Link Google with other maps
// @namespace 1d196b78-800f-45a5-8c34-bfcf2f652eb4
// @version 0.2
// @match https://maps.google.se/maps*
// @match https://www.google.se/maps/*
// @match https://www.google.com/maps/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js
// @require https://greasyfork.org/scripts/17293-alert/code/$alert.js?version=109035
// @require https://greasyfork.org/scripts/9160-my-function-library/code/My%20Function%20library.js?version=168434
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @grant GM_xmlhttpRequest
// @grant GM_getResourceURL
// @resource Terraserver https://yt3.ggpht.com/-jiYzuprSqZQ/AAAAAAAAAAI/AAAAAAAAAAA/X0J7cmuseqU/s100-c-k-no-mo-rj-c0xffffff/photo.jpg
// @resource Wikimapia http://monkeyscript.4all.nu/shareResorces/images/wikimapia.org_favicon.ico
// @resource Panoramio http://monkeyscript.4all.nu/shareResorces/images/panoramio.com.webp
// @resource Hitta http://monkeyscript.4all.nu/shareResorces/images/hitta.se_favicon.ico
// @resource Eniro http://monkeyscript.4all.nu/shareResorces/images/eniro.com_favicon.ico
// @resource zoomEarth http://monkeyscript.4all.nu/shareResorces/images/zoom.earth_globe-search-find-64.png
// @resource Wiwosm http://monkeyscript.4all.nu/shareResorces/images/Wiwosm_Tool_Labs_logo_thumb.png
// @resource Hitchwiki http://hitchwiki.org/maps/static/gfx/mobile/app_icons-screens/icon_57x57.png
// @resource Bing https://www.bing.com/sa/simg/bing_p_rr_teal_min.ico
// @resource Flickr https://s.yimg.com/pw/favicon.ico
// @resource Wikimap http://wiki-map.com/favicon.ico
// @resource Geonames http://www.geonames.org/img/globe.gif
// @resource yandex https://yandex.com/maps/favicon.png
// @resource Openstreetmap https://upload.wikimedia.org/wikipedia/commons/b/b0/Openstreetmap_logo.svg
// @created 2015-03-06
// @released 2015-00-00
// @updated 2015-00-00
// @history @version 0.25 - Alpha version: @released - 2015-03-12
// @history @version 0.45 - Beta version: @released - 2015-03-17
// @history @version 0.5 - RC version: @released - 2016-02-21
// @compatible Greasemonkey, Tampermonkey
// @license GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html)
// @copyright 2015+, Magnus Fohlström
// ==/UserScript==
/*global $, jQuery*/
/*jshint -W014, -W030, -W082*/
// -W014, laxbreak, Bad line breaking before '+'
// -W030, Expected assignment or function call instead saw an expression
(function() {
var returnThis,
css = {
button : function(){
return ''
+ '#mapsHolder {'
+ 'position:absolute;'
+ 'right:150px;'
+ 'padding-top: 12px;'
+ 'height: 18px;'
+ 'background-color: rgba(83, 94, 72, 0.72);'
+ '}'
+ '#mapsHolder button {'
+ 'margin:-21px 6px;'
+ 'width:24px;'
+ 'height:24px;'
+ '}'
+ '.buttonPanoramio {'
+ 'position: relative;'
+ 'top: 13px;'
+ 'left: 11px;'
+ 'width: 52px !important;'
+ 'height: 40px !important;'
+ '}'
+ '#mapsHolder button img {'
+ 'width:100%;'
+ 'height:100%;'
+ '}';
},
style : function( id, var1, var2 ){
var $id = $( 'head #' + id ), cssID = css[ id ]( var1, var2 ).formatString();
$id.length ? $id.html( cssID ) : $( $( '<style/>',{ id: id, class:'mySuperStyles', html: cssID } ) ).appendTo('head');
}
},
html = {
coordinates : null,
positions : {
Panoramio : function(){
var returnThis;
returnThis = 'http://www.panoramio.com/map/#lt=' + html.coordinates[0] + '&ln=' + html.coordinates[1] + '&z=1&k=2&a=1&tab=1&pl=all';
return returnThis;
},
Wikimapia : function(){
returnThis = 'http://wikimapia.org/#lang=en&lat=' + html.coordinates[0] + '&lon=' + html.coordinates[1] + '&z=18&m=b';
return returnThis;
},
Hitta : function(){
returnThis = 'https://www.hitta.se/kartan!~' + html.coordinates[0] + ',' + html.coordinates[1] + ',17z/tileLayer!l=1/';
return returnThis;
},
Eniro : function(){
returnThis = 'http://kartor.eniro.se/m/U6JNo?zoom=19¢er=' + html.coordinates[0] + ',' + html.coordinates[1] + '&layer=aerial';
return returnThis;
},
zoomEarth : function(){
returnThis = 'https://zoom.earth/#' + html.coordinates[0] + ',' + html.coordinates[1] + ',18z,sat';
return returnThis;
},
Wiwosm : function(){
returnThis = 'https://tools.wmflabs.org/wiwosm/osm-on-ol/commons-on-osm.php?zoom=18&lat=' + html.coordinates[0] + '&lon=' + html.coordinates[1];
return returnThis;
},
Bing : function(){
returnThis = 'https://www.bing.com/mapspreview?FORM=EXIPRV&signedup=1&cp=' + html.coordinates[0] + '~' + html.coordinates[1] + '&style=a&lvl=18';
return returnThis;
},
Flickr : function(){
returnThis = 'https://www.flickr.com/map?&fLat=' + html.coordinates[0] + '&fLon=' + html.coordinates[1] + '&zl=17';
return returnThis;
},
Hitchwiki : function(){
returnThis = 'http://hitchwiki.org/maps/?zoom=18&lat=' + html.coordinates[0] + '&lon=' + html.coordinates[1];
return returnThis;
},
Wikimap : function(){
returnThis = ('http://wiki-map.com/map/?locale=sv&lat=' + html.coordinates[0] + '&lng=' + html.coordinates[1]);
return returnThis;
},
Geonames : function(){
returnThis = 'http://www.geonames.org/maps/google_' + html.coordinates[0] + '_' + html.coordinates[1] + '.html';
return returnThis;
},
yandex : function(){
returnThis = 'https://yandex.com/maps/?ll=' + html.coordinates[1] + '%2C' + html.coordinates[0] + '&z=17&l=sat';
return returnThis;
},
Openstreetmap : function(){
returnThis = 'https://www.openstreetmap.org/?mlat=' + html.coordinates[0] + '&mlon=' + html.coordinates[1] + '&zoom=20#map=15/' + html.coordinates[0] + '/' + html.coordinates[1];
return returnThis;
},
Terraserver : function(){
returnThis = 'https://www.terraserver.com/view?utf8=%E2%9C%93&searchLat=' + html.coordinates[0] + '&searchLng=' + html.coordinates[1];
return returnThis;
}
},
dataArray : function(){
return [
{ on:0, order:10, button:'Panoramio', image:'',//GM_getResourceURL('Panoramio'), //'http://monkeyscript.4all.nu/shareResorces/images/panoramio.com.webp',
//'https://lh5.ggpht.com/iX6z62XBBt1b2T0fWnt9EupX1e6yFoUnYwO60z702xIp3-VlJquqYBOSay7aKhd5wbQ=w300-rw',//'https://ssl.panoramio.com/img/favicon.ico'
position: '' // 'http://www.panoramio.com/map/#lt=' + html.coordinates[0] + '&ln=' + html.coordinates[1] + '&z=1&k=2&a=1&tab=1&pl=all'
},
{ on:1, order:20, button:'Wikimapia', image:'', //GM_getResourceURL('Wikimapia'), //'http://monkeyscript.4all.nu/shareResorces/images/wikimapia.org_favicon.ico',
//'http://wikimapia.org/favicon.ico?650',
position: '' // 'http://wikimapia.org/#lang=en&lat=' + html.coordinates[0] + '&lon=' + html.coordinates[1] + '&z=18&m=b'
},
{ on:1, order:80, button:'Hitta', image:'', //GM_getResourceURL('Hitta'), //'http://monkeyscript.4all.nu/shareResorces/images/hitta.se_favicon.ico',
//https://www.hitta.se/static/img/favicons/favicon.ico
position: '' // 'https://www.hitta.se/kartan!~' + html.coordinates[0] + ',' + html.coordinates[1] + ',17z/tileLayer!l=1/'
},
{ on:1, order:90, button:'Eniro', image:'', //GM_getResourceURL('Eniro'), //'http://monkeyscript.4all.nu/shareResorces/images/eniro.com_favicon.ico',
//'http://static.eniro.com/img/profiles/se/favicon.ico',
position: //'http://kartor.eniro.se/m/U6JNo?embed=true¢er=' + html.coordinates[0] + ',' + html.coordinates[1] + '&zoom=18&layer=aerial'
'' // 'http://kartor.eniro.se/m/U6JNo?zoom=19¢er=' + html.coordinates[0] + ',' + html.coordinates[1] + '&layer=aerial'
},
{ on:1, order:30, button:'zoomEarth', image:'', //GM_getResourceURL('zoomEarth'), //'http://monkeyscript.4all.nu/shareResorces/images/zoom.earth_globe-search-find-64.png',
//'https://cdn3.iconfinder.com/data/icons/glypho-travel/64/globe-search-find-64.png',
position: '' // 'https://zoom.earth/#' + html.coordinates[0] + ',' + html.coordinates[1] + ',18z,sat'
},
{ on:1, order:72, button:'Wiwosm', image:'', //GM_getResourceURL('Wiwosm'), //'http://monkeyscript.4all.nu/shareResorces/images/Wiwosm_Tool_Labs_logo_thumb.png',
//'https://tools.wmflabs.org/Tool_Labs_logo_thumb.png',
position: '' // 'https://tools.wmflabs.org/wiwosm/osm-on-ol/commons-on-osm.php?zoom=18&lat=' + html.coordinates[0] + '&lon=' + html.coordinates[1]
},
{ on:1, order:40, button:'Bing', image:'', //GM_getResourceURL('Bing'), //'https://www.bing.com/sa/simg/bing_p_rr_teal_min.ico',
position: '' // 'https://www.bing.com/mapspreview?FORM=EXIPRV&signedup=1&cp=' + html.coordinates[0] + '~' + html.coordinates[1] + '&style=a&lvl=18'
},
{ on:1, order:120, button:'Flickr', image:'', //GM_getResourceURL('Flickr'), //'https://s.yimg.com/pw/favicon.ico',
position: '' // 'https://www.flickr.com/map?&fLat=' + html.coordinates[0] + '&fLon=' + html.coordinates[1] + '&zl=17'
},
{ on:1, order:100, button:'Hitchwiki', image:'', //GM_getResourceURL('Hitchwiki'), //'http://hitchwiki.org/maps/static/gfx/mobile/app_icons-screens/icon_57x57.png',
position: '' // 'http://hitchwiki.org/maps/?zoom=18&lat=' + html.coordinates[0] + '&lon=' + html.coordinates[1]
},
{ on:1, order:50, button:'Wikimap', image:'', //GM_getResourceURL('Wikimap'), //'http://wiki-map.com/favicon.ico',
position: '' // 'http://wiki-map.com/map/?locale=sv&lat=' + html.coordinates[0] + '&lng=' + html.coordinates[1]
},
{ on:1, order:70, button:'Geonames', image:'', //GM_getResourceURL('Geonames'), //'http://www.geonames.org/img/globe.gif',
position: '' // 'http://www.geonames.org/maps/google_' + html.coordinates[0] + '_' + html.coordinates[1] + '.html'
},
{ on:1, order:110, button:'yandex', image:'', //GM_getResourceURL('yandex'), //'https://yandex.com/maps/favicon.png',
position: '' // 'https://yandex.com/maps/?ll=' + html.coordinates[1] + '%2C' + html.coordinates[0] + '&z=17&l=sat'
},
{ on:1, order:60, button:'Openstreetmap', image:'', //GM_getResourceURL('Openstreetmap'), //'https://upload.wikimedia.org/wikipedia/commons/b/b0/Openstreetmap_logo.svg',
position: '' // 'https://www.openstreetmap.org/?mlat=' + html.coordinates[0] + '&mlon=' + html.coordinates[1] + '&zoom=20#map=15/' + html.coordinates[0] + '/' + html.coordinates[1]
},
{ on:1, order:55, button:'Terraserver', image:'',
position: ''
},
{ on:0, order:140, button:'', image:'',
position: ''
},
{ on:0, order:150, button:'', image:'',
position: ''
},
{ on:0, order:160, button:'', image:'',
position: ''
}
];
},
thisURL : function(){
return location.href.split('@').pop().split(',');
},
mapsHolder : null,
button : function( map ){
return '<button aria-label="Go to '+ map.button +'" oncontextmenu="return false;" class="widget-expand-button-pegman-background grab-cursor button'+ map.button + '" > '
+ '<div class="'+ map.button +'Wrapper mapButtonIcon" >'
+ '<a target="_blank" href="'+ this.positions[ map.button ]() + '" class="'+ map.button +'Url" data-map="'+ map.button +'" title="Go to '+ map.button +'">'
+ '<img src="'+ ( map.image.length > 5 ? map.image : GM_getResourceURL( map.button ) ) +'"></a></div></button>';
},
render : function( source ){
c.l('renderSource', source );
if( $('#mapsHolder').length )
return false;
else
this.mapsHolder = $( '<div/>',{ id:'mapsHolder' });
this.coordinates = this.thisURL();
var that = this;
$.each( that.dataArray().sort( sortBy( 'order' ) ), function( i, map ){
map.on && (
that.mapsHolder.find('.'+ map.button +'Wrapper').length || $( that.button( map ) ).appendTo( that.mapsHolder )
);
});
this.mapsHolder.prependTo( $('.app-horizontal-widget-holder') );
css.style('button');
listener.button();
}
},
listener = {
button: function(){
$( document ).on('mousedown mouseover', '.mapButtonIcon a img', function(e){
var $p;
timer.ms === 0 && this == e.target && (
timer.set( 156 ),
html.coordinates = html.thisURL(),
$p = $( this ).parent(),
// c.i('listener button ' + $p.data('map'), e.type ),
$p.attr('href', html.positions[ $p.data('map') ]() ) // html.dataArray().findArrayObj( 'button', $p.data('map') ).position )
);
});
}
},
googleMaps_observer = new MutationObserver( function( mutations /*, observer */) {
mutations.forEach( function( mutation ) {
var newNodes = mutation.addedNodes;
newNodes !== null && $( newNodes ).each( function( i, e ){
var $e = $(e);
( $e.hasClass( 'widget-expand-button-pegman' ) || $e.hasClass( '.app-horizontal-widget-holder' ) ) && html.mapsHolder === null && html.render( 'observer' );
});
});
});
googleMaps_observer.observe( document, { subtree: true, childList: true });
c.l('Map Linker GoogleMaps');
function loadLinkBar(){
var barCheck = setInterval(function(e){
$('#mapsHolder').length ? clearInterval( barCheck ) : html.render( 'load' );
}, 64);
listener.button();
}
$( document ).ready(function(e) {
loadLinkBar();
});
$( window ).on('load', function(e) {
loadLinkBar();
});
})();