174 lines
6.2 KiB
HTML
Executable File
174 lines
6.2 KiB
HTML
Executable File
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>JSDoc: Source: directives/marker.js</title>
|
|
|
|
<script src="scripts/prettify/prettify.js"> </script>
|
|
<script src="scripts/prettify/lang-css.js"> </script>
|
|
<!--[if lt IE 9]>
|
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
<![endif]-->
|
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="main">
|
|
|
|
<h1 class="page-title">Source: directives/marker.js</h1>
|
|
|
|
|
|
|
|
|
|
|
|
<section>
|
|
<article>
|
|
<pre class="prettyprint source linenums"><code>/**
|
|
* @ngdoc directive
|
|
* @name marker
|
|
* @requires Attr2Options
|
|
* @requires NavigatorGeolocation
|
|
* @description
|
|
* Draw a Google map marker on a map with given options and register events
|
|
*
|
|
* Requires: map directive
|
|
*
|
|
* Restrict To: Element
|
|
*
|
|
* @param {String} position address, 'current', or [latitude, longitude]
|
|
* example:
|
|
* '1600 Pennsylvania Ave, 20500 Washingtion DC',
|
|
* 'current position',
|
|
* '[40.74, -74.18]'
|
|
* @param {Boolean} centered if set, map will be centered with this marker
|
|
* @param {String} &lt;MarkerOption> Any Marker options, https://developers.google.com/maps/documentation/javascript/reference?csw=1#MarkerOptions
|
|
* @param {String} &lt;MapEvent> Any Marker events, https://developers.google.com/maps/documentation/javascript/reference
|
|
* @example
|
|
* Usage:
|
|
* <map MAP_ATTRIBUTES>
|
|
* <marker ANY_MARKER_OPTIONS ANY_MARKER_EVENTS"></MARKER>
|
|
* </map>
|
|
*
|
|
* Example:
|
|
* <map center="[40.74, -74.18]">
|
|
* <marker position="[40.74, -74.18]" on-click="myfunc()"></div>
|
|
* </map>
|
|
*
|
|
* <map center="the cn tower">
|
|
* <marker position="the cn tower" on-click="myfunc()"></div>
|
|
* </map>
|
|
*/
|
|
ngMap.directive('marker', ['Attr2Options', function(Attr2Options) {
|
|
var parser = Attr2Options;
|
|
|
|
var getMarker = function(options, events) {
|
|
var marker;
|
|
|
|
/**
|
|
* set options
|
|
*/
|
|
if (options.icon instanceof Object) {
|
|
if ((""+options.icon.path).match(/^[A-Z_]+$/)) {
|
|
options.icon.path = google.maps.SymbolPath[options.icon.path];
|
|
}
|
|
for (var key in options.icon) {
|
|
var arr = options.icon[key];
|
|
if (key == "anchor" || key == "origin") {
|
|
options.icon[key] = new google.maps.Point(arr[0], arr[1]);
|
|
} else if (key == "size" || key == "scaledSize") {
|
|
options.icon[key] = new google.maps.Size(arr[0], arr[1]);
|
|
}
|
|
}
|
|
}
|
|
if (!(options.position instanceof google.maps.LatLng)) {
|
|
var orgPosition = options.position;
|
|
options.position = new google.maps.LatLng(0,0);
|
|
marker = new google.maps.Marker(options);
|
|
parser.setDelayedGeoLocation(marker, 'setPosition', orgPosition);
|
|
} else {
|
|
marker = new google.maps.Marker(options);
|
|
}
|
|
|
|
/**
|
|
* set events
|
|
*/
|
|
if (Object.keys(events).length > 0) {
|
|
console.log("markerEvents", events);
|
|
}
|
|
for (var eventName in events) {
|
|
if (eventName) {
|
|
google.maps.event.addListener(marker, eventName, events[eventName]);
|
|
}
|
|
}
|
|
|
|
return marker;
|
|
};
|
|
|
|
return {
|
|
restrict: 'E',
|
|
require: '^map',
|
|
link: function(scope, element, attrs, mapController) {
|
|
var orgAttrs = parser.orgAttributes(element);
|
|
var filtered = parser.filter(attrs);
|
|
var markerOptions = parser.getOptions(filtered, scope);
|
|
var markerEvents = parser.getEvents(scope, filtered);
|
|
console.log('marker options', markerOptions, 'events', markerEvents);
|
|
|
|
/**
|
|
* set event to clean up removed marker
|
|
* useful with ng-repeat
|
|
*/
|
|
element.bind('$destroy', function() {
|
|
var markers = marker.map.markers;
|
|
for (var name in markers) {
|
|
if (markers[name] == marker) {
|
|
delete markers[name];
|
|
}
|
|
}
|
|
marker.setMap(null);
|
|
});
|
|
|
|
var marker = getMarker(markerOptions, markerEvents);
|
|
mapController.addMarker(marker);
|
|
|
|
/**
|
|
* set observers
|
|
*/
|
|
parser.observeAttrSetObj(orgAttrs, attrs, marker); /* observers */
|
|
|
|
} //link
|
|
}; // return
|
|
}]);//
|
|
</code></pre>
|
|
</article>
|
|
</section>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<nav>
|
|
<h2><a href="index.html">Index</a></h2><h3>service</h3><ul><li><a href="Attr2Options.html">Attr2Options</a></li><li><a href="GeoCoder.html">GeoCoder</a></li><li><a href="NavigatorGeolocation.html">NavigatorGeolocation</a></li><li><a href="StreetView.html">StreetView</a></li></ul><h3>directive</h3><ul><li><a href="bicycling-layer.html">bicycling-layer</a></li><li><a href="cloud-layer.html">cloud-layer</a></li><li><a href="custom-control.html">custom-control</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="lazy-load.html">lazy-load</a></li><li><a href="map.html">map</a></li><li><a href="map-data.html">map-data</a></li><li><a href="map-type.html">map-type</a></li><li><a href="MapController.html">MapController</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="shape.html">shape</a></li><li><a href="traffic-layer.html">traffic-layer</a></li><li><a href="transit-layer.html">transit-layer</a></li><li><a href="weather-layer.html">weather-layer</a></li></ul>
|
|
</nav>
|
|
|
|
<br clear="both">
|
|
|
|
<footer>
|
|
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-alpha9</a>
|
|
and <a href="https://github.com/allenhwkim/angular-jsdoc">angular-jsdoc</a>
|
|
</footer>
|
|
|
|
<script> prettyPrint(); </script>
|
|
<script src="scripts/linenumber.js"> </script>
|
|
<script>
|
|
var href=window.location.href.match(/\/([^\/]+$)/)[1];
|
|
document.querySelector("nav a[href='"+href+"']").scrollIntoView(true);
|
|
if (window.location.hash == "")
|
|
document.querySelector("body").scrollIntoView(true);
|
|
</script>
|
|
</body>
|
|
</html>
|