// SETUP ///////////////////////////////////////////////////////////// // these functions set up specific areas after the boot function // created a basic framework. All of these functions should only ever // be run once. window.setupLargeImagePreview = function() { $('#portaldetails').on('click', '.imgpreview', function() { var ex = $('#largepreview'); if(ex.length > 0) { ex.remove(); return; } var img = $(this).html(); var w = $(this).find('img')[0].naturalWidth/2; var h = $(this).find('img')[0].naturalHeight/2; var c = $('#portaldetails').attr('class'); $('body').append( '
' + img + '
' ); $('#largepreview').click(function() { $(this).remove() }); }); } window.setupStyles = function() { $('head').append(''); if(L.Browser.mobile) { $('head').append(''); } } window.setupMap = function() { $('#map').text(''); var osmOpt = {attribution: 'Map data © OpenStreetMap contributors', maxZoom: 18}; var osm = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', osmOpt); var cmOpt = {attribution: 'Map data © OpenStreetMap contributors, Imagery © CloudMade', maxZoom: 18}; var cmMin = new L.TileLayer('http://{s}.tile.cloudmade.com/654cef5fd49a432ab81267e200ecc502/22677/256/{z}/{x}/{y}.png', cmOpt); var cmMid = new L.TileLayer('http://{s}.tile.cloudmade.com/654cef5fd49a432ab81267e200ecc502/999/256/{z}/{x}/{y}.png', cmOpt); var views = [cmMid, cmMin, osm, new L.Google('INGRESS'), new L.Google('ROADMAP'), new L.Google('SATELLITE'), new L.Google('HYBRID')]; window.map = new L.Map('map', $.extend(getPosition(), {zoomControl: !(localStorage['iitc.zoom.buttons'] === 'false')} )); try { map.addLayer(views[readCookie('ingress.intelmap.type')]); } catch(e) { map.addLayer(views[0]); } var addLayers = {}; portalsLayers = []; for(var i = 0; i <= 8; i++) { portalsLayers[i] = L.layerGroup([]); map.addLayer(portalsLayers[i]); var t = (i === 0 ? 'Unclaimed' : 'Level ' + i) + ' Portals'; addLayers[t] = portalsLayers[i]; } fieldsLayer = L.layerGroup([]); map.addLayer(fieldsLayer, true); addLayers['Fields'] = fieldsLayer; linksLayer = L.layerGroup([]); map.addLayer(linksLayer, true); addLayers['Links'] = linksLayer; window.layerChooser = new L.Control.Layers({ 'OSM Cloudmade Midnight': views[0], 'OSM Cloudmade Minimal': views[1], 'OSM Mapnik': views[2], 'Google Roads Ingress Style': views[3], 'Google Roads': views[4], 'Google Satellite': views[5], 'Google Hybrid': views[6] }, addLayers); map.addControl(window.layerChooser); map.attributionControl.setPrefix(''); // listen for changes and store them in cookies map.on('moveend', window.storeMapPosition); map.on('zoomend', function() { window.storeMapPosition; // remove all resonators if zoom out to < RESONATOR_DISPLAY_ZOOM_LEVEL if(isResonatorsShow()) return; for(var i = 1; i < portalsLayers.length; i++) { portalsLayers[i].eachLayer(function(item) { var itemGuid = item.options.guid; // check if 'item' is a resonator if(getTypeByGuid(itemGuid) != TYPE_RESONATOR) return true; portalsLayers[i].removeLayer(item); }); } console.log('Remove all resonators'); }); map.on('baselayerchange', function () { var selInd = $('[name=leaflet-base-layers]:checked').parent().index(); writeCookie('ingress.intelmap.type', selInd); }); // map update status handling map.on('movestart zoomstart', function() { window.mapRunsUserAction = true }); map.on('moveend zoomend', function() { window.mapRunsUserAction = false }); // update map hooks map.on('movestart zoomstart', window.requests.abort); map.on('moveend zoomend', function() { window.startRefreshTimeout(500) }); // run once on init window.requestData(); window.startRefreshTimeout(); window.addResumeFunction(window.requestData); window.requests.addRefreshFunction(window.requestData); }; // renders player details into the website. Since the player info is // included as inline script in the original site, the data is static // and cannot be updated. window.setupPlayerStat = function() { var level; var ap = parseInt(PLAYER.ap); for(level = 0; level < MIN_AP_FOR_LEVEL.length; level++) { if(ap < MIN_AP_FOR_LEVEL[level]) break; } var thisLvlAp = MIN_AP_FOR_LEVEL[level-1]; var nextLvlAp = MIN_AP_FOR_LEVEL[level] || ap; var lvlUpAp = digits(nextLvlAp-ap); var lvlApProg = Math.round((ap-thisLvlAp)/(nextLvlAp-thisLvlAp)*100); var xmMax = MAX_XM_PER_LEVEL[level]; var xmRatio = Math.round(PLAYER.energy/xmMax*100); var cls = PLAYER.team === 'ALIENS' ? 'enl' : 'res'; var t = 'Level:\t' + level + '\n' + 'XM:\t' + PLAYER.energy + ' / ' + xmMax + '\n' + 'AP:\t' + digits(ap) + '\n' + (level < 8 ? 'level up in:\t' + lvlUpAp + ' AP' : 'Congrats! (neeeeerd)') + '\n\Invites:\t'+PLAYER.available_invites; + '\n\nNote: your player stats can only be updated by a full reload (F5)'; $('#playerstat').html('' + '

'+level+' ' + ''+PLAYER.nickname+'' + '
' + 'XM: '+xmRatio+'%' + '' + (level < 8 ? 'level: '+lvlApProg+'%' : 'max level') + '' + '
' + '

' ); } window.setupSidebarToggle = function() { $('#sidebartoggle').on('click', function() { var toggle = $('#sidebartoggle'); var sidebar = $('#scrollwrapper'); if(sidebar.is(':visible')) { sidebar.hide().css('z-index', 1); $('.leaflet-right').css('margin-right','0'); toggle.html(''); toggle.css('right', '0'); } else { sidebar.css('z-index', 1001).show(); $('.leaflet-right').css('margin-right', SIDEBAR_WIDTH+1+'px'); toggle.html(''); toggle.css('right', SIDEBAR_WIDTH+1+'px'); } }); } window.setupTooltips = function() { $(document).tooltip({ // disable show/hide animation show: { effect: "hide", duration: 0 } , hide: false, open: function(event, ui) { ui.tooltip.delay(300).fadeIn(0); }, content: function() { var title = $(this).attr('title'); // check if it should be converted to a table if(!title.match(/\t/)) { return title.replace(/\n/g, '
'); } var data = []; var columnCount = 0; // parse data var rows = title.split('\n'); $.each(rows, function(i, row) { data[i] = row.split('\t'); if(data[i].length > columnCount) columnCount = data[i].length; }); // build the table var tooltip = ''; $.each(data, function(i, row) { tooltip += ''; $.each(data[i], function(k, cell) { var attributes = ''; if(k === 0 && data[i].length < columnCount) { attributes = ' colspan="'+(columnCount - data[i].length + 1)+'"'; } tooltip += ''+cell+''; }); tooltip += ''; }); tooltip += '
'; return tooltip; } }); } // BOOTING /////////////////////////////////////////////////////////// function boot() { window.debug.console.overwriteNativeIfRequired(); console.log('loading done, booting'); window.setupStyles(); window.setupMap(); window.setupGeosearch(); window.setupRedeem(); window.setupLargeImagePreview(); window.setupSidebarToggle(); window.updateGameScore(); window.setupPlayerStat(); window.setupTooltips(); window.chat.setup(); // read here ONCE, so the URL is only evaluated one time after the // necessary data has been loaded. urlPortal = getURLParam('pguid'); // load only once var n = window.PLAYER['nickname']; window.PLAYER['nickMatcher'] = new RegExp('\\b('+n+')\\b', 'ig'); $('#sidebar').show(); if(window.bootPlugins) $.each(window.bootPlugins, function(ind, ref) { ref(); }); // sidebar is now at final height. Adjust scrollwrapper so scrolling // is possible for small screens and it doesn’t block the area below // it. $('#scrollwrapper').css('max-height', ($('#sidebar').get(0).scrollHeight+3) + 'px'); // workaround for #129. Not sure why this is required. setTimeout('window.map.invalidateSize(false);', 500); window.iitcLoaded = true; } // this is the minified load.js script that allows us to easily load // further javascript files async as well as in order. // https://github.com/chriso/load.js // Copyright (c) 2010 Chris O'Hara . MIT Licensed function asyncLoadScript(a){return function(b,c){var d=document.createElement("script");d.type="text/javascript",d.src=a,d.onload=b,d.onerror=c,d.onreadystatechange=function(){var a=this.readyState;if(a==="loaded"||a==="complete")d.onreadystatechange=null,b()},head.insertBefore(d,head.firstChild)}}(function(a){a=a||{};var b={},c,d;c=function(a,d,e){var f=a.halt=!1;a.error=function(a){throw a},a.next=function(c){c&&(f=!1);if(!a.halt&&d&&d.length){var e=d.shift(),g=e.shift();f=!0;try{b[g].apply(a,[e,e.length,g])}catch(h){a.error(h)}}return a};for(var g in b){if(typeof a[g]=="function")continue;(function(e){a[e]=function(){var g=Array.prototype.slice.call(arguments);if(e==="onError"){if(d)return b.onError.apply(a,[g,g.length]),a;var h={};return b.onError.apply(h,[g,g.length]),c(h,null,"onError")}return g.unshift(e),d?(a.then=a[e],d.push(g),f?a:a.next()):c({},[g],e)}})(g)}return e&&(a.then=a[e]),a.call=function(b,c){c.unshift(b),d.unshift(c),a.next(!0)},a.next()},d=a.addMethod=function(d){var e=Array.prototype.slice.call(arguments),f=e.pop();for(var g=0,h=e.length;g