(function(root) { var Map = {}, layers; Map = function(el, l, callback) { wax.tilejson(l.api, function(t) { var handlers = [ new MM.DragHandler(), new MM.DoubleClickHandler(), new MM.TouchHandler() ]; if ($.inArray('zoomwheel', l.features) >= 0) { handlers.push(new MM.MouseWheelHandler()); } MM_map = new MM.Map(el, new wax.mm.connector(t), null, handlers); MM_map.setCenterZoom({ 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) { MM_map.setZoomRange(l.zoomRange[0], l.zoomRange[1]); } else { MM_map.setZoomRange(t.minzoom, t.maxzoom); } wax.mm.attribution(MM_map, t).appendTo(MM_map.parent); if (callback && typeof(callback) == 'function') callback(); }); return Map; }; Map.layers = function(x) { if (!arguments.length) return layers; layers = x; return Map; }; Map.setOverlay = function(id) { if (!layers[id]) throw new Error('overlay with id ' + id + ' not found'); var l = layers[id]; wax.tilejson(l.api, function(t) { var level = (l.level === 'base') ? 0 : 1; try { MM_map.setLayerAt(level, new wax.mm.connector(t)); } catch (e) { MM_map.insertLayerAt(level, new wax.mm.connector(t)); } if (MM_map.interaction) MM_map.interaction.map(MM_map).tilejson(t); if (MM_map.legend) { MM_map.legend.content(t); } }); if (l.center) { var lat = l.center.lat || MM_map.getCenter().lat, lon = l.center.lon || MM_map.getCenter().lon, zoom = l.center.zoom || MM_map.getZoom(); if (l.center.ease > 0) { MM_map.easey = easey().map(MM_map) .to(MM_map.locationCoordinate({ lat: lat, lon: lon }) .zoomTo(zoom)).run(l.center.ease); } else { MM_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; MM_map.removeLayerAt(level); if (MM_map.legend) MM_map.legend.content(' '); if (MM_map.interaction) MM_map.interaction.remove(); }; root.Map = Map; })(this); $(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); } }); });