{"version":3,"file":"new-map.js","sources":["new-map.js"],"sourcesContent":["/**\n * Basic map object takes jquery selector to find the map element\n * and a list of options to get passed directly into the map constructor\n * there are some default options set which can be overriden\n *\n * Also add the nopin attribute to all tiles to prevent them being picked\n * up by pinterest.\n *\n * @param  int      id\n * @param  object   options\n * @author Neil Brayfield <neil@d3r.com>\n */\n\nfunction newMapLazyload(api_key, id, options, intervals) {\n    if (typeof api_key !== 'undefined') {\n        $.getScript('https://maps.googleapis.com/maps/api/js?key=' + api_key, function() {\n            var map = new NewMap(id, options);\n            for (var i = 0; i < intervals.length; i++) {\n                map.addMarker(intervals[i]);\n            }\n        });\n    }\n};\n\nvar NewMap = function (id, options) {\n    var self = this;\n    var defaults = {\n        mapTypeId: google.maps.MapTypeId.ROADMAP,\n        scrollwheel: false,\n        mapTypeControl: false,\n        streetViewControl: false,\n        minZoom: 1\n    };\n\n    $.extend(defaults, options);\n    this.mapDiv = $(id);\n    this.map = new google.maps.Map(this.mapDiv.get(0), defaults);\n    this.markers = [];\n    this.bounds = new google.maps.LatLngBounds();\n\n    var lineSymbol = {\n       path: 'M 0,-1 0,1',\n       strokeOpacity: 1,\n       scale: 4,\n       strokeColor: '#64CCC9',\n     };\n\n     var arrowSymbol = {\n        path: google.maps.SymbolPath.FORWARD_OPEN_ARROW,\n        strokeOpacity: 1,\n        strokeColor: '#64CCC9',\n    };\n\n\n    this.polyline = new google.maps.Polyline({\n        path: [],\n        geodesic: true,\n        icons: [\n        {\n            icon: lineSymbol,\n            offset: '0',\n            repeat: '20px'\n        },\n        {\n            icon: arrowSymbol,\n            offset: '0',\n            repeat: '150px'\n        }],\n        strokeOpacity: 0\n\n    });\n\n    this.polyline.setMap(this.map);\n};\n\n/**\n * Place a marker and expand the polyline\n *\n * @param  object data\n * @author Neil Brayfield <neil@d3r.com>\n */\nNewMap.prototype.addMarker = function(data) {\n    var map = this.map;\n\n    for (var i = 0; i < this.markers.length; i++) {\n        var element = this.markers[i];\n        if (element.data.lat == data.lat && element.data.lng == data.lng) {\n            this.addPath(data.lat, data.lng);\n\n            this.updateLabel(element.marker);\n            return;\n        }\n    }\n\n    var marker = new google.maps.Marker({\n        position: new google.maps.LatLng(data.lat, data.lng),\n        map: map,\n        icon: '/images/icon-map-location.svg',\n    });\n\n    marker.addListener('click', function() {\n        $('#interval-' + data.interval + ' .interval__button').trigger('click');\n    });\n\n    this.addPath(data.lat, data.lng);\n\n\n    var obj = {\n        marker: marker,\n        data: data,\n        days: [data.day]\n    };\n\n    if (data.days > 1) {\n        for (var i = 1; i < data.days; i++) {\n            obj.days.push(data.day+i);\n        }\n    }\n\n    this.updateLabel(marker);\n\n    this.markers.push(obj);\n\n    this.bounds.extend(marker.getPosition());\n    if (this.markers.length <= 1) {\n        this.map.setCenter(marker.getPosition());\n        this.map.setZoom(window.zoom);\n    } else {\n        this.map.fitBounds(this.bounds);\n    }\n};\n\n\n/**\n * Add a path to the poly line\n *\n * @param int lat\n * @param int lng\n * @author Neil Brayfield <neil@d3r.com>\n */\nNewMap.prototype.addPath = function(lat, lng) {\n    var currentPath = this.polyline.getPath();\n    currentPath.push(new google.maps.LatLng(lat, lng));\n    this.polyline.setPath(currentPath);\n}\n\n/**\n * Add label to marker\n *\n * @param Marker marker\n * @param array days\n * @author Neil Brayfield <neil@d3r.com>\n */\nNewMap.prototype.updateLabel = function(marker) {\n    var width = (2*12/2 < 22) ? 22 : 2*12/2;\n    var path = 'M-'+width+' -22 H '+width+' V 22 H -'+width+' L -'+width+' -22';\n\n    marker.getIcon().path = path;\n}\n\n/**\n * Sets the center point with an offset in pixels\n *\n * @param  float lat\n * @param  float lng\n * @param  int   offsetX\n * @param  int   offsetY\n * @author Neil Brayfield <neil@d3r.com>\n */\nNewMap.prototype.setCenterWithOffset = function(lat, lng, offsetX, offsetY) {\n    var map = this.map;\n    var ov = new google.maps.OverlayView();\n    ov.onAdd = function() {\n        var proj = this.getProjection();\n        var aPoint = proj.fromLatLngToContainerPixel(new google.maps.LatLng(lat, lng));\n        aPoint.x = aPoint.x+offsetX;\n        aPoint.y = aPoint.y+offsetY;\n        map.setCenter(proj.fromContainerPixelToLatLng(aPoint));\n    };\n    ov.draw = function() {};\n    ov.setMap(map);\n};\n"],"names":["newMapLazyload","api_key","id","options","intervals","$","getScript","map","NewMap","i","length","addMarker","defaults","mapTypeId","google","maps","MapTypeId","ROADMAP","scrollwheel","mapTypeControl","streetViewControl","minZoom","arrowSymbol","extend","this","mapDiv","Map","get","markers","bounds","LatLngBounds","path","SymbolPath","FORWARD_OPEN_ARROW","strokeOpacity","strokeColor","polyline","Polyline","geodesic","icons","icon","scale","offset","repeat","setMap","prototype","data","element","lat","lng","addPath","updateLabel","marker","Marker","position","LatLng","obj","addListener","interval","trigger","days","day","push","getPosition","setCenter","setZoom","window","zoom","fitBounds","currentPath","getPath","setPath","getIcon","setCenterWithOffset","offsetX","offsetY","ov","OverlayView","onAdd","proj","getProjection","aPoint","fromLatLngToContainerPixel","x","y","fromContainerPixelToLatLng","draw"],"mappings":"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"}