From 582f24aab8c6dcde571cd828c803436f09fb076a Mon Sep 17 00:00:00 2001 From: Eric Duminil <eric.duminil@gmail.com> Date: Fri, 14 Oct 2022 10:25:18 +0200 Subject: [PATCH] Moving some code to utils. --- .../simstadt/regionchooser/website/index.html | 1 + .../website/script/simstadt_openlayers.js | 45 +------------------ .../regionchooser/website/script/utils.js | 42 +++++++++++++++++ 3 files changed, 45 insertions(+), 43 deletions(-) create mode 100644 src/main/resources/eu/simstadt/regionchooser/website/script/utils.js diff --git a/src/main/resources/eu/simstadt/regionchooser/website/index.html b/src/main/resources/eu/simstadt/regionchooser/website/index.html index 141a415..978ba35 100644 --- a/src/main/resources/eu/simstadt/regionchooser/website/index.html +++ b/src/main/resources/eu/simstadt/regionchooser/website/index.html @@ -31,6 +31,7 @@ <div id="side"> <div id="dataPanel" ></div> </div> + <script src="script/utils.js" type="text/javascript"></script> <script src="script/simstadt_openlayers.js" type="text/javascript"></script> </body> </html> diff --git a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js index 0b08990..e8584d0 100644 --- a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js +++ b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js @@ -102,7 +102,7 @@ var regionChooser = (function(){ var features = Array.from(kml_source.getFeatures()); // Sort projects features.sort((a, b) => a.project.localeCompare(b.project)); - features_by_project = groupBy(features, "project"); + features_by_project = utils.groupBy(features, "project"); // Sort CityGMLs inside each project Object.values(features_by_project).forEach(features => features.sort((a, b) => a.name.localeCompare(b.name))); } @@ -370,13 +370,6 @@ var regionChooser = (function(){ } } - groupBy = function(xs, key) { - return xs.reduce(function(rv, x) { - (rv[x[key]] = rv[x[key]] || []).push(x); - return rv; - }, {}); - }; - function displayHelp(){ dataPanel.empty(); dataPanel.append("<h2 class='info'>Welcome to Region Chooser!<br><br>\n"); @@ -427,42 +420,8 @@ var regionChooser = (function(){ var wgs84Coords = geom.getLinearRing(0).getCoordinates(); var wktPolygon = "POLYGON(("; wktPolygon += wgs84Coords.map(lonLat => lonLat.join(" ")).join(", "); - publicScope.copyToClipboard(wktPolygon + "))"); - } - - // Copies a string to the clipboard. Must be called from within an - // event handler such as click. May return false if it failed, but - // this is not always possible. Browser support for Chrome 43+, - // Firefox 42+, Safari 10+, Edge and Internet Explorer 10+. - // Internet Explorer: The clipboard feature may be disabled by - // an administrator. By default a prompt is shown the first - // time the clipboard is used (per session). - // https://stackoverflow.com/a/33928558/6419007 - publicScope.copyToClipboard = function(text) { - if (window.clipboardData && window.clipboardData.setData) { - // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible. - return window.clipboardData.setData("Text", text); - } - else if (document.queryCommandSupported && document.queryCommandSupported("copy")) { - var textarea = document.createElement("textarea"); - textarea.textContent = text; - textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in Microsoft Edge. - document.body.appendChild(textarea); - textarea.select(); - try { - document.execCommand("copy"); // Security exception may be thrown by some browsers. - dataPanel.append("<h2 class='ok'>Coordinates copied to clipboard!</h2><br/>\n"); - return; - } - catch (ex) { - console.warn("Copy to clipboard failed.", ex); - return prompt("Copy to clipboard: Ctrl+C, Enter", text); - } - finally { - document.body.removeChild(textarea); - } + utils.copyToClipboard(wktPolygon + "))", dataPanel); } -} publicScope.showRepositoryName = function(path) { document.getElementById("repo_path").textContent = path; diff --git a/src/main/resources/eu/simstadt/regionchooser/website/script/utils.js b/src/main/resources/eu/simstadt/regionchooser/website/script/utils.js new file mode 100644 index 0000000..d3182a0 --- /dev/null +++ b/src/main/resources/eu/simstadt/regionchooser/website/script/utils.js @@ -0,0 +1,42 @@ +var utils = { + groupBy : function(xs, key) { + return xs.reduce(function(rv, x) { + (rv[x[key]] = rv[x[key]] || []).push(x); + return rv; + }, {}); + }, + + // Copies a string to the clipboard. Must be called from within an + // event handler such as click. May return false if it failed, but + // this is not always possible. Browser support for Chrome 43+, + // Firefox 42+, Safari 10+, Edge and Internet Explorer 10+. + // Internet Explorer: The clipboard feature may be disabled by + // an administrator. By default a prompt is shown the first + // time the clipboard is used (per session). + // https://stackoverflow.com/a/33928558/6419007 + copyToClipboard : function(text, log) { + if (window.clipboardData && window.clipboardData.setData) { + // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible. + return window.clipboardData.setData("Text", text); + } + else if (document.queryCommandSupported && document.queryCommandSupported("copy")) { + var textarea = document.createElement("textarea"); + textarea.textContent = text; + textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in Microsoft Edge. + document.body.appendChild(textarea); + textarea.select(); + try { + document.execCommand("copy"); // Security exception may be thrown by some browsers. + log.append("<h2 class='ok'>Coordinates copied to clipboard!</h2><br/>\n"); + return; + } + catch (ex) { + console.warn("Copy to clipboard failed.", ex); + return prompt("Copy to clipboard: Ctrl+C, Enter", text); + } + finally { + document.body.removeChild(textarea); + } + } + } +}; \ No newline at end of file -- GitLab