diff --git a/README.md b/README.md index b5b3ef1..1f17074 100644 --- a/README.md +++ b/README.md @@ -27,16 +27,6 @@ Feel free to [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D% - v2.41.0 - Bump leaflet libs to latest stable (1.9.4) - v2.40.1 - Fix missing countries overlay when starting disconnected. - v2.40.0 - Add handling for TAK event points from TAK ingest node. -- v2.39.0 - Add client timezone to connect message. PR #245 -- v2.38.3 - Better fix for geojson multipoint icons. -- v2.38.1 - Fix for geojson multipoint icons. -- v2.38.0 - Return client headers as part of connect message. -- v2.37.4 - Fix sessionid specific data not to be sent on reload/refresh -- v2.37.3 - Fix hang on layer change -- v2.37.2 - If custom layer is only layer then show it automatically. Issue #230 -- v2.37.1 - Warn (and drop) messages that are missing a payload. Issue #229 -- v2.37.0 - Allow fly instead of fit option when using command to move view window. (PR #225) -- v2.36.0 - Add edge icons for SIDC markers just off the map. - see [CHANGELOG](https://github.com/dceejay/RedMap/blob/master/CHANGELOG.md) for full list of changes. diff --git a/worldmap.js b/worldmap.js index c261145..31c4a60 100644 --- a/worldmap.js +++ b/worldmap.js @@ -316,7 +316,7 @@ module.exports = function(RED) { if ((node.events.indexOf("draw")!==-1) && ((message.action === "draw")||(message.action === "drawdelete"))) { setImmediate(function() {node.send({payload:message, topic:node.path.substr(1), _sessionid:client.id, _sessionip:sessionip})}); } - if (node.events.indexOf("other")!==-1 && "connected,point,delete,move,draw,files,bounds".indexOf(message.action) === -1) { + if (node.events.indexOf("other")!==-1 && "connected,point,delete,move,draw,drawdelete,files,bounds".indexOf(message.action) === -1) { setImmediate(function() {node.send({payload:message, topic:node.path.substr(1), _sessionid:client.id, _sessionip:sessionip})}); } } diff --git a/worldmap/worldmap.js b/worldmap/worldmap.js index 8b2c3c2..1f4f5de 100644 --- a/worldmap/worldmap.js +++ b/worldmap/worldmap.js @@ -30,6 +30,7 @@ var sidebyside; var layercontrol; var drawCount = 0; var drawingColour = "#910000"; +var drawcontextmenu = ""; var sendDrawing; var colorControl; var sendRoute; @@ -836,6 +837,8 @@ var addThing = function() { map.addLayer(layers[lay]); } +var form = {}; +var addToForm = function(n,v) { form[n] = v; } var feedback = function(n,v,a,c) { if (v === "$form") { v = form; } if (markers[n]) { @@ -846,6 +849,9 @@ var feedback = function(n,v,a,c) { if (v !== undefined) { fb.value = v; } ws.send(JSON.stringify(fb)); } + else if (polygons[n]) { + sendDrawing(n,v,a) + } else { if (n === undefined) { n = "map"; } ws.send(JSON.stringify({action:a||"feedback", name:n, value:v, lat:rclk.lat, lon:rclk.lng})); @@ -853,11 +859,6 @@ var feedback = function(n,v,a,c) { if (c === true) { map.closePopup(); } } -var form = {}; -var addToForm = function(n,v) { - form[n] = v; -} - // map.on('click', function(e) { // ws.send(JSON.stringify({action:"click", lat:e.latlng.lat.toFixed(5), lon:e.latlng.lng.toFixed(5)})); // }); @@ -1113,7 +1114,8 @@ var addOverlays = function(overlist) { L.DomEvent.stopPropagation(e); var name = e.target.name; var rmen = L.popup({offset:[0,-12]}).setLatLng(e.latlng); - rmen.setContent("
"); + var d = drawcontextmenu || "
"; + rmen.setContent(d.replace(/\$name/g,name)); map.openPopup(rmen); }); e.layer.bindPopup(name); @@ -1139,21 +1141,24 @@ var addOverlays = function(overlist) { polygons[name].name = name; layers["_drawing"].addLayer(shape.layer); - var rightmenuMarker = L.popup({offset:[0,-12]}).setContent("
"); + var rightmenuMarker = L.popup({offset:[0,-12]}).setContent(drawcontextmenu.replace(/\$name/g,name) || "
"); if (e.layer.options.fill === false && navigator.onLine) { - rightmenuMarker = L.popup({offset:[0,-12]}).setContent("
"); + rightmenuMarker = L.popup({offset:[0,-12]}).setContent(drawcontextmenu.replace(/\$name/g,name) || "
"); } rightmenuMarker.setLatLng(cent); setTimeout(function() {map.openPopup(rightmenuMarker)},25); }); - sendDrawing = function(n) { - var thing = document.getElementById('dinput').value; + sendDrawing = function(n,v,a) { + var thing = document.getElementById('dinput')?.value || n; map.closePopup(); shape.m.name = thing; shape.layer.bindPopup(thing); delMarker(n,true); - + if (v) { + shape.layer.form = v; + shape.m.form = v; + } polygons[thing] = shape.layer; polygons[thing].lay = "_drawing"; polygons[thing].name = thing; @@ -1405,8 +1410,8 @@ var delMarker = function(dname,note) { } delete allData[dname]; if (note) { - if (pol === false) { ws.send(JSON.stringify({action:"delete", name:dname, deleted:true})); } - else { ws.send(JSON.stringify({action:"drawdelete", name:dname, deleted:true}))} + if (pol === true) { ws.send(JSON.stringify({action:"drawdelete", name:dname, deleted:true})); } + else { ws.send(JSON.stringify({action:"delete", name:dname, deleted:true})); } } } @@ -1426,6 +1431,7 @@ var editPoly = function(pname,fun) { lo = e.target._latlng.lng; } var m = {action:"draw", name:pname, layer:polygons[pname].lay, options:e.target.options, radius:e.target._mRadius, lat:la, lon:lo}; + if (e.target.form) { m.form = e.target.form; } if (e.target.hasOwnProperty("_latlngs")) { if (e.target.options.fill === false) { m.line = e.target._latlngs; } else { m.area = e.target._latlngs[0]; } @@ -2385,6 +2391,11 @@ function doCommand(cmd) { rightmenuMap.setContent(addmenu); } } + if (cmd.hasOwnProperty("drawcontextmenu")) { + if (typeof cmd.drawcontextmenu === "string") { + drawcontextmenu = cmd.drawcontextmenu; + } + } if (cmd.hasOwnProperty("allowFileDrop")) { if (typeof cmd.allowFileDrop === "string") { allowFileDrop = cmd.allowFileDrop === "false" ? false : true;