Skip to content

Commit df02da8

Browse files
ibesoragithub-actions[bot]
authored andcommitted
Don't overwrite pointer-events set by the user
GitOrigin-RevId: e2c7193fb80320b95539cc74bec95f9f2fe54106
1 parent bbe96e6 commit df02da8

2 files changed

Lines changed: 28 additions & 1 deletion

File tree

src/ui/marker.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export default class Marker extends Evented<MarkerEvents> {
107107
_updateMoving: () => void;
108108
_occludedOpacity: number;
109109
_altitude: number;
110+
_pointerEvents?: string;
110111
_svgElement: Element;
111112
_shadowElement: Element;
112113

@@ -154,6 +155,7 @@ export default class Marker extends Evented<MarkerEvents> {
154155

155156
this._state = 'inactive';
156157
this._isDragging = false;
158+
this._pointerEvents = null;
157159
this._updateMoving = () => this._update(true);
158160

159161
if (!options || !options.element) {
@@ -554,7 +556,12 @@ export default class Marker extends Evented<MarkerEvents> {
554556
}
555557

556558
this._element.style.opacity = `${opacity}`;
557-
this._element.style.pointerEvents = opacity > 0 ? 'auto' : 'none';
559+
const currentPointerEvents = this._element.style.pointerEvents;
560+
const isUnmanaged = this._pointerEvents === null ? currentPointerEvents === '' : currentPointerEvents === this._pointerEvents;
561+
if (isUnmanaged) {
562+
this._pointerEvents = opacity > 0 ? 'auto' : 'none';
563+
this._element.style.pointerEvents = this._pointerEvents;
564+
}
558565
if (this._popup) {
559566
this._popup._setOpacity(opacity);
560567
}

test/unit/ui/marker.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,26 @@ describe('Globe', () => {
13491349
});
13501350
});
13511351

1352+
test('does not override a user-set pointerEvents on a visible marker (#13701)', async () => {
1353+
const map = createMap();
1354+
const marker = new Marker()
1355+
.setLngLat([82, 0])
1356+
.addTo(map);
1357+
map._domRenderTaskQueue.run();
1358+
1359+
marker.getElement().style.pointerEvents = 'none';
1360+
map.setProjection('globe');
1361+
1362+
await new Promise(resolve => {
1363+
map.once('render', () => {
1364+
expect(marker.getElement().style.opacity).toBe('1');
1365+
expect(marker.getElement().style.pointerEvents).toBe('none');
1366+
map.remove();
1367+
resolve();
1368+
});
1369+
});
1370+
});
1371+
13521372
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
13531373
function transform(marker) { return marker.getElement().style.transform; }
13541374

0 commit comments

Comments
 (0)