- /**
- * Created by Pegaasus on 2015-03-21.
- */
-
- // ==UserScript==
- // @name Panoramio - Easy and Enhanced Photo Viewer - linked with Google and Wikimapia maps.
- // @description A faster and easier way to explore 80 million images, handy EXIF image data/information, the place where it was taken and latitude/longitude. - Travel around the world, without leaving you secure home.
- // @namespace GCMP-EEPW-20150306-SDF-MOFM
- // @version 0.50
-
- // @include https://maps.google.*/maps*
- // @match https://maps.google.se/maps*
- // @match http://static.panoramio.com/photos/*.jpg
- // @match http://www.panoramio.com/map*
-
- // @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
- // @require https://greatest.deepsurf.us/scripts/17293-alert/code/$alert.js?version=109035
-
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_deleteValue
- // @grant GM_xmlhttpRequest
-
- // @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==
-
- /*jshint -W014, -W030, -W082*/
- // -W014, laxbreak, Bad line breaking before '+'
- // -W030, Expected assignment or function call instead saw an expression
-
-
- (function($){
-
- GM_getValue('startState') === undefined && GM_setValue('startState','Large');
-
- $.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild){
- var found = 'found',
- $this = $(this.selector),
- $elements = $this.not(function () { return $(this).data(found); }).each(handler).data(found, true);
- if( !isChild ) {
- (window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] =
- window.setInterval(function () {
- $this.waitUntilExists(
- handler, shouldRunHandlerOnce, true);
- }, 500);
- }
- else if (shouldRunHandlerOnce && $elements.length){
- window.clearInterval(window.waitUntilExists_Intervals[this.selector]);
- }
- return $this;
- };
- String.prototype.formatString = function(){
- return this.toString()
- .split(/\s+/g).join(' ')
- .split('{').join('{\n\t')
- .split('; ').join(';')
- .split(';').join(';\n\t')
- .split('*/').join('*/\n')
- .split('}').join('}\n');
- };
-
- var glob = {
- img: '000.000',
- startState: function(){ n = GM_getValue('startState'); return n },
- locDoc: window.location.href
- },
- f = {
- logState: 9,
- l: function( name, fn, showthis ){
- ( this.logState !== 0 && this.logState == (showthis || this.logState) || this.logState == 'all' ) &&
- console.log( name, fn !== undefined ? fn : '' );
- },
- i: function( name, fn, showthis ){
- ( this.logState !== 0 && this.logState == (showthis || this.logState) || this.logState == 'all' ) &&
- console.info( name, fn !== undefined ? fn : '' );
- },
- ms: 0,
- timer: function (ms){
- this.ms = ms;
- setTimeout(function(){ f.ms = 0; }, ms);
- },
- getRotate: function(){ var n; n = parseInt( $( '.largePanorama').attr('data-rotate') ); return n; },
- calcFlipRotate: function(){
- var flip = $( '#flip'), theImg = $('.theImg'), HFlipped, VFlipped, tw, th;
-
- HFlipped = flip.find('.flipHorizontal').hasClass('flipped') ? '-1' : '1';
- VFlipped = flip.find('.flipVertical').hasClass('flipped') ? '-1' : '1';
- var Newr, corr, r = f.getRotate();
- f.l('r', r, 8);
- Newr = r == 90 || r == 270;
- f.l('r',Newr, 8);
- tw = r == 90 || r == 270 ? theImg.height() : theImg.width();
- th = r == 90 || r == 270 ? theImg.width() : theImg.height();
- // corr = r == 90 || r == 270 ? 'translate(12.4%,16.75%' : '';
- f.l('WWWW',tw, 8);
- f.l('HHHH',th, 8);
- // $( '#middle').css('cssText','width:'+( tw )+'px; height:'+( th )+'px;');
- setTimeout(function(){
- theImg.css('cssText','transform: scale('+HFlipped+','+VFlipped+') rotateZ('+( r )+'deg);');
- },256);
- setTimeout(function(){
- // $( '#middle').css('cssText','width:'+( tw )+'px; height:'+( th )+'px;')
- },1);
- },
- closeLargePanorama: function(){
- $( '.largePanorama').hide( 256 ).delay( 256 ).queue(function(){
- $( this ).remove();
- });
- }
- },
- css = {
- firstPointerCss: function(){
- return 'img[src*="/photos/small/"] {'
- + 'cursor: pointer !important;'
- + '}'
- + '#Thumbholder > * {'
- + 'width: 311px !important;'
- + '}'
- + '#firstThumbholder > .gm-style-iw {'
- + 'position: absolute;'
- + 'width: 100% !important;'
- + 'left: 3px !important;'
- + '}'
- + '.gm-style-iw > div {'
- + 'overflow: hidden;'
- + 'width: 110%;'
- + 'max-width: 100% !important;'
- + '}'
- + '#firstThumbholder {'
- + 'width: 307px !important;'
- + 'position: relative !important;'
- + '}'
- + '.map-info-window {'
- + 'width: 306px;'
- + '}'
- + '.map-info-window-title {'
- + 'width: 290px;'
- + '}'
- + '.map-info-window-img-outer {'
- + 'width: 306px;'
- + '}'
- + '.gm-style .map-info-window-img-inner img {'
- + 'width: 282px;'
- + '}'
- + '.map-info-window-img-footer {'
- + 'width: 281px;'
- + '}'
- + '.map-info-window-img-footer-name {'
- + 'max-width: calc( 100% - 68px );'
- + '}'
- + '.map-info-window-img-footer-name a {'
- + 'height: 16px;'
- + 'display: block;'
- + 'overflow: hidden;'
- + '}';
- },
- fontsCss : function(){
- return '@import url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.css);';
- },
- navBarInner : function(){
- return '.linkTo {'
- + 'float: left;'
- + 'line-height: 52px;'
- + 'height: 52px;'
- + 'display: inline-block;'
- + 'width: 152px;'
- + 'overflow: hidden;'
- + 'color: wheat;'
- + '}'
- + '.linkTo a {'
- + 'color: rgba(255, 255, 255, 0.75);'
- + 'font-size: 18px;'
- + '}';
- },
- details : function(){
- return '.largePanorama #imageDetails {'
- + 'position: absolute;'
- + 'display: none;'
- + 'top: 50%;'
- + 'left: 50%;'
- + 'transform: translate(-50%,-50%);'
- + 'z-index: 30000;'
- + '}'
-
- + '.largePanorama .interim-info-card {'
- + 'padding: 15px;'
- + 'margin: 0 0 13px;'
- + 'background-color: rgba(255, 255, 255, 0.85);'
- + 'border-radius: 15px;'
- + 'border-color: rgba(123, 123, 123, 0.85);'
- + 'border-width: 3px;'
- + 'border-style: outset;'
- + 'box-shadow: 2px 2px 8px 4px rgba(0, 0, 0, 0.4);'
- + '}'
- + '.largePanorama .justImg {'
- + 'display: inline-block;'
- + 'width: 100%;'
- + 'margin-left: 0px;'
- + '}'
- + '.largePanorama .justImg span {'
- + 'margin-right: 25px;'
- + '}'
- + '.largePanorama .interim-info-card>h2 {'
- + 'margin: 0 0 5px;'
- + 'font-size: 16px;'
- + 'font-weight: normal;'
- + 'text-align: center;'
- + 'line-height: 40px;'
- + '}'
- + '.largePanorama .interim-info-card a {'
- + 'color: rgb(0, 0, 222) !important;'
- + '}'
- + '.largePanorama #details {'
- + 'margin: 0;'
- + 'padding: 0;'
- + 'list-style: none;'
- + '}'
- + '.largePanorama #details li {'
- + 'margin-bottom: 6px;'
- + 'padding-top: 0;'
- + 'font-size: 13px;'
- + 'color: #999;'
- + 'clear: both;'
- + '}'
- + '.largePanorama #map_info_breadcrumbs {'
- + 'margin-top: 15px;'
- + 'text-align: center;'
- + '}'
- + '.largePanorama #place {'
- + 'color: #999;'
- + '}'
- + '.largePanorama h2, .largePanorama #place, .largePanorama #details * {'
- + 'color: rgb(66, 66, 66) !important;'
- + '}'
- + '.largePanorama .geo {'
- + 'margin-top: 5px;'
- + '}';
- },
- mainCss : function(){
- return '.largePanorama {'
- + 'position: absolute;'
- + 'top: 50%;'
- + 'left: 50%;'
- + 'transform: translate(-50%,-50%);'
- + 'z-index: 10000;'
- + 'border-radius: 15px;'
- + 'padding: 0px 6px 20px;'
- + 'border-width: 3px;'
- + 'border-style: outset;'
- + 'border-color: rgba(127, 127, 127, 0.31);'
- + 'background-color: rgba(236, 236, 236, 0.85);'
- + 'box-shadow: 5px 5px 20px 10px rgba(0, 33, 32, 0.31);'
- + '}'
-
- + '.largePanorama > img.theImg {'
- + 'border-width: 3px;'
- + 'border-style: inset;'
- + 'border-color: rgba(255, 255, 255, 0.6);'
- + 'background-color: rgba(144, 144, 144, 0.65);'
- + 'box-shadow: 4px 2px 20px 1px rgba(170, 170, 170, 0.85);'
- + 'transform: rotate(0deg);'
- + '}'
- + '.largePanorama a {'
- + 'color: #15c;'
- + '}'
-
- + '.largePanorama .zoom, .largePanorama .close, .largePanorama .Size, '
- + '.largePanorama #top, .largePanorama #bottom, '
- + '.largePanorama .pano, .largePanorama .more, .largePanorama #rotate span {'
- + 'cursor: pointer;'
- + '}'
-
- + '.largePanorama .TheTitle {'
- + 'line-height: 35px;'
- + 'float: left;'
- + 'height: 35px;'
- + 'z-index: 15000;'
- + 'width: calc(100% - 150px) !important'
- + '}'
- + '.largePanorama .TheTitle b {'
- + 'float: left;'
- + 'cursor: initial;'
- + 'max-width: calc(100% - 0px) !important;'
- + '}'
-
- + '.mainSub {'
- + 'position: relative;'
- + '}'
-
- + '.largePanorama #top {'
- + 'height: 35px;'
- + 'line-height: 35px;'
- + '}'
-
- + '.largePanorama .mainClick {'
- + 'position: absolute;'
- + 'z-index: 11000;'
- + 'cursor: pointer;'
- + '}'
- + '.largePanorama #middle {'
- + 'height: calc(100% + 9px) !important;'
- + '}'
- + '.largePanorama #middle #over {'
- // + 'background-color: rgba(76, 131, 180, 0.28);'
- + 'width: 100%;'
- + 'height: 50%;'
- + 'top: 0;'
- + '}'
- + '.largePanorama #middle #under {'
- // + 'background-color: rgba(65, 65, 7, 0.34);'
- + 'width: 100%;'
- + 'height: 50%;'
- + 'bottom: 1px;'
- + '}'
- + '.largePanorama #middle .mainSub {'
- + 'position: relative;'
- + '}'
- + '.largePanorama #middle img {'
- + 'position: relative;'
- + 'z-index: 10500;'
- + '}'
-
- + '.largePanorama #bottom {'
- + 'position: absolute;'
- + 'width: calc(100% - 12px);'
- + 'height: 20px;'
- + '}'
-
- + '.largePanorama .map-info-window-img-footer{'
- + 'width: calc(100% - 18px);'
- + '}'
-
- + '.largePanorama .pano {'
- + 'position: absolute;'
- + 'bottom: 3px;'
- + 'width: calc(100% - 2px);'
- + 'margin-left: 1px;'
- + '}';
- },
- moreCss : function(){
- return '.largePanorama .more {'
- + 'float: right;'
- + 'z-index: 20000;'
- + '}'
- + '.largePanorama .more ul {'
- + 'display: none;'
- + 'position: absolute;'
- + 'padding: 4px 4px 4px 3px;'
- + 'margin-top: -14px;'
- + 'margin-left: -24px;'
- + 'border-style: outset;'
- + 'border-width: 2px;'
- + 'border-radius: 8px;'
- + 'border-color: rgb(209, 209, 209);'
- + 'background-color: rgba(215, 215, 215, 0.85);'
- + 'box-shadow: 1px 2px 8px 3px rgba(0, 60, 62, 0.27);'
- + 'z-index: 20000;'
- + '}'
- + '.largePanorama .more ul li {'
- + 'border-radius: 4px;'
- + 'line-height: 35px;'
- + 'padding: 0 10px;'
- + '}'
- + '.largePanorama .more ul li:hover {'
- + 'background-color: rgb(104, 122, 138);'
- + '}'
- + '.largePanorama .more ul li a {'
- + 'color: rgb(0, 36, 47);'
- + 'text-decoration: none;'
- + 'white-space: nowrap;'
- + '}'
- + '.largePanorama .more ul li:hover a {'
- + 'color: aliceblue;'
- + '}'
- + '.largePanorama .moreArrow.skiptranslate {'
- + 'font-size: 20px;'
- + 'height: 35px;'
- + 'right: 0;'
- + 'padding: 0 5px;'
- + 'position: absolute;'
- + 'float: right;'
- + '}'
- + '.largePanorama .moreArrow.skiptranslate:hover {'
- + 'color: blue !important;'
- + '}';
- },
- toolBoxCss : function(){
- return '#toolBox {'
- + 'float: right;'
- + 'margin-right: 12px;'
- + 'width: 118px;'
- + 'padding: 0 10px;'
- + 'z-index: 50000;'
- + 'display: none;'
- + '}'
- + '#toolBox>div>span {'
- + 'padding: 0 6px;'
- + 'display: inline-block;'
- + '}'
- + '#rotate {'
- + 'float: right;'
- + '}'
- + '#flip {'
- + 'float: left;'
- + '}'
- + '#toolBox span:hover, .more:hover, .moreArrow:hover {'
- + 'box-shadow: 0px -1px 18px 6px rgba(229, 229, 229, 1);'
- + 'background-color: rgba(227, 228, 228, 1);'
- + 'height: 35px;'
- + 'color: rgb(40, 38, 211);'
- + '}';
- },
- sizeCss : function(){
- return '.largePanorama .Size {'
- + 'position: absolute;'
- + 'z-index: 1000;'
- + 'bottom: 0px;'
- + 'left: 50%;'
- + 'transform: translate(-50%);'
- + 'white-space: nowrap;'
- + '}'
- + '.largePanorama .Size span {'
- + 'padding: 0 8px;'
- + 'display: inline-block;'
- + 'height: 18px;'
- + '}'
- + '.largePanorama .Size span:hover {'
- + 'box-shadow: 0px -5px 20px 9px rgba(229, 229, 229, 1);'
- + 'background-color: rgba(229, 229, 229, 1);'
- + '}'
- + '.largePanorama .Size a {'
- + 'color: black;'
- + 'position: relative;'
- + 'text-decoration: none;'
- + '}';
- },
- naturalWidth : function( naturalWidth ){
- return '.largePanorama #top, .largePanorama #middle { width: '+ naturalWidth +'px !important; }';
- },
- 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');
- }
- },
- // domSel = { main: $('.largePanorama')},
- // htmlSel = { main: '.largePanorama' },
- html = {
- title: null,
- bottomLink: null,
- imgNr: function(globImg){
- globImg = globImg || '000.000';
- var n; n = globImg.split('.').shift(); return n; },
- wrong: function(globImg){
- globImg = globImg || '0' ;
- var n; n = 'http://www.panoramio.com/map_photo/?id=' + globImg; return n; },
- reload: function(){
- var n;
- n = glob.locDoc.search('maps.google') > 0 ?
- $(document).find('#link').attr('href') : glob.locDoc.search('www.panoramio.com/map') > 0 && window.location.href;
- return n;
- },
- panoPhoto: function(globImg){
- globImg = globImg || html.imgNr(glob.img);
- var n; n = 'http://www.panoramio.com/photo/' + globImg; return n;
- },
- panoramioHtmlLink : function( link ){
- return $('<a/>', { id: 'panoramioHtmlLink', href: link, text: 'Orginal page' } );
- },
- UrlConverter: function( domain, inputUrl ){
- var url = inputUrl !== undefined ? inputUrl : location.href;
- url = domain === 'Google' ?
- 'http://maps.google.com/maps/@' + url.split('lt=').pop().split('&ln=').join(',').split('&z').shift() + ',300m/data=!3m1!1e3' :
- 'http://wikimapia.org/#lang=en&lat=' + url.split('lt=').pop().split('&ln=').join('&lon=').split('&z').shift() + '&z=16&m=b';
- return url;
- },
- aLink: function( domain, inputUrl ){
- return $('<a/>', { id: 'convert' + domain, class:'link', href: this.UrlConverter( domain, inputUrl ), text: domain + ' Maps', target:'_blank' });
- },
- linkTo: function( domain ){
- return $( $('<div/>',{ class:'linkTo', 'data-domain': domain }).html( this.aLink( domain ) ) ).insertAfter( '#explore-wrapper' );
- },
- headLinks: function(){
- css.style('navBarInner');
- html.linkTo('Google');
- html.linkTo('Wikimapia');
- listenerOn.navBarInner();
- },
- DetailsResults: null,
- Details: function(){
- //noinspection JSUnusedGlobalSymbols
- GM_xmlhttpRequest({
- method: "GET",
- url: html.panoPhoto(),
- crossDomain: true,
- //onerror:
- onprogress: function(res) {
- var msg = "\n\r\t "
- + "On progress Report."
- // + "\nresponseText: " + res.responseText
- + "\nreadyState: " + res.readyState
- + "\nresponseHeaders: " + res.responseHeaders
- + "\nstatus: " + res.status
- + "\nstatusText: " + res.statusText
- + "\nfinalUrl: " + res.finalUrl;
- // + "\n\nContent-length: " + res.responseHeaders.match('Content-Length: \\d+').toString().split(': ').pop()
-
- res.readyState == 4 && console.log(msg);
- },
- onload: function(res) {
- var domain = 'http://www.panoramio.com/map/', href, newVal,
- $res = $( res.responseText), bred = $( '<div/>', { id:"map_info_breadcrumbs" }), tmp = $( '<span/>'),
- geoLink = 'https://ssl.panoramio.com' + $res.find('#location .geo').find('a').attr('href');
-
- bred
- .append(
- $res.find('#map_info_breadcrumbs').html(),
- $( '<span> • </span>' ),
- $res.find('#map_info_name a').addClass('local'),
- $('<br/>' ),$('<br/>' ),
- $res.find('#location .geo').find('a').addClass('point').parent(),
- $('<br/>' ),
- html.aLink('Wikimapia', geoLink ),
- $('<br/>' ),
- html.aLink('Google', geoLink ) )
- .find('a').each(function( id, el ){
- var $el = $( el ), orgHref = $el.attr('href');
- newVal = id === 1 ? '9' : id === 2 ? '4' : $el.hasClass('local') ? '0' : $el.hasClass('point') ? '-1' : '';
- href = orgHref.split('/map/').pop().split('&z=');
- $el.hasClass('link') ||
- $el.addClass( 'nr' + id ).attr('href',
- orgHref.search('&z=') !== -1 ? href.length > 1 ? href.shift() + '&z=' + newVal + '&k=2' : domain : orgHref );
- });
-
- tmp.append(
- $res.find('#details').parent() ).find('.interim-info-card')
- .append( bred )
- .prepend( html.bottomLink.clone().addClass('justImg')
- .append( html.panoramioHtmlLink( html.panoPhoto() ) )).end()
- .find('.pano').removeClass('pano');
-
- $( '<div/>', { id:"imageDetails", html: tmp.html() }).appendTo( '.largePanorama' );
- }
- });
- },
- insertMore: [
- '<div class="more"><span class="moreArrow skiptranslate">?</span>',
- '<ul>',
- '<li><a class="reLoad" target="_self" href="">Reload Map this Location</a></li>',
- '<li><a class="linkOrginal" target="_blank" href="">Orginal in new TAB</a></li>',
- '<li><a class="wrongLink" target=" _blank" href="">Suggest new Location</a></li>',
- '<li><a class="imageFlipRotate">Image Flip-Rotate</a></li>',
- '<li><a class="imageDetails">Image Details</a></li>',
- '<li><a class="configStartState">Default Size</a></li>',
- '</ul>',
- '</div>'].join(''),
- main: [
- '<div class="largePanorama" data-rotate="0" data-state="" style="">',
- '<div id="top" class="mainSub"></div>',
- '<div id="middle" class="mainSub">',
- '<div id="over" class="mainClick zoomPano"></div>',
- '<div id="under" class="mainClick closePano"></div>',
- '</div>',
- '<div id="bottom" class="mainSub"></div>',
- '</div>'].join(''),
- size: [
- '<div class="Size">',
- '<span class="LargeBottomLink"><a target=" _blank" href="">Normal: </a></span>',
- '<span class="HugeBottomLink"><a target=" _blank" href="">Large: </a></span>',
- '<span class="OrginalBottomLink"><a target=" _blank" href="">Orginal: </a></span>',
- '</div>'].join(''),
- insertToolBox: [
- '<div id="toolBox">',
- '<div id="rotate">',
- '<span class="rotates rotateLeft skiptranslate">RL</span>',
- '<span class="rotates rotateRight skiptranslate">RR</span>',
- '</div>',
- '<div id="flip">',
- '<span class="flip flipVertical skiptranslate"><span id="up" class="fp">VF</span></span>',
- '<span class="flip flipHorizontal skiptranslate"><span id="left" class="fp">HF</span></span>',
- '</div>',
- '</div>'].join('')
- },
- // listenerOff = {zoomClose: function(){}},
- listenerOn = {
- ZoomState: null,
- zoomClose: function(){
- var state,waitOnLoad,
- img = $( '.theImg'),
- main = $('.largePanorama'),
- newImg = new Image();
- $( '.zoomPano' ).on('mousedown', function(e){
- e.which == 1 && this == e.target && (
- waitOnLoad = setInterval(function(){
- state = main.attr('data-state') == 'Huge' ? 'Large':'Huge';
- $( '.' + state + 'BottomLink.loaded' ).length && (
- clearInterval( waitOnLoad ),
- newImg.src = loadImg[ state ](),
- img.attr('src', loadImg[ state ]() ),
- f.calcFlipRotate(),
- main.attr('data-state', state ),
- newImg.onload = function(){
- css.style('naturalWidth', newImg.naturalWidth );
- } );
- }, 5 ) ); });
- $( '.closePano' ).on('mouseup', function(e){
- e.which == 1 && this == e.target && f.closeLargePanorama(); });
- },
- moreMenu: function(){
- $( '.moreArrow, .moreArrow font, .more' ).on('mousedown', function(e) {
- e.which == 1 && this == e.target && (
- $( '.more ul' ).show(), f.timer( 512 ),
- $( '.reLoad' ).attr('href', $(document).find('#link').attr('href') ) ); });
- $( '.more ul' ).on('mouseleave', function(e) {
- f.ms === 0 && this == e.target && $( this ).hide(); });
- $( '.more li a' ).on('click', function(e) {
- f.ms === 0 && e.which == 1 && this == e.target && $( '.more ul' ).hide(); });
- $( '.configStartState' ).on('click', function(e) {
- e.which == 1 && this == e.target && (
- GM_setValue('startState', $('.largePanorama').attr('data-state') ) )
- });
- $( '.imageFlipRotate' ).on('mouseup', function(e) {
- var LPano = $( '.largePanorama'), toolbox = $('#toolBox');
- e.which == 1 && this == e.target && (
- toolbox.is(':visible') ? toolbox.hide() : toolbox.show(),
- $( '.rotates' ).on('click', function(e) {
- var rotate = f.getRotate();
- e.which == 1 && this == e.target && (
- rotate = $( this ).hasClass('rotateRight') ? ( rotate == 270 ? 0 : rotate + 90 ):( rotate === 0 ? 270 : rotate - 90 ),
- LPano.attr('data-rotate', rotate ).delay(2).queue(function(n){
- f.calcFlipRotate(); n(); }) );
- }),
- $('.fp').on('click', function(e) {
- e.which == 1 && this == e.target && (
- $(this).parent().toggleClass('flipped').delay(2).queue(function(n){
- f.calcFlipRotate(); n(); }) );
- }))});
- },
- navBarInner: function(){
- $( document ).on('mouseenter', '.linkTo', function(){
- var domain = $( this ).data('domain');
- $( '#convert' + domain ).attr( 'href', html.UrlConverter( domain ) ); });
- },
- closeLargePanorama: function(){
- $( document ).on('mousedown', '#map > .gm-style > div > div', function(){
- f.closeLargePanorama();
- });
- },
- detailsPhoto: function(){
- $( '.imageDetails, #top, #bottom, .pano, .TheTitle' ).on('mouseup', function(e) {
- var elemLoc = $( '#imageDetails' );
- f.ms === 0 && e.which == 1 && this == e.target && ( f.timer(64), elemLoc[ elemLoc.is(':hidden') ? 'show' : 'hide' ](128) ); });
- $( document ).on('mouseleave', '#imageDetails', function() {
- $( this ).hide(256); });
- }//,
- //flipRotate: function(){ }
- },
- render = {
- mainHtml: function(){
-
- var htmlImgNr = html.imgNr( glob.img ),
- main = $( html.main ),
- newImg = new Image();
-
- newImg.src = loadImg[ glob.startState() == 'Large' ? 'Large' : 'Huge' ]();
- newImg.onload = function(){
- css.style('naturalWidth', newImg.naturalWidth );
- };
-
- css.style('fontsCss');
- css.style('navBarInner');
- css.style('mainCss');
- css.style('moreCss');
- css.style('toolBoxCss');
-
- main.addClass( htmlImgNr )
- .find( '#middle' ).append( loadImg.startImg ).end()
- .find( '#top' ).append( html.title ).end()
- .find( '#bottom' ).append(
- html.bottomLink.find('.map-info-window-img-footer-logo a').attr('href', html.panoPhoto() ) ).end()
- .find( '#top' ).append( html.insertMore ).end()
- .find( '#middle img' ).addClass('theImg');
-
- $('body').append( main ).delay(1).queue(function(){
- $('.largePanorama')
- .find( '.reLoad').attr('href', html.reload() ).end()
- .find( '.linkOrginal').attr('href', loadImg.Orginal() ).end()
- .find( '.wrongLink').attr('href', html.wrong( htmlImgNr ) ).end()
- .find( '#bottom img').closest('div').addClass('pano');
- });
-
- css.style('details');
- html.Details();
- render.sizePre();
-
- setTimeout(function(){
- $('.largePanorama').attr('data-state', GM_getValue('startState') );
- listenerOn.zoomClose();
- render.size();
- listenerOn.moreMenu();
- listenerOn.detailsPhoto();
- listenerOn.closeLargePanorama();
- $( html.insertToolBox ).appendTo('#top');
- },24);
- },
- sizePre: function(){
- var Size = $( html.size );
- css.style('sizeCss');
- Size.find('span').append('<i class="fa fa-spinner fa-pulse fa-1x fa-fw" style="width: 20px"></i>');
- $('#bottom').append( Size );
- },
- size: function() {
- var chk = {
- Loaded : setInterval(function(){
- var Huge = $('.HugeBottomLink'), Orginal = $('.OrginalBottomLink'), Large = $('.LargeBottomLink');
- $('.Size .loaded').length === 3 && (
- clearInterval( chk.Loaded ),
- Huge.data('size') === Orginal.data('size') && Orginal.hide(),
- Large.data('size') === Huge.data('size') && Huge.hide(),
- $('.Size span').each(function(id, el) {
- $(el).text().search('0x0') > 0 && $(el).hide(); }) );
- }, 10),
- tSize : function( size ){
- var sizes = loadImg[ size + 'Size' ],
- link = $('.' + size + 'BottomLink');
- link.length !== 0 && sizes.length > 2 && (
- clearInterval( chk[ size ] ),
- link.find('i').hide( 512 ).end()
- .not('.loaded').addClass('loaded').attr('data-size', sizes )
- .find('a')
- .attr('href', loadImg[ size ]() )
- .attr('title', loadImg[ size+'fileSize' ] )
- .append( sizes ) );
- },
- Large : setInterval(function(){
- chk.tSize('Large');
- }, 1),
- Huge : setInterval(function(){
- chk.tSize('Huge');
- }, 1),
- Orginal : setInterval(function(){
- chk.tSize('Orginal');
- }, 1)
- };
- }
- },
- loadImg = {
- domainPhotoPath : 'http://static.panoramio.com/photos',
- /**
- * @return {string}
- */
- Large: function(){
- var n; n = loadImg.domainPhotoPath + '/large/' + glob.img; return n },
- /**
- * @return {string}
- */
- Huge: function(){
- var n; n = loadImg.domainPhotoPath + '/1920x1280/' + glob.img; return n },
- /**
- * @return {string}
- */
- Orginal: function(){
- var n; n = loadImg.domainPhotoPath + '/original/' + glob.img; return n },
- LargeLoaded: null,
- HugeLoaded: null,
- OrginalLoaded: null,
- LargeSize: '0',
- LargeWidth: '0',
- HugeSize: '0',
- HugeWidth: '0',
- OrginalSize: '0',
- OrginalWidth: '0',
- startImg: null,
- setLoadedSize: function( newImg, state ){ f.l('state',state,9);
- var sizeText = newImg.naturalWidth + 'x' + newImg.naturalHeight; f.l(state,sizeText,3);
- this[state+'Loaded'] = true, f.l(state+'Loaded',this[state+'Loaded'],9),
- this[state+'Size'] = sizeText, f.l(state+'Size',this[state+'Size'],9);
- this[state+'Width'] = newImg.naturalWidth;
- loadImg[state+'fileSize'] = this[state].size / 1024;
- f.l(state+'fileSize',this[state+'fileSize']);
- f.l('newImg',newImg.target);
- },
- bootstrapCss: function(){
- $('#bootstrapCss').length || $('<link/>',{ id:'bootstrapCss', rel:"stylesheet", href:"//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" }).appendTo('head');
- },
- img_onWaitLoad: function(){
- this.bootstrapCss();
- $.alert('Wait on image to load',{
- //http://www.jqueryscript.net/other/Create-Simple-Alert-Messages-with-jQuery-Bootstrap-alert-js.html
- autoClose: true,
- // Auto close delay time in ms (>1000)
- closeTime: 8000,
- // Display a countdown timer
- withTime: true,
- // danger, success, warning or info
- type: 'info',
- // position+offeset
- // top-left,top-right,bottom-left,bottom-right,center
- position: ['top-left', [ 128, ( $('div#map').width() / 2 ) - ( 284 / 2 ) ]],
- // <a href="http://www.jqueryscript.net/animation/">
- // Animation speed
- speed: 'normal',
- // onShow callback
- onClose: function () {
- $('#firstThumbholder').css('visibility','hidden');
- },
- title:'Loading info'
- });
- },
- img_onError: function( state ){
- this.bootstrapCss();
- $.alert('The size of ' + state + " can't be loaded",{
- //http://www.jqueryscript.net/other/Create-Simple-Alert-Messages-with-jQuery-Bootstrap-alert-js.html
- autoClose: true,
- // Auto close delay time in ms (>1000)
- closeTime: 8000,
- // Display a countdown timer
- withTime: true,
- // danger, success, warning or info
- type: 'info',
- // position+offeset
- // top-left,top-right,bottom-left,bottom-right,center
- position: ['top-left', [ 128, ( $('div#map').width() / 2 ) - ( 284 / 2 ) ]],
- // <a href="http://www.jqueryscript.net/animation/">
- // Animation speed
- speed: 'normal',
- // onShow callback
- onClose: function () {
- $('#firstThumbholder').css('visibility','hidden');
- },
- title:'OnError'
- });
- },
- run_img1: function(){
- var startState = glob.startState() == 'Large' ,newImg = new Image(),
- startString = startState ? 'Large' : 'Huge';
- newImg.src = this[ startString ](); f.l('src1', startState ? this.Large(): this.Huge(),9);
-
- newImg.onerror = function(){
- loadImg.img_onError( startString );
- $('.' + startString + 'BottomLink').hide();
- };
- newImg.onload = function(){ f.l('run_img1',newImg,9);
- loadImg.setLoadedSize( newImg, startString );
- loadImg.startImg = newImg;
- };
- },
- run_img2: function(){
- var startState = glob.startState() == 'Large', newImg = new Image(),
- startString = startState ? 'Huge' : 'Large',
- chk = setInterval(function(){
- loadImg.startImg !== null && (
- clearInterval(chk), render.mainHtml() ); },1);
- newImg.src = this[ startString ]();
- newImg.onerror = function(){
- loadImg.img_onError( startString );
- $('.' + startString + 'BottomLink').hide();
- };
- newImg.onload = function(){ f.l('run_img2',newImg,9);
- loadImg.setLoadedSize( newImg, startString ); };
- },
- run_img3: function(){
- var newImg = new Image();
- newImg.src = this.Orginal();
- newImg.onerror = function(){
- loadImg.img_onError( 'Orginal' );
- $('.OrginalBottomLink').hide();
- };
- newImg.onload = function(){ f.l('run_img3',newImg,9);
- loadImg.setLoadedSize( newImg, 'Orginal' ); };
- }
- },
- reset = {
- Objects: function(){
- loadImg.startImg = null;
- loadImg.LargeLoaded = false;
- loadImg.HugeLoaded = false;
- loadImg.OrginalLoaded = false;
- loadImg.LargeSize = '0';
- loadImg.HugeSize = '0';
- loadImg.OrginalSize = '0';
- html.DetailsResults = null;
- }
- },
- 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('gm-style-iw') && ( $e.parent().attr('id','firstThumbholder'), $e.prev().attr('id','Thumbholder' ) );
- //$e.hasClass('widget-titlecard-attribution') && switcher('123');
- });
- });
- });
-
- observer.observe( document, { subtree: true, childList: true });
-
- function fn_googleMaps(){
- var css = {
- panoramioButton: function(){
- return 'a.PanoramioUrl img {'
- + 'width: 40px;'
- + 'height: 40px;'
- + '}'
- + '.PanoramioWrapper {'
- + 'top: -5px;'
- + 'left: -35px;'
- + 'position: absolute;'
- + '}'
- + 'a.WikimapiaUrl img {'
- + 'width: 20px;'
- + 'height: 20px;'
- + '}'
- + '.WikimapiaWrapper {'
- + 'top: 4px;'
- + 'left: -52px;'
- + 'position: absolute;'
- + '}'
- ;
- },
- 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 = {
- getPanoramioUrl : function(){
- var cord = location.href.split('@').pop().split(',');
- return 'https://ssl.panoramio.com/map/#lt=' + cord[0] + '&ln=' + cord[1] + '&z=2&k=2&a=1&tab=1&pl=all';
- },
- getWikimapiaUrl : function(){
- var cord = location.href.split('@').pop().split(',');
- return 'http://wikimapia.org/#lang=en&lat=' + cord[0] + '&lon=' + cord[1] + '&z=16&m=b';
- },
- panoramioButton : function(){
- return '<button aria-label="Go to Panoramio" oncontextmenu="return false;" class="widget-expand-button-pegman-background grab-cursor"> '
- + '<div class="PanoramioWrapper" > '
- + '<a target="_blank" href="'+ html.getPanoramioUrl() + '" class="PanoramioUrl" title="Go to Panoramio"> <img src="https://lh5.ggpht.com/iX6z62XBBt1b2T0fWnt9EupX1e6yFoUnYwO60z702xIp3-VlJquqYBOSay7aKhd5wbQ=w300-rw"></a>'
- + '</div></button>';
- },
- /**
- * @return {string}
- */
- WikimapiaButton : function(){
- return '<button aria-label="Go to Wikimapia" oncontextmenu="return false;" class="widget-expand-button-pegman-background grab-cursor"> <div class="WikimapiaWrapper" > '
- + '<a target="_blank" href="' + html.getWikimapiaUrl() + '" class="WikimapiaUrl" title="Go to Wikimapia"> <img src="http://a1.mzstatic.com/us/r30/Purple3/v4/c1/7a/ea/c17aea4b-2f3d-dbc3-3fa9-92ece451ae3c/icon175x175.png"></a>'
- + '</div></button>';
- }
- },
- listener = {
- panoramioButton: function(){
- $( document ).on('mouseenter', 'a.PanoramioUrl img, a.PanoramioUrl', function(e){
- this == e.target && (
- $( 'a.PanoramioUrl' ).attr('href', html.getPanoramioUrl() )
- );
- });
-
- },
- WikimapiaButton: function(){
- $( document ).on('mouseenter', '.WikimapiaUrl img, .WikimapiaUrl', function(e){
- this == e.target && (
- $( '.WikimapiaUrl' ).attr('href', html.getWikimapiaUrl() )
- );
- });
-
- }
- },
- render = function(){
- var insert = $('.app-horizontal-widget-holder'); //$('.widget-expand-button-pegman')
- css.style('panoramioButton');
- $('.PanoramioWrapper').length || $( html.panoramioButton() ).prependTo( insert );
- listener.panoramioButton();
-
- // css.style('WikimapiaButton');
- $('.WikimapiaWrapper').length || $( html.WikimapiaButton() ).prependTo( insert );
- listener.WikimapiaButton();
- },
- 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') ) && render();
- });
- });
- });
-
- googleMaps_observer.observe( document, { subtree: true, childList: true });
- setInterval(function() {
- $('.PanoramioWrapper').length || render();
- }, 1024);
-
- $(window).load(function() {
- render();
-
- });
-
-
- }
-
- function fn_panoramio(){
- css.style('firstPointerCss');
-
- var search = '/photos/small/';
-
- $( document ).on('hover mouseenter', '.map-info-window-img-inner img', function(){
- var mainParent = $( this ).parents('.map-info-window-img-outer'),
- mainImgParent = mainParent.find('.map-info-window-img-inner'),
- mainLink = mainImgParent.find('a'),
- src = $( this ).attr('src');
-
- src.search('logo-tos.png') > 0 && $( this ).addClass('panoLinkClick').closest('a').attr('href', mainLink.attr('href') );
- $('.map-info-window-img-footer-logo a').attr('href', mainLink.attr('href') );
- mainParent.hasClass( 'Donne' ) || ( mainParent.addClass( 'Donne' ), mainLink.find('img').unwrap() );
-
- src.search(search) !== -1 && (
- reset.Objects(),
- glob.img = src.split(search).pop(),
- loadImg.run_img1(),
- html.bottomLink = $( this ).parent().next().clone(),
- html.title = $( this ).parent().parent().prev().clone().addClass('TheTitle')
- );
-
- });
- $( document ).on('click', 'img', function(){
- var removePano = $('.largePanorama'),
- src = $( this ).attr('src');
- removePano.length && removePano.remove();
- src.search(search) !== -1 && (
- loadImg.run_img2(),
- loadImg.run_img3()
- );
- });
-
- f.l('fn_googleMaps');
- }
-
- glob.locDoc.search('panoramio.com') != -1 && fn_panoramio();
- glob.locDoc.search('/maps/') != -1 && fn_googleMaps();
-
-
- f.l('fn_googleMaps',location.href.search('/maps/'));
-
- function infoCol(){
- var zoomURL = $('#info-col').find('#location .geo a'),
- href = zoomURL.attr('href').split('=');
- href[3] = '-1&' + href[3].split('&').pop();
- zoomURL.attr('href', href.join('=') );
- }
-
- glob.locDoc.search('panoramio.com/photo/') != -1 && $('#info-col').length && infoCol();
-
- function switcher(code) {
- var url = $('a.widget-titlecard-attribution-link').attr('data-attribution-url');
- f.l( 'switcher',code + ': ' + url );
-
- GM_xmlhttpRequest({
- method : "GET",
- url : url,
- crossDomain: true,
- onprogress : function(res){
- var msg = "\n\r\t "
- + "On progress Report."
- + "\nresponseText: " + res.responseText
- + "\nreadyState: " + res.readyState
- + "\nresponseHeaders: " + res.responseHeaders
- + "\nstatus: " + res.status
- + "\nstatusText: " + res.statusText
- + "\nfinalUrl: " + res.finalUrl;
- // + "\n\nContent-length: " + res.responseHeaders.match('Content-Length: \\d+').toString().split(': ').pop()
-
- res.readyState == 4 && console.log(msg);
- },
- onload : function(res){
- //f.l( 'res.responseText', res.responseText );
- var $res = function(){
- return $( res.responseText );
- },
- href = $res().find('#location .geo a').attr('href').split('='),
- img = $('<img/>',{src:'http://www.galis.org/_/rsrc/1315550090403/Home/panoramio.png'}),
- a = $('<a/>',{ class:'panoramio_switcher', html:img });
-
- href[3] = '-1&' + href[3].split('&').pop();
-
- f.l('link', 'https://ssl.panoramio.com' + href.join('=') );
-
- $('.panoramio_switcher').length || $('.widget-titlecard-header .widget-titlecard-attribution').append( a.attr('href', 'https://ssl.panoramio.com' + href.join('=') ) );
-
- }
- });
- }
- $('.widget-titlecard-attribution-text').waitUntilExists(function(){
- var panaramioCss = 'a.panoramio_switcher img {'
- + 'width: 26px;'
- + 'top: 9px;'
- + 'position: relative;'
- + '}'
- + '.widget-titlecard-header .widget-titlecard-attribution {'
- + 'top: -10px;'
- + 'position: relative;'
- + '}';
-
- setTimeout(function(){
- switcher('789');
- setTimeout(function(){
- $('<style id="panaramio">' + panaramioCss + '</style>').appendTo( 'head' );
- }, 424);
- setInterval(function(){
- var link = $('a.widget-titlecard-attribution-link').attr('data-attribution-url'),
- arrays = link.split('/'),
- locDoc = window.location.href;
-
- link.search('ssl.panoramio.com') > 0 && locDoc.search( arrays[4] ) == -1 && (
- console.log('chk', locDoc.search( arrays[4] ) ),
- $('.panoramio_switcher').remove(),
- setTimeout(function(){
- switcher();
- },512)
- );
- }, 2500);
- }, 1524);
- });
-
- //----------------------------------------------------------------------------------------------------------//
- // The END //
- //----------------------------------------------------------------------------------------------------------//
-
- $( document ).on('click','*',function(e){ this == e.target && console.log('target',e.target); });
-
- f.l('google maps');
-
- $( document ).ready(function() {
- html.headLinks();
- });
-
- }(jQuery));
-