ngmap
Version:
The Simplest AngularJS Google Maps V3 Directive
119 lines • 10.2 kB
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<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<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 < mapInstances.length;i++) {
mapInstances[i] = null;
}
mapInstances = [];
};
/**
* @memberof NgMapPool
* @function deleteMapInstance
* @desc delete a mapInstance
*/
var deleteMapInstance= function(mapId) {
for( var i=0; i<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>