From 237f792fb4b1d7c414586665375df9f7d6fccf6f Mon Sep 17 00:00:00 2001 From: j433866 Date: Fri, 18 Jan 2019 11:19:06 +0000 Subject: [PATCH] Add new Show on map operation --- src/core/operations/ShowOnMap.mjs | 111 ++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/core/operations/ShowOnMap.mjs diff --git a/src/core/operations/ShowOnMap.mjs b/src/core/operations/ShowOnMap.mjs new file mode 100644 index 00000000..a30d59f5 --- /dev/null +++ b/src/core/operations/ShowOnMap.mjs @@ -0,0 +1,111 @@ +/** + * @author j433866 [j433866@gmail.com] + * @copyright Crown Copyright 2019 + * @license Apache-2.0 + */ + +import Operation from "../Operation"; +import {FORMATS, convertCoordinates} from "../lib/ConvertCoordinates"; +import OperationError from "../errors/OperationError"; + +/** + * Show on map operation + */ +class ShowOnMap extends Operation { + + /** + * ShowOnMap constructor + */ + constructor() { + super(); + + this.name = "Show on map"; + this.module = "Hashing"; + this.description = "Displays co-ordinates on an OpenStreetMap slippy map.

Co-ordinates will be converted to decimal degrees before being shown on the map.

Supported formats:
This operation will not work offline."; + this.infoURL = ""; + this.inputType = "string"; + this.outputType = "string"; + this.presentType = "html"; + this.args = [ + { + name: "Zoom Level", + type: "number", + value: 13 + }, + { + name: "Input Format", + type: "option", + value: ["Auto"].concat(FORMATS) + }, + { + name: "Input Delimiter", + type: "option", + value: [ + "Auto", + "Direction Preceding", + "Direction Following", + "\\n", + "Comma", + "Semi-colon", + "Colon" + ] + } + ]; + } + + /** + * @param {string} input + * @param {Object[]} args + * @returns {string} + */ + run(input, args) { + // Pass the input through, don't need to do anything to it here + return input; + } + + /** + * @param {string} data + * @param {Object[]} args + * @returns {string} + */ + async present(data, args) { + if (data.replace(/\s+/g, "") !== "") { + const [zoomLevel, inFormat, inDelim] = args; + let latLong; + try { + latLong = convertCoordinates(data, inFormat, inDelim, "Decimal Degrees", "Comma", "None", 5); + } catch (error) { + throw new OperationError(error); + } + latLong = latLong.replace(/[,]$/, ""); + latLong = latLong.replace(/°/g, ""); + const tileUrl = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + tileAttribution = "© OpenStreetMap contributors", + leafletUrl = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.js", + leafletCssUrl = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.css"; + return ` + +
+`; + } else { + // Don't do anything if there's no input + return ""; + } + } +} + +export default ShowOnMap;