UNPKG

angular-heremaps

Version:

Angular directive for working with Nokia Here Maps

111 lines (82 loc) 3.7 kB
module.exports = HereMapsEventsFactory; HereMapsEventsFactory.$inject = [ 'HereMapsUtilsService', 'HereMapsMarkerService', 'HereMapsCONSTS', 'HereMapsInfoBubbleFactory' ]; function HereMapsEventsFactory(HereMapsUtilsService, HereMapsMarkerService, HereMapsCONSTS, HereMapsInfoBubbleFactory) { function Events(platform, Injector, listeners) { this.map = platform.map; this.listeners = listeners; this.inject = new Injector(); this.events = platform.events = new H.mapevents.MapEvents(this.map); this.behavior = platform.behavior = new H.mapevents.Behavior(this.events); this.bubble = HereMapsInfoBubbleFactory.create(); this.setupEventListeners(); } var proto = Events.prototype; proto.setupEventListeners = setupEventListeners; proto.setupOptions = setupOptions; proto.triggerUserListener = triggerUserListener; proto.infoBubbleHandler = infoBubbleHandler; return { start: function(args) { if (!(args.platform.map instanceof H.Map)) return console.error('Missed required map instance'); var events = new Events(args.platform, args.injector, args.listeners); args.options && events.setupOptions(args.options); } } function setupEventListeners() { var self = this; HereMapsUtilsService.addEventListener(this.map, 'tap', this.infoBubbleHandler.bind(this)); HereMapsUtilsService.addEventListener(this.map, 'pointermove', this.infoBubbleHandler.bind(this)); HereMapsUtilsService.addEventListener(this.map, 'dragstart', function(e) { if (HereMapsMarkerService.isMarkerInstance(e.target)) { self.behavior.disable(); } self.triggerUserListener(HereMapsCONSTS.USER_EVENTS[e.type], e); }); HereMapsUtilsService.addEventListener(this.map, 'drag', function(e) { var pointer = e.currentPointer, target = e.target; if (HereMapsMarkerService.isMarkerInstance(target)) { target.setPosition(self.map.screenToGeo(pointer.viewportX, pointer.viewportY)); } self.triggerUserListener(HereMapsCONSTS.USER_EVENTS[e.type], e); }); HereMapsUtilsService.addEventListener(this.map, 'dragend', function(e) { if (HereMapsMarkerService.isMarkerInstance(e.target)) { self.behavior.enable(); } self.triggerUserListener(HereMapsCONSTS.USER_EVENTS[e.type], e); }); HereMapsUtilsService.addEventListener(this.map, 'mapviewchangestart', function(e) { self.triggerUserListener(HereMapsCONSTS.USER_EVENTS[e.type], e); }); HereMapsUtilsService.addEventListener(this.map, 'mapviewchange', function(e) { self.triggerUserListener(HereMapsCONSTS.USER_EVENTS[e.type], e); }); HereMapsUtilsService.addEventListener(this.map, 'mapviewchangeend', function(e) { self.triggerUserListener(HereMapsCONSTS.USER_EVENTS[e.type], e); }); } function setupOptions(options) { if (!options) return; this.map.draggable = !!options.draggable; } function triggerUserListener(eventName, e) { if (!this.listeners) return; var callback = this.listeners[eventName]; callback && callback(e); } function infoBubbleHandler(e){ var ui = this.inject('ui'); if(ui) this.bubble.toggle(e, ui); this.triggerUserListener(HereMapsCONSTS.USER_EVENTS[e.type], e); } };