mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Merge branch 'master' into dev
This commit is contained in:
commit
12a25c37aa
@ -474,7 +474,7 @@ var RED = (function() {
|
|||||||
var parts = topic.split("/");
|
var parts = topic.split("/");
|
||||||
var node = RED.nodes.node(parts[1]);
|
var node = RED.nodes.node(parts[1]);
|
||||||
if (node) {
|
if (node) {
|
||||||
if (msg.hasOwnProperty("text") && msg.text !== null && /^[a-zA-Z]/.test(msg.text)) {
|
if (msg.hasOwnProperty("text") && msg.text !== null && /^[@a-zA-Z]/.test(msg.text)) {
|
||||||
msg.text = node._(msg.text.toString(),{defaultValue:msg.text.toString()});
|
msg.text = node._(msg.text.toString(),{defaultValue:msg.text.toString()});
|
||||||
}
|
}
|
||||||
node.status = msg;
|
node.status = msg;
|
||||||
|
@ -320,18 +320,22 @@ RED.deploy = (function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
function save(skipValidation, force) {
|
function save(skipValidation, force) {
|
||||||
if (!$("#red-ui-header-button-deploy").hasClass("disabled")) {
|
if ($("#red-ui-header-button-deploy").hasClass("disabled")) {
|
||||||
|
return; //deploy is disabled
|
||||||
|
}
|
||||||
|
if ($("#red-ui-header-shade").is(":visible")) {
|
||||||
|
return; //deploy is shaded
|
||||||
|
}
|
||||||
if (!RED.user.hasPermission("flows.write")) {
|
if (!RED.user.hasPermission("flows.write")) {
|
||||||
RED.notify(RED._("user.errors.deploy"), "error");
|
RED.notify(RED._("user.errors.deploy"), "error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
let hasUnusedConfig = false;
|
||||||
if (!skipValidation) {
|
if (!skipValidation) {
|
||||||
var hasUnknown = false;
|
let hasUnknown = false;
|
||||||
var hasInvalid = false;
|
let hasInvalid = false;
|
||||||
var hasUnusedConfig = false;
|
const unknownNodes = [];
|
||||||
|
const invalidNodes = [];
|
||||||
var unknownNodes = [];
|
|
||||||
var invalidNodes = [];
|
|
||||||
|
|
||||||
RED.nodes.eachConfig(function (node) {
|
RED.nodes.eachConfig(function (node) {
|
||||||
if (node.valid === undefined) {
|
if (node.valid === undefined) {
|
||||||
@ -359,7 +363,7 @@ RED.deploy = (function() {
|
|||||||
hasUnknown = unknownNodes.length > 0;
|
hasUnknown = unknownNodes.length > 0;
|
||||||
hasInvalid = invalidNodes.length > 0;
|
hasInvalid = invalidNodes.length > 0;
|
||||||
|
|
||||||
var unusedConfigNodes = [];
|
const unusedConfigNodes = [];
|
||||||
RED.nodes.eachConfig(function (node) {
|
RED.nodes.eachConfig(function (node) {
|
||||||
if ((node._def.hasUsers !== false) && (node.users.length === 0)) {
|
if ((node._def.hasUsers !== false) && (node.users.length === 0)) {
|
||||||
unusedConfigNodes.push(getNodeInfo(node));
|
unusedConfigNodes.push(getNodeInfo(node));
|
||||||
@ -367,10 +371,10 @@ RED.deploy = (function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var showWarning = false;
|
let showWarning = false;
|
||||||
var notificationMessage;
|
let notificationMessage;
|
||||||
var notificationButtons = [];
|
let notificationButtons = [];
|
||||||
var notification;
|
let notification;
|
||||||
if (hasUnknown && !ignoreDeployWarnings.unknown) {
|
if (hasUnknown && !ignoreDeployWarnings.unknown) {
|
||||||
showWarning = true;
|
showWarning = true;
|
||||||
notificationMessage = "<p>" + RED._('deploy.confirm.unknown') + "</p>" +
|
notificationMessage = "<p>" + RED._('deploy.confirm.unknown') + "</p>" +
|
||||||
@ -427,14 +431,14 @@ RED.deploy = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var nns = RED.nodes.createCompleteNodeSet();
|
const nns = RED.nodes.createCompleteNodeSet();
|
||||||
|
const startTime = Date.now();
|
||||||
|
|
||||||
var startTime = Date.now();
|
|
||||||
$(".red-ui-deploy-button-content").css('opacity', 0);
|
$(".red-ui-deploy-button-content").css('opacity', 0);
|
||||||
$(".red-ui-deploy-button-spinner").show();
|
$(".red-ui-deploy-button-spinner").show();
|
||||||
$("#red-ui-header-button-deploy").addClass("disabled");
|
$("#red-ui-header-button-deploy").addClass("disabled");
|
||||||
|
|
||||||
var data = {flows:nns};
|
const data = { flows: nns };
|
||||||
|
|
||||||
if (!force) {
|
if (!force) {
|
||||||
data.rev = RED.nodes.version();
|
data.rev = RED.nodes.version();
|
||||||
@ -507,7 +511,7 @@ RED.deploy = (function() {
|
|||||||
}
|
}
|
||||||
}).always(function () {
|
}).always(function () {
|
||||||
deployInflight = false;
|
deployInflight = false;
|
||||||
var delta = Math.max(0,300-(Date.now()-startTime));
|
const delta = Math.max(0, 300 - (Date.now() - startTime));
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
$(".red-ui-deploy-button-content").css('opacity', 1);
|
$(".red-ui-deploy-button-content").css('opacity', 1);
|
||||||
$(".red-ui-deploy-button-spinner").hide();
|
$(".red-ui-deploy-button-spinner").hide();
|
||||||
@ -518,7 +522,6 @@ RED.deploy = (function() {
|
|||||||
}, delta);
|
}, delta);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
init: init,
|
init: init,
|
||||||
setDeployInflight: function(state) {
|
setDeployInflight: function(state) {
|
||||||
|
@ -168,7 +168,7 @@
|
|||||||
'b': { before:"**", after: "**", tooltip: RED._("markdownEditor.bold")},
|
'b': { before:"**", after: "**", tooltip: RED._("markdownEditor.bold")},
|
||||||
'i': { before:"_", after: "_", tooltip: RED._("markdownEditor.italic")},
|
'i': { before:"_", after: "_", tooltip: RED._("markdownEditor.italic")},
|
||||||
'code': { before:"`", after: "`", tooltip: RED._("markdownEditor.code")},
|
'code': { before:"`", after: "`", tooltip: RED._("markdownEditor.code")},
|
||||||
'ol': { before:" * ", newline: true, tooltip: RED._("markdownEditor.ordered-list")},
|
'ol': { before:" 1. ", newline: true, tooltip: RED._("markdownEditor.ordered-list")},
|
||||||
'ul': { before:" - ", newline: true, tooltip: RED._("markdownEditor.unordered-list")},
|
'ul': { before:" - ", newline: true, tooltip: RED._("markdownEditor.unordered-list")},
|
||||||
'bq': { before:"> ", newline: true, tooltip: RED._("markdownEditor.quote")},
|
'bq': { before:"> ", newline: true, tooltip: RED._("markdownEditor.quote")},
|
||||||
'link': { before:"[", after: "]()", tooltip: RED._("markdownEditor.link")},
|
'link': { before:"[", after: "]()", tooltip: RED._("markdownEditor.link")},
|
||||||
|
@ -150,7 +150,6 @@ $popover-button-border-color-hover: #666;
|
|||||||
|
|
||||||
$diff-text-header-color: $secondary-text-color;
|
$diff-text-header-color: $secondary-text-color;
|
||||||
$diff-text-header-background: #ffd;
|
$diff-text-header-background: #ffd;
|
||||||
$diff-text-header-background-hover: #ffc;
|
|
||||||
$diff-state-color: $primary-text-color;
|
$diff-state-color: $primary-text-color;
|
||||||
$diff-state-prefix-color: $secondary-text-color;
|
$diff-state-prefix-color: $secondary-text-color;
|
||||||
$diff-state-added: #009900;
|
$diff-state-added: #009900;
|
||||||
@ -195,7 +194,6 @@ $view-lasso-stroke: #ff7f0e;
|
|||||||
$view-lasso-fill: rgba(20,125,255,0.1);
|
$view-lasso-fill: rgba(20,125,255,0.1);
|
||||||
|
|
||||||
$view-background: $secondary-background;
|
$view-background: $secondary-background;
|
||||||
$view-select-mode-background: $secondary-background-selected;
|
|
||||||
$view-grid-color: #eee;
|
$view-grid-color: #eee;
|
||||||
|
|
||||||
$node-label-color: #333;
|
$node-label-color: #333;
|
||||||
|
@ -26,6 +26,13 @@
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ui-widget.ui-widget-content {
|
||||||
|
border: 1px solid $tertiary-border-color;
|
||||||
|
}
|
||||||
|
.ui-widget-content {
|
||||||
|
border: 1px solid $secondary-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
.ui-widget-header {
|
.ui-widget-header {
|
||||||
color: $header-text-color;
|
color: $header-text-color;
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,6 @@
|
|||||||
.red-ui-workspace-select-mode {
|
.red-ui-workspace-select-mode {
|
||||||
.red-ui-workspace-chart-background {
|
.red-ui-workspace-chart-background {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
// fill: $view-select-mode-background;
|
|
||||||
}
|
}
|
||||||
.red-ui-workspace-chart-grid line {
|
.red-ui-workspace-chart-grid line {
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
|
@ -108,7 +108,9 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
this.on("input", function(msg, send, done) {
|
this.on("input", function(msg, send, done) {
|
||||||
if (hasOwnProperty.call(msg, "status") && hasOwnProperty.call(msg.status, "source") && hasOwnProperty.call(msg.status.source, "id") && (msg.status.source.id === node.id)) {
|
if (hasOwnProperty.call(msg, "status") && msg.status &&
|
||||||
|
hasOwnProperty.call(msg.status, "source") && msg.status.source &&
|
||||||
|
hasOwnProperty.call(msg.status.source, "id") && (msg.status.source.id === node.id)) {
|
||||||
done();
|
done();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -129,7 +131,8 @@ module.exports = function(RED) {
|
|||||||
fill = "red";
|
fill = "red";
|
||||||
st = msg.error.message;
|
st = msg.error.message;
|
||||||
}
|
}
|
||||||
if (hasOwnProperty.call(msg, "status")) {
|
if (hasOwnProperty.call(msg, "status") &&
|
||||||
|
msg.status) {
|
||||||
fill = msg.status.fill || "grey";
|
fill = msg.status.fill || "grey";
|
||||||
shape = msg.status.shape || "ring";
|
shape = msg.status.shape || "ring";
|
||||||
st = msg.status.text || "";
|
st = msg.status.text || "";
|
||||||
|
@ -35,8 +35,6 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
var listenerNodes = {};
|
var listenerNodes = {};
|
||||||
var activeListenerNodes = 0;
|
|
||||||
|
|
||||||
|
|
||||||
// A node red node that sets up a local websocket server
|
// A node red node that sets up a local websocket server
|
||||||
function WebSocketListenerNode(n) {
|
function WebSocketListenerNode(n) {
|
||||||
@ -166,7 +164,6 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (node.isServer) {
|
if (node.isServer) {
|
||||||
activeListenerNodes++;
|
|
||||||
if (!serverUpgradeAdded) {
|
if (!serverUpgradeAdded) {
|
||||||
RED.server.on('upgrade', handleServerUpgrade);
|
RED.server.on('upgrade', handleServerUpgrade);
|
||||||
serverUpgradeAdded = true
|
serverUpgradeAdded = true
|
||||||
@ -210,7 +207,7 @@ module.exports = function(RED) {
|
|||||||
startconn(); // start outbound connection
|
startconn(); // start outbound connection
|
||||||
}
|
}
|
||||||
|
|
||||||
node.on("close", function() {
|
node.on("close", function(done) {
|
||||||
if (node.heartbeatInterval) {
|
if (node.heartbeatInterval) {
|
||||||
clearInterval(node.heartbeatInterval);
|
clearInterval(node.heartbeatInterval);
|
||||||
}
|
}
|
||||||
@ -218,19 +215,25 @@ module.exports = function(RED) {
|
|||||||
delete listenerNodes[node.fullPath];
|
delete listenerNodes[node.fullPath];
|
||||||
node.server.close();
|
node.server.close();
|
||||||
node._inputNodes = [];
|
node._inputNodes = [];
|
||||||
activeListenerNodes--;
|
|
||||||
// if (activeListenerNodes === 0 && serverUpgradeAdded) {
|
|
||||||
// RED.server.removeListener('upgrade', handleServerUpgrade);
|
|
||||||
// serverUpgradeAdded = false;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
node.closing = true;
|
node.closing = true;
|
||||||
node.server.close();
|
node.server.close();
|
||||||
|
//wait 20*50 (1000ms max) for ws to close.
|
||||||
|
//call done when readyState === ws.CLOSED (or 1000ms, whichever comes fist)
|
||||||
|
const closeMonitorInterval = 20;
|
||||||
|
let closeMonitorCount = 50;
|
||||||
|
let si = setInterval(() => {
|
||||||
|
if(node.server.readyState === ws.CLOSED || closeMonitorCount <= 0) {
|
||||||
if (node.tout) {
|
if (node.tout) {
|
||||||
clearTimeout(node.tout);
|
clearTimeout(node.tout);
|
||||||
node.tout = null;
|
node.tout = null;
|
||||||
}
|
}
|
||||||
|
clearInterval(si);
|
||||||
|
return done();
|
||||||
|
}
|
||||||
|
closeMonitorCount--;
|
||||||
|
}, closeMonitorInterval);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -582,7 +582,7 @@ class Flow {
|
|||||||
reportingNode = node;
|
reportingNode = node;
|
||||||
}
|
}
|
||||||
if (!muteStatusEvent) {
|
if (!muteStatusEvent) {
|
||||||
if (statusMessage.hasOwnProperty("text") && typeof(statusMessage.text !== "string")) {
|
if (statusMessage.hasOwnProperty("text") && typeof statusMessage.text !== "string") {
|
||||||
try {
|
try {
|
||||||
statusMessage.text = statusMessage.text.toString();
|
statusMessage.text = statusMessage.text.toString();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user