diff --git a/src/mapml-viewer.js b/src/mapml-viewer.js index c19d815c2..f7800bef8 100644 --- a/src/mapml-viewer.js +++ b/src/mapml-viewer.js @@ -347,14 +347,17 @@ export class MapViewer extends HTMLElement { } }); // pasting layer-, links and geojson using Ctrl+V - this.parentElement.addEventListener('keydown', function (e) { - if(e.keyCode === 86 && e.ctrlKey && document.activeElement.nodeName === "MAPML-VIEWER"){ + this.addEventListener('keydown', function (e) { + if(e.keyCode === 86 && e.ctrlKey){ navigator.clipboard .readText() .then( (layer) => { - M._pasteLayer(document.activeElement, layer); + M._pasteLayer(this, layer); }); + } else if (e.keyCode === 32) { + e.preventDefault(); + this._map.fire('keypress', {originalEvent: e}); }}); this.parentElement.addEventListener('mousedown', function (e) { if(document.activeElement.nodeName === "MAPML-VIEWER"){ diff --git a/src/web-map.js b/src/web-map.js index 324efe12f..4d5bc6c88 100644 --- a/src/web-map.js +++ b/src/web-map.js @@ -388,14 +388,17 @@ export class WebMap extends HTMLMapElement { } }); // pasting layer-, links and geojson using Ctrl+V - this.parentElement.addEventListener('keydown', function (e) { - if(e.keyCode === 86 && e.ctrlKey && document.activeElement.nodeName === "DIV"){ + this.addEventListener('keydown', function (e) { + if(e.keyCode === 86 && e.ctrlKey){ navigator.clipboard .readText() .then( (layer) => { - M._pasteLayer(document.activeElement.parentElement, layer); + M._pasteLayer(this, layer); }); + } else if (e.keyCode === 32) { + e.preventDefault(); + this._map.fire('keypress', {originalEvent: e}); } }); this.parentElement.addEventListener('mousedown', function (e) { diff --git a/test/e2e/mapml-viewer/mapml-viewer.test.js b/test/e2e/mapml-viewer/mapml-viewer.test.js index 8b7fe94f6..e02b0746f 100644 --- a/test/e2e/mapml-viewer/mapml-viewer.test.js +++ b/test/e2e/mapml-viewer/mapml-viewer.test.js @@ -177,4 +177,18 @@ test.describe("Playwright mapml-viewer Element Tests", () => { ); expect(layerCount).toEqual(3); }); -}); \ No newline at end of file + + test("Press spacebar when focus is on map", async () => { + // scroll to the top + await page.mouse.wheel(0,-1000); + await page.waitForTimeout(300); + await page.click("body > mapml-viewer"); + await page.keyboard.press('Space'); + await page.waitForTimeout(300); + const currPos = await page.$eval( + "body > mapml-viewer", + () => window.pageYOffset + ); + expect(currPos).toEqual(0); + }); +}); diff --git a/test/e2e/web-map/map.test.js b/test/e2e/web-map/map.test.js index 7698b53e2..9421a7914 100644 --- a/test/e2e/web-map/map.test.js +++ b/test/e2e/web-map/map.test.js @@ -71,4 +71,18 @@ test.describe("Playwright web-map Element Tests", () => { ); expect(layerCount).toEqual(3); }); + + test("Press spacebar when focus is on map", async () => { + // scroll to the top + await page.mouse.wheel(0, -1000); + await page.waitForTimeout(300); + await page.click("body > map"); + await page.keyboard.press('Space'); + await page.waitForTimeout(300); + const currPos = await page.$eval( + "body > map", + () => window.pageYOffset + ); + expect(currPos).toEqual(0); + }); }); \ No newline at end of file