"use strict"; (function () { 'use strict'; /** * @ngdoc directive * @name locationModule:locationMap * @restrict AE * @desription Creates custom Google map with map tiles retrieved from the server and places asset pin on this map. * This functionality is being used to provide user with ability to find out where particular asset can be found */ angular.module('locationModule') .directive('locationMap', ['userModel', 'locationModel', '$compile', function (userModel, locationModel, $compile) { return { restrict: 'AE', template: '
', replace: true, link: function (scope, $element) { scope.locationModel = locationModel; /** * This method is called on asset pin click event. If asset has no infobubble information, * new instance of infobubble will be created, via compiling poi-info-bubble directive on current scope, with * parent asset to be specified in parent attribute of the html to be compiled * @param {Object} $event Angular click event object. * */ scope.openInfoBubble = function ($e) { $e.preventDefault(); $e.stopPropagation(); scope.activePOI = scope.POI.details; if (scope.POI.details.infoBubble) { scope.activePOI.infoBubble.open(scope.locationMap.floormap); scope.activePOI.marker.setVisible(false); } else { $compile("")(scope); } }; /** * Retrieves asset details and asset floorMap tiles * Param is asset id string * */ locationModel.getPOIdetails(scope.POI.id) .then(function (poi) { scope.POI.details = poi; locationModel.getMapTiles(poi) .then(function () { scope.POI.tiles = locationModel.tilesCache[poi.id]; init(); }); }); /** * Triggered, when all necessary data is ready. It creates custom google map * and adds asset marker on it. * */ function init() { locationModel.initLocationMap($element[0], scope.POI).then(function (mapData) { scope.locationMap = mapData; locationModel.addLocationMarker(scope.locationMap, scope.POI.details); $compile(scope.POI.details.marker.content)(scope); scope.activePOI = scope.POI.details; $compile("")(scope); scope.state.loadingMap = false; }).catch(function () { scope.state.loadingMap = false; }); } } }; }]); }());