From c5d923565b8e6b6a7ba69bc1db14f85fc3b93dae Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Fri, 14 Apr 2023 15:53:19 -0400 Subject: [PATCH 1/9] first fix --- src/layer.js | 7 +++++++ src/mapml/handlers/ContextMenu.js | 2 +- src/mapml/layers/MapMLLayer.js | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/layer.js b/src/layer.js index c2a7b3f9f..32245b83d 100644 --- a/src/layer.js +++ b/src/layer.js @@ -234,6 +234,13 @@ export class MapLayer extends HTMLElement { } }, 0); } + getOuterHTML() { + let fullLayer = this; + if (fullLayer.hasAttribute('src')) { + fullLayer.setAttribute('src', this._layer.getHref()); + } + return fullLayer.outerHTML; + } _onLayerChange() { if (this._layer._map) { // can't disable observers, have to set a flag telling it where diff --git a/src/mapml/handlers/ContextMenu.js b/src/mapml/handlers/ContextMenu.js index 9d6211ec9..bc96e3042 100644 --- a/src/mapml/handlers/ContextMenu.js +++ b/src/mapml/handlers/ContextMenu.js @@ -223,7 +223,7 @@ export var ContextMenu = L.Handler.extend({ _copyLayer: function (e) { let context = e instanceof KeyboardEvent ? this._map.contextMenu : this.contextMenu, layerElem = context._layerClicked.layer._layerEl; - context._copyData(layerElem.outerHTML); + context._copyData(layerElem.getOuterHTML()); }, _goForward: function(e){ diff --git a/src/mapml/layers/MapMLLayer.js b/src/mapml/layers/MapMLLayer.js index 24c19cefd..3eadb4f63 100644 --- a/src/mapml/layers/MapMLLayer.js +++ b/src/mapml/layers/MapMLLayer.js @@ -63,6 +63,9 @@ export var MapMLLayer = L.Layer.extend({ return this; }, + getHref: function () { + return this._href ?? ""; + }, _updateZIndex: function () { if (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) { this._container.style.zIndex = this.options.zIndex; From f3562fadc8ceae477a4d19164cf239548bc88114 Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Fri, 14 Apr 2023 16:41:31 -0400 Subject: [PATCH 2/9] first fix -modified --- src/layer.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/layer.js b/src/layer.js index 32245b83d..1aa4baccf 100644 --- a/src/layer.js +++ b/src/layer.js @@ -235,11 +235,13 @@ export class MapLayer extends HTMLElement { }, 0); } getOuterHTML() { - let fullLayer = this; - if (fullLayer.hasAttribute('src')) { - fullLayer.setAttribute('src', this._layer.getHref()); + let fullLayer = this.outerHTML; + if (this.hasAttribute('src')) { + let findSrc = /src="([^"]*)"/; + let newSrc = this._layer.getHref(); + fullLayer = fullLayer.replace(findSrc, `src="${newSrc}"`); } - return fullLayer.outerHTML; + return fullLayer; } _onLayerChange() { if (this._layer._map) { From 6f57e14336459dbf150f6dbf7eb02b40899b6f02 Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Wed, 19 Apr 2023 12:08:18 -0400 Subject: [PATCH 3/9] include map-link url modifications --- src/layer.js | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/layer.js b/src/layer.js index 1aa4baccf..229806ff1 100644 --- a/src/layer.js +++ b/src/layer.js @@ -236,12 +236,33 @@ export class MapLayer extends HTMLElement { } getOuterHTML() { let fullLayer = this.outerHTML; + let tempElement = document.createElement('div'); + tempElement.innerHTML = fullLayer; + if (this.hasAttribute('src')) { - let findSrc = /src="([^"]*)"/; let newSrc = this._layer.getHref(); - fullLayer = fullLayer.replace(findSrc, `src="${newSrc}"`); + tempElement.querySelector('layer-').setAttribute('src',newSrc); } - return fullLayer; + if (this.querySelector('map-link')) { + let mapLinks = tempElement.querySelectorAll('map-link'); + + mapLinks.forEach((mapLink) => { + + if (mapLink.hasAttribute('href')) { + mapLink.setAttribute('href', decodeURI(this.transformURL(mapLink.attributes.href.value, this.baseURI ? this.baseURI : document.baseURI))); + console.log(mapLink); + } + else if (mapLink.hasAttribute('tref')) { + mapLink.setAttribute('tref', decodeURI(this.transformURL(mapLink.attributes.tref.value, this.baseURI ? this.baseURI : document.baseURI))); + console.log(mapLink); + } + }); + } + + return tempElement.innerHTML; + } + transformURL(url, baseUrl) { + return (new URL(url, baseUrl)).href; } _onLayerChange() { if (this._layer._map) { From d1e6977dd62a75eb08102428b7da54181a377769 Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Wed, 19 Apr 2023 16:33:04 -0400 Subject: [PATCH 4/9] fix tests --- src/layer.js | 2 -- test/e2e/core/layerContextMenu.test.js | 2 +- test/e2e/core/mapContextMenu.test.js | 2 +- test/e2e/mapml-viewer/viewerContextMenu.test.js | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/layer.js b/src/layer.js index 229806ff1..c6106d364 100644 --- a/src/layer.js +++ b/src/layer.js @@ -250,11 +250,9 @@ export class MapLayer extends HTMLElement { if (mapLink.hasAttribute('href')) { mapLink.setAttribute('href', decodeURI(this.transformURL(mapLink.attributes.href.value, this.baseURI ? this.baseURI : document.baseURI))); - console.log(mapLink); } else if (mapLink.hasAttribute('tref')) { mapLink.setAttribute('tref', decodeURI(this.transformURL(mapLink.attributes.tref.value, this.baseURI ? this.baseURI : document.baseURI))); - console.log(mapLink); } }); } diff --git a/test/e2e/core/layerContextMenu.test.js b/test/e2e/core/layerContextMenu.test.js index 01b834a9e..52d8c9c3d 100644 --- a/test/e2e/core/layerContextMenu.test.js +++ b/test/e2e/core/layerContextMenu.test.js @@ -40,7 +40,7 @@ test.describe("Playwright Layer Context Menu Tests", () => { (text) => text.value ); - expect(copyLayer).toEqual("\n \n "); + expect(copyLayer).toEqual("\n \n "); }); test("Map zooms in to layer 2", async () => { diff --git a/test/e2e/core/mapContextMenu.test.js b/test/e2e/core/mapContextMenu.test.js index 10c47fff0..3ea921812 100644 --- a/test/e2e/core/mapContextMenu.test.js +++ b/test/e2e/core/mapContextMenu.test.js @@ -533,7 +533,7 @@ test.describe("Playwright Map Context Menu Tests", () => { await page.waitForTimeout(200); await page.click("body > map", { button: 'right', - position: {x: 495, y: 580} + position: {x: 485, y: 570} }); const contextMenu = await page.locator('div > div.mapml-contextmenu').first(); expect(await contextMenu.isVisible()).toBeTruthy(); diff --git a/test/e2e/mapml-viewer/viewerContextMenu.test.js b/test/e2e/mapml-viewer/viewerContextMenu.test.js index b21e45d22..959eee00e 100644 --- a/test/e2e/mapml-viewer/viewerContextMenu.test.js +++ b/test/e2e/mapml-viewer/viewerContextMenu.test.js @@ -504,7 +504,7 @@ test.describe("Playwright mapml-viewer Context Menu (and api) Tests", () => { await page.waitForTimeout(200); await page.click("body > mapml-viewer", { button: 'right', - position: {x: 495, y: 580} + position: {x: 485, y: 570} }); const contextMenu = await page.locator('div > div.mapml-contextmenu').first(); expect(await contextMenu.isVisible()).toBeTruthy(); From 3e2c5c2b791826403b2048a0eb2d556dff01eb29 Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Wed, 19 Apr 2023 17:06:43 -0400 Subject: [PATCH 5/9] fix tests --- test/e2e/core/mapContextMenu.test.js | 2 +- test/e2e/mapml-viewer/viewerContextMenu.test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/core/mapContextMenu.test.js b/test/e2e/core/mapContextMenu.test.js index 3ea921812..a7989e19d 100644 --- a/test/e2e/core/mapContextMenu.test.js +++ b/test/e2e/core/mapContextMenu.test.js @@ -533,7 +533,7 @@ test.describe("Playwright Map Context Menu Tests", () => { await page.waitForTimeout(200); await page.click("body > map", { button: 'right', - position: {x: 485, y: 570} + position: {x: 495, y: 550} }); const contextMenu = await page.locator('div > div.mapml-contextmenu').first(); expect(await contextMenu.isVisible()).toBeTruthy(); diff --git a/test/e2e/mapml-viewer/viewerContextMenu.test.js b/test/e2e/mapml-viewer/viewerContextMenu.test.js index 959eee00e..101ad0b5e 100644 --- a/test/e2e/mapml-viewer/viewerContextMenu.test.js +++ b/test/e2e/mapml-viewer/viewerContextMenu.test.js @@ -504,7 +504,7 @@ test.describe("Playwright mapml-viewer Context Menu (and api) Tests", () => { await page.waitForTimeout(200); await page.click("body > mapml-viewer", { button: 'right', - position: {x: 485, y: 570} + position: {x: 495, y: 550} }); const contextMenu = await page.locator('div > div.mapml-contextmenu').first(); expect(await contextMenu.isVisible()).toBeTruthy(); From 4a05ce863889e826d03030d7e891e9488e138eeb Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Thu, 20 Apr 2023 15:03:22 -0400 Subject: [PATCH 6/9] add testing --- test/e2e/core/layerContextMenu.html | 1 + test/e2e/core/layerContextMenu.test.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/test/e2e/core/layerContextMenu.html b/test/e2e/core/layerContextMenu.html index 830a849f0..f8e0b6a30 100644 --- a/test/e2e/core/layerContextMenu.html +++ b/test/e2e/core/layerContextMenu.html @@ -24,6 +24,7 @@ + diff --git a/test/e2e/core/layerContextMenu.test.js b/test/e2e/core/layerContextMenu.test.js index 52d8c9c3d..544703229 100644 --- a/test/e2e/core/layerContextMenu.test.js +++ b/test/e2e/core/layerContextMenu.test.js @@ -40,7 +40,7 @@ test.describe("Playwright Layer Context Menu Tests", () => { (text) => text.value ); - expect(copyLayer).toEqual("\n \n "); + expect(copyLayer).toEqual("\n \n \n "); }); test("Map zooms in to layer 2", async () => { From d48ac4e270e364eb23b6e14e5d972dc70d89dc0d Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Mon, 24 Apr 2023 14:48:05 -0400 Subject: [PATCH 7/9] fix changes --- src/layer.js | 8 +++----- test/e2e/core/layerContextMenu.html | 2 +- test/e2e/core/layerContextMenu.test.js | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/layer.js b/src/layer.js index c6106d364..757a621dc 100644 --- a/src/layer.js +++ b/src/layer.js @@ -249,19 +249,17 @@ export class MapLayer extends HTMLElement { mapLinks.forEach((mapLink) => { if (mapLink.hasAttribute('href')) { - mapLink.setAttribute('href', decodeURI(this.transformURL(mapLink.attributes.href.value, this.baseURI ? this.baseURI : document.baseURI))); + mapLink.setAttribute('href', decodeURI((new URL(mapLink.attributes.href.value, this.baseURI ? this.baseURI : document.baseURI)).href)); } else if (mapLink.hasAttribute('tref')) { - mapLink.setAttribute('tref', decodeURI(this.transformURL(mapLink.attributes.tref.value, this.baseURI ? this.baseURI : document.baseURI))); + mapLink.setAttribute('tref', decodeURI((new URL(mapLink.attributes.tref.value, this.baseURI ? this.baseURI : document.baseURI)).href)); } }); } return tempElement.innerHTML; } - transformURL(url, baseUrl) { - return (new URL(url, baseUrl)).href; - } + _onLayerChange() { if (this._layer._map) { // can't disable observers, have to set a flag telling it where diff --git a/test/e2e/core/layerContextMenu.html b/test/e2e/core/layerContextMenu.html index f8e0b6a30..b66148f0d 100644 --- a/test/e2e/core/layerContextMenu.html +++ b/test/e2e/core/layerContextMenu.html @@ -24,7 +24,7 @@ - + diff --git a/test/e2e/core/layerContextMenu.test.js b/test/e2e/core/layerContextMenu.test.js index 544703229..07bfdc111 100644 --- a/test/e2e/core/layerContextMenu.test.js +++ b/test/e2e/core/layerContextMenu.test.js @@ -40,7 +40,7 @@ test.describe("Playwright Layer Context Menu Tests", () => { (text) => text.value ); - expect(copyLayer).toEqual("\n \n \n "); + expect(copyLayer).toEqual("\n \n \n "); }); test("Map zooms in to layer 2", async () => { From 9ba1bdbe5af09fefc313e3cd45f3197063fff724 Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Tue, 25 Apr 2023 17:09:46 -0400 Subject: [PATCH 8/9] fix changes 2 --- src/layer.js | 13 ++++++++----- test/e2e/core/layerContextMenu.html | 3 ++- test/e2e/core/layerContextMenu.test.js | 26 +++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/layer.js b/src/layer.js index 757a621dc..b3856bf1f 100644 --- a/src/layer.js +++ b/src/layer.js @@ -235,13 +235,12 @@ export class MapLayer extends HTMLElement { }, 0); } getOuterHTML() { - let fullLayer = this.outerHTML; - let tempElement = document.createElement('div'); - tempElement.innerHTML = fullLayer; + + let tempElement = this.cloneNode(true); if (this.hasAttribute('src')) { let newSrc = this._layer.getHref(); - tempElement.querySelector('layer-').setAttribute('src',newSrc); + tempElement.setAttribute('src',newSrc); } if (this.querySelector('map-link')) { let mapLinks = tempElement.querySelectorAll('map-link'); @@ -257,7 +256,11 @@ export class MapLayer extends HTMLElement { }); } - return tempElement.innerHTML; + let outerLayer = tempElement.outerHTML; + + tempElement.remove(); + + return outerLayer; } _onLayerChange() { diff --git a/test/e2e/core/layerContextMenu.html b/test/e2e/core/layerContextMenu.html index b66148f0d..71ec866da 100644 --- a/test/e2e/core/layerContextMenu.html +++ b/test/e2e/core/layerContextMenu.html @@ -22,7 +22,7 @@ - + @@ -58,6 +58,7 @@ + diff --git a/test/e2e/core/layerContextMenu.test.js b/test/e2e/core/layerContextMenu.test.js index 07bfdc111..1ab802415 100644 --- a/test/e2e/core/layerContextMenu.test.js +++ b/test/e2e/core/layerContextMenu.test.js @@ -60,7 +60,7 @@ test.describe("Playwright Layer Context Menu Tests", () => { ); expect(mapZoom).toEqual(11); - expect(mapLocation).toEqual({ max: { x: 43130, y: 43130 }, min: { x: 42630, y: 42630 } }); + expect(mapLocation).toEqual({ max: { x: 43380, y: 43130 }, min: { x: 42380, y: 42630 } }); }); test("Map zooms out to layer 3", async () => { @@ -84,7 +84,7 @@ test.describe("Playwright Layer Context Menu Tests", () => { ); expect(mapZoom).toEqual(11); - expect(mapLocation).toEqual({ max: { x: 43130, y: 43557 }, min: { x: 42630, y: 43057 } }); + expect(mapLocation).toEqual({ max: { x: 43380, y: 43557 }, min: { x: 42380, y: 43057 } }); }); test("Map zooms out to layer 4", async () => { @@ -108,6 +108,26 @@ test.describe("Playwright Layer Context Menu Tests", () => { ); expect(mapZoom).toEqual(5); - expect(mapLocation).toEqual({ max: { x: 8084, y: 8084 }, min: { x: 7584, y: 7584 } }); + expect(mapLocation).toEqual({ max: { x: 8334, y: 8084 }, min: { x: 7334, y: 7584 } }); }); + + test("Layer context menu copy layer 2", async () => { + await page.hover("div > div.leaflet-control-container > div.leaflet-top.leaflet-right > div"); + await page.click("div > div.leaflet-control-container > div.leaflet-top.leaflet-right > div > section > div.leaflet-control-layers-overlays > fieldset:nth-child(5) > div:nth-child(1) > label > span", + { button: "right" }); + + await page.keyboard.press("l"); + await page.click("body > textarea#messageLayer"); + await page.keyboard.press("Control+a"); + await page.keyboard.press("Backspace"); + await page.keyboard.press("Control+v"); + const copyLayer = await page.$eval( + "body > textarea#messageLayer", + (text) => text.value + ); + + expect(copyLayer).toEqual(""); + }); + + }); \ No newline at end of file From 411984c80dc5d0d075aeaaf8b25dfd2cad992fc4 Mon Sep 17 00:00:00 2001 From: AliyanH Date: Wed, 26 Apr 2023 08:56:12 -0400 Subject: [PATCH 9/9] make test name descriptive --- test/e2e/core/layerContextMenu.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/core/layerContextMenu.test.js b/test/e2e/core/layerContextMenu.test.js index 1ab802415..af9259a99 100644 --- a/test/e2e/core/layerContextMenu.test.js +++ b/test/e2e/core/layerContextMenu.test.js @@ -111,7 +111,7 @@ test.describe("Playwright Layer Context Menu Tests", () => { expect(mapLocation).toEqual({ max: { x: 8334, y: 8084 }, min: { x: 7334, y: 7584 } }); }); - test("Layer context menu copy layer 2", async () => { + test("Copy layer with relative src attribute", async () => { await page.hover("div > div.leaflet-control-container > div.leaflet-top.leaflet-right > div"); await page.click("div > div.leaflet-control-container > div.leaflet-top.leaflet-right > div > section > div.leaflet-control-layers-overlays > fieldset:nth-child(5) > div:nth-child(1) > label > span", { button: "right" }); @@ -130,4 +130,4 @@ test.describe("Playwright Layer Context Menu Tests", () => { }); -}); \ No newline at end of file +});