//ORIGINAL CORE OF SITE.JS //CONFIGURE SITE PARAMETERS AT //THE BOTTOM SECTION OF THE SCRIPT (function(root) { var map = {}, layers; map = function(el, l, callback) { layer.tilejson(l.api, function(t) { var handlers = [ //These work in mapbox.js new MM.DragHandler(), new MM.DoubleClickHandler(), new MM.TouchHandler() ]; //establishing the map var map = mapbox.map(el, new wax.mm.connector(t), null, handlers); //adding UI elements map.ui.zoomer().add(); map.ui.zoombox().add(); map.ui.fullscreen().add(); map.ui.hash.add(); map.ui.legend.add(); map.ui.attribution.add().content('Terms & Feedback'); //setting parameter catcher for starting center & zoom map.centerZoom({ lat: (l.center) ? l.center.lat : t.center[1], lon: (l.center) ? l.center.lon : t.center[0] }, (l.center) ? l.center.zoom : t.center[2]); if (l.zoomRange) { map.setZoomRange(l.zoomRange[0], l.zoomRange[1]); } else { map.setZoomRange(t.minzoom, t.maxzoom); } if (callback && typeof(callback) == 'function') callback(); }); return map; }; map.layers = function(x) { if (!arguments.length) return layers; layers = x; return map; }; //Here the trouble begins: setOverlay seems to imply //client-side compositing, and there does not appear //to be an equivalent function in mapbox.js map.setOverlay = function(id) { if (!layers[id]) throw new Error('overlay with id ' + id + ' not found'); var l = layers[id]; layer.tilejson(l.api, function(t) { var level = (l.level === 'base') ? 0 : 1; //No mabox.js equivalent for the below setLayerAt and wax connectors //Seems like several redundant steps could be replaced with //the map.addLayer(); function try { map.setLayerAt(level, new wax.mm.connector(t)); } catch (e) { map.insertLayerAt(level, new wax.mm.connector(t)); } map.interaction(map).auto(t); }); if (l.center) { var lat = l.center.lat || map.getCenter().lat, lon = l.center.lon || map.getCenter().lon, zoom = l.center.zoom || map.getZoom(); if (l.center.ease > 0) { map.ease = ease().map(map) .to(map.locationCoordinate({ lat: lat, lon: lon }) .zoomTo(zoom)).run(l.center.ease); } else { map.setCenterZoom({ lat: lat, lon: lon }, zoom); } } }; map.removeOverlay = function(id) { if (!layers[id]) throw new Error('overlay with id ' + id + ' not found'); var l = layers[id]; var level = (l.level === 'base') ? 0 : 1; map.removeLayerAt(level); map.legend.content(' '); map.interaction.refresh(); }; root.map = map; })(this); //Ajaxishness for the DOM handling of the switcher $(function() { if (location.hash === '#embed') $('body').removeClass().addClass('embed'); $('body').on('click.map', '[data-control="layer"]', function(e) { var $this = $(this), id = $this.attr('href'); id = id.replace(/.*(?=#[^\s]+$)/, '').slice(1); var m = $('[data-control="geocode"]').attr('data-map') || 'main'; e.preventDefault(); if($this.hasClass('active')) { $('[data-control="layer"]').removeClass('active'); window[m].removeOverlay(id); } else { $('[data-control="layer"]').removeClass('active'); $this.addClass('active'); window[m].setOverlay(id); } }); }); //MOVED FROM INDEX.HTML CONFIGURATION // Make a new map in the #map element var main = map('map', { // Base layer here api: 'http://a.tiles.mapbox.com/v3/landplanner.map-a0wbwf43.jsonp', center: { lat: 44.484626966, // Intial center point and zoom level. lon: -73.2342639, zoom: 13 }, zoomRange: [0, 17] }); //Switchable overlays here main.layers({ existing: { api: 'http://a.tiles.mapbox.com/v3/landplanner.btvwards-current,landplanner.map-0wnm9063.jsonp' }, btv4wv3: { api: 'http://a.tiles.mapbox.com/v3/landplanner.wards-4w-v3,landplanner.map-0wnm9063.jsonp' }, btv7wv4: { api: 'http://a.tiles.mapbox.com/v3/landplanner.wards-7w-v4,landplanner.map-0wnm9063.jsonp' }, btv7wv5: { api: 'http://a.tiles.mapbox.com/v3/landplanner.wards-7w-v5,landplanner.map-0wnm9063.jsonp' }, btv8wv1: { api: 'http://a.tiles.mapbox.com/v3/landplanner.wards-8w-v1,landplanner.map-0wnm9063.jsonp' } });