multimap tweaks (#52)

* Multimaps tweaks

* fix leading / in worldmap path
This commit is contained in:
Thorsten von Eicken 2018-10-15 08:18:22 -07:00 committed by Dave Conway-Jones
parent 428d0aca55
commit 4aaae6358b
2 changed files with 10 additions and 4 deletions

View File

@ -76,12 +76,15 @@
<label for="node-input-name"><i class="fa fa-file"></i> Name</label> <label for="node-input-name"><i class="fa fa-file"></i> Name</label>
<input type="text" id="node-input-name" placeholder="name"> <input type="text" id="node-input-name" placeholder="name">
</div> </div>
<!-- <div class="form-tips">Tip: By default <code>⌘⇧m</code> - <code>ctrl-shift-m</code> will load the map in a new tab.</div>--> <div class="form-tips">Tip: If <i>Path</i> is left empty,
then by default <code>⌘⇧m</code> - <code>ctrl-shift-m</code> will load the map in a new tab.</div>
</script> </script>
<script type="text/x-red" data-help-name="worldmap"> <script type="text/x-red" data-help-name="worldmap">
<p>Plots "things" on a web map. Needs an internet connection.</p> <p>Plots "things" on a web map. Needs an internet connection.</p>
<!-- <p>Shortcut - <code>⌘⇧m</code> - ctrl-shift-m to jump to Map.</p> --> <p>It is possible to instantiate multiple worldmap nodes but each one must be given a unique
path. Worldmap-in nodes are matched to worldmap nodes by having exactly the same path.
<p>Shortcut - <code>⌘⇧m</code> - ctrl-shift-m to jump to the default Map (<tt>/worldmap</tt>).</p>
<p>The minimum <code>msg.payload</code> must contain <code>name</code>, <code>lat</code> and <code>lon</code> properties, e.g.</p> <p>The minimum <code>msg.payload</code> must contain <code>name</code>, <code>lat</code> and <code>lon</code> properties, e.g.</p>
<pre>{name:"Joe", lat:51, lon:-1.05}</pre> <pre>{name:"Joe", lat:51, lon:-1.05}</pre>
<p><code>name</code> must be a unique identifier.</p> <p><code>name</code> must be a unique identifier.</p>

View File

@ -35,14 +35,16 @@ module.exports = function(RED) {
this.panit = n.panit || "false"; this.panit = n.panit || "false";
this.layers = n.layers || "show"; this.layers = n.layers || "show";
this.path = n.path || "/worldmap"; this.path = n.path || "/worldmap";
if (this.path.charAt(0) != "/") this.path = "/" + this.path;
if (!sockets[this.path]) { if (!sockets[this.path]) {
var fullPath = path.posix.join(RED.settings.httpNodeRoot, this.path, 'leaflet', 'sockjs.min.js'); var fullPath = path.posix.join(RED.settings.httpNodeRoot, this.path, 'leaflet', 'sockjs.min.js');
sockets[this.path] = sockjs.createServer({sockjs_url:fullPath, log:function() {}, transports:"xhr-polling"}); sockets[this.path] = sockjs.createServer({sockjs_url:fullPath, log:function() {}, transports:"xhr-polling"});
sockets[this.path].installHandlers(RED.server, {prefix:path.posix.join(RED.settings.httpNodeRoot,this.path,'socket')}); var sockPath = path.posix.join(RED.settings.httpNodeRoot,this.path,'socket');
this.log("Serving map "+this.path+" from "+__dirname+" as "+fullPath+" and socket "+sockPath);
sockets[this.path].installHandlers(RED.server, {prefix:sockPath});
} }
var node = this; var node = this;
var clients = {}; var clients = {};
//node.log("Serving map from "+__dirname+" as "+RED.settings.httpNodeRoot.slice(0,-1)+node;path);
RED.httpNode.use(node.path, express.static(__dirname + '/worldmap')); RED.httpNode.use(node.path, express.static(__dirname + '/worldmap'));
@ -108,6 +110,7 @@ module.exports = function(RED) {
var WorldMapIn = function(n) { var WorldMapIn = function(n) {
RED.nodes.createNode(this,n); RED.nodes.createNode(this,n);
this.path = n.path || "/worldmap"; this.path = n.path || "/worldmap";
if (this.path.charAt(0) != "/") this.path = "/" + this.path;
if (!sockets[this.path]) { if (!sockets[this.path]) {
var fullPath = path.posix.join(RED.settings.httpNodeRoot, this.path, 'leaflet', 'sockjs.min.js'); var fullPath = path.posix.join(RED.settings.httpNodeRoot, this.path, 'leaflet', 'sockjs.min.js');
sockets[this.path] = sockjs.createServer({sockjs_url:fullPath, prefix:path.posix.join(RED.settings.httpNodeRoot,this.path,'socket')}); sockets[this.path] = sockjs.createServer({sockjs_url:fullPath, prefix:path.posix.join(RED.settings.httpNodeRoot,this.path,'socket')});