mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Compare commits
39 Commits
310-tour
...
fix-link-i
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
27e258b19b | ||
|
|
910f6134f6 | ||
|
|
52b4b0419f | ||
|
|
6abe66934e | ||
|
|
5ae56aaec7 | ||
|
|
37057d1da2 | ||
|
|
196a9ae43a | ||
|
|
196773d6ba | ||
|
|
d8dbe68425 | ||
|
|
286c0b000f | ||
|
|
dec3164fdd | ||
|
|
c2772e5038 | ||
|
|
43e4d09f72 | ||
|
|
06e35baeaa | ||
|
|
c9d72d7a1d | ||
|
|
7e0a783220 | ||
|
|
f853c9f1c3 | ||
|
|
62e9572070 | ||
|
|
fea68c8acc | ||
|
|
929f0e90ac | ||
|
|
81331e68d2 | ||
|
|
4fda59a585 | ||
|
|
4477b9ac18 | ||
|
|
78f93dc11a | ||
|
|
4c7c855f2c | ||
|
|
8740ec5570 | ||
|
|
ede3ac4282 | ||
|
|
3e4cad3a79 | ||
|
|
bd0b0077a3 | ||
|
|
16f8b78b39 | ||
|
|
90d1bb0ae4 | ||
|
|
adfc5b3e98 | ||
|
|
f3d7016ab2 | ||
|
|
ae776547ce | ||
|
|
da6885be62 | ||
|
|
c0fa4a077f | ||
|
|
19139a4dce | ||
|
|
7d1c3133b3 | ||
|
|
da9c0af854 |
@@ -23,7 +23,11 @@
|
||||
"position": "Position",
|
||||
"enable": "Enable",
|
||||
"disable": "Disable",
|
||||
"upload": "Upload"
|
||||
"upload": "Upload",
|
||||
"lock": "Lock",
|
||||
"unlock": "Unlock",
|
||||
"locked": "Locked",
|
||||
"unlocked": "Unlocked"
|
||||
},
|
||||
"type": {
|
||||
"string": "string",
|
||||
@@ -695,7 +699,9 @@
|
||||
"triggerAction": "Trigger action",
|
||||
"find": "Find in workspace",
|
||||
"copyItemUrl": "Copy item url",
|
||||
"copyURL2Clipboard": "Copied url to clipboard"
|
||||
"copyURL2Clipboard": "Copied url to clipboard",
|
||||
"showFlow": "Show",
|
||||
"hideFlow": "Hide"
|
||||
},
|
||||
"help": {
|
||||
"name": "Help",
|
||||
|
||||
@@ -23,7 +23,11 @@
|
||||
"position": "配置",
|
||||
"enable": "有効",
|
||||
"disable": "無効",
|
||||
"upload": "アップロード"
|
||||
"upload": "アップロード",
|
||||
"lock": "固定",
|
||||
"unlock": "固定を解除",
|
||||
"locked": "固定済み",
|
||||
"unlocked": "固定なし"
|
||||
},
|
||||
"type": {
|
||||
"string": "文字列",
|
||||
@@ -73,6 +77,8 @@
|
||||
"selectNodes": "ノードをクリックして選択",
|
||||
"enableFlow": "フローを有効化",
|
||||
"disableFlow": "フローを無効化",
|
||||
"lockFlow": "フローを固定",
|
||||
"unlockFlow": "フローの固定を解除",
|
||||
"moveToStart": "フローを先頭へ移動",
|
||||
"moveToEnd": "フローを最後へ移動"
|
||||
},
|
||||
@@ -107,6 +113,7 @@
|
||||
"displayStatus": "ノードのステータスを表示",
|
||||
"displayConfig": "設定ノード",
|
||||
"import": "読み込み",
|
||||
"importExample": "フロー例を読み込み",
|
||||
"export": "書き出し",
|
||||
"search": "ノードを検索",
|
||||
"searchInput": "ノードを検索",
|
||||
@@ -503,6 +510,7 @@
|
||||
"addRemoveNode": "ノードの選択、選択解除",
|
||||
"editSelected": "選択したノードを編集",
|
||||
"deleteSelected": "選択したノードや接続を削除",
|
||||
"deleteReconnect": "削除と再接続",
|
||||
"importNode": "フローの読み込み",
|
||||
"exportNode": "フローの書き出し",
|
||||
"nudgeNode": "選択したノードを移動(移動量小)",
|
||||
@@ -691,7 +699,9 @@
|
||||
"triggerAction": "アクションを実行",
|
||||
"find": "ワークスペース内を検索",
|
||||
"copyItemUrl": "要素のURLをコピー",
|
||||
"copyURL2Clipboard": "URLをクリップボードにコピーしました"
|
||||
"copyURL2Clipboard": "URLをクリップボードにコピーしました",
|
||||
"showFlow": "表示",
|
||||
"hideFlow": "非表示"
|
||||
},
|
||||
"help": {
|
||||
"name": "ヘルプ",
|
||||
@@ -1218,6 +1228,11 @@
|
||||
"junction": "分岐点",
|
||||
"linkNodes": "Linkノード"
|
||||
},
|
||||
"env-var": {
|
||||
"environment": "環境変数",
|
||||
"header": "大域環境変数",
|
||||
"revert": "破棄"
|
||||
},
|
||||
"action-list": {
|
||||
"toggle-show-tips": "ヒント表示切替",
|
||||
"show-about": "Node-REDの説明を表示",
|
||||
@@ -1302,6 +1317,7 @@
|
||||
"distribute-selection-vertically": "選択を上下に整列",
|
||||
"wire-series-of-nodes": "ノードを一続きに接続",
|
||||
"wire-node-to-multiple": "ノードを複数に接続",
|
||||
"wire-multiple-to-node": "複数からノードへ接続",
|
||||
"split-wire-with-link-nodes": "ワイヤーをlinkノードで分割",
|
||||
"generate-node-names": "ノード名を生成",
|
||||
"show-user-settings": "ユーザ設定を表示",
|
||||
@@ -1365,11 +1381,9 @@
|
||||
"copy-item-url": "要素のURLをコピー",
|
||||
"copy-item-edit-url": "要素の編集URLをコピー",
|
||||
"move-flow-to-start": "フローを先頭に移動",
|
||||
"move-flow-to-end": "フローを末尾に移動"
|
||||
},
|
||||
"env-var": {
|
||||
"environment": "環境変数",
|
||||
"header": "大域環境変数",
|
||||
"revert": "破棄"
|
||||
"move-flow-to-end": "フローを末尾に移動",
|
||||
"lock-flow": "フローを固定",
|
||||
"unlock-flow": "フローの固定を解除",
|
||||
"show-node-help": "ノードのヘルプを表示"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2302,7 +2302,7 @@ RED.nodes = (function() {
|
||||
// get added
|
||||
if (activeSubflow && /^link /.test(n.type) && n.links) {
|
||||
n.links = n.links.filter(function(id) {
|
||||
var otherNode = RED.nodes.node(id);
|
||||
const otherNode = node_map[id] || RED.nodes.node(id);
|
||||
return (otherNode && otherNode.z === activeWorkspace)
|
||||
});
|
||||
}
|
||||
|
||||
@@ -503,7 +503,7 @@ RED.clipboard = (function() {
|
||||
$("#red-ui-clipboard-dialog-import-text").on("keyup", validateImport);
|
||||
$("#red-ui-clipboard-dialog-import-text").on('paste',function() { setTimeout(validateImport,10)});
|
||||
|
||||
if (RED.workspaces.active() === 0 || RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.active() === 0 || RED.workspaces.isLocked()) {
|
||||
$("#red-ui-clipboard-dialog-import-opt-current").addClass('disabled').removeClass("selected");
|
||||
$("#red-ui-clipboard-dialog-import-opt-new").addClass("selected");
|
||||
} else {
|
||||
@@ -1278,7 +1278,7 @@ RED.clipboard = (function() {
|
||||
RED.keyboard.add("#red-ui-drop-target", "escape" ,hideDropTarget);
|
||||
|
||||
$('#red-ui-workspace-chart').on("dragenter",function(event) {
|
||||
if (!RED.workspaces.isActiveLocked() && (
|
||||
if (!RED.workspaces.isLocked() && (
|
||||
$.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1 ||
|
||||
$.inArray("Files",event.originalEvent.dataTransfer.types) != -1)) {
|
||||
$("#red-ui-drop-target").css({display:'table'}).focus();
|
||||
@@ -1288,7 +1288,7 @@ RED.clipboard = (function() {
|
||||
$('#red-ui-drop-target').on("dragover",function(event) {
|
||||
if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1 ||
|
||||
$.inArray("Files",event.originalEvent.dataTransfer.types) != -1 ||
|
||||
RED.workspaces.isActiveLocked()) {
|
||||
RED.workspaces.isLocked()) {
|
||||
event.preventDefault();
|
||||
}
|
||||
})
|
||||
@@ -1296,7 +1296,7 @@ RED.clipboard = (function() {
|
||||
hideDropTarget();
|
||||
})
|
||||
.on("drop",function(event) {
|
||||
if (!RED.workspaces.isActiveLocked()) {
|
||||
if (!RED.workspaces.isLocked()) {
|
||||
try {
|
||||
if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1) {
|
||||
var data = event.originalEvent.dataTransfer.getData("text/plain");
|
||||
|
||||
@@ -183,7 +183,7 @@ RED.tabs = (function() {
|
||||
// Assume this is wheel event which might not trigger
|
||||
// the scroll event, so do things manually
|
||||
var sl = scrollContainer.scrollLeft();
|
||||
sl -= evt.originalEvent.deltaY;
|
||||
sl += evt.originalEvent.deltaY;
|
||||
scrollContainer.scrollLeft(sl);
|
||||
}
|
||||
})
|
||||
|
||||
@@ -28,7 +28,7 @@ RED.contextMenu = (function () {
|
||||
const isMultipleLinks = !hasSelection && hasLinks && wireLinks.length > 1
|
||||
const canDelete = hasSelection || hasLinks
|
||||
const isGroup = hasSelection && selection.nodes.length === 1 && selection.nodes[0].type === 'group'
|
||||
const canEdit = !RED.workspaces.isActiveLocked()
|
||||
const canEdit = !RED.workspaces.isLocked()
|
||||
const canRemoveFromGroup = hasSelection && !!selection.nodes[0].g
|
||||
const isAllGroups = hasSelection && selection.nodes.filter(n => n.type !== 'group').length === 0
|
||||
const hasGroup = hasSelection && selection.nodes.filter(n => n.type === 'group' ).length > 0
|
||||
|
||||
@@ -860,6 +860,7 @@ RED.editor = (function() {
|
||||
function showEditDialog(node, defaultTab) {
|
||||
if (buildingEditDialog) { return }
|
||||
buildingEditDialog = true;
|
||||
if (node.z && RED.workspaces.isLocked(node.z)) { return }
|
||||
var editing_node = node;
|
||||
var removeInfoEditorOnClose = false;
|
||||
var skipInfoRefreshOnClose = false;
|
||||
@@ -1045,6 +1046,13 @@ RED.editor = (function() {
|
||||
|
||||
var trayFooterLeft = $('<div class="red-ui-tray-footer-left"></div>').appendTo(trayFooter)
|
||||
|
||||
var helpButton = $('<button type="button" class="red-ui-button"><i class="fa fa-book"></button>').on("click", function(evt) {
|
||||
evt.preventDefault();
|
||||
evt.stopPropagation();
|
||||
RED.sidebar.help.show(editing_node.type);
|
||||
}).appendTo(trayFooterLeft);
|
||||
RED.popover.tooltip(helpButton, RED._("sidebar.help.showHelp"));
|
||||
|
||||
$('<input id="node-input-node-disabled" type="checkbox">').prop("checked",!!node.d).appendTo(trayFooterLeft).toggleButton({
|
||||
enabledIcon: "fa-circle-thin",
|
||||
disabledIcon: "fa-ban",
|
||||
@@ -1148,6 +1156,8 @@ RED.editor = (function() {
|
||||
var editing_config_node = RED.nodes.node(id);
|
||||
var activeEditPanes = [];
|
||||
|
||||
if (editing_config_node && editing_config_node.z && RED.workspaces.isLocked(editing_config_node.z)) { return }
|
||||
|
||||
var configNodeScope = ""; // default to global
|
||||
var activeSubflow = RED.nodes.subflow(RED.workspaces.active());
|
||||
if (activeSubflow) {
|
||||
@@ -1190,6 +1200,13 @@ RED.editor = (function() {
|
||||
|
||||
var trayFooterLeft = $('<div class="red-ui-tray-footer-left"></div>').appendTo(trayFooter)
|
||||
|
||||
var helpButton = $('<button type="button" class="red-ui-button"><i class="fa fa-book"></button>').on("click", function(evt) {
|
||||
evt.preventDefault();
|
||||
evt.stopPropagation();
|
||||
RED.sidebar.help.show(editing_config_node.type);
|
||||
}).appendTo(trayFooterLeft);
|
||||
RED.popover.tooltip(helpButton, RED._("sidebar.help.showHelp"));
|
||||
|
||||
$('<input id="node-config-input-node-disabled" type="checkbox">').prop("checked",!!editing_config_node.d).appendTo(trayFooterLeft).toggleButton({
|
||||
enabledIcon: "fa-circle-thin",
|
||||
disabledIcon: "fa-ban",
|
||||
@@ -1694,6 +1711,7 @@ RED.editor = (function() {
|
||||
function showEditGroupDialog(group, defaultTab) {
|
||||
if (buildingEditDialog) { return }
|
||||
buildingEditDialog = true;
|
||||
if (group.z && RED.workspaces.isLocked(group.z)) { return }
|
||||
var editing_node = group;
|
||||
editStack.push(group);
|
||||
RED.view.state(RED.state.EDITING);
|
||||
@@ -1922,9 +1940,9 @@ RED.editor = (function() {
|
||||
workspace.locked = false;
|
||||
}
|
||||
$('<input id="node-input-locked" type="checkbox">').prop("checked",workspace.locked).appendTo(trayFooterRight).toggleButton({
|
||||
enabledLabel: 'Unlocked',
|
||||
enabledLabel: RED._("common.label.unlocked"),
|
||||
enabledIcon: "fa-unlock-alt",
|
||||
disabledLabel: 'Locked',
|
||||
disabledLabel: RED._("common.label.locked"),
|
||||
disabledIcon: "fa-lock",
|
||||
invertState: true
|
||||
})
|
||||
|
||||
@@ -188,7 +188,7 @@ RED.group = (function() {
|
||||
var activateMerge = false;
|
||||
var activateRemove = false;
|
||||
var singleGroupSelected = false;
|
||||
var locked = RED.workspaces.isActiveLocked()
|
||||
var locked = RED.workspaces.isLocked()
|
||||
|
||||
if (activateGroup) {
|
||||
singleGroupSelected = selection.nodes.length === 1 && selection.nodes[0].type === 'group';
|
||||
@@ -266,7 +266,7 @@ RED.group = (function() {
|
||||
}
|
||||
}
|
||||
function pasteGroupStyle() {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (RED.view.state() !== RED.state.DEFAULT) { return }
|
||||
if (groupStyleClipboard) {
|
||||
var selection = RED.view.selection();
|
||||
@@ -301,7 +301,7 @@ RED.group = (function() {
|
||||
}
|
||||
|
||||
function groupSelection() {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (RED.view.state() !== RED.state.DEFAULT) { return }
|
||||
var selection = RED.view.selection();
|
||||
if (selection.nodes) {
|
||||
@@ -320,7 +320,7 @@ RED.group = (function() {
|
||||
}
|
||||
}
|
||||
function ungroupSelection() {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (RED.view.state() !== RED.state.DEFAULT) { return }
|
||||
var selection = RED.view.selection();
|
||||
if (selection.nodes) {
|
||||
@@ -344,7 +344,7 @@ RED.group = (function() {
|
||||
}
|
||||
|
||||
function ungroup(g) {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
var nodes = [];
|
||||
var parentGroup = RED.nodes.group(g.g);
|
||||
g.nodes.forEach(function(n) {
|
||||
@@ -371,7 +371,7 @@ RED.group = (function() {
|
||||
}
|
||||
|
||||
function mergeSelection() {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (RED.view.state() !== RED.state.DEFAULT) { return }
|
||||
var selection = RED.view.selection();
|
||||
if (selection.nodes) {
|
||||
@@ -441,7 +441,7 @@ RED.group = (function() {
|
||||
}
|
||||
|
||||
function removeSelection() {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (RED.view.state() !== RED.state.DEFAULT) { return }
|
||||
var selection = RED.view.selection();
|
||||
if (selection.nodes) {
|
||||
@@ -469,7 +469,7 @@ RED.group = (function() {
|
||||
}
|
||||
}
|
||||
function createGroup(nodes) {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (nodes.length === 0) {
|
||||
return;
|
||||
}
|
||||
@@ -575,7 +575,7 @@ RED.group = (function() {
|
||||
markDirty(group);
|
||||
}
|
||||
function removeFromGroup(group, nodes, reparent) {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (!Array.isArray(nodes)) {
|
||||
nodes = [nodes];
|
||||
}
|
||||
|
||||
@@ -165,6 +165,9 @@ RED.projects.settings = (function() {
|
||||
}
|
||||
var description = addTargetToExternalLinks($('<span class="red-ui-text-bidi-aware" dir=\"'+RED.text.bidi.resolveBaseTextDir(desc)+'">'+desc+'</span>')).appendTo(container);
|
||||
description.find(".red-ui-text-bidi-aware").contents().filter(function() { return this.nodeType === 3 && this.textContent.trim() !== "" }).wrap( "<span></span>" );
|
||||
setTimeout(function () {
|
||||
mermaid.init();
|
||||
}, 200);
|
||||
}
|
||||
|
||||
function editSummary(activeProject, summary, container, version, versionContainer) {
|
||||
|
||||
@@ -573,7 +573,7 @@ RED.subflow = (function() {
|
||||
}
|
||||
});
|
||||
RED.events.on("view:selection-changed",function(selection) {
|
||||
if (!selection.nodes || RED.workspaces.isActiveLocked()) {
|
||||
if (!selection.nodes || RED.workspaces.isLocked()) {
|
||||
RED.menu.setDisabled("menu-item-subflow-convert",true);
|
||||
} else {
|
||||
RED.menu.setDisabled("menu-item-subflow-convert",false);
|
||||
@@ -636,7 +636,7 @@ RED.subflow = (function() {
|
||||
}
|
||||
|
||||
function convertToSubflow() {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
var selection = RED.view.selection();
|
||||
|
||||
@@ -135,6 +135,10 @@ RED.sidebar.info.outliner = (function() {
|
||||
RED.workspaces.show(n.id, null, true);
|
||||
}
|
||||
});
|
||||
RED.popover.tooltip(toggleVisibleButton, function () {
|
||||
var isHidden = !div.hasClass("red-ui-info-outline-item-hidden");
|
||||
return RED._("sidebar.info." + (isHidden ? "hideFlow" : "showFlow"));
|
||||
});
|
||||
}
|
||||
if (n.type !== 'subflow') {
|
||||
var toggleButton = $('<button type="button" class="red-ui-info-outline-item-control-disable red-ui-button red-ui-button-small"><i class="fa fa-circle-thin"></i><i class="fa fa-ban"></i></button>').appendTo(controls).on("click",function(evt) {
|
||||
@@ -633,6 +637,9 @@ RED.sidebar.info.outliner = (function() {
|
||||
objects[n.id].children = missingParents[n.id];
|
||||
delete missingParents[n.id]
|
||||
}
|
||||
if (objects[n.id].children.length === 0) {
|
||||
objects[n.id].children.push(getEmptyItem(n.id));
|
||||
}
|
||||
}
|
||||
var parent = n.g||n.z||"__global__";
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function alignToGrid() {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
var selection = RED.view.selection();
|
||||
@@ -90,7 +90,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function moveSelection(dx,dy) {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
if (moving_set === null) {
|
||||
@@ -159,7 +159,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function setSelectedNodeLabelState(labelShown) {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
var selection = RED.view.selection();
|
||||
@@ -448,7 +448,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function alignSelectionToEdge(direction) {
|
||||
// if (RED.workspaces.isActiveLocked()) {
|
||||
// if (RED.workspaces.isLocked()) {
|
||||
// return
|
||||
// }
|
||||
var selection = RED.view.selection();
|
||||
@@ -552,7 +552,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function distributeSelection(direction) {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
var selection = RED.view.selection();
|
||||
@@ -713,7 +713,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function reorderSelection(dir) {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
var selection = RED.view.selection();
|
||||
@@ -752,7 +752,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function wireSeriesOfNodes() {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
var selection = RED.view.selection();
|
||||
@@ -795,7 +795,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function wireNodeToMultiple() {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
var selection = RED.view.selection();
|
||||
@@ -840,12 +840,70 @@ RED.view.tools = (function() {
|
||||
}
|
||||
}
|
||||
|
||||
function wireMultipleToNode() {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
var selection = RED.view.selection();
|
||||
if (selection.nodes) {
|
||||
if (selection.nodes.length > 1) {
|
||||
var targetNode = selection.nodes[selection.nodes.length - 1];
|
||||
if (targetNode.inputs === 0) {
|
||||
return;
|
||||
}
|
||||
var i = 0;
|
||||
var newLinks = [];
|
||||
for (i = 0; i < selection.nodes.length - 1; i++) {
|
||||
var sourceNode = selection.nodes[i];
|
||||
if (sourceNode.outputs > 0) {
|
||||
|
||||
// Wire the first output to the target that has no link to the target yet.
|
||||
// This allows for connecting all combinations of inputs/outputs.
|
||||
// The user may then delete links quickly that aren't needed.
|
||||
var sourceConnectedOutports = RED.nodes.filterLinks({
|
||||
source: sourceNode,
|
||||
target: targetNode
|
||||
});
|
||||
|
||||
// Get outport indices that have no link yet
|
||||
var sourceOutportIndices = Array.from({ length: sourceNode.outputs }, (_, i) => i);
|
||||
var sourceConnectedOutportIndices = sourceConnectedOutports.map( x => x.sourcePort );
|
||||
var sourceFreeOutportIndices = sourceOutportIndices.filter(x => !sourceConnectedOutportIndices.includes(x));
|
||||
|
||||
// Does an unconnected source port exist?
|
||||
if (sourceFreeOutportIndices.length == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Connect the first free outport to the target
|
||||
var newLink = {
|
||||
source: sourceNode,
|
||||
target: targetNode,
|
||||
sourcePort: sourceFreeOutportIndices[0]
|
||||
}
|
||||
RED.nodes.addLink(newLink);
|
||||
newLinks.push(newLink);
|
||||
}
|
||||
}
|
||||
if (newLinks.length > 0) {
|
||||
RED.history.push({
|
||||
t: 'add',
|
||||
links: newLinks,
|
||||
dirty: RED.nodes.dirty()
|
||||
})
|
||||
RED.nodes.dirty(true);
|
||||
RED.view.redraw(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits selected wires and re-joins them with link-out+link-in
|
||||
* @param {Object || Object[]} wires The wire(s) to split and replace with link-out, link-in nodes.
|
||||
*/
|
||||
function splitWiresWithLinkNodes(wires) {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
let wiresToSplit = wires || (RED.view.selection().links && RED.view.selection().links.filter(e => !e.link));
|
||||
@@ -1016,7 +1074,7 @@ RED.view.tools = (function() {
|
||||
* @param {{ renameBlank: boolean, renameClash: boolean, generateHistory: boolean }} options Possible options are `renameBlank`, `renameClash` and `generateHistory`
|
||||
*/
|
||||
function generateNodeNames(node, options) {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
options = Object.assign({
|
||||
@@ -1089,7 +1147,7 @@ RED.view.tools = (function() {
|
||||
}
|
||||
|
||||
function addJunctionsToWires(wires) {
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
let wiresToSplit = wires || (RED.view.selection().links && RED.view.selection().links.filter(e => !e.link));
|
||||
@@ -1307,6 +1365,7 @@ RED.view.tools = (function() {
|
||||
|
||||
RED.actions.add("core:wire-series-of-nodes", function() { wireSeriesOfNodes() })
|
||||
RED.actions.add("core:wire-node-to-multiple", function() { wireNodeToMultiple() })
|
||||
RED.actions.add("core:wire-multiple-to-node", function() { wireMultipleToNode() })
|
||||
|
||||
RED.actions.add("core:split-wire-with-link-nodes", function () { splitWiresWithLinkNodes() });
|
||||
RED.actions.add("core:split-wires-with-junctions", function () { addJunctionsToWires() });
|
||||
|
||||
@@ -609,11 +609,28 @@ RED.view = (function() {
|
||||
|
||||
var group = $(ui.helper).data("group");
|
||||
if (group) {
|
||||
var oldX = group.x;
|
||||
var oldY = group.y;
|
||||
RED.group.addToGroup(group, nn);
|
||||
var moveEvent = null;
|
||||
if ((group.x !== oldX) ||
|
||||
(group.y !== oldY)) {
|
||||
moveEvent = {
|
||||
t: "move",
|
||||
nodes: [{n: group,
|
||||
ox: oldX, oy: oldY,
|
||||
dx: group.x -oldX,
|
||||
dy: group.y -oldY}],
|
||||
dirty: true
|
||||
};
|
||||
}
|
||||
historyEvent = {
|
||||
t: 'multi',
|
||||
events: [historyEvent],
|
||||
|
||||
};
|
||||
if (moveEvent) {
|
||||
historyEvent.events.push(moveEvent)
|
||||
}
|
||||
historyEvent.events.push({
|
||||
t: "addToGroup",
|
||||
@@ -654,7 +671,7 @@ RED.view = (function() {
|
||||
RED.actions.add("core:copy-selection-to-internal-clipboard",copySelection);
|
||||
RED.actions.add("core:cut-selection-to-internal-clipboard",function(){copySelection(true);deleteSelection();});
|
||||
RED.actions.add("core:paste-from-internal-clipboard",function(){
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
return
|
||||
}
|
||||
importNodes(clipboard,{generateIds: clipboardSource === 'copy', generateDefaultNames: clipboardSource === 'copy'});
|
||||
@@ -1385,19 +1402,35 @@ RED.view = (function() {
|
||||
RED.editor.validateNode(nn);
|
||||
|
||||
if (targetGroup) {
|
||||
var oldX = targetGroup.x;
|
||||
var oldY = targetGroup.y;
|
||||
RED.group.addToGroup(targetGroup, nn);
|
||||
var moveEvent = null;
|
||||
if ((targetGroup.x !== oldX) ||
|
||||
(targetGroup.y !== oldY)) {
|
||||
moveEvent = {
|
||||
t: "move",
|
||||
nodes: [{n: targetGroup,
|
||||
ox: oldX, oy: oldY,
|
||||
dx: targetGroup.x -oldX,
|
||||
dy: targetGroup.y -oldY}],
|
||||
dirty: true
|
||||
};
|
||||
}
|
||||
if (historyEvent.t !== "multi") {
|
||||
historyEvent = {
|
||||
t:'multi',
|
||||
events: [historyEvent]
|
||||
}
|
||||
};
|
||||
}
|
||||
historyEvent.events.push({
|
||||
t: "addToGroup",
|
||||
group: targetGroup,
|
||||
nodes: nn
|
||||
})
|
||||
|
||||
});
|
||||
if (moveEvent) {
|
||||
historyEvent.events.push(moveEvent);
|
||||
}
|
||||
}
|
||||
|
||||
if (spliceLink) {
|
||||
@@ -1735,6 +1768,7 @@ RED.view = (function() {
|
||||
|
||||
// Check link splice or group-add
|
||||
if (movingSet.length() === 1 && movingSet.get(0).n.type !== "group") {
|
||||
//}{//NIS
|
||||
node = movingSet.get(0);
|
||||
if (spliceActive) {
|
||||
if (!spliceTimer) {
|
||||
@@ -2094,11 +2128,25 @@ RED.view = (function() {
|
||||
if (mouse_mode == RED.state.MOVING_ACTIVE) {
|
||||
if (movingSet.length() > 0) {
|
||||
var addedToGroup = null;
|
||||
var moveEvent = null;
|
||||
if (activeHoverGroup) {
|
||||
var oldX = activeHoverGroup.x;
|
||||
var oldY = activeHoverGroup.y;
|
||||
for (var j=0;j<movingSet.length();j++) {
|
||||
var n = movingSet.get(j);
|
||||
RED.group.addToGroup(activeHoverGroup,n.n);
|
||||
}
|
||||
if ((activeHoverGroup.x !== oldX) ||
|
||||
(activeHoverGroup.y !== oldY)) {
|
||||
moveEvent = {
|
||||
t: "move",
|
||||
nodes: [{n: activeHoverGroup,
|
||||
ox: oldX, oy: oldY,
|
||||
dx: activeHoverGroup.x -oldX,
|
||||
dy: activeHoverGroup.y -oldY}],
|
||||
dirty: true
|
||||
};
|
||||
}
|
||||
addedToGroup = activeHoverGroup;
|
||||
|
||||
activeHoverGroup.hovered = false;
|
||||
@@ -2144,6 +2192,12 @@ RED.view = (function() {
|
||||
historyEvent.addToGroup = addedToGroup;
|
||||
}
|
||||
RED.nodes.dirty(true);
|
||||
if (moveEvent) {
|
||||
historyEvent = {
|
||||
t: "multi",
|
||||
events: [moveEvent, historyEvent]
|
||||
};
|
||||
}
|
||||
RED.history.push(historyEvent);
|
||||
}
|
||||
}
|
||||
@@ -2495,7 +2549,7 @@ RED.view = (function() {
|
||||
}
|
||||
|
||||
function editSelection() {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (movingSet.length() > 0) {
|
||||
var node = movingSet.get(0).n;
|
||||
if (node.type === "subflow") {
|
||||
@@ -2829,7 +2883,7 @@ RED.view = (function() {
|
||||
|
||||
|
||||
function detachSelectedNodes() {
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
var selection = RED.view.selection();
|
||||
if (selection.nodes) {
|
||||
const {newLinks, removedLinks} = RED.nodes.detachNodes(selection.nodes);
|
||||
@@ -3411,7 +3465,7 @@ RED.view = (function() {
|
||||
}
|
||||
if (dblClickPrimed && mousedown_node == d && clickElapsed > 0 && clickElapsed < dblClickInterval) {
|
||||
mouse_mode = RED.state.DEFAULT;
|
||||
if (RED.workspaces.isActiveLocked()) {
|
||||
if (RED.workspaces.isLocked()) {
|
||||
clickElapsed = 0;
|
||||
d3.event.stopPropagation();
|
||||
return
|
||||
@@ -3513,11 +3567,25 @@ RED.view = (function() {
|
||||
updateActiveNodes();
|
||||
}
|
||||
|
||||
var moveEvent = null;
|
||||
if (activeHoverGroup) {
|
||||
var oldX = activeHoverGroup.x;
|
||||
var oldY = activeHoverGroup.y;
|
||||
for (var j=0;j<movingSet.length();j++) {
|
||||
var n = movingSet.get(j);
|
||||
RED.group.addToGroup(activeHoverGroup,n.n);
|
||||
}
|
||||
if ((activeHoverGroup.x !== oldX) ||
|
||||
(activeHoverGroup.y !== oldY)) {
|
||||
moveEvent = {
|
||||
t: "move",
|
||||
nodes: [{n: activeHoverGroup,
|
||||
ox: oldX, oy: oldY,
|
||||
dx: activeHoverGroup.x -oldX,
|
||||
dy: activeHoverGroup.y -oldY}],
|
||||
dirty: true
|
||||
};
|
||||
}
|
||||
historyEvent.addedToGroup = activeHoverGroup;
|
||||
|
||||
activeHoverGroup.hovered = false;
|
||||
@@ -3526,7 +3594,6 @@ RED.view = (function() {
|
||||
activeGroup.selected = true;
|
||||
activeHoverGroup = null;
|
||||
}
|
||||
|
||||
if (mouse_mode == RED.state.DETACHED_DRAGGING) {
|
||||
var ns = [];
|
||||
for (var j=0;j<movingSet.length();j++) {
|
||||
@@ -3537,7 +3604,15 @@ RED.view = (function() {
|
||||
n.n.moved = true;
|
||||
}
|
||||
}
|
||||
RED.history.replace({t:"multi",events:[historyEvent,{t:"move",nodes:ns}],dirty: historyEvent.dirty})
|
||||
var event = {t:"multi",events:[historyEvent,{t:"move",nodes:ns}],dirty: historyEvent.dirty};
|
||||
if (moveEvent) {
|
||||
event.events.push(moveEvent);
|
||||
}
|
||||
RED.history.replace(event)
|
||||
}
|
||||
else if(moveEvent) {
|
||||
var event = {t:"multi", events:[historyEvent, moveEvent], dirty: true};
|
||||
RED.history.replace(event);
|
||||
}
|
||||
|
||||
updateSelection();
|
||||
@@ -3934,7 +4009,7 @@ RED.view = (function() {
|
||||
if (RED.view.DEBUG) {
|
||||
console.warn("groupMouseUp", { mouse_mode, event: d3.event });
|
||||
}
|
||||
if (RED.workspaces.isActiveLocked()) { return }
|
||||
if (RED.workspaces.isLocked()) { return }
|
||||
if (dblClickPrimed && mousedown_group == g && clickElapsed > 0 && clickElapsed < dblClickInterval) {
|
||||
mouse_mode = RED.state.DEFAULT;
|
||||
RED.editor.editGroup(g);
|
||||
@@ -4158,7 +4233,7 @@ RED.view = (function() {
|
||||
function showTouchMenu(obj,pos) {
|
||||
var mdn = mousedown_node;
|
||||
var options = [];
|
||||
const isActiveLocked = RED.workspaces.isActiveLocked()
|
||||
const isActiveLocked = RED.workspaces.isLocked()
|
||||
options.push({name:"delete",disabled:(isActiveLocked || movingSet.length()===0 && selectedLinks.length() === 0),onselect:function() {deleteSelection();}});
|
||||
options.push({name:"cut",disabled:(isActiveLocked || movingSet.length()===0),onselect:function() {copySelection(true);deleteSelection();}});
|
||||
options.push({name:"copy",disabled:(isActiveLocked || movingSet.length()===0),onselect:function() {copySelection();}});
|
||||
|
||||
@@ -160,7 +160,7 @@ RED.workspaces = (function() {
|
||||
}
|
||||
});
|
||||
|
||||
let isCurrentLocked = RED.workspaces.isActiveLocked()
|
||||
let isCurrentLocked = RED.workspaces.isLocked()
|
||||
if (tab) {
|
||||
isCurrentLocked = tab.locked
|
||||
}
|
||||
@@ -833,8 +833,9 @@ RED.workspaces = (function() {
|
||||
active: function() {
|
||||
return activeWorkspace
|
||||
},
|
||||
isActiveLocked: function() {
|
||||
var ws = RED.nodes.workspace(activeWorkspace) || RED.nodes.subflow(activeWorkspace)
|
||||
isLocked: function(id) {
|
||||
id = id || activeWorkspace
|
||||
var ws = RED.nodes.workspace(id) || RED.nodes.subflow(id)
|
||||
return ws && ws.locked
|
||||
},
|
||||
selection: function() {
|
||||
|
||||
@@ -87,16 +87,18 @@
|
||||
padding: 0px 8px;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
&.toggle:not(.selected) {
|
||||
&.toggle.selected {
|
||||
color: var(--red-ui-workspace-button-color-selected) !important;
|
||||
background: var(--red-ui-workspace-button-background-active);
|
||||
background: var(--red-ui-workspace-button-background) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.red-ui-tray-footer-left {
|
||||
display:inline-block;
|
||||
margin-right: 20px;
|
||||
float:left;
|
||||
& :not(:first-child) {
|
||||
margin-left: 5px
|
||||
}
|
||||
}
|
||||
.red-ui-tray-footer-right {
|
||||
float: right;
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
color: var(--red-ui-primary-text-color);
|
||||
border: 1px solid var(--red-ui-notification-border-default);
|
||||
border-left-width: 16px;
|
||||
overflow: scroll;
|
||||
overflow: auto;
|
||||
max-height: 80vh;
|
||||
.ui-dialog-buttonset {
|
||||
margin-top: 20px;
|
||||
|
||||
@@ -17,7 +17,7 @@ export default {
|
||||
"en-US": "Context Menu",
|
||||
"ja": "コンテキストメニュー"
|
||||
},
|
||||
image: 'images/context-menu.png',
|
||||
image: '3.0/images/context-menu.png',
|
||||
description: {
|
||||
"en-US": `<p>The editor now has its own context menu when you
|
||||
right-click in the workspace.</p>
|
||||
@@ -32,7 +32,7 @@ export default {
|
||||
"en-US": "Wire Junctions",
|
||||
"ja": "分岐点をワイヤーに追加"
|
||||
},
|
||||
image: 'images/junction-slice.gif',
|
||||
image: '3.0/images/junction-slice.gif',
|
||||
description: {
|
||||
"en-US": `<p>To make it easier to route wires around your flows,
|
||||
it is now possible to add junction nodes that give
|
||||
@@ -48,7 +48,7 @@ export default {
|
||||
"en-US": "Wire Junctions",
|
||||
"ja": "分岐点をワイヤーに追加"
|
||||
},
|
||||
image: 'images/junction-quick-add.png',
|
||||
image: '3.0/images/junction-quick-add.png',
|
||||
description: {
|
||||
"en-US": `<p>Junctions can also be added using the quick-add dialog.</p>
|
||||
<p>The dialog is opened by holding the Ctrl (or Cmd) key when
|
||||
@@ -62,7 +62,7 @@ export default {
|
||||
"en-US": "Debug Path Tooltip",
|
||||
"ja": "デバッグパスのツールチップ"
|
||||
},
|
||||
image: 'images/debug-path-tooltip.png',
|
||||
image: '3.0/images/debug-path-tooltip.png',
|
||||
description: {
|
||||
"en-US": `<p>When hovering over a node name in the Debug sidebar, a
|
||||
new tooltip shows the full location of the node.</p>
|
||||
@@ -81,7 +81,7 @@ export default {
|
||||
"en-US": "Continuous Search",
|
||||
"ja": "連続した検索"
|
||||
},
|
||||
image: 'images/continuous-search.png',
|
||||
image: '3.0/images/continuous-search.png',
|
||||
description: {
|
||||
"en-US": `<p>When searching for things in the editor, a new toolbar in
|
||||
the workspace provides options to quickly jump between
|
||||
@@ -94,7 +94,7 @@ export default {
|
||||
"en-US": "New wiring actions",
|
||||
"ja": "新しいワイヤー操作"
|
||||
},
|
||||
image: "images/split-wire-with-links.gif",
|
||||
image: "3.0/images/split-wire-with-links.gif",
|
||||
description: {
|
||||
"en-US": `<p>A new action has been added that will replace a wire with a pair of connected Link nodes:</p>
|
||||
<ul>
|
||||
|
||||
@@ -5,17 +5,17 @@ export default {
|
||||
titleIcon: "fa fa-map-o",
|
||||
title: {
|
||||
"en-US": "Welcome to Node-RED 3.1 Beta 1!",
|
||||
// "ja": "Node-RED 3.1へようこそ!"
|
||||
"ja": "Node-RED 3.1 ベータ1へようこそ!"
|
||||
},
|
||||
description: {
|
||||
"en-US": "<p>This is the first beta release for 3.1.0 and we have a few new features to tell you about.</p>",
|
||||
// "ja": ""
|
||||
"ja": "<p>これは3.1.0の最初のベータリリースです。いくつかの新機能について説明します。</p>"
|
||||
}
|
||||
},
|
||||
{
|
||||
title: {
|
||||
"en-US": "Improved Context Menu",
|
||||
// "ja": ""
|
||||
"ja": "コンテキストメニューの改善"
|
||||
},
|
||||
image: 'images/context-menu.png',
|
||||
description: {
|
||||
@@ -25,26 +25,29 @@ export default {
|
||||
of other useful tools are now just a click away.</p>
|
||||
<p>The flow tab bar also has its own context menu to make working
|
||||
with your flows much easier.</p>`,
|
||||
// "ja": ``
|
||||
"ja": `<p>より多くの組み込み動作を利用できるように、エディタのコンテキストメニューが拡張されました。</p>
|
||||
<p>ノードの追加、グループの操作、その他の便利なツールをクリックするだけで実行できるようになりました。</p>
|
||||
<p>フローのタブバーには、フローの操作をより簡単にする独自のコンテキストメニューもあります。</p>`
|
||||
}
|
||||
},
|
||||
{
|
||||
title: {
|
||||
"en-US": "Hiding Flows",
|
||||
// "ja": ""
|
||||
"ja": "フローを非表示"
|
||||
},
|
||||
image: 'images/hiding-flows.png',
|
||||
description: {
|
||||
"en-US": `<p>Hiding flows is now done through the flow context menu.</p>
|
||||
<p>The 'hide' button in previous releases has been removed from the tabs
|
||||
as they were being clicked accidentally too often.</p>`,
|
||||
// "ja": ``
|
||||
"ja": `<p>フローを非表示にする機能は、フローのコンテキストメニューから実行するようになりました。</p>
|
||||
<p>これまでのリリースでタブに存在していた「非表示」ボタンは、よく誤ってクリックされていたため、削除されました。</p>`
|
||||
},
|
||||
},
|
||||
{
|
||||
title: {
|
||||
"en-US": "Locking Flows",
|
||||
// "ja": ""
|
||||
"ja": "フローを固定"
|
||||
},
|
||||
image: 'images/locking-flows.png',
|
||||
description: {
|
||||
@@ -52,44 +55,49 @@ export default {
|
||||
<p>When locked you cannot modify the nodes in any way.</p>
|
||||
<p>The flow context menu provides the options to lock and unlock flows,
|
||||
as well as in the Info sidebar explorer.</p>`,
|
||||
// "ja": ``
|
||||
"ja": `<p>誤ってフローに変更が加えられてしまうのを防ぐために、フローを固定できるようになりました。</p>
|
||||
<p>固定されている時は、ノードを修正することはできません。</p>
|
||||
<p>フローのコンテキストメニューと、情報サイドバーのエクスプローラには、フローの固定や解除をするためのオプションが用意されています。</p>`
|
||||
},
|
||||
},
|
||||
{
|
||||
title: {
|
||||
"en-US": "Adding Images to node/flow descriptions",
|
||||
// "ja": ""
|
||||
"ja": "ノードやフローの説明へ画像を追加"
|
||||
},
|
||||
// image: 'images/debug-path-tooltip.png',
|
||||
description: {
|
||||
"en-US": `<p>You can now add images to a node's or flows's description.</p>
|
||||
<p>Simply drag the image into the text editor and it will get added inline.</p>
|
||||
<p>When the description is shown in the Info sidebar, the image will be displayed.`,
|
||||
// "ja": ``
|
||||
<p>When the description is shown in the Info sidebar, the image will be displayed.</p>`,
|
||||
"ja": `<p>ノードまたはフローの説明に、画像を追加できるようになりました。</p>
|
||||
<p>画像をテキストエディタにドラッグするだけで、行内に埋め込まれます。</p>
|
||||
<p>情報サイドバーの説明を開くと、その画像が表示されます。</p>`
|
||||
},
|
||||
},
|
||||
{
|
||||
title: {
|
||||
"en-US": "Adding Mermaid Diagrams",
|
||||
// "ja": ""
|
||||
"ja": "Mermaidの図を追加"
|
||||
},
|
||||
image: 'images/mermaid.png',
|
||||
description: {
|
||||
"en-US": `<p>You can also add <a href="https://github.com/mermaid-js/mermaid">Mermaid</a> diagrams directly into your node or flow descriptions.</p>
|
||||
<p>This gives you much richer options for documenting your flows.</p>`,
|
||||
// "ja": ``
|
||||
"ja": `<p>ノードやフローの説明に、<a href="https://github.com/mermaid-js/mermaid">Mermaid</a>の図を直接追加することもできます。</p>
|
||||
<p>これによって、フローを説明する文書作成の選択肢がより多くなります。</p>`
|
||||
},
|
||||
},
|
||||
{
|
||||
title: {
|
||||
"en-US": "Managing Global Environment Variables",
|
||||
// "ja": ""
|
||||
"ja": "グローバル環境変数の管理"
|
||||
},
|
||||
image: 'images/global-env-vars.png',
|
||||
description: {
|
||||
"en-US": `<p>You can set environment variables that apply to all nodes and flows in the new
|
||||
'Global Environment Variables' section of User Settings.</p>`,
|
||||
// "ja": ``
|
||||
"ja": `<p>ユーザ設定に新しく追加された「大域環境変数」のセクションで、全てのノードとフローに適用される環境変数を登録できます。</p>`
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -101,7 +109,7 @@ export default {
|
||||
description: {
|
||||
"en-US": `<p>The core nodes have received lots of minor fixes, documentation updates and
|
||||
small enhancements. Check the full changelog in the Help sidebar for a full list.</p>`,
|
||||
// "ja": ``
|
||||
"ja": `<p>コアノードにマイナーな修正、ドキュメント更新、小規模な拡張が数多く追加されています。全ての一覧は、ヘルプサイドバーの全ての更新履歴を確認してください。</p>`
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -18,7 +18,16 @@
|
||||
color:"#c0edc0",
|
||||
defaults: {
|
||||
name: {value:""},
|
||||
scope: {value:[], type:"*[]"},
|
||||
scope: {
|
||||
value: [],
|
||||
type: "*[]",
|
||||
validate: function (v, opt) {
|
||||
if (v.length > 0) {
|
||||
return true;
|
||||
}
|
||||
return RED._("node-red:complete.errors.scopeUndefined");
|
||||
}
|
||||
},
|
||||
uncaught: {value:false}
|
||||
},
|
||||
inputs:0,
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
<script type="text/html" data-template-name="link in">
|
||||
<div class="form-row">
|
||||
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
|
||||
@@ -272,7 +271,17 @@
|
||||
color:"#ddd",//"#87D8CF",
|
||||
defaults: {
|
||||
name: { value: "" },
|
||||
links: { value: [], type:"link in[]" },
|
||||
links: {
|
||||
value: [],
|
||||
type: "link in[]",
|
||||
validate: function (v, opt) {
|
||||
if ((this.linkType === "static" && v.length > 0)
|
||||
|| this.linkType === "dynamic") {
|
||||
return true;
|
||||
}
|
||||
return RED._("node-red:link.errors.linkUndefined");
|
||||
}
|
||||
},
|
||||
linkType: { value:"static" },
|
||||
timeout: {
|
||||
value: "30",
|
||||
|
||||
@@ -164,10 +164,10 @@ module.exports = function(RED) {
|
||||
if (returnNode && returnNode.returnLinkMessage) {
|
||||
returnNode.returnLinkMessage(messageEvent.id, msg);
|
||||
} else {
|
||||
node.warn(RED._("link.error.missingReturn"))
|
||||
node.warn(RED._("link.errors.missingReturn"));
|
||||
}
|
||||
} else {
|
||||
node.warn(RED._("link.error.missingReturn"))
|
||||
node.warn(RED._("link.errors.missingReturn"));
|
||||
}
|
||||
done();
|
||||
} else if (mode === "link") {
|
||||
|
||||
@@ -119,7 +119,10 @@
|
||||
}
|
||||
},
|
||||
"complete": {
|
||||
"completeNodes": "complete: __number__"
|
||||
"completeNodes": "complete: __number__",
|
||||
"errors": {
|
||||
"scopeUndefined": "scope undefined"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"output": "Output",
|
||||
@@ -181,8 +184,9 @@
|
||||
"staticLinkCall": "Fixed target",
|
||||
"dynamicLinkCall": "Dynamic target (msg.target)",
|
||||
"dynamicLinkLabel": "Dynamic",
|
||||
"error": {
|
||||
"missingReturn": "Missing return node information"
|
||||
"errors": {
|
||||
"missingReturn": "Missing return node information",
|
||||
"linkUndefined": "link undefined"
|
||||
}
|
||||
},
|
||||
"tls": {
|
||||
|
||||
@@ -119,7 +119,10 @@
|
||||
}
|
||||
},
|
||||
"complete": {
|
||||
"completeNodes": "complete: __number__"
|
||||
"completeNodes": "complete: __number__",
|
||||
"errors": {
|
||||
"scopeUndefined": "スコープが未定義"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"output": "対象",
|
||||
@@ -181,8 +184,9 @@
|
||||
"staticLinkCall": "対象を固定で指定",
|
||||
"dynamicLinkCall": "対象を動的に指定 (msg.target)",
|
||||
"dynamicLinkLabel": "動的",
|
||||
"error": {
|
||||
"missingReturn": "返却するノードの情報が存在しません"
|
||||
"errors": {
|
||||
"missingReturn": "返却するノードの情報が存在しません",
|
||||
"linkUndefined": "リンクが未定義"
|
||||
}
|
||||
},
|
||||
"tls": {
|
||||
|
||||
Reference in New Issue
Block a user