node-red/public/red/main.js

240 lines
8.2 KiB
JavaScript
Raw Normal View History

2013-09-05 16:02:48 +02:00
/**
* Copyright 2013 IBM Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
2014-08-08 01:01:35 +02:00
var RED = (function() {
2013-09-05 16:02:48 +02:00
$('#btn-keyboard-shortcuts').click(function(){showHelp();});
2014-02-19 11:38:46 +01:00
function hideDropTarget() {
$("#dropTarget").hide();
RED.keyboard.remove(/* ESCAPE */ 27);
}
$('#chart').on("dragenter",function(event) {
if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1) {
$("#dropTarget").css({display:'table'});
2014-02-19 11:38:46 +01:00
RED.keyboard.add(/* ESCAPE */ 27,hideDropTarget);
}
});
$('#dropTarget').on("dragover",function(event) {
if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1) {
event.preventDefault();
}
})
.on("dragleave",function(event) {
2014-02-19 11:38:46 +01:00
hideDropTarget();
})
.on("drop",function(event) {
var data = event.originalEvent.dataTransfer.getData("text/plain");
2014-02-19 11:38:46 +01:00
hideDropTarget();
RED.view.importNodes(data);
2014-02-12 23:33:07 +01:00
event.preventDefault();
});
2013-09-05 16:02:48 +02:00
function save(force) {
if (RED.view.dirty()) {
2013-09-05 16:02:48 +02:00
if (!force) {
var invalid = false;
var unknownNodes = [];
2013-09-05 16:02:48 +02:00
RED.nodes.eachNode(function(node) {
2014-05-08 15:15:54 +02:00
invalid = invalid || !node.valid;
if (node.type === "unknown") {
if (unknownNodes.indexOf(node.name) == -1) {
unknownNodes.push(node.name);
}
2014-05-08 15:15:54 +02:00
invalid = true;
}
2013-09-05 16:02:48 +02:00
});
if (invalid) {
if (unknownNodes.length > 0) {
$( "#node-dialog-confirm-deploy-config" ).hide();
$( "#node-dialog-confirm-deploy-unknown" ).show();
var list = "<li>"+unknownNodes.join("</li><li>")+"</li>";
$( "#node-dialog-confirm-deploy-unknown-list" ).html(list);
} else {
$( "#node-dialog-confirm-deploy-config" ).show();
$( "#node-dialog-confirm-deploy-unknown" ).hide();
}
2013-09-05 16:02:48 +02:00
$( "#node-dialog-confirm-deploy" ).dialog( "open" );
return;
}
}
var nns = RED.nodes.createCompleteNodeSet();
2014-02-20 18:31:40 +01:00
2014-08-19 23:58:52 +02:00
$("#btn-icn-deploy").removeClass('fa-download');
2014-02-20 18:31:40 +01:00
$("#btn-icn-deploy").addClass('spinner');
RED.view.dirty(false);
$.ajax({
url:"flows",
type: "POST",
data: JSON.stringify(nns),
contentType: "application/json; charset=utf-8"
}).done(function(data,textStatus,xhr) {
RED.notify("Successfully deployed","success");
RED.nodes.eachNode(function(node) {
if (node.changed) {
node.dirty = true;
node.changed = false;
2013-09-05 16:02:48 +02:00
}
if(node.credentials) {
delete node.credentials;
}
});
RED.nodes.eachConfig(function (confNode) {
if (confNode.credentials) {
delete confNode.credentials;
}
});
// Once deployed, cannot undo back to a clean state
RED.history.markAllDirty();
RED.view.redraw();
}).fail(function(xhr,textStatus,err) {
RED.view.dirty(true);
if (xhr.responseText) {
RED.notify("<strong>Error</strong>: "+xhr.responseText,"error");
} else {
RED.notify("<strong>Error</strong>: no response from server","error");
}
}).always(function() {
$("#btn-icn-deploy").removeClass('spinner');
2014-08-19 23:58:52 +02:00
$("#btn-icn-deploy").addClass('fa-download');
2013-09-05 16:02:48 +02:00
});
}
}
$('#btn-deploy').click(function() { save(); });
$( "#node-dialog-confirm-deploy" ).dialog({
title: "Confirm deploy",
modal: true,
autoOpen: false,
width: 530,
height: 230,
buttons: [
{
text: "Confirm deploy",
click: function() {
save(true);
$( this ).dialog( "close" );
}
},
{
text: "Cancel",
click: function() {
$( this ).dialog( "close" );
}
}
]
});
2014-02-16 01:39:30 +01:00
function loadSettings() {
$.get('settings', function(data) {
2014-05-08 15:15:54 +02:00
RED.settings = data;
2014-07-17 22:32:30 +02:00
console.log("Node-RED: "+data.version);
2014-05-08 15:15:54 +02:00
loadNodes();
2014-02-16 01:39:30 +01:00
});
}
2013-09-05 16:02:48 +02:00
function loadNodes() {
$.get('nodes', function(data) {
2014-05-08 15:15:54 +02:00
$("body").append(data);
$(".palette-spinner").hide();
$(".palette-scroll").show();
$("#palette-search").show();
loadFlows();
2013-09-05 16:02:48 +02:00
});
}
function loadFlows() {
$.getJSON("flows",function(nodes) {
2014-05-08 15:15:54 +02:00
RED.nodes.import(nodes);
RED.view.dirty(false);
RED.view.redraw();
RED.comms.subscribe("status/#",function(topic,msg) {
var parts = topic.split("/");
var node = RED.nodes.node(parts[1]);
if (node) {
node.status = msg;
if (statusEnabled) {
node.dirty = true;
RED.view.redraw();
}
2014-05-08 15:15:54 +02:00
}
});
RED.comms.subscribe("node/#",function(topic,msg) {
2014-08-08 01:01:35 +02:00
var i;
if (topic == "node/added") {
2014-08-08 01:01:35 +02:00
for (i=0;i<msg.length;i++) {
var m = msg[i];
var id = m.id;
$.get('nodes/'+id, function(data) {
$("body").append(data);
var typeList = "<ul><li>"+m.types.join("</li><li>")+"</li></ul>";
RED.notify("Node"+(m.types.length!=1 ? "s":"")+" added to palette:"+typeList,"success");
});
}
} else if (topic == "node/removed") {
if (msg.types) {
2014-08-08 01:01:35 +02:00
for (i=0;i<msg.types.length;i++) {
RED.palette.remove(msg.types[i]);
}
var typeList = "<ul><li>"+msg.types.join("</li><li>")+"</li></ul>";
RED.notify("Node"+(msg.types.length!=1 ? "s":"")+" removed from palette:"+typeList,"success");
}
}
});
2013-09-05 16:02:48 +02:00
});
}
$('#btn-node-status').click(function() {toggleStatus();});
var statusEnabled = false;
function toggleStatus() {
var btnStatus = $("#btn-node-status");
statusEnabled = btnStatus.toggleClass("active").hasClass("active");
RED.view.status(statusEnabled);
}
2013-09-05 16:02:48 +02:00
function showHelp() {
2013-09-05 16:02:48 +02:00
var dialog = $('#node-help');
2013-09-05 16:02:48 +02:00
//$("#node-help").draggable({
// handle: ".modal-header"
//});
2013-09-05 16:02:48 +02:00
dialog.on('show',function() {
2014-05-08 15:15:54 +02:00
RED.keyboard.disable();
2013-09-05 16:02:48 +02:00
});
dialog.on('hidden',function() {
2014-05-08 15:15:54 +02:00
RED.keyboard.enable();
2013-09-05 16:02:48 +02:00
});
dialog.modal();
}
2013-09-05 16:02:48 +02:00
$(function() {
2014-05-08 15:15:54 +02:00
RED.keyboard.add(/* ? */ 191,{shift:true},function(){showHelp();d3.event.preventDefault();});
loadSettings();
RED.comms.connect();
2013-09-05 16:02:48 +02:00
});
return {
};
2014-08-08 01:01:35 +02:00
})();