File indexing completed on 2026-04-09 07:58:27
0001 GMaps.prototype.createMarker = function(options) {
0002 if (options.lat == undefined && options.lng == undefined && options.position == undefined) {
0003 throw 'No latitude or longitude defined.';
0004 }
0005
0006 var self = this,
0007 details = options.details,
0008 fences = options.fences,
0009 outside = options.outside,
0010 base_options = {
0011 position: new google.maps.LatLng(options.lat, options.lng),
0012 map: null
0013 },
0014 marker_options = extend_object(base_options, options);
0015
0016 delete marker_options.lat;
0017 delete marker_options.lng;
0018 delete marker_options.fences;
0019 delete marker_options.outside;
0020
0021 var marker = new google.maps.Marker(marker_options);
0022
0023 marker.fences = fences;
0024
0025 if (options.infoWindow) {
0026 marker.infoWindow = new google.maps.InfoWindow(options.infoWindow);
0027
0028 var info_window_events = ['closeclick', 'content_changed', 'domready', 'position_changed', 'zindex_changed'];
0029
0030 for (var ev = 0; ev < info_window_events.length; ev++) {
0031 (function(object, name) {
0032 if (options.infoWindow[name]) {
0033 google.maps.event.addListener(object, name, function(e){
0034 options.infoWindow[name].apply(this, [e]);
0035 });
0036 }
0037 })(marker.infoWindow, info_window_events[ev]);
0038 }
0039 }
0040
0041 var marker_events = ['animation_changed', 'clickable_changed', 'cursor_changed', 'draggable_changed', 'flat_changed', 'icon_changed', 'position_changed', 'shadow_changed', 'shape_changed', 'title_changed', 'visible_changed', 'zindex_changed'];
0042
0043 var marker_events_with_mouse = ['dblclick', 'drag', 'dragend', 'dragstart', 'mousedown', 'mouseout', 'mouseover', 'mouseup'];
0044
0045 for (var ev = 0; ev < marker_events.length; ev++) {
0046 (function(object, name) {
0047 if (options[name]) {
0048 google.maps.event.addListener(object, name, function(){
0049 options[name].apply(this, [this]);
0050 });
0051 }
0052 })(marker, marker_events[ev]);
0053 }
0054
0055 for (var ev = 0; ev < marker_events_with_mouse.length; ev++) {
0056 (function(map, object, name) {
0057 if (options[name]) {
0058 google.maps.event.addListener(object, name, function(me){
0059 if(!me.pixel){
0060 me.pixel = map.getProjection().fromLatLngToPoint(me.latLng)
0061 }
0062
0063 options[name].apply(this, [me]);
0064 });
0065 }
0066 })(this.map, marker, marker_events_with_mouse[ev]);
0067 }
0068
0069 google.maps.event.addListener(marker, 'click', function() {
0070 this.details = details;
0071
0072 if (options.click) {
0073 options.click.apply(this, [this]);
0074 }
0075
0076 if (marker.infoWindow) {
0077 self.hideInfoWindows();
0078 marker.infoWindow.open(self.map, marker);
0079 }
0080 });
0081
0082 google.maps.event.addListener(marker, 'rightclick', function(e) {
0083 e.marker = this;
0084
0085 if (options.rightclick) {
0086 options.rightclick.apply(this, [e]);
0087 }
0088
0089 if (window.context_menu[self.el.id]['marker'] != undefined) {
0090 self.buildContextMenu('marker', e);
0091 }
0092 });
0093
0094 if (marker.fences) {
0095 google.maps.event.addListener(marker, 'dragend', function() {
0096 self.checkMarkerGeofence(marker, function(m, f) {
0097 outside(m, f);
0098 });
0099 });
0100 }
0101
0102 return marker;
0103 };
0104
0105 GMaps.prototype.addMarker = function(options) {
0106 var marker;
0107 if(options.hasOwnProperty('gm_accessors_')) {
0108
0109 marker = options;
0110 }
0111 else {
0112 if ((options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) || options.position) {
0113 marker = this.createMarker(options);
0114 }
0115 else {
0116 throw 'No latitude or longitude defined.';
0117 }
0118 }
0119
0120 marker.setMap(this.map);
0121
0122 if(this.markerClusterer) {
0123 this.markerClusterer.addMarker(marker);
0124 }
0125
0126 this.markers.push(marker);
0127
0128 GMaps.fire('marker_added', marker, this);
0129
0130 return marker;
0131 };
0132
0133 GMaps.prototype.addMarkers = function(array) {
0134 for (var i = 0, marker; marker=array[i]; i++) {
0135 this.addMarker(marker);
0136 }
0137
0138 return this.markers;
0139 };
0140
0141 GMaps.prototype.hideInfoWindows = function() {
0142 for (var i = 0, marker; marker = this.markers[i]; i++){
0143 if (marker.infoWindow) {
0144 marker.infoWindow.close();
0145 }
0146 }
0147 };
0148
0149 GMaps.prototype.removeMarker = function(marker) {
0150 for (var i = 0; i < this.markers.length; i++) {
0151 if (this.markers[i] === marker) {
0152 this.markers[i].setMap(null);
0153 this.markers.splice(i, 1);
0154
0155 if(this.markerClusterer) {
0156 this.markerClusterer.removeMarker(marker);
0157 }
0158
0159 GMaps.fire('marker_removed', marker, this);
0160
0161 break;
0162 }
0163 }
0164
0165 return marker;
0166 };
0167
0168 GMaps.prototype.removeMarkers = function (collection) {
0169 var new_markers = [];
0170
0171 if (typeof collection == 'undefined') {
0172 for (var i = 0; i < this.markers.length; i++) {
0173 var marker = this.markers[i];
0174 marker.setMap(null);
0175
0176 if(this.markerClusterer) {
0177 this.markerClusterer.removeMarker(marker);
0178 }
0179
0180 GMaps.fire('marker_removed', marker, this);
0181 }
0182
0183 this.markers = new_markers;
0184 }
0185 else {
0186 for (var i = 0; i < collection.length; i++) {
0187 var index = this.markers.indexOf(collection[i]);
0188
0189 if (index > -1) {
0190 var marker = this.markers[index];
0191 marker.setMap(null);
0192
0193 if(this.markerClusterer) {
0194 this.markerClusterer.removeMarker(marker);
0195 }
0196
0197 GMaps.fire('marker_removed', marker, this);
0198 }
0199 }
0200
0201 for (var i = 0; i < this.markers.length; i++) {
0202 var marker = this.markers[i];
0203 if (marker.getMap() != null) {
0204 new_markers.push(marker);
0205 }
0206 }
0207
0208 this.markers = new_markers;
0209 }
0210 };