Skip to content
This repository was archived by the owner on Nov 30, 2018. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
setting up spiderfier manager and making the derrived marker types mo…
…re generic
  • Loading branch information
nmccready committed Aug 8, 2015
commit c2a785cb57eb2d8772266864a95633380080376f
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
angular.module('uiGmapgoogle-maps.directives.api.managers')
.factory 'uiGmapSpiderfierMarkerManager', ['uiGmapLogger',
'uiGmapFitHelper', 'uiGmapPropMap', 'uiGmapMarkerSpiderfier', ($log, FitHelper, PropMap, uiGmapMarkerSpiderfier) ->
class SpiderfierMarkerManager
@type = 'SpiderfierMarkerManager'
constructor: (gMap, opt_markers={}, @opt_options = {}, @opt_events) ->
@type = SpiderfierMarkerManager.type

@clusterer = new NgMapMarkerClusterer gMap, opt_markers, @opt_options

@propMapGMarkers = new PropMap() #keep in sync with cluster.markers_

@attachEvents @opt_events, 'opt_events'

@clusterer.setIgnoreHidden true
@noDrawOnSingleAddRemoves = true
$log.info @

checkKey: (gMarker) ->
unless gMarker.key?
msg = 'gMarker.key undefined and it is REQUIRED!!'
$log.error msg

add: (gMarker)=>
@checkKey gMarker
@clusterer.addMarker gMarker, @noDrawOnSingleAddRemoves
@propMapGMarkers.put gMarker.key, gMarker
@checkSync()

#if you want flashing as in remove and then re-add use this
#otherwise leave the marker in the map and just edit its properties (coords, icon etc)
update: (gMarker) =>
@remove gMarker
@add gMarker

addMany: (gMarkers)=>
gMarkers.forEach (gMarker) =>
@add gMarker

remove: (gMarker)=>
@checkKey gMarker
exists = @propMapGMarkers.get gMarker.key
if exists
@clusterer.removeMarker(gMarker, @noDrawOnSingleAddRemoves)
@propMapGMarkers.remove gMarker.key
@checkSync()

removeMany: (gMarkers)=>
gMarkers.forEach (gMarker) =>
@remove gMarker

draw: ()=>
@clusterer.repaint()

clear: ()=>
@removeMany @getGMarkers()
@clusterer.repaint()

attachEvents: (options, optionsName) ->
if angular.isDefined(options) and options? and angular.isObject(options)
for eventName, eventHandler of options
if options.hasOwnProperty(eventName) and angular.isFunction(options[eventName])
$log.info "#{optionsName}: Attaching event: #{eventName} to clusterer"
google.maps.event.addListener @clusterer, eventName, options[eventName]

clearEvents: (options, optionsName) ->
if angular.isDefined(options) and options? and angular.isObject(options)
for eventName, eventHandler of options
if options.hasOwnProperty(eventName) and angular.isFunction(options[eventName])
$log.info "#{optionsName}: Clearing event: #{eventName} to clusterer"
google.maps.event.clearListeners @clusterer, eventName

destroy: =>
@clearEvents @opt_events, 'opt_events'
@clear()

fit: =>
FitHelper.fit @getGMarkers(), @clusterer.getMap()

getGMarkers: =>
@clusterer.getMarkers().values()

checkSync: =>
# throw 'GMarkers out of Sync in MarkerClusterer' if @getGMarkers().length != @propMapGMarkers.length
]
11 changes: 11 additions & 0 deletions src/js/wrapped/marker_spiderfier.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
angular.module('uiGmapgoogle-maps.wrapped')
.service('uiGmapMarkerSpiderfier', [ 'uiGmapGoogleMapApi', function(GoogleMapApi) {
var self = this;
//BEGIN REPLACE
@@REPLACE_W_LIBS
//END REPLACE
GoogleMapApi.then(function(){
self.OverlappingMarkerSpiderfier.initializeGoogleMaps(window.google);
});
return this.OverlappingMarkerSpiderfier;
}]);