/** * @author j433866 [j433866@gmail.com] * @copyright Crown Copyright 2019 * @license Apache-2.0 */ import Operation from "../Operation.mjs"; import {FORMATS, convertCoordinates} from "../lib/ConvertCoordinates.mjs"; import OperationError from "../errors/OperationError.mjs"; /** * 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 = "https://foundation.wikimedia.org/wiki/Maps_Terms_of_Use"; 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;