UNPKG

ngmap

Version:
119 lines 10.2 kB
<!doctype html> <html> <head> <meta charset="utf-8"> <base href="../"> <title>JSDoc: source : ng-map-pool.js</title> <link href="css/prettify-tomorrow.css" type="text/css" rel="stylesheet"> <link href="css/site.css" type="text/css" rel="stylesheet"> </head> <body ng-app=""> <nav id="toc"> <input placeholder="Filter" id="filter-input" class="col12 block field" type="text"> <div class="nav-wrapper"> <h2><a href="index.html">Index</a></h2> <ul class="module"> <!-- undefined --> <h2 class="module"> <a chref="" ng-click="moduleundefined = !moduleundefined"> module: undefined </a> <i ng-cloak="" ng-show="moduleundefined">+</i> </h2> <li id="undefined" ng-hide="moduleundefined"> <ul class="group"> <h2> <a href="" ng-click="undefinedservice = !undefinedservice"> service </a> <i ng-cloak="" ng-show="undefinedservice">+</i> </h2> <ul ng-hide="undefinedservice"> <li> <a href="Attr2MapOptions.html">Attr2MapOptions</a> </li><li> <a href="GeoCoder.html">GeoCoder</a> </li><li> <a href="GoogleMapsApi.html">GoogleMapsApi</a> </li><li> <a href="NavigatorGeolocation.html">NavigatorGeolocation</a> </li><li> <a href="StreetView.html">StreetView</a> </li> </ul> </ul><ul class="group"> <h2> <a href="" ng-click="undefineddirective = !undefineddirective"> directive </a> <i ng-cloak="" ng-show="undefineddirective">+</i> </h2> <ul ng-hide="undefineddirective"> <li> <a href="bicycling-layer.html">bicycling-layer</a> </li><li> <a href="custom-control.html">custom-control</a> </li><li> <a href="directions.html">directions</a> </li><li> <a href="drawing-manager.html">drawing-manager</a> </li><li> <a href="dynamic-maps-engine-layer.html">dynamic-maps-engine-layer</a> </li><li> <a href="fusion-tables-layer.html">fusion-tables-layer</a> </li><li> <a href="heatmap-layer.html">heatmap-layer</a> </li><li> <a href="info-window.html">info-window</a> </li><li> <a href="kml-layer.html">kml-layer</a> </li><li> <a href="map-data.html">map-data</a> </li><li> <a href="map-lazy-load.html">map-lazy-load</a> </li><li> <a href="map-type.html">map-type</a> </li><li> <a href="maps-engine-layer.html">maps-engine-layer</a> </li><li> <a href="marker.html">marker</a> </li><li> <a href="overlay-map-type.html">overlay-map-type</a> </li><li> <a href="places-auto-complete.html">places-auto-complete</a> </li><li> <a href="shape.html">shape</a> </li><li> <a href="streetview-panorama.html">streetview-panorama</a> </li><li> <a href="traffic-layer.html">traffic-layer</a> </li><li> <a href="transit-layer.html">transit-layer</a> </li> </ul> </ul><ul class="group"> <h2> <a href="" ng-click="undefinedprovider = !undefinedprovider"> provider </a> <i ng-cloak="" ng-show="undefinedprovider">+</i> </h2> <ul ng-hide="undefinedprovider"> <li> <a href="NgMap.html">NgMap</a> </li> </ul> </ul><ul class="group"> <h2> <a href="" ng-click="undefinedfactory = !undefinedfactory"> factory </a> <i ng-cloak="" ng-show="undefinedfactory">+</i> </h2> <ul ng-hide="undefinedfactory"> <li> <a href="NgMapPool.html">NgMapPool</a> </li> </ul> </ul> </li> </ul><ul class="module"> <!-- ngmap --> <h2 class="module"> <a chref="" ng-click="modulengmap = !modulengmap"> module: ngmap </a> <i ng-cloak="" ng-show="modulengmap">+</i> </h2> <li id="ngmap" ng-hide="modulengmap"> <ul class="group"> <h2> <a href="" ng-click="ngmapdirective = !ngmapdirective"> directive </a> <i ng-cloak="" ng-show="ngmapdirective">+</i> </h2> <ul ng-hide="ngmapdirective"> <li> <a href="ngmap.custom-marker.html">custom-marker</a> </li> </ul> </ul> </li> </ul><ul class="module"> <!-- ng_ap --> <h2 class="module"> <a chref="" ng-click="moduleng_ap = !moduleng_ap"> module: ngMap </a> <i ng-cloak="" ng-show="moduleng_ap">+</i> </h2> <li id="ngMap" ng-hide="moduleng_ap"> <ul class="group"> <h2> <a href="" ng-click="ng_apdirective = !ng_apdirective"> directive </a> <i ng-cloak="" ng-show="ng_apdirective">+</i> </h2> <ul ng-hide="ng_apdirective"> <li> <a href="ngMap.ng-map.html">ng-map</a> </li> </ul> </ul> </li> </ul> </div> </nav> <div id="content" class="page-wrap"> <h1 class="title"> source : ng-map-pool.js </h1> <div id="main" class="big-container"> <!-- source code html --> <article> <pre class="prettyprint source linenums"><code>/** * @ngdoc factory * @name NgMapPool * @description * Provide map instance to avoid memory leak */ (function() { 'use strict'; /** * @memberof NgMapPool * @desc map instance pool */ var mapInstances = []; var $window, $document, $timeout; var add = function(el) { var mapDiv = $document.createElement("div"); mapDiv.style.width = "100%"; mapDiv.style.height = "100%"; el.appendChild(mapDiv); var map = new $window.google.maps.Map(mapDiv, {}); mapInstances.push(map); return map; }; var findById = function(el, id) { var notInUseMap; for (var i=0; i&lt;mapInstances.length; i++) { var map = mapInstances[i]; if (map.id == id && !map.inUse) { var mapDiv = map.getDiv(); el.appendChild(mapDiv); notInUseMap = map; break; } } return notInUseMap; }; var findUnused = function(el) { //jshint ignore:line var notInUseMap; for (var i=0; i&lt;mapInstances.length; i++) { var map = mapInstances[i]; if (map.id) { continue; } if (!map.inUse) { var mapDiv = map.getDiv(); el.appendChild(mapDiv); notInUseMap = map; break; } } return notInUseMap; }; /** * @memberof NgMapPool * @function getMapInstance * @param {HtmlElement} el map container element * @return map instance for the given element */ var getMapInstance = function(el) { var map = findById(el, el.id) || findUnused(el); if (!map) { map = add(el); } else { /* firing map idle event, which is used by map controller */ $timeout(function() { google.maps.event.trigger(map, 'idle'); }, 100); } map.inUse = true; return map; }; /** * @memberof NgMapPool * @function returnMapInstance * @param {Map} an instance of google.maps.Map * @desc sets the flag inUse of the given map instance to false, so that it * can be reused later */ var returnMapInstance = function(map) { map.inUse = false; }; /** * @memberof NgMapPool * @function resetMapInstances * @desc resets mapInstance array */ var resetMapInstances = function() { for(var i = 0;i &lt; mapInstances.length;i++) { mapInstances[i] = null; } mapInstances = []; }; /** * @memberof NgMapPool * @function deleteMapInstance * @desc delete a mapInstance */ var deleteMapInstance= function(mapId) { for( var i=0; i&lt;mapInstances.length; i++ ) { if( (mapInstances[i] !== null) && (mapInstances[i].id == mapId)) { mapInstances[i]= null; mapInstances.splice( i, 1 ); } } }; var NgMapPool = function(_$document_, _$window_, _$timeout_) { $document = _$document_[0], $window = _$window_, $timeout = _$timeout_; return { mapInstances: mapInstances, resetMapInstances: resetMapInstances, getMapInstance: getMapInstance, returnMapInstance: returnMapInstance, deleteMapInstance: deleteMapInstance }; }; NgMapPool.$inject = [ '$document', '$window', '$timeout']; angular.module('ngMap').factory('NgMapPool', NgMapPool); })(); </code></pre> </article> <!-- index.html --> <!-- class files --> </div> <footer style="clear:both"> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.2</a> using <a href="https://github.com/allenhwkim/angular-jsdoc">Angular-JSDoc template</a> </footer> </div> <script src="js/prettify.js"></script> <script src="js/angular.min.js"></script> <script src="js/site.js"></script> <!--%= prettyJson %--> <script> prettyPrint(); var lineNo = window.location.hash.match(/#line([0-9]+)$/); lineNo && document.querySelector("ol li:nth-child("+(lineNo[1])+")").scrollIntoView(); </script> </body> </html>