diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8cb1464cc..cc175a79b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,69 @@
+### 1.3.4 Maintenance Release
+
+Editor
+ - Allow nodes to access resolved theme files Fixes #2968
+ - Fix importing node to currently flow rather than match its old z value
+ - Don't let 'escape' whilst moving nodes interrupt things Fixes #2960
+ - Sort context stores in TypedInput and ensure default first Fixes #2954
+ - Fix margin between nodes on palette (#2947) @kazuhitoyokoi
+ - Ensure typedInput option is selected in dropdown menu Part of #2945
+ - Ensure typedInput without value has focus class removed Closes #2945
+ - TreeList: Fix remove item when depth=0 and wrong gutter calc (#2967) @hanc2006
+
+Runtime
+ - Handle subflow modules that contain subflows
+ - Timeout http upgrade requests that are not otherwise handled Fixes #2956
+ - Fix error on auto commit for no flow change (#2957) @HiroyasuNishiyama
+
+Nodes
+
+ - CSV: Fix CSV handling of special chars as separators
+ - Delay: Give delay node random mina nd max more space so you can see complete value
+ - Exec: fix grunt fail on exec node test (#2964) @HiroyasuNishiyama
+ - Function: Ensure function expand button is above vertical scrollbar Fixes #2955
+ - Inject: Fix inject node output tooltip extra property count
+
+
+### 1.3.3: Maintenance Release
+
+Editor
+
+ - Fix package semver comparison to allow >1 version increment
+ - Prevent TypedInput label overflowing element Fixes #2941
+ - Remove TypedInput from tab focus when only one type available
+ - Make typedInput.disable more consistent in behaviour Fixes #2942
+ - Fix project credential secret reset handling Part of #2868
+
+Runtime
+
+ - Export package version in Grunt file so docs template can access
+
+Nodes
+
+ - CSV: ensure CSV node can send false as string
+ - HTTPIn: handle application/x-protobuf as Buffer type (#2935 #2938) @hardillb
+ - MQTT: Ensure mqtt-close message is published when closing mqtt nodes
+
+
+### 1.3.2: Maintenance Release
+
+Runtime
+ - Handle package.json without dependencies section
+
+Editor
+
+ - Fix variable reference error in editableList Fixes #2933
+ - Fix handling of user-provided keymap Fixes #2926
+ - Ensure theme login image is passed through to api response Fixes #2929
+ - Add Japanese translations for Node-RED v1.3.1 (#2930) @kazuhitoyokoi
+
+Nodes
+
+ - CSV: Fix CSV parsing with other than , separator
+ - File out: Fix timing of msg.send to be after close
+ - Function: describe `node.outputCount` in help text
+ - MQTT: Fix MQTT Broker TLS config row layout Fixes #2927
+ - Split: add comment to info re $N being number of messages arriving
### 1.3.1: Maintenance Release
diff --git a/Gruntfile.js b/Gruntfile.js
index 3cecfccd4..99edc4c1f 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -471,7 +471,8 @@ module.exports = function(grunt) {
],
options: {
destination: 'docs',
- configure: './jsdoc.json'
+ configure: './jsdoc.json',
+ fred: "hi there"
}
},
_editor: {
diff --git a/packages/node_modules/@node-red/editor-api/lib/auth/index.js b/packages/node_modules/@node-red/editor-api/lib/auth/index.js
index d4ec10f08..fb95ede7b 100644
--- a/packages/node_modules/@node-red/editor-api/lib/auth/index.js
+++ b/packages/node_modules/@node-red/editor-api/lib/auth/index.js
@@ -90,7 +90,7 @@ function getToken(req,res,next) {
return server.token()(req,res,next);
}
-function login(req,res) {
+async function login(req,res) {
var response = {};
if (settings.adminAuth) {
var mergedAdminAuth = Object.assign({}, settings.adminAuth, settings.adminAuth.module);
@@ -116,8 +116,9 @@ function login(req,res) {
response.prompts[0].image = theme.serveFile('/login/',mergedAdminAuth.strategy.image);
}
}
- if (theme.context().login && theme.context().login.image) {
- response.image = theme.context().login.image;
+ let themeContext = await theme.context();
+ if (themeContext.login && themeContext.login.image) {
+ response.image = themeContext.login.image;
}
}
res.json(response);
diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js
index 3ea4ede73..de0106dbe 100644
--- a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js
+++ b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js
@@ -129,6 +129,14 @@ module.exports = {
}
themeContext.page.title = theme.page.title || themeContext.page.title;
+
+ // Store the resolved urls to these resources so nodes (such as Debug)
+ // can access them
+ theme.page._ = {
+ css: themeContext.page.css,
+ scripts: themeContext.page.scripts,
+ favicon: themeContext.page.favicon
+ }
}
if (theme.header) {
@@ -223,6 +231,8 @@ module.exports = {
themePlugin.path
);
themeContext.page.css = cssFiles.concat(themeContext.page.css || [])
+ theme.page = theme.page || {_:{}}
+ theme.page._.css = cssFiles.concat(theme.page._.css || [])
}
if (themePlugin.scripts) {
const scriptFiles = serveFilesFromTheme(
@@ -232,6 +242,8 @@ module.exports = {
themePlugin.path
)
themeContext.page.scripts = scriptFiles.concat(themeContext.page.scripts || [])
+ theme.page = theme.page || {_:{}}
+ theme.page._.scripts = cssFiles.concat(theme.page._.scripts || [])
}
}
activeThemeInitialised = true;
diff --git a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
index 6a7edb202..3870c9336 100644
--- a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
+++ b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
@@ -524,8 +524,8 @@
"title": "パレットの管理",
"palette": "パレット",
"times": {
- "seconds": "秒前",
- "minutes": "分前",
+ "seconds": "数秒前",
+ "minutes": "数分前",
"minutesV": "__count__ 分前",
"hoursV": "__count__ 時間前",
"hoursV_plural": "__count__ 時間前",
diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js
index 174892d43..9b580f9a0 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js
@@ -1424,6 +1424,8 @@ RED.nodes = (function() {
nid = getID();
workspace_map[n.id] = nid;
n.id = nid;
+ } else {
+ workspace_map[n.id] = n.id;
}
addWorkspace(n);
RED.workspaces.add(n);
@@ -1523,7 +1525,7 @@ RED.nodes = (function() {
}
}
} else {
- if (n.z && !workspaces[n.z] && !subflow_map[n.z]) {
+ if (n.z && !workspace_map[n.z] && !subflow_map[n.z]) {
n.z = activeWorkspace;
}
}
@@ -1621,7 +1623,7 @@ RED.nodes = (function() {
node.id = getID();
} else {
node.id = n.id;
- if (node.z == null || (!workspaces[node.z] && !subflow_map[node.z])) {
+ if (node.z == null || (!workspace_map[node.z] && !subflow_map[node.z])) {
if (createMissingWorkspace) {
if (missingWorkspace === null) {
missingWorkspace = RED.workspaces.add(null,true);
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js
index 5b831a942..caffe5793 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js
@@ -1186,22 +1186,6 @@ RED.clipboard = (function() {
}
}
- function getNodeLabelText(n) {
- var label = n.name || n.type+": "+n.id;
- if (n._def.label) {
- try {
- label = (typeof n._def.label === "function" ? n._def.label.call(n) : n._def.label)||"";
- } catch(err) {
- console.log("Definition error: "+n.type+".label",err);
- }
- }
- var newlineIndex = label.indexOf("\\n");
- if (newlineIndex > -1) {
- label = label.substring(0,newlineIndex)+"...";
- }
- return label;
- }
-
function getFlowLabel(n) {
n = JSON.parse(JSON.stringify(n));
n._def = RED.nodes.getType(n.type) || {};
@@ -1227,16 +1211,8 @@ RED.clipboard = (function() {
if (n._def) {
n._ = n._def._;
}
- var div = $('
',{class:"red-ui-info-outline-item"});
- RED.utils.createNodeIcon(n).appendTo(div);
- var contentDiv = $('
',{class:"red-ui-search-result-description"}).appendTo(div);
- var labelText = getNodeLabelText(n);
- var label = $('
',{class:"red-ui-search-result-node-label red-ui-info-outline-item-label"}).appendTo(contentDiv);
- if (labelText) {
- label.text(labelText)
- } else {
- label.html(n.type)
- }
+ var div = $('
',{class:"red-ui-node-list-item"});
+ RED.utils.createNodeIcon(n,true).appendTo(div);
return div;
}
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js
index 7f823289e..00666e5b4 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/editableList.js
@@ -71,7 +71,7 @@
var buttons = this.options.buttons || [];
if (this.options.addButton !== false) {
- var addLabel, addTittle;
+ var addLabel, addTitle;
if (typeof this.options.addButton === 'string') {
addLabel = this.options.addButton
} else {
@@ -102,7 +102,7 @@
button.click(evt);
}
});
-
+
if (button.title) {
element.attr("title", button.title);
}
@@ -113,7 +113,7 @@
element.append($("
").text(" " + button.label));
}
});
-
+
if (this.element.css("position") === "absolute") {
["top","left","bottom","right"].forEach(function(s) {
var v = that.element.css(s);
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js
index a6db02ffb..7f7eba1ba 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js
@@ -312,7 +312,7 @@
}
if (child.depth !== parent.depth+1) {
child.depth = parent.depth+1;
- var labelPaddingWidth = ((child.gutter?child.gutter.width()+2:0)+(child.depth*20));
+ var labelPaddingWidth = ((child.gutter ? child.gutter[0].offsetWidth + 2 : 0) + (child.depth * 20));
child.treeList.labelPadding.width(labelPaddingWidth+'px');
if (child.element) {
$(child.element).css({
@@ -348,6 +348,18 @@
that._selected.delete(item);
delete item.treeList;
delete that._items[item.id];
+ if(item.depth === 0) {
+ for(var key in that._items) {
+ if (that._items.hasOwnProperty(key)) {
+ var child = that._items[key];
+ if(child.parent && child.parent.id === item.id) {
+ delete that._items[key].treeList;
+ delete that._items[key];
+ }
+ }
+ }
+ that._data = that._data.filter(function(data) { return data.id !== item.id})
+ }
}
item.treeList.insertChildAt = function(newItem,position,select) {
newItem.parent = item;
@@ -480,7 +492,10 @@
if (item.treeList.container) {
$(item.element).remove();
$(element).appendTo(item.treeList.label);
- var labelPaddingWidth = (item.gutter?item.gutter.width()+2:0)+(item.depth*20);
+ // using the JQuery Object, the gutter width will
+ // be wrong when the element is reattached the second time
+ var labelPaddingWidth = (item.gutter ? item.gutter[0].offsetWidth + 2 : 0) + (item.depth * 20);
+
$(element).css({
width: "calc(100% - "+(labelPaddingWidth+20+(item.icon?20:0))+"px)"
})
@@ -516,7 +531,7 @@
}).appendTo(label)
}
- var labelPaddingWidth = (item.gutter?item.gutter.width()+2:0)+(depth*20);
+ var labelPaddingWidth = (item.gutter ? item.gutter[0].offsetWidth + 2 : 0) + (depth * 20)
item.treeList.labelPadding = $('
').css({
display: "inline-block",
width: labelPaddingWidth+'px'
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js
index 1b5af5f13..0401be1b9 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js
@@ -15,7 +15,7 @@
**/
(function($) {
var contextParse = function(v,defaultStore) {
- var parts = RED.utils.parseContextKey(v, defaultStore);
+ var parts = RED.utils.parseContextKey(v, defaultStore&&defaultStore.value);
return {
option: parts.store,
value: parts.key
@@ -279,6 +279,14 @@
var contextStores = RED.settings.context.stores;
var contextOptions = contextStores.map(function(store) {
return {value:store,label: store, icon:''}
+ }).sort(function(A,B) {
+ if (A.value === RED.settings.context.default) {
+ return -1;
+ } else if (B.value === RED.settings.context.default) {
+ return 1;
+ } else {
+ return A.value.localeCompare(B.value);
+ }
})
if (contextOptions.length < 2) {
allOptions.flow.options = [];
@@ -389,6 +397,11 @@
evt.stopPropagation();
}).on('focus', function() {
that.uiSelect.addClass('red-ui-typedInput-focus');
+ }).on('blur', function() {
+ var opt = that.typeMap[that.propertyType];
+ if (opt.hasValue === false) {
+ that.uiSelect.removeClass('red-ui-typedInput-focus');
+ }
})
// explicitly set optionSelectTrigger display to inline-block otherwise jQ sets it to 'inline'
@@ -438,7 +451,11 @@
});
this._showMenu(this.optionMenu,this.optionSelectTrigger);
- var selectedOption = this.optionMenu.find("[value='"+this.optionValue+"']");
+ var targetValue = this.optionValue;
+ if (this.optionValue === null || this.optionValue === undefined) {
+ targetValue = this.value();
+ }
+ var selectedOption = this.optionMenu.find("[value='"+targetValue+"']");
if (selectedOption.length === 0) {
selectedOption = this.optionMenu.children(":first");
}
@@ -669,6 +686,11 @@
that.typeMap[result.value] = result;
return result;
});
+ if (this.typeList.length < 2) {
+ this.selectTrigger.attr("tabindex", -1)
+ } else {
+ this.selectTrigger.attr("tabindex", 0)
+ }
this.selectTrigger.toggleClass("disabled", this.typeList.length === 1);
this.selectTrigger.find(".fa-caret-down").toggle(this.typeList.length > 1)
if (this.menu) {
@@ -768,6 +790,11 @@
if (opt.hasValue === false || (opt.showLabel !== false && !opt.icon)) {
this.selectLabel.text(opt.label);
}
+ if (opt.label) {
+ this.selectTrigger.attr("title",opt.label);
+ } else {
+ this.selectTrigger.attr("title","");
+ }
if (opt.hasValue === false) {
this.selectTrigger.addClass("red-ui-typedInput-full-width");
} else {
@@ -1004,16 +1031,17 @@
this.uiSelect.hide();
},
disable: function(val) {
- if(val === true) {
+ if(val === undefined || !!val ) {
this.uiSelect.attr("disabled", "disabled");
- } else if (val === false) {
- this.uiSelect.attr("disabled", null); //remove attr
} else {
- this.uiSelect.attr("disabled", val); //user value
+ this.uiSelect.attr("disabled", null); //remove attr
}
},
+ enable: function() {
+ this.uiSelect.attr("disabled", null); //remove attr
+ },
disabled: function() {
- return this.uiSelect.attr("disabled");
+ return this.uiSelect.attr("disabled") === "disabled";
}
});
})(jQuery);
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js b/packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js
index 2c81cfe63..9e976e4fc 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js
@@ -119,7 +119,7 @@ RED.keyboard = (function() {
} else {
mergedKeymap[action] = [{
scope: themeKeymap[action].scope || "*",
- key: [themeKeymap[action].key],
+ key: themeKeymap[action].key,
user: false
}]
if (mergedKeymap[action][0].scope === "workspace") {
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js
index 2fe3d448e..e57a19349 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js
@@ -331,7 +331,7 @@ RED.palette.editor = (function() {
nodeEntry.versionSpan.html(moduleInfo.version+' '+moduleInfo.pending_version).appendTo(nodeEntry.metaRow)
nodeEntry.updateButton.text(RED._('palette.editor.updated')).addClass('disabled').css('display', 'inline-block');
} else if (loadedIndex.hasOwnProperty(module)) {
- if (semVerCompare(loadedIndex[module].version,moduleInfo.version) === 1) {
+ if (semVerCompare(loadedIndex[module].version,moduleInfo.version) > 0) {
nodeEntry.updateButton.show();
nodeEntry.updateButton.text(RED._('palette.editor.update',{version:loadedIndex[module].version}));
} else {
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projectSettings.js b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projectSettings.js
index c39ac97be..336893a59 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projectSettings.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projectSettings.js
@@ -928,11 +928,11 @@ RED.projects.settings = (function() {
saveDisabled = isFlowInvalid || credFileLabelText.text()==="";
- if (credentialSecretExistingInput.is(":visible")) {
+ if (credentialSecretExistingRow.is(":visible")) {
credentialSecretExistingInput.toggleClass("input-error", credentialSecretExistingInput.val() === "");
saveDisabled = saveDisabled || credentialSecretExistingInput.val() === "";
}
- if (credentialSecretNewInput.is(":visible")) {
+ if (credentialSecretNewRow.is(":visible")) {
credentialSecretNewInput.toggleClass("input-error", credentialSecretNewInput.val() === "");
saveDisabled = saveDisabled || credentialSecretNewInput.val() === "";
}
@@ -1130,7 +1130,7 @@ RED.projects.settings = (function() {
}
if (credentialSecretResetButton.hasClass('selected') || credentialSecretEditButton.hasClass('selected')) {
payload.credentialSecret = credentialSecretNewInput.val();
- if (credentialSecretExistingInput.is(":visible")) {
+ if (credentialSecretExistingRow.is(":visible")) {
payload.currentCredentialSecret = credentialSecretExistingInput.val();
}
}
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-help.js b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-help.js
index 2bc932b8c..61ac462f5 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-help.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-help.js
@@ -230,9 +230,8 @@ RED.sidebar.help = (function() {
}
function getNodeLabel(n) {
- var div = $('',{class:"red-ui-info-outline-item"});
+ var div = $('
',{class:"red-ui-node-list-item"});
RED.utils.createNodeIcon(n).appendTo(div);
- var contentDiv = $('
',{class:"red-ui-search-result-description"}).appendTo(div);
var label = n.name;
if (!label && n._def.paletteLabel) {
try {
@@ -241,7 +240,7 @@ RED.sidebar.help = (function() {
}
}
label = label || n.type;
- $('
',{class:"red-ui-search-result-node-label red-ui-info-outline-item-label"}).text(label).appendTo(contentDiv);
+ $('
',{class:"red-ui-node-label"}).text(n.name||n.type).appendTo(div);
return div;
}
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info-outliner.js b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info-outliner.js
index 891f9f7dc..a1ae6e48b 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info-outliner.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info-outliner.js
@@ -73,36 +73,11 @@ RED.sidebar.info.outliner = (function() {
return item;
}
- function getNodeLabelText(n) {
- var label = n.name || n.type+": "+n.id;
- if (n._def.label) {
- try {
- label = (typeof n._def.label === "function" ? n._def.label.call(n) : n._def.label)||"";
- } catch(err) {
- console.log("Definition error: "+n.type+".label",err);
- }
- }
- var newlineIndex = label.indexOf("\\n");
- if (newlineIndex > -1) {
- label = label.substring(0,newlineIndex)+"...";
- }
- return label;
- }
-
function getNodeLabel(n) {
- var div = $('
',{class:"red-ui-info-outline-item"});
- RED.utils.createNodeIcon(n).appendTo(div);
- var contentDiv = $('
',{class:"red-ui-search-result-description"}).appendTo(div);
- var labelText = getNodeLabelText(n);
- var label = $('
',{class:"red-ui-search-result-node-label red-ui-info-outline-item-label"}).appendTo(contentDiv);
- if (labelText) {
- label.text(labelText)
- } else {
- label.html(" ")
- }
-
+ var div = $('
',{class:"red-ui-node-list-item red-ui-info-outline-item"});
+ RED.utils.createNodeIcon(n, true).appendTo(div);
+ div.find(".red-ui-node-label").addClass("red-ui-info-outline-item-label")
addControls(n, div);
-
return div;
}
@@ -430,7 +405,7 @@ RED.sidebar.info.outliner = (function() {
var existingObject = objects[n.id];
var parent = n.g||n.z||"__global__";
- var nodeLabelText = getNodeLabelText(n);
+ var nodeLabelText = RED.utils.getNodeLabel(n,n.name || (n.type+": "+n.id));
if (nodeLabelText) {
existingObject.element.find(".red-ui-info-outline-item-label").text(nodeLabelText);
} else {
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js b/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js
index f81c98748..bb17ea395 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js
@@ -1125,9 +1125,9 @@ RED.utils = (function() {
imageIconElement.css("backgroundImage", "url("+iconUrl+")");
}
- function createNodeIcon(node) {
+ function createNodeIcon(node, includeLabel) {
var def = node._def;
- var nodeDiv = $('
',{class:"red-ui-search-result-node"})
+ var nodeDiv = $('
',{class:"red-ui-node-icon"})
if (node.type === "_selection_") {
nodeDiv.addClass("red-ui-palette-icon-selection");
} else if (node.type === "group") {
@@ -1147,8 +1147,20 @@ RED.utils = (function() {
}
var icon_url = RED.utils.getNodeIcon(def,node);
- var iconContainer = $('
',{class:"red-ui-palette-icon-container"}).appendTo(nodeDiv);
- RED.utils.createIconElement(icon_url, iconContainer, true);
+ RED.utils.createIconElement(icon_url, nodeDiv, true);
+
+ if (includeLabel) {
+ var container = $('
');
+ nodeDiv.appendTo(container);
+ var labelText = RED.utils.getNodeLabel(node,node.name || (node.type+": "+node.id));
+ var label = $('',{class:"red-ui-node-label"}).appendTo(container);
+ if (labelText) {
+ label.text(labelText)
+ } else {
+ label.html(" ")
+ }
+ return container;
+ }
return nodeDiv;
}
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js
index e19387a1e..bffc6fd85 100755
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js
@@ -1751,7 +1751,6 @@ RED.view = (function() {
}
}
if (mouse_mode == RED.state.IMPORT_DRAGGING) {
- RED.keyboard.remove("escape");
updateActiveNodes();
RED.nodes.dirty(true);
}
@@ -1786,6 +1785,9 @@ RED.view = (function() {
}
function selectNone() {
+ if (mouse_mode === RED.state.MOVING || mouse_mode === RED.state.MOVING_ACTIVE) {
+ return;
+ }
if (mouse_mode === RED.state.IMPORT_DRAGGING) {
clearSelection();
RED.history.pop();
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/palette.scss b/packages/node_modules/@node-red/editor-client/src/sass/palette.scss
index 385ad761f..1b27f7a2a 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/palette.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/palette.scss
@@ -134,7 +134,7 @@
&:not(.red-ui-palette-node-config):not(.red-ui-palette-node-small):first-child {
margin-top: 15px;
}
- &:not(.red-ui-palette-node-config):not(.red-ui-palette-node-small):first-child {
+ &:not(.red-ui-palette-node-config):not(.red-ui-palette-node-small):last-child {
margin-bottom: 15px;
}
}
@@ -229,3 +229,47 @@
left: 1px;
}
}
+
+////////////////
+
+.red-ui-node-list-item {
+ display: inline-block;
+ padding: 0;
+ font-size: 13px;
+ border: none;
+}
+.red-ui-node-icon {
+ display: inline-block;
+ float:left;
+ width: 24px;
+ height: 20px;
+ margin-top: 1px;
+ // width: 30px;
+ // height: 25px;
+ border-radius: 3px;
+ border: 1px solid $node-border;
+ background-position: 5% 50%;
+ background-repeat: no-repeat;
+ background-size: contain;
+ position: relative;
+ background-color: $node-icon-background-color;
+ text-align: center;
+
+ .red-ui-palette-icon {
+ width: 20px;
+ }
+
+ .red-ui-palette-icon-fa {
+ font-size: 14px;
+ position: relative;
+ top: -1px;
+ left: 0px;
+ }
+}
+
+.red-ui-node-label {
+ margin-left: 32px;
+ line-height: 23px;
+ white-space: nowrap;
+ color: $secondary-text-color;
+}
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss b/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss
index 42d5462f7..07bbbae1c 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss
@@ -326,13 +326,17 @@ div.red-ui-info-table {
border-bottom: 1px solid $secondary-border-color;
}
}
-.red-ui-info-outline,.red-ui-sidebar-help-toc, #red-ui-clipboard-dialog-import-conflicts-list, #red-ui-clipboard-dialog-export-tab-clipboard-preview {
+.red-ui-info-outline,
+// TODO: remove these classes for 2.0. Keeping in 1.x for backwards compatibility
+// of theme generators.
+.red-ui-sidebar-help-toc, #red-ui-clipboard-dialog-import-conflicts-list, #red-ui-clipboard-dialog-export-tab-clipboard-preview
+ {
.red-ui-info-outline-item {
display: inline-block;
padding: 0;
font-size: 13px;
border: none;
- .red-ui-palette-icon-fa {
+ &:not(.red-ui-node-list-item) .red-ui-palette-icon-fa {
position: relative;
top: 1px;
left: 0px;
diff --git a/packages/node_modules/@node-red/editor-client/src/sass/ui/common/typedInput.scss b/packages/node_modules/@node-red/editor-client/src/sass/ui/common/typedInput.scss
index 14cb3f70e..2b12fffea 100644
--- a/packages/node_modules/@node-red/editor-client/src/sass/ui/common/typedInput.scss
+++ b/packages/node_modules/@node-red/editor-client/src/sass/ui/common/typedInput.scss
@@ -24,7 +24,7 @@
margin: 0;
vertical-align: middle;
box-sizing: border-box;
- overflow:visible;
+ overflow: hidden;
position: relative;
&[disabled] {
input, button {
@@ -33,7 +33,7 @@
cursor: not-allowed;
}
}
-
+
.red-ui-typedInput-input-wrap {
flex-grow: 1;
}
diff --git a/packages/node_modules/@node-red/nodes/core/common/20-inject.html b/packages/node_modules/@node-red/nodes/core/common/20-inject.html
index c892c4867..a0838ec00 100644
--- a/packages/node_modules/@node-red/nodes/core/common/20-inject.html
+++ b/packages/node_modules/@node-red/nodes/core/common/20-inject.html
@@ -214,7 +214,7 @@
for (var i=0,l=props.length; i 0) lab += "\n";
if (i === 5) {
- lab += " + "+(props.length-4);
+ lab += "... +"+(props.length-5);
break;
}
lab += props[i].p+": ";
diff --git a/packages/node_modules/@node-red/nodes/core/common/21-debug.js b/packages/node_modules/@node-red/nodes/core/common/21-debug.js
index 0e00a8fff..8d2121580 100644
--- a/packages/node_modules/@node-red/nodes/core/common/21-debug.js
+++ b/packages/node_modules/@node-red/nodes/core/common/21-debug.js
@@ -2,7 +2,8 @@ module.exports = function(RED) {
"use strict";
var util = require("util");
var events = require("events");
- //var path = require("path");
+ const fs = require("fs-extra");
+ const path = require("path");
var debuglength = RED.settings.debugMaxLength || 1000;
var useColors = RED.settings.debugUseColors || false;
util.inspect.styles.boolean = "red";
@@ -249,11 +250,34 @@ module.exports = function(RED) {
}
});
+ let cachedDebugView;
+ RED.httpAdmin.get("/debug/view/view.html", function(req,res) {
+ if (!cachedDebugView) {
+ fs.readFile(path.join(__dirname,"lib","debug","view.html")).then(data => {
+ let customStyles = "";
+ try {
+ let customStyleList = RED.settings.editorTheme.page._.css || [];
+ customStyleList.forEach(style => {
+ customStyles += `\n`
+ })
+ } catch(err) {}
+ cachedDebugView = data.toString().replace("",customStyles)
+ res.set('Content-Type', 'text/html');
+ res.send(cachedDebugView).end();
+ }).catch(err => {
+ res.sendStatus(404);
+ })
+ } else {
+ res.send(cachedDebugView).end();
+ }
+
+ });
+
// As debug/view/debug-utils.js is loaded via