Skip to content

Commit 6186b1a

Browse files
committed
refactor right click enhancement.
By rewriting the prototype of the advancedmarker and inject functionality for right clicking there.We have a cleaner and more native event management within the component and fix issues surrounding different ways contextmenu is supported across browsers.
1 parent 3cf5bb7 commit 6186b1a

File tree

3 files changed

+58
-2
lines changed

3 files changed

+58
-2
lines changed

src/dev-app/google-map/google-map-demo.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,22 @@
1414
<map-advanced-marker
1515
#firstMarker="mapAdvancedMarker"
1616
[position]="center"
17-
(mapClick)="infoWindow.open(firstMarker)"></map-advanced-marker>
17+
(mapClick)="infoWindow.open(firstMarker)"
18+
(mapRightclick)="handleMarkerRightclick($event)"
19+
></map-advanced-marker>
1820
@for (markerPosition of markerPositions; track markerPosition) {
1921
<map-advanced-marker #marker="mapAdvancedMarker"
2022
[position]="markerPosition"
21-
(mapClick)="infoWindow.open(marker)"></map-advanced-marker>
23+
(mapClick)="infoWindow.open(marker)"
24+
(mapRightclick)="handleMarkerRightclick($event)"
25+
></map-advanced-marker>
2226
}
2327
</map-marker-clusterer>
2428
@if (hasCustomContentMarker) {
2529
<map-advanced-marker
2630
#secondMarker="mapAdvancedMarker"
2731
(mapClick)="infoWindow.open(secondMarker)"
32+
(mapRightclick)="handleMarkerRightclick($event)"
2833
title="Advanced Marker"
2934
[gmpDraggable]="false"
3035
[content]="advancedMarkerContent"

src/dev-app/google-map/google-map-demo.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ export class GoogleMapDemo {
183183
this.markerPositions.pop();
184184
}
185185

186+
handleMarkerRightclick(event: google.maps.MapMouseEvent) {
187+
console.log('Marker right-clicked');
188+
}
189+
186190
editablePolylineChanged(editable: boolean) {
187191
this.polylineOptions = {
188192
...this.polylineOptions,

src/google-maps/map-advanced-marker/map-advanced-marker.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,58 @@ export class MapAdvancedMarker
225225
this.advancedMarker = new advancedMarkerConstructor(this._combineOptions());
226226
this._assertInitialized();
227227
this.advancedMarker.map = map;
228+
this._addRightClickSupport();
228229
this._eventManager.setTarget(this.advancedMarker);
229230
this.markerInitialized.next(this.advancedMarker);
230231
});
231232
}
232233

234+
private _addRightClickSupport() {
235+
if (!this.advancedMarker?.element) return;
236+
237+
// Enhance the AdvancedMarkerElement prototype to natively support rightclick events
238+
const markerProto = Object.getPrototypeOf(this.advancedMarker);
239+
240+
if (!markerProto._rightClickEnhanced) {
241+
const originalAddListener = markerProto.addListener;
242+
243+
markerProto.addListener = function (eventName: string, handler: Function) {
244+
if (eventName === 'rightclick') {
245+
// Handle rightclick using mousedown event with right mouse button check
246+
const listener = (event: MouseEvent) => {
247+
// Only handle right mouse button clicks (button 2)
248+
if (event.button === 2) {
249+
const mapMouseEvent = {
250+
domEvent: event,
251+
latLng: null,
252+
stop: () => {
253+
event.stopPropagation();
254+
event.preventDefault();
255+
},
256+
} as google.maps.MapMouseEvent;
257+
258+
handler(mapMouseEvent);
259+
}
260+
};
261+
262+
this.element.addEventListener('mousedown', listener);
263+
264+
return {
265+
remove: () => {
266+
this.element.removeEventListener('mousedown', listener);
267+
},
268+
};
269+
} else {
270+
// Use original method for other events
271+
return originalAddListener.call(this, eventName, handler);
272+
}
273+
};
274+
275+
// Mark prototype as enhanced to avoid multiple enhancements
276+
markerProto._rightClickEnhanced = true;
277+
}
278+
}
279+
233280
ngOnChanges(changes: SimpleChanges) {
234281
const {advancedMarker, _content, _position, _title, _draggable, _zIndex} = this;
235282
if (advancedMarker) {

0 commit comments

Comments
 (0)