node-red-contrib-web-worldmap 5.0.3 → 5.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,7 @@
1
1
  ### Change Log for Node-RED Worldmap
2
2
 
3
+ - v5.0.5 - Tweak SIDC flag handling slightly.
4
+ - v5.0.4 - Tweak CoT handling slightly.
3
5
  - v5.0.3 - Add great context menu example flow. PR#290. Bump express lib. PR#291.
4
6
  - v5.0.2 - Fix sidcEdgeIcon docs PR#289.
5
7
  - v5.0.1 - Fix isArray error PR #288.
package/README.md CHANGED
@@ -13,6 +13,8 @@ Feel free to [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%
13
13
 
14
14
  ### Updates
15
15
 
16
+ - v5.0.5 - Tweak SIDC flag handling slightly.
17
+ - v5.0.4 - Tweak CoT handling slightly.
16
18
  - v5.0.3 - Add great context menu example flow. PR#290. Bump express lib. PR#291.
17
19
  - v5.0.2 - Fix sidcEdgeIcon docs PR#289.
18
20
  - v5.0.1 - Fix isArray error PR #288.
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "node-red-contrib-web-worldmap",
3
- "version": "5.0.3",
3
+ "version": "5.0.5",
4
4
  "description": "A Node-RED node to provide a web page of a world map for plotting things on.",
5
5
  "dependencies": {
6
6
  "@turf/bezier-spline": "~7.1.0",
7
7
  "cgi": "0.3.1",
8
- "compression": "^1.7.4",
8
+ "compression": "^1.7.5",
9
9
  "express": "^4.21.1",
10
10
  "sockjs": "~0.3.24"
11
11
  },
@@ -2123,7 +2123,7 @@ function setMarker(data) {
2123
2123
  }
2124
2124
  opts.size = opts.size || sz;
2125
2125
  opts.size = opts.size * (opts.scale || 1);
2126
- if (data.SIDC.length > 12) {
2126
+ if (data.SIDC.length > 12 && data.SIDC.substr(12,2) !== "**") {
2127
2127
  var cc = data.SIDC.substr(12,2).toLowerCase();
2128
2128
  opts.country = cc.toUpperCase();
2129
2129
  opts.staffComments = emojify(":flag-"+cc+":") + " " + (opts?.staffComments || "");
@@ -3319,19 +3319,28 @@ function doTAKjson(p) {
3319
3319
  d.lon = Number(p.point.lon);
3320
3320
  if (p.type.indexOf('a') === 0) {
3321
3321
  d.hdg = p.detail?.track?.course;
3322
- d.speed = p.detail?.track?.speed;
3323
- d.team = p.detail?.__group?.name;
3324
- d.team = d.team + ' <i style="color:' + d.team + '" class="fa fa-square"></i>';
3322
+ if (p.detail?.track?.speed) {
3323
+ d.speed = Number(p.detail?.track?.speed);
3324
+ if (d.speed == 9999999 || d.speed == 0) { delete d.speed; }
3325
+ else {
3326
+ d.speed = d.speed + " m/s";
3327
+ delete d.hdg;
3328
+ d.course = p.detail?.track?.course;
3329
+ d.options = { direction: d.course };
3330
+ }
3331
+ }
3332
+ if (p.detail?.__group?.name) {
3333
+ d.team = p.detail?.__group?.name;
3334
+ d.team = d.team + ' <i style="color:' + d.team + '" class="fa fa-square"></i>';
3335
+ }
3325
3336
  d.role = p.detail?.__group?.role;
3326
3337
  }
3327
- if (d.team == "undefined") { delete d.team; }
3328
3338
  d.type = p.type;
3329
3339
  d.remarks = p.detail?.remarks
3330
3340
  if (p.detail?.remarks && p.detail.remarks.hasOwnProperty["#text"]) {
3331
3341
  d.remarks = p.detail.remarks["#text"];
3332
3342
  }
3333
3343
  d.uid = p.uid;
3334
-
3335
3344
  try {
3336
3345
  var st = (new Date(p.time)).getTime() / 1000;
3337
3346
  var et = (new Date(p.stale)).getTime() / 1000;
@@ -3340,11 +3349,11 @@ function doTAKjson(p) {
3340
3349
  d.ttl = parseInt(et-st);
3341
3350
  }
3342
3351
  catch(e) { console.log(e); }
3343
- d.alt = Number(p.point.hae) || 9999999;
3344
- if (d.alt && d.alt == 9999999) { delete d.alt; }
3345
- if (d.speed && d.speed == 9999999) { delete d.speed; }
3346
- if (d.hdg && d.hdg == 9999999) { delete d.hdg; }
3347
3352
  handleCoTtypes(d,p);
3353
+ d.alt = Number(p.point.hae) || 9999999;
3354
+ if (d?.alt && parseInt(d.alt) == 9999999) { delete d.alt; }
3355
+ else { d.alt = d.alt + "m"; }
3356
+ if (d?.hdg && parseInt(d.hdg) == 9999999) { delete d.hdg; }
3348
3357
  setMarker(d);
3349
3358
  }
3350
3359
  else {
@@ -3359,26 +3368,35 @@ function doTAKMCjson(p) {
3359
3368
  var d = {};
3360
3369
  d.lat = p.lat;
3361
3370
  d.lon = p.lon;
3362
- d.team = p.detail?.group?.name;
3363
- d.team = d.team + ' <i style="color:' + d.team + '" class="fa fa-square"></i>';
3371
+ if (p.detail?.__group?.name) {
3372
+ d.team = p.detail?.__group?.name;
3373
+ d.team = d.team + ' <i style="color:' + d.team + '" class="fa fa-square"></i>';
3374
+ }
3364
3375
  d.role = p.detail?.group?.role;
3365
3376
  d.type = p.type;
3366
3377
  d.uid = p.uid;
3367
3378
  d.name = p.detail?.contact?.callsign || p.uid;
3368
3379
  d.hdg = p.detail?.track?.course;
3369
- d.speed = p.detail?.track?.speed;
3370
- if (d.team == "undefined") { delete d.team; }
3371
-
3380
+ if (p.detail?.track?.speed) {
3381
+ d.speed = Number(p.detail?.track?.speed);
3382
+ if (d.speed == 9999999 || d.speed == 0) { delete d.speed; }
3383
+ else {
3384
+ d.speed = d.speed + " m/s";
3385
+ delete d.hdg;
3386
+ d.course = p.detail?.track?.course;
3387
+ d.options = { direction: d.course };
3388
+ }
3389
+ }
3372
3390
  try {
3373
3391
  d.timestamp = (new Date(+p.sendTime)).toISOString();
3374
3392
  d.staletime = (new Date(+p.staleTime)).toISOString();
3375
3393
  d.ttl = parseInt((+p.staleTime / 1000) - (+p.sendTime / 1000));
3376
3394
  } catch(e) { console.log(e); }
3395
+ handleCoTtypes(d,p);
3377
3396
  d.alt = p.hae || 9999999;
3378
3397
  if (d.alt && d.alt == 9999999) { delete d.alt; }
3379
- if (d.speed && d.speed == 9999999) { delete d.speed; }
3398
+ else { d.alt = d.alt + "m"; }
3380
3399
  if (d.hdg && d.hdg == 9999999) { delete d.hdg; }
3381
- handleCoTtypes(d,p);
3382
3400
  setMarker(d);
3383
3401
  }
3384
3402
  else {