diff --git a/src/core/operations/ShowOnMap.mjs b/src/core/operations/ShowOnMap.mjs new file mode 100644 index 00000000..4a362fec --- /dev/null +++ b/src/core/operations/ShowOnMap.mjs @@ -0,0 +1,113 @@ +/** + * @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 a 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) { + if (input.replace(/\s+/g, "") !== "") { + const inFormat = args[1], + inDelim = args[2]; + let latLong; + try { + latLong = convertCoordinates(input, inFormat, inDelim, "Decimal Degrees", "Comma", "None", 5); + } catch (error) { + throw new OperationError(error); + } + latLong = latLong.replace(/[,]$/, ""); + latLong = latLong.replace(/°/g, ""); + return latLong; + } + return input; + } + + /** + * @param {string} data + * @param {Object[]} args + * @returns {string} + */ + async present(data, args) { + if (data.replace(/\s+/g, "") === "") { + data = "0, 0"; + } + const zoomLevel = args[0]; + const tileUrl = "https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png", + tileAttribution = "Wikimedia maps | © OpenStreetMap contributors", + leafletUrl = "https://unpkg.com/leaflet@1.5.0/dist/leaflet.js", + leafletCssUrl = "https://unpkg.com/leaflet@1.5.0/dist/leaflet.css"; + return ` + +
+`; + } +} + +export default ShowOnMap;