From 9fac4506138266219a3d2c5e180cbefafae31875 Mon Sep 17 00:00:00 2001 From: fwitzke Date: Mon, 4 Nov 2013 17:35:22 -0200 Subject: [PATCH 1/7] extending marker with labels support to markers directive --- Gruntfile.js | 1 + dist/angular-google-maps.js | 160 +++++++++++++++++- dist/angular-google-maps.min.js | 8 +- example/example-controller.js | 19 ++- example/example.css | 2 +- example/example.html | 20 +-- src/coffee/directives/api/labels.coffee | 11 ++ .../api/models/child/label-child-model.coffee | 3 +- .../parent/markers-labels-parent-model.coffee | 50 ++++++ .../models/parent/markers-parent-model.coffee | 4 +- src/js/directives/labels.js | 43 +++++ 11 files changed, 285 insertions(+), 36 deletions(-) create mode 100644 src/coffee/directives/api/labels.coffee create mode 100644 src/coffee/directives/api/models/parent/markers-labels-parent-model.coffee create mode 100644 src/js/directives/labels.js diff --git a/Gruntfile.js b/Gruntfile.js index 5614b2809..39307fcbe 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -68,6 +68,7 @@ module.exports = function (grunt) { 'src/js/directives/marker.js', 'src/js/directives/markers.js', 'src/js/directives/label.js', + 'src/js/directives/labels.js', 'src/js/directives/polygon.js', 'src/js/directives/polyline.js', 'src/js/directives/window.js', diff --git a/dist/angular-google-maps.js b/dist/angular-google-maps.js index 630bc6bad..95a3d36e8 100644 --- a/dist/angular-google-maps.js +++ b/dist/angular-google-maps.js @@ -491,8 +491,6 @@ return self.markerLabel.setMap(theMap); }); this.marker.setMap(this.marker.getMap()); - this.$log = directives.api.utils.Logger; - this.$log.info(this); } MarkerLabelChildModel.prototype.getSharedCross = function(crossUrl) { @@ -1165,6 +1163,85 @@ }).call(this); +(function() { + var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + this.ngGmapModule("directives.api.models.parent", function() { + return this.MarkersLabelsParentModel = (function(_super) { + __extends(MarkersLabelsParentModel, _super); + + function MarkersLabelsParentModel(scope, element, attrs, ctrls, $timeout, $compile, $http, $templateCache, $interpolate) { + var self, + _this = this; + this.scope = scope; + this.element = element; + this.attrs = attrs; + this.ctrls = ctrls; + this.$timeout = $timeout; + this.$compile = $compile; + this.$http = $http; + this.$templateCache = $templateCache; + this.$interpolate = $interpolate; + this.watchForRebuild = __bind(this.watchForRebuild, this); + this.createChildMarkerLabels = __bind(this.createChildMarkerLabels, this); + self = this; + this.labels = []; + this.bigGulp = directives.api.utils.AsyncProcessor; + this.markersScope = this.ctrls[0].getMarkersScope(); + this.$log = directives.api.utils.Logger; + this.$log.info(self); + this.$timeout(function() { + _this.createChildMarkerLabels(); + return _this.watchForRebuild(_this.markersScope); + }, 50); + } + + MarkersLabelsParentModel.prototype.createChildMarkerLabels = function() { + var _this = this; + return this.bigGulp.handleLargeArray(this.markersScope.markerModels, function(marker) { + var childScope, content_key, label; + childScope = _this.scope.$new(false); + /* + markers-labels directive will specify a content attribute which will used + as the label content. This attribute is expected to exist in the marker model + + TODO: this is dirty, need a better way to handle this + */ + + content_key = childScope.labelContent; + if (marker.model[content_key]) { + childScope.labelContent = marker.model[content_key]; + label = new directives.api.models.child.MarkerLabelChildModel(marker.gMarker, childScope); + _this.labels.push(label); + return _this.scope.$on("$destroy", function() { + return label.destroy(); + }); + } else { + return _this.$log.info("marker content not specified: " + content_key); + } + }, (function() {}), function() { + return _this.scope.labelModels = _this.labels; + }); + }; + + MarkersLabelsParentModel.prototype.watchForRebuild = function(scope) { + var _this = this; + return scope.$on('markersRebuild', function(event, data) { + _this.$log.info('### REBUILD'); + _this.labels = []; + return _this.createChildMarkerLabels(); + }); + }; + + return MarkersLabelsParentModel; + + })(oo.BaseObject); + }); + +}).call(this); + (function() { var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __hasProp = {}.hasOwnProperty, @@ -1235,11 +1312,12 @@ _this.markers.push(child); return _this.markersIndex++; }, (function() {}), function() { + scope.markerModels = _this.markers; + scope.$broadcast('markersRebuild'); _this.gMarkerManager.draw(); if (angular.isDefined(_this.attrs.fit) && (scope.fit != null) && scope.fit) { - _this.fit(); + return _this.fit(); } - return scope.markerModels = _this.markers; }); }; @@ -1758,6 +1836,37 @@ }).call(this); +(function() { + var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + this.ngGmapModule("directives.api", function() { + return this.Labels = (function(_super) { + __extends(Labels, _super); + + function Labels($timeout) { + this.link = __bind(this.link, this); + var self; + Labels.__super__.constructor.call(this, $timeout); + self = this; + this.require = ['^markers']; + this.template = ''; + this.scope.models = '=models'; + this.$log.info(this); + } + + Labels.prototype.link = function(scope, element, attrs, ctrl) { + return new directives.api.models.parent.MarkersLabelsParentModel(scope, element, attrs, ctrl, this.$timeout); + }; + + return Labels; + + })(directives.api.ILabel); + }); + +}).call(this); + (function() { var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __hasProp = {}.hasOwnProperty, @@ -4757,6 +4866,49 @@ angular.module('google-maps').directive('markers', ['$timeout', function ($timeo angular.module('google-maps').directive('markerLabel', ['$log', '$timeout', function ($log, $timeout) { return new directives.api.Label($timeout); }]); +;/**! + * The MIT License + * + * Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * angular-google-maps + * https://github.com/nlaplante/angular-google-maps + * + * @authors Fernando Witzke, pigroxalot@gmail.com + */ + +/** + * Markers labels directive + * + * This directive is used to create marker labels for the markers directive + * + * {attribute content required} content of the label + * {attribute anchor required} string that contains the x and y point position of the label + * {attribute class optional} class to DOM object + * {attribute style optional} style for the label + */ + +angular.module('google-maps').directive('markersLabels', ['$timeout', function ($timeout) { + return new directives.api.Labels($timeout); +}]); ;/**! * The MIT License * diff --git a/dist/angular-google-maps.min.js b/dist/angular-google-maps.min.js index 264031be6..a78731ab7 100644 --- a/dist/angular-google-maps.min.js +++ b/dist/angular-google-maps.min.js @@ -1,7 +1,7 @@ -/*! angular-google-maps 0.0.0 2013-10-20 +/*! angular-google-maps 0.0.0 2013-11-04 * AngularJS directives for Google Maps * git: https://github.com/nlaplante/angular-google-maps.git */ -function ClusterIcon(a,b){a.getMarkerClusterer().extend(ClusterIcon,google.maps.OverlayView),this.cluster_=a,this.className_=a.getMarkerClusterer().getClusterClass(),this.styles_=b,this.center_=null,this.div_=null,this.sums_=null,this.visible_=!1,this.setMap(a.getMap())}function Cluster(a){this.markerClusterer_=a,this.map_=a.getMap(),this.gridSize_=a.getGridSize(),this.minClusterSize_=a.getMinimumClusterSize(),this.averageCenter_=a.getAverageCenter(),this.printable_=a.getPrintable(),this.markers_=[],this.center_=null,this.bounds_=null,this.clusterIcon_=new ClusterIcon(this,a.getStyles())}function MarkerClusterer(a,b,c){this.extend(MarkerClusterer,google.maps.OverlayView),b=b||[],c=c||{},this.markers_=[],this.clusters_=[],this.listeners_=[],this.activeMap_=null,this.ready_=!1,this.gridSize_=c.gridSize||60,this.minClusterSize_=c.minimumClusterSize||2,this.maxZoom_=c.maxZoom||null,this.styles_=c.styles||[],this.title_=c.title||"",this.zoomOnClick_=!0,void 0!==c.zoomOnClick&&(this.zoomOnClick_=c.zoomOnClick),this.averageCenter_=!1,void 0!==c.averageCenter&&(this.averageCenter_=c.averageCenter),this.ignoreHidden_=!1,void 0!==c.ignoreHidden&&(this.ignoreHidden_=c.ignoreHidden),this.printable_=!1,void 0!==c.printable&&(this.printable_=c.printable),this.imagePath_=c.imagePath||MarkerClusterer.IMAGE_PATH,this.imageExtension_=c.imageExtension||MarkerClusterer.IMAGE_EXTENSION,this.imageSizes_=c.imageSizes||MarkerClusterer.IMAGE_SIZES,this.calculator_=c.calculator||MarkerClusterer.CALCULATOR,this.batchSize_=c.batchSize||MarkerClusterer.BATCH_SIZE,this.batchSizeIE_=c.batchSizeIE||MarkerClusterer.BATCH_SIZE_IE,this.clusterClass_=c.clusterClass||"cluster",-1!==navigator.userAgent.toLowerCase().indexOf("msie")&&(this.batchSize_=this.batchSizeIE_),this.setupStyles_(),this.addMarkers(b,!0),this.setMap(a)}function inherits(a,b){function c(){}c.prototype=b.prototype,a.superClass_=b.prototype,a.prototype=new c,a.prototype.constructor=a}function MarkerLabel_(a,b){this.marker_=a,this.handCursorURL_=a.handCursorURL,this.labelDiv_=document.createElement("div"),this.labelDiv_.style.cssText="position: absolute; overflow: hidden;",this.eventDiv_=document.createElement("div"),this.eventDiv_.style.cssText=this.labelDiv_.style.cssText,this.eventDiv_.setAttribute("onselectstart","return false;"),this.eventDiv_.setAttribute("ondragstart","return false;"),this.crossDiv_=MarkerLabel_.getSharedCross(b)}function MarkerWithLabel(a){a=a||{},a.labelContent=a.labelContent||"",a.labelAnchor=a.labelAnchor||new google.maps.Point(0,0),a.labelClass=a.labelClass||"markerLabels",a.labelStyle=a.labelStyle||{},a.labelInBackground=a.labelInBackground||!1,"undefined"==typeof a.labelVisible&&(a.labelVisible=!0),"undefined"==typeof a.raiseOnDrag&&(a.raiseOnDrag=!0),"undefined"==typeof a.clickable&&(a.clickable=!0),"undefined"==typeof a.draggable&&(a.draggable=!1),"undefined"==typeof a.optimized&&(a.optimized=!1),a.crossImage=a.crossImage||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png",a.handCursor=a.handCursor||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur",a.optimized=!1,this.label=new MarkerLabel_(this,a.crossImage,a.handCursor),google.maps.Marker.apply(this,arguments)}!function(){var a=angular.module("google-maps",[]);a.factory("debounce",["$timeout",function(a){return function(b){var c=0;return function(){var d=this,e=arguments;c++;var f=function(a){return function(){return a===c?b.apply(d,e):void 0}}(c);return a(f,0,!0)}}}])}(),function(){this.ngGmapModule=function(a,b){var c,d;return"string"==typeof a&&(a=a.split(".")),c=this[d=a.shift()]||(this[d]={}),c.ngGmapModule||(c.ngGmapModule=this.ngGmapModule),a.length?c.ngGmapModule(a,b):b.call(c)}}.call(this),function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};this.ngGmapModule("oo",function(){var b;return b=["extended","included"],this.BaseObject=function(){function c(){}return c.extend=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this[d]=e);return null!=(f=c.extended)&&f.apply(0),this},c.include=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this.prototype[d]=e);return null!=(f=c.included)&&f.apply(0),this},c}()})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.ClustererMarkerManager=function(b){function d(b,c,e){this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var f;d.__super__.constructor.call(this),f=this,this.opt_options=e,this.clusterer=null!=e&&void 0===c?new MarkerClusterer(b,void 0,e):null!=e&&null!=c?new MarkerClusterer(b,c,e):new MarkerClusterer(b),this.clusterer.setIgnoreHidden(!0),this.$log=directives.api.utils.Logger,this.noDrawOnSingleAddRemoves=!0,this.$log.info(this)}return c(d,b),d.prototype.add=function(a){return this.clusterer.addMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.addMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.remove=function(a){return this.clusterer.removeMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.removeMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.draw=function(){return this.clusterer.repaint()},d.prototype.clear=function(){return this.clusterer.clearMarkers(),this.clusterer.repaint()},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.MarkerManager=function(b){function d(b){this.handleOptDraw=a(this.handleOptDraw,this),this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var c;d.__super__.constructor.call(this),c=this,this.gMap=b,this.gMarkers=[],this.$log=directives.api.utils.Logger,this.$log.info(this)}return c(d,b),d.prototype.add=function(a,b){return this.handleOptDraw(a,b,!0),this.gMarkers.push(a)},d.prototype.addMany=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.add(b));return e},d.prototype.remove=function(a,b){var c,d;return this.handleOptDraw(a,b,!1),b?(c=void 0,null!=this.gMarkers.indexOf?c=this.gMarkers.indexOf(a):(d=0,_.find(this.gMarkers,function(b){d+=1,b===a&&(c=d)})),null!=c?this.gMarkers.splice(c,1):void 0):void 0},d.prototype.removeMany=function(){var a,b,c,d,e;for(d=this.gMarkers,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.remove(a));return e},d.prototype.draw=function(){var a,b,c,d,e,f,g,h,i,j=this;for(a=[],h=this.gMarkers,c=function(b){return b.isDrawn?void 0:b.doAdd?b.setMap(j.gMap):a.push(b)},d=0,f=h.length;f>d;d++)b=h[d],c(b);for(i=[],e=0,g=a.length;g>e;e++)b=a[e],i.push(this.remove(b,!0));return i},d.prototype.clear=function(){var a,b,c,d;for(d=this.gMarkers,b=0,c=d.length;c>b;b++)a=d[b],a.setMap(null);return delete this.gMarkers,this.gMarkers=[]},d.prototype.handleOptDraw=function(a,b,c){return b===!0?(c?a.setMap(this.gMap):a.setMap(null),a.isDrawn=!0):(a.isDrawn=!1,a.doAdd=c)},d}(oo.BaseObject)})}.call(this),function(){this.ngGmapModule("directives.api.utils",function(){return this.AsyncProcessor={handleLargeArray:function(a,b,c,d,e,f){var g;return null==e&&(e=100),null==f&&(f=0),void 0===a||a.length<=0?(d(),void 0):(g=function(){var h,i;for(h=e,i=f;h--&&id;d++)b=f[d],c(b);return delete this.markers,this.markers=[],this.markersIndex=0,null!=this.gMarkerManager&&this.gMarkerManager.clear(),this.createMarkers(a)}},d.prototype.onWatch=function(a,b,c,d){return"models"!==a||c.length!==d.length?"options"===a&&null!=c?(this.DEFAULTS=c,void 0):this.reBuildMarkers(b):void 0},d.prototype.onDestroy=function(){var a,b,c,d;for(d=this.markers,b=0,c=d.length;c>b;b++)a=d[b],a.destroy();return null!=this.gMarkerManager?this.gMarkerManager.clear():void 0},d.prototype.fit=function(){var a,b;return this.mapCtrl&&null!=this.markers&&this.markers.length&&(a=new google.maps.LatLngBounds,b=!1,_.each(this.markers,function(c){return null!=c.gMarker?(b||(b=!0),a.extend(c.gMarker.getPosition())):void 0}),b)?this.mapCtrl.getMap().fitBounds(a):void 0},d}(directives.api.models.parent.IMarkerParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.models.parent",function(){return this.WindowsParentModel=function(b){function d(b,c,e,f,g,h,i,j,k){this.interpolateContent=a(this.interpolateContent,this),this.setChildScope=a(this.setChildScope,this),this.createWindow=a(this.createWindow,this),this.setContentKeys=a(this.setContentKeys,this),this.createChildScopesWindows=a(this.createChildScopesWindows,this),this.watchOurScope=a(this.watchOurScope,this),this.watchDestroy=a(this.watchDestroy,this),this.watchModels=a(this.watchModels,this),this.watch=a(this.watch,this);var l,m,n,o,p,q=this;for(d.__super__.constructor.call(this,b,c,e,f,g,h,i,j,k),m=this,this.$interpolate=k,this.windows=[],this.windwsIndex=0,this.scopePropNames=["show","coords","templateUrl","templateParameter","isIconVisibleOnClick","closeClick"],p=this.scopePropNames,n=0,o=p.length;o>n;n++)l=p[n],this[l+"Key"]=void 0;this.linked=new directives.api.utils.Linked(b,c,e,f),this.models=void 0,this.contentKeys=void 0,this.isIconVisibleOnClick=void 0,this.firstTime=!0,this.bigGulp=directives.api.utils.AsyncProcessor,this.$log.info(m),this.$timeout(function(){return q.watchOurScope(b),q.createChildScopesWindows()},50)}return c(d,b),d.prototype.watch=function(a,b,c){var d=this;return a.$watch(b,function(a,e){var f,g,h,i,j;if(a!==e){for(d[c]="function"==typeof a?a():a,i=d.windows,j=[],g=0,h=i.length;h>g;g++)f=i[g],j.push(function(a){return a.scope[b]="self"===d[c]?a:a[d[c]]}(f));return j}},!0)},d.prototype.watchModels=function(a){var b=this;return a.$watch("models",function(a,c){return a!==c&&a.length!==c.length?b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return b.windows=[],b.windowsIndex=0,b.createChildScopesWindows()}):void 0},!0)},d.prototype.watchDestroy=function(a){var b=this;return a.$on("$destroy",function(){return b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return delete b.windows,b.windows=[],b.windowsIndex=0})})},d.prototype.watchOurScope=function(a){var b,c,d,e,f,g=this;for(e=this.scopePropNames,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(function(b){var c;return c=b+"Key",g[c]="function"==typeof a[b]?a[b]():a[b],g.watch(a,b,c)}(b));return f},d.prototype.createChildScopesWindows=function(){var a,b,c,d=this;return this.isIconVisibleOnClick=!0,angular.isDefined(this.linked.attrs.isiconvisibleonclick)&&(this.isIconVisibleOnClick=this.linked.scope.isIconVisibleOnClick),a=this.linked.ctrls[0].getMap(),b=this.linked.ctrls.length>1&&null!=this.linked.ctrls[1]?this.linked.ctrls[1].getMarkersScope():void 0,c=angular.isUndefined(this.linked.scope.models),c&&(void 0===b||void 0===b.markerModels&&void 0===b.models)?(this.$log.info("No models to create windows from! Need direct models or models derrived from markers!"),void 0):null!=a?null!=this.linked.scope.models?(this.models=this.linked.scope.models,this.firstTime&&(this.watchModels(this.linked.scope),this.watchDestroy(this.linked.scope)),this.setContentKeys(this.linked.scope.models),this.bigGulp.handleLargeArray(this.linked.scope.models,function(b){return d.createWindow(b,void 0,a)},function(){},function(){return d.firstTime=!1})):(this.models=b.models,this.firstTime&&(this.watchModels(b),this.watchDestroy(b)),this.setContentKeys(b.models),this.bigGulp.handleLargeArray(b.markerModels,function(b){return d.createWindow(b.model,b.gMarker,a) -},function(){},function(){return d.firstTime=!1})):void 0},d.prototype.setContentKeys=function(a){return a.length>0?this.contentKeys=Object.keys(a[0]):void 0},d.prototype.createWindow=function(a,b,c){var d,e,f,g=this;return d=this.linked.scope.$new(!1),this.setChildScope(d,a),d.$watch("model",function(a,b){return a!==b?g.setChildScope(d,a):void 0},!0),f=this.interpolateContent(this.linked.element.html(),a),e=this.createWindowOptions(b,d,f,this.DEFAULTS),this.windows.push(new directives.api.models.child.WindowChildModel(d,e,this.isIconVisibleOnClick,c,b,this.$http,this.$templateCache,this.$compile,!0))},d.prototype.setChildScope=function(a,b){var c,d,e,f,g,h=this;for(g=this.scopePropNames,d=function(c){var d,e;return d=c+"Key",e="self"===h[d]?b:b[h[d]],e!==a[c]?a[c]=e:void 0},e=0,f=g.length;f>e;e++)c=g[e],d(c);return a.model=b},d.prototype.interpolateContent=function(a,b){var c,d,e,f,g,h;if(void 0!==this.contentKeys&&0!==this.contentKeys.length){for(c=this.$interpolate(a),d={},h=this.contentKeys,f=0,g=h.length;g>f;f++)e=h[f],d[e]=b[e];return c(d)}},d}(directives.api.models.parent.IWindowParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.ILabel=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.restrict="ECMA",this.replace=!0,this.template=void 0,this.require=void 0,this.transclude=!0,this.priority=-100,this.scope={labelContent:"=content",labelAnchor:"@anchor",labelClass:"@class",labelStyle:"=style"},this.$log=directives.api.utils.Logger,this.$timeout=b}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IMarker=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.replace=!0,this.require="^googleMap",this.priority=-1,this.transclude=!0,this.replace=!0,this.scope={coords:"=coords",icon:"=icon",click:"&click",options:"=options"}}return c(d,b),d.prototype.controller=["$scope","$element",function(){throw new Exception("Not Implemented!!")}],d.prototype.link=function(){throw new Exception("Not implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IWindow=function(b){function d(b,c,d,e){this.link=a(this.link,this);var f;f=this,this.restrict="ECMA",this.template=void 0,this.transclude=!0,this.priority=-100,this.require=void 0,this.replace=!0,this.scope={coords:"=coords",show:"=show",templateUrl:"=templateurl",templateParameter:"=templateparameter",isIconVisibleOnClick:"=isiconvisibleonclick",closeClick:"&closeclick",options:"=options"},this.$log=directives.api.utils.Logger,this.$timeout=b,this.$compile=c,this.$http=d,this.$templateCache=e}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Label=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.require="^marker",this.template='',this.$log.info(this)}return c(d,b),d.prototype.link=function(a,b,c,d){return this.$timeout(function(){var b,c;return c=d.getMarker(),null!=c&&(b=new directives.api.models.child.MarkerLabelChildModel(c,a)),a.$on("$destroy",function(){return b.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.ILabel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Layer=function(b){function d(b){this.link=a(this.link,this),this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.require="^googleMap",this.priority=-1,this.transclude=!0,this.template='',this.replace=!0,this.scope={show:"=show",type:"=type",namespace:"=namespace",options:"=options"}}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.LayerParentModel(a,b,c,d,this.$timeout)},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Marker=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a,b){return this.getMarker=function(){return b.data("instance")}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkerParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Markers=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.scope.models="=models",this.scope.doCluster="=docluster",this.scope.clusterOptions="=clusteroptions",this.scope.fit="=fit",this.$timeout=b,this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a){return this.getMarkersScope=function(){return a}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkersParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Window=function(b){function d(b,c,e,f){this.link=a(this.link,this);var g;d.__super__.constructor.call(this,b,c,e,f),g=this,this.require=["^googleMap","^?marker"],this.template='',this.$log.info(g)}return c(d,b),d.include(directives.api.utils.GmapUtil),d.prototype.link=function(a,b,c,d){var e=this;return this.$timeout(function(){var f,g,h,i,j,k;return g=!0,angular.isDefined(c.isiconvisibleonclick)&&(g=a.isIconVisibleOnClick),h=d[0].getMap(),i=d.length>1&&null!=d[1]?d[1].getMarker():void 0,f=null!=a.options?a.options:{},j=e.createWindowOptions(i,a,b.html(),f),null!=h&&(k=new directives.api.models.child.WindowChildModel(a,j,g,h,i,e.$http,e.$templateCache,e.$compile)),a.$on("$destroy",function(){return k.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.IWindow)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Windows=function(b){function d(b,c,e,f,g){this.link=a(this.link,this);var h;d.__super__.constructor.call(this,b,c,e,f),h=this,this.$interpolate=g,this.require=["^googleMap","^?markers"],this.template='',this.scope.models="=models",this.$log.info(h)}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.WindowsParentModel(a,b,c,d,this.$timeout,this.$compile,this.$http,this.$templateCache,this.$interpolate)},d}(directives.api.IWindow)})}.call(this),angular.module("google-maps").controller("PolylineDisplayController",["$scope",function(a){a.toggleStrokeColor=function(){a.stroke.color="#6060FB"==a.stroke.color?"red":"#6060FB"}}]),ClusterIcon.prototype.onAdd=function(){var a,b,c=this;this.div_=document.createElement("div"),this.div_.className=this.className_,this.visible_&&this.show(),this.getPanes().overlayMouseTarget.appendChild(this.div_),this.boundsChangedListener_=google.maps.event.addListener(this.getMap(),"bounds_changed",function(){b=a}),google.maps.event.addDomListener(this.div_,"mousedown",function(){a=!0,b=!1}),google.maps.event.addDomListener(this.div_,"click",function(d){if(a=!1,!b){var e,f,g=c.cluster_.getMarkerClusterer();google.maps.event.trigger(g,"click",c.cluster_),google.maps.event.trigger(g,"clusterclick",c.cluster_),g.getZoomOnClick()&&(f=g.getMaxZoom(),e=c.cluster_.getBounds(),g.getMap().fitBounds(e),setTimeout(function(){g.getMap().fitBounds(e),null!==f&&g.getMap().getZoom()>f&&g.getMap().setZoom(f+1)},100)),d.cancelBubble=!0,d.stopPropagation&&d.stopPropagation()}}),google.maps.event.addDomListener(this.div_,"mouseover",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseover",c.cluster_)}),google.maps.event.addDomListener(this.div_,"mouseout",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseout",c.cluster_)})},ClusterIcon.prototype.onRemove=function(){this.div_&&this.div_.parentNode&&(this.hide(),google.maps.event.removeListener(this.boundsChangedListener_),google.maps.event.clearInstanceListeners(this.div_),this.div_.parentNode.removeChild(this.div_),this.div_=null)},ClusterIcon.prototype.draw=function(){if(this.visible_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.top=a.y+"px",this.div_.style.left=a.x+"px"}},ClusterIcon.prototype.hide=function(){this.div_&&(this.div_.style.display="none"),this.visible_=!1},ClusterIcon.prototype.show=function(){if(this.div_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(a),this.div_.innerHTML=this.cluster_.printable_?"
"+this.sums_.text+"
":this.sums_.text,this.div_.title="undefined"==typeof this.sums_.title||""===this.sums_.title?this.cluster_.getMarkerClusterer().getTitle():this.sums_.title,this.div_.style.display=""}this.visible_=!0},ClusterIcon.prototype.useStyle=function(a){this.sums_=a;var b=Math.max(0,a.index-1);b=Math.min(this.styles_.length-1,b);var c=this.styles_[b];this.url_=c.url,this.height_=c.height,this.width_=c.width,this.anchor_=c.anchor,this.anchorIcon_=c.anchorIcon||[parseInt(this.height_/2,10),parseInt(this.width_/2,10)],this.textColor_=c.textColor||"black",this.textSize_=c.textSize||11,this.textDecoration_=c.textDecoration||"none",this.fontWeight_=c.fontWeight||"bold",this.fontStyle_=c.fontStyle||"normal",this.fontFamily_=c.fontFamily||"Arial,sans-serif",this.backgroundPosition_=c.backgroundPosition||"0 0"},ClusterIcon.prototype.setCenter=function(a){this.center_=a},ClusterIcon.prototype.createCss=function(a){var b=[];return this.cluster_.printable_||(b.push("background-image:url("+this.url_+");"),b.push("background-position:"+this.backgroundPosition_+";")),"object"==typeof this.anchor_?("number"==typeof this.anchor_[0]&&this.anchor_[0]>0&&this.anchor_[0]0&&this.anchor_[1]d)a.getMap()!==this.map_&&a.setMap(this.map_);else if(cb;b++)this.markers_[b].setMap(null);else a.setMap(null);return this.updateIcon_(),!0},Cluster.prototype.isMarkerInClusterBounds=function(a){return this.bounds_.contains(a.getPosition())},Cluster.prototype.calculateBounds_=function(){var a=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(a)},Cluster.prototype.updateIcon_=function(){var a=this.markers_.length,b=this.markerClusterer_.getMaxZoom();if(null!==b&&this.map_.getZoom()>b)return this.clusterIcon_.hide(),void 0;if(a0))for(a=0;ac&&(f=c,g=d));g&&g.isMarkerInClusterBounds(a)?g.addMarker(a):(d=new Cluster(this),d.addMarker(a),this.clusters_.push(d))},MarkerClusterer.prototype.createClusters_=function(a){var b,c,d,e=this;if(this.ready_){0===a&&(google.maps.event.trigger(this,"clusteringbegin",this),"undefined"!=typeof this.timerRefStatic&&(clearTimeout(this.timerRefStatic),delete this.timerRefStatic)),d=this.getMap().getZoom()>3?new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),this.getMap().getBounds().getNorthEast()):new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472,-178.48388434375),new google.maps.LatLng(-85.08136444384544,178.00048865625));var f=this.getExtendedBounds(d),g=Math.min(a+this.batchSize_,this.markers_.length);for(b=a;g>b;b++)c=this.markers_[b],!c.isAdded&&this.isMarkerInBounds_(c,f)&&(!this.ignoreHidden_||this.ignoreHidden_&&c.getVisible())&&this.addToClosestCluster_(c);ge;e++){var i=c.getAt(e);d=a[e],(i.lat()!=d.latitude||i.lng()!=d.longitude)&&c.setAt(e,new google.maps.LatLng(d.latitude,d.longitude))}for(;g>e;e++)d=a[e],c.push(new google.maps.LatLng(d.latitude,d.longitude));for(;f>e;e++)c.pop()}},!0);return function(){f&&(f(),f=null),g&&(g(),g=null)}}}]),angular.module("google-maps").factory("add-events",["$timeout",function(a){function b(b,c,d){return google.maps.event.addListener(b,c,function(){d.apply(this,arguments),a(function(){},!0)})}function c(a,c,d){if(d)return b(a,c,d);var e=[];return angular.forEach(c,function(c,d){console.log("adding listener: "+d+": "+c.toString()+" to : "+a),e.push(b(a,d,c))}),function(){angular.forEach(e,function(a){_.isFunction(a)&&a(),null!==a.e&&_.isFunction(a.e)&&a.e()}),e=null}}return c}]),angular.module("google-maps").directive("googleMap",["$log","$timeout",function(a,b){"use strict";function c(a){return angular.isDefined(a)&&null!==a&&a===!0||"1"===a||"y"===a||"true"===a}directives.api.utils.Logger.logger=a;var d={mapTypeId:google.maps.MapTypeId.ROADMAP};return{restrict:"ECMA",transclude:!0,replace:!1,template:'
',scope:{center:"=center",zoom:"=zoom",dragging:"=dragging",markers:"=markers",refresh:"&refresh",windows:"=windows",options:"=options",events:"=events",bounds:"=bounds"},controller:["$scope",function(a){this.getMap=function(){return a.map}}],link:function(e,f,g){if(!angular.isDefined(e.center)||!angular.isDefined(e.center.latitude)||!angular.isDefined(e.center.longitude))return a.error("angular-google-maps: could not find a valid center property"),void 0;if(!angular.isDefined(e.zoom))return a.error("angular-google-maps: map zoom property not set"),void 0;var h=angular.element(f);h.addClass("angular-google-map");var i={options:{}};if(g.options&&(i.options=e.options),g.type){var j=g.type.toUpperCase();google.maps.MapTypeId.hasOwnProperty(j)?i.mapTypeId=google.maps.MapTypeId[g.type.toUpperCase()]:a.error('angular-google-maps: invalid map type "'+g.type+'"')}var k=new google.maps.Map(h.find("div")[1],angular.extend({},d,i,{center:new google.maps.LatLng(e.center.latitude,e.center.longitude),draggable:c(g.draggable),zoom:e.zoom,bounds:e.bounds})),l=!1;google.maps.event.addListener(k,"dragstart",function(){l=!0,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"dragend",function(){l=!1,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"drag",function(){var a=k.center;b(function(){e.$apply(function(b){b.center.latitude=a.lat(),b.center.longitude=a.lng()})})}),google.maps.event.addListener(k,"zoom_changed",function(){e.zoom!=k.zoom&&b(function(){e.$apply(function(a){a.zoom=k.zoom})})});var m=!1;if(google.maps.event.addListener(k,"center_changed",function(){var a=k.center;m||b(function(){e.$apply(function(b){k.dragging||(b.center.latitude!==a.lat()&&(b.center.latitude=a.lat()),b.center.longitude!==a.lng()&&(b.center.longitude=a.lng()))})})}),google.maps.event.addListener(k,"idle",function(){var a=k.getBounds(),c=a.getNorthEast(),d=a.getSouthWest();b(function(){e.$apply(function(a){null!==a.bounds&&void 0!==a.bounds&&void 0!==a.bounds&&(a.bounds.northeast={latitude:c.lat(),longitude:c.lng()},a.bounds.southwest={latitude:d.lat(),longitude:d.lng()})})})}),angular.isDefined(e.events)&&null!==e.events&&angular.isObject(e.events)){var n=function(a){return function(){e.events[a].apply(e,[k,a,arguments])}};for(var o in e.events)e.events.hasOwnProperty(o)&&angular.isFunction(e.events[o])&&google.maps.event.addListener(k,o,n(o))}e.map=k,google.maps.event.trigger(k,"resize"),angular.isUndefined(e.refresh())||e.$watch("refresh()",function(a,b){if(a&&!b){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}}),e.$watch("center",function(a,b){if(a!==b){if(m=!0,!l){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}m=!1}},!0),e.$watch("zoom",function(a,b){a!==b&&k.setZoom(a)}),e.$watch("bounds",function(a,b){if(a!==b){var c=new google.maps.LatLng(a.northeast.latitude,a.northeast.longitude),d=new google.maps.LatLng(a.southwest.latitude,a.southwest.longitude),e=new google.maps.LatLngBounds(d,c);k.fitBounds(e)}})}}}]),angular.module("google-maps").directive("marker",["$timeout",function(a){return new directives.api.Marker(a)}]),angular.module("google-maps").directive("markers",["$timeout",function(a){return new directives.api.Markers(a)}]),angular.module("google-maps").directive("markerLabel",["$log","$timeout",function(a,b){return new directives.api.Label(b)}]),angular.module("google-maps").directive("polygon",["$log","$timeout",function(a,b){"use strict";function c(a){for(var b=0;bd;d++)oldValue=c.getAt(d),newValue=b[d],(oldValue.lat()!=newValue.latitude||oldValue.lng()!=newValue.longitude)&&c.setAt(d,new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;h>d;d++)newValue=b[d],c.push(new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;g>d;d++)c.pop();f(j.fit)&&e(a,c)}else i.setMap(null)},!0),h.$on("$destroy",function(){i.setMap(null),l(),l=null,m(),m=null,n(),n=null})}),void 0)}}}]),angular.module("google-maps").directive("polyline",["$log","$timeout","array-sync",function(a,b,c){"use strict";function d(a){for(var b=0;bb;b++)if(b in this&&this[b]===a)return b;return-1};this.ngGmapModule("oo",function(){var b;return b=["extended","included"],this.BaseObject=function(){function c(){}return c.extend=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this[d]=e);return null!=(f=c.extended)&&f.apply(0),this},c.include=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this.prototype[d]=e);return null!=(f=c.included)&&f.apply(0),this},c}()})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.ClustererMarkerManager=function(b){function d(b,c,e){this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var f;d.__super__.constructor.call(this),f=this,this.opt_options=e,this.clusterer=null!=e&&void 0===c?new MarkerClusterer(b,void 0,e):null!=e&&null!=c?new MarkerClusterer(b,c,e):new MarkerClusterer(b),this.clusterer.setIgnoreHidden(!0),this.$log=directives.api.utils.Logger,this.noDrawOnSingleAddRemoves=!0,this.$log.info(this)}return c(d,b),d.prototype.add=function(a){return this.clusterer.addMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.addMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.remove=function(a){return this.clusterer.removeMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.removeMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.draw=function(){return this.clusterer.repaint()},d.prototype.clear=function(){return this.clusterer.clearMarkers(),this.clusterer.repaint()},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.MarkerManager=function(b){function d(b){this.handleOptDraw=a(this.handleOptDraw,this),this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var c;d.__super__.constructor.call(this),c=this,this.gMap=b,this.gMarkers=[],this.$log=directives.api.utils.Logger,this.$log.info(this)}return c(d,b),d.prototype.add=function(a,b){return this.handleOptDraw(a,b,!0),this.gMarkers.push(a)},d.prototype.addMany=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.add(b));return e},d.prototype.remove=function(a,b){var c,d;return this.handleOptDraw(a,b,!1),b?(c=void 0,null!=this.gMarkers.indexOf?c=this.gMarkers.indexOf(a):(d=0,_.find(this.gMarkers,function(b){d+=1,b===a&&(c=d)})),null!=c?this.gMarkers.splice(c,1):void 0):void 0},d.prototype.removeMany=function(){var a,b,c,d,e;for(d=this.gMarkers,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.remove(a));return e},d.prototype.draw=function(){var a,b,c,d,e,f,g,h,i,j=this;for(a=[],h=this.gMarkers,c=function(b){return b.isDrawn?void 0:b.doAdd?b.setMap(j.gMap):a.push(b)},d=0,f=h.length;f>d;d++)b=h[d],c(b);for(i=[],e=0,g=a.length;g>e;e++)b=a[e],i.push(this.remove(b,!0));return i},d.prototype.clear=function(){var a,b,c,d;for(d=this.gMarkers,b=0,c=d.length;c>b;b++)a=d[b],a.setMap(null);return delete this.gMarkers,this.gMarkers=[]},d.prototype.handleOptDraw=function(a,b,c){return b===!0?(c?a.setMap(this.gMap):a.setMap(null),a.isDrawn=!0):(a.isDrawn=!1,a.doAdd=c)},d}(oo.BaseObject)})}.call(this),function(){this.ngGmapModule("directives.api.utils",function(){return this.AsyncProcessor={handleLargeArray:function(a,b,c,d,e,f){var g;return null==e&&(e=100),null==f&&(f=0),void 0===a||a.length<=0?(d(),void 0):(g=function(){var h,i;for(h=e,i=f;h--&&id;d++)b=f[d],c(b);return delete this.markers,this.markers=[],this.markersIndex=0,null!=this.gMarkerManager&&this.gMarkerManager.clear(),this.createMarkers(a)}},d.prototype.onWatch=function(a,b,c,d){return"models"!==a||c.length!==d.length?"options"===a&&null!=c?(this.DEFAULTS=c,void 0):this.reBuildMarkers(b):void 0},d.prototype.onDestroy=function(){var a,b,c,d;for(d=this.markers,b=0,c=d.length;c>b;b++)a=d[b],a.destroy();return null!=this.gMarkerManager?this.gMarkerManager.clear():void 0},d.prototype.fit=function(){var a,b;return this.mapCtrl&&null!=this.markers&&this.markers.length&&(a=new google.maps.LatLngBounds,b=!1,_.each(this.markers,function(c){return null!=c.gMarker?(b||(b=!0),a.extend(c.gMarker.getPosition())):void 0}),b)?this.mapCtrl.getMap().fitBounds(a):void 0},d}(directives.api.models.parent.IMarkerParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.models.parent",function(){return this.WindowsParentModel=function(b){function d(b,c,e,f,g,h,i,j,k){this.interpolateContent=a(this.interpolateContent,this),this.setChildScope=a(this.setChildScope,this),this.createWindow=a(this.createWindow,this),this.setContentKeys=a(this.setContentKeys,this),this.createChildScopesWindows=a(this.createChildScopesWindows,this),this.watchOurScope=a(this.watchOurScope,this),this.watchDestroy=a(this.watchDestroy,this),this.watchModels=a(this.watchModels,this),this.watch=a(this.watch,this);var l,m,n,o,p,q=this;for(d.__super__.constructor.call(this,b,c,e,f,g,h,i,j,k),m=this,this.$interpolate=k,this.windows=[],this.windwsIndex=0,this.scopePropNames=["show","coords","templateUrl","templateParameter","isIconVisibleOnClick","closeClick"],p=this.scopePropNames,n=0,o=p.length;o>n;n++)l=p[n],this[l+"Key"]=void 0;this.linked=new directives.api.utils.Linked(b,c,e,f),this.models=void 0,this.contentKeys=void 0,this.isIconVisibleOnClick=void 0,this.firstTime=!0,this.bigGulp=directives.api.utils.AsyncProcessor,this.$log.info(m),this.$timeout(function(){return q.watchOurScope(b),q.createChildScopesWindows()},50)}return c(d,b),d.prototype.watch=function(a,b,c){var d=this;return a.$watch(b,function(a,e){var f,g,h,i,j;if(a!==e){for(d[c]="function"==typeof a?a():a,i=d.windows,j=[],g=0,h=i.length;h>g;g++)f=i[g],j.push(function(a){return a.scope[b]="self"===d[c]?a:a[d[c]]}(f));return j}},!0)},d.prototype.watchModels=function(a){var b=this;return a.$watch("models",function(a,c){return a!==c&&a.length!==c.length?b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return b.windows=[],b.windowsIndex=0,b.createChildScopesWindows() +}):void 0},!0)},d.prototype.watchDestroy=function(a){var b=this;return a.$on("$destroy",function(){return b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return delete b.windows,b.windows=[],b.windowsIndex=0})})},d.prototype.watchOurScope=function(a){var b,c,d,e,f,g=this;for(e=this.scopePropNames,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(function(b){var c;return c=b+"Key",g[c]="function"==typeof a[b]?a[b]():a[b],g.watch(a,b,c)}(b));return f},d.prototype.createChildScopesWindows=function(){var a,b,c,d=this;return this.isIconVisibleOnClick=!0,angular.isDefined(this.linked.attrs.isiconvisibleonclick)&&(this.isIconVisibleOnClick=this.linked.scope.isIconVisibleOnClick),a=this.linked.ctrls[0].getMap(),b=this.linked.ctrls.length>1&&null!=this.linked.ctrls[1]?this.linked.ctrls[1].getMarkersScope():void 0,c=angular.isUndefined(this.linked.scope.models),c&&(void 0===b||void 0===b.markerModels&&void 0===b.models)?(this.$log.info("No models to create windows from! Need direct models or models derrived from markers!"),void 0):null!=a?null!=this.linked.scope.models?(this.models=this.linked.scope.models,this.firstTime&&(this.watchModels(this.linked.scope),this.watchDestroy(this.linked.scope)),this.setContentKeys(this.linked.scope.models),this.bigGulp.handleLargeArray(this.linked.scope.models,function(b){return d.createWindow(b,void 0,a)},function(){},function(){return d.firstTime=!1})):(this.models=b.models,this.firstTime&&(this.watchModels(b),this.watchDestroy(b)),this.setContentKeys(b.models),this.bigGulp.handleLargeArray(b.markerModels,function(b){return d.createWindow(b.model,b.gMarker,a)},function(){},function(){return d.firstTime=!1})):void 0},d.prototype.setContentKeys=function(a){return a.length>0?this.contentKeys=Object.keys(a[0]):void 0},d.prototype.createWindow=function(a,b,c){var d,e,f,g=this;return d=this.linked.scope.$new(!1),this.setChildScope(d,a),d.$watch("model",function(a,b){return a!==b?g.setChildScope(d,a):void 0},!0),f=this.interpolateContent(this.linked.element.html(),a),e=this.createWindowOptions(b,d,f,this.DEFAULTS),this.windows.push(new directives.api.models.child.WindowChildModel(d,e,this.isIconVisibleOnClick,c,b,this.$http,this.$templateCache,this.$compile,!0))},d.prototype.setChildScope=function(a,b){var c,d,e,f,g,h=this;for(g=this.scopePropNames,d=function(c){var d,e;return d=c+"Key",e="self"===h[d]?b:b[h[d]],e!==a[c]?a[c]=e:void 0},e=0,f=g.length;f>e;e++)c=g[e],d(c);return a.model=b},d.prototype.interpolateContent=function(a,b){var c,d,e,f,g,h;if(void 0!==this.contentKeys&&0!==this.contentKeys.length){for(c=this.$interpolate(a),d={},h=this.contentKeys,f=0,g=h.length;g>f;f++)e=h[f],d[e]=b[e];return c(d)}},d}(directives.api.models.parent.IWindowParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.ILabel=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.restrict="ECMA",this.replace=!0,this.template=void 0,this.require=void 0,this.transclude=!0,this.priority=-100,this.scope={labelContent:"=content",labelAnchor:"@anchor",labelClass:"@class",labelStyle:"=style"},this.$log=directives.api.utils.Logger,this.$timeout=b}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IMarker=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.replace=!0,this.require="^googleMap",this.priority=-1,this.transclude=!0,this.replace=!0,this.scope={coords:"=coords",icon:"=icon",click:"&click",options:"=options"}}return c(d,b),d.prototype.controller=["$scope","$element",function(){throw new Exception("Not Implemented!!")}],d.prototype.link=function(){throw new Exception("Not implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IWindow=function(b){function d(b,c,d,e){this.link=a(this.link,this);var f;f=this,this.restrict="ECMA",this.template=void 0,this.transclude=!0,this.priority=-100,this.require=void 0,this.replace=!0,this.scope={coords:"=coords",show:"=show",templateUrl:"=templateurl",templateParameter:"=templateparameter",isIconVisibleOnClick:"=isiconvisibleonclick",closeClick:"&closeclick",options:"=options"},this.$log=directives.api.utils.Logger,this.$timeout=b,this.$compile=c,this.$http=d,this.$templateCache=e}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Label=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.require="^marker",this.template='',this.$log.info(this)}return c(d,b),d.prototype.link=function(a,b,c,d){return this.$timeout(function(){var b,c;return c=d.getMarker(),null!=c&&(b=new directives.api.models.child.MarkerLabelChildModel(c,a)),a.$on("$destroy",function(){return b.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.ILabel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Labels=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.require=["^markers"],this.template='',this.scope.models="=models",this.$log.info(this)}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkersLabelsParentModel(a,b,c,d,this.$timeout)},d}(directives.api.ILabel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Layer=function(b){function d(b){this.link=a(this.link,this),this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.require="^googleMap",this.priority=-1,this.transclude=!0,this.template='',this.replace=!0,this.scope={show:"=show",type:"=type",namespace:"=namespace",options:"=options"}}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.LayerParentModel(a,b,c,d,this.$timeout)},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Marker=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a,b){return this.getMarker=function(){return b.data("instance")}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkerParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Markers=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.scope.models="=models",this.scope.doCluster="=docluster",this.scope.clusterOptions="=clusteroptions",this.scope.fit="=fit",this.$timeout=b,this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a){return this.getMarkersScope=function(){return a}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkersParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Window=function(b){function d(b,c,e,f){this.link=a(this.link,this);var g;d.__super__.constructor.call(this,b,c,e,f),g=this,this.require=["^googleMap","^?marker"],this.template='',this.$log.info(g)}return c(d,b),d.include(directives.api.utils.GmapUtil),d.prototype.link=function(a,b,c,d){var e=this;return this.$timeout(function(){var f,g,h,i,j,k;return g=!0,angular.isDefined(c.isiconvisibleonclick)&&(g=a.isIconVisibleOnClick),h=d[0].getMap(),i=d.length>1&&null!=d[1]?d[1].getMarker():void 0,f=null!=a.options?a.options:{},j=e.createWindowOptions(i,a,b.html(),f),null!=h&&(k=new directives.api.models.child.WindowChildModel(a,j,g,h,i,e.$http,e.$templateCache,e.$compile)),a.$on("$destroy",function(){return k.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.IWindow)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Windows=function(b){function d(b,c,e,f,g){this.link=a(this.link,this);var h;d.__super__.constructor.call(this,b,c,e,f),h=this,this.$interpolate=g,this.require=["^googleMap","^?markers"],this.template='',this.scope.models="=models",this.$log.info(h)}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.WindowsParentModel(a,b,c,d,this.$timeout,this.$compile,this.$http,this.$templateCache,this.$interpolate)},d}(directives.api.IWindow)})}.call(this),angular.module("google-maps").controller("PolylineDisplayController",["$scope",function(a){a.toggleStrokeColor=function(){a.stroke.color="#6060FB"==a.stroke.color?"red":"#6060FB"}}]),ClusterIcon.prototype.onAdd=function(){var a,b,c=this;this.div_=document.createElement("div"),this.div_.className=this.className_,this.visible_&&this.show(),this.getPanes().overlayMouseTarget.appendChild(this.div_),this.boundsChangedListener_=google.maps.event.addListener(this.getMap(),"bounds_changed",function(){b=a}),google.maps.event.addDomListener(this.div_,"mousedown",function(){a=!0,b=!1}),google.maps.event.addDomListener(this.div_,"click",function(d){if(a=!1,!b){var e,f,g=c.cluster_.getMarkerClusterer();google.maps.event.trigger(g,"click",c.cluster_),google.maps.event.trigger(g,"clusterclick",c.cluster_),g.getZoomOnClick()&&(f=g.getMaxZoom(),e=c.cluster_.getBounds(),g.getMap().fitBounds(e),setTimeout(function(){g.getMap().fitBounds(e),null!==f&&g.getMap().getZoom()>f&&g.getMap().setZoom(f+1)},100)),d.cancelBubble=!0,d.stopPropagation&&d.stopPropagation()}}),google.maps.event.addDomListener(this.div_,"mouseover",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseover",c.cluster_)}),google.maps.event.addDomListener(this.div_,"mouseout",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseout",c.cluster_)})},ClusterIcon.prototype.onRemove=function(){this.div_&&this.div_.parentNode&&(this.hide(),google.maps.event.removeListener(this.boundsChangedListener_),google.maps.event.clearInstanceListeners(this.div_),this.div_.parentNode.removeChild(this.div_),this.div_=null)},ClusterIcon.prototype.draw=function(){if(this.visible_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.top=a.y+"px",this.div_.style.left=a.x+"px"}},ClusterIcon.prototype.hide=function(){this.div_&&(this.div_.style.display="none"),this.visible_=!1},ClusterIcon.prototype.show=function(){if(this.div_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(a),this.div_.innerHTML=this.cluster_.printable_?"
"+this.sums_.text+"
":this.sums_.text,this.div_.title="undefined"==typeof this.sums_.title||""===this.sums_.title?this.cluster_.getMarkerClusterer().getTitle():this.sums_.title,this.div_.style.display=""}this.visible_=!0},ClusterIcon.prototype.useStyle=function(a){this.sums_=a;var b=Math.max(0,a.index-1);b=Math.min(this.styles_.length-1,b);var c=this.styles_[b];this.url_=c.url,this.height_=c.height,this.width_=c.width,this.anchor_=c.anchor,this.anchorIcon_=c.anchorIcon||[parseInt(this.height_/2,10),parseInt(this.width_/2,10)],this.textColor_=c.textColor||"black",this.textSize_=c.textSize||11,this.textDecoration_=c.textDecoration||"none",this.fontWeight_=c.fontWeight||"bold",this.fontStyle_=c.fontStyle||"normal",this.fontFamily_=c.fontFamily||"Arial,sans-serif",this.backgroundPosition_=c.backgroundPosition||"0 0"},ClusterIcon.prototype.setCenter=function(a){this.center_=a},ClusterIcon.prototype.createCss=function(a){var b=[];return this.cluster_.printable_||(b.push("background-image:url("+this.url_+");"),b.push("background-position:"+this.backgroundPosition_+";")),"object"==typeof this.anchor_?("number"==typeof this.anchor_[0]&&this.anchor_[0]>0&&this.anchor_[0]0&&this.anchor_[1]d)a.getMap()!==this.map_&&a.setMap(this.map_);else if(cb;b++)this.markers_[b].setMap(null);else a.setMap(null);return this.updateIcon_(),!0},Cluster.prototype.isMarkerInClusterBounds=function(a){return this.bounds_.contains(a.getPosition())},Cluster.prototype.calculateBounds_=function(){var a=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(a)},Cluster.prototype.updateIcon_=function(){var a=this.markers_.length,b=this.markerClusterer_.getMaxZoom();if(null!==b&&this.map_.getZoom()>b)return this.clusterIcon_.hide(),void 0;if(a0))for(a=0;ac&&(f=c,g=d));g&&g.isMarkerInClusterBounds(a)?g.addMarker(a):(d=new Cluster(this),d.addMarker(a),this.clusters_.push(d))},MarkerClusterer.prototype.createClusters_=function(a){var b,c,d,e=this;if(this.ready_){0===a&&(google.maps.event.trigger(this,"clusteringbegin",this),"undefined"!=typeof this.timerRefStatic&&(clearTimeout(this.timerRefStatic),delete this.timerRefStatic)),d=this.getMap().getZoom()>3?new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),this.getMap().getBounds().getNorthEast()):new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472,-178.48388434375),new google.maps.LatLng(-85.08136444384544,178.00048865625));var f=this.getExtendedBounds(d),g=Math.min(a+this.batchSize_,this.markers_.length);for(b=a;g>b;b++)c=this.markers_[b],!c.isAdded&&this.isMarkerInBounds_(c,f)&&(!this.ignoreHidden_||this.ignoreHidden_&&c.getVisible())&&this.addToClosestCluster_(c);ge;e++){var i=c.getAt(e);d=a[e],(i.lat()!=d.latitude||i.lng()!=d.longitude)&&c.setAt(e,new google.maps.LatLng(d.latitude,d.longitude))}for(;g>e;e++)d=a[e],c.push(new google.maps.LatLng(d.latitude,d.longitude));for(;f>e;e++)c.pop()}},!0);return function(){f&&(f(),f=null),g&&(g(),g=null)}}}]),angular.module("google-maps").factory("add-events",["$timeout",function(a){function b(b,c,d){return google.maps.event.addListener(b,c,function(){d.apply(this,arguments),a(function(){},!0)})}function c(a,c,d){if(d)return b(a,c,d);var e=[];return angular.forEach(c,function(c,d){console.log("adding listener: "+d+": "+c.toString()+" to : "+a),e.push(b(a,d,c))}),function(){angular.forEach(e,function(a){_.isFunction(a)&&a(),null!==a.e&&_.isFunction(a.e)&&a.e()}),e=null}}return c}]),angular.module("google-maps").directive("googleMap",["$log","$timeout",function(a,b){"use strict";function c(a){return angular.isDefined(a)&&null!==a&&a===!0||"1"===a||"y"===a||"true"===a}directives.api.utils.Logger.logger=a;var d={mapTypeId:google.maps.MapTypeId.ROADMAP};return{restrict:"ECMA",transclude:!0,replace:!1,template:'
',scope:{center:"=center",zoom:"=zoom",dragging:"=dragging",markers:"=markers",refresh:"&refresh",windows:"=windows",options:"=options",events:"=events",bounds:"=bounds"},controller:["$scope",function(a){this.getMap=function(){return a.map}}],link:function(e,f,g){if(!angular.isDefined(e.center)||!angular.isDefined(e.center.latitude)||!angular.isDefined(e.center.longitude))return a.error("angular-google-maps: could not find a valid center property"),void 0;if(!angular.isDefined(e.zoom))return a.error("angular-google-maps: map zoom property not set"),void 0;var h=angular.element(f);h.addClass("angular-google-map");var i={options:{}};if(g.options&&(i.options=e.options),g.type){var j=g.type.toUpperCase();google.maps.MapTypeId.hasOwnProperty(j)?i.mapTypeId=google.maps.MapTypeId[g.type.toUpperCase()]:a.error('angular-google-maps: invalid map type "'+g.type+'"')}var k=new google.maps.Map(h.find("div")[1],angular.extend({},d,i,{center:new google.maps.LatLng(e.center.latitude,e.center.longitude),draggable:c(g.draggable),zoom:e.zoom,bounds:e.bounds})),l=!1;google.maps.event.addListener(k,"dragstart",function(){l=!0,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"dragend",function(){l=!1,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"drag",function(){var a=k.center;b(function(){e.$apply(function(b){b.center.latitude=a.lat(),b.center.longitude=a.lng()})})}),google.maps.event.addListener(k,"zoom_changed",function(){e.zoom!=k.zoom&&b(function(){e.$apply(function(a){a.zoom=k.zoom})})});var m=!1;if(google.maps.event.addListener(k,"center_changed",function(){var a=k.center;m||b(function(){e.$apply(function(b){k.dragging||(b.center.latitude!==a.lat()&&(b.center.latitude=a.lat()),b.center.longitude!==a.lng()&&(b.center.longitude=a.lng()))})})}),google.maps.event.addListener(k,"idle",function(){var a=k.getBounds(),c=a.getNorthEast(),d=a.getSouthWest();b(function(){e.$apply(function(a){null!==a.bounds&&void 0!==a.bounds&&void 0!==a.bounds&&(a.bounds.northeast={latitude:c.lat(),longitude:c.lng()},a.bounds.southwest={latitude:d.lat(),longitude:d.lng()})})})}),angular.isDefined(e.events)&&null!==e.events&&angular.isObject(e.events)){var n=function(a){return function(){e.events[a].apply(e,[k,a,arguments])}};for(var o in e.events)e.events.hasOwnProperty(o)&&angular.isFunction(e.events[o])&&google.maps.event.addListener(k,o,n(o))}e.map=k,google.maps.event.trigger(k,"resize"),angular.isUndefined(e.refresh())||e.$watch("refresh()",function(a,b){if(a&&!b){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}}),e.$watch("center",function(a,b){if(a!==b){if(m=!0,!l){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}m=!1}},!0),e.$watch("zoom",function(a,b){a!==b&&k.setZoom(a)}),e.$watch("bounds",function(a,b){if(a!==b){var c=new google.maps.LatLng(a.northeast.latitude,a.northeast.longitude),d=new google.maps.LatLng(a.southwest.latitude,a.southwest.longitude),e=new google.maps.LatLngBounds(d,c);k.fitBounds(e)}})}}}]),angular.module("google-maps").directive("marker",["$timeout",function(a){return new directives.api.Marker(a)}]),angular.module("google-maps").directive("markers",["$timeout",function(a){return new directives.api.Markers(a)}]),angular.module("google-maps").directive("markerLabel",["$log","$timeout",function(a,b){return new directives.api.Label(b)}]),angular.module("google-maps").directive("markersLabels",["$timeout",function(a){return new directives.api.Labels(a)}]),angular.module("google-maps").directive("polygon",["$log","$timeout",function(a,b){"use strict";function c(a){for(var b=0;bd;d++)oldValue=c.getAt(d),newValue=b[d],(oldValue.lat()!=newValue.latitude||oldValue.lng()!=newValue.longitude)&&c.setAt(d,new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;h>d;d++)newValue=b[d],c.push(new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;g>d;d++)c.pop();f(j.fit)&&e(a,c)}else i.setMap(null)},!0),h.$on("$destroy",function(){i.setMap(null),l(),l=null,m(),m=null,n(),n=null})}),void 0)}}}]),angular.module("google-maps").directive("polyline",["$log","$timeout","array-sync",function(a,b,c){"use strict";function d(a){for(var b=0;bangular-google-maps example + @@ -59,6 +60,7 @@

angular-google-maps example

My marker will stay open when the window is popped up!

+
@@ -114,24 +116,6 @@

angular-google-maps example

- - -
- -
Layers diff --git a/src/coffee/directives/api/labels.coffee b/src/coffee/directives/api/labels.coffee new file mode 100644 index 000000000..e1daf29cb --- /dev/null +++ b/src/coffee/directives/api/labels.coffee @@ -0,0 +1,11 @@ +@ngGmapModule "directives.api", -> + class @Labels extends directives.api.ILabel + constructor: ($timeout) -> + super($timeout) + self = @ + @require= ['^markers'] + @template = '' + @scope.models = '=models' # defined at the element? + @$log.info(@) + link: (scope, element, attrs, ctrl) => + new directives.api.models.parent.MarkersLabelsParentModel(scope, element, attrs, ctrl, @$timeout) \ No newline at end of file diff --git a/src/coffee/directives/api/models/child/label-child-model.coffee b/src/coffee/directives/api/models/child/label-child-model.coffee index c70317d06..107c5c74c 100644 --- a/src/coffee/directives/api/models/child/label-child-model.coffee +++ b/src/coffee/directives/api/models/child/label-child-model.coffee @@ -4,6 +4,7 @@ constructor: (gMarker,opt_options) -> super() self = @ + @marker = gMarker @marker.set("labelContent" , opt_options.labelContent) @marker.set("labelAnchor" , @getLabelPositionPoint( opt_options.labelAnchor )) @@ -39,8 +40,6 @@ @marker.setMap( @marker.getMap() ) - @$log = directives.api.utils.Logger - @$log.info(@) getSharedCross:(crossUrl)=> @markerLabel.getSharedCross(crossUrl) setTitle:()=> diff --git a/src/coffee/directives/api/models/parent/markers-labels-parent-model.coffee b/src/coffee/directives/api/models/parent/markers-labels-parent-model.coffee new file mode 100644 index 000000000..c7c52c99e --- /dev/null +++ b/src/coffee/directives/api/models/parent/markers-labels-parent-model.coffee @@ -0,0 +1,50 @@ +@ngGmapModule "directives.api.models.parent", -> + class @MarkersLabelsParentModel extends oo.BaseObject + constructor: (@scope, @element, @attrs, @ctrls, @$timeout, @$compile, @$http, @$templateCache, @$interpolate) -> + self = @ + + @labels = [] + @bigGulp = directives.api.utils.AsyncProcessor + @markersScope = @ctrls[0].getMarkersScope() + + @$log = directives.api.utils.Logger + @$log.info(self) + + @$timeout( => + @createChildMarkerLabels() + @watchForRebuild(@markersScope) + ,50) + + createChildMarkerLabels: => + @bigGulp.handleLargeArray(@markersScope.markerModels, (marker) => + childScope = @scope.$new(false) + + ### + markers-labels directive will specify a content attribute which will used + as the label content. This attribute is expected to exist in the marker model + + TODO: this is dirty, need a better way to handle this + ### + content_key = childScope.labelContent + if marker.model[content_key] + childScope.labelContent = marker.model[content_key] + + # creates the label model + label = new directives.api.models.child.MarkerLabelChildModel(marker.gMarker, childScope) + @labels.push(label) + @scope.$on("$destroy", => + label.destroy() + ) + else + @$log.info("marker content not specified: " + content_key) + + ,(()->),() => #handle done callBack + @scope.labelModels = @labels + ) + + watchForRebuild:(scope) => + scope.$on('markersRebuild', (event, data) => + @$log.info('### REBUILD') + @labels = [] + @createChildMarkerLabels() + ) \ No newline at end of file diff --git a/src/coffee/directives/api/models/parent/markers-parent-model.coffee b/src/coffee/directives/api/models/parent/markers-parent-model.coffee index 0c4d2470b..85a51a6af 100644 --- a/src/coffee/directives/api/models/parent/markers-parent-model.coffee +++ b/src/coffee/directives/api/models/parent/markers-parent-model.coffee @@ -45,10 +45,12 @@ @markersIndex++ ,(()->) #nothing for pause ,() => #handle done callBack + scope.markerModels = @markers + scope.$broadcast('markersRebuild') + @gMarkerManager.draw() @fit() if angular.isDefined(@attrs.fit) and scope.fit? and scope.fit #put MarkerModels into local scope - scope.markerModels = @markers ) diff --git a/src/js/directives/labels.js b/src/js/directives/labels.js new file mode 100644 index 000000000..79dc5cfa5 --- /dev/null +++ b/src/js/directives/labels.js @@ -0,0 +1,43 @@ +/**! + * The MIT License + * + * Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * angular-google-maps + * https://github.com/nlaplante/angular-google-maps + * + * @authors Fernando Witzke, pigroxalot@gmail.com + */ + +/** + * Markers labels directive + * + * This directive is used to create marker labels for the markers directive + * + * {attribute content required} content of the label + * {attribute anchor required} string that contains the x and y point position of the label + * {attribute class optional} class to DOM object + * {attribute style optional} style for the label + */ + +angular.module('google-maps').directive('markersLabels', ['$timeout', function ($timeout) { + return new directives.api.Labels($timeout); +}]); From ee4a2d2e2451d089ecd3bb408452e9e297a66c42 Mon Sep 17 00:00:00 2001 From: Fernando Witzke Date: Sun, 10 Nov 2013 21:59:34 -0200 Subject: [PATCH 2/7] removing markers-labels directive --- src/coffee/directives/api/labels.coffee | 11 ---- .../parent/markers-labels-parent-model.coffee | 50 ------------------- src/js/directives/labels.js | 43 ---------------- 3 files changed, 104 deletions(-) delete mode 100644 src/coffee/directives/api/labels.coffee delete mode 100644 src/coffee/directives/api/models/parent/markers-labels-parent-model.coffee delete mode 100644 src/js/directives/labels.js diff --git a/src/coffee/directives/api/labels.coffee b/src/coffee/directives/api/labels.coffee deleted file mode 100644 index e1daf29cb..000000000 --- a/src/coffee/directives/api/labels.coffee +++ /dev/null @@ -1,11 +0,0 @@ -@ngGmapModule "directives.api", -> - class @Labels extends directives.api.ILabel - constructor: ($timeout) -> - super($timeout) - self = @ - @require= ['^markers'] - @template = '' - @scope.models = '=models' # defined at the element? - @$log.info(@) - link: (scope, element, attrs, ctrl) => - new directives.api.models.parent.MarkersLabelsParentModel(scope, element, attrs, ctrl, @$timeout) \ No newline at end of file diff --git a/src/coffee/directives/api/models/parent/markers-labels-parent-model.coffee b/src/coffee/directives/api/models/parent/markers-labels-parent-model.coffee deleted file mode 100644 index c7c52c99e..000000000 --- a/src/coffee/directives/api/models/parent/markers-labels-parent-model.coffee +++ /dev/null @@ -1,50 +0,0 @@ -@ngGmapModule "directives.api.models.parent", -> - class @MarkersLabelsParentModel extends oo.BaseObject - constructor: (@scope, @element, @attrs, @ctrls, @$timeout, @$compile, @$http, @$templateCache, @$interpolate) -> - self = @ - - @labels = [] - @bigGulp = directives.api.utils.AsyncProcessor - @markersScope = @ctrls[0].getMarkersScope() - - @$log = directives.api.utils.Logger - @$log.info(self) - - @$timeout( => - @createChildMarkerLabels() - @watchForRebuild(@markersScope) - ,50) - - createChildMarkerLabels: => - @bigGulp.handleLargeArray(@markersScope.markerModels, (marker) => - childScope = @scope.$new(false) - - ### - markers-labels directive will specify a content attribute which will used - as the label content. This attribute is expected to exist in the marker model - - TODO: this is dirty, need a better way to handle this - ### - content_key = childScope.labelContent - if marker.model[content_key] - childScope.labelContent = marker.model[content_key] - - # creates the label model - label = new directives.api.models.child.MarkerLabelChildModel(marker.gMarker, childScope) - @labels.push(label) - @scope.$on("$destroy", => - label.destroy() - ) - else - @$log.info("marker content not specified: " + content_key) - - ,(()->),() => #handle done callBack - @scope.labelModels = @labels - ) - - watchForRebuild:(scope) => - scope.$on('markersRebuild', (event, data) => - @$log.info('### REBUILD') - @labels = [] - @createChildMarkerLabels() - ) \ No newline at end of file diff --git a/src/js/directives/labels.js b/src/js/directives/labels.js deleted file mode 100644 index 79dc5cfa5..000000000 --- a/src/js/directives/labels.js +++ /dev/null @@ -1,43 +0,0 @@ -/**! - * The MIT License - * - * Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * angular-google-maps - * https://github.com/nlaplante/angular-google-maps - * - * @authors Fernando Witzke, pigroxalot@gmail.com - */ - -/** - * Markers labels directive - * - * This directive is used to create marker labels for the markers directive - * - * {attribute content required} content of the label - * {attribute anchor required} string that contains the x and y point position of the label - * {attribute class optional} class to DOM object - * {attribute style optional} style for the label - */ - -angular.module('google-maps').directive('markersLabels', ['$timeout', function ($timeout) { - return new directives.api.Labels($timeout); -}]); From 72c377f82f10581e2d94ad51d54821cc0c45659c Mon Sep 17 00:00:00 2001 From: Fernando Witzke Date: Sun, 10 Nov 2013 22:02:08 -0200 Subject: [PATCH 3/7] specifying label attributes on markers directive --- dist/angular-google-maps.js | 209 ++++-------------- dist/angular-google-maps.min.js | 8 +- example/example-controller.js | 8 +- example/example.html | 13 +- src/coffee/directives/api/markers.coffee | 5 + .../models/child/marker-child-model.coffee | 49 ++-- .../models/parent/markers-parent-model.coffee | 1 - .../directives/api/utils/gmap-util.coffee | 3 + 8 files changed, 88 insertions(+), 208 deletions(-) diff --git a/dist/angular-google-maps.js b/dist/angular-google-maps.js index 95a3d36e8..1c401d598 100644 --- a/dist/angular-google-maps.js +++ b/dist/angular-google-maps.js @@ -359,6 +359,9 @@ return this.GmapUtil = { getLabelPositionPoint: function(anchor) { var xPos, yPos; + if (anchor === void 0) { + return void 0; + } anchor = /^([\d\.]+)\s([\d\.]+)$/.exec(anchor); xPos = anchor[1]; yPos = anchor[2]; @@ -558,6 +561,15 @@ MarkerChildModel.include(directives.api.utils.GmapUtil); function MarkerChildModel(index, model, parentScope, gMap, $timeout, defaults, doClick, gMarkerManager) { + var self, + _this = this; + this.index = index; + this.model = model; + this.parentScope = parentScope; + this.gMap = gMap; + this.defaults = defaults; + this.doClick = doClick; + this.gMarkerManager = gMarkerManager; this.watchDestroy = __bind(this.watchDestroy, this); this.setOptions = __bind(this.setOptions, this); this.setIcon = __bind(this.setIcon, this); @@ -566,28 +578,24 @@ this.maybeSetScopeValue = __bind(this.maybeSetScopeValue, this); this.createMarker = __bind(this.createMarker, this); this.setMyScope = __bind(this.setMyScope, this); - var _this = this; - this.index = index; - this.gMarkerManager = gMarkerManager; - this.model = model; - this.defaults = defaults; - this.parentScope = parentScope; - this.iconKey = parentScope.icon; - this.coordsKey = parentScope.coords; - this.clickKey = parentScope.click(); - this.optionsKey = parentScope.options; - this.myScope = parentScope.$new(false); - this.myScope.model = model; - this.gMap = gMap; - this.setMyScope(model, void 0, true); - this.createMarker(model); - this.doClick = doClick; - this.$log = directives.api.utils.Logger; + self = this; + this.iconKey = this.parentScope.icon; + this.coordsKey = this.parentScope.coords; + this.clickKey = this.parentScope.click(); + this.labelContentKey = this.parentScope.labelContent; + this.optionsKey = this.parentScope.options; + this.labelOptionsKey = this.parentScope.labelOptions; + this.myScope = this.parentScope.$new(false); + this.myScope.model = this.model; + this.setMyScope(this.model, void 0, true); + this.createMarker(this.model); this.myScope.$watch('model', function(newValue, oldValue) { if (newValue !== oldValue) { return _this.setMyScope(newValue, oldValue); } }, true); + this.$log = directives.api.utils.Logger; + this.$log.info(self); this.watchDestroy(this.myScope); } @@ -600,6 +608,7 @@ } this.maybeSetScopeValue('icon', model, oldModel, this.iconKey, this.evalModelHandle, isInit, this.setIcon); this.maybeSetScopeValue('coords', model, oldModel, this.coordsKey, this.evalModelHandle, isInit, this.setCoords); + this.maybeSetScopeValue('labelContent', model, oldModel, this.labelContentKey, this.evalModelHandle, isInit); this.maybeSetScopeValue('click', model, oldModel, this.clickKey, this.evalModelHandle, isInit); return this.createMarker(model, oldModel, isInit); }; @@ -708,7 +717,14 @@ } this.opts = this.createMarkerOptions(scope.coords, scope.icon, scope.options); delete this.gMarker; - this.gMarker = new google.maps.Marker(this.opts); + if (scope.labelContent != null) { + this.opts.labelAnchor = this.getLabelPositionPoint(scope.labelAnchor); + this.opts.labelClass = scope.labelClass; + this.opts.labelContent = scope.labelContent; + this.gMarker = new MarkerWithLabel(this.opts); + } else { + this.gMarker = new google.maps.Marker(this.opts); + } this.gMarkerManager.add(this.gMarker); return google.maps.event.addListener(this.gMarker, 'click', function() { if (_this.doClick && (_this.myScope.click != null)) { @@ -1163,85 +1179,6 @@ }).call(this); -(function() { - var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - this.ngGmapModule("directives.api.models.parent", function() { - return this.MarkersLabelsParentModel = (function(_super) { - __extends(MarkersLabelsParentModel, _super); - - function MarkersLabelsParentModel(scope, element, attrs, ctrls, $timeout, $compile, $http, $templateCache, $interpolate) { - var self, - _this = this; - this.scope = scope; - this.element = element; - this.attrs = attrs; - this.ctrls = ctrls; - this.$timeout = $timeout; - this.$compile = $compile; - this.$http = $http; - this.$templateCache = $templateCache; - this.$interpolate = $interpolate; - this.watchForRebuild = __bind(this.watchForRebuild, this); - this.createChildMarkerLabels = __bind(this.createChildMarkerLabels, this); - self = this; - this.labels = []; - this.bigGulp = directives.api.utils.AsyncProcessor; - this.markersScope = this.ctrls[0].getMarkersScope(); - this.$log = directives.api.utils.Logger; - this.$log.info(self); - this.$timeout(function() { - _this.createChildMarkerLabels(); - return _this.watchForRebuild(_this.markersScope); - }, 50); - } - - MarkersLabelsParentModel.prototype.createChildMarkerLabels = function() { - var _this = this; - return this.bigGulp.handleLargeArray(this.markersScope.markerModels, function(marker) { - var childScope, content_key, label; - childScope = _this.scope.$new(false); - /* - markers-labels directive will specify a content attribute which will used - as the label content. This attribute is expected to exist in the marker model - - TODO: this is dirty, need a better way to handle this - */ - - content_key = childScope.labelContent; - if (marker.model[content_key]) { - childScope.labelContent = marker.model[content_key]; - label = new directives.api.models.child.MarkerLabelChildModel(marker.gMarker, childScope); - _this.labels.push(label); - return _this.scope.$on("$destroy", function() { - return label.destroy(); - }); - } else { - return _this.$log.info("marker content not specified: " + content_key); - } - }, (function() {}), function() { - return _this.scope.labelModels = _this.labels; - }); - }; - - MarkersLabelsParentModel.prototype.watchForRebuild = function(scope) { - var _this = this; - return scope.$on('markersRebuild', function(event, data) { - _this.$log.info('### REBUILD'); - _this.labels = []; - return _this.createChildMarkerLabels(); - }); - }; - - return MarkersLabelsParentModel; - - })(oo.BaseObject); - }); - -}).call(this); - (function() { var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __hasProp = {}.hasOwnProperty, @@ -1313,7 +1250,6 @@ return _this.markersIndex++; }, (function() {}), function() { scope.markerModels = _this.markers; - scope.$broadcast('markersRebuild'); _this.gMarkerManager.draw(); if (angular.isDefined(_this.attrs.fit) && (scope.fit != null) && scope.fit) { return _this.fit(); @@ -1836,37 +1772,6 @@ }).call(this); -(function() { - var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - this.ngGmapModule("directives.api", function() { - return this.Labels = (function(_super) { - __extends(Labels, _super); - - function Labels($timeout) { - this.link = __bind(this.link, this); - var self; - Labels.__super__.constructor.call(this, $timeout); - self = this; - this.require = ['^markers']; - this.template = ''; - this.scope.models = '=models'; - this.$log.info(this); - } - - Labels.prototype.link = function(scope, element, attrs, ctrl) { - return new directives.api.models.parent.MarkersLabelsParentModel(scope, element, attrs, ctrl, this.$timeout); - }; - - return Labels; - - })(directives.api.ILabel); - }); - -}).call(this); - (function() { var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __hasProp = {}.hasOwnProperty, @@ -1979,6 +1884,9 @@ not 1:1 in this setting. this.scope.doCluster = '=docluster'; this.scope.clusterOptions = '=clusteroptions'; this.scope.fit = '=fit'; + this.scope.labelContent = '=labelcontent'; + this.scope.labelAnchor = '@labelanchor'; + this.scope.labelClass = '@labelclass'; this.$timeout = $timeout; this.$log.info(this); } @@ -4866,49 +4774,6 @@ angular.module('google-maps').directive('markers', ['$timeout', function ($timeo angular.module('google-maps').directive('markerLabel', ['$log', '$timeout', function ($log, $timeout) { return new directives.api.Label($timeout); }]); -;/**! - * The MIT License - * - * Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * angular-google-maps - * https://github.com/nlaplante/angular-google-maps - * - * @authors Fernando Witzke, pigroxalot@gmail.com - */ - -/** - * Markers labels directive - * - * This directive is used to create marker labels for the markers directive - * - * {attribute content required} content of the label - * {attribute anchor required} string that contains the x and y point position of the label - * {attribute class optional} class to DOM object - * {attribute style optional} style for the label - */ - -angular.module('google-maps').directive('markersLabels', ['$timeout', function ($timeout) { - return new directives.api.Labels($timeout); -}]); ;/**! * The MIT License * diff --git a/dist/angular-google-maps.min.js b/dist/angular-google-maps.min.js index a78731ab7..e1a925c7b 100644 --- a/dist/angular-google-maps.min.js +++ b/dist/angular-google-maps.min.js @@ -1,7 +1,7 @@ -/*! angular-google-maps 0.0.0 2013-11-04 +/*! angular-google-maps 0.0.0 2013-11-10 * AngularJS directives for Google Maps * git: https://github.com/nlaplante/angular-google-maps.git */ -function ClusterIcon(a,b){a.getMarkerClusterer().extend(ClusterIcon,google.maps.OverlayView),this.cluster_=a,this.className_=a.getMarkerClusterer().getClusterClass(),this.styles_=b,this.center_=null,this.div_=null,this.sums_=null,this.visible_=!1,this.setMap(a.getMap())}function Cluster(a){this.markerClusterer_=a,this.map_=a.getMap(),this.gridSize_=a.getGridSize(),this.minClusterSize_=a.getMinimumClusterSize(),this.averageCenter_=a.getAverageCenter(),this.printable_=a.getPrintable(),this.markers_=[],this.center_=null,this.bounds_=null,this.clusterIcon_=new ClusterIcon(this,a.getStyles())}function MarkerClusterer(a,b,c){this.extend(MarkerClusterer,google.maps.OverlayView),b=b||[],c=c||{},this.markers_=[],this.clusters_=[],this.listeners_=[],this.activeMap_=null,this.ready_=!1,this.gridSize_=c.gridSize||60,this.minClusterSize_=c.minimumClusterSize||2,this.maxZoom_=c.maxZoom||null,this.styles_=c.styles||[],this.title_=c.title||"",this.zoomOnClick_=!0,void 0!==c.zoomOnClick&&(this.zoomOnClick_=c.zoomOnClick),this.averageCenter_=!1,void 0!==c.averageCenter&&(this.averageCenter_=c.averageCenter),this.ignoreHidden_=!1,void 0!==c.ignoreHidden&&(this.ignoreHidden_=c.ignoreHidden),this.printable_=!1,void 0!==c.printable&&(this.printable_=c.printable),this.imagePath_=c.imagePath||MarkerClusterer.IMAGE_PATH,this.imageExtension_=c.imageExtension||MarkerClusterer.IMAGE_EXTENSION,this.imageSizes_=c.imageSizes||MarkerClusterer.IMAGE_SIZES,this.calculator_=c.calculator||MarkerClusterer.CALCULATOR,this.batchSize_=c.batchSize||MarkerClusterer.BATCH_SIZE,this.batchSizeIE_=c.batchSizeIE||MarkerClusterer.BATCH_SIZE_IE,this.clusterClass_=c.clusterClass||"cluster",-1!==navigator.userAgent.toLowerCase().indexOf("msie")&&(this.batchSize_=this.batchSizeIE_),this.setupStyles_(),this.addMarkers(b,!0),this.setMap(a)}function inherits(a,b){function c(){}c.prototype=b.prototype,a.superClass_=b.prototype,a.prototype=new c,a.prototype.constructor=a}function MarkerLabel_(a,b){this.marker_=a,this.handCursorURL_=a.handCursorURL,this.labelDiv_=document.createElement("div"),this.labelDiv_.style.cssText="position: absolute; overflow: hidden;",this.eventDiv_=document.createElement("div"),this.eventDiv_.style.cssText=this.labelDiv_.style.cssText,this.eventDiv_.setAttribute("onselectstart","return false;"),this.eventDiv_.setAttribute("ondragstart","return false;"),this.crossDiv_=MarkerLabel_.getSharedCross(b)}function MarkerWithLabel(a){a=a||{},a.labelContent=a.labelContent||"",a.labelAnchor=a.labelAnchor||new google.maps.Point(0,0),a.labelClass=a.labelClass||"markerLabels",a.labelStyle=a.labelStyle||{},a.labelInBackground=a.labelInBackground||!1,"undefined"==typeof a.labelVisible&&(a.labelVisible=!0),"undefined"==typeof a.raiseOnDrag&&(a.raiseOnDrag=!0),"undefined"==typeof a.clickable&&(a.clickable=!0),"undefined"==typeof a.draggable&&(a.draggable=!1),"undefined"==typeof a.optimized&&(a.optimized=!1),a.crossImage=a.crossImage||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png",a.handCursor=a.handCursor||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur",a.optimized=!1,this.label=new MarkerLabel_(this,a.crossImage,a.handCursor),google.maps.Marker.apply(this,arguments)}!function(){var a=angular.module("google-maps",[]);a.factory("debounce",["$timeout",function(a){return function(b){var c=0;return function(){var d=this,e=arguments;c++;var f=function(a){return function(){return a===c?b.apply(d,e):void 0}}(c);return a(f,0,!0)}}}])}(),function(){this.ngGmapModule=function(a,b){var c,d;return"string"==typeof a&&(a=a.split(".")),c=this[d=a.shift()]||(this[d]={}),c.ngGmapModule||(c.ngGmapModule=this.ngGmapModule),a.length?c.ngGmapModule(a,b):b.call(c)}}.call(this),function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};this.ngGmapModule("oo",function(){var b;return b=["extended","included"],this.BaseObject=function(){function c(){}return c.extend=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this[d]=e);return null!=(f=c.extended)&&f.apply(0),this},c.include=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this.prototype[d]=e);return null!=(f=c.included)&&f.apply(0),this},c}()})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.ClustererMarkerManager=function(b){function d(b,c,e){this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var f;d.__super__.constructor.call(this),f=this,this.opt_options=e,this.clusterer=null!=e&&void 0===c?new MarkerClusterer(b,void 0,e):null!=e&&null!=c?new MarkerClusterer(b,c,e):new MarkerClusterer(b),this.clusterer.setIgnoreHidden(!0),this.$log=directives.api.utils.Logger,this.noDrawOnSingleAddRemoves=!0,this.$log.info(this)}return c(d,b),d.prototype.add=function(a){return this.clusterer.addMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.addMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.remove=function(a){return this.clusterer.removeMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.removeMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.draw=function(){return this.clusterer.repaint()},d.prototype.clear=function(){return this.clusterer.clearMarkers(),this.clusterer.repaint()},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.MarkerManager=function(b){function d(b){this.handleOptDraw=a(this.handleOptDraw,this),this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var c;d.__super__.constructor.call(this),c=this,this.gMap=b,this.gMarkers=[],this.$log=directives.api.utils.Logger,this.$log.info(this)}return c(d,b),d.prototype.add=function(a,b){return this.handleOptDraw(a,b,!0),this.gMarkers.push(a)},d.prototype.addMany=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.add(b));return e},d.prototype.remove=function(a,b){var c,d;return this.handleOptDraw(a,b,!1),b?(c=void 0,null!=this.gMarkers.indexOf?c=this.gMarkers.indexOf(a):(d=0,_.find(this.gMarkers,function(b){d+=1,b===a&&(c=d)})),null!=c?this.gMarkers.splice(c,1):void 0):void 0},d.prototype.removeMany=function(){var a,b,c,d,e;for(d=this.gMarkers,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.remove(a));return e},d.prototype.draw=function(){var a,b,c,d,e,f,g,h,i,j=this;for(a=[],h=this.gMarkers,c=function(b){return b.isDrawn?void 0:b.doAdd?b.setMap(j.gMap):a.push(b)},d=0,f=h.length;f>d;d++)b=h[d],c(b);for(i=[],e=0,g=a.length;g>e;e++)b=a[e],i.push(this.remove(b,!0));return i},d.prototype.clear=function(){var a,b,c,d;for(d=this.gMarkers,b=0,c=d.length;c>b;b++)a=d[b],a.setMap(null);return delete this.gMarkers,this.gMarkers=[]},d.prototype.handleOptDraw=function(a,b,c){return b===!0?(c?a.setMap(this.gMap):a.setMap(null),a.isDrawn=!0):(a.isDrawn=!1,a.doAdd=c)},d}(oo.BaseObject)})}.call(this),function(){this.ngGmapModule("directives.api.utils",function(){return this.AsyncProcessor={handleLargeArray:function(a,b,c,d,e,f){var g;return null==e&&(e=100),null==f&&(f=0),void 0===a||a.length<=0?(d(),void 0):(g=function(){var h,i;for(h=e,i=f;h--&&id;d++)b=f[d],c(b);return delete this.markers,this.markers=[],this.markersIndex=0,null!=this.gMarkerManager&&this.gMarkerManager.clear(),this.createMarkers(a)}},d.prototype.onWatch=function(a,b,c,d){return"models"!==a||c.length!==d.length?"options"===a&&null!=c?(this.DEFAULTS=c,void 0):this.reBuildMarkers(b):void 0},d.prototype.onDestroy=function(){var a,b,c,d;for(d=this.markers,b=0,c=d.length;c>b;b++)a=d[b],a.destroy();return null!=this.gMarkerManager?this.gMarkerManager.clear():void 0},d.prototype.fit=function(){var a,b;return this.mapCtrl&&null!=this.markers&&this.markers.length&&(a=new google.maps.LatLngBounds,b=!1,_.each(this.markers,function(c){return null!=c.gMarker?(b||(b=!0),a.extend(c.gMarker.getPosition())):void 0}),b)?this.mapCtrl.getMap().fitBounds(a):void 0},d}(directives.api.models.parent.IMarkerParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.models.parent",function(){return this.WindowsParentModel=function(b){function d(b,c,e,f,g,h,i,j,k){this.interpolateContent=a(this.interpolateContent,this),this.setChildScope=a(this.setChildScope,this),this.createWindow=a(this.createWindow,this),this.setContentKeys=a(this.setContentKeys,this),this.createChildScopesWindows=a(this.createChildScopesWindows,this),this.watchOurScope=a(this.watchOurScope,this),this.watchDestroy=a(this.watchDestroy,this),this.watchModels=a(this.watchModels,this),this.watch=a(this.watch,this);var l,m,n,o,p,q=this;for(d.__super__.constructor.call(this,b,c,e,f,g,h,i,j,k),m=this,this.$interpolate=k,this.windows=[],this.windwsIndex=0,this.scopePropNames=["show","coords","templateUrl","templateParameter","isIconVisibleOnClick","closeClick"],p=this.scopePropNames,n=0,o=p.length;o>n;n++)l=p[n],this[l+"Key"]=void 0;this.linked=new directives.api.utils.Linked(b,c,e,f),this.models=void 0,this.contentKeys=void 0,this.isIconVisibleOnClick=void 0,this.firstTime=!0,this.bigGulp=directives.api.utils.AsyncProcessor,this.$log.info(m),this.$timeout(function(){return q.watchOurScope(b),q.createChildScopesWindows()},50)}return c(d,b),d.prototype.watch=function(a,b,c){var d=this;return a.$watch(b,function(a,e){var f,g,h,i,j;if(a!==e){for(d[c]="function"==typeof a?a():a,i=d.windows,j=[],g=0,h=i.length;h>g;g++)f=i[g],j.push(function(a){return a.scope[b]="self"===d[c]?a:a[d[c]]}(f));return j}},!0)},d.prototype.watchModels=function(a){var b=this;return a.$watch("models",function(a,c){return a!==c&&a.length!==c.length?b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return b.windows=[],b.windowsIndex=0,b.createChildScopesWindows() -}):void 0},!0)},d.prototype.watchDestroy=function(a){var b=this;return a.$on("$destroy",function(){return b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return delete b.windows,b.windows=[],b.windowsIndex=0})})},d.prototype.watchOurScope=function(a){var b,c,d,e,f,g=this;for(e=this.scopePropNames,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(function(b){var c;return c=b+"Key",g[c]="function"==typeof a[b]?a[b]():a[b],g.watch(a,b,c)}(b));return f},d.prototype.createChildScopesWindows=function(){var a,b,c,d=this;return this.isIconVisibleOnClick=!0,angular.isDefined(this.linked.attrs.isiconvisibleonclick)&&(this.isIconVisibleOnClick=this.linked.scope.isIconVisibleOnClick),a=this.linked.ctrls[0].getMap(),b=this.linked.ctrls.length>1&&null!=this.linked.ctrls[1]?this.linked.ctrls[1].getMarkersScope():void 0,c=angular.isUndefined(this.linked.scope.models),c&&(void 0===b||void 0===b.markerModels&&void 0===b.models)?(this.$log.info("No models to create windows from! Need direct models or models derrived from markers!"),void 0):null!=a?null!=this.linked.scope.models?(this.models=this.linked.scope.models,this.firstTime&&(this.watchModels(this.linked.scope),this.watchDestroy(this.linked.scope)),this.setContentKeys(this.linked.scope.models),this.bigGulp.handleLargeArray(this.linked.scope.models,function(b){return d.createWindow(b,void 0,a)},function(){},function(){return d.firstTime=!1})):(this.models=b.models,this.firstTime&&(this.watchModels(b),this.watchDestroy(b)),this.setContentKeys(b.models),this.bigGulp.handleLargeArray(b.markerModels,function(b){return d.createWindow(b.model,b.gMarker,a)},function(){},function(){return d.firstTime=!1})):void 0},d.prototype.setContentKeys=function(a){return a.length>0?this.contentKeys=Object.keys(a[0]):void 0},d.prototype.createWindow=function(a,b,c){var d,e,f,g=this;return d=this.linked.scope.$new(!1),this.setChildScope(d,a),d.$watch("model",function(a,b){return a!==b?g.setChildScope(d,a):void 0},!0),f=this.interpolateContent(this.linked.element.html(),a),e=this.createWindowOptions(b,d,f,this.DEFAULTS),this.windows.push(new directives.api.models.child.WindowChildModel(d,e,this.isIconVisibleOnClick,c,b,this.$http,this.$templateCache,this.$compile,!0))},d.prototype.setChildScope=function(a,b){var c,d,e,f,g,h=this;for(g=this.scopePropNames,d=function(c){var d,e;return d=c+"Key",e="self"===h[d]?b:b[h[d]],e!==a[c]?a[c]=e:void 0},e=0,f=g.length;f>e;e++)c=g[e],d(c);return a.model=b},d.prototype.interpolateContent=function(a,b){var c,d,e,f,g,h;if(void 0!==this.contentKeys&&0!==this.contentKeys.length){for(c=this.$interpolate(a),d={},h=this.contentKeys,f=0,g=h.length;g>f;f++)e=h[f],d[e]=b[e];return c(d)}},d}(directives.api.models.parent.IWindowParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.ILabel=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.restrict="ECMA",this.replace=!0,this.template=void 0,this.require=void 0,this.transclude=!0,this.priority=-100,this.scope={labelContent:"=content",labelAnchor:"@anchor",labelClass:"@class",labelStyle:"=style"},this.$log=directives.api.utils.Logger,this.$timeout=b}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IMarker=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.replace=!0,this.require="^googleMap",this.priority=-1,this.transclude=!0,this.replace=!0,this.scope={coords:"=coords",icon:"=icon",click:"&click",options:"=options"}}return c(d,b),d.prototype.controller=["$scope","$element",function(){throw new Exception("Not Implemented!!")}],d.prototype.link=function(){throw new Exception("Not implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IWindow=function(b){function d(b,c,d,e){this.link=a(this.link,this);var f;f=this,this.restrict="ECMA",this.template=void 0,this.transclude=!0,this.priority=-100,this.require=void 0,this.replace=!0,this.scope={coords:"=coords",show:"=show",templateUrl:"=templateurl",templateParameter:"=templateparameter",isIconVisibleOnClick:"=isiconvisibleonclick",closeClick:"&closeclick",options:"=options"},this.$log=directives.api.utils.Logger,this.$timeout=b,this.$compile=c,this.$http=d,this.$templateCache=e}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Label=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.require="^marker",this.template='',this.$log.info(this)}return c(d,b),d.prototype.link=function(a,b,c,d){return this.$timeout(function(){var b,c;return c=d.getMarker(),null!=c&&(b=new directives.api.models.child.MarkerLabelChildModel(c,a)),a.$on("$destroy",function(){return b.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.ILabel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Labels=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.require=["^markers"],this.template='',this.scope.models="=models",this.$log.info(this)}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkersLabelsParentModel(a,b,c,d,this.$timeout)},d}(directives.api.ILabel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Layer=function(b){function d(b){this.link=a(this.link,this),this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.require="^googleMap",this.priority=-1,this.transclude=!0,this.template='',this.replace=!0,this.scope={show:"=show",type:"=type",namespace:"=namespace",options:"=options"}}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.LayerParentModel(a,b,c,d,this.$timeout)},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Marker=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a,b){return this.getMarker=function(){return b.data("instance")}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkerParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Markers=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.scope.models="=models",this.scope.doCluster="=docluster",this.scope.clusterOptions="=clusteroptions",this.scope.fit="=fit",this.$timeout=b,this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a){return this.getMarkersScope=function(){return a}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkersParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Window=function(b){function d(b,c,e,f){this.link=a(this.link,this);var g;d.__super__.constructor.call(this,b,c,e,f),g=this,this.require=["^googleMap","^?marker"],this.template='',this.$log.info(g)}return c(d,b),d.include(directives.api.utils.GmapUtil),d.prototype.link=function(a,b,c,d){var e=this;return this.$timeout(function(){var f,g,h,i,j,k;return g=!0,angular.isDefined(c.isiconvisibleonclick)&&(g=a.isIconVisibleOnClick),h=d[0].getMap(),i=d.length>1&&null!=d[1]?d[1].getMarker():void 0,f=null!=a.options?a.options:{},j=e.createWindowOptions(i,a,b.html(),f),null!=h&&(k=new directives.api.models.child.WindowChildModel(a,j,g,h,i,e.$http,e.$templateCache,e.$compile)),a.$on("$destroy",function(){return k.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.IWindow)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Windows=function(b){function d(b,c,e,f,g){this.link=a(this.link,this);var h;d.__super__.constructor.call(this,b,c,e,f),h=this,this.$interpolate=g,this.require=["^googleMap","^?markers"],this.template='',this.scope.models="=models",this.$log.info(h)}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.WindowsParentModel(a,b,c,d,this.$timeout,this.$compile,this.$http,this.$templateCache,this.$interpolate)},d}(directives.api.IWindow)})}.call(this),angular.module("google-maps").controller("PolylineDisplayController",["$scope",function(a){a.toggleStrokeColor=function(){a.stroke.color="#6060FB"==a.stroke.color?"red":"#6060FB"}}]),ClusterIcon.prototype.onAdd=function(){var a,b,c=this;this.div_=document.createElement("div"),this.div_.className=this.className_,this.visible_&&this.show(),this.getPanes().overlayMouseTarget.appendChild(this.div_),this.boundsChangedListener_=google.maps.event.addListener(this.getMap(),"bounds_changed",function(){b=a}),google.maps.event.addDomListener(this.div_,"mousedown",function(){a=!0,b=!1}),google.maps.event.addDomListener(this.div_,"click",function(d){if(a=!1,!b){var e,f,g=c.cluster_.getMarkerClusterer();google.maps.event.trigger(g,"click",c.cluster_),google.maps.event.trigger(g,"clusterclick",c.cluster_),g.getZoomOnClick()&&(f=g.getMaxZoom(),e=c.cluster_.getBounds(),g.getMap().fitBounds(e),setTimeout(function(){g.getMap().fitBounds(e),null!==f&&g.getMap().getZoom()>f&&g.getMap().setZoom(f+1)},100)),d.cancelBubble=!0,d.stopPropagation&&d.stopPropagation()}}),google.maps.event.addDomListener(this.div_,"mouseover",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseover",c.cluster_)}),google.maps.event.addDomListener(this.div_,"mouseout",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseout",c.cluster_)})},ClusterIcon.prototype.onRemove=function(){this.div_&&this.div_.parentNode&&(this.hide(),google.maps.event.removeListener(this.boundsChangedListener_),google.maps.event.clearInstanceListeners(this.div_),this.div_.parentNode.removeChild(this.div_),this.div_=null)},ClusterIcon.prototype.draw=function(){if(this.visible_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.top=a.y+"px",this.div_.style.left=a.x+"px"}},ClusterIcon.prototype.hide=function(){this.div_&&(this.div_.style.display="none"),this.visible_=!1},ClusterIcon.prototype.show=function(){if(this.div_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(a),this.div_.innerHTML=this.cluster_.printable_?"
"+this.sums_.text+"
":this.sums_.text,this.div_.title="undefined"==typeof this.sums_.title||""===this.sums_.title?this.cluster_.getMarkerClusterer().getTitle():this.sums_.title,this.div_.style.display=""}this.visible_=!0},ClusterIcon.prototype.useStyle=function(a){this.sums_=a;var b=Math.max(0,a.index-1);b=Math.min(this.styles_.length-1,b);var c=this.styles_[b];this.url_=c.url,this.height_=c.height,this.width_=c.width,this.anchor_=c.anchor,this.anchorIcon_=c.anchorIcon||[parseInt(this.height_/2,10),parseInt(this.width_/2,10)],this.textColor_=c.textColor||"black",this.textSize_=c.textSize||11,this.textDecoration_=c.textDecoration||"none",this.fontWeight_=c.fontWeight||"bold",this.fontStyle_=c.fontStyle||"normal",this.fontFamily_=c.fontFamily||"Arial,sans-serif",this.backgroundPosition_=c.backgroundPosition||"0 0"},ClusterIcon.prototype.setCenter=function(a){this.center_=a},ClusterIcon.prototype.createCss=function(a){var b=[];return this.cluster_.printable_||(b.push("background-image:url("+this.url_+");"),b.push("background-position:"+this.backgroundPosition_+";")),"object"==typeof this.anchor_?("number"==typeof this.anchor_[0]&&this.anchor_[0]>0&&this.anchor_[0]0&&this.anchor_[1]d)a.getMap()!==this.map_&&a.setMap(this.map_);else if(cb;b++)this.markers_[b].setMap(null);else a.setMap(null);return this.updateIcon_(),!0},Cluster.prototype.isMarkerInClusterBounds=function(a){return this.bounds_.contains(a.getPosition())},Cluster.prototype.calculateBounds_=function(){var a=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(a)},Cluster.prototype.updateIcon_=function(){var a=this.markers_.length,b=this.markerClusterer_.getMaxZoom();if(null!==b&&this.map_.getZoom()>b)return this.clusterIcon_.hide(),void 0;if(a0))for(a=0;ac&&(f=c,g=d));g&&g.isMarkerInClusterBounds(a)?g.addMarker(a):(d=new Cluster(this),d.addMarker(a),this.clusters_.push(d))},MarkerClusterer.prototype.createClusters_=function(a){var b,c,d,e=this;if(this.ready_){0===a&&(google.maps.event.trigger(this,"clusteringbegin",this),"undefined"!=typeof this.timerRefStatic&&(clearTimeout(this.timerRefStatic),delete this.timerRefStatic)),d=this.getMap().getZoom()>3?new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),this.getMap().getBounds().getNorthEast()):new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472,-178.48388434375),new google.maps.LatLng(-85.08136444384544,178.00048865625));var f=this.getExtendedBounds(d),g=Math.min(a+this.batchSize_,this.markers_.length);for(b=a;g>b;b++)c=this.markers_[b],!c.isAdded&&this.isMarkerInBounds_(c,f)&&(!this.ignoreHidden_||this.ignoreHidden_&&c.getVisible())&&this.addToClosestCluster_(c);ge;e++){var i=c.getAt(e);d=a[e],(i.lat()!=d.latitude||i.lng()!=d.longitude)&&c.setAt(e,new google.maps.LatLng(d.latitude,d.longitude))}for(;g>e;e++)d=a[e],c.push(new google.maps.LatLng(d.latitude,d.longitude));for(;f>e;e++)c.pop()}},!0);return function(){f&&(f(),f=null),g&&(g(),g=null)}}}]),angular.module("google-maps").factory("add-events",["$timeout",function(a){function b(b,c,d){return google.maps.event.addListener(b,c,function(){d.apply(this,arguments),a(function(){},!0)})}function c(a,c,d){if(d)return b(a,c,d);var e=[];return angular.forEach(c,function(c,d){console.log("adding listener: "+d+": "+c.toString()+" to : "+a),e.push(b(a,d,c))}),function(){angular.forEach(e,function(a){_.isFunction(a)&&a(),null!==a.e&&_.isFunction(a.e)&&a.e()}),e=null}}return c}]),angular.module("google-maps").directive("googleMap",["$log","$timeout",function(a,b){"use strict";function c(a){return angular.isDefined(a)&&null!==a&&a===!0||"1"===a||"y"===a||"true"===a}directives.api.utils.Logger.logger=a;var d={mapTypeId:google.maps.MapTypeId.ROADMAP};return{restrict:"ECMA",transclude:!0,replace:!1,template:'
',scope:{center:"=center",zoom:"=zoom",dragging:"=dragging",markers:"=markers",refresh:"&refresh",windows:"=windows",options:"=options",events:"=events",bounds:"=bounds"},controller:["$scope",function(a){this.getMap=function(){return a.map}}],link:function(e,f,g){if(!angular.isDefined(e.center)||!angular.isDefined(e.center.latitude)||!angular.isDefined(e.center.longitude))return a.error("angular-google-maps: could not find a valid center property"),void 0;if(!angular.isDefined(e.zoom))return a.error("angular-google-maps: map zoom property not set"),void 0;var h=angular.element(f);h.addClass("angular-google-map");var i={options:{}};if(g.options&&(i.options=e.options),g.type){var j=g.type.toUpperCase();google.maps.MapTypeId.hasOwnProperty(j)?i.mapTypeId=google.maps.MapTypeId[g.type.toUpperCase()]:a.error('angular-google-maps: invalid map type "'+g.type+'"')}var k=new google.maps.Map(h.find("div")[1],angular.extend({},d,i,{center:new google.maps.LatLng(e.center.latitude,e.center.longitude),draggable:c(g.draggable),zoom:e.zoom,bounds:e.bounds})),l=!1;google.maps.event.addListener(k,"dragstart",function(){l=!0,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"dragend",function(){l=!1,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"drag",function(){var a=k.center;b(function(){e.$apply(function(b){b.center.latitude=a.lat(),b.center.longitude=a.lng()})})}),google.maps.event.addListener(k,"zoom_changed",function(){e.zoom!=k.zoom&&b(function(){e.$apply(function(a){a.zoom=k.zoom})})});var m=!1;if(google.maps.event.addListener(k,"center_changed",function(){var a=k.center;m||b(function(){e.$apply(function(b){k.dragging||(b.center.latitude!==a.lat()&&(b.center.latitude=a.lat()),b.center.longitude!==a.lng()&&(b.center.longitude=a.lng()))})})}),google.maps.event.addListener(k,"idle",function(){var a=k.getBounds(),c=a.getNorthEast(),d=a.getSouthWest();b(function(){e.$apply(function(a){null!==a.bounds&&void 0!==a.bounds&&void 0!==a.bounds&&(a.bounds.northeast={latitude:c.lat(),longitude:c.lng()},a.bounds.southwest={latitude:d.lat(),longitude:d.lng()})})})}),angular.isDefined(e.events)&&null!==e.events&&angular.isObject(e.events)){var n=function(a){return function(){e.events[a].apply(e,[k,a,arguments])}};for(var o in e.events)e.events.hasOwnProperty(o)&&angular.isFunction(e.events[o])&&google.maps.event.addListener(k,o,n(o))}e.map=k,google.maps.event.trigger(k,"resize"),angular.isUndefined(e.refresh())||e.$watch("refresh()",function(a,b){if(a&&!b){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}}),e.$watch("center",function(a,b){if(a!==b){if(m=!0,!l){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}m=!1}},!0),e.$watch("zoom",function(a,b){a!==b&&k.setZoom(a)}),e.$watch("bounds",function(a,b){if(a!==b){var c=new google.maps.LatLng(a.northeast.latitude,a.northeast.longitude),d=new google.maps.LatLng(a.southwest.latitude,a.southwest.longitude),e=new google.maps.LatLngBounds(d,c);k.fitBounds(e)}})}}}]),angular.module("google-maps").directive("marker",["$timeout",function(a){return new directives.api.Marker(a)}]),angular.module("google-maps").directive("markers",["$timeout",function(a){return new directives.api.Markers(a)}]),angular.module("google-maps").directive("markerLabel",["$log","$timeout",function(a,b){return new directives.api.Label(b)}]),angular.module("google-maps").directive("markersLabels",["$timeout",function(a){return new directives.api.Labels(a)}]),angular.module("google-maps").directive("polygon",["$log","$timeout",function(a,b){"use strict";function c(a){for(var b=0;bd;d++)oldValue=c.getAt(d),newValue=b[d],(oldValue.lat()!=newValue.latitude||oldValue.lng()!=newValue.longitude)&&c.setAt(d,new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;h>d;d++)newValue=b[d],c.push(new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;g>d;d++)c.pop();f(j.fit)&&e(a,c)}else i.setMap(null)},!0),h.$on("$destroy",function(){i.setMap(null),l(),l=null,m(),m=null,n(),n=null})}),void 0)}}}]),angular.module("google-maps").directive("polyline",["$log","$timeout","array-sync",function(a,b,c){"use strict";function d(a){for(var b=0;bb;b++)if(b in this&&this[b]===a)return b;return-1};this.ngGmapModule("oo",function(){var b;return b=["extended","included"],this.BaseObject=function(){function c(){}return c.extend=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this[d]=e);return null!=(f=c.extended)&&f.apply(0),this},c.include=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this.prototype[d]=e);return null!=(f=c.included)&&f.apply(0),this},c}()})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.ClustererMarkerManager=function(b){function d(b,c,e){this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var f;d.__super__.constructor.call(this),f=this,this.opt_options=e,this.clusterer=null!=e&&void 0===c?new MarkerClusterer(b,void 0,e):null!=e&&null!=c?new MarkerClusterer(b,c,e):new MarkerClusterer(b),this.clusterer.setIgnoreHidden(!0),this.$log=directives.api.utils.Logger,this.noDrawOnSingleAddRemoves=!0,this.$log.info(this)}return c(d,b),d.prototype.add=function(a){return this.clusterer.addMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.addMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.remove=function(a){return this.clusterer.removeMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.removeMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.draw=function(){return this.clusterer.repaint()},d.prototype.clear=function(){return this.clusterer.clearMarkers(),this.clusterer.repaint()},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.MarkerManager=function(b){function d(b){this.handleOptDraw=a(this.handleOptDraw,this),this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var c;d.__super__.constructor.call(this),c=this,this.gMap=b,this.gMarkers=[],this.$log=directives.api.utils.Logger,this.$log.info(this)}return c(d,b),d.prototype.add=function(a,b){return this.handleOptDraw(a,b,!0),this.gMarkers.push(a)},d.prototype.addMany=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.add(b));return e},d.prototype.remove=function(a,b){var c,d;return this.handleOptDraw(a,b,!1),b?(c=void 0,null!=this.gMarkers.indexOf?c=this.gMarkers.indexOf(a):(d=0,_.find(this.gMarkers,function(b){d+=1,b===a&&(c=d)})),null!=c?this.gMarkers.splice(c,1):void 0):void 0},d.prototype.removeMany=function(){var a,b,c,d,e;for(d=this.gMarkers,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.remove(a));return e},d.prototype.draw=function(){var a,b,c,d,e,f,g,h,i,j=this;for(a=[],h=this.gMarkers,c=function(b){return b.isDrawn?void 0:b.doAdd?b.setMap(j.gMap):a.push(b)},d=0,f=h.length;f>d;d++)b=h[d],c(b);for(i=[],e=0,g=a.length;g>e;e++)b=a[e],i.push(this.remove(b,!0));return i},d.prototype.clear=function(){var a,b,c,d;for(d=this.gMarkers,b=0,c=d.length;c>b;b++)a=d[b],a.setMap(null);return delete this.gMarkers,this.gMarkers=[]},d.prototype.handleOptDraw=function(a,b,c){return b===!0?(c?a.setMap(this.gMap):a.setMap(null),a.isDrawn=!0):(a.isDrawn=!1,a.doAdd=c)},d}(oo.BaseObject)})}.call(this),function(){this.ngGmapModule("directives.api.utils",function(){return this.AsyncProcessor={handleLargeArray:function(a,b,c,d,e,f){var g;return null==e&&(e=100),null==f&&(f=0),void 0===a||a.length<=0?(d(),void 0):(g=function(){var h,i;for(h=e,i=f;h--&&id;d++)b=f[d],c(b);return delete this.markers,this.markers=[],this.markersIndex=0,null!=this.gMarkerManager&&this.gMarkerManager.clear(),this.createMarkers(a)}},d.prototype.onWatch=function(a,b,c,d){return"models"!==a||c.length!==d.length?"options"===a&&null!=c?(this.DEFAULTS=c,void 0):this.reBuildMarkers(b):void 0},d.prototype.onDestroy=function(){var a,b,c,d;for(d=this.markers,b=0,c=d.length;c>b;b++)a=d[b],a.destroy();return null!=this.gMarkerManager?this.gMarkerManager.clear():void 0},d.prototype.fit=function(){var a,b;return this.mapCtrl&&null!=this.markers&&this.markers.length&&(a=new google.maps.LatLngBounds,b=!1,_.each(this.markers,function(c){return null!=c.gMarker?(b||(b=!0),a.extend(c.gMarker.getPosition())):void 0}),b)?this.mapCtrl.getMap().fitBounds(a):void 0},d}(directives.api.models.parent.IMarkerParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.models.parent",function(){return this.WindowsParentModel=function(b){function d(b,c,e,f,g,h,i,j,k){this.interpolateContent=a(this.interpolateContent,this),this.setChildScope=a(this.setChildScope,this),this.createWindow=a(this.createWindow,this),this.setContentKeys=a(this.setContentKeys,this),this.createChildScopesWindows=a(this.createChildScopesWindows,this),this.watchOurScope=a(this.watchOurScope,this),this.watchDestroy=a(this.watchDestroy,this),this.watchModels=a(this.watchModels,this),this.watch=a(this.watch,this);var l,m,n,o,p,q=this;for(d.__super__.constructor.call(this,b,c,e,f,g,h,i,j,k),m=this,this.$interpolate=k,this.windows=[],this.windwsIndex=0,this.scopePropNames=["show","coords","templateUrl","templateParameter","isIconVisibleOnClick","closeClick"],p=this.scopePropNames,n=0,o=p.length;o>n;n++)l=p[n],this[l+"Key"]=void 0;this.linked=new directives.api.utils.Linked(b,c,e,f),this.models=void 0,this.contentKeys=void 0,this.isIconVisibleOnClick=void 0,this.firstTime=!0,this.bigGulp=directives.api.utils.AsyncProcessor,this.$log.info(m),this.$timeout(function(){return q.watchOurScope(b),q.createChildScopesWindows()},50)}return c(d,b),d.prototype.watch=function(a,b,c){var d=this;return a.$watch(b,function(a,e){var f,g,h,i,j;if(a!==e){for(d[c]="function"==typeof a?a():a,i=d.windows,j=[],g=0,h=i.length;h>g;g++)f=i[g],j.push(function(a){return a.scope[b]="self"===d[c]?a:a[d[c]]}(f));return j}},!0)},d.prototype.watchModels=function(a){var b=this;return a.$watch("models",function(a,c){return a!==c&&a.length!==c.length?b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return b.windows=[],b.windowsIndex=0,b.createChildScopesWindows()}):void 0},!0)},d.prototype.watchDestroy=function(a){var b=this;return a.$on("$destroy",function(){return b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return delete b.windows,b.windows=[],b.windowsIndex=0})})},d.prototype.watchOurScope=function(a){var b,c,d,e,f,g=this;for(e=this.scopePropNames,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(function(b){var c;return c=b+"Key",g[c]="function"==typeof a[b]?a[b]():a[b],g.watch(a,b,c)}(b));return f},d.prototype.createChildScopesWindows=function(){var a,b,c,d=this;return this.isIconVisibleOnClick=!0,angular.isDefined(this.linked.attrs.isiconvisibleonclick)&&(this.isIconVisibleOnClick=this.linked.scope.isIconVisibleOnClick),a=this.linked.ctrls[0].getMap(),b=this.linked.ctrls.length>1&&null!=this.linked.ctrls[1]?this.linked.ctrls[1].getMarkersScope():void 0,c=angular.isUndefined(this.linked.scope.models),c&&(void 0===b||void 0===b.markerModels&&void 0===b.models)?(this.$log.info("No models to create windows from! Need direct models or models derrived from markers!"),void 0):null!=a?null!=this.linked.scope.models?(this.models=this.linked.scope.models,this.firstTime&&(this.watchModels(this.linked.scope),this.watchDestroy(this.linked.scope)),this.setContentKeys(this.linked.scope.models),this.bigGulp.handleLargeArray(this.linked.scope.models,function(b){return d.createWindow(b,void 0,a) +},function(){},function(){return d.firstTime=!1})):(this.models=b.models,this.firstTime&&(this.watchModels(b),this.watchDestroy(b)),this.setContentKeys(b.models),this.bigGulp.handleLargeArray(b.markerModels,function(b){return d.createWindow(b.model,b.gMarker,a)},function(){},function(){return d.firstTime=!1})):void 0},d.prototype.setContentKeys=function(a){return a.length>0?this.contentKeys=Object.keys(a[0]):void 0},d.prototype.createWindow=function(a,b,c){var d,e,f,g=this;return d=this.linked.scope.$new(!1),this.setChildScope(d,a),d.$watch("model",function(a,b){return a!==b?g.setChildScope(d,a):void 0},!0),f=this.interpolateContent(this.linked.element.html(),a),e=this.createWindowOptions(b,d,f,this.DEFAULTS),this.windows.push(new directives.api.models.child.WindowChildModel(d,e,this.isIconVisibleOnClick,c,b,this.$http,this.$templateCache,this.$compile,!0))},d.prototype.setChildScope=function(a,b){var c,d,e,f,g,h=this;for(g=this.scopePropNames,d=function(c){var d,e;return d=c+"Key",e="self"===h[d]?b:b[h[d]],e!==a[c]?a[c]=e:void 0},e=0,f=g.length;f>e;e++)c=g[e],d(c);return a.model=b},d.prototype.interpolateContent=function(a,b){var c,d,e,f,g,h;if(void 0!==this.contentKeys&&0!==this.contentKeys.length){for(c=this.$interpolate(a),d={},h=this.contentKeys,f=0,g=h.length;g>f;f++)e=h[f],d[e]=b[e];return c(d)}},d}(directives.api.models.parent.IWindowParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.ILabel=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.restrict="ECMA",this.replace=!0,this.template=void 0,this.require=void 0,this.transclude=!0,this.priority=-100,this.scope={labelContent:"=content",labelAnchor:"@anchor",labelClass:"@class",labelStyle:"=style"},this.$log=directives.api.utils.Logger,this.$timeout=b}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IMarker=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.replace=!0,this.require="^googleMap",this.priority=-1,this.transclude=!0,this.replace=!0,this.scope={coords:"=coords",icon:"=icon",click:"&click",options:"=options"}}return c(d,b),d.prototype.controller=["$scope","$element",function(){throw new Exception("Not Implemented!!")}],d.prototype.link=function(){throw new Exception("Not implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IWindow=function(b){function d(b,c,d,e){this.link=a(this.link,this);var f;f=this,this.restrict="ECMA",this.template=void 0,this.transclude=!0,this.priority=-100,this.require=void 0,this.replace=!0,this.scope={coords:"=coords",show:"=show",templateUrl:"=templateurl",templateParameter:"=templateparameter",isIconVisibleOnClick:"=isiconvisibleonclick",closeClick:"&closeclick",options:"=options"},this.$log=directives.api.utils.Logger,this.$timeout=b,this.$compile=c,this.$http=d,this.$templateCache=e}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Label=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.require="^marker",this.template='',this.$log.info(this)}return c(d,b),d.prototype.link=function(a,b,c,d){return this.$timeout(function(){var b,c;return c=d.getMarker(),null!=c&&(b=new directives.api.models.child.MarkerLabelChildModel(c,a)),a.$on("$destroy",function(){return b.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.ILabel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Layer=function(b){function d(b){this.link=a(this.link,this),this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.require="^googleMap",this.priority=-1,this.transclude=!0,this.template='',this.replace=!0,this.scope={show:"=show",type:"=type",namespace:"=namespace",options:"=options"}}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.LayerParentModel(a,b,c,d,this.$timeout)},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Marker=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a,b){return this.getMarker=function(){return b.data("instance")}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkerParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Markers=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.scope.models="=models",this.scope.doCluster="=docluster",this.scope.clusterOptions="=clusteroptions",this.scope.fit="=fit",this.scope.labelContent="=labelcontent",this.scope.labelAnchor="@labelanchor",this.scope.labelClass="@labelclass",this.$timeout=b,this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a){return this.getMarkersScope=function(){return a}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkersParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Window=function(b){function d(b,c,e,f){this.link=a(this.link,this);var g;d.__super__.constructor.call(this,b,c,e,f),g=this,this.require=["^googleMap","^?marker"],this.template='',this.$log.info(g)}return c(d,b),d.include(directives.api.utils.GmapUtil),d.prototype.link=function(a,b,c,d){var e=this;return this.$timeout(function(){var f,g,h,i,j,k;return g=!0,angular.isDefined(c.isiconvisibleonclick)&&(g=a.isIconVisibleOnClick),h=d[0].getMap(),i=d.length>1&&null!=d[1]?d[1].getMarker():void 0,f=null!=a.options?a.options:{},j=e.createWindowOptions(i,a,b.html(),f),null!=h&&(k=new directives.api.models.child.WindowChildModel(a,j,g,h,i,e.$http,e.$templateCache,e.$compile)),a.$on("$destroy",function(){return k.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.IWindow)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Windows=function(b){function d(b,c,e,f,g){this.link=a(this.link,this);var h;d.__super__.constructor.call(this,b,c,e,f),h=this,this.$interpolate=g,this.require=["^googleMap","^?markers"],this.template='',this.scope.models="=models",this.$log.info(h)}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.WindowsParentModel(a,b,c,d,this.$timeout,this.$compile,this.$http,this.$templateCache,this.$interpolate)},d}(directives.api.IWindow)})}.call(this),angular.module("google-maps").controller("PolylineDisplayController",["$scope",function(a){a.toggleStrokeColor=function(){a.stroke.color="#6060FB"==a.stroke.color?"red":"#6060FB"}}]),ClusterIcon.prototype.onAdd=function(){var a,b,c=this;this.div_=document.createElement("div"),this.div_.className=this.className_,this.visible_&&this.show(),this.getPanes().overlayMouseTarget.appendChild(this.div_),this.boundsChangedListener_=google.maps.event.addListener(this.getMap(),"bounds_changed",function(){b=a}),google.maps.event.addDomListener(this.div_,"mousedown",function(){a=!0,b=!1}),google.maps.event.addDomListener(this.div_,"click",function(d){if(a=!1,!b){var e,f,g=c.cluster_.getMarkerClusterer();google.maps.event.trigger(g,"click",c.cluster_),google.maps.event.trigger(g,"clusterclick",c.cluster_),g.getZoomOnClick()&&(f=g.getMaxZoom(),e=c.cluster_.getBounds(),g.getMap().fitBounds(e),setTimeout(function(){g.getMap().fitBounds(e),null!==f&&g.getMap().getZoom()>f&&g.getMap().setZoom(f+1)},100)),d.cancelBubble=!0,d.stopPropagation&&d.stopPropagation()}}),google.maps.event.addDomListener(this.div_,"mouseover",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseover",c.cluster_)}),google.maps.event.addDomListener(this.div_,"mouseout",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseout",c.cluster_)})},ClusterIcon.prototype.onRemove=function(){this.div_&&this.div_.parentNode&&(this.hide(),google.maps.event.removeListener(this.boundsChangedListener_),google.maps.event.clearInstanceListeners(this.div_),this.div_.parentNode.removeChild(this.div_),this.div_=null)},ClusterIcon.prototype.draw=function(){if(this.visible_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.top=a.y+"px",this.div_.style.left=a.x+"px"}},ClusterIcon.prototype.hide=function(){this.div_&&(this.div_.style.display="none"),this.visible_=!1},ClusterIcon.prototype.show=function(){if(this.div_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(a),this.div_.innerHTML=this.cluster_.printable_?"
"+this.sums_.text+"
":this.sums_.text,this.div_.title="undefined"==typeof this.sums_.title||""===this.sums_.title?this.cluster_.getMarkerClusterer().getTitle():this.sums_.title,this.div_.style.display=""}this.visible_=!0},ClusterIcon.prototype.useStyle=function(a){this.sums_=a;var b=Math.max(0,a.index-1);b=Math.min(this.styles_.length-1,b);var c=this.styles_[b];this.url_=c.url,this.height_=c.height,this.width_=c.width,this.anchor_=c.anchor,this.anchorIcon_=c.anchorIcon||[parseInt(this.height_/2,10),parseInt(this.width_/2,10)],this.textColor_=c.textColor||"black",this.textSize_=c.textSize||11,this.textDecoration_=c.textDecoration||"none",this.fontWeight_=c.fontWeight||"bold",this.fontStyle_=c.fontStyle||"normal",this.fontFamily_=c.fontFamily||"Arial,sans-serif",this.backgroundPosition_=c.backgroundPosition||"0 0"},ClusterIcon.prototype.setCenter=function(a){this.center_=a},ClusterIcon.prototype.createCss=function(a){var b=[];return this.cluster_.printable_||(b.push("background-image:url("+this.url_+");"),b.push("background-position:"+this.backgroundPosition_+";")),"object"==typeof this.anchor_?("number"==typeof this.anchor_[0]&&this.anchor_[0]>0&&this.anchor_[0]0&&this.anchor_[1]d)a.getMap()!==this.map_&&a.setMap(this.map_);else if(cb;b++)this.markers_[b].setMap(null);else a.setMap(null);return this.updateIcon_(),!0},Cluster.prototype.isMarkerInClusterBounds=function(a){return this.bounds_.contains(a.getPosition())},Cluster.prototype.calculateBounds_=function(){var a=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(a)},Cluster.prototype.updateIcon_=function(){var a=this.markers_.length,b=this.markerClusterer_.getMaxZoom();if(null!==b&&this.map_.getZoom()>b)return this.clusterIcon_.hide(),void 0;if(a0))for(a=0;ac&&(f=c,g=d));g&&g.isMarkerInClusterBounds(a)?g.addMarker(a):(d=new Cluster(this),d.addMarker(a),this.clusters_.push(d))},MarkerClusterer.prototype.createClusters_=function(a){var b,c,d,e=this;if(this.ready_){0===a&&(google.maps.event.trigger(this,"clusteringbegin",this),"undefined"!=typeof this.timerRefStatic&&(clearTimeout(this.timerRefStatic),delete this.timerRefStatic)),d=this.getMap().getZoom()>3?new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),this.getMap().getBounds().getNorthEast()):new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472,-178.48388434375),new google.maps.LatLng(-85.08136444384544,178.00048865625));var f=this.getExtendedBounds(d),g=Math.min(a+this.batchSize_,this.markers_.length);for(b=a;g>b;b++)c=this.markers_[b],!c.isAdded&&this.isMarkerInBounds_(c,f)&&(!this.ignoreHidden_||this.ignoreHidden_&&c.getVisible())&&this.addToClosestCluster_(c);ge;e++){var i=c.getAt(e);d=a[e],(i.lat()!=d.latitude||i.lng()!=d.longitude)&&c.setAt(e,new google.maps.LatLng(d.latitude,d.longitude))}for(;g>e;e++)d=a[e],c.push(new google.maps.LatLng(d.latitude,d.longitude));for(;f>e;e++)c.pop()}},!0);return function(){f&&(f(),f=null),g&&(g(),g=null)}}}]),angular.module("google-maps").factory("add-events",["$timeout",function(a){function b(b,c,d){return google.maps.event.addListener(b,c,function(){d.apply(this,arguments),a(function(){},!0)})}function c(a,c,d){if(d)return b(a,c,d);var e=[];return angular.forEach(c,function(c,d){console.log("adding listener: "+d+": "+c.toString()+" to : "+a),e.push(b(a,d,c))}),function(){angular.forEach(e,function(a){_.isFunction(a)&&a(),null!==a.e&&_.isFunction(a.e)&&a.e()}),e=null}}return c}]),angular.module("google-maps").directive("googleMap",["$log","$timeout",function(a,b){"use strict";function c(a){return angular.isDefined(a)&&null!==a&&a===!0||"1"===a||"y"===a||"true"===a}directives.api.utils.Logger.logger=a;var d={mapTypeId:google.maps.MapTypeId.ROADMAP};return{restrict:"ECMA",transclude:!0,replace:!1,template:'
',scope:{center:"=center",zoom:"=zoom",dragging:"=dragging",markers:"=markers",refresh:"&refresh",windows:"=windows",options:"=options",events:"=events",bounds:"=bounds"},controller:["$scope",function(a){this.getMap=function(){return a.map}}],link:function(e,f,g){if(!angular.isDefined(e.center)||!angular.isDefined(e.center.latitude)||!angular.isDefined(e.center.longitude))return a.error("angular-google-maps: could not find a valid center property"),void 0;if(!angular.isDefined(e.zoom))return a.error("angular-google-maps: map zoom property not set"),void 0;var h=angular.element(f);h.addClass("angular-google-map");var i={options:{}};if(g.options&&(i.options=e.options),g.type){var j=g.type.toUpperCase();google.maps.MapTypeId.hasOwnProperty(j)?i.mapTypeId=google.maps.MapTypeId[g.type.toUpperCase()]:a.error('angular-google-maps: invalid map type "'+g.type+'"')}var k=new google.maps.Map(h.find("div")[1],angular.extend({},d,i,{center:new google.maps.LatLng(e.center.latitude,e.center.longitude),draggable:c(g.draggable),zoom:e.zoom,bounds:e.bounds})),l=!1;google.maps.event.addListener(k,"dragstart",function(){l=!0,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"dragend",function(){l=!1,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"drag",function(){var a=k.center;b(function(){e.$apply(function(b){b.center.latitude=a.lat(),b.center.longitude=a.lng()})})}),google.maps.event.addListener(k,"zoom_changed",function(){e.zoom!=k.zoom&&b(function(){e.$apply(function(a){a.zoom=k.zoom})})});var m=!1;if(google.maps.event.addListener(k,"center_changed",function(){var a=k.center;m||b(function(){e.$apply(function(b){k.dragging||(b.center.latitude!==a.lat()&&(b.center.latitude=a.lat()),b.center.longitude!==a.lng()&&(b.center.longitude=a.lng()))})})}),google.maps.event.addListener(k,"idle",function(){var a=k.getBounds(),c=a.getNorthEast(),d=a.getSouthWest();b(function(){e.$apply(function(a){null!==a.bounds&&void 0!==a.bounds&&void 0!==a.bounds&&(a.bounds.northeast={latitude:c.lat(),longitude:c.lng()},a.bounds.southwest={latitude:d.lat(),longitude:d.lng()})})})}),angular.isDefined(e.events)&&null!==e.events&&angular.isObject(e.events)){var n=function(a){return function(){e.events[a].apply(e,[k,a,arguments])}};for(var o in e.events)e.events.hasOwnProperty(o)&&angular.isFunction(e.events[o])&&google.maps.event.addListener(k,o,n(o))}e.map=k,google.maps.event.trigger(k,"resize"),angular.isUndefined(e.refresh())||e.$watch("refresh()",function(a,b){if(a&&!b){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}}),e.$watch("center",function(a,b){if(a!==b){if(m=!0,!l){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}m=!1}},!0),e.$watch("zoom",function(a,b){a!==b&&k.setZoom(a)}),e.$watch("bounds",function(a,b){if(a!==b){var c=new google.maps.LatLng(a.northeast.latitude,a.northeast.longitude),d=new google.maps.LatLng(a.southwest.latitude,a.southwest.longitude),e=new google.maps.LatLngBounds(d,c);k.fitBounds(e)}})}}}]),angular.module("google-maps").directive("marker",["$timeout",function(a){return new directives.api.Marker(a)}]),angular.module("google-maps").directive("markers",["$timeout",function(a){return new directives.api.Markers(a)}]),angular.module("google-maps").directive("markerLabel",["$log","$timeout",function(a,b){return new directives.api.Label(b)}]),angular.module("google-maps").directive("polygon",["$log","$timeout",function(a,b){"use strict";function c(a){for(var b=0;bd;d++)oldValue=c.getAt(d),newValue=b[d],(oldValue.lat()!=newValue.latitude||oldValue.lng()!=newValue.longitude)&&c.setAt(d,new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;h>d;d++)newValue=b[d],c.push(new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;g>d;d++)c.pop();f(j.fit)&&e(a,c)}else i.setMap(null)},!0),h.$on("$destroy",function(){i.setMap(null),l(),l=null,m(),m=null,n(),n=null})}),void 0)}}}]),angular.module("google-maps").directive("polyline",["$log","$timeout","array-sync",function(a,b,c){"use strict";function d(a){for(var b=0;bangular-google-maps example - - + + - + doCluster="map.doClusterRandomMarkers" clusterOptions="map.clusterOptions"> - - + +

This is an info window at {{ latitude | number:4 }}, {{ longitude | number:4 }}!

My marker will stay open when the window is popped up!

-
diff --git a/src/coffee/directives/api/markers.coffee b/src/coffee/directives/api/markers.coffee index 5b4c7bb5d..e478ea547 100644 --- a/src/coffee/directives/api/markers.coffee +++ b/src/coffee/directives/api/markers.coffee @@ -15,10 +15,15 @@ not 1:1 in this setting. super($timeout) self = @ @template = '' + @scope.models = '=models' @scope.doCluster= '=docluster' @scope.clusterOptions= '=clusteroptions' @scope.fit= '=fit' + @scope.labelContent= '=labelcontent' + @scope.labelAnchor= '@labelanchor' + @scope.labelClass= '@labelclass' + @$timeout = $timeout @$log.info(@) diff --git a/src/coffee/directives/api/models/child/marker-child-model.coffee b/src/coffee/directives/api/models/child/marker-child-model.coffee index e3c442d45..44d3b2a8e 100644 --- a/src/coffee/directives/api/models/child/marker-child-model.coffee +++ b/src/coffee/directives/api/models/child/marker-child-model.coffee @@ -1,33 +1,34 @@ @ngGmapModule "directives.api.models.child", -> class @MarkerChildModel extends oo.BaseObject @include directives.api.utils.GmapUtil - constructor:(index,model,parentScope,gMap,$timeout,defaults,doClick,gMarkerManager)-> - @index = index - @gMarkerManager = gMarkerManager - @model = model - @defaults = defaults - @parentScope = parentScope - @iconKey = parentScope.icon - @coordsKey = parentScope.coords - @clickKey = parentScope.click() - @optionsKey = parentScope.options - @myScope = parentScope.$new(false) - @myScope.model = model - @gMap = gMap - @setMyScope(model,undefined,true) - @createMarker(model) - @doClick = doClick - @$log = directives.api.utils.Logger + constructor:(@index, @model, @parentScope, @gMap, $timeout, @defaults, @doClick, @gMarkerManager)-> + self = @ + + @iconKey = @parentScope.icon + @coordsKey = @parentScope.coords + @clickKey = @parentScope.click() + @labelContentKey = @parentScope.labelContent + @optionsKey = @parentScope.options + @labelOptionsKey = @parentScope.labelOptions + @myScope = @parentScope.$new(false) + + @myScope.model = @model + @setMyScope(@model, undefined, true) + @createMarker(@model) + @myScope.$watch('model',(newValue, oldValue) => if (newValue != oldValue) @setMyScope(newValue,oldValue) ,true) + @$log = directives.api.utils.Logger + @$log.info(self) @watchDestroy(@myScope) setMyScope:(model, oldModel = undefined,isInit = false) => @maybeSetScopeValue('icon',model,oldModel,@iconKey,@evalModelHandle,isInit,@setIcon) @maybeSetScopeValue('coords',model,oldModel,@coordsKey,@evalModelHandle,isInit,@setCoords) + @maybeSetScopeValue('labelContent',model,oldModel,@labelContentKey,@evalModelHandle,isInit) @maybeSetScopeValue('click',model,oldModel,@clickKey,@evalModelHandle,isInit) @createMarker(model,oldModel,isInit) @@ -71,7 +72,7 @@ setCoords:(scope) => if(scope.$id != @myScope.$id or @gMarker == undefined) return - if (scope.coords?) + if (scope.coords?) @gMarker.setPosition(new google.maps.LatLng(scope.coords.latitude, scope.coords.longitude)) @gMarker.setVisible(scope.coords.latitude? and scope.coords.longitude?) @gMarkerManager.remove(@gMarker) @@ -97,9 +98,17 @@ delete @gMarker unless scope.coords ? scope.icon? scope.options? return - @opts = @createMarkerOptions(scope.coords,scope.icon,scope.options) + @opts = @createMarkerOptions(scope.coords, scope.icon, scope.options) + delete @gMarker - @gMarker = new google.maps.Marker(@opts) + if scope.labelContent? + @opts.labelAnchor= @getLabelPositionPoint(scope.labelAnchor) + @opts.labelClass= scope.labelClass + @opts.labelContent= scope.labelContent + @gMarker = new MarkerWithLabel(@opts) + else + @gMarker = new google.maps.Marker(@opts) + @gMarkerManager.add(@gMarker) google.maps.event.addListener(@gMarker, 'click', => if @doClick and @myScope.click? diff --git a/src/coffee/directives/api/models/parent/markers-parent-model.coffee b/src/coffee/directives/api/models/parent/markers-parent-model.coffee index 85a51a6af..09b7e86c8 100644 --- a/src/coffee/directives/api/models/parent/markers-parent-model.coffee +++ b/src/coffee/directives/api/models/parent/markers-parent-model.coffee @@ -46,7 +46,6 @@ ,(()->) #nothing for pause ,() => #handle done callBack scope.markerModels = @markers - scope.$broadcast('markersRebuild') @gMarkerManager.draw() @fit() if angular.isDefined(@attrs.fit) and scope.fit? and scope.fit diff --git a/src/coffee/directives/api/utils/gmap-util.coffee b/src/coffee/directives/api/utils/gmap-util.coffee index fdf453451..f572e7c82 100644 --- a/src/coffee/directives/api/utils/gmap-util.coffee +++ b/src/coffee/directives/api/utils/gmap-util.coffee @@ -1,6 +1,9 @@ @ngGmapModule "directives.api.utils", -> @GmapUtil = getLabelPositionPoint:(anchor) -> + if anchor == undefined + return undefined + anchor = /^([\d\.]+)\s([\d\.]+)$/.exec(anchor) xPos = anchor[1] yPos = anchor[2] From 214e0b18cc270240c0d14b5d8336b3ff260e1416 Mon Sep 17 00:00:00 2001 From: Fernando Witzke Date: Sun, 10 Nov 2013 22:12:35 -0200 Subject: [PATCH 4/7] removing labels from Gruntfile --- Gruntfile.js | 1 - 1 file changed, 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index 39307fcbe..5614b2809 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -68,7 +68,6 @@ module.exports = function (grunt) { 'src/js/directives/marker.js', 'src/js/directives/markers.js', 'src/js/directives/label.js', - 'src/js/directives/labels.js', 'src/js/directives/polygon.js', 'src/js/directives/polyline.js', 'src/js/directives/window.js', From 2c5b62c6756c5038871096978ba878c69d8c7fd9 Mon Sep 17 00:00:00 2001 From: Fernando Witzke Date: Sun, 10 Nov 2013 23:58:27 -0200 Subject: [PATCH 5/7] moving markers assignment back --- .../directives/api/models/parent/markers-parent-model.coffee | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/coffee/directives/api/models/parent/markers-parent-model.coffee b/src/coffee/directives/api/models/parent/markers-parent-model.coffee index 09b7e86c8..0c4d2470b 100644 --- a/src/coffee/directives/api/models/parent/markers-parent-model.coffee +++ b/src/coffee/directives/api/models/parent/markers-parent-model.coffee @@ -45,11 +45,10 @@ @markersIndex++ ,(()->) #nothing for pause ,() => #handle done callBack - scope.markerModels = @markers - @gMarkerManager.draw() @fit() if angular.isDefined(@attrs.fit) and scope.fit? and scope.fit #put MarkerModels into local scope + scope.markerModels = @markers ) From f0e584c148f92ceb8916531fbbb495e275e6d2ee Mon Sep 17 00:00:00 2001 From: Fernando Witzke Date: Mon, 11 Nov 2013 00:05:43 -0200 Subject: [PATCH 6/7] extracting set label options function --- dist/angular-google-maps.js | 24 +++++++++++++------ dist/angular-google-maps.min.js | 4 ++-- .../models/child/marker-child-model.coffee | 16 +++++++++---- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/dist/angular-google-maps.js b/dist/angular-google-maps.js index 1c401d598..b9aa2a562 100644 --- a/dist/angular-google-maps.js +++ b/dist/angular-google-maps.js @@ -571,6 +571,8 @@ this.doClick = doClick; this.gMarkerManager = gMarkerManager; this.watchDestroy = __bind(this.watchDestroy, this); + this.setLabelOptions = __bind(this.setLabelOptions, this); + this.isLabelDefined = __bind(this.isLabelDefined, this); this.setOptions = __bind(this.setOptions, this); this.setIcon = __bind(this.setIcon, this); this.setCoords = __bind(this.setCoords, this); @@ -717,11 +719,8 @@ } this.opts = this.createMarkerOptions(scope.coords, scope.icon, scope.options); delete this.gMarker; - if (scope.labelContent != null) { - this.opts.labelAnchor = this.getLabelPositionPoint(scope.labelAnchor); - this.opts.labelClass = scope.labelClass; - this.opts.labelContent = scope.labelContent; - this.gMarker = new MarkerWithLabel(this.opts); + if (this.isLabelDefined(scope)) { + this.gMarker = new MarkerWithLabel(this.setLabelOptions(this.opts, scope)); } else { this.gMarker = new google.maps.Marker(this.opts); } @@ -733,6 +732,17 @@ }); }; + MarkerChildModel.prototype.isLabelDefined = function(scope) { + return scope.labelContent != null; + }; + + MarkerChildModel.prototype.setLabelOptions = function(opts, scope) { + opts.labelAnchor = this.getLabelPositionPoint(scope.labelAnchor); + opts.labelClass = scope.labelClass; + opts.labelContent = scope.labelContent; + return opts; + }; + MarkerChildModel.prototype.watchDestroy = function(scope) { var _this = this; return scope.$on("$destroy", function() { @@ -1249,11 +1259,11 @@ _this.markers.push(child); return _this.markersIndex++; }, (function() {}), function() { - scope.markerModels = _this.markers; _this.gMarkerManager.draw(); if (angular.isDefined(_this.attrs.fit) && (scope.fit != null) && scope.fit) { - return _this.fit(); + _this.fit(); } + return scope.markerModels = _this.markers; }); }; diff --git a/dist/angular-google-maps.min.js b/dist/angular-google-maps.min.js index e1a925c7b..4f0543791 100644 --- a/dist/angular-google-maps.min.js +++ b/dist/angular-google-maps.min.js @@ -1,7 +1,7 @@ -/*! angular-google-maps 0.0.0 2013-11-10 +/*! angular-google-maps 0.0.0 2013-11-11 * AngularJS directives for Google Maps * git: https://github.com/nlaplante/angular-google-maps.git */ -function ClusterIcon(a,b){a.getMarkerClusterer().extend(ClusterIcon,google.maps.OverlayView),this.cluster_=a,this.className_=a.getMarkerClusterer().getClusterClass(),this.styles_=b,this.center_=null,this.div_=null,this.sums_=null,this.visible_=!1,this.setMap(a.getMap())}function Cluster(a){this.markerClusterer_=a,this.map_=a.getMap(),this.gridSize_=a.getGridSize(),this.minClusterSize_=a.getMinimumClusterSize(),this.averageCenter_=a.getAverageCenter(),this.printable_=a.getPrintable(),this.markers_=[],this.center_=null,this.bounds_=null,this.clusterIcon_=new ClusterIcon(this,a.getStyles())}function MarkerClusterer(a,b,c){this.extend(MarkerClusterer,google.maps.OverlayView),b=b||[],c=c||{},this.markers_=[],this.clusters_=[],this.listeners_=[],this.activeMap_=null,this.ready_=!1,this.gridSize_=c.gridSize||60,this.minClusterSize_=c.minimumClusterSize||2,this.maxZoom_=c.maxZoom||null,this.styles_=c.styles||[],this.title_=c.title||"",this.zoomOnClick_=!0,void 0!==c.zoomOnClick&&(this.zoomOnClick_=c.zoomOnClick),this.averageCenter_=!1,void 0!==c.averageCenter&&(this.averageCenter_=c.averageCenter),this.ignoreHidden_=!1,void 0!==c.ignoreHidden&&(this.ignoreHidden_=c.ignoreHidden),this.printable_=!1,void 0!==c.printable&&(this.printable_=c.printable),this.imagePath_=c.imagePath||MarkerClusterer.IMAGE_PATH,this.imageExtension_=c.imageExtension||MarkerClusterer.IMAGE_EXTENSION,this.imageSizes_=c.imageSizes||MarkerClusterer.IMAGE_SIZES,this.calculator_=c.calculator||MarkerClusterer.CALCULATOR,this.batchSize_=c.batchSize||MarkerClusterer.BATCH_SIZE,this.batchSizeIE_=c.batchSizeIE||MarkerClusterer.BATCH_SIZE_IE,this.clusterClass_=c.clusterClass||"cluster",-1!==navigator.userAgent.toLowerCase().indexOf("msie")&&(this.batchSize_=this.batchSizeIE_),this.setupStyles_(),this.addMarkers(b,!0),this.setMap(a)}function inherits(a,b){function c(){}c.prototype=b.prototype,a.superClass_=b.prototype,a.prototype=new c,a.prototype.constructor=a}function MarkerLabel_(a,b){this.marker_=a,this.handCursorURL_=a.handCursorURL,this.labelDiv_=document.createElement("div"),this.labelDiv_.style.cssText="position: absolute; overflow: hidden;",this.eventDiv_=document.createElement("div"),this.eventDiv_.style.cssText=this.labelDiv_.style.cssText,this.eventDiv_.setAttribute("onselectstart","return false;"),this.eventDiv_.setAttribute("ondragstart","return false;"),this.crossDiv_=MarkerLabel_.getSharedCross(b)}function MarkerWithLabel(a){a=a||{},a.labelContent=a.labelContent||"",a.labelAnchor=a.labelAnchor||new google.maps.Point(0,0),a.labelClass=a.labelClass||"markerLabels",a.labelStyle=a.labelStyle||{},a.labelInBackground=a.labelInBackground||!1,"undefined"==typeof a.labelVisible&&(a.labelVisible=!0),"undefined"==typeof a.raiseOnDrag&&(a.raiseOnDrag=!0),"undefined"==typeof a.clickable&&(a.clickable=!0),"undefined"==typeof a.draggable&&(a.draggable=!1),"undefined"==typeof a.optimized&&(a.optimized=!1),a.crossImage=a.crossImage||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png",a.handCursor=a.handCursor||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur",a.optimized=!1,this.label=new MarkerLabel_(this,a.crossImage,a.handCursor),google.maps.Marker.apply(this,arguments)}!function(){var a=angular.module("google-maps",[]);a.factory("debounce",["$timeout",function(a){return function(b){var c=0;return function(){var d=this,e=arguments;c++;var f=function(a){return function(){return a===c?b.apply(d,e):void 0}}(c);return a(f,0,!0)}}}])}(),function(){this.ngGmapModule=function(a,b){var c,d;return"string"==typeof a&&(a=a.split(".")),c=this[d=a.shift()]||(this[d]={}),c.ngGmapModule||(c.ngGmapModule=this.ngGmapModule),a.length?c.ngGmapModule(a,b):b.call(c)}}.call(this),function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};this.ngGmapModule("oo",function(){var b;return b=["extended","included"],this.BaseObject=function(){function c(){}return c.extend=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this[d]=e);return null!=(f=c.extended)&&f.apply(0),this},c.include=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this.prototype[d]=e);return null!=(f=c.included)&&f.apply(0),this},c}()})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.ClustererMarkerManager=function(b){function d(b,c,e){this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var f;d.__super__.constructor.call(this),f=this,this.opt_options=e,this.clusterer=null!=e&&void 0===c?new MarkerClusterer(b,void 0,e):null!=e&&null!=c?new MarkerClusterer(b,c,e):new MarkerClusterer(b),this.clusterer.setIgnoreHidden(!0),this.$log=directives.api.utils.Logger,this.noDrawOnSingleAddRemoves=!0,this.$log.info(this)}return c(d,b),d.prototype.add=function(a){return this.clusterer.addMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.addMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.remove=function(a){return this.clusterer.removeMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.removeMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.draw=function(){return this.clusterer.repaint()},d.prototype.clear=function(){return this.clusterer.clearMarkers(),this.clusterer.repaint()},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.MarkerManager=function(b){function d(b){this.handleOptDraw=a(this.handleOptDraw,this),this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var c;d.__super__.constructor.call(this),c=this,this.gMap=b,this.gMarkers=[],this.$log=directives.api.utils.Logger,this.$log.info(this)}return c(d,b),d.prototype.add=function(a,b){return this.handleOptDraw(a,b,!0),this.gMarkers.push(a)},d.prototype.addMany=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.add(b));return e},d.prototype.remove=function(a,b){var c,d;return this.handleOptDraw(a,b,!1),b?(c=void 0,null!=this.gMarkers.indexOf?c=this.gMarkers.indexOf(a):(d=0,_.find(this.gMarkers,function(b){d+=1,b===a&&(c=d)})),null!=c?this.gMarkers.splice(c,1):void 0):void 0},d.prototype.removeMany=function(){var a,b,c,d,e;for(d=this.gMarkers,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.remove(a));return e},d.prototype.draw=function(){var a,b,c,d,e,f,g,h,i,j=this;for(a=[],h=this.gMarkers,c=function(b){return b.isDrawn?void 0:b.doAdd?b.setMap(j.gMap):a.push(b)},d=0,f=h.length;f>d;d++)b=h[d],c(b);for(i=[],e=0,g=a.length;g>e;e++)b=a[e],i.push(this.remove(b,!0));return i},d.prototype.clear=function(){var a,b,c,d;for(d=this.gMarkers,b=0,c=d.length;c>b;b++)a=d[b],a.setMap(null);return delete this.gMarkers,this.gMarkers=[]},d.prototype.handleOptDraw=function(a,b,c){return b===!0?(c?a.setMap(this.gMap):a.setMap(null),a.isDrawn=!0):(a.isDrawn=!1,a.doAdd=c)},d}(oo.BaseObject)})}.call(this),function(){this.ngGmapModule("directives.api.utils",function(){return this.AsyncProcessor={handleLargeArray:function(a,b,c,d,e,f){var g;return null==e&&(e=100),null==f&&(f=0),void 0===a||a.length<=0?(d(),void 0):(g=function(){var h,i;for(h=e,i=f;h--&&id;d++)b=f[d],c(b);return delete this.markers,this.markers=[],this.markersIndex=0,null!=this.gMarkerManager&&this.gMarkerManager.clear(),this.createMarkers(a)}},d.prototype.onWatch=function(a,b,c,d){return"models"!==a||c.length!==d.length?"options"===a&&null!=c?(this.DEFAULTS=c,void 0):this.reBuildMarkers(b):void 0},d.prototype.onDestroy=function(){var a,b,c,d;for(d=this.markers,b=0,c=d.length;c>b;b++)a=d[b],a.destroy();return null!=this.gMarkerManager?this.gMarkerManager.clear():void 0},d.prototype.fit=function(){var a,b;return this.mapCtrl&&null!=this.markers&&this.markers.length&&(a=new google.maps.LatLngBounds,b=!1,_.each(this.markers,function(c){return null!=c.gMarker?(b||(b=!0),a.extend(c.gMarker.getPosition())):void 0}),b)?this.mapCtrl.getMap().fitBounds(a):void 0},d}(directives.api.models.parent.IMarkerParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.models.parent",function(){return this.WindowsParentModel=function(b){function d(b,c,e,f,g,h,i,j,k){this.interpolateContent=a(this.interpolateContent,this),this.setChildScope=a(this.setChildScope,this),this.createWindow=a(this.createWindow,this),this.setContentKeys=a(this.setContentKeys,this),this.createChildScopesWindows=a(this.createChildScopesWindows,this),this.watchOurScope=a(this.watchOurScope,this),this.watchDestroy=a(this.watchDestroy,this),this.watchModels=a(this.watchModels,this),this.watch=a(this.watch,this);var l,m,n,o,p,q=this;for(d.__super__.constructor.call(this,b,c,e,f,g,h,i,j,k),m=this,this.$interpolate=k,this.windows=[],this.windwsIndex=0,this.scopePropNames=["show","coords","templateUrl","templateParameter","isIconVisibleOnClick","closeClick"],p=this.scopePropNames,n=0,o=p.length;o>n;n++)l=p[n],this[l+"Key"]=void 0;this.linked=new directives.api.utils.Linked(b,c,e,f),this.models=void 0,this.contentKeys=void 0,this.isIconVisibleOnClick=void 0,this.firstTime=!0,this.bigGulp=directives.api.utils.AsyncProcessor,this.$log.info(m),this.$timeout(function(){return q.watchOurScope(b),q.createChildScopesWindows()},50)}return c(d,b),d.prototype.watch=function(a,b,c){var d=this;return a.$watch(b,function(a,e){var f,g,h,i,j;if(a!==e){for(d[c]="function"==typeof a?a():a,i=d.windows,j=[],g=0,h=i.length;h>g;g++)f=i[g],j.push(function(a){return a.scope[b]="self"===d[c]?a:a[d[c]]}(f));return j}},!0)},d.prototype.watchModels=function(a){var b=this;return a.$watch("models",function(a,c){return a!==c&&a.length!==c.length?b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return b.windows=[],b.windowsIndex=0,b.createChildScopesWindows()}):void 0},!0)},d.prototype.watchDestroy=function(a){var b=this;return a.$on("$destroy",function(){return b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return delete b.windows,b.windows=[],b.windowsIndex=0})})},d.prototype.watchOurScope=function(a){var b,c,d,e,f,g=this;for(e=this.scopePropNames,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(function(b){var c;return c=b+"Key",g[c]="function"==typeof a[b]?a[b]():a[b],g.watch(a,b,c)}(b));return f},d.prototype.createChildScopesWindows=function(){var a,b,c,d=this;return this.isIconVisibleOnClick=!0,angular.isDefined(this.linked.attrs.isiconvisibleonclick)&&(this.isIconVisibleOnClick=this.linked.scope.isIconVisibleOnClick),a=this.linked.ctrls[0].getMap(),b=this.linked.ctrls.length>1&&null!=this.linked.ctrls[1]?this.linked.ctrls[1].getMarkersScope():void 0,c=angular.isUndefined(this.linked.scope.models),c&&(void 0===b||void 0===b.markerModels&&void 0===b.models)?(this.$log.info("No models to create windows from! Need direct models or models derrived from markers!"),void 0):null!=a?null!=this.linked.scope.models?(this.models=this.linked.scope.models,this.firstTime&&(this.watchModels(this.linked.scope),this.watchDestroy(this.linked.scope)),this.setContentKeys(this.linked.scope.models),this.bigGulp.handleLargeArray(this.linked.scope.models,function(b){return d.createWindow(b,void 0,a) +function ClusterIcon(a,b){a.getMarkerClusterer().extend(ClusterIcon,google.maps.OverlayView),this.cluster_=a,this.className_=a.getMarkerClusterer().getClusterClass(),this.styles_=b,this.center_=null,this.div_=null,this.sums_=null,this.visible_=!1,this.setMap(a.getMap())}function Cluster(a){this.markerClusterer_=a,this.map_=a.getMap(),this.gridSize_=a.getGridSize(),this.minClusterSize_=a.getMinimumClusterSize(),this.averageCenter_=a.getAverageCenter(),this.printable_=a.getPrintable(),this.markers_=[],this.center_=null,this.bounds_=null,this.clusterIcon_=new ClusterIcon(this,a.getStyles())}function MarkerClusterer(a,b,c){this.extend(MarkerClusterer,google.maps.OverlayView),b=b||[],c=c||{},this.markers_=[],this.clusters_=[],this.listeners_=[],this.activeMap_=null,this.ready_=!1,this.gridSize_=c.gridSize||60,this.minClusterSize_=c.minimumClusterSize||2,this.maxZoom_=c.maxZoom||null,this.styles_=c.styles||[],this.title_=c.title||"",this.zoomOnClick_=!0,void 0!==c.zoomOnClick&&(this.zoomOnClick_=c.zoomOnClick),this.averageCenter_=!1,void 0!==c.averageCenter&&(this.averageCenter_=c.averageCenter),this.ignoreHidden_=!1,void 0!==c.ignoreHidden&&(this.ignoreHidden_=c.ignoreHidden),this.printable_=!1,void 0!==c.printable&&(this.printable_=c.printable),this.imagePath_=c.imagePath||MarkerClusterer.IMAGE_PATH,this.imageExtension_=c.imageExtension||MarkerClusterer.IMAGE_EXTENSION,this.imageSizes_=c.imageSizes||MarkerClusterer.IMAGE_SIZES,this.calculator_=c.calculator||MarkerClusterer.CALCULATOR,this.batchSize_=c.batchSize||MarkerClusterer.BATCH_SIZE,this.batchSizeIE_=c.batchSizeIE||MarkerClusterer.BATCH_SIZE_IE,this.clusterClass_=c.clusterClass||"cluster",-1!==navigator.userAgent.toLowerCase().indexOf("msie")&&(this.batchSize_=this.batchSizeIE_),this.setupStyles_(),this.addMarkers(b,!0),this.setMap(a)}function inherits(a,b){function c(){}c.prototype=b.prototype,a.superClass_=b.prototype,a.prototype=new c,a.prototype.constructor=a}function MarkerLabel_(a,b){this.marker_=a,this.handCursorURL_=a.handCursorURL,this.labelDiv_=document.createElement("div"),this.labelDiv_.style.cssText="position: absolute; overflow: hidden;",this.eventDiv_=document.createElement("div"),this.eventDiv_.style.cssText=this.labelDiv_.style.cssText,this.eventDiv_.setAttribute("onselectstart","return false;"),this.eventDiv_.setAttribute("ondragstart","return false;"),this.crossDiv_=MarkerLabel_.getSharedCross(b)}function MarkerWithLabel(a){a=a||{},a.labelContent=a.labelContent||"",a.labelAnchor=a.labelAnchor||new google.maps.Point(0,0),a.labelClass=a.labelClass||"markerLabels",a.labelStyle=a.labelStyle||{},a.labelInBackground=a.labelInBackground||!1,"undefined"==typeof a.labelVisible&&(a.labelVisible=!0),"undefined"==typeof a.raiseOnDrag&&(a.raiseOnDrag=!0),"undefined"==typeof a.clickable&&(a.clickable=!0),"undefined"==typeof a.draggable&&(a.draggable=!1),"undefined"==typeof a.optimized&&(a.optimized=!1),a.crossImage=a.crossImage||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png",a.handCursor=a.handCursor||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur",a.optimized=!1,this.label=new MarkerLabel_(this,a.crossImage,a.handCursor),google.maps.Marker.apply(this,arguments)}!function(){var a=angular.module("google-maps",[]);a.factory("debounce",["$timeout",function(a){return function(b){var c=0;return function(){var d=this,e=arguments;c++;var f=function(a){return function(){return a===c?b.apply(d,e):void 0}}(c);return a(f,0,!0)}}}])}(),function(){this.ngGmapModule=function(a,b){var c,d;return"string"==typeof a&&(a=a.split(".")),c=this[d=a.shift()]||(this[d]={}),c.ngGmapModule||(c.ngGmapModule=this.ngGmapModule),a.length?c.ngGmapModule(a,b):b.call(c)}}.call(this),function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};this.ngGmapModule("oo",function(){var b;return b=["extended","included"],this.BaseObject=function(){function c(){}return c.extend=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this[d]=e);return null!=(f=c.extended)&&f.apply(0),this},c.include=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this.prototype[d]=e);return null!=(f=c.included)&&f.apply(0),this},c}()})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.ClustererMarkerManager=function(b){function d(b,c,e){this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var f;d.__super__.constructor.call(this),f=this,this.opt_options=e,this.clusterer=null!=e&&void 0===c?new MarkerClusterer(b,void 0,e):null!=e&&null!=c?new MarkerClusterer(b,c,e):new MarkerClusterer(b),this.clusterer.setIgnoreHidden(!0),this.$log=directives.api.utils.Logger,this.noDrawOnSingleAddRemoves=!0,this.$log.info(this)}return c(d,b),d.prototype.add=function(a){return this.clusterer.addMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.addMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.remove=function(a){return this.clusterer.removeMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.removeMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.draw=function(){return this.clusterer.repaint()},d.prototype.clear=function(){return this.clusterer.clearMarkers(),this.clusterer.repaint()},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.MarkerManager=function(b){function d(b){this.handleOptDraw=a(this.handleOptDraw,this),this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var c;d.__super__.constructor.call(this),c=this,this.gMap=b,this.gMarkers=[],this.$log=directives.api.utils.Logger,this.$log.info(this)}return c(d,b),d.prototype.add=function(a,b){return this.handleOptDraw(a,b,!0),this.gMarkers.push(a)},d.prototype.addMany=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.add(b));return e},d.prototype.remove=function(a,b){var c,d;return this.handleOptDraw(a,b,!1),b?(c=void 0,null!=this.gMarkers.indexOf?c=this.gMarkers.indexOf(a):(d=0,_.find(this.gMarkers,function(b){d+=1,b===a&&(c=d)})),null!=c?this.gMarkers.splice(c,1):void 0):void 0},d.prototype.removeMany=function(){var a,b,c,d,e;for(d=this.gMarkers,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.remove(a));return e},d.prototype.draw=function(){var a,b,c,d,e,f,g,h,i,j=this;for(a=[],h=this.gMarkers,c=function(b){return b.isDrawn?void 0:b.doAdd?b.setMap(j.gMap):a.push(b)},d=0,f=h.length;f>d;d++)b=h[d],c(b);for(i=[],e=0,g=a.length;g>e;e++)b=a[e],i.push(this.remove(b,!0));return i},d.prototype.clear=function(){var a,b,c,d;for(d=this.gMarkers,b=0,c=d.length;c>b;b++)a=d[b],a.setMap(null);return delete this.gMarkers,this.gMarkers=[]},d.prototype.handleOptDraw=function(a,b,c){return b===!0?(c?a.setMap(this.gMap):a.setMap(null),a.isDrawn=!0):(a.isDrawn=!1,a.doAdd=c)},d}(oo.BaseObject)})}.call(this),function(){this.ngGmapModule("directives.api.utils",function(){return this.AsyncProcessor={handleLargeArray:function(a,b,c,d,e,f){var g;return null==e&&(e=100),null==f&&(f=0),void 0===a||a.length<=0?(d(),void 0):(g=function(){var h,i;for(h=e,i=f;h--&&id;d++)b=f[d],c(b);return delete this.markers,this.markers=[],this.markersIndex=0,null!=this.gMarkerManager&&this.gMarkerManager.clear(),this.createMarkers(a)}},d.prototype.onWatch=function(a,b,c,d){return"models"!==a||c.length!==d.length?"options"===a&&null!=c?(this.DEFAULTS=c,void 0):this.reBuildMarkers(b):void 0},d.prototype.onDestroy=function(){var a,b,c,d;for(d=this.markers,b=0,c=d.length;c>b;b++)a=d[b],a.destroy();return null!=this.gMarkerManager?this.gMarkerManager.clear():void 0},d.prototype.fit=function(){var a,b;return this.mapCtrl&&null!=this.markers&&this.markers.length&&(a=new google.maps.LatLngBounds,b=!1,_.each(this.markers,function(c){return null!=c.gMarker?(b||(b=!0),a.extend(c.gMarker.getPosition())):void 0}),b)?this.mapCtrl.getMap().fitBounds(a):void 0},d}(directives.api.models.parent.IMarkerParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.models.parent",function(){return this.WindowsParentModel=function(b){function d(b,c,e,f,g,h,i,j,k){this.interpolateContent=a(this.interpolateContent,this),this.setChildScope=a(this.setChildScope,this),this.createWindow=a(this.createWindow,this),this.setContentKeys=a(this.setContentKeys,this),this.createChildScopesWindows=a(this.createChildScopesWindows,this),this.watchOurScope=a(this.watchOurScope,this),this.watchDestroy=a(this.watchDestroy,this),this.watchModels=a(this.watchModels,this),this.watch=a(this.watch,this);var l,m,n,o,p,q=this;for(d.__super__.constructor.call(this,b,c,e,f,g,h,i,j,k),m=this,this.$interpolate=k,this.windows=[],this.windwsIndex=0,this.scopePropNames=["show","coords","templateUrl","templateParameter","isIconVisibleOnClick","closeClick"],p=this.scopePropNames,n=0,o=p.length;o>n;n++)l=p[n],this[l+"Key"]=void 0;this.linked=new directives.api.utils.Linked(b,c,e,f),this.models=void 0,this.contentKeys=void 0,this.isIconVisibleOnClick=void 0,this.firstTime=!0,this.bigGulp=directives.api.utils.AsyncProcessor,this.$log.info(m),this.$timeout(function(){return q.watchOurScope(b),q.createChildScopesWindows()},50)}return c(d,b),d.prototype.watch=function(a,b,c){var d=this;return a.$watch(b,function(a,e){var f,g,h,i,j;if(a!==e){for(d[c]="function"==typeof a?a():a,i=d.windows,j=[],g=0,h=i.length;h>g;g++)f=i[g],j.push(function(a){return a.scope[b]="self"===d[c]?a:a[d[c]]}(f));return j}},!0)},d.prototype.watchModels=function(a){var b=this;return a.$watch("models",function(a,c){return a!==c&&a.length!==c.length?b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return b.windows=[],b.windowsIndex=0,b.createChildScopesWindows()}):void 0},!0)},d.prototype.watchDestroy=function(a){var b=this;return a.$on("$destroy",function(){return b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return delete b.windows,b.windows=[],b.windowsIndex=0})})},d.prototype.watchOurScope=function(a){var b,c,d,e,f,g=this;for(e=this.scopePropNames,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(function(b){var c;return c=b+"Key",g[c]="function"==typeof a[b]?a[b]():a[b],g.watch(a,b,c)}(b));return f},d.prototype.createChildScopesWindows=function(){var a,b,c,d=this;return this.isIconVisibleOnClick=!0,angular.isDefined(this.linked.attrs.isiconvisibleonclick)&&(this.isIconVisibleOnClick=this.linked.scope.isIconVisibleOnClick),a=this.linked.ctrls[0].getMap(),b=this.linked.ctrls.length>1&&null!=this.linked.ctrls[1]?this.linked.ctrls[1].getMarkersScope():void 0,c=angular.isUndefined(this.linked.scope.models),c&&(void 0===b||void 0===b.markerModels&&void 0===b.models)?(this.$log.info("No models to create windows from! Need direct models or models derrived from markers!"),void 0):null!=a?null!=this.linked.scope.models?(this.models=this.linked.scope.models,this.firstTime&&(this.watchModels(this.linked.scope),this.watchDestroy(this.linked.scope)),this.setContentKeys(this.linked.scope.models),this.bigGulp.handleLargeArray(this.linked.scope.models,function(b){return d.createWindow(b,void 0,a) },function(){},function(){return d.firstTime=!1})):(this.models=b.models,this.firstTime&&(this.watchModels(b),this.watchDestroy(b)),this.setContentKeys(b.models),this.bigGulp.handleLargeArray(b.markerModels,function(b){return d.createWindow(b.model,b.gMarker,a)},function(){},function(){return d.firstTime=!1})):void 0},d.prototype.setContentKeys=function(a){return a.length>0?this.contentKeys=Object.keys(a[0]):void 0},d.prototype.createWindow=function(a,b,c){var d,e,f,g=this;return d=this.linked.scope.$new(!1),this.setChildScope(d,a),d.$watch("model",function(a,b){return a!==b?g.setChildScope(d,a):void 0},!0),f=this.interpolateContent(this.linked.element.html(),a),e=this.createWindowOptions(b,d,f,this.DEFAULTS),this.windows.push(new directives.api.models.child.WindowChildModel(d,e,this.isIconVisibleOnClick,c,b,this.$http,this.$templateCache,this.$compile,!0))},d.prototype.setChildScope=function(a,b){var c,d,e,f,g,h=this;for(g=this.scopePropNames,d=function(c){var d,e;return d=c+"Key",e="self"===h[d]?b:b[h[d]],e!==a[c]?a[c]=e:void 0},e=0,f=g.length;f>e;e++)c=g[e],d(c);return a.model=b},d.prototype.interpolateContent=function(a,b){var c,d,e,f,g,h;if(void 0!==this.contentKeys&&0!==this.contentKeys.length){for(c=this.$interpolate(a),d={},h=this.contentKeys,f=0,g=h.length;g>f;f++)e=h[f],d[e]=b[e];return c(d)}},d}(directives.api.models.parent.IWindowParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.ILabel=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.restrict="ECMA",this.replace=!0,this.template=void 0,this.require=void 0,this.transclude=!0,this.priority=-100,this.scope={labelContent:"=content",labelAnchor:"@anchor",labelClass:"@class",labelStyle:"=style"},this.$log=directives.api.utils.Logger,this.$timeout=b}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IMarker=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.replace=!0,this.require="^googleMap",this.priority=-1,this.transclude=!0,this.replace=!0,this.scope={coords:"=coords",icon:"=icon",click:"&click",options:"=options"}}return c(d,b),d.prototype.controller=["$scope","$element",function(){throw new Exception("Not Implemented!!")}],d.prototype.link=function(){throw new Exception("Not implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IWindow=function(b){function d(b,c,d,e){this.link=a(this.link,this);var f;f=this,this.restrict="ECMA",this.template=void 0,this.transclude=!0,this.priority=-100,this.require=void 0,this.replace=!0,this.scope={coords:"=coords",show:"=show",templateUrl:"=templateurl",templateParameter:"=templateparameter",isIconVisibleOnClick:"=isiconvisibleonclick",closeClick:"&closeclick",options:"=options"},this.$log=directives.api.utils.Logger,this.$timeout=b,this.$compile=c,this.$http=d,this.$templateCache=e}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Label=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.require="^marker",this.template='',this.$log.info(this)}return c(d,b),d.prototype.link=function(a,b,c,d){return this.$timeout(function(){var b,c;return c=d.getMarker(),null!=c&&(b=new directives.api.models.child.MarkerLabelChildModel(c,a)),a.$on("$destroy",function(){return b.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.ILabel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Layer=function(b){function d(b){this.link=a(this.link,this),this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.require="^googleMap",this.priority=-1,this.transclude=!0,this.template='',this.replace=!0,this.scope={show:"=show",type:"=type",namespace:"=namespace",options:"=options"}}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.LayerParentModel(a,b,c,d,this.$timeout)},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Marker=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a,b){return this.getMarker=function(){return b.data("instance")}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkerParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Markers=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.scope.models="=models",this.scope.doCluster="=docluster",this.scope.clusterOptions="=clusteroptions",this.scope.fit="=fit",this.scope.labelContent="=labelcontent",this.scope.labelAnchor="@labelanchor",this.scope.labelClass="@labelclass",this.$timeout=b,this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a){return this.getMarkersScope=function(){return a}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkersParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Window=function(b){function d(b,c,e,f){this.link=a(this.link,this);var g;d.__super__.constructor.call(this,b,c,e,f),g=this,this.require=["^googleMap","^?marker"],this.template='',this.$log.info(g)}return c(d,b),d.include(directives.api.utils.GmapUtil),d.prototype.link=function(a,b,c,d){var e=this;return this.$timeout(function(){var f,g,h,i,j,k;return g=!0,angular.isDefined(c.isiconvisibleonclick)&&(g=a.isIconVisibleOnClick),h=d[0].getMap(),i=d.length>1&&null!=d[1]?d[1].getMarker():void 0,f=null!=a.options?a.options:{},j=e.createWindowOptions(i,a,b.html(),f),null!=h&&(k=new directives.api.models.child.WindowChildModel(a,j,g,h,i,e.$http,e.$templateCache,e.$compile)),a.$on("$destroy",function(){return k.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.IWindow)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Windows=function(b){function d(b,c,e,f,g){this.link=a(this.link,this);var h;d.__super__.constructor.call(this,b,c,e,f),h=this,this.$interpolate=g,this.require=["^googleMap","^?markers"],this.template='',this.scope.models="=models",this.$log.info(h)}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.WindowsParentModel(a,b,c,d,this.$timeout,this.$compile,this.$http,this.$templateCache,this.$interpolate)},d}(directives.api.IWindow)})}.call(this),angular.module("google-maps").controller("PolylineDisplayController",["$scope",function(a){a.toggleStrokeColor=function(){a.stroke.color="#6060FB"==a.stroke.color?"red":"#6060FB"}}]),ClusterIcon.prototype.onAdd=function(){var a,b,c=this;this.div_=document.createElement("div"),this.div_.className=this.className_,this.visible_&&this.show(),this.getPanes().overlayMouseTarget.appendChild(this.div_),this.boundsChangedListener_=google.maps.event.addListener(this.getMap(),"bounds_changed",function(){b=a}),google.maps.event.addDomListener(this.div_,"mousedown",function(){a=!0,b=!1}),google.maps.event.addDomListener(this.div_,"click",function(d){if(a=!1,!b){var e,f,g=c.cluster_.getMarkerClusterer();google.maps.event.trigger(g,"click",c.cluster_),google.maps.event.trigger(g,"clusterclick",c.cluster_),g.getZoomOnClick()&&(f=g.getMaxZoom(),e=c.cluster_.getBounds(),g.getMap().fitBounds(e),setTimeout(function(){g.getMap().fitBounds(e),null!==f&&g.getMap().getZoom()>f&&g.getMap().setZoom(f+1)},100)),d.cancelBubble=!0,d.stopPropagation&&d.stopPropagation()}}),google.maps.event.addDomListener(this.div_,"mouseover",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseover",c.cluster_)}),google.maps.event.addDomListener(this.div_,"mouseout",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseout",c.cluster_)})},ClusterIcon.prototype.onRemove=function(){this.div_&&this.div_.parentNode&&(this.hide(),google.maps.event.removeListener(this.boundsChangedListener_),google.maps.event.clearInstanceListeners(this.div_),this.div_.parentNode.removeChild(this.div_),this.div_=null)},ClusterIcon.prototype.draw=function(){if(this.visible_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.top=a.y+"px",this.div_.style.left=a.x+"px"}},ClusterIcon.prototype.hide=function(){this.div_&&(this.div_.style.display="none"),this.visible_=!1},ClusterIcon.prototype.show=function(){if(this.div_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(a),this.div_.innerHTML=this.cluster_.printable_?"
"+this.sums_.text+"
":this.sums_.text,this.div_.title="undefined"==typeof this.sums_.title||""===this.sums_.title?this.cluster_.getMarkerClusterer().getTitle():this.sums_.title,this.div_.style.display=""}this.visible_=!0},ClusterIcon.prototype.useStyle=function(a){this.sums_=a;var b=Math.max(0,a.index-1);b=Math.min(this.styles_.length-1,b);var c=this.styles_[b];this.url_=c.url,this.height_=c.height,this.width_=c.width,this.anchor_=c.anchor,this.anchorIcon_=c.anchorIcon||[parseInt(this.height_/2,10),parseInt(this.width_/2,10)],this.textColor_=c.textColor||"black",this.textSize_=c.textSize||11,this.textDecoration_=c.textDecoration||"none",this.fontWeight_=c.fontWeight||"bold",this.fontStyle_=c.fontStyle||"normal",this.fontFamily_=c.fontFamily||"Arial,sans-serif",this.backgroundPosition_=c.backgroundPosition||"0 0"},ClusterIcon.prototype.setCenter=function(a){this.center_=a},ClusterIcon.prototype.createCss=function(a){var b=[];return this.cluster_.printable_||(b.push("background-image:url("+this.url_+");"),b.push("background-position:"+this.backgroundPosition_+";")),"object"==typeof this.anchor_?("number"==typeof this.anchor_[0]&&this.anchor_[0]>0&&this.anchor_[0]0&&this.anchor_[1]d)a.getMap()!==this.map_&&a.setMap(this.map_);else if(cb;b++)this.markers_[b].setMap(null);else a.setMap(null);return this.updateIcon_(),!0},Cluster.prototype.isMarkerInClusterBounds=function(a){return this.bounds_.contains(a.getPosition())},Cluster.prototype.calculateBounds_=function(){var a=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(a)},Cluster.prototype.updateIcon_=function(){var a=this.markers_.length,b=this.markerClusterer_.getMaxZoom();if(null!==b&&this.map_.getZoom()>b)return this.clusterIcon_.hide(),void 0;if(a0))for(a=0;ac&&(f=c,g=d));g&&g.isMarkerInClusterBounds(a)?g.addMarker(a):(d=new Cluster(this),d.addMarker(a),this.clusters_.push(d))},MarkerClusterer.prototype.createClusters_=function(a){var b,c,d,e=this;if(this.ready_){0===a&&(google.maps.event.trigger(this,"clusteringbegin",this),"undefined"!=typeof this.timerRefStatic&&(clearTimeout(this.timerRefStatic),delete this.timerRefStatic)),d=this.getMap().getZoom()>3?new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),this.getMap().getBounds().getNorthEast()):new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472,-178.48388434375),new google.maps.LatLng(-85.08136444384544,178.00048865625));var f=this.getExtendedBounds(d),g=Math.min(a+this.batchSize_,this.markers_.length);for(b=a;g>b;b++)c=this.markers_[b],!c.isAdded&&this.isMarkerInBounds_(c,f)&&(!this.ignoreHidden_||this.ignoreHidden_&&c.getVisible())&&this.addToClosestCluster_(c);ge;e++){var i=c.getAt(e);d=a[e],(i.lat()!=d.latitude||i.lng()!=d.longitude)&&c.setAt(e,new google.maps.LatLng(d.latitude,d.longitude))}for(;g>e;e++)d=a[e],c.push(new google.maps.LatLng(d.latitude,d.longitude));for(;f>e;e++)c.pop()}},!0);return function(){f&&(f(),f=null),g&&(g(),g=null)}}}]),angular.module("google-maps").factory("add-events",["$timeout",function(a){function b(b,c,d){return google.maps.event.addListener(b,c,function(){d.apply(this,arguments),a(function(){},!0)})}function c(a,c,d){if(d)return b(a,c,d);var e=[];return angular.forEach(c,function(c,d){console.log("adding listener: "+d+": "+c.toString()+" to : "+a),e.push(b(a,d,c))}),function(){angular.forEach(e,function(a){_.isFunction(a)&&a(),null!==a.e&&_.isFunction(a.e)&&a.e()}),e=null}}return c}]),angular.module("google-maps").directive("googleMap",["$log","$timeout",function(a,b){"use strict";function c(a){return angular.isDefined(a)&&null!==a&&a===!0||"1"===a||"y"===a||"true"===a}directives.api.utils.Logger.logger=a;var d={mapTypeId:google.maps.MapTypeId.ROADMAP};return{restrict:"ECMA",transclude:!0,replace:!1,template:'
',scope:{center:"=center",zoom:"=zoom",dragging:"=dragging",markers:"=markers",refresh:"&refresh",windows:"=windows",options:"=options",events:"=events",bounds:"=bounds"},controller:["$scope",function(a){this.getMap=function(){return a.map}}],link:function(e,f,g){if(!angular.isDefined(e.center)||!angular.isDefined(e.center.latitude)||!angular.isDefined(e.center.longitude))return a.error("angular-google-maps: could not find a valid center property"),void 0;if(!angular.isDefined(e.zoom))return a.error("angular-google-maps: map zoom property not set"),void 0;var h=angular.element(f);h.addClass("angular-google-map");var i={options:{}};if(g.options&&(i.options=e.options),g.type){var j=g.type.toUpperCase();google.maps.MapTypeId.hasOwnProperty(j)?i.mapTypeId=google.maps.MapTypeId[g.type.toUpperCase()]:a.error('angular-google-maps: invalid map type "'+g.type+'"')}var k=new google.maps.Map(h.find("div")[1],angular.extend({},d,i,{center:new google.maps.LatLng(e.center.latitude,e.center.longitude),draggable:c(g.draggable),zoom:e.zoom,bounds:e.bounds})),l=!1;google.maps.event.addListener(k,"dragstart",function(){l=!0,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"dragend",function(){l=!1,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"drag",function(){var a=k.center;b(function(){e.$apply(function(b){b.center.latitude=a.lat(),b.center.longitude=a.lng()})})}),google.maps.event.addListener(k,"zoom_changed",function(){e.zoom!=k.zoom&&b(function(){e.$apply(function(a){a.zoom=k.zoom})})});var m=!1;if(google.maps.event.addListener(k,"center_changed",function(){var a=k.center;m||b(function(){e.$apply(function(b){k.dragging||(b.center.latitude!==a.lat()&&(b.center.latitude=a.lat()),b.center.longitude!==a.lng()&&(b.center.longitude=a.lng()))})})}),google.maps.event.addListener(k,"idle",function(){var a=k.getBounds(),c=a.getNorthEast(),d=a.getSouthWest();b(function(){e.$apply(function(a){null!==a.bounds&&void 0!==a.bounds&&void 0!==a.bounds&&(a.bounds.northeast={latitude:c.lat(),longitude:c.lng()},a.bounds.southwest={latitude:d.lat(),longitude:d.lng()})})})}),angular.isDefined(e.events)&&null!==e.events&&angular.isObject(e.events)){var n=function(a){return function(){e.events[a].apply(e,[k,a,arguments])}};for(var o in e.events)e.events.hasOwnProperty(o)&&angular.isFunction(e.events[o])&&google.maps.event.addListener(k,o,n(o))}e.map=k,google.maps.event.trigger(k,"resize"),angular.isUndefined(e.refresh())||e.$watch("refresh()",function(a,b){if(a&&!b){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}}),e.$watch("center",function(a,b){if(a!==b){if(m=!0,!l){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}m=!1}},!0),e.$watch("zoom",function(a,b){a!==b&&k.setZoom(a)}),e.$watch("bounds",function(a,b){if(a!==b){var c=new google.maps.LatLng(a.northeast.latitude,a.northeast.longitude),d=new google.maps.LatLng(a.southwest.latitude,a.southwest.longitude),e=new google.maps.LatLngBounds(d,c);k.fitBounds(e)}})}}}]),angular.module("google-maps").directive("marker",["$timeout",function(a){return new directives.api.Marker(a)}]),angular.module("google-maps").directive("markers",["$timeout",function(a){return new directives.api.Markers(a)}]),angular.module("google-maps").directive("markerLabel",["$log","$timeout",function(a,b){return new directives.api.Label(b)}]),angular.module("google-maps").directive("polygon",["$log","$timeout",function(a,b){"use strict";function c(a){for(var b=0;bd;d++)oldValue=c.getAt(d),newValue=b[d],(oldValue.lat()!=newValue.latitude||oldValue.lng()!=newValue.longitude)&&c.setAt(d,new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;h>d;d++)newValue=b[d],c.push(new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;g>d;d++)c.pop();f(j.fit)&&e(a,c)}else i.setMap(null)},!0),h.$on("$destroy",function(){i.setMap(null),l(),l=null,m(),m=null,n(),n=null})}),void 0)}}}]),angular.module("google-maps").directive("polyline",["$log","$timeout","array-sync",function(a,b,c){"use strict";function d(a){for(var b=0;b + scope.labelContent? + + setLabelOptions:(opts, scope) => + opts.labelAnchor= @getLabelPositionPoint(scope.labelAnchor) + opts.labelClass= scope.labelClass + opts.labelContent= scope.labelContent + opts + watchDestroy:(scope)=> scope.$on("$destroy", => if @gMarker? #this is possible due to AsyncProcessor in that we created some Children but no gMarker yet From 065b610b384460bea920ad6c0f75bdd09a73ff48 Mon Sep 17 00:00:00 2001 From: Fernando Witzke Date: Mon, 18 Nov 2013 11:34:20 -0200 Subject: [PATCH 7/7] fixing coffeescript indentation --- dist/angular-google-maps.min.js | 2 +- .../directives/api/utils/gmap-util.coffee | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dist/angular-google-maps.min.js b/dist/angular-google-maps.min.js index 4556947ae..adb720eb3 100644 --- a/dist/angular-google-maps.min.js +++ b/dist/angular-google-maps.min.js @@ -2,6 +2,6 @@ * AngularJS directives for Google Maps * git: https://github.com/nlaplante/angular-google-maps.git */ -function ClusterIcon(a,b){a.getMarkerClusterer().extend(ClusterIcon,google.maps.OverlayView),this.cluster_=a,this.className_=a.getMarkerClusterer().getClusterClass(),this.styles_=b,this.center_=null,this.div_=null,this.sums_=null,this.visible_=!1,this.setMap(a.getMap())}function Cluster(a){this.markerClusterer_=a,this.map_=a.getMap(),this.gridSize_=a.getGridSize(),this.minClusterSize_=a.getMinimumClusterSize(),this.averageCenter_=a.getAverageCenter(),this.printable_=a.getPrintable(),this.markers_=[],this.center_=null,this.bounds_=null,this.clusterIcon_=new ClusterIcon(this,a.getStyles())}function MarkerClusterer(a,b,c){this.extend(MarkerClusterer,google.maps.OverlayView),b=b||[],c=c||{},this.markers_=[],this.clusters_=[],this.listeners_=[],this.activeMap_=null,this.ready_=!1,this.gridSize_=c.gridSize||60,this.minClusterSize_=c.minimumClusterSize||2,this.maxZoom_=c.maxZoom||null,this.styles_=c.styles||[],this.title_=c.title||"",this.zoomOnClick_=!0,void 0!==c.zoomOnClick&&(this.zoomOnClick_=c.zoomOnClick),this.averageCenter_=!1,void 0!==c.averageCenter&&(this.averageCenter_=c.averageCenter),this.ignoreHidden_=!1,void 0!==c.ignoreHidden&&(this.ignoreHidden_=c.ignoreHidden),this.printable_=!1,void 0!==c.printable&&(this.printable_=c.printable),this.imagePath_=c.imagePath||MarkerClusterer.IMAGE_PATH,this.imageExtension_=c.imageExtension||MarkerClusterer.IMAGE_EXTENSION,this.imageSizes_=c.imageSizes||MarkerClusterer.IMAGE_SIZES,this.calculator_=c.calculator||MarkerClusterer.CALCULATOR,this.batchSize_=c.batchSize||MarkerClusterer.BATCH_SIZE,this.batchSizeIE_=c.batchSizeIE||MarkerClusterer.BATCH_SIZE_IE,this.clusterClass_=c.clusterClass||"cluster",-1!==navigator.userAgent.toLowerCase().indexOf("msie")&&(this.batchSize_=this.batchSizeIE_),this.setupStyles_(),this.addMarkers(b,!0),this.setMap(a)}function inherits(a,b){function c(){}c.prototype=b.prototype,a.superClass_=b.prototype,a.prototype=new c,a.prototype.constructor=a}function MarkerLabel_(a,b){this.marker_=a,this.handCursorURL_=a.handCursorURL,this.labelDiv_=document.createElement("div"),this.labelDiv_.style.cssText="position: absolute; overflow: hidden;",this.eventDiv_=document.createElement("div"),this.eventDiv_.style.cssText=this.labelDiv_.style.cssText,this.eventDiv_.setAttribute("onselectstart","return false;"),this.eventDiv_.setAttribute("ondragstart","return false;"),this.crossDiv_=MarkerLabel_.getSharedCross(b)}function MarkerWithLabel(a){a=a||{},a.labelContent=a.labelContent||"",a.labelAnchor=a.labelAnchor||new google.maps.Point(0,0),a.labelClass=a.labelClass||"markerLabels",a.labelStyle=a.labelStyle||{},a.labelInBackground=a.labelInBackground||!1,"undefined"==typeof a.labelVisible&&(a.labelVisible=!0),"undefined"==typeof a.raiseOnDrag&&(a.raiseOnDrag=!0),"undefined"==typeof a.clickable&&(a.clickable=!0),"undefined"==typeof a.draggable&&(a.draggable=!1),"undefined"==typeof a.optimized&&(a.optimized=!1),a.crossImage=a.crossImage||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png",a.handCursor=a.handCursor||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur",a.optimized=!1,this.label=new MarkerLabel_(this,a.crossImage,a.handCursor),google.maps.Marker.apply(this,arguments)}!function(){var a=angular.module("google-maps",[]);a.factory("debounce",["$timeout",function(a){return function(b){var c=0;return function(){var d=this,e=arguments;c++;var f=function(a){return function(){return a===c?b.apply(d,e):void 0}}(c);return a(f,0,!0)}}}])}(),function(){this.ngGmapModule=function(a,b){var c,d;return null==b&&(b=function(){}),"string"==typeof a&&(a=a.split(".")),c=this[d=a.shift()]||(this[d]={}),c.ngGmapModule||(c.ngGmapModule=this.ngGmapModule),a.length?c.ngGmapModule(a,b):b.call(c)}}.call(this),function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};this.ngGmapModule("oo",function(){var b;return b=["extended","included"],this.BaseObject=function(){function c(){}return c.extend=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this[d]=e);return null!=(f=c.extended)&&f.apply(0),this},c.include=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this.prototype[d]=e);return null!=(f=c.included)&&f.apply(0),this},c}()})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.ClustererMarkerManager=function(b){function d(b,c,e){this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var f;d.__super__.constructor.call(this),f=this,this.opt_options=e,this.clusterer=null!=e&&void 0===c?new MarkerClusterer(b,void 0,e):null!=e&&null!=c?new MarkerClusterer(b,c,e):new MarkerClusterer(b),this.clusterer.setIgnoreHidden(!0),this.$log=directives.api.utils.Logger,this.noDrawOnSingleAddRemoves=!0,this.$log.info(this)}return c(d,b),d.prototype.add=function(a){return this.clusterer.addMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.addMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.remove=function(a){return this.clusterer.removeMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.removeMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.draw=function(){return this.clusterer.repaint()},d.prototype.clear=function(){return this.clusterer.clearMarkers(),this.clusterer.repaint()},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.MarkerManager=function(b){function d(b){this.handleOptDraw=a(this.handleOptDraw,this),this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var c;d.__super__.constructor.call(this),c=this,this.gMap=b,this.gMarkers=[],this.$log=directives.api.utils.Logger,this.$log.info(this)}return c(d,b),d.prototype.add=function(a,b){return this.handleOptDraw(a,b,!0),this.gMarkers.push(a)},d.prototype.addMany=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.add(b));return e},d.prototype.remove=function(a,b){var c,d;return this.handleOptDraw(a,b,!1),b?(c=void 0,null!=this.gMarkers.indexOf?c=this.gMarkers.indexOf(a):(d=0,_.find(this.gMarkers,function(b){d+=1,b===a&&(c=d)})),null!=c?this.gMarkers.splice(c,1):void 0):void 0},d.prototype.removeMany=function(){var a,b,c,d,e;for(d=this.gMarkers,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.remove(a));return e},d.prototype.draw=function(){var a,b,c,d,e,f,g,h,i,j=this;for(a=[],h=this.gMarkers,c=function(b){return b.isDrawn?void 0:b.doAdd?b.setMap(j.gMap):a.push(b)},d=0,f=h.length;f>d;d++)b=h[d],c(b);for(i=[],e=0,g=a.length;g>e;e++)b=a[e],i.push(this.remove(b,!0));return i},d.prototype.clear=function(){var a,b,c,d;for(d=this.gMarkers,b=0,c=d.length;c>b;b++)a=d[b],a.setMap(null);return delete this.gMarkers,this.gMarkers=[]},d.prototype.handleOptDraw=function(a,b,c){return b===!0?(c?a.setMap(this.gMap):a.setMap(null),a.isDrawn=!0):(a.isDrawn=!1,a.doAdd=c)},d}(oo.BaseObject)})}.call(this),function(){this.ngGmapModule("directives.api.utils",function(){return this.AsyncProcessor={handleLargeArray:function(a,b,c,d,e,f){var g;return null==e&&(e=100),null==f&&(f=0),void 0===a||a.length<=0?(d(),void 0):(g=function(){var h,i;for(h=e,i=f;h--&&id;d++)b=f[d],c(b);return delete this.markers,this.markers=[],this.markersIndex=0,null!=this.gMarkerManager&&this.gMarkerManager.clear(),this.createMarkers(a)}},d.prototype.onWatch=function(a,b,c,d){return"models"!==a||c.length!==d.length?"options"===a&&null!=c?(this.DEFAULTS=c,void 0):this.reBuildMarkers(b):void 0},d.prototype.onDestroy=function(){var a,b,c,d;for(d=this.markers,b=0,c=d.length;c>b;b++)a=d[b],a.destroy();return null!=this.gMarkerManager?this.gMarkerManager.clear():void 0},d.prototype.fit=function(){var a,b;return this.mapCtrl&&null!=this.markers&&this.markers.length&&(a=new google.maps.LatLngBounds,b=!1,_.each(this.markers,function(c){return null!=c.gMarker?(b||(b=!0),a.extend(c.gMarker.getPosition())):void 0}),b)?this.mapCtrl.getMap().fitBounds(a):void 0},d}(directives.api.models.parent.IMarkerParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.models.parent",function(){return this.WindowsParentModel=function(b){function d(b,c,e,f,g,h,i,j,k){this.interpolateContent=a(this.interpolateContent,this),this.setChildScope=a(this.setChildScope,this),this.createWindow=a(this.createWindow,this),this.setContentKeys=a(this.setContentKeys,this),this.createChildScopesWindows=a(this.createChildScopesWindows,this),this.watchOurScope=a(this.watchOurScope,this),this.watchDestroy=a(this.watchDestroy,this),this.watchModels=a(this.watchModels,this),this.watch=a(this.watch,this);var l,m,n,o,p,q=this;for(d.__super__.constructor.call(this,b,c,e,f,g,h,i,j,k),m=this,this.$interpolate=k,this.windows=[],this.windwsIndex=0,this.scopePropNames=["show","coords","templateUrl","templateParameter","isIconVisibleOnClick","closeClick"],p=this.scopePropNames,n=0,o=p.length;o>n;n++)l=p[n],this[l+"Key"]=void 0;this.linked=new directives.api.utils.Linked(b,c,e,f),this.models=void 0,this.contentKeys=void 0,this.isIconVisibleOnClick=void 0,this.firstTime=!0,this.bigGulp=directives.api.utils.AsyncProcessor,this.$log.info(m),this.$timeout(function(){return q.watchOurScope(b),q.createChildScopesWindows()},50)}return c(d,b),d.prototype.watch=function(a,b,c){var d=this;return a.$watch(b,function(a,e){var f,g,h,i,j;if(a!==e){for(d[c]="function"==typeof a?a():a,i=d.windows,j=[],g=0,h=i.length;h>g;g++)f=i[g],j.push(function(a){return a.scope[b]="self"===d[c]?a:a[d[c]]}(f));return j}},!0)},d.prototype.watchModels=function(a){var b=this;return a.$watch("models",function(a,c){return a!==c&&a.length!==c.length?b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return b.windows=[],b.windowsIndex=0,b.createChildScopesWindows()}):void 0},!0)},d.prototype.watchDestroy=function(a){var b=this;return a.$on("$destroy",function(){return b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return delete b.windows,b.windows=[],b.windowsIndex=0})})},d.prototype.watchOurScope=function(a){var b,c,d,e,f,g=this;for(e=this.scopePropNames,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(function(b){var c;return c=b+"Key",g[c]="function"==typeof a[b]?a[b]():a[b],g.watch(a,b,c)}(b));return f},d.prototype.createChildScopesWindows=function(){var a,b,c,d=this; +function ClusterIcon(a,b){a.getMarkerClusterer().extend(ClusterIcon,google.maps.OverlayView),this.cluster_=a,this.className_=a.getMarkerClusterer().getClusterClass(),this.styles_=b,this.center_=null,this.div_=null,this.sums_=null,this.visible_=!1,this.setMap(a.getMap())}function Cluster(a){this.markerClusterer_=a,this.map_=a.getMap(),this.gridSize_=a.getGridSize(),this.minClusterSize_=a.getMinimumClusterSize(),this.averageCenter_=a.getAverageCenter(),this.printable_=a.getPrintable(),this.markers_=[],this.center_=null,this.bounds_=null,this.clusterIcon_=new ClusterIcon(this,a.getStyles())}function MarkerClusterer(a,b,c){this.extend(MarkerClusterer,google.maps.OverlayView),b=b||[],c=c||{},this.markers_=[],this.clusters_=[],this.listeners_=[],this.activeMap_=null,this.ready_=!1,this.gridSize_=c.gridSize||60,this.minClusterSize_=c.minimumClusterSize||2,this.maxZoom_=c.maxZoom||null,this.styles_=c.styles||[],this.title_=c.title||"",this.zoomOnClick_=!0,void 0!==c.zoomOnClick&&(this.zoomOnClick_=c.zoomOnClick),this.averageCenter_=!1,void 0!==c.averageCenter&&(this.averageCenter_=c.averageCenter),this.ignoreHidden_=!1,void 0!==c.ignoreHidden&&(this.ignoreHidden_=c.ignoreHidden),this.printable_=!1,void 0!==c.printable&&(this.printable_=c.printable),this.imagePath_=c.imagePath||MarkerClusterer.IMAGE_PATH,this.imageExtension_=c.imageExtension||MarkerClusterer.IMAGE_EXTENSION,this.imageSizes_=c.imageSizes||MarkerClusterer.IMAGE_SIZES,this.calculator_=c.calculator||MarkerClusterer.CALCULATOR,this.batchSize_=c.batchSize||MarkerClusterer.BATCH_SIZE,this.batchSizeIE_=c.batchSizeIE||MarkerClusterer.BATCH_SIZE_IE,this.clusterClass_=c.clusterClass||"cluster",-1!==navigator.userAgent.toLowerCase().indexOf("msie")&&(this.batchSize_=this.batchSizeIE_),this.setupStyles_(),this.addMarkers(b,!0),this.setMap(a)}function inherits(a,b){function c(){}c.prototype=b.prototype,a.superClass_=b.prototype,a.prototype=new c,a.prototype.constructor=a}function MarkerLabel_(a,b){this.marker_=a,this.handCursorURL_=a.handCursorURL,this.labelDiv_=document.createElement("div"),this.labelDiv_.style.cssText="position: absolute; overflow: hidden;",this.eventDiv_=document.createElement("div"),this.eventDiv_.style.cssText=this.labelDiv_.style.cssText,this.eventDiv_.setAttribute("onselectstart","return false;"),this.eventDiv_.setAttribute("ondragstart","return false;"),this.crossDiv_=MarkerLabel_.getSharedCross(b)}function MarkerWithLabel(a){a=a||{},a.labelContent=a.labelContent||"",a.labelAnchor=a.labelAnchor||new google.maps.Point(0,0),a.labelClass=a.labelClass||"markerLabels",a.labelStyle=a.labelStyle||{},a.labelInBackground=a.labelInBackground||!1,"undefined"==typeof a.labelVisible&&(a.labelVisible=!0),"undefined"==typeof a.raiseOnDrag&&(a.raiseOnDrag=!0),"undefined"==typeof a.clickable&&(a.clickable=!0),"undefined"==typeof a.draggable&&(a.draggable=!1),"undefined"==typeof a.optimized&&(a.optimized=!1),a.crossImage=a.crossImage||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png",a.handCursor=a.handCursor||"http"+("https:"===document.location.protocol?"s":"")+"://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur",a.optimized=!1,this.label=new MarkerLabel_(this,a.crossImage,a.handCursor),google.maps.Marker.apply(this,arguments)}!function(){var a=angular.module("google-maps",[]);a.factory("debounce",["$timeout",function(a){return function(b){var c=0;return function(){var d=this,e=arguments;c++;var f=function(a){return function(){return a===c?b.apply(d,e):void 0}}(c);return a(f,0,!0)}}}])}(),function(){this.ngGmapModule=function(a,b){var c,d;return null==b&&(b=function(){}),"string"==typeof a&&(a=a.split(".")),c=this[d=a.shift()]||(this[d]={}),c.ngGmapModule||(c.ngGmapModule=this.ngGmapModule),a.length?c.ngGmapModule(a,b):b.call(c)}}.call(this),function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};this.ngGmapModule("oo",function(){var b;return b=["extended","included"],this.BaseObject=function(){function c(){}return c.extend=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this[d]=e);return null!=(f=c.extended)&&f.apply(0),this},c.include=function(c){var d,e,f;for(d in c)e=c[d],a.call(b,d)<0&&(this.prototype[d]=e);return null!=(f=c.included)&&f.apply(0),this},c}()})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.ClustererMarkerManager=function(b){function d(b,c,e){this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var f;d.__super__.constructor.call(this),f=this,this.opt_options=e,this.clusterer=null!=e&&void 0===c?new MarkerClusterer(b,void 0,e):null!=e&&null!=c?new MarkerClusterer(b,c,e):new MarkerClusterer(b),this.clusterer.setIgnoreHidden(!0),this.$log=directives.api.utils.Logger,this.noDrawOnSingleAddRemoves=!0,this.$log.info(this)}return c(d,b),d.prototype.add=function(a){return this.clusterer.addMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.addMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.remove=function(a){return this.clusterer.removeMarker(a,this.noDrawOnSingleAddRemoves)},d.prototype.removeMany=function(a){return this.clusterer.addMarkers(a)},d.prototype.draw=function(){return this.clusterer.repaint()},d.prototype.clear=function(){return this.clusterer.clearMarkers(),this.clusterer.repaint()},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.managers",function(){return this.MarkerManager=function(b){function d(b){this.handleOptDraw=a(this.handleOptDraw,this),this.clear=a(this.clear,this),this.draw=a(this.draw,this),this.removeMany=a(this.removeMany,this),this.remove=a(this.remove,this),this.addMany=a(this.addMany,this),this.add=a(this.add,this);var c;d.__super__.constructor.call(this),c=this,this.gMap=b,this.gMarkers=[],this.$log=directives.api.utils.Logger,this.$log.info(this)}return c(d,b),d.prototype.add=function(a,b){return this.handleOptDraw(a,b,!0),this.gMarkers.push(a)},d.prototype.addMany=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.add(b));return e},d.prototype.remove=function(a,b){var c,d;return this.handleOptDraw(a,b,!1),b?(c=void 0,null!=this.gMarkers.indexOf?c=this.gMarkers.indexOf(a):(d=0,_.find(this.gMarkers,function(b){d+=1,b===a&&(c=d)})),null!=c?this.gMarkers.splice(c,1):void 0):void 0},d.prototype.removeMany=function(){var a,b,c,d,e;for(d=this.gMarkers,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.remove(a));return e},d.prototype.draw=function(){var a,b,c,d,e,f,g,h,i,j=this;for(a=[],h=this.gMarkers,c=function(b){return b.isDrawn?void 0:b.doAdd?b.setMap(j.gMap):a.push(b)},d=0,f=h.length;f>d;d++)b=h[d],c(b);for(i=[],e=0,g=a.length;g>e;e++)b=a[e],i.push(this.remove(b,!0));return i},d.prototype.clear=function(){var a,b,c,d;for(d=this.gMarkers,b=0,c=d.length;c>b;b++)a=d[b],a.setMap(null);return delete this.gMarkers,this.gMarkers=[]},d.prototype.handleOptDraw=function(a,b,c){return b===!0?(c?a.setMap(this.gMap):a.setMap(null),a.isDrawn=!0):(a.isDrawn=!1,a.doAdd=c)},d}(oo.BaseObject)})}.call(this),function(){this.ngGmapModule("directives.api.utils",function(){return this.AsyncProcessor={handleLargeArray:function(a,b,c,d,e,f){var g;return null==e&&(e=100),null==f&&(f=0),void 0===a||a.length<=0?(d(),void 0):(g=function(){var h,i;for(h=e,i=f;h--&&id;d++)b=f[d],c(b);return delete this.markers,this.markers=[],this.markersIndex=0,null!=this.gMarkerManager&&this.gMarkerManager.clear(),this.createMarkers(a)}},d.prototype.onWatch=function(a,b,c,d){return"models"!==a||c.length!==d.length?"options"===a&&null!=c?(this.DEFAULTS=c,void 0):this.reBuildMarkers(b):void 0},d.prototype.onDestroy=function(){var a,b,c,d;for(d=this.markers,b=0,c=d.length;c>b;b++)a=d[b],a.destroy();return null!=this.gMarkerManager?this.gMarkerManager.clear():void 0},d.prototype.fit=function(){var a,b;return this.mapCtrl&&null!=this.markers&&this.markers.length&&(a=new google.maps.LatLngBounds,b=!1,_.each(this.markers,function(c){return null!=c.gMarker?(b||(b=!0),a.extend(c.gMarker.getPosition())):void 0}),b)?this.mapCtrl.getMap().fitBounds(a):void 0},d}(directives.api.models.parent.IMarkerParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api.models.parent",function(){return this.WindowsParentModel=function(b){function d(b,c,e,f,g,h,i,j,k){this.interpolateContent=a(this.interpolateContent,this),this.setChildScope=a(this.setChildScope,this),this.createWindow=a(this.createWindow,this),this.setContentKeys=a(this.setContentKeys,this),this.createChildScopesWindows=a(this.createChildScopesWindows,this),this.watchOurScope=a(this.watchOurScope,this),this.watchDestroy=a(this.watchDestroy,this),this.watchModels=a(this.watchModels,this),this.watch=a(this.watch,this);var l,m,n,o,p,q=this;for(d.__super__.constructor.call(this,b,c,e,f,g,h,i,j,k),m=this,this.$interpolate=k,this.windows=[],this.windwsIndex=0,this.scopePropNames=["show","coords","templateUrl","templateParameter","isIconVisibleOnClick","closeClick"],p=this.scopePropNames,n=0,o=p.length;o>n;n++)l=p[n],this[l+"Key"]=void 0;this.linked=new directives.api.utils.Linked(b,c,e,f),this.models=void 0,this.contentKeys=void 0,this.isIconVisibleOnClick=void 0,this.firstTime=!0,this.bigGulp=directives.api.utils.AsyncProcessor,this.$log.info(m),this.$timeout(function(){return q.watchOurScope(b),q.createChildScopesWindows()},50)}return c(d,b),d.prototype.watch=function(a,b,c){var d=this;return a.$watch(b,function(a,e){var f,g,h,i,j;if(a!==e){for(d[c]="function"==typeof a?a():a,i=d.windows,j=[],g=0,h=i.length;h>g;g++)f=i[g],j.push(function(a){return a.scope[b]="self"===d[c]?a:a[d[c]]}(f));return j}},!0)},d.prototype.watchModels=function(a){var b=this;return a.$watch("models",function(a,c){return a!==c&&a.length!==c.length?b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return b.windows=[],b.windowsIndex=0,b.createChildScopesWindows()}):void 0},!0)},d.prototype.watchDestroy=function(a){var b=this;return a.$on("$destroy",function(){return b.bigGulp.handleLargeArray(b.windows,function(a){return a.destroy()},function(){},function(){return delete b.windows,b.windows=[],b.windowsIndex=0})})},d.prototype.watchOurScope=function(a){var b,c,d,e,f,g=this;for(e=this.scopePropNames,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(function(b){var c;return c=b+"Key",g[c]="function"==typeof a[b]?a[b]():a[b],g.watch(a,b,c)}(b));return f},d.prototype.createChildScopesWindows=function(){var a,b,c,d=this; return this.isIconVisibleOnClick=!0,angular.isDefined(this.linked.attrs.isiconvisibleonclick)&&(this.isIconVisibleOnClick=this.linked.scope.isIconVisibleOnClick),a=this.linked.ctrls[0].getMap(),b=this.linked.ctrls.length>1&&null!=this.linked.ctrls[1]?this.linked.ctrls[1].getMarkersScope():void 0,c=angular.isUndefined(this.linked.scope.models),c&&(void 0===b||void 0===b.markerModels&&void 0===b.models)?(this.$log.info("No models to create windows from! Need direct models or models derrived from markers!"),void 0):null!=a?null!=this.linked.scope.models?(this.models=this.linked.scope.models,this.firstTime&&(this.watchModels(this.linked.scope),this.watchDestroy(this.linked.scope)),this.setContentKeys(this.linked.scope.models),this.bigGulp.handleLargeArray(this.linked.scope.models,function(b){return d.createWindow(b,void 0,a)},function(){},function(){return d.firstTime=!1})):(this.models=b.models,this.firstTime&&(this.watchModels(b),this.watchDestroy(b)),this.setContentKeys(b.models),this.bigGulp.handleLargeArray(b.markerModels,function(b){return d.createWindow(b.model,b.gMarker,a)},function(){},function(){return d.firstTime=!1})):void 0},d.prototype.setContentKeys=function(a){return a.length>0?this.contentKeys=Object.keys(a[0]):void 0},d.prototype.createWindow=function(a,b,c){var d,e,f,g=this;return d=this.linked.scope.$new(!1),this.setChildScope(d,a),d.$watch("model",function(a,b){return a!==b?g.setChildScope(d,a):void 0},!0),f=this.interpolateContent(this.linked.element.html(),a),e=this.createWindowOptions(b,d,f,this.DEFAULTS),this.windows.push(new directives.api.models.child.WindowChildModel(d,e,this.isIconVisibleOnClick,c,b,this.$http,this.$templateCache,this.$compile,!0))},d.prototype.setChildScope=function(a,b){var c,d,e,f,g,h=this;for(g=this.scopePropNames,d=function(c){var d,e;return d=c+"Key",e="self"===h[d]?b:b[h[d]],e!==a[c]?a[c]=e:void 0},e=0,f=g.length;f>e;e++)c=g[e],d(c);return a.model=b},d.prototype.interpolateContent=function(a,b){var c,d,e,f,g,h;if(void 0!==this.contentKeys&&0!==this.contentKeys.length){for(c=this.$interpolate(a),d={},h=this.contentKeys,f=0,g=h.length;g>f;f++)e=h[f],d[e]=b[e];return c(d)}},d}(directives.api.models.parent.IWindowParentModel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.ILabel=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.restrict="ECMA",this.replace=!0,this.template=void 0,this.require=void 0,this.transclude=!0,this.priority=-100,this.scope={labelContent:"=content",labelAnchor:"@anchor",labelClass:"@class",labelStyle:"=style"},this.$log=directives.api.utils.Logger,this.$timeout=b}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IMarker=function(b){function d(b){this.link=a(this.link,this);var c;c=this,this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.replace=!0,this.require="^googleMap",this.priority=-1,this.transclude=!0,this.replace=!0,this.scope={coords:"=coords",icon:"=icon",click:"&click",options:"=options"}}return c(d,b),d.prototype.controller=["$scope","$element",function(){throw new Exception("Not Implemented!!")}],d.prototype.link=function(){throw new Exception("Not implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.IWindow=function(b){function d(b,c,d,e){this.link=a(this.link,this);var f;f=this,this.restrict="ECMA",this.template=void 0,this.transclude=!0,this.priority=-100,this.require=void 0,this.replace=!0,this.scope={coords:"=coords",show:"=show",templateUrl:"=templateurl",templateParameter:"=templateparameter",isIconVisibleOnClick:"=isiconvisibleonclick",closeClick:"&closeclick",options:"=options"},this.$log=directives.api.utils.Logger,this.$timeout=b,this.$compile=c,this.$http=d,this.$templateCache=e}return c(d,b),d.prototype.link=function(){throw new Exception("Not Implemented!!")},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Label=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.require="^marker",this.template='',this.$log.info(this)}return c(d,b),d.prototype.link=function(a,b,c,d){return this.$timeout(function(){var b,c;return c=d.getMarker(),null!=c&&(b=new directives.api.models.child.MarkerLabelChildModel(c,a)),a.$on("$destroy",function(){return b.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.ILabel)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Layer=function(b){function d(b){this.link=a(this.link,this),this.$log=directives.api.utils.Logger,this.$timeout=b,this.restrict="ECMA",this.require="^googleMap",this.priority=-1,this.transclude=!0,this.template='',this.replace=!0,this.scope={show:"=show",type:"=type",namespace:"=namespace",options:"=options"}}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.LayerParentModel(a,b,c,d,this.$timeout)},d}(oo.BaseObject)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Marker=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a,b){return this.getMarker=function(){return b.data("instance")}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkerParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Markers=function(b){function d(b){this.link=a(this.link,this);var c;d.__super__.constructor.call(this,b),c=this,this.template='',this.scope.models="=models",this.scope.doCluster="=docluster",this.scope.clusterOptions="=clusteroptions",this.scope.fit="=fit",this.scope.labelContent="=labelcontent",this.scope.labelAnchor="@labelanchor",this.scope.labelClass="@labelclass",this.$timeout=b,this.$log.info(this)}return c(d,b),d.prototype.controller=["$scope","$element",function(a){return this.getMarkersScope=function(){return a}}],d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.MarkersParentModel(a,b,c,d,this.$timeout)},d}(directives.api.IMarker)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Window=function(b){function d(b,c,e,f){this.link=a(this.link,this);var g;d.__super__.constructor.call(this,b,c,e,f),g=this,this.require=["^googleMap","^?marker"],this.template='',this.$log.info(g)}return c(d,b),d.include(directives.api.utils.GmapUtil),d.prototype.link=function(a,b,c,d){var e=this;return this.$timeout(function(){var f,g,h,i,j,k,l;return h=!0,angular.isDefined(c.isiconvisibleonclick)&&(h=a.isIconVisibleOnClick),i=d[0].getMap(),j=d.length>1&&null!=d[1]?d[1].getMarker():void 0,f=null!=a.options?a.options:{},g=null!=a&&null!=a.coords&&null!=a.coords.latitude&&null!=a.coords.longitude,k=null!=j&&g?e.createWindowOptions(j,a,b.html(),f):void 0,null!=i&&(l=new directives.api.models.child.WindowChildModel(a,k,h,i,j,e.$http,e.$templateCache,e.$compile,b)),a.$on("$destroy",function(){return l.destroy()})},directives.api.utils.GmapUtil.defaultDelay+25)},d}(directives.api.IWindow)})}.call(this),function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};this.ngGmapModule("directives.api",function(){return this.Windows=function(b){function d(b,c,e,f,g){this.link=a(this.link,this);var h;d.__super__.constructor.call(this,b,c,e,f),h=this,this.$interpolate=g,this.require=["^googleMap","^?markers"],this.template='',this.scope.models="=models",this.$log.info(h)}return c(d,b),d.prototype.link=function(a,b,c,d){return new directives.api.models.parent.WindowsParentModel(a,b,c,d,this.$timeout,this.$compile,this.$http,this.$templateCache,this.$interpolate)},d}(directives.api.IWindow)})}.call(this),angular.module("google-maps").controller("PolylineDisplayController",["$scope",function(a){a.toggleStrokeColor=function(){a.stroke.color="#6060FB"==a.stroke.color?"red":"#6060FB"}}]),ClusterIcon.prototype.onAdd=function(){var a,b,c=this;this.div_=document.createElement("div"),this.div_.className=this.className_,this.visible_&&this.show(),this.getPanes().overlayMouseTarget.appendChild(this.div_),this.boundsChangedListener_=google.maps.event.addListener(this.getMap(),"bounds_changed",function(){b=a}),google.maps.event.addDomListener(this.div_,"mousedown",function(){a=!0,b=!1}),google.maps.event.addDomListener(this.div_,"click",function(d){if(a=!1,!b){var e,f,g=c.cluster_.getMarkerClusterer();google.maps.event.trigger(g,"click",c.cluster_),google.maps.event.trigger(g,"clusterclick",c.cluster_),g.getZoomOnClick()&&(f=g.getMaxZoom(),e=c.cluster_.getBounds(),g.getMap().fitBounds(e),setTimeout(function(){g.getMap().fitBounds(e),null!==f&&g.getMap().getZoom()>f&&g.getMap().setZoom(f+1)},100)),d.cancelBubble=!0,d.stopPropagation&&d.stopPropagation()}}),google.maps.event.addDomListener(this.div_,"mouseover",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseover",c.cluster_)}),google.maps.event.addDomListener(this.div_,"mouseout",function(){var a=c.cluster_.getMarkerClusterer();google.maps.event.trigger(a,"mouseout",c.cluster_)})},ClusterIcon.prototype.onRemove=function(){this.div_&&this.div_.parentNode&&(this.hide(),google.maps.event.removeListener(this.boundsChangedListener_),google.maps.event.clearInstanceListeners(this.div_),this.div_.parentNode.removeChild(this.div_),this.div_=null)},ClusterIcon.prototype.draw=function(){if(this.visible_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.top=a.y+"px",this.div_.style.left=a.x+"px"}},ClusterIcon.prototype.hide=function(){this.div_&&(this.div_.style.display="none"),this.visible_=!1},ClusterIcon.prototype.show=function(){if(this.div_){var a=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(a),this.div_.innerHTML=this.cluster_.printable_?"
"+this.sums_.text+"
":this.sums_.text,this.div_.title="undefined"==typeof this.sums_.title||""===this.sums_.title?this.cluster_.getMarkerClusterer().getTitle():this.sums_.title,this.div_.style.display=""}this.visible_=!0},ClusterIcon.prototype.useStyle=function(a){this.sums_=a;var b=Math.max(0,a.index-1);b=Math.min(this.styles_.length-1,b);var c=this.styles_[b];this.url_=c.url,this.height_=c.height,this.width_=c.width,this.anchor_=c.anchor,this.anchorIcon_=c.anchorIcon||[parseInt(this.height_/2,10),parseInt(this.width_/2,10)],this.textColor_=c.textColor||"black",this.textSize_=c.textSize||11,this.textDecoration_=c.textDecoration||"none",this.fontWeight_=c.fontWeight||"bold",this.fontStyle_=c.fontStyle||"normal",this.fontFamily_=c.fontFamily||"Arial,sans-serif",this.backgroundPosition_=c.backgroundPosition||"0 0"},ClusterIcon.prototype.setCenter=function(a){this.center_=a},ClusterIcon.prototype.createCss=function(a){var b=[];return this.cluster_.printable_||(b.push("background-image:url("+this.url_+");"),b.push("background-position:"+this.backgroundPosition_+";")),"object"==typeof this.anchor_?("number"==typeof this.anchor_[0]&&this.anchor_[0]>0&&this.anchor_[0]0&&this.anchor_[1]d)a.getMap()!==this.map_&&a.setMap(this.map_);else if(cb;b++)this.markers_[b].setMap(null);else a.setMap(null);return this.updateIcon_(),!0},Cluster.prototype.isMarkerInClusterBounds=function(a){return this.bounds_.contains(a.getPosition())},Cluster.prototype.calculateBounds_=function(){var a=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(a)},Cluster.prototype.updateIcon_=function(){var a=this.markers_.length,b=this.markerClusterer_.getMaxZoom();if(null!==b&&this.map_.getZoom()>b)return this.clusterIcon_.hide(),void 0;if(a0))for(a=0;ac&&(f=c,g=d));g&&g.isMarkerInClusterBounds(a)?g.addMarker(a):(d=new Cluster(this),d.addMarker(a),this.clusters_.push(d))},MarkerClusterer.prototype.createClusters_=function(a){var b,c,d,e=this;if(this.ready_){0===a&&(google.maps.event.trigger(this,"clusteringbegin",this),"undefined"!=typeof this.timerRefStatic&&(clearTimeout(this.timerRefStatic),delete this.timerRefStatic)),d=this.getMap().getZoom()>3?new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),this.getMap().getBounds().getNorthEast()):new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472,-178.48388434375),new google.maps.LatLng(-85.08136444384544,178.00048865625));var f=this.getExtendedBounds(d),g=Math.min(a+this.batchSize_,this.markers_.length);for(b=a;g>b;b++)c=this.markers_[b],!c.isAdded&&this.isMarkerInBounds_(c,f)&&(!this.ignoreHidden_||this.ignoreHidden_&&c.getVisible())&&this.addToClosestCluster_(c);ge;e++){var i=c.getAt(e);d=a[e],(i.lat()!=d.latitude||i.lng()!=d.longitude)&&c.setAt(e,new google.maps.LatLng(d.latitude,d.longitude))}for(;g>e;e++)d=a[e],c.push(new google.maps.LatLng(d.latitude,d.longitude));for(;f>e;e++)c.pop()}},!0);return function(){f&&(f(),f=null),g&&(g(),g=null)}}}]),angular.module("google-maps").factory("add-events",["$timeout",function(a){function b(b,c,d){return google.maps.event.addListener(b,c,function(){d.apply(this,arguments),a(function(){},!0)})}function c(a,c,d){if(d)return b(a,c,d);var e=[];return angular.forEach(c,function(c,d){console.log("adding listener: "+d+": "+c.toString()+" to : "+a),e.push(b(a,d,c))}),function(){angular.forEach(e,function(a){_.isFunction(a)&&a(),null!==a.e&&_.isFunction(a.e)&&a.e()}),e=null}}return c}]),angular.module("google-maps").directive("googleMap",["$log","$timeout",function(a,b){"use strict";function c(a){return angular.isDefined(a)&&null!==a&&a===!0||"1"===a||"y"===a||"true"===a}directives.api.utils.Logger.logger=a;var d={mapTypeId:google.maps.MapTypeId.ROADMAP};return{restrict:"ECMA",transclude:!0,replace:!1,template:'
',scope:{center:"=center",zoom:"=zoom",dragging:"=dragging",markers:"=markers",refresh:"&refresh",windows:"=windows",options:"=options",events:"=events",bounds:"=bounds"},controller:["$scope",function(a){this.getMap=function(){return a.map}}],link:function(e,f,g){if(!angular.isDefined(e.center)||!angular.isDefined(e.center.latitude)||!angular.isDefined(e.center.longitude))return a.error("angular-google-maps: could not find a valid center property"),void 0;if(!angular.isDefined(e.zoom))return a.error("angular-google-maps: map zoom property not set"),void 0;var h=angular.element(f);h.addClass("angular-google-map");var i={options:{}};if(g.options&&(i.options=e.options),g.type){var j=g.type.toUpperCase();google.maps.MapTypeId.hasOwnProperty(j)?i.mapTypeId=google.maps.MapTypeId[g.type.toUpperCase()]:a.error('angular-google-maps: invalid map type "'+g.type+'"')}var k=new google.maps.Map(h.find("div")[1],angular.extend({},d,i,{center:new google.maps.LatLng(e.center.latitude,e.center.longitude),draggable:c(g.draggable),zoom:e.zoom,bounds:e.bounds})),l=!1;google.maps.event.addListener(k,"dragstart",function(){l=!0,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"dragend",function(){l=!1,b(function(){e.$apply(function(a){a.dragging=l})})}),google.maps.event.addListener(k,"drag",function(){var a=k.center;b(function(){e.$apply(function(b){b.center.latitude=a.lat(),b.center.longitude=a.lng()})})}),google.maps.event.addListener(k,"zoom_changed",function(){e.zoom!=k.zoom&&b(function(){e.$apply(function(a){a.zoom=k.zoom})})});var m=!1;if(google.maps.event.addListener(k,"center_changed",function(){var a=k.center;m||b(function(){e.$apply(function(b){k.dragging||(b.center.latitude!==a.lat()&&(b.center.latitude=a.lat()),b.center.longitude!==a.lng()&&(b.center.longitude=a.lng()))})})}),google.maps.event.addListener(k,"idle",function(){var a=k.getBounds(),c=a.getNorthEast(),d=a.getSouthWest();b(function(){e.$apply(function(a){null!==a.bounds&&void 0!==a.bounds&&void 0!==a.bounds&&(a.bounds.northeast={latitude:c.lat(),longitude:c.lng()},a.bounds.southwest={latitude:d.lat(),longitude:d.lng()})})})}),angular.isDefined(e.events)&&null!==e.events&&angular.isObject(e.events)){var n=function(a){return function(){e.events[a].apply(e,[k,a,arguments])}};for(var o in e.events)e.events.hasOwnProperty(o)&&angular.isFunction(e.events[o])&&google.maps.event.addListener(k,o,n(o))}e.map=k,google.maps.event.trigger(k,"resize"),angular.isUndefined(e.refresh())||e.$watch("refresh()",function(a,b){if(a&&!b){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}}),e.$watch("center",function(a,b){if(a!==b){if(m=!0,!l){var d=new google.maps.LatLng(a.latitude,a.longitude);c(g.pan)?k.panTo(d):k.setCenter(d)}m=!1}},!0),e.$watch("zoom",function(a,b){a!==b&&k.setZoom(a)}),e.$watch("bounds",function(a,b){if(a!==b){var c=new google.maps.LatLng(a.northeast.latitude,a.northeast.longitude),d=new google.maps.LatLng(a.southwest.latitude,a.southwest.longitude),e=new google.maps.LatLngBounds(d,c);k.fitBounds(e)}})}}}]),angular.module("google-maps").directive("marker",["$timeout",function(a){return new directives.api.Marker(a)}]),angular.module("google-maps").directive("markers",["$timeout",function(a){return new directives.api.Markers(a)}]),angular.module("google-maps").directive("markerLabel",["$log","$timeout",function(a,b){return new directives.api.Label(b)}]),angular.module("google-maps").directive("polygon",["$log","$timeout",function(a,b){"use strict";function c(a){for(var b=0;bd;d++)oldValue=c.getAt(d),newValue=b[d],(oldValue.lat()!=newValue.latitude||oldValue.lng()!=newValue.longitude)&&c.setAt(d,new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;h>d;d++)newValue=b[d],c.push(new google.maps.LatLng(newValue.latitude,newValue.longitude));for(;g>d;d++)c.pop();f(j.fit)&&e(a,c)}else i.setMap(null)},!0),h.$on("$destroy",function(){i.setMap(null),l(),l=null,m(),m=null,n(),n=null})}),void 0)}}}]),angular.module("google-maps").directive("polyline",["$log","$timeout","array-sync",function(a,b,c){"use strict";function d(a){for(var b=0;b - @GmapUtil = - getLabelPositionPoint:(anchor) -> - if anchor == undefined - return undefined + @GmapUtil = + getLabelPositionPoint:(anchor) -> + if anchor == undefined + return undefined - anchor = /^([\d\.]+)\s([\d\.]+)$/.exec(anchor) - xPos = anchor[1] - yPos = anchor[2] - if xPos && yPos - new google.maps.Point(xPos,yPos) + anchor = /^([\d\.]+)\s([\d\.]+)$/.exec(anchor) + xPos = anchor[1] + yPos = anchor[2] + if xPos && yPos + new google.maps.Point(xPos,yPos) createMarkerOptions: (coords, icon, defaults, map = undefined) -> opts = angular.extend({}, defaults, {