mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Merge branch 'dev' into tcp-node-better-split
This commit is contained in:
commit
958f57085f
@ -106,9 +106,15 @@ async function login(req,res) {
|
|||||||
urlPrefix += "/";
|
urlPrefix += "/";
|
||||||
}
|
}
|
||||||
response = {
|
response = {
|
||||||
"type":"strategy",
|
"type":"strategy"
|
||||||
"prompts":[{type:"button",label:mergedAdminAuth.strategy.label, url: urlPrefix + "auth/strategy"}]
|
|
||||||
}
|
}
|
||||||
|
if (mergedAdminAuth.strategy.autoLogin) {
|
||||||
|
response.autoLogin = true
|
||||||
|
response.loginRedirect = urlPrefix + "auth/strategy"
|
||||||
|
}
|
||||||
|
response.prompts = [
|
||||||
|
{type:"button",label:mergedAdminAuth.strategy.label, url: urlPrefix + "auth/strategy"}
|
||||||
|
]
|
||||||
if (mergedAdminAuth.strategy.icon) {
|
if (mergedAdminAuth.strategy.icon) {
|
||||||
response.prompts[0].icon = mergedAdminAuth.strategy.icon;
|
response.prompts[0].icon = mergedAdminAuth.strategy.icon;
|
||||||
}
|
}
|
||||||
|
@ -634,14 +634,7 @@
|
|||||||
"empty": "leer",
|
"empty": "leer",
|
||||||
"globalConfig": "Globale Konfigurations-Nodes",
|
"globalConfig": "Globale Konfigurations-Nodes",
|
||||||
"triggerAction": "Auslösen",
|
"triggerAction": "Auslösen",
|
||||||
"find": "Suche im Arbeitsbereich",
|
"find": "Suche im Arbeitsbereich"
|
||||||
"search": {
|
|
||||||
"configNodes": "Konfigurations-Nodes",
|
|
||||||
"unusedConfigNodes": "Unbenutzte Konfigurations-Nodes",
|
|
||||||
"invalidNodes": "Ungültige Nodes",
|
|
||||||
"uknownNodes": "Unbekannte Nodes",
|
|
||||||
"unusedSubflows": "Unbenutzte Subflows"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"name": "Hilfe",
|
"name": "Hilfe",
|
||||||
@ -863,7 +856,14 @@
|
|||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"empty": "Keine Übereinstimmungen gefunden",
|
"empty": "Keine Übereinstimmungen gefunden",
|
||||||
"addNode": "Node hinzufügen ..."
|
"addNode": "Node hinzufügen ...",
|
||||||
|
"options": {
|
||||||
|
"configNodes": "Konfigurations-Nodes",
|
||||||
|
"unusedConfigNodes": "Unbenutzte Konfigurations-Nodes",
|
||||||
|
"invalidNodes": "Ungültige Nodes",
|
||||||
|
"uknownNodes": "Unbekannte Nodes",
|
||||||
|
"unusedSubflows": "Unbenutzte Subflows"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"expressionEditor": {
|
"expressionEditor": {
|
||||||
"functions": "Funktionen",
|
"functions": "Funktionen",
|
||||||
|
@ -149,7 +149,11 @@
|
|||||||
"toggle-navigator": "Toggle navigator",
|
"toggle-navigator": "Toggle navigator",
|
||||||
"zoom-out": "Zoom out",
|
"zoom-out": "Zoom out",
|
||||||
"zoom-reset": "Reset zoom",
|
"zoom-reset": "Reset zoom",
|
||||||
"zoom-in": "Zoom in"
|
"zoom-in": "Zoom in",
|
||||||
|
"search-flows": "Search flows",
|
||||||
|
"search-prev": "Previous",
|
||||||
|
"search-next": "Next",
|
||||||
|
"search-counter": "\"__term__\" __result__ of __count__"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"loggedInAs": "Logged in as __name__",
|
"loggedInAs": "Logged in as __name__",
|
||||||
@ -497,7 +501,8 @@
|
|||||||
"redoChange": "Redo",
|
"redoChange": "Redo",
|
||||||
"searchBox": "Open search box",
|
"searchBox": "Open search box",
|
||||||
"managePalette": "Manage palette",
|
"managePalette": "Manage palette",
|
||||||
"actionList":"Action list"
|
"actionList": "Action list",
|
||||||
|
"splitWireWithLinks": "Split selection with Link nodes"
|
||||||
},
|
},
|
||||||
"library": {
|
"library": {
|
||||||
"library": "Library",
|
"library": "Library",
|
||||||
@ -667,16 +672,7 @@
|
|||||||
"empty": "empty",
|
"empty": "empty",
|
||||||
"globalConfig": "Global Configuration Nodes",
|
"globalConfig": "Global Configuration Nodes",
|
||||||
"triggerAction": "Trigger action",
|
"triggerAction": "Trigger action",
|
||||||
"find": "Find in workspace",
|
"find": "Find in workspace"
|
||||||
"search": {
|
|
||||||
"configNodes": "Configuration nodes",
|
|
||||||
"unusedConfigNodes": "Unused configuration nodes",
|
|
||||||
"invalidNodes": "Invalid nodes",
|
|
||||||
"uknownNodes": "Unknown nodes",
|
|
||||||
"unusedSubflows": "Unused subflows",
|
|
||||||
"hiddenFlows": "Hidden flows",
|
|
||||||
"modifiedNodes": "Modified nodes and flows"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"name": "Help",
|
"name": "Help",
|
||||||
@ -900,7 +896,16 @@
|
|||||||
"history": "Search history",
|
"history": "Search history",
|
||||||
"clear": "clear all",
|
"clear": "clear all",
|
||||||
"empty": "No matches found",
|
"empty": "No matches found",
|
||||||
"addNode": "add a node..."
|
"addNode": "add a node...",
|
||||||
|
"options": {
|
||||||
|
"configNodes": "Configuration nodes",
|
||||||
|
"unusedConfigNodes": "Unused configuration nodes",
|
||||||
|
"invalidNodes": "Invalid nodes",
|
||||||
|
"uknownNodes": "Unknown nodes",
|
||||||
|
"unusedSubflows": "Unused subflows",
|
||||||
|
"hiddenFlows": "Hidden flows",
|
||||||
|
"modifiedNodes": "Modified nodes and flows"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"expressionEditor": {
|
"expressionEditor": {
|
||||||
"functions": "Functions",
|
"functions": "Functions",
|
||||||
|
@ -149,7 +149,11 @@
|
|||||||
"toggle-navigator": "ナビゲータの表示/非表示を切替",
|
"toggle-navigator": "ナビゲータの表示/非表示を切替",
|
||||||
"zoom-out": "縮小",
|
"zoom-out": "縮小",
|
||||||
"zoom-reset": "拡大/縮小を初期化",
|
"zoom-reset": "拡大/縮小を初期化",
|
||||||
"zoom-in": "拡大"
|
"zoom-in": "拡大",
|
||||||
|
"search-flows": "フローを検索",
|
||||||
|
"search-prev": "前へ",
|
||||||
|
"search-next": "次へ",
|
||||||
|
"search-counter": "\"__term__\" __count__ 件中の __result__ 件目"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"loggedInAs": "__name__ としてログインしました",
|
"loggedInAs": "__name__ としてログインしました",
|
||||||
@ -497,7 +501,8 @@
|
|||||||
"redoChange": "変更操作をやり直し",
|
"redoChange": "変更操作をやり直し",
|
||||||
"searchBox": "ノードを検索",
|
"searchBox": "ノードを検索",
|
||||||
"managePalette": "パレットの管理",
|
"managePalette": "パレットの管理",
|
||||||
"actionList": "動作一覧"
|
"actionList": "動作一覧",
|
||||||
|
"splitWireWithLinks": "選択したワイヤーをlinkノードで分離"
|
||||||
},
|
},
|
||||||
"library": {
|
"library": {
|
||||||
"library": "ライブラリ",
|
"library": "ライブラリ",
|
||||||
@ -667,15 +672,7 @@
|
|||||||
"empty": "空",
|
"empty": "空",
|
||||||
"globalConfig": "グローバル設定ノード",
|
"globalConfig": "グローバル設定ノード",
|
||||||
"triggerAction": "アクションを実行",
|
"triggerAction": "アクションを実行",
|
||||||
"find": "ワークスペース内を検索",
|
"find": "ワークスペース内を検索"
|
||||||
"search": {
|
|
||||||
"configNodes": "設定ノード",
|
|
||||||
"unusedConfigNodes": "未使用の設定ノード",
|
|
||||||
"invalidNodes": "不正なノード",
|
|
||||||
"uknownNodes": "未知のノード",
|
|
||||||
"unusedSubflows": "未使用のサブフロー",
|
|
||||||
"hiddenFlows": "非表示のフロー"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"name": "ヘルプ",
|
"name": "ヘルプ",
|
||||||
@ -899,7 +896,16 @@
|
|||||||
"history": "検索履歴",
|
"history": "検索履歴",
|
||||||
"clear": "全て削除",
|
"clear": "全て削除",
|
||||||
"empty": "一致したものが見つかりませんでした",
|
"empty": "一致したものが見つかりませんでした",
|
||||||
"addNode": "ノードを追加..."
|
"addNode": "ノードを追加...",
|
||||||
|
"options": {
|
||||||
|
"configNodes": "設定ノード",
|
||||||
|
"unusedConfigNodes": "未使用の設定ノード",
|
||||||
|
"invalidNodes": "不正なノード",
|
||||||
|
"uknownNodes": "未知のノード",
|
||||||
|
"unusedSubflows": "未使用のサブフロー",
|
||||||
|
"hiddenFlows": "非表示のフロー",
|
||||||
|
"modifiedNodes": "修正したノードやフロー"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"expressionEditor": {
|
"expressionEditor": {
|
||||||
"functions": "関数",
|
"functions": "関数",
|
||||||
@ -1174,6 +1180,7 @@
|
|||||||
"hide-all-flows": "全てのフローを非表示",
|
"hide-all-flows": "全てのフローを非表示",
|
||||||
"show-all-flows": "全てのフローを表示",
|
"show-all-flows": "全てのフローを表示",
|
||||||
"show-last-hidden-flow": "最後に非表示にしたフローを表示",
|
"show-last-hidden-flow": "最後に非表示にしたフローを表示",
|
||||||
|
"list-modified-nodes": "修正したフローを表示",
|
||||||
"list-hidden-flows": "非表示フローを表示",
|
"list-hidden-flows": "非表示フローを表示",
|
||||||
"list-flows": "フロー一覧",
|
"list-flows": "フロー一覧",
|
||||||
"list-subflows": "サブフロー一覧",
|
"list-subflows": "サブフロー一覧",
|
||||||
@ -1240,6 +1247,8 @@
|
|||||||
"distribute-selection-vertically": "選択を上下に整列",
|
"distribute-selection-vertically": "選択を上下に整列",
|
||||||
"wire-series-of-nodes": "ノードを一続きに接続",
|
"wire-series-of-nodes": "ノードを一続きに接続",
|
||||||
"wire-node-to-multiple": "ノードを複数に接続",
|
"wire-node-to-multiple": "ノードを複数に接続",
|
||||||
|
"split-wire-with-link-nodes": "ワイヤーをlinkノードで分割",
|
||||||
|
"generate-node-names": "ノード名を生成",
|
||||||
"show-user-settings": "ユーザ設定を表示",
|
"show-user-settings": "ユーザ設定を表示",
|
||||||
"show-help": "ヘルプを表示",
|
"show-help": "ヘルプを表示",
|
||||||
"toggle-palette": "パレットの表示切替",
|
"toggle-palette": "パレットの表示切替",
|
||||||
@ -1266,6 +1275,8 @@
|
|||||||
"show-library-import-dialog": "ライブラリ読み込みダイアログを表示",
|
"show-library-import-dialog": "ライブラリ読み込みダイアログを表示",
|
||||||
"show-examples-import-dialog": "サンプル読み込みダイアログを表示",
|
"show-examples-import-dialog": "サンプル読み込みダイアログを表示",
|
||||||
"search": "検索",
|
"search": "検索",
|
||||||
|
"search-previous": "前を検索",
|
||||||
|
"search-next": "次を検索",
|
||||||
"show-action-list": "アクション一覧を表示",
|
"show-action-list": "アクション一覧を表示",
|
||||||
"confirm-edit-tray": "編集を完了",
|
"confirm-edit-tray": "編集を完了",
|
||||||
"cancel-edit-tray": "編集をキャンセル",
|
"cancel-edit-tray": "編集をキャンセル",
|
||||||
@ -1276,8 +1287,8 @@
|
|||||||
"set-deploy-type-to-modified-flows": "デプロイを「変更したフロー」に設定",
|
"set-deploy-type-to-modified-flows": "デプロイを「変更したフロー」に設定",
|
||||||
"set-deploy-type-to-modified-nodes": "デプロイを「変更したノード」に設定",
|
"set-deploy-type-to-modified-nodes": "デプロイを「変更したノード」に設定",
|
||||||
"show-debug-tab": "デバッグタブを表示",
|
"show-debug-tab": "デバッグタブを表示",
|
||||||
"clear-debug-messages": "デバッグメッセージをクリア",
|
"clear-debug-messages": "デバッグメッセージを削除",
|
||||||
"clear-filtered-debug-messages": "フィルタしたデバッグメッセージをクリア",
|
"clear-filtered-debug-messages": "フィルタしたデバッグメッセージを削除",
|
||||||
"activate-selected-debug-nodes": "選択したデバッグノードを有効化",
|
"activate-selected-debug-nodes": "選択したデバッグノードを有効化",
|
||||||
"activate-all-debug-nodes": "全てのデバッグノードを有効化",
|
"activate-all-debug-nodes": "全てのデバッグノードを有効化",
|
||||||
"activate-all-flow-debug-nodes": "フロー内の全デバッグノードを有効化",
|
"activate-all-flow-debug-nodes": "フロー内の全デバッグノードを有効化",
|
||||||
|
@ -650,14 +650,7 @@
|
|||||||
"empty": "пусто",
|
"empty": "пусто",
|
||||||
"globalConfig": "Глобальные конфиг узлы",
|
"globalConfig": "Глобальные конфиг узлы",
|
||||||
"triggerAction": "Вызвать действие",
|
"triggerAction": "Вызвать действие",
|
||||||
"find": "Найти в рабочей области",
|
"find": "Найти в рабочей области"
|
||||||
"search": {
|
|
||||||
"configNodes": "Узлы конфигурации",
|
|
||||||
"unusedConfigNodes": "Неиспользуемые узлы конфигурации",
|
|
||||||
"invalidNodes": "Недействительные узлы",
|
|
||||||
"uknownNodes": "Неизвестные узлы",
|
|
||||||
"unusedSubflows": "Неиспользуемые подпотоки"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"name": "Справка",
|
"name": "Справка",
|
||||||
@ -888,7 +881,14 @@
|
|||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"empty": "Ничего не найдено",
|
"empty": "Ничего не найдено",
|
||||||
"addNode": "добавить узел..."
|
"addNode": "добавить узел...",
|
||||||
|
"options": {
|
||||||
|
"configNodes": "Узлы конфигурации",
|
||||||
|
"unusedConfigNodes": "Неиспользуемые узлы конфигурации",
|
||||||
|
"invalidNodes": "Недействительные узлы",
|
||||||
|
"uknownNodes": "Неизвестные узлы",
|
||||||
|
"unusedSubflows": "Неиспользуемые подпотоки"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"expressionEditor": {
|
"expressionEditor": {
|
||||||
"functions": "Функции",
|
"functions": "Функции",
|
||||||
|
@ -614,14 +614,7 @@
|
|||||||
"empty": "空的",
|
"empty": "空的",
|
||||||
"globalConfig": "全局配置节点",
|
"globalConfig": "全局配置节点",
|
||||||
"triggerAction": "触发动作",
|
"triggerAction": "触发动作",
|
||||||
"find": "在工作区中查找",
|
"find": "在工作区中查找"
|
||||||
"search": {
|
|
||||||
"configNodes": "配置节点",
|
|
||||||
"unusedConfigNodes": "未使用的配置节点",
|
|
||||||
"invalidNodes": "无效的节点",
|
|
||||||
"uknownNodes": "未知的节点",
|
|
||||||
"unusedSubflows": "未使用的子流程"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"name": "帮助",
|
"name": "帮助",
|
||||||
@ -842,7 +835,14 @@
|
|||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"empty": "找不到匹配",
|
"empty": "找不到匹配",
|
||||||
"addNode": "添加一个节点..."
|
"addNode": "添加一个节点...",
|
||||||
|
"options": {
|
||||||
|
"configNodes": "配置节点",
|
||||||
|
"unusedConfigNodes": "未使用的配置节点",
|
||||||
|
"invalidNodes": "无效的节点",
|
||||||
|
"uknownNodes": "未知的节点",
|
||||||
|
"unusedSubflows": "未使用的子流程"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"expressionEditor": {
|
"expressionEditor": {
|
||||||
"functions": "功能",
|
"functions": "功能",
|
||||||
|
@ -614,14 +614,7 @@
|
|||||||
"empty": "空的",
|
"empty": "空的",
|
||||||
"globalConfig": "全局配置節點",
|
"globalConfig": "全局配置節點",
|
||||||
"triggerAction": "觸發動作",
|
"triggerAction": "觸發動作",
|
||||||
"find": "在工作區中查找",
|
"find": "在工作區中查找"
|
||||||
"search": {
|
|
||||||
"configNodes": "配置節點",
|
|
||||||
"unusedConfigNodes": "未使用的配置節點",
|
|
||||||
"invalidNodes": "無效的節點",
|
|
||||||
"uknownNodes": "未知的節點",
|
|
||||||
"unusedSubflows": "未使用的子流程"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"name": "幫助",
|
"name": "幫助",
|
||||||
@ -842,7 +835,14 @@
|
|||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"empty": "找不到匹配",
|
"empty": "找不到匹配",
|
||||||
"addNode": "添加一個節點..."
|
"addNode": "添加一個節點...",
|
||||||
|
"options": {
|
||||||
|
"configNodes": "配置節點",
|
||||||
|
"unusedConfigNodes": "未使用的配置節點",
|
||||||
|
"invalidNodes": "無效的節點",
|
||||||
|
"uknownNodes": "未知的節點",
|
||||||
|
"unusedSubflows": "未使用的子流程"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"expressionEditor": {
|
"expressionEditor": {
|
||||||
"functions": "功能",
|
"functions": "功能",
|
||||||
|
@ -13,6 +13,11 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An API for undo / redo history buffer
|
||||||
|
* @namespace RED.history
|
||||||
|
*/
|
||||||
RED.history = (function() {
|
RED.history = (function() {
|
||||||
var undoHistory = [];
|
var undoHistory = [];
|
||||||
var redoHistory = [];
|
var redoHistory = [];
|
||||||
@ -101,6 +106,23 @@ RED.history = (function() {
|
|||||||
RED.nodes.removeLink(ev.links[i]);
|
RED.nodes.removeLink(ev.links[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ev.junctions) {
|
||||||
|
inverseEv.junctions = [];
|
||||||
|
for (i=0;i<ev.junctions.length;i++) {
|
||||||
|
inverseEv.junctions.push(ev.junctions[i]);
|
||||||
|
RED.nodes.removeJunction(ev.junctions[i]);
|
||||||
|
if (ev.junctions[i].g) {
|
||||||
|
var group = RED.nodes.group(ev.junctions[i].g);
|
||||||
|
var index = group.nodes.indexOf(ev.junctions[i]);
|
||||||
|
if (index !== -1) {
|
||||||
|
group.nodes.splice(index,1);
|
||||||
|
RED.group.markDirty(group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ev.groups) {
|
if (ev.groups) {
|
||||||
inverseEv.groups = [];
|
inverseEv.groups = [];
|
||||||
for (i = ev.groups.length - 1;i>=0;i--) {
|
for (i = ev.groups.length - 1;i>=0;i--) {
|
||||||
@ -267,6 +289,21 @@ RED.history = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ev.junctions) {
|
||||||
|
inverseEv.junctions = [];
|
||||||
|
for (i=0;i<ev.junctions.length;i++) {
|
||||||
|
inverseEv.junctions.push(ev.junctions[i]);
|
||||||
|
RED.nodes.addJunction(ev.junctions[i]);
|
||||||
|
if (ev.junctions[i].g) {
|
||||||
|
group = RED.nodes.group(ev.junctions[i].g);
|
||||||
|
if (group.nodes.indexOf(ev.junctions[i]) === -1) {
|
||||||
|
group.nodes.push(ev.junctions[i]);
|
||||||
|
}
|
||||||
|
RED.group.markDirty(group)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ev.links) {
|
if (ev.links) {
|
||||||
inverseEv.links = [];
|
inverseEv.links = [];
|
||||||
for (i=0;i<ev.links.length;i++) {
|
for (i=0;i<ev.links.length;i++) {
|
||||||
|
@ -90,6 +90,10 @@
|
|||||||
"alt-a m": "core:align-selection-to-middle",
|
"alt-a m": "core:align-selection-to-middle",
|
||||||
"alt-a c": "core:align-selection-to-center",
|
"alt-a c": "core:align-selection-to-center",
|
||||||
"alt-a h": "core:distribute-selection-horizontally",
|
"alt-a h": "core:distribute-selection-horizontally",
|
||||||
"alt-a v": "core:distribute-selection-vertically"
|
"alt-a v": "core:distribute-selection-vertically",
|
||||||
|
"shift-f": "core:search-previous",
|
||||||
|
"f": "core:search-next",
|
||||||
|
"alt-l l": "core:split-wire-with-link-nodes"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,11 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An Interface to nodes and utility functions for creating/adding/deleting nodes and links
|
||||||
|
* @namespace RED.nodes
|
||||||
|
*/
|
||||||
RED.nodes = (function() {
|
RED.nodes = (function() {
|
||||||
|
|
||||||
var PORT_TYPE_INPUT = 1;
|
var PORT_TYPE_INPUT = 1;
|
||||||
@ -33,6 +38,9 @@ RED.nodes = (function() {
|
|||||||
var groups = {};
|
var groups = {};
|
||||||
var groupsByZ = {};
|
var groupsByZ = {};
|
||||||
|
|
||||||
|
var junctions = {};
|
||||||
|
var junctionsByZ = {};
|
||||||
|
|
||||||
var initialLoad;
|
var initialLoad;
|
||||||
|
|
||||||
var dirty = false;
|
var dirty = false;
|
||||||
@ -814,6 +822,7 @@ RED.nodes = (function() {
|
|||||||
var removedNodes = [];
|
var removedNodes = [];
|
||||||
var removedLinks = [];
|
var removedLinks = [];
|
||||||
var removedGroups = [];
|
var removedGroups = [];
|
||||||
|
var removedJunctions = [];
|
||||||
if (ws) {
|
if (ws) {
|
||||||
delete workspaces[id];
|
delete workspaces[id];
|
||||||
delete linkTabMap[id];
|
delete linkTabMap[id];
|
||||||
@ -822,7 +831,14 @@ RED.nodes = (function() {
|
|||||||
var node;
|
var node;
|
||||||
|
|
||||||
if (allNodes.hasTab(id)) {
|
if (allNodes.hasTab(id)) {
|
||||||
removedNodes = allNodes.getNodes(id).slice()
|
removedNodes = allNodes.getNodes(id).filter(n => {
|
||||||
|
if (n.type === 'junction') {
|
||||||
|
removedJunctions.push(n)
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
for (i in configNodes) {
|
for (i in configNodes) {
|
||||||
if (configNodes.hasOwnProperty(i)) {
|
if (configNodes.hasOwnProperty(i)) {
|
||||||
@ -837,6 +853,10 @@ RED.nodes = (function() {
|
|||||||
var result = removeNode(removedNodes[i].id);
|
var result = removeNode(removedNodes[i].id);
|
||||||
removedLinks = removedLinks.concat(result.links);
|
removedLinks = removedLinks.concat(result.links);
|
||||||
}
|
}
|
||||||
|
for (i=0;i<removedJunctions.length;i++) {
|
||||||
|
var result = removeJunction(removedJunctions[i])
|
||||||
|
removedLinks = removedLinks.concat(result.links)
|
||||||
|
}
|
||||||
|
|
||||||
// Must get 'removedGroups' in the right order.
|
// Must get 'removedGroups' in the right order.
|
||||||
// - start with the top-most groups
|
// - start with the top-most groups
|
||||||
@ -856,7 +876,7 @@ RED.nodes = (function() {
|
|||||||
allNodes.removeTab(id);
|
allNodes.removeTab(id);
|
||||||
RED.events.emit('flows:remove',ws);
|
RED.events.emit('flows:remove',ws);
|
||||||
}
|
}
|
||||||
return {nodes:removedNodes,links:removedLinks, groups: removedGroups};
|
return {nodes:removedNodes,links:removedLinks, groups: removedGroups, junctions: removedJunctions};
|
||||||
}
|
}
|
||||||
|
|
||||||
function addSubflow(sf, createNewIds) {
|
function addSubflow(sf, createNewIds) {
|
||||||
@ -1113,7 +1133,7 @@ RED.nodes = (function() {
|
|||||||
delete node.env;
|
delete node.env;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (n._def.category != "config") {
|
if (n._def.category != "config" || n.type === 'junction') {
|
||||||
node.x = n.x;
|
node.x = n.x;
|
||||||
node.y = n.y;
|
node.y = n.y;
|
||||||
if (exportDimensions) {
|
if (exportDimensions) {
|
||||||
@ -1376,6 +1396,11 @@ RED.nodes = (function() {
|
|||||||
nns.push(convertNode(groups[i], opts));
|
nns.push(convertNode(groups[i], opts));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (i in junctions) {
|
||||||
|
if (junctions.hasOwnProperty(i)) {
|
||||||
|
nns.push(convertNode(junctions[i], opts));
|
||||||
|
}
|
||||||
|
}
|
||||||
for (i in configNodes) {
|
for (i in configNodes) {
|
||||||
if (configNodes.hasOwnProperty(i)) {
|
if (configNodes.hasOwnProperty(i)) {
|
||||||
nns.push(convertNode(configNodes[i], opts));
|
nns.push(convertNode(configNodes[i], opts));
|
||||||
@ -1457,6 +1482,7 @@ RED.nodes = (function() {
|
|||||||
tabs: {},
|
tabs: {},
|
||||||
subflows: {},
|
subflows: {},
|
||||||
groups: {},
|
groups: {},
|
||||||
|
junctions: {},
|
||||||
configs: {},
|
configs: {},
|
||||||
nodes: {},
|
nodes: {},
|
||||||
all: [],
|
all: [],
|
||||||
@ -1472,6 +1498,8 @@ RED.nodes = (function() {
|
|||||||
imported.subflows[n.id] = n;
|
imported.subflows[n.id] = n;
|
||||||
} else if (n.type === "group") {
|
} else if (n.type === "group") {
|
||||||
imported.groups[n.id] = n;
|
imported.groups[n.id] = n;
|
||||||
|
} else if (n.type === "junction") {
|
||||||
|
imported.junctions[n.id] = n;
|
||||||
} else if (n.hasOwnProperty("x") && n.hasOwnProperty("y")) {
|
} else if (n.hasOwnProperty("x") && n.hasOwnProperty("y")) {
|
||||||
imported.nodes[n.id] = n;
|
imported.nodes[n.id] = n;
|
||||||
} else {
|
} else {
|
||||||
@ -1480,7 +1508,7 @@ RED.nodes = (function() {
|
|||||||
var nodeZ = n.z || "__global__";
|
var nodeZ = n.z || "__global__";
|
||||||
imported.zMap[nodeZ] = imported.zMap[nodeZ] || [];
|
imported.zMap[nodeZ] = imported.zMap[nodeZ] || [];
|
||||||
imported.zMap[nodeZ].push(n)
|
imported.zMap[nodeZ].push(n)
|
||||||
if (allNodes.hasNode(n.id) || configNodes[n.id] || workspaces[n.id] || subflows[n.id] || groups[n.id]) {
|
if (allNodes.hasNode(n.id) || configNodes[n.id] || workspaces[n.id] || subflows[n.id] || groups[n.id] || junctions[n.id]) {
|
||||||
imported.conflicted[n.id] = n;
|
imported.conflicted[n.id] = n;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -1646,7 +1674,7 @@ RED.nodes = (function() {
|
|||||||
if (!options.generateIds) {
|
if (!options.generateIds) {
|
||||||
if (!options.importMap[id]) {
|
if (!options.importMap[id]) {
|
||||||
// No conflict resolution for this node
|
// No conflict resolution for this node
|
||||||
var existing = allNodes.getNode(id) || configNodes[id] || workspaces[id] || subflows[id] || groups[id];
|
var existing = allNodes.getNode(id) || configNodes[id] || workspaces[id] || subflows[id] || groups[id] || junctions[id];
|
||||||
if (existing) {
|
if (existing) {
|
||||||
existingNodes.push({existing:existing, imported:n});
|
existingNodes.push({existing:existing, imported:n});
|
||||||
}
|
}
|
||||||
@ -1700,6 +1728,7 @@ RED.nodes = (function() {
|
|||||||
n.type != "tab" &&
|
n.type != "tab" &&
|
||||||
n.type != "subflow" &&
|
n.type != "subflow" &&
|
||||||
n.type != "group" &&
|
n.type != "group" &&
|
||||||
|
n.type != 'junction' &&
|
||||||
!registry.getNodeType(n.type) &&
|
!registry.getNodeType(n.type) &&
|
||||||
n.type.substring(0,8) != "subflow:" &&
|
n.type.substring(0,8) != "subflow:" &&
|
||||||
unknownTypes.indexOf(n.type)==-1) {
|
unknownTypes.indexOf(n.type)==-1) {
|
||||||
@ -1772,6 +1801,7 @@ RED.nodes = (function() {
|
|||||||
var new_nodes = [];
|
var new_nodes = [];
|
||||||
var new_links = [];
|
var new_links = [];
|
||||||
var new_groups = [];
|
var new_groups = [];
|
||||||
|
var new_junctions = [];
|
||||||
var new_group_set = new Set();
|
var new_group_set = new Set();
|
||||||
var nid;
|
var nid;
|
||||||
var def;
|
var def;
|
||||||
@ -1963,12 +1993,15 @@ RED.nodes = (function() {
|
|||||||
changed:false,
|
changed:false,
|
||||||
_config:{}
|
_config:{}
|
||||||
}
|
}
|
||||||
if (n.type !== "group") {
|
if (n.type !== "group" && n.type !== 'junction') {
|
||||||
node.wires = n.wires||[];
|
node.wires = n.wires||[];
|
||||||
node.inputLabels = n.inputLabels;
|
node.inputLabels = n.inputLabels;
|
||||||
node.outputLabels = n.outputLabels;
|
node.outputLabels = n.outputLabels;
|
||||||
node.icon = n.icon;
|
node.icon = n.icon;
|
||||||
}
|
}
|
||||||
|
if (n.type === 'junction') {
|
||||||
|
node.wires = n.wires||[];
|
||||||
|
}
|
||||||
if (n.hasOwnProperty('l')) {
|
if (n.hasOwnProperty('l')) {
|
||||||
node.l = n.l;
|
node.l = n.l;
|
||||||
}
|
}
|
||||||
@ -2037,6 +2070,15 @@ RED.nodes = (function() {
|
|||||||
node.outputs = subflow.out.length;
|
node.outputs = subflow.out.length;
|
||||||
node.inputs = subflow.in.length;
|
node.inputs = subflow.in.length;
|
||||||
node.env = n.env;
|
node.env = n.env;
|
||||||
|
} else if (n.type === 'junction') {
|
||||||
|
node._def = {defaults:{}}
|
||||||
|
node._config.x = node.x
|
||||||
|
node._config.y = node.y
|
||||||
|
node.inputs = 1
|
||||||
|
node.outputs = 1
|
||||||
|
node.w = 0;
|
||||||
|
node.h = 0;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (!node._def) {
|
if (!node._def) {
|
||||||
if (node.x && node.y) {
|
if (node.x && node.y) {
|
||||||
@ -2120,7 +2162,9 @@ RED.nodes = (function() {
|
|||||||
node_map[n.id] = node;
|
node_map[n.id] = node;
|
||||||
// If an 'unknown' config node, it will not have been caught by the
|
// If an 'unknown' config node, it will not have been caught by the
|
||||||
// proper config node handling, so needs adding to new_nodes here
|
// proper config node handling, so needs adding to new_nodes here
|
||||||
if (node.type === "unknown" || node._def.category !== "config") {
|
if (node.type === 'junction') {
|
||||||
|
new_junctions.push(node)
|
||||||
|
} else if (node.type === "unknown" || node._def.category !== "config") {
|
||||||
new_nodes.push(node);
|
new_nodes.push(node);
|
||||||
} else if (node.type === "group") {
|
} else if (node.type === "group") {
|
||||||
new_groups.push(node);
|
new_groups.push(node);
|
||||||
@ -2131,11 +2175,15 @@ RED.nodes = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remap all wires and config node references
|
// Remap all wires and config node references
|
||||||
for (i=0;i<new_nodes.length;i++) {
|
for (i=0;i<new_nodes.length+new_junctions.length;i++) {
|
||||||
n = new_nodes[i];
|
if (i<new_nodes.length) {
|
||||||
|
n = new_nodes[i];
|
||||||
|
} else {
|
||||||
|
n = new_junctions[i - new_nodes.length]
|
||||||
|
}
|
||||||
if (n.wires) {
|
if (n.wires) {
|
||||||
for (var w1=0;w1<n.wires.length;w1++) {
|
for (var w1=0;w1<n.wires.length;w1++) {
|
||||||
var wires = (n.wires[w1] instanceof Array)?n.wires[w1]:[n.wires[w1]];
|
var wires = (Array.isArray(n.wires[w1]))?n.wires[w1]:[n.wires[w1]];
|
||||||
for (var w2=0;w2<wires.length;w2++) {
|
for (var w2=0;w2<wires.length;w2++) {
|
||||||
if (node_map.hasOwnProperty(wires[w2])) {
|
if (node_map.hasOwnProperty(wires[w2])) {
|
||||||
if (n.z === node_map[wires[w2]].z) {
|
if (n.z === node_map[wires[w2]].z) {
|
||||||
@ -2271,6 +2319,12 @@ RED.nodes = (function() {
|
|||||||
addGroup(n);
|
addGroup(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i=0;i<new_junctions.length;i++) {
|
||||||
|
var junction = new_junctions[i];
|
||||||
|
addJunction(junction);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Now the nodes have been fully updated, add them.
|
// Now the nodes have been fully updated, add them.
|
||||||
for (i=0;i<new_nodes.length;i++) {
|
for (i=0;i<new_nodes.length;i++) {
|
||||||
var node = new_nodes[i];
|
var node = new_nodes[i];
|
||||||
@ -2301,6 +2355,7 @@ RED.nodes = (function() {
|
|||||||
nodes:new_nodes,
|
nodes:new_nodes,
|
||||||
links:new_links,
|
links:new_links,
|
||||||
groups:new_groups,
|
groups:new_groups,
|
||||||
|
junctions: new_junctions,
|
||||||
workspaces:new_workspaces,
|
workspaces:new_workspaces,
|
||||||
subflows:new_subflows,
|
subflows:new_subflows,
|
||||||
missingWorkspace: missingWorkspace,
|
missingWorkspace: missingWorkspace,
|
||||||
@ -2456,6 +2511,30 @@ RED.nodes = (function() {
|
|||||||
RED.events.emit("groups:remove",group);
|
RED.events.emit("groups:remove",group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addJunction(junction) {
|
||||||
|
junctionsByZ[junction.z] = junctionsByZ[junction.z] || []
|
||||||
|
junctionsByZ[junction.z].push(junction)
|
||||||
|
junctions[junction.id] = junction;
|
||||||
|
if (!nodeLinks[junction.id]) {
|
||||||
|
nodeLinks[junction.id] = {in:[],out:[]};
|
||||||
|
}
|
||||||
|
RED.events.emit("junctions:add", junction)
|
||||||
|
}
|
||||||
|
function removeJunction(junction) {
|
||||||
|
var i = junctionsByZ[junction.z].indexOf(junction)
|
||||||
|
junctionsByZ[junction.z].splice(i, 1)
|
||||||
|
if (junctionsByZ[junction.z].length === 0) {
|
||||||
|
delete junctionsByZ[junction.z]
|
||||||
|
}
|
||||||
|
delete junctions[junction.id]
|
||||||
|
delete nodeLinks[junction.id];
|
||||||
|
RED.events.emit("junctions:remove", junction)
|
||||||
|
|
||||||
|
var removedLinks = links.filter(function(l) { return (l.source === junction) || (l.target === junction); });
|
||||||
|
removedLinks.forEach(removeLink);
|
||||||
|
return { links: removedLinks }
|
||||||
|
}
|
||||||
|
|
||||||
function getNodeHelp(type) {
|
function getNodeHelp(type) {
|
||||||
var helpContent = "";
|
var helpContent = "";
|
||||||
var helpElement = $("script[data-help-name='"+type+"']");
|
var helpElement = $("script[data-help-name='"+type+"']");
|
||||||
@ -2684,7 +2763,6 @@ RED.nodes = (function() {
|
|||||||
getType: registry.getNodeType,
|
getType: registry.getNodeType,
|
||||||
getNodeHelp: getNodeHelp,
|
getNodeHelp: getNodeHelp,
|
||||||
convertNode: convertNode,
|
convertNode: convertNode,
|
||||||
|
|
||||||
add: addNode,
|
add: addNode,
|
||||||
remove: removeNode,
|
remove: removeNode,
|
||||||
clear: clear,
|
clear: clear,
|
||||||
@ -2730,6 +2808,11 @@ RED.nodes = (function() {
|
|||||||
group: function(id) { return groups[id] },
|
group: function(id) { return groups[id] },
|
||||||
groups: function(z) { return groupsByZ[z]?groupsByZ[z].slice():[] },
|
groups: function(z) { return groupsByZ[z]?groupsByZ[z].slice():[] },
|
||||||
|
|
||||||
|
addJunction: addJunction,
|
||||||
|
removeJunction: removeJunction,
|
||||||
|
junction: function(id) { return junctions[id] },
|
||||||
|
junctions: function(z) { return junctionsByZ[z]?junctionsByZ[z].slice():[] },
|
||||||
|
|
||||||
eachNode: function(cb) {
|
eachNode: function(cb) {
|
||||||
allNodes.eachNode(cb);
|
allNodes.eachNode(cb);
|
||||||
},
|
},
|
||||||
|
@ -252,8 +252,21 @@ var RED = (function() {
|
|||||||
if (/^#flow\/.+$/.test(currentHash)) {
|
if (/^#flow\/.+$/.test(currentHash)) {
|
||||||
RED.workspaces.show(currentHash.substring(6),true);
|
RED.workspaces.show(currentHash.substring(6),true);
|
||||||
}
|
}
|
||||||
if (RED.workspaces.active() === 0 && RED.workspaces.count() > 0) {
|
if (RED.workspaces.count() > 0) {
|
||||||
RED.workspaces.show(RED.nodes.getWorkspaceOrder()[0])
|
const hiddenTabs = JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}");
|
||||||
|
const workspaces = RED.nodes.getWorkspaceOrder();
|
||||||
|
if (RED.workspaces.active() === 0) {
|
||||||
|
for (let index = 0; index < workspaces.length; index++) {
|
||||||
|
const ws = workspaces[index];
|
||||||
|
if (!hiddenTabs[ws]) {
|
||||||
|
RED.workspaces.show(ws);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (RED.workspaces.active() === 0) {
|
||||||
|
RED.workspaces.show(workspaces[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
console.warn(err);
|
console.warn(err);
|
||||||
@ -602,7 +615,10 @@ var RED = (function() {
|
|||||||
null,
|
null,
|
||||||
{id: "menu-item-edit-select-all", label:RED._("keyboard.selectAll"), onselect: "core:select-all-nodes"},
|
{id: "menu-item-edit-select-all", label:RED._("keyboard.selectAll"), onselect: "core:select-all-nodes"},
|
||||||
{id: "menu-item-edit-select-connected", label:RED._("keyboard.selectAllConnected"), onselect: "core:select-connected-nodes"},
|
{id: "menu-item-edit-select-connected", label:RED._("keyboard.selectAllConnected"), onselect: "core:select-connected-nodes"},
|
||||||
{id: "menu-item-edit-select-none", label:RED._("keyboard.selectNone"), onselect: "core:select-none"}
|
{id: "menu-item-edit-select-none", label:RED._("keyboard.selectNone"), onselect: "core:select-none"},
|
||||||
|
null,
|
||||||
|
{id: "menu-item-edit-split-wire-with-links", label:RED._("keyboard.splitWireWithLinks"), onselect: "core:split-wire-with-link-nodes"},
|
||||||
|
|
||||||
]});
|
]});
|
||||||
|
|
||||||
menuOptions.push({id:"menu-item-view-menu",label:RED._("menu.label.view.view"),options:[
|
menuOptions.push({id:"menu-item-view-menu",label:RED._("menu.label.view.view"),options:[
|
||||||
|
@ -987,6 +987,7 @@ RED.clipboard = (function() {
|
|||||||
try {
|
try {
|
||||||
RED.view.importNodes(newNodes, importOptions);
|
RED.view.importNodes(newNodes, importOptions);
|
||||||
} catch(error) {
|
} catch(error) {
|
||||||
|
console.log(error.importConfig)
|
||||||
// Thrown for import_conflict
|
// Thrown for import_conflict
|
||||||
confirmImport(error.importConfig, newNodes, importOptions);
|
confirmImport(error.importConfig, newNodes, importOptions);
|
||||||
}
|
}
|
||||||
|
@ -9,12 +9,14 @@
|
|||||||
*
|
*
|
||||||
* options:
|
* options:
|
||||||
*
|
*
|
||||||
* search : function(value, [done])
|
* search: function(value, [done])
|
||||||
* A function that is passed the current contents of the input whenever
|
* A function that is passed the current contents of the input whenever
|
||||||
* it changes.
|
* it changes.
|
||||||
* The function must either return auto-complete options, or pass them
|
* The function must either return auto-complete options, or pass them
|
||||||
* to the optional 'done' parameter.
|
* to the optional 'done' parameter.
|
||||||
* If the function signature includes 'done', it must be used
|
* If the function signature includes 'done', it must be used
|
||||||
|
* minLength: number
|
||||||
|
* If `minLength` is 0, pressing down arrow will show the list
|
||||||
*
|
*
|
||||||
* The auto-complete options should be an array of objects in the form:
|
* The auto-complete options should be an array of objects in the form:
|
||||||
* {
|
* {
|
||||||
@ -26,10 +28,11 @@
|
|||||||
|
|
||||||
$.widget( "nodered.autoComplete", {
|
$.widget( "nodered.autoComplete", {
|
||||||
_create: function() {
|
_create: function() {
|
||||||
var that = this;
|
const that = this;
|
||||||
this.completionMenuShown = false;
|
this.completionMenuShown = false;
|
||||||
this.options.search = this.options.search || function() { return [] }
|
this.options.minLength = parseInteger(this.options.minLength, 1, 0);
|
||||||
this.element.addClass("red-ui-autoComplete")
|
this.options.search = this.options.search || function() { return [] };
|
||||||
|
this.element.addClass("red-ui-autoComplete");
|
||||||
this.element.on("keydown.red-ui-autoComplete", function(evt) {
|
this.element.on("keydown.red-ui-autoComplete", function(evt) {
|
||||||
if ((evt.keyCode === 13 || evt.keyCode === 9) && that.completionMenuShown) {
|
if ((evt.keyCode === 13 || evt.keyCode === 9) && that.completionMenuShown) {
|
||||||
var opts = that.menu.options();
|
var opts = that.menu.options();
|
||||||
@ -71,8 +74,8 @@
|
|||||||
this.completionMenuShown = true;
|
this.completionMenuShown = true;
|
||||||
},
|
},
|
||||||
_updateCompletions: function(val) {
|
_updateCompletions: function(val) {
|
||||||
var that = this;
|
const that = this;
|
||||||
if (val.trim() === "") {
|
if (val.trim().length < this.options.minLength) {
|
||||||
if (this.completionMenuShown) {
|
if (this.completionMenuShown) {
|
||||||
this.menu.hide();
|
this.menu.hide();
|
||||||
}
|
}
|
||||||
@ -96,7 +99,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.options.search.length === 2) {
|
if (this.options.search.length === 2) {
|
||||||
var requestId = 1+Math.floor(Math.random()*10000);
|
const requestId = 1+Math.floor(Math.random()*10000);
|
||||||
this.pendingRequest = requestId;
|
this.pendingRequest = requestId;
|
||||||
this.options.search(val,function(completions) { displayResults(completions,requestId);})
|
this.options.search(val,function(completions) { displayResults(completions,requestId);})
|
||||||
} else {
|
} else {
|
||||||
@ -112,4 +115,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
function parseInteger(input, def, min, max) {
|
||||||
|
if(input == null) { return (def || 0); }
|
||||||
|
min = min == null ? Number.NEGATIVE_INFINITY : min;
|
||||||
|
max = max == null ? Number.POSITIVE_INFINITY : max;
|
||||||
|
let n = parseInt(input);
|
||||||
|
if(isNaN(n) || n < min || n > max) { n = def || 0; }
|
||||||
|
return n;
|
||||||
|
}
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
@ -105,8 +105,8 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.element.on("keydown",function(e) {
|
this.element.on("keydown",function(e) {
|
||||||
if (!menuShown && e.keyCode === 40) {
|
if (!menuShown && e.keyCode === 40 && $(this).val() === '') {
|
||||||
//DOWN
|
//DOWN (only show menu if search field is emty)
|
||||||
showMenu();
|
showMenu();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -55,34 +55,46 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
var autoComplete = function(options) {
|
var autoComplete = function(options) {
|
||||||
|
function getMatch(value, searchValue) {
|
||||||
|
const idx = value.toLowerCase().indexOf(searchValue.toLowerCase());
|
||||||
|
const len = idx > -1 ? searchValue.length : 0;
|
||||||
|
return {
|
||||||
|
index: idx,
|
||||||
|
found: idx > -1,
|
||||||
|
pre: value.substring(0,idx),
|
||||||
|
match: value.substring(idx,idx+len),
|
||||||
|
post: value.substring(idx+len),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function generateSpans(match) {
|
||||||
|
const els = [];
|
||||||
|
if(match.pre) { els.push($('<span/>').text(match.pre)); }
|
||||||
|
if(match.match) { els.push($('<span/>',{style:"font-weight: bold; color: var(--red-ui-text-color-link);"}).text(match.match)); }
|
||||||
|
if(match.post) { els.push($('<span/>').text(match.post)); }
|
||||||
|
return els;
|
||||||
|
}
|
||||||
return function(val) {
|
return function(val) {
|
||||||
var matches = [];
|
var matches = [];
|
||||||
options.forEach(opt => {
|
options.forEach(opt => {
|
||||||
let v = opt.value;
|
const optVal = opt.value;
|
||||||
var i = v.toLowerCase().indexOf(val.toLowerCase());
|
const optSrc = (opt.source||[]).join(",");
|
||||||
if (i > -1) {
|
const valMatch = getMatch(optVal, val);
|
||||||
var pre = v.substring(0,i);
|
const srcMatch = getMatch(optSrc, val);
|
||||||
var matchedVal = v.substring(i,i+val.length);
|
if (valMatch.found || srcMatch.found) {
|
||||||
var post = v.substring(i+val.length)
|
const element = $('<div>',{style: "display: flex"});
|
||||||
|
const valEl = $('<div/>',{style:"font-family: var(--red-ui-monospace-font); white-space:nowrap; overflow: hidden; flex-grow:1"});
|
||||||
var el = $('<div/>',{style:"white-space:nowrap; overflow: hidden; flex-grow:1"});
|
valEl.append(generateSpans(valMatch));
|
||||||
$('<span/>').text(pre).appendTo(el);
|
valEl.appendTo(element);
|
||||||
$('<span/>',{style:"font-weight: bold"}).text(matchedVal).appendTo(el);
|
if (optSrc) {
|
||||||
$('<span/>').text(post).appendTo(el);
|
const optEl = $('<div>').css({ "font-size": "0.8em" });
|
||||||
|
optEl.append(generateSpans(srcMatch));
|
||||||
var element = $('<div>',{style: "display: flex"});
|
optEl.appendTo(element);
|
||||||
el.appendTo(element);
|
|
||||||
if (opt.source) {
|
|
||||||
$('<div>').css({
|
|
||||||
"font-size": "0.8em"
|
|
||||||
}).text(opt.source.join(",")).appendTo(element);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
matches.push({
|
matches.push({
|
||||||
value: v,
|
value: optVal,
|
||||||
label: element,
|
label: element,
|
||||||
i:i
|
i: (valMatch.found ? valMatch.index : srcMatch.index)
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
matches.sort(function(A,B){return A.i-B.i})
|
matches.sort(function(A,B){return A.i-B.i})
|
||||||
@ -93,6 +105,36 @@
|
|||||||
// This is a hand-generated list of completions for the core nodes (based on the node help html).
|
// This is a hand-generated list of completions for the core nodes (based on the node help html).
|
||||||
var msgCompletions = [
|
var msgCompletions = [
|
||||||
{ value: "payload" },
|
{ value: "payload" },
|
||||||
|
{ value: "topic", source: ["mqtt","inject","rbe"] },
|
||||||
|
{ value: "action", source: ["mqtt"] },
|
||||||
|
{ value: "complete", source: ["join"] },
|
||||||
|
{ value: "contentType", source: ["mqtt"] },
|
||||||
|
{ value: "cookies", source: ["http request","http response"] },
|
||||||
|
{ value: "correlationData", source: ["mqtt"] },
|
||||||
|
{ value: "delay", source: ["delay","trigger"] },
|
||||||
|
{ value: "encoding", source: ["file"] },
|
||||||
|
{ value: "error", source: ["catch"] },
|
||||||
|
{ value: "error.message", source: ["catch"] },
|
||||||
|
{ value: "error.source", source: ["catch"] },
|
||||||
|
{ value: "error.source.id", source: ["catch"] },
|
||||||
|
{ value: "error.source.type", source: ["catch"] },
|
||||||
|
{ value: "error.source.name", source: ["catch"] },
|
||||||
|
{ value: "filename", source: ["file","file in"] },
|
||||||
|
{ value: "flush", source: ["delay"] },
|
||||||
|
{ value: "followRedirects", source: ["http request"] },
|
||||||
|
{ value: "headers", source: ["http response","http request"] },
|
||||||
|
{ value: "host", source: ["tcp request","http request"] },
|
||||||
|
{ value: "ip", source: ["udp out"] },
|
||||||
|
{ value: "kill", source: ["exec"] },
|
||||||
|
{ value: "messageExpiryInterval", source: ["mqtt"] },
|
||||||
|
{ value: "method", source: ["http request"] },
|
||||||
|
{ value: "options", source: ["xml"] },
|
||||||
|
{ value: "parts", source: ["split","join","batch","sort"] },
|
||||||
|
{ value: "pid", source: ["exec"] },
|
||||||
|
{ value: "port", source: ["tcp request"," udp out"] },
|
||||||
|
{ value: "qos", source: ["mqtt"] },
|
||||||
|
{ value: "rate", source: ["delay"] },
|
||||||
|
{ value: "rejectUnauthorized", source: ["http request"] },
|
||||||
{ value: "req", source: ["http in"]},
|
{ value: "req", source: ["http in"]},
|
||||||
{ value: "req.body", source: ["http in"]},
|
{ value: "req.body", source: ["http in"]},
|
||||||
{ value: "req.headers", source: ["http in"]},
|
{ value: "req.headers", source: ["http in"]},
|
||||||
@ -100,38 +142,28 @@
|
|||||||
{ value: "req.params", source: ["http in"]},
|
{ value: "req.params", source: ["http in"]},
|
||||||
{ value: "req.cookies", source: ["http in"]},
|
{ value: "req.cookies", source: ["http in"]},
|
||||||
{ value: "req.files", source: ["http in"]},
|
{ value: "req.files", source: ["http in"]},
|
||||||
{ value: "complete", source: ["join"] },
|
|
||||||
{ value: "contentType", source: ["mqtt"] },
|
|
||||||
{ value: "cookies", source: ["http in","http request"] },
|
|
||||||
{ value: "correlationData", source: ["mqtt"] },
|
|
||||||
{ value: "delay", source: ["delay","trigger"] },
|
|
||||||
{ value: "encoding", source: ["file"] },
|
|
||||||
{ value: "error", source: ["catch"] },
|
|
||||||
{ value: "filename", source: ["file","file in"] },
|
|
||||||
{ value: "flush", source: ["delay"] },
|
|
||||||
{ value: "followRedirects", source: ["http request"] },
|
|
||||||
{ value: "headers", source: ["http in"," http request"] },
|
|
||||||
{ value: "kill", source: ["exec"] },
|
|
||||||
{ value: "messageExpiryInterval", source: ["mqtt"] },
|
|
||||||
{ value: "method", source: ["http-request"] },
|
|
||||||
{ value: "options", source: ["xml"] },
|
|
||||||
{ value: "parts", source: ["split","join"] },
|
|
||||||
{ value: "pid", source: ["exec"] },
|
|
||||||
{ value: "qos", source: ["mqtt"] },
|
|
||||||
{ value: "rate", source: ["delay"] },
|
|
||||||
{ value: "rejectUnauthorized", source: ["http request"] },
|
|
||||||
{ value: "requestTimeout", source: ["http request"] },
|
{ value: "requestTimeout", source: ["http request"] },
|
||||||
{ value: "reset", source: ["delay","trigger","join","rbe"] },
|
{ value: "reset", source: ["delay","trigger","join","rbe"] },
|
||||||
|
{ value: "responseCookies", source: ["http request"] },
|
||||||
{ value: "responseTopic", source: ["mqtt"] },
|
{ value: "responseTopic", source: ["mqtt"] },
|
||||||
|
{ value: "responseURL", source: ["http request"] },
|
||||||
{ value: "restartTimeout", source: ["join"] },
|
{ value: "restartTimeout", source: ["join"] },
|
||||||
{ value: "retain", source: ["mqtt"] },
|
{ value: "retain", source: ["mqtt"] },
|
||||||
|
{ value: "schema", source: ["json"] },
|
||||||
{ value: "select", source: ["html"] },
|
{ value: "select", source: ["html"] },
|
||||||
{ value: "statusCode", source: ["http in"] },
|
{ value: "statusCode", source: ["http response","http request"] },
|
||||||
|
{ value: "status", source: ["status"] },
|
||||||
|
{ value: "status.text", source: ["status"] },
|
||||||
|
{ value: "status.source", source: ["status"] },
|
||||||
|
{ value: "status.source.type", source: ["status"] },
|
||||||
|
{ value: "status.source.id", source: ["status"] },
|
||||||
|
{ value: "status.source.name", source: ["status"] },
|
||||||
|
{ value: "target", source: ["link call"] },
|
||||||
{ value: "template", source: ["template"] },
|
{ value: "template", source: ["template"] },
|
||||||
{ value: "toFront", source: ["delay"] },
|
{ value: "toFront", source: ["delay"] },
|
||||||
{ value: "topic", source: ["inject","mqtt","rbe"] },
|
|
||||||
{ value: "url", source: ["http request"] },
|
{ value: "url", source: ["http request"] },
|
||||||
{ value: "userProperties", source: ["mqtt"] }
|
{ value: "userProperties", source: ["mqtt"] },
|
||||||
|
{ value: "_session", source: ["websocket out","tcp out"] },
|
||||||
]
|
]
|
||||||
var allOptions = {
|
var allOptions = {
|
||||||
msg: {value:"msg",label:"msg.",validate:RED.utils.validatePropertyExpression, autoComplete: autoComplete(msgCompletions)},
|
msg: {value:"msg",label:"msg.",validate:RED.utils.validatePropertyExpression, autoComplete: autoComplete(msgCompletions)},
|
||||||
@ -1147,7 +1179,8 @@
|
|||||||
this.elementDiv.show();
|
this.elementDiv.show();
|
||||||
if (opt.autoComplete) {
|
if (opt.autoComplete) {
|
||||||
this.input.autoComplete({
|
this.input.autoComplete({
|
||||||
search: opt.autoComplete
|
search: opt.autoComplete,
|
||||||
|
minLength: 0
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1151,7 +1151,7 @@ RED.editor.codeEditor.monaco = (function() {
|
|||||||
try {
|
try {
|
||||||
var _model = ed.getModel();
|
var _model = ed.getModel();
|
||||||
if (_model !== null) {
|
if (_model !== null) {
|
||||||
var id = _model.getModeId(); // e.g. javascript
|
var id = _model._languageId; // e.g. javascript
|
||||||
var ra = _model._associatedResource.authority; //e.g. model
|
var ra = _model._associatedResource.authority; //e.g. model
|
||||||
var rp = _model._associatedResource.path; //e.g. /18
|
var rp = _model._associatedResource.path; //e.g. /18
|
||||||
var rs = _model._associatedResource.scheme; //e.g. inmemory
|
var rs = _model._associatedResource.scheme; //e.g. inmemory
|
||||||
|
@ -107,7 +107,7 @@
|
|||||||
newValue = "";
|
newValue = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (node[d] != newValue) {
|
if (!isEqual(node[d], newValue)) {
|
||||||
if (node._def.defaults[d].type) {
|
if (node._def.defaults[d].type) {
|
||||||
// Change to a related config node
|
// Change to a related config node
|
||||||
var configNode = RED.nodes.node(node[d]);
|
var configNode = RED.nodes.node(node[d]);
|
||||||
@ -139,6 +139,23 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares `newValue` with `originalValue` for equality.
|
||||||
|
* @param {*} originalValue Original value
|
||||||
|
* @param {*} newValue New value
|
||||||
|
* @returns {boolean} true if originalValue equals newValue, otherwise false
|
||||||
|
*/
|
||||||
|
function isEqual(originalValue, newValue) {
|
||||||
|
try {
|
||||||
|
if(originalValue == newValue) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return JSON.stringify(originalValue) === JSON.stringify(newValue);
|
||||||
|
} catch (err) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the node credentials from the edit form
|
* Update the node credentials from the edit form
|
||||||
* @param node - the node containing the credentials
|
* @param node - the node containing the credentials
|
||||||
|
@ -352,8 +352,10 @@ RED.group = (function() {
|
|||||||
}
|
}
|
||||||
if (n.type === 'group') {
|
if (n.type === 'group') {
|
||||||
RED.events.emit("groups:change",n)
|
RED.events.emit("groups:change",n)
|
||||||
} else {
|
} else if (n.type !== 'junction') {
|
||||||
RED.events.emit("nodes:change",n)
|
RED.events.emit("nodes:change",n)
|
||||||
|
} else {
|
||||||
|
RED.events.emit("junctions:change",n)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
RED.nodes.removeGroup(g);
|
RED.nodes.removeGroup(g);
|
||||||
@ -547,8 +549,10 @@ RED.group = (function() {
|
|||||||
group.h = Math.max(group.h,n.y+n.h/2+25-group.y);
|
group.h = Math.max(group.h,n.y+n.h/2+25-group.y);
|
||||||
if (n.type === 'group') {
|
if (n.type === 'group') {
|
||||||
RED.events.emit("groups:change",n)
|
RED.events.emit("groups:change",n)
|
||||||
} else {
|
} else if (n.type !== 'junction') {
|
||||||
RED.events.emit("nodes:change",n)
|
RED.events.emit("nodes:change",n)
|
||||||
|
} else {
|
||||||
|
RED.events.emit("junctions:change",n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -583,8 +587,10 @@ RED.group = (function() {
|
|||||||
}
|
}
|
||||||
if (n.type === 'group') {
|
if (n.type === 'group') {
|
||||||
RED.events.emit("groups:change",n)
|
RED.events.emit("groups:change",n)
|
||||||
} else {
|
} else if (n.type !== 'junction') {
|
||||||
RED.events.emit("nodes:change",n)
|
RED.events.emit("nodes:change",n)
|
||||||
|
} else {
|
||||||
|
RED.events.emit("junctions:change",n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
markDirty(group);
|
markDirty(group);
|
||||||
|
@ -224,14 +224,7 @@ RED.palette = (function() {
|
|||||||
|
|
||||||
var d = $('<div>',{class:"red-ui-palette-node"}).attr("data-palette-type",nt).data('category',rootCategory);
|
var d = $('<div>',{class:"red-ui-palette-node"}).attr("data-palette-type",nt).data('category',rootCategory);
|
||||||
|
|
||||||
var label = nt;///^(.*?)([ -]in|[ -]out)?$/.exec(nt)[1];
|
var label = RED.utils.getPaletteLabel(nt, def);///^(.*?)([ -]in|[ -]out)?$/.exec(nt)[1];
|
||||||
if (typeof def.paletteLabel !== "undefined") {
|
|
||||||
try {
|
|
||||||
label = (typeof def.paletteLabel === "function" ? def.paletteLabel.call(def) : def.paletteLabel)||"";
|
|
||||||
} catch(err) {
|
|
||||||
console.log("Definition error: "+nt+".paletteLabel",err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$('<div/>', {
|
$('<div/>', {
|
||||||
class: "red-ui-palette-label"+(((!def.align && def.inputs !== 0 && def.outputs === 0) || "right" === def.align) ? " red-ui-palette-label-right" : "")
|
class: "red-ui-palette-label"+(((!def.align && def.inputs !== 0 && def.outputs === 0) || "right" === def.align) ? " red-ui-palette-label-right" : "")
|
||||||
|
@ -25,6 +25,8 @@ RED.search = (function() {
|
|||||||
var searchHistory = [];
|
var searchHistory = [];
|
||||||
var index = {};
|
var index = {};
|
||||||
var currentResults = [];
|
var currentResults = [];
|
||||||
|
var activeResults = [];
|
||||||
|
var currentIndex = 0;
|
||||||
var previousActiveElement;
|
var previousActiveElement;
|
||||||
|
|
||||||
function indexProperty(node,label,property) {
|
function indexProperty(node,label,property) {
|
||||||
@ -267,9 +269,8 @@ RED.search = (function() {
|
|||||||
} else {
|
} else {
|
||||||
searchResults.editableList('addItem',{});
|
searchResults.editableList('addItem',{});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
options: getSearchOptions()
|
||||||
}
|
|
||||||
});
|
});
|
||||||
var copySearchContainer = $('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-caret-right"></button>').appendTo(searchDiv).on('click', function(evt) {
|
var copySearchContainer = $('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-caret-right"></button>').appendTo(searchDiv).on('click', function(evt) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
@ -330,7 +331,8 @@ RED.search = (function() {
|
|||||||
}
|
}
|
||||||
} else if (!$(children[selected]).hasClass("red-ui-search-historyHeader")) {
|
} else if (!$(children[selected]).hasClass("red-ui-search-historyHeader")) {
|
||||||
if (currentResults.length > 0) {
|
if (currentResults.length > 0) {
|
||||||
reveal(currentResults[Math.max(0,selected)].node);
|
currentIndex = Math.max(0,selected);
|
||||||
|
reveal(currentResults[currentIndex].node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -414,6 +416,7 @@ RED.search = (function() {
|
|||||||
|
|
||||||
div.on("click", function(evt) {
|
div.on("click", function(evt) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
|
currentIndex = i;
|
||||||
reveal(node);
|
reveal(node);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -429,13 +432,59 @@ RED.search = (function() {
|
|||||||
if (existingIndex > -1) {
|
if (existingIndex > -1) {
|
||||||
searchHistory.splice(existingIndex,1);
|
searchHistory.splice(existingIndex,1);
|
||||||
}
|
}
|
||||||
searchHistory.unshift(searchInput.val());
|
searchHistory.unshift(searchVal);
|
||||||
hide();
|
$("#red-ui-view-searchtools-search").data("term", searchVal);
|
||||||
|
activeResults = Object.assign([], currentResults);
|
||||||
|
hide(null, activeResults.length > 0);
|
||||||
RED.view.reveal(node.id);
|
RED.view.reveal(node.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function revealPrev() {
|
||||||
|
if (disabled) {
|
||||||
|
updateSearchToolbar();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!searchResults || !activeResults.length) {
|
||||||
|
show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (currentIndex > 0) {
|
||||||
|
currentIndex--;
|
||||||
|
} else {
|
||||||
|
currentIndex = activeResults.length - 1;
|
||||||
|
}
|
||||||
|
const n = activeResults[currentIndex];
|
||||||
|
if (n && n.node && n.node.id) {
|
||||||
|
RED.view.reveal(n.node.id);
|
||||||
|
$("#red-ui-view-searchtools-prev").trigger("focus");
|
||||||
|
}
|
||||||
|
updateSearchToolbar();
|
||||||
|
}
|
||||||
|
function revealNext() {
|
||||||
|
if (disabled) {
|
||||||
|
updateSearchToolbar();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!searchResults || !activeResults.length) {
|
||||||
|
show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (currentIndex < activeResults.length - 1) {
|
||||||
|
currentIndex++
|
||||||
|
} else {
|
||||||
|
currentIndex = 0;
|
||||||
|
}
|
||||||
|
const n = activeResults[currentIndex];
|
||||||
|
if (n && n.node && n.node.id) {
|
||||||
|
RED.view.reveal(n.node.id);
|
||||||
|
$("#red-ui-view-searchtools-next").trigger("focus");
|
||||||
|
}
|
||||||
|
updateSearchToolbar();
|
||||||
|
}
|
||||||
|
|
||||||
function show(v) {
|
function show(v) {
|
||||||
if (disabled) {
|
if (disabled) {
|
||||||
|
updateSearchToolbar();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!visible) {
|
if (!visible) {
|
||||||
@ -462,7 +511,7 @@ RED.search = (function() {
|
|||||||
searchInput.trigger("focus");
|
searchInput.trigger("focus");
|
||||||
}
|
}
|
||||||
|
|
||||||
function hide() {
|
function hide(el, keepSearchToolbar) {
|
||||||
if (visible) {
|
if (visible) {
|
||||||
visible = false;
|
visible = false;
|
||||||
$("#red-ui-header-shade").hide();
|
$("#red-ui-header-shade").hide();
|
||||||
@ -476,13 +525,37 @@ RED.search = (function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
RED.events.emit("search:close");
|
RED.events.emit("search:close");
|
||||||
if (previousActiveElement) {
|
if (previousActiveElement && (!keepSearchToolbar || !activeResults.length)) {
|
||||||
$(previousActiveElement).trigger("focus");
|
$(previousActiveElement).trigger("focus");
|
||||||
previousActiveElement = null;
|
|
||||||
}
|
}
|
||||||
|
previousActiveElement = null;
|
||||||
|
}
|
||||||
|
if(!keepSearchToolbar) {
|
||||||
|
clearActiveSearch();
|
||||||
|
}
|
||||||
|
updateSearchToolbar();
|
||||||
|
if(keepSearchToolbar && activeResults.length) {
|
||||||
|
$("#red-ui-view-searchtools-next").trigger("focus");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function updateSearchToolbar() {
|
||||||
|
if (!disabled && currentIndex >= 0 && activeResults && activeResults.length) {
|
||||||
|
let term = $("#red-ui-view-searchtools-search").data("term") || "";
|
||||||
|
if (term.length > 16) {
|
||||||
|
term = term.substring(0, 12) + "..."
|
||||||
|
}
|
||||||
|
const i18nSearchCounterData = {
|
||||||
|
term: term,
|
||||||
|
result: (currentIndex + 1),
|
||||||
|
count: activeResults.length
|
||||||
|
}
|
||||||
|
$("#red-ui-view-searchtools-counter").text(RED._('actions.search-counter', i18nSearchCounterData));
|
||||||
|
$("#view-search-tools > :not(:first-child)").show(); //show other tools
|
||||||
|
} else {
|
||||||
|
clearActiveSearch();
|
||||||
|
$("#view-search-tools > :not(:first-child)").hide(); //hide all but search button
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearIndex() {
|
function clearIndex() {
|
||||||
index = {};
|
index = {};
|
||||||
}
|
}
|
||||||
@ -504,9 +577,29 @@ RED.search = (function() {
|
|||||||
addItemToIndex(item);
|
addItemToIndex(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function clearActiveSearch() {
|
||||||
|
activeResults = [];
|
||||||
|
currentIndex = 0;
|
||||||
|
$("#red-ui-view-searchtools-search").data("term", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSearchOptions() {
|
||||||
|
return [
|
||||||
|
{label:RED._("search.options.configNodes"), value:"is:config"},
|
||||||
|
{label:RED._("search.options.unusedConfigNodes"), value:"is:config is:unused"},
|
||||||
|
{label:RED._("search.options.modifiedNodes"), value:"is:modified"},
|
||||||
|
{label:RED._("search.options.invalidNodes"), value: "is:invalid"},
|
||||||
|
{label:RED._("search.options.uknownNodes"), value: "type:unknown"},
|
||||||
|
{label:RED._("search.options.unusedSubflows"), value:"is:subflow is:unused"},
|
||||||
|
{label:RED._("search.options.hiddenFlows"), value:"is:hidden"},
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
RED.actions.add("core:search",show);
|
RED.actions.add("core:search",show);
|
||||||
|
RED.actions.add("core:search-previous",revealPrev);
|
||||||
|
RED.actions.add("core:search-next",revealNext);
|
||||||
|
|
||||||
RED.events.on("editor:open",function() { disabled = true; });
|
RED.events.on("editor:open",function() { disabled = true; });
|
||||||
RED.events.on("editor:close",function() { disabled = false; });
|
RED.events.on("editor:close",function() { disabled = false; });
|
||||||
@ -517,11 +610,21 @@ RED.search = (function() {
|
|||||||
|
|
||||||
RED.keyboard.add("red-ui-search","escape",hide);
|
RED.keyboard.add("red-ui-search","escape",hide);
|
||||||
|
|
||||||
|
RED.keyboard.add("view-search-tools","escape",function() {
|
||||||
|
clearActiveSearch();
|
||||||
|
updateSearchToolbar();
|
||||||
|
});
|
||||||
|
|
||||||
$("#red-ui-header-shade").on('mousedown',hide);
|
$("#red-ui-header-shade").on('mousedown',hide);
|
||||||
$("#red-ui-editor-shade").on('mousedown',hide);
|
$("#red-ui-editor-shade").on('mousedown',hide);
|
||||||
$("#red-ui-palette-shade").on('mousedown',hide);
|
$("#red-ui-palette-shade").on('mousedown',hide);
|
||||||
$("#red-ui-sidebar-shade").on('mousedown',hide);
|
$("#red-ui-sidebar-shade").on('mousedown',hide);
|
||||||
|
|
||||||
|
$("#red-ui-view-searchtools-close").on("click", function close() {
|
||||||
|
clearActiveSearch();
|
||||||
|
updateSearchToolbar();
|
||||||
|
});
|
||||||
|
$("#red-ui-view-searchtools-close").trigger("click");
|
||||||
|
|
||||||
RED.events.on("workspace:clear", clearIndex);
|
RED.events.on("workspace:clear", clearIndex);
|
||||||
|
|
||||||
@ -547,7 +650,8 @@ RED.search = (function() {
|
|||||||
init: init,
|
init: init,
|
||||||
show: show,
|
show: show,
|
||||||
hide: hide,
|
hide: hide,
|
||||||
search: search
|
search: search,
|
||||||
|
getSearchOptions: getSearchOptions
|
||||||
};
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
@ -29,5 +29,6 @@ RED.state = {
|
|||||||
GROUP_DRAGGING: 12,
|
GROUP_DRAGGING: 12,
|
||||||
GROUP_RESIZE: 13,
|
GROUP_RESIZE: 13,
|
||||||
DETACHED_DRAGGING: 14,
|
DETACHED_DRAGGING: 14,
|
||||||
SLICING: 15
|
SLICING: 15,
|
||||||
|
SLICING_JUNCTION: 16
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ RED.statusBar = (function() {
|
|||||||
function addWidget(options) {
|
function addWidget(options) {
|
||||||
widgets[options.id] = options;
|
widgets[options.id] = options;
|
||||||
var el = $('<span class="red-ui-statusbar-widget"></span>');
|
var el = $('<span class="red-ui-statusbar-widget"></span>');
|
||||||
|
el.prop('id', options.id);
|
||||||
options.element.appendTo(el);
|
options.element.appendTo(el);
|
||||||
if (options.align === 'left') {
|
if (options.align === 'left') {
|
||||||
leftBucket.append(el);
|
leftBucket.append(el);
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
**/
|
**/
|
||||||
RED.sidebar.config = (function() {
|
RED.sidebar.config = (function() {
|
||||||
|
|
||||||
|
let flashingConfigNode;
|
||||||
|
let flashingConfigNodeTimer;
|
||||||
|
|
||||||
var content = document.createElement("div");
|
var content = document.createElement("div");
|
||||||
content.className = "red-ui-sidebar-node-config";
|
content.className = "red-ui-sidebar-node-config";
|
||||||
@ -145,6 +147,7 @@ RED.sidebar.config = (function() {
|
|||||||
var entry = $('<li class="red-ui-palette-node_id_'+node.id.replace(/\./g,"-")+'"></li>').appendTo(list);
|
var entry = $('<li class="red-ui-palette-node_id_'+node.id.replace(/\./g,"-")+'"></li>').appendTo(list);
|
||||||
var nodeDiv = $('<div class="red-ui-palette-node-config red-ui-palette-node"></div>').appendTo(entry);
|
var nodeDiv = $('<div class="red-ui-palette-node-config red-ui-palette-node"></div>').appendTo(entry);
|
||||||
entry.data('node',node.id);
|
entry.data('node',node.id);
|
||||||
|
nodeDiv.data('node',node.id);
|
||||||
var label = $('<div class="red-ui-palette-label"></div>').text(label).appendTo(nodeDiv);
|
var label = $('<div class="red-ui-palette-label"></div>').text(label).appendTo(nodeDiv);
|
||||||
if (node.d) {
|
if (node.d) {
|
||||||
nodeDiv.addClass("red-ui-palette-node-config-disabled");
|
nodeDiv.addClass("red-ui-palette-node-config-disabled");
|
||||||
@ -346,10 +349,36 @@ RED.sidebar.config = (function() {
|
|||||||
refreshConfigNodeList();
|
refreshConfigNodeList();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
RED.popover.tooltip($('#red-ui-sidebar-config-filter-all'), RED._("sidebar.config.showAllUnusedConfigNodes"));
|
RED.popover.tooltip($('#red-ui-sidebar-config-filter-all'), RED._("sidebar.config.showAllConfigNodes"));
|
||||||
RED.popover.tooltip($('#red-ui-sidebar-config-filter-unused'), RED._("sidebar.config.showAllUnusedConfigNodes"));
|
RED.popover.tooltip($('#red-ui-sidebar-config-filter-unused'), RED._("sidebar.config.showAllUnusedConfigNodes"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function flashConfigNode(el) {
|
||||||
|
if(flashingConfigNode && flashingConfigNode.length) {
|
||||||
|
//cancel current flashing node before flashing new node
|
||||||
|
clearInterval(flashingConfigNodeTimer);
|
||||||
|
flashingConfigNodeTimer = null;
|
||||||
|
flashingConfigNode.children("div").removeClass('highlighted');
|
||||||
|
flashingConfigNode = null;
|
||||||
|
}
|
||||||
|
if(!el || !el.children("div").length) { return; }
|
||||||
|
|
||||||
|
flashingConfigNodeTimer = setInterval(function(flashEndTime) {
|
||||||
|
if (flashEndTime >= Date.now()) {
|
||||||
|
const highlighted = el.children("div").hasClass("highlighted");
|
||||||
|
el.children("div").toggleClass('highlighted', !highlighted)
|
||||||
|
} else {
|
||||||
|
clearInterval(flashingConfigNodeTimer);
|
||||||
|
flashingConfigNodeTimer = null;
|
||||||
|
flashingConfigNode = null;
|
||||||
|
el.children("div").removeClass('highlighted');
|
||||||
|
}
|
||||||
|
}, 100, Date.now() + 2200);
|
||||||
|
flashingConfigNode = el;
|
||||||
|
el.children("div").addClass('highlighted');
|
||||||
|
}
|
||||||
|
|
||||||
function show(id) {
|
function show(id) {
|
||||||
if (typeof id === 'boolean') {
|
if (typeof id === 'boolean') {
|
||||||
if (id) {
|
if (id) {
|
||||||
@ -374,19 +403,7 @@ RED.sidebar.config = (function() {
|
|||||||
} else if (y<0) {
|
} else if (y<0) {
|
||||||
scrollWindow.animate({scrollTop: '+='+(y-10)},150);
|
scrollWindow.animate({scrollTop: '+='+(y-10)},150);
|
||||||
}
|
}
|
||||||
var flash = 21;
|
flashConfigNode(node, id);
|
||||||
var flashFunc = function() {
|
|
||||||
if ((flash%2)===0) {
|
|
||||||
node.removeClass('node_highlighted');
|
|
||||||
} else {
|
|
||||||
node.addClass('node_highlighted');
|
|
||||||
}
|
|
||||||
flash--;
|
|
||||||
if (flash >= 0) {
|
|
||||||
setTimeout(flashFunc,100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
flashFunc();
|
|
||||||
},100);
|
},100);
|
||||||
}
|
}
|
||||||
RED.sidebar.show("config");
|
RED.sidebar.show("config");
|
||||||
|
@ -370,7 +370,7 @@ RED.sidebar.help = (function() {
|
|||||||
var node = selection.nodes[0];
|
var node = selection.nodes[0];
|
||||||
if (node.type === "subflow" && node.direction) {
|
if (node.type === "subflow" && node.direction) {
|
||||||
// ignore subflow virtual ports
|
// ignore subflow virtual ports
|
||||||
} else if (node.type !== 'group'){
|
} else if (node.type !== 'group' && node.type !== 'junction'){
|
||||||
showNodeTypeHelp(node.type);
|
showNodeTypeHelp(node.type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,15 +268,7 @@ RED.sidebar.info.outliner = (function() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
options: [
|
options: RED.search.getSearchOptions()
|
||||||
{label:RED._("sidebar.info.search.configNodes"), value:"is:config"},
|
|
||||||
{label:RED._("sidebar.info.search.unusedConfigNodes"), value:"is:config is:unused"},
|
|
||||||
{label:RED._("sidebar.info.search.modifiedNodes"), value:"is:modified"},
|
|
||||||
{label:RED._("sidebar.info.search.invalidNodes"), value: "is:invalid"},
|
|
||||||
{label:RED._("sidebar.info.search.uknownNodes"), value: "type:unknown"},
|
|
||||||
{label:RED._("sidebar.info.search.unusedSubflows"), value:"is:subflow is:unused"},
|
|
||||||
{label:RED._("sidebar.info.search.hiddenFlows"), value:"is:hidden"},
|
|
||||||
]
|
|
||||||
});
|
});
|
||||||
|
|
||||||
projectInfo = $('<div class="red-ui-treeList-label red-ui-info-outline-project"><span class="red-ui-treeList-icon"><i class="fa fa-archive"></i></span></div>').hide().appendTo(container)
|
projectInfo = $('<div class="red-ui-treeList-label red-ui-info-outline-project"><span class="red-ui-treeList-icon"><i class="fa fa-archive"></i></span></div>').hide().appendTo(container)
|
||||||
@ -288,15 +280,18 @@ RED.sidebar.info.outliner = (function() {
|
|||||||
data:getFlowData()
|
data:getFlowData()
|
||||||
})
|
})
|
||||||
treeList.on('treelistselect', function(e,item) {
|
treeList.on('treelistselect', function(e,item) {
|
||||||
var node = RED.nodes.node(item.id) || RED.nodes.group(item.id);
|
var node = RED.nodes.node(item.id) || RED.nodes.group(item.id) || RED.nodes.workspace(item.id) || RED.nodes.subflow(item.id);
|
||||||
if (node) {
|
if (node) {
|
||||||
if (node.type === 'group' || node._def.category !== "config") {
|
RED.sidebar.info.refresh(node);
|
||||||
// RED.view.select({nodes:[node]})
|
// if (node.type === 'group' || node._def.category !== "config") {
|
||||||
} else if (node._def.category === "config") {
|
// // RED.view.select({nodes:[node]})
|
||||||
RED.sidebar.info.refresh(node);
|
// } else if (node._def.category === "config") {
|
||||||
} else {
|
// RED.sidebar.info.refresh(node);
|
||||||
// RED.view.select({nodes:[]})
|
// } else {
|
||||||
}
|
// // RED.view.select({nodes:[]})
|
||||||
|
// }
|
||||||
|
} else {
|
||||||
|
RED.sidebar.info.refresh(null);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
treeList.on('treelistconfirm', function(e,item) {
|
treeList.on('treelistconfirm', function(e,item) {
|
||||||
|
@ -163,6 +163,7 @@ RED.sidebar.info = (function() {
|
|||||||
});
|
});
|
||||||
return el;
|
return el;
|
||||||
}
|
}
|
||||||
|
|
||||||
function refresh(node) {
|
function refresh(node) {
|
||||||
if (node === undefined) {
|
if (node === undefined) {
|
||||||
refreshSelection();
|
refreshSelection();
|
||||||
@ -271,7 +272,7 @@ RED.sidebar.info = (function() {
|
|||||||
objectType = "group";
|
objectType = "group";
|
||||||
}
|
}
|
||||||
$(propRow.children()[0]).text(RED._("sidebar.info."+objectType))
|
$(propRow.children()[0]).text(RED._("sidebar.info."+objectType))
|
||||||
RED.utils.createObjectElement(node.id).appendTo(propRow.children()[1]);
|
RED.utils.createObjectElement(node.id,{sourceId: node.id}).appendTo(propRow.children()[1]);
|
||||||
|
|
||||||
if (node.type === "tab" || node.type === "subflow") {
|
if (node.type === "tab" || node.type === "subflow") {
|
||||||
// If nothing is selected, but we're on a flow or subflow tab.
|
// If nothing is selected, but we're on a flow or subflow tab.
|
||||||
@ -301,8 +302,8 @@ RED.sidebar.info = (function() {
|
|||||||
if (typeCounts.groups > 0) {
|
if (typeCounts.groups > 0) {
|
||||||
$('<div>').text(RED._("clipboard.group",{count:typeCounts.groups})).appendTo(counts);
|
$('<div>').text(RED._("clipboard.group",{count:typeCounts.groups})).appendTo(counts);
|
||||||
}
|
}
|
||||||
|
} else if (node.type === 'junction') {
|
||||||
|
propertiesPanelHeaderHelp.hide();
|
||||||
} else {
|
} else {
|
||||||
propertiesPanelHeaderHelp.show();
|
propertiesPanelHeaderHelp.show();
|
||||||
|
|
||||||
@ -365,7 +366,7 @@ RED.sidebar.info = (function() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
RED.utils.createObjectElement(val).appendTo(propRow.children()[1]);
|
RED.utils.createObjectElement(val,{sourceId: node.id}).appendTo(propRow.children()[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -431,6 +432,7 @@ RED.sidebar.info = (function() {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function setInfoText(infoText,target) {
|
function setInfoText(infoText,target) {
|
||||||
var info = addTargetToExternalLinks($('<div class="red-ui-help"><span class="red-ui-text-bidi-aware" dir=\"'+RED.text.bidi.resolveBaseTextDir(infoText)+'">'+infoText+'</span></div>')).appendTo(target);
|
var info = addTargetToExternalLinks($('<div class="red-ui-help"><span class="red-ui-text-bidi-aware" dir=\"'+RED.text.bidi.resolveBaseTextDir(infoText)+'">'+infoText+'</span></div>')).appendTo(target);
|
||||||
info.find(".red-ui-text-bidi-aware").contents().filter(function() { return this.nodeType === 3 && this.textContent.trim() !== "" }).wrap( "<span></span>" );
|
info.find(".red-ui-text-bidi-aware").contents().filter(function() { return this.nodeType === 3 && this.textContent.trim() !== "" }).wrap( "<span></span>" );
|
||||||
@ -447,6 +449,7 @@ RED.sidebar.info = (function() {
|
|||||||
$(this).toggleClass('expanded',!isExpanded);
|
$(this).toggleClass('expanded',!isExpanded);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var tips = (function() {
|
var tips = (function() {
|
||||||
var enabled = true;
|
var enabled = true;
|
||||||
var startDelay = 1000;
|
var startDelay = 1000;
|
||||||
|
@ -171,17 +171,21 @@ RED.typeSearch = (function() {
|
|||||||
var div = $('<div>',{class:"red-ui-search-result"}).appendTo(container);
|
var div = $('<div>',{class:"red-ui-search-result"}).appendTo(container);
|
||||||
|
|
||||||
var nodeDiv = $('<div>',{class:"red-ui-search-result-node"}).appendTo(div);
|
var nodeDiv = $('<div>',{class:"red-ui-search-result-node"}).appendTo(div);
|
||||||
var colour = RED.utils.getNodeColor(object.type,def);
|
if (object.type === "junction") {
|
||||||
|
nodeDiv.addClass("red-ui-palette-icon-junction");
|
||||||
|
} else {
|
||||||
|
var colour = RED.utils.getNodeColor(object.type,def);
|
||||||
|
nodeDiv.css('backgroundColor',colour);
|
||||||
|
}
|
||||||
var icon_url = RED.utils.getNodeIcon(def);
|
var icon_url = RED.utils.getNodeIcon(def);
|
||||||
nodeDiv.css('backgroundColor',colour);
|
|
||||||
|
|
||||||
var iconContainer = $('<div/>',{class:"red-ui-palette-icon-container"}).appendTo(nodeDiv);
|
var iconContainer = $('<div/>',{class:"red-ui-palette-icon-container"}).appendTo(nodeDiv);
|
||||||
RED.utils.createIconElement(icon_url, iconContainer, false);
|
RED.utils.createIconElement(icon_url, iconContainer, false);
|
||||||
|
|
||||||
if (def.inputs > 0) {
|
if (object.type !== "junction" && def.inputs > 0) {
|
||||||
$('<div/>',{class:"red-ui-search-result-node-port"}).appendTo(nodeDiv);
|
$('<div/>',{class:"red-ui-search-result-node-port"}).appendTo(nodeDiv);
|
||||||
}
|
}
|
||||||
if (def.outputs > 0) {
|
if (object.type !== "junction" && def.outputs > 0) {
|
||||||
$('<div/>',{class:"red-ui-search-result-node-port red-ui-search-result-node-output"}).appendTo(nodeDiv);
|
$('<div/>',{class:"red-ui-search-result-node-port red-ui-search-result-node-output"}).appendTo(nodeDiv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -313,8 +317,8 @@ RED.typeSearch = (function() {
|
|||||||
return !filter ||
|
return !filter ||
|
||||||
(
|
(
|
||||||
(!filter.type || type === filter.type) &&
|
(!filter.type || type === filter.type) &&
|
||||||
(!filter.input || def.inputs > 0) &&
|
(!filter.input || type === 'junction' || def.inputs > 0) &&
|
||||||
(!filter.output || def.outputs > 0)
|
(!filter.output || type === 'junction' || def.outputs > 0)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
function refreshTypeList(opts) {
|
function refreshTypeList(opts) {
|
||||||
@ -323,7 +327,7 @@ RED.typeSearch = (function() {
|
|||||||
searchInput.searchBox('value','').focus();
|
searchInput.searchBox('value','').focus();
|
||||||
selected = -1;
|
selected = -1;
|
||||||
var common = [
|
var common = [
|
||||||
'inject','debug','function','change','switch'
|
'inject','debug','function','change','switch','junction'
|
||||||
].filter(function(t) { return applyFilter(opts.filter,t,RED.nodes.getType(t)); });
|
].filter(function(t) { return applyFilter(opts.filter,t,RED.nodes.getType(t)); });
|
||||||
|
|
||||||
var recentlyUsed = Object.keys(typesUsed);
|
var recentlyUsed = Object.keys(typesUsed);
|
||||||
@ -348,6 +352,9 @@ RED.typeSearch = (function() {
|
|||||||
var index = 0;
|
var index = 0;
|
||||||
for(i=0;i<common.length;i++) {
|
for(i=0;i<common.length;i++) {
|
||||||
var itemDef = RED.nodes.getType(common[i]);
|
var itemDef = RED.nodes.getType(common[i]);
|
||||||
|
if (common[i] === 'junction') {
|
||||||
|
itemDef = { inputs:1, outputs: 1, label: 'junction', type: 'junction'}
|
||||||
|
}
|
||||||
if (itemDef) {
|
if (itemDef) {
|
||||||
item = {
|
item = {
|
||||||
type: common[i],
|
type: common[i],
|
||||||
|
@ -365,7 +365,16 @@ RED.utils = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildMessageElement(obj,options) {
|
/**
|
||||||
|
* Create a DOM element representation of obj - as used by Debug sidebar etc
|
||||||
|
*
|
||||||
|
* @params obj - the data to display
|
||||||
|
* @params options - a bag of options
|
||||||
|
*
|
||||||
|
* - If you want the Copy Value button, then set `sourceId`
|
||||||
|
* - If you want the Copy Path button, also set `path` to the value to be copied
|
||||||
|
*/
|
||||||
|
function createObjectElement(obj,options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
var key = options.key;
|
var key = options.key;
|
||||||
var typeHint = options.typeHint;
|
var typeHint = options.typeHint;
|
||||||
@ -555,7 +564,7 @@ RED.utils = (function() {
|
|||||||
if (fullLength <= 10) {
|
if (fullLength <= 10) {
|
||||||
for (i=0;i<fullLength;i++) {
|
for (i=0;i<fullLength;i++) {
|
||||||
row = $('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(arrayRows);
|
row = $('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(arrayRows);
|
||||||
subElements[path+"["+i+"]"] = buildMessageElement(
|
subElements[path+"["+i+"]"] = createObjectElement(
|
||||||
data[i],
|
data[i],
|
||||||
{
|
{
|
||||||
key: ""+i,
|
key: ""+i,
|
||||||
@ -585,7 +594,7 @@ RED.utils = (function() {
|
|||||||
return function() {
|
return function() {
|
||||||
for (var i=min;i<=max;i++) {
|
for (var i=min;i<=max;i++) {
|
||||||
var row = $('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(parent);
|
var row = $('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(parent);
|
||||||
subElements[path+"["+i+"]"] = buildMessageElement(
|
subElements[path+"["+i+"]"] = createObjectElement(
|
||||||
data[i],
|
data[i],
|
||||||
{
|
{
|
||||||
key: ""+i,
|
key: ""+i,
|
||||||
@ -641,7 +650,7 @@ RED.utils = (function() {
|
|||||||
newPath += "[\""+keys[i].replace(/"/,"\\\"")+"\"]"
|
newPath += "[\""+keys[i].replace(/"/,"\\\"")+"\"]"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
subElements[newPath] = buildMessageElement(
|
subElements[newPath] = createObjectElement(
|
||||||
data[keys[i]],
|
data[keys[i]],
|
||||||
{
|
{
|
||||||
key: keys[i],
|
key: keys[i],
|
||||||
@ -1019,6 +1028,8 @@ RED.utils = (function() {
|
|||||||
return "font-awesome/fa-object-ungroup";
|
return "font-awesome/fa-object-ungroup";
|
||||||
} else if (node && node.type === 'group') {
|
} else if (node && node.type === 'group') {
|
||||||
return "font-awesome/fa-object-group"
|
return "font-awesome/fa-object-group"
|
||||||
|
} else if ((node && node.type === 'junction') || (def.type === "junction") ) {
|
||||||
|
return "font-awesome/fa-circle-o"
|
||||||
} else if (def.category === 'config') {
|
} else if (def.category === 'config') {
|
||||||
return RED.settings.apiRootUrl+"icons/node-red/cog.svg"
|
return RED.settings.apiRootUrl+"icons/node-red/cog.svg"
|
||||||
} else if (node && node.type === 'tab') {
|
} else if (node && node.type === 'tab') {
|
||||||
@ -1084,6 +1095,8 @@ RED.utils = (function() {
|
|||||||
l = node.label || defaultLabel
|
l = node.label || defaultLabel
|
||||||
} else if (node.type === 'group') {
|
} else if (node.type === 'group') {
|
||||||
l = node.name || defaultLabel
|
l = node.name || defaultLabel
|
||||||
|
} else if (node.type === 'junction') {
|
||||||
|
l = 'junction'
|
||||||
} else {
|
} else {
|
||||||
l = node._def.label;
|
l = node._def.label;
|
||||||
try {
|
try {
|
||||||
@ -1096,6 +1109,18 @@ RED.utils = (function() {
|
|||||||
return RED.text.bidi.enforceTextDirectionWithUCC(l);
|
return RED.text.bidi.enforceTextDirectionWithUCC(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPaletteLabel(nodeType, def) {
|
||||||
|
var label = nodeType;
|
||||||
|
if (typeof def.paletteLabel !== "undefined") {
|
||||||
|
try {
|
||||||
|
label = (typeof def.paletteLabel === "function" ? def.paletteLabel.call(def) : def.paletteLabel)||"";
|
||||||
|
} catch(err) {
|
||||||
|
console.log("Definition error: "+nodeType+".paletteLabel",err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return label
|
||||||
|
}
|
||||||
|
|
||||||
var nodeColorCache = {};
|
var nodeColorCache = {};
|
||||||
function clearNodeColorCache() {
|
function clearNodeColorCache() {
|
||||||
nodeColorCache = {};
|
nodeColorCache = {};
|
||||||
@ -1238,6 +1263,8 @@ RED.utils = (function() {
|
|||||||
nodeDiv.addClass("red-ui-palette-icon-selection");
|
nodeDiv.addClass("red-ui-palette-icon-selection");
|
||||||
} else if (node.type === "group") {
|
} else if (node.type === "group") {
|
||||||
nodeDiv.addClass("red-ui-palette-icon-group");
|
nodeDiv.addClass("red-ui-palette-icon-group");
|
||||||
|
} else if (node.type === "junction") {
|
||||||
|
nodeDiv.addClass("red-ui-palette-icon-junction");
|
||||||
} else if (node.type === 'tab') {
|
} else if (node.type === 'tab') {
|
||||||
nodeDiv.addClass("red-ui-palette-icon-flow");
|
nodeDiv.addClass("red-ui-palette-icon-flow");
|
||||||
} else {
|
} else {
|
||||||
@ -1369,7 +1396,7 @@ RED.utils = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
createObjectElement: buildMessageElement,
|
createObjectElement: createObjectElement,
|
||||||
getMessageProperty: getMessageProperty,
|
getMessageProperty: getMessageProperty,
|
||||||
setMessageProperty: setMessageProperty,
|
setMessageProperty: setMessageProperty,
|
||||||
normalisePropertyExpression: normalisePropertyExpression,
|
normalisePropertyExpression: normalisePropertyExpression,
|
||||||
@ -1379,6 +1406,7 @@ RED.utils = (function() {
|
|||||||
getNodeIcon: getNodeIcon,
|
getNodeIcon: getNodeIcon,
|
||||||
getNodeLabel: getNodeLabel,
|
getNodeLabel: getNodeLabel,
|
||||||
getNodeColor: getNodeColor,
|
getNodeColor: getNodeColor,
|
||||||
|
getPaletteLabel: getPaletteLabel,
|
||||||
clearNodeColorCache: clearNodeColorCache,
|
clearNodeColorCache: clearNodeColorCache,
|
||||||
addSpinnerOverlay: addSpinnerOverlay,
|
addSpinnerOverlay: addSpinnerOverlay,
|
||||||
decodeObject: decodeObject,
|
decodeObject: decodeObject,
|
||||||
|
@ -809,6 +809,231 @@ RED.view.tools = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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) {
|
||||||
|
let wiresToSplit = wires || RED.view.selection().links;
|
||||||
|
if (!Array.isArray(wiresToSplit)) {
|
||||||
|
wiresToSplit = [wiresToSplit];
|
||||||
|
}
|
||||||
|
if (wiresToSplit.length < 1) {
|
||||||
|
return; //nothing selected
|
||||||
|
}
|
||||||
|
|
||||||
|
const history = {
|
||||||
|
t: 'multi',
|
||||||
|
events: [],
|
||||||
|
dirty: RED.nodes.dirty()
|
||||||
|
}
|
||||||
|
const nodeSrcMap = {};
|
||||||
|
const nodeTrgMap = {};
|
||||||
|
const _gridSize = RED.view.gridSize();
|
||||||
|
|
||||||
|
for (let wireIdx = 0; wireIdx < wiresToSplit.length; wireIdx++) {
|
||||||
|
const wire = wiresToSplit[wireIdx];
|
||||||
|
|
||||||
|
//get source and target nodes of this wire link
|
||||||
|
const nSrc = wire.source;
|
||||||
|
const nTrg = wire.target;
|
||||||
|
|
||||||
|
var updateNewNodePosXY = function (origNode, newNode, alignLeft, snap, yOffset) {
|
||||||
|
const nnSize = RED.view.calculateNodeDimensions(newNode);
|
||||||
|
newNode.w = nnSize[0];
|
||||||
|
newNode.h = nnSize[1];
|
||||||
|
const coords = { x: origNode.x || 0, y: origNode.y || 0, w: origNode.w || RED.view.node_width, h: origNode.h || RED.view.node_height };
|
||||||
|
const x = coords.x - (coords.w/2.0);
|
||||||
|
if (alignLeft) {
|
||||||
|
coords.x = x - _gridSize - (newNode.w/2.0);
|
||||||
|
} else {
|
||||||
|
coords.x = x + coords.w + _gridSize + (newNode.w/2.0);
|
||||||
|
}
|
||||||
|
newNode.x = coords.x;
|
||||||
|
newNode.y = coords.y;
|
||||||
|
if (snap !== false) {
|
||||||
|
const offsets = RED.view.tools.calculateGridSnapOffsets(newNode);
|
||||||
|
newNode.x -= offsets.x;
|
||||||
|
newNode.y -= offsets.y;
|
||||||
|
}
|
||||||
|
newNode.y += (yOffset || 0);
|
||||||
|
}
|
||||||
|
const srcPort = (wire.sourcePort || 0);
|
||||||
|
let linkOutMapId = nSrc.id + ':' + srcPort;
|
||||||
|
let nnLinkOut = nodeSrcMap[linkOutMapId];
|
||||||
|
//Create a Link Out if one is not already present
|
||||||
|
if(!nnLinkOut) {
|
||||||
|
const nLinkOut = RED.view.createNode("link out"); //create link node
|
||||||
|
nnLinkOut = nLinkOut.node;
|
||||||
|
nodeSrcMap[linkOutMapId] = nnLinkOut;
|
||||||
|
let yOffset = 0;
|
||||||
|
if(nSrc.outputs > 1) {
|
||||||
|
|
||||||
|
const CENTER_PORT = (((nSrc.outputs-1) / 2) + 1);
|
||||||
|
const offsetCount = Math.abs(CENTER_PORT - (srcPort + 1));
|
||||||
|
yOffset = (_gridSize * 2 * offsetCount);
|
||||||
|
if((srcPort + 1) < CENTER_PORT) {
|
||||||
|
yOffset = -yOffset;
|
||||||
|
}
|
||||||
|
updateNewNodePosXY(nSrc, nnLinkOut, false, false, yOffset);
|
||||||
|
} else {
|
||||||
|
updateNewNodePosXY(nSrc, nnLinkOut, false, RED.view.snapGrid, yOffset);
|
||||||
|
}
|
||||||
|
//add created node
|
||||||
|
RED.nodes.add(nnLinkOut);
|
||||||
|
RED.editor.validateNode(nnLinkOut);
|
||||||
|
history.events.push(nLinkOut.historyEvent);
|
||||||
|
//connect node to link node
|
||||||
|
const link = {
|
||||||
|
source: nSrc,
|
||||||
|
sourcePort: wire.sourcePort || 0,
|
||||||
|
target: nnLinkOut
|
||||||
|
};
|
||||||
|
RED.nodes.addLink(link);
|
||||||
|
history.events.push({
|
||||||
|
t: 'add',
|
||||||
|
links: [link],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let nnLinkIn = nodeTrgMap[nTrg.id];
|
||||||
|
//Create a Link In if one is not already present
|
||||||
|
if(!nnLinkIn) {
|
||||||
|
const nLinkIn = RED.view.createNode("link in"); //create link node
|
||||||
|
nnLinkIn = nLinkIn.node;
|
||||||
|
nodeTrgMap[nTrg.id] = nnLinkIn;
|
||||||
|
updateNewNodePosXY(nTrg, nnLinkIn, true, RED.view.snapGrid, 0);
|
||||||
|
//add created node
|
||||||
|
RED.nodes.add(nnLinkIn);
|
||||||
|
RED.editor.validateNode(nnLinkIn);
|
||||||
|
history.events.push(nLinkIn.historyEvent);
|
||||||
|
//connect node to link node
|
||||||
|
const link = {
|
||||||
|
source: nnLinkIn,
|
||||||
|
sourcePort: 0,
|
||||||
|
target: nTrg
|
||||||
|
};
|
||||||
|
RED.nodes.addLink(link);
|
||||||
|
history.events.push({
|
||||||
|
t: 'add',
|
||||||
|
links: [link],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//connect the link out/link in virtual wires
|
||||||
|
if(nnLinkIn.links.indexOf(nnLinkOut.id) == -1) {
|
||||||
|
nnLinkIn.links.push(nnLinkOut.id);
|
||||||
|
}
|
||||||
|
if(nnLinkOut.links.indexOf(nnLinkIn.id) == -1) {
|
||||||
|
nnLinkOut.links.push(nnLinkIn.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
//delete the original wire
|
||||||
|
RED.nodes.removeLink(wire);
|
||||||
|
history.events.push({
|
||||||
|
t: "delete",
|
||||||
|
links: [wire]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//add all history events to stack
|
||||||
|
RED.history.push(history);
|
||||||
|
|
||||||
|
//select all downstream of new link-in nodes so user can drag to new location
|
||||||
|
RED.view.clearSelection();
|
||||||
|
RED.view.select({nodes: Object.values(nodeTrgMap) });
|
||||||
|
selectConnected("down");
|
||||||
|
|
||||||
|
//update the view
|
||||||
|
RED.nodes.dirty(true);
|
||||||
|
RED.view.redraw(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the required offsets to snap a node
|
||||||
|
* @param {Object} node The node to calculate grid snap offsets for
|
||||||
|
* @param {Object} [options] Options: `align` can be "nearest", "left" or "right"
|
||||||
|
* @returns `{x:number, y:number}` as the offsets to deduct from `x` and `y`
|
||||||
|
*/
|
||||||
|
function calculateGridSnapOffsets(node, options) {
|
||||||
|
options = options || { align: "nearest" };
|
||||||
|
const gridOffset = { x: 0, y: 0 };
|
||||||
|
const gridSize = RED.view.gridSize();
|
||||||
|
const offsetLeft = node.x - (gridSize * Math.round((node.x - node.w / 2) / gridSize) + node.w / 2);
|
||||||
|
const offsetRight = node.x - (gridSize * Math.round((node.x + node.w / 2) / gridSize) - node.w / 2);
|
||||||
|
gridOffset.x = offsetRight;
|
||||||
|
if (options.align === "right") {
|
||||||
|
//skip - already set to right
|
||||||
|
} else if (options.align === "left" || Math.abs(offsetLeft) < Math.abs(offsetRight)) {
|
||||||
|
gridOffset.x = offsetLeft;
|
||||||
|
}
|
||||||
|
gridOffset.y = node.y - (gridSize * Math.round(node.y / gridSize));
|
||||||
|
return gridOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate names for the select nodes.
|
||||||
|
* - it only sets the name if it is currently blank
|
||||||
|
* - it uses `<paletteLabel> <N>` - where N is the next available integer that
|
||||||
|
* doesn't clash with any existing nodes of that type
|
||||||
|
* @param {Object} node The node to set the name of - if not provided, uses current selection
|
||||||
|
*/
|
||||||
|
function generateNodeNames(node) {
|
||||||
|
const nodes = node?[node]:RED.view.selection().nodes;
|
||||||
|
if (nodes && nodes.length > 0) {
|
||||||
|
// Generate history event if using the workspace selection,
|
||||||
|
// or if the provided node already exists
|
||||||
|
const generateHistory = !node || !!RED.nodes.node(node.id)
|
||||||
|
const historyEvents = []
|
||||||
|
const typeIndex = {}
|
||||||
|
let changed = false;
|
||||||
|
nodes.forEach(n => {
|
||||||
|
if (n._def && n._def.defaults && n._def.defaults.name) {
|
||||||
|
const paletteLabel = RED.utils.getPaletteLabel(n.type, n._def)
|
||||||
|
const defaultNodeNameRE = new RegExp('^'+paletteLabel+' (\\d+)$')
|
||||||
|
if (!typeIndex.hasOwnProperty(n.type)) {
|
||||||
|
const existingNodes = RED.nodes.filterNodes({type: n.type})
|
||||||
|
let maxNameNumber = 0;
|
||||||
|
existingNodes.forEach(n => {
|
||||||
|
let match = defaultNodeNameRE.exec(n.name)
|
||||||
|
if (match) {
|
||||||
|
let nodeNumber = parseInt(match[1])
|
||||||
|
if (nodeNumber > maxNameNumber) {
|
||||||
|
maxNameNumber = nodeNumber
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
typeIndex[n.type] = maxNameNumber + 1
|
||||||
|
}
|
||||||
|
if (n.name === '') {
|
||||||
|
if (generateHistory) {
|
||||||
|
historyEvents.push({
|
||||||
|
t:'edit',
|
||||||
|
node: n,
|
||||||
|
changes: { name: n.name },
|
||||||
|
dirty: RED.nodes.dirty(),
|
||||||
|
changed: n.changed
|
||||||
|
})
|
||||||
|
}
|
||||||
|
n.name = paletteLabel+" "+typeIndex[n.type]
|
||||||
|
n.dirty = true
|
||||||
|
typeIndex[n.type]++
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (changed) {
|
||||||
|
if (historyEvents.length > 0) {
|
||||||
|
RED.history.push({
|
||||||
|
t: 'multi',
|
||||||
|
events: historyEvents
|
||||||
|
})
|
||||||
|
}
|
||||||
|
RED.nodes.dirty(true)
|
||||||
|
RED.view.redraw()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
init: function() {
|
init: function() {
|
||||||
RED.actions.add("core:show-selected-node-labels", function() { setSelectedNodeLabelState(true); })
|
RED.actions.add("core:show-selected-node-labels", function() { setSelectedNodeLabelState(true); })
|
||||||
@ -870,6 +1095,10 @@ RED.view.tools = (function() {
|
|||||||
RED.actions.add("core:wire-series-of-nodes", function() { wireSeriesOfNodes() })
|
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-node-to-multiple", function() { wireNodeToMultiple() })
|
||||||
|
|
||||||
|
RED.actions.add("core:split-wire-with-link-nodes", function () { splitWiresWithLinkNodes() });
|
||||||
|
|
||||||
|
RED.actions.add("core:generate-node-names", generateNodeNames )
|
||||||
|
|
||||||
// RED.actions.add("core:add-node", function() { addNode() })
|
// RED.actions.add("core:add-node", function() { addNode() })
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
@ -881,7 +1110,8 @@ RED.view.tools = (function() {
|
|||||||
* @param {Number} dx
|
* @param {Number} dx
|
||||||
* @param {Number} dy
|
* @param {Number} dy
|
||||||
*/
|
*/
|
||||||
moveSelection: moveSelection
|
moveSelection: moveSelection,
|
||||||
|
calculateGridSnapOffsets: calculateGridSnapOffsets
|
||||||
}
|
}
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
* |- <g> "groupLayer"
|
* |- <g> "groupLayer"
|
||||||
* |- <g> "groupSelectLayer"
|
* |- <g> "groupSelectLayer"
|
||||||
* |- <g> "linkLayer"
|
* |- <g> "linkLayer"
|
||||||
|
* |- <g> "junctionLayer"
|
||||||
* |- <g> "dragGroupLayer"
|
* |- <g> "dragGroupLayer"
|
||||||
* |- <g> "nodeLayer"
|
* |- <g> "nodeLayer"
|
||||||
*/
|
*/
|
||||||
@ -56,6 +57,7 @@ RED.view = (function() {
|
|||||||
var activeSubflow = null;
|
var activeSubflow = null;
|
||||||
var activeNodes = [];
|
var activeNodes = [];
|
||||||
var activeLinks = [];
|
var activeLinks = [];
|
||||||
|
var activeJunctions = [];
|
||||||
var activeFlowLinks = [];
|
var activeFlowLinks = [];
|
||||||
var activeLinkNodes = {};
|
var activeLinkNodes = {};
|
||||||
var activeGroup = null;
|
var activeGroup = null;
|
||||||
@ -90,6 +92,9 @@ RED.view = (function() {
|
|||||||
var lastClickPosition = [];
|
var lastClickPosition = [];
|
||||||
var selectNodesOptions;
|
var selectNodesOptions;
|
||||||
|
|
||||||
|
let flashingNodeId;
|
||||||
|
let flashingNodeTimer;
|
||||||
|
|
||||||
var clipboard = "";
|
var clipboard = "";
|
||||||
|
|
||||||
// Note: these are the permitted status colour aliases. The actual RGB values
|
// Note: these are the permitted status colour aliases. The actual RGB values
|
||||||
@ -111,6 +116,7 @@ RED.view = (function() {
|
|||||||
var eventLayer;
|
var eventLayer;
|
||||||
var gridLayer;
|
var gridLayer;
|
||||||
var linkLayer;
|
var linkLayer;
|
||||||
|
var junctionLayer;
|
||||||
var dragGroupLayer;
|
var dragGroupLayer;
|
||||||
var groupSelectLayer;
|
var groupSelectLayer;
|
||||||
var nodeLayer;
|
var nodeLayer;
|
||||||
@ -199,6 +205,11 @@ RED.view = (function() {
|
|||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
|
|
||||||
|
// setTimeout(function() {
|
||||||
|
// function snap(p) { return RED.view.gridSize() * Math.round(p/RED.view.gridSize())}; for (var i = 0;i<10;i++) {
|
||||||
|
// RED.nodes.addJunction({_def:{defaults:{}}, type:'junction', z:"0ccdc1d81f2729cc",id:RED.nodes.id(),x:snap(Math.floor(Math.random()*600)),y:snap(Math.floor(Math.random()*600)), w:0,h:0})
|
||||||
|
// } ; RED.view.redraw(true)
|
||||||
|
// },2000)
|
||||||
chart = $("#red-ui-workspace-chart");
|
chart = $("#red-ui-workspace-chart");
|
||||||
|
|
||||||
outer = d3.select("#red-ui-workspace-chart")
|
outer = d3.select("#red-ui-workspace-chart")
|
||||||
@ -373,6 +384,7 @@ RED.view = (function() {
|
|||||||
groupSelectLayer = eventLayer.append("g");
|
groupSelectLayer = eventLayer.append("g");
|
||||||
linkLayer = eventLayer.append("g");
|
linkLayer = eventLayer.append("g");
|
||||||
dragGroupLayer = eventLayer.append("g");
|
dragGroupLayer = eventLayer.append("g");
|
||||||
|
junctionLayer = eventLayer.append("g");
|
||||||
nodeLayer = eventLayer.append("g");
|
nodeLayer = eventLayer.append("g");
|
||||||
|
|
||||||
drag_lines = [];
|
drag_lines = [];
|
||||||
@ -443,13 +455,40 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//add search to status-toolbar
|
||||||
|
RED.statusBar.add({
|
||||||
|
id: "view-search-tools",
|
||||||
|
align: "left",
|
||||||
|
hidden: false,
|
||||||
|
element: $('<span class="button-group">'+
|
||||||
|
'<button class="red-ui-footer-button" id="red-ui-view-searchtools-search"><i class="fa fa-search"></i></button>' +
|
||||||
|
'</span>' +
|
||||||
|
'<span class="button-group search-counter">' +
|
||||||
|
'<span class="red-ui-footer-button" id="red-ui-view-searchtools-counter">? of ?</span>' +
|
||||||
|
'</span>' +
|
||||||
|
'<span class="button-group">' +
|
||||||
|
'<button class="red-ui-footer-button" id="red-ui-view-searchtools-prev"><i class="fa fa-chevron-left"></i></button>' +
|
||||||
|
'<button class="red-ui-footer-button" id="red-ui-view-searchtools-next"><i class="fa fa-chevron-right"></i></button>' +
|
||||||
|
'</span>' +
|
||||||
|
'<span class="button-group">' +
|
||||||
|
'<button class="red-ui-footer-button" id="red-ui-view-searchtools-close"><i class="fa fa-close"></i></button>' +
|
||||||
|
'</span>')
|
||||||
|
})
|
||||||
|
$("#red-ui-view-searchtools-search").on("click", searchFlows);
|
||||||
|
RED.popover.tooltip($("#red-ui-view-searchtools-search"),RED._('actions.search-flows'),'core:search');
|
||||||
|
$("#red-ui-view-searchtools-prev").on("click", searchPrev);
|
||||||
|
RED.popover.tooltip($("#red-ui-view-searchtools-prev"),RED._('actions.search-prev'),'core:search-previous');
|
||||||
|
$("#red-ui-view-searchtools-next").on("click", searchNext);
|
||||||
|
RED.popover.tooltip($("#red-ui-view-searchtools-next"),RED._('actions.search-next'),'core:search-next');
|
||||||
|
RED.popover.tooltip($("#red-ui-view-searchtools-close"),RED._('common.label.close'));
|
||||||
|
|
||||||
// Handle nodes dragged from the palette
|
// Handle nodes dragged from the palette
|
||||||
chart.droppable({
|
chart.droppable({
|
||||||
accept:".red-ui-palette-node",
|
accept:".red-ui-palette-node",
|
||||||
drop: function( event, ui ) {
|
drop: function( event, ui ) {
|
||||||
d3.event = event;
|
d3.event = event;
|
||||||
var selected_tool = $(ui.draggable[0]).attr("data-palette-type");
|
var selected_tool = $(ui.draggable[0]).attr("data-palette-type");
|
||||||
var result = addNode(selected_tool);
|
var result = createNode(selected_tool);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -493,17 +532,9 @@ RED.view = (function() {
|
|||||||
nn.y = mousePos[1];
|
nn.y = mousePos[1];
|
||||||
|
|
||||||
if (snapGrid) {
|
if (snapGrid) {
|
||||||
var gridOffset = [0,0];
|
var gridOffset = RED.view.tools.calculateGridSnapOffsets(nn);
|
||||||
var offsetLeft = nn.x-(gridSize*Math.round((nn.x-nn.w/2)/gridSize)+nn.w/2);
|
nn.x -= gridOffset.x;
|
||||||
var offsetRight = nn.x-(gridSize*Math.round((nn.x+nn.w/2)/gridSize)-nn.w/2);
|
nn.y -= gridOffset.y;
|
||||||
if (Math.abs(offsetLeft) < Math.abs(offsetRight)) {
|
|
||||||
gridOffset[0] = offsetLeft
|
|
||||||
} else {
|
|
||||||
gridOffset[0] = offsetRight
|
|
||||||
}
|
|
||||||
gridOffset[1] = nn.y-(gridSize*Math.round(nn.y/gridSize));
|
|
||||||
nn.x -= gridOffset[0];
|
|
||||||
nn.y -= gridOffset[1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var spliceLink = $(ui.helper).data("splice");
|
var spliceLink = $(ui.helper).data("splice");
|
||||||
@ -793,7 +824,7 @@ RED.view = (function() {
|
|||||||
source:{z:activeWorkspace},
|
source:{z:activeWorkspace},
|
||||||
target:{z:activeWorkspace}
|
target:{z:activeWorkspace}
|
||||||
});
|
});
|
||||||
|
activeJunctions = RED.nodes.junctions(activeWorkspace) || [];
|
||||||
activeGroups = RED.nodes.groups(activeWorkspace)||[];
|
activeGroups = RED.nodes.groups(activeWorkspace)||[];
|
||||||
activeGroups.forEach(function(g, i) {
|
activeGroups.forEach(function(g, i) {
|
||||||
g._index = i;
|
g._index = i;
|
||||||
@ -808,6 +839,7 @@ RED.view = (function() {
|
|||||||
} else {
|
} else {
|
||||||
activeNodes = [];
|
activeNodes = [];
|
||||||
activeLinks = [];
|
activeLinks = [];
|
||||||
|
activeJunctions = [];
|
||||||
activeGroups = [];
|
activeGroups = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -927,81 +959,6 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addNode(type,x,y) {
|
|
||||||
var m = /^subflow:(.+)$/.exec(type);
|
|
||||||
|
|
||||||
if (activeSubflow && m) {
|
|
||||||
var subflowId = m[1];
|
|
||||||
if (subflowId === activeSubflow.id) {
|
|
||||||
RED.notify(RED._("notification.error",{message: RED._("notification.errors.cannotAddSubflowToItself")}),"error");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (RED.nodes.subflowContains(m[1],activeSubflow.id)) {
|
|
||||||
RED.notify(RED._("notification.error",{message: RED._("notification.errors.cannotAddCircularReference")}),"error");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var nn = { id:RED.nodes.id(),z:RED.workspaces.active()};
|
|
||||||
|
|
||||||
nn.type = type;
|
|
||||||
nn._def = RED.nodes.getType(nn.type);
|
|
||||||
|
|
||||||
if (!m) {
|
|
||||||
nn.inputs = nn._def.inputs || 0;
|
|
||||||
nn.outputs = nn._def.outputs;
|
|
||||||
|
|
||||||
for (var d in nn._def.defaults) {
|
|
||||||
if (nn._def.defaults.hasOwnProperty(d)) {
|
|
||||||
if (nn._def.defaults[d].value !== undefined) {
|
|
||||||
nn[d] = JSON.parse(JSON.stringify(nn._def.defaults[d].value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nn._def.onadd) {
|
|
||||||
try {
|
|
||||||
nn._def.onadd.call(nn);
|
|
||||||
} catch(err) {
|
|
||||||
console.log("Definition error: "+nn.type+".onadd:",err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var subflow = RED.nodes.subflow(m[1]);
|
|
||||||
nn.name = "";
|
|
||||||
nn.inputs = subflow.in.length;
|
|
||||||
nn.outputs = subflow.out.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
nn.changed = true;
|
|
||||||
nn.moved = true;
|
|
||||||
|
|
||||||
nn.w = node_width;
|
|
||||||
nn.h = Math.max(node_height,(nn.outputs||0) * 15);
|
|
||||||
nn.resize = true;
|
|
||||||
|
|
||||||
var historyEvent = {
|
|
||||||
t:"add",
|
|
||||||
nodes:[nn.id],
|
|
||||||
dirty:RED.nodes.dirty()
|
|
||||||
}
|
|
||||||
if (activeSubflow) {
|
|
||||||
var subflowRefresh = RED.subflow.refresh(true);
|
|
||||||
if (subflowRefresh) {
|
|
||||||
historyEvent.subflow = {
|
|
||||||
id:activeSubflow.id,
|
|
||||||
changed: activeSubflow.changed,
|
|
||||||
instances: subflowRefresh.instances
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
node: nn,
|
|
||||||
historyEvent: historyEvent
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function canvasMouseDown() {
|
function canvasMouseDown() {
|
||||||
if (RED.view.DEBUG) { console.warn("canvasMouseDown", mouse_mode); }
|
if (RED.view.DEBUG) { console.warn("canvasMouseDown", mouse_mode); }
|
||||||
var point;
|
var point;
|
||||||
@ -1053,9 +1010,9 @@ RED.view = (function() {
|
|||||||
.attr("class","nr-ui-view-lasso");
|
.attr("class","nr-ui-view-lasso");
|
||||||
d3.event.preventDefault();
|
d3.event.preventDefault();
|
||||||
}
|
}
|
||||||
} else if (mouse_mode === 0 && d3.event.button === 2 && (d3.event.metaKey || d3.event.ctrlKey)) {
|
} else if (mouse_mode === 0 && d3.event.button === 2 && (d3.event.metaKey || d3.event.ctrlKey || d3.event.shiftKey)) {
|
||||||
clearSelection();
|
clearSelection();
|
||||||
mouse_mode = RED.state.SLICING;
|
mouse_mode = (d3.event.metaKey || d3.event.ctrlKey)?RED.state.SLICING : RED.state.SLICING_JUNCTION;
|
||||||
point = d3.mouse(this);
|
point = d3.mouse(this);
|
||||||
slicePath = eventLayer.append("path").attr("class","nr-ui-view-slice").attr("d",`M${point[0]} ${point[1]}`)
|
slicePath = eventLayer.append("path").attr("class","nr-ui-view-slice").attr("d",`M${point[0]} ${point[1]}`)
|
||||||
slicePathLast = point;
|
slicePathLast = point;
|
||||||
@ -1190,16 +1147,38 @@ RED.view = (function() {
|
|||||||
keepAdding = false;
|
keepAdding = false;
|
||||||
resetMouseVars();
|
resetMouseVars();
|
||||||
}
|
}
|
||||||
var result = addNode(type);
|
|
||||||
if (!result) {
|
var nn;
|
||||||
return;
|
var historyEvent;
|
||||||
|
if (type === 'junction') {
|
||||||
|
nn = {
|
||||||
|
_def: {defaults:{}},
|
||||||
|
type: 'junction',
|
||||||
|
z: RED.workspaces.active(),
|
||||||
|
id: RED.nodes.id(),
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
w: 0, h: 0,
|
||||||
|
outputs: 1,
|
||||||
|
inputs: 1,
|
||||||
|
dirty: true
|
||||||
|
}
|
||||||
|
historyEvent = {
|
||||||
|
t:'add',
|
||||||
|
junctions:[nn]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var result = createNode(type);
|
||||||
|
if (!result) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
nn = result.node;
|
||||||
|
historyEvent = result.historyEvent;
|
||||||
}
|
}
|
||||||
if (keepAdding) {
|
if (keepAdding) {
|
||||||
mouse_mode = RED.state.QUICK_JOINING;
|
mouse_mode = RED.state.QUICK_JOINING;
|
||||||
}
|
}
|
||||||
|
|
||||||
var nn = result.node;
|
|
||||||
var historyEvent = result.historyEvent;
|
|
||||||
nn.x = point[0];
|
nn.x = point[0];
|
||||||
nn.y = point[1];
|
nn.y = point[1];
|
||||||
var showLabel = RED.utils.getMessageProperty(RED.settings.get('editor'),"view.view-node-show-label");
|
var showLabel = RED.utils.getMessageProperty(RED.settings.get('editor'),"view.view-node-show-label");
|
||||||
@ -1308,8 +1287,11 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (nn.type === 'junction') {
|
||||||
RED.nodes.add(nn);
|
RED.nodes.addJunction(nn);
|
||||||
|
} else {
|
||||||
|
RED.nodes.add(nn);
|
||||||
|
}
|
||||||
RED.editor.validateNode(nn);
|
RED.editor.validateNode(nn);
|
||||||
|
|
||||||
if (targetGroup) {
|
if (targetGroup) {
|
||||||
@ -1456,7 +1438,7 @@ RED.view = (function() {
|
|||||||
.attr("height",h)
|
.attr("height",h)
|
||||||
;
|
;
|
||||||
return;
|
return;
|
||||||
} else if (mouse_mode === RED.state.SLICING) {
|
} else if (mouse_mode === RED.state.SLICING || mouse_mode === RED.state.SLICING_JUNCTION) {
|
||||||
if (slicePath) {
|
if (slicePath) {
|
||||||
var delta = Math.max(1,Math.abs(slicePathLast[0]-mouse_position[0]))*Math.max(1,Math.abs(slicePathLast[1]-mouse_position[1]))
|
var delta = Math.max(1,Math.abs(slicePathLast[0]-mouse_position[0]))*Math.max(1,Math.abs(slicePathLast[1]-mouse_position[1]))
|
||||||
if (delta > 20) {
|
if (delta > 20) {
|
||||||
@ -1643,16 +1625,9 @@ RED.view = (function() {
|
|||||||
gridOffset[0] = node.n.x-(gridSize*Math.floor(node.n.x/gridSize))-gridSize/2;
|
gridOffset[0] = node.n.x-(gridSize*Math.floor(node.n.x/gridSize))-gridSize/2;
|
||||||
gridOffset[1] = node.n.y-(gridSize*Math.floor(node.n.y/gridSize))-gridSize/2;
|
gridOffset[1] = node.n.y-(gridSize*Math.floor(node.n.y/gridSize))-gridSize/2;
|
||||||
} else {
|
} else {
|
||||||
var offsetLeft = node.n.x-(gridSize*Math.round((node.n.x-node.n.w/2)/gridSize)+node.n.w/2);
|
const snapOffsets = RED.view.tools.calculateGridSnapOffsets(node.n);
|
||||||
var offsetRight = node.n.x-(gridSize*Math.round((node.n.x+node.n.w/2)/gridSize)-node.n.w/2);
|
gridOffset[0] = snapOffsets.x;
|
||||||
// gridOffset[0] = node.n.x-(gridSize*Math.floor((node.n.x-node.n.w/2)/gridSize)+node.n.w/2);
|
gridOffset[1] = snapOffsets.y;
|
||||||
if (Math.abs(offsetLeft) < Math.abs(offsetRight)) {
|
|
||||||
gridOffset[0] = offsetLeft
|
|
||||||
} else {
|
|
||||||
gridOffset[0] = offsetRight
|
|
||||||
}
|
|
||||||
gridOffset[1] = node.n.y-(gridSize*Math.round(node.n.y/gridSize));
|
|
||||||
// console.log(offsetLeft, offsetRight);
|
|
||||||
}
|
}
|
||||||
if (gridOffset[0] !== 0 || gridOffset[1] !== 0) {
|
if (gridOffset[0] !== 0 || gridOffset[1] !== 0) {
|
||||||
for (i = 0; i<movingSet.length(); i++) {
|
for (i = 0; i<movingSet.length(); i++) {
|
||||||
@ -1829,6 +1804,15 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
activeJunctions.forEach(function(n) {
|
||||||
|
if (!n.selected) {
|
||||||
|
if (n.x > x && n.x < x2 && n.y > y && n.y < y2) {
|
||||||
|
n.selected = true;
|
||||||
|
n.dirty = true;
|
||||||
|
movingSet.add(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1872,11 +1856,92 @@ RED.view = (function() {
|
|||||||
} else if (mouse_mode == RED.state.DEFAULT && mousedown_link == null && !d3.event.ctrlKey && !d3.event.metaKey ) {
|
} else if (mouse_mode == RED.state.DEFAULT && mousedown_link == null && !d3.event.ctrlKey && !d3.event.metaKey ) {
|
||||||
clearSelection();
|
clearSelection();
|
||||||
updateSelection();
|
updateSelection();
|
||||||
} else if (slicePath) {
|
} else if (mouse_mode == RED.state.SLICING) {
|
||||||
deleteSelection();
|
deleteSelection();
|
||||||
slicePath.remove();
|
slicePath.remove();
|
||||||
slicePath = null;
|
slicePath = null;
|
||||||
RED.view.redraw(true);
|
RED.view.redraw(true);
|
||||||
|
} else if (mouse_mode == RED.state.SLICING_JUNCTION) {
|
||||||
|
var removedLinks = []
|
||||||
|
var addedLinks = []
|
||||||
|
var addedJunctions = []
|
||||||
|
|
||||||
|
var groupedLinks = {}
|
||||||
|
selectedLinks.forEach(function(l) {
|
||||||
|
var sourceId = l.source.id+":"+l.sourcePort
|
||||||
|
groupedLinks[sourceId] = groupedLinks[sourceId] || []
|
||||||
|
groupedLinks[sourceId].push(l)
|
||||||
|
});
|
||||||
|
var linkGroups = Object.keys(groupedLinks)
|
||||||
|
linkGroups.forEach(function(gid) {
|
||||||
|
var links = groupedLinks[gid]
|
||||||
|
var junction = {
|
||||||
|
_def: {defaults:{}},
|
||||||
|
type: 'junction',
|
||||||
|
z: RED.workspaces.active(),
|
||||||
|
id: RED.nodes.id(),
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
w: 0, h: 0,
|
||||||
|
outputs: 1,
|
||||||
|
inputs: 1,
|
||||||
|
dirty: true
|
||||||
|
}
|
||||||
|
links.forEach(function(l) {
|
||||||
|
junction.x += l._sliceLocation.x
|
||||||
|
junction.y += l._sliceLocation.y
|
||||||
|
})
|
||||||
|
junction.x = Math.round(junction.x/links.length)
|
||||||
|
junction.y = Math.round(junction.y/links.length)
|
||||||
|
if (snapGrid) {
|
||||||
|
junction.x = (gridSize*Math.round(junction.x/gridSize));
|
||||||
|
junction.y = (gridSize*Math.round(junction.y/gridSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
var nodeGroups = new Set()
|
||||||
|
|
||||||
|
RED.nodes.addJunction(junction)
|
||||||
|
addedJunctions.push(junction)
|
||||||
|
var newLink = {
|
||||||
|
source: links[0].source,
|
||||||
|
sourcePort: links[0].sourcePort,
|
||||||
|
target: junction
|
||||||
|
}
|
||||||
|
addedLinks.push(newLink)
|
||||||
|
RED.nodes.addLink(newLink)
|
||||||
|
links.forEach(function(l) {
|
||||||
|
removedLinks.push(l)
|
||||||
|
RED.nodes.removeLink(l)
|
||||||
|
var newLink = {
|
||||||
|
source: junction,
|
||||||
|
sourcePort: 0,
|
||||||
|
target: l.target
|
||||||
|
}
|
||||||
|
addedLinks.push(newLink)
|
||||||
|
RED.nodes.addLink(newLink)
|
||||||
|
nodeGroups.add(l.source.g || "__NONE__")
|
||||||
|
nodeGroups.add(l.target.g || "__NONE__")
|
||||||
|
})
|
||||||
|
if (nodeGroups.size === 1) {
|
||||||
|
var group = nodeGroups.values().next().value
|
||||||
|
if (group !== "__NONE__") {
|
||||||
|
RED.group.addToGroup(RED.nodes.group(group), junction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
slicePath.remove();
|
||||||
|
slicePath = null;
|
||||||
|
|
||||||
|
if (addedJunctions.length > 0) {
|
||||||
|
RED.history.push({
|
||||||
|
t: 'add',
|
||||||
|
links: addedLinks,
|
||||||
|
junctions: addedJunctions,
|
||||||
|
removedLinks: removedLinks
|
||||||
|
})
|
||||||
|
RED.nodes.dirty(true)
|
||||||
|
}
|
||||||
|
RED.view.redraw(true);
|
||||||
}
|
}
|
||||||
if (mouse_mode == RED.state.MOVING_ACTIVE) {
|
if (mouse_mode == RED.state.MOVING_ACTIVE) {
|
||||||
if (movingSet.length() > 0) {
|
if (movingSet.length() > 0) {
|
||||||
@ -1997,6 +2062,9 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
function zoomZero() { zoomView(1); }
|
function zoomZero() { zoomView(1); }
|
||||||
|
function searchFlows() { RED.actions.invoke("core:search", $(this).data("term")); }
|
||||||
|
function searchPrev() { RED.actions.invoke("core:search-previous"); }
|
||||||
|
function searchNext() { RED.actions.invoke("core:search-next"); }
|
||||||
|
|
||||||
|
|
||||||
function zoomView(factor) {
|
function zoomView(factor) {
|
||||||
@ -2033,7 +2101,7 @@ RED.view = (function() {
|
|||||||
clearSelection();
|
clearSelection();
|
||||||
RED.history.pop();
|
RED.history.pop();
|
||||||
mouse_mode = 0;
|
mouse_mode = 0;
|
||||||
} else if (mouse_mode === RED.state.SLICING) {
|
} else if (mouse_mode === RED.state.SLICING || mouse_mode === RED.state.SLICING_JUNCTION) {
|
||||||
if (slicePath) {
|
if (slicePath) {
|
||||||
slicePath.remove();
|
slicePath.remove();
|
||||||
slicePath = null;
|
slicePath = null;
|
||||||
@ -2102,6 +2170,14 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
activeJunctions.forEach(function(n) {
|
||||||
|
if (!n.selected) {
|
||||||
|
n.selected = true;
|
||||||
|
n.dirty = true;
|
||||||
|
movingSet.add(n);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
if (mouse_mode !== RED.state.SELECTING_NODE && activeSubflow) {
|
if (mouse_mode !== RED.state.SELECTING_NODE && activeSubflow) {
|
||||||
activeSubflow.in.forEach(function(n) {
|
activeSubflow.in.forEach(function(n) {
|
||||||
if (!n.selected) {
|
if (!n.selected) {
|
||||||
@ -2301,6 +2377,7 @@ RED.view = (function() {
|
|||||||
nodes: [],
|
nodes: [],
|
||||||
links: [],
|
links: [],
|
||||||
groups: [],
|
groups: [],
|
||||||
|
junctions: [],
|
||||||
workspaces: [],
|
workspaces: [],
|
||||||
subflows: []
|
subflows: []
|
||||||
}
|
}
|
||||||
@ -2321,6 +2398,7 @@ RED.view = (function() {
|
|||||||
historyEvent.nodes = historyEvent.nodes.concat(subEvent.nodes);
|
historyEvent.nodes = historyEvent.nodes.concat(subEvent.nodes);
|
||||||
historyEvent.links = historyEvent.links.concat(subEvent.links);
|
historyEvent.links = historyEvent.links.concat(subEvent.links);
|
||||||
historyEvent.groups = historyEvent.groups.concat(subEvent.groups);
|
historyEvent.groups = historyEvent.groups.concat(subEvent.groups);
|
||||||
|
historyEvent.junctions = historyEvent.junctions.concat(subEvent.junctions);
|
||||||
}
|
}
|
||||||
RED.history.push(historyEvent);
|
RED.history.push(historyEvent);
|
||||||
RED.nodes.dirty(true);
|
RED.nodes.dirty(true);
|
||||||
@ -2333,6 +2411,7 @@ RED.view = (function() {
|
|||||||
var removedNodes = [];
|
var removedNodes = [];
|
||||||
var removedLinks = [];
|
var removedLinks = [];
|
||||||
var removedGroups = [];
|
var removedGroups = [];
|
||||||
|
var removedJunctions = [];
|
||||||
var removedSubflowOutputs = [];
|
var removedSubflowOutputs = [];
|
||||||
var removedSubflowInputs = [];
|
var removedSubflowInputs = [];
|
||||||
var removedSubflowStatus;
|
var removedSubflowStatus;
|
||||||
@ -2377,7 +2456,7 @@ RED.view = (function() {
|
|||||||
for (var i=0;i<movingSet.length();i++) {
|
for (var i=0;i<movingSet.length();i++) {
|
||||||
node = movingSet.get(i).n;
|
node = movingSet.get(i).n;
|
||||||
node.selected = false;
|
node.selected = false;
|
||||||
if (node.type !== "group" && node.type !== "subflow") {
|
if (node.type !== "group" && node.type !== "subflow" && node.type !== 'junction') {
|
||||||
if (node.x < 0) {
|
if (node.x < 0) {
|
||||||
node.x = 25
|
node.x = 25
|
||||||
}
|
}
|
||||||
@ -2395,6 +2474,10 @@ RED.view = (function() {
|
|||||||
RED.group.markDirty(group);
|
RED.group.markDirty(group);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (node.type === 'junction') {
|
||||||
|
var result = RED.nodes.removeJunction(node)
|
||||||
|
removedJunctions.push(node);
|
||||||
|
removedLinks = removedLinks.concat(result.links);
|
||||||
} else {
|
} else {
|
||||||
if (node.direction === "out") {
|
if (node.direction === "out") {
|
||||||
removedSubflowOutputs.push(node);
|
removedSubflowOutputs.push(node);
|
||||||
@ -2439,7 +2522,7 @@ RED.view = (function() {
|
|||||||
subflowInstances = instances.instances;
|
subflowInstances = instances.instances;
|
||||||
}
|
}
|
||||||
movingSet.clear();
|
movingSet.clear();
|
||||||
if (removedNodes.length > 0 || removedSubflowOutputs.length > 0 || removedSubflowInputs.length > 0 || removedSubflowStatus || removedGroups.length > 0) {
|
if (removedNodes.length > 0 || removedSubflowOutputs.length > 0 || removedSubflowInputs.length > 0 || removedSubflowStatus || removedGroups.length > 0 || removedJunctions.length > 0) {
|
||||||
RED.nodes.dirty(true);
|
RED.nodes.dirty(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2486,6 +2569,7 @@ RED.view = (function() {
|
|||||||
nodes:removedNodes,
|
nodes:removedNodes,
|
||||||
links:removedLinks,
|
links:removedLinks,
|
||||||
groups: removedGroups,
|
groups: removedGroups,
|
||||||
|
junctions: removedJunctions,
|
||||||
subflowOutputs:removedSubflowOutputs,
|
subflowOutputs:removedSubflowOutputs,
|
||||||
subflowInputs:removedSubflowInputs,
|
subflowInputs:removedSubflowInputs,
|
||||||
subflow: {
|
subflow: {
|
||||||
@ -2545,6 +2629,7 @@ RED.view = (function() {
|
|||||||
var nns = [];
|
var nns = [];
|
||||||
var nodeCount = 0;
|
var nodeCount = 0;
|
||||||
var groupCount = 0;
|
var groupCount = 0;
|
||||||
|
var junctionCount = 0;
|
||||||
var handled = {};
|
var handled = {};
|
||||||
for (var n=0;n<nodes.length;n++) {
|
for (var n=0;n<nodes.length;n++) {
|
||||||
var node = nodes[n];
|
var node = nodes[n];
|
||||||
@ -2557,6 +2642,8 @@ RED.view = (function() {
|
|||||||
if (node.type != "subflow") {
|
if (node.type != "subflow") {
|
||||||
if (node.type === "group") {
|
if (node.type === "group") {
|
||||||
groupCount++;
|
groupCount++;
|
||||||
|
} else if (node.type === 'junction') {
|
||||||
|
junctionCount++;
|
||||||
} else {
|
} else {
|
||||||
nodeCount++;
|
nodeCount++;
|
||||||
}
|
}
|
||||||
@ -2739,6 +2826,7 @@ RED.view = (function() {
|
|||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function portMouseUp(d,portType,portIndex,evt) {
|
function portMouseUp(d,portType,portIndex,evt) {
|
||||||
if (RED.view.DEBUG) { console.warn("portMouseUp", mouse_mode,d,portType,portIndex); }
|
if (RED.view.DEBUG) { console.warn("portMouseUp", mouse_mode,d,portType,portIndex); }
|
||||||
evt = evt || d3.event;
|
evt = evt || d3.event;
|
||||||
@ -3121,6 +3209,52 @@ RED.view = (function() {
|
|||||||
port.classed("red-ui-flow-port-hovered",false);
|
port.classed("red-ui-flow-port-hovered",false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function junctionMouseOver(junction, d) {
|
||||||
|
junction.classed("red-ui-flow-junction-hovered",true);
|
||||||
|
}
|
||||||
|
function junctionMouseOut(junction, d) {
|
||||||
|
junction.classed("red-ui-flow-junction-hovered",false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function junctionMouseDown(junction, d, evt) {
|
||||||
|
if (RED.view.DEBUG) { console.warn("junctionMouseDown", d); }
|
||||||
|
evt = evt || d3.event;
|
||||||
|
d3.event = evt
|
||||||
|
if (evt === 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (mouse_mode === RED.state.SELECTING_NODE) {
|
||||||
|
evt.stopPropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (mouse_mode == RED.state.QUICK_JOINING) {
|
||||||
|
d3.event.stopPropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// mousedown_node = d;
|
||||||
|
// mousedown_port_type = portType;
|
||||||
|
// mousedown_port_index = portIndex || 0;
|
||||||
|
if (mouse_mode !== RED.state.QUICK_JOINING && (evt.ctrlKey || evt.metaKey)) {
|
||||||
|
mouse_mode = RED.state.QUICK_JOINING;
|
||||||
|
document.body.style.cursor = "crosshair";
|
||||||
|
showDragLines([{node:d,port:0,portType: PORT_TYPE_OUTPUT}]);
|
||||||
|
$(window).on('keyup',disableQuickJoinEventHandler);
|
||||||
|
} else if (event.button != 2) {
|
||||||
|
nodeMouseDown.call(junction[0][0],d)
|
||||||
|
// clearSelection();
|
||||||
|
// movingSet.add(d);
|
||||||
|
// mousedown_node = d;
|
||||||
|
// mouse_mode = RED.state.MOVING;
|
||||||
|
// var mouse = d3.touches(junction[0][0])[0]||d3.mouse(junction[0][0]);
|
||||||
|
// mouse[0] += d.x-d.w/2;
|
||||||
|
// mouse[1] += d.y-d.h/2;
|
||||||
|
// prepareDrag(mouse);
|
||||||
|
}
|
||||||
|
evt.stopPropagation();
|
||||||
|
evt.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
function prepareDrag(mouse) {
|
function prepareDrag(mouse) {
|
||||||
mouse_mode = RED.state.MOVING;
|
mouse_mode = RED.state.MOVING;
|
||||||
// Called when movingSet should be prepared to be dragged
|
// Called when movingSet should be prepared to be dragged
|
||||||
@ -3313,8 +3447,6 @@ RED.view = (function() {
|
|||||||
)
|
)
|
||||||
lastClickNode = mousedown_node;
|
lastClickNode = mousedown_node;
|
||||||
|
|
||||||
var i;
|
|
||||||
|
|
||||||
if (!d.selected && d.g /*&& !RED.nodes.group(d.g).selected*/) {
|
if (!d.selected && d.g /*&& !RED.nodes.group(d.g).selected*/) {
|
||||||
var nodeGroup = RED.nodes.group(d.g);
|
var nodeGroup = RED.nodes.group(d.g);
|
||||||
|
|
||||||
@ -3587,6 +3719,11 @@ RED.view = (function() {
|
|||||||
function portMouseOverProxy(e) { portMouseOver(d3.select(this), this.__data__,this.__portType__,this.__portIndex__, e); }
|
function portMouseOverProxy(e) { portMouseOver(d3.select(this), this.__data__,this.__portType__,this.__portIndex__, e); }
|
||||||
function portMouseOutProxy(e) { portMouseOut(d3.select(this), this.__data__,this.__portType__,this.__portIndex__, e); }
|
function portMouseOutProxy(e) { portMouseOut(d3.select(this), this.__data__,this.__portType__,this.__portIndex__, e); }
|
||||||
|
|
||||||
|
function junctionMouseOverProxy(e) { junctionMouseOver(d3.select(this), this.__data__) }
|
||||||
|
function junctionMouseOutProxy(e) { junctionMouseOut(d3.select(this), this.__data__) }
|
||||||
|
function junctionMouseDownProxy(e) { junctionMouseDown(d3.select(this), this.__data__, e) }
|
||||||
|
function junctionMouseUpProxy(e) { junctionMouseUp(d3.select(this), this.__data__) }
|
||||||
|
|
||||||
function linkMouseDown(d) {
|
function linkMouseDown(d) {
|
||||||
if (mouse_mode === RED.state.SELECTING_NODE) {
|
if (mouse_mode === RED.state.SELECTING_NODE) {
|
||||||
d3.event.stopPropagation();
|
d3.event.stopPropagation();
|
||||||
@ -4721,6 +4858,62 @@ RED.view = (function() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var junction = junctionLayer.selectAll(".red-ui-flow-junction").data(
|
||||||
|
activeJunctions,
|
||||||
|
d => d.id
|
||||||
|
)
|
||||||
|
var junctionEnter = junction.enter().insert("svg:g").attr("class","red-ui-flow-junction")
|
||||||
|
junctionEnter.each(function(d,i) {
|
||||||
|
var junction = d3.select(this);
|
||||||
|
var contents = document.createDocumentFragment();
|
||||||
|
// d.added = true;
|
||||||
|
var junctionBack = document.createElementNS("http://www.w3.org/2000/svg","rect");
|
||||||
|
junctionBack.setAttribute("class","red-ui-flow-junction-background");
|
||||||
|
junctionBack.setAttribute("x",-5);
|
||||||
|
junctionBack.setAttribute("y",-5);
|
||||||
|
junctionBack.setAttribute("width",10);
|
||||||
|
junctionBack.setAttribute("height",10);
|
||||||
|
junctionBack.setAttribute("rx",5);
|
||||||
|
junctionBack.setAttribute("ry",5);
|
||||||
|
junctionBack.__data__ = d;
|
||||||
|
this.__junctionBack__ = junctionBack;
|
||||||
|
contents.appendChild(junctionBack);
|
||||||
|
|
||||||
|
junctionBack.addEventListener("mouseover", junctionMouseOverProxy);
|
||||||
|
junctionBack.addEventListener("mouseout", junctionMouseOutProxy);
|
||||||
|
junctionBack.addEventListener("mouseup", portMouseUpProxy);
|
||||||
|
junctionBack.addEventListener("mousedown", junctionMouseDownProxy);
|
||||||
|
|
||||||
|
// d3.select(junctionBack).on("mousedown", nodeMouseDown);
|
||||||
|
|
||||||
|
this.__portType__ = PORT_TYPE_INPUT
|
||||||
|
this.__portIndex__ = 0
|
||||||
|
// function portMouseUpProxy(e) { portMouseUp(this.__data__,this.__portType__,this.__portIndex__, e); }
|
||||||
|
|
||||||
|
junction[0][0].appendChild(contents);
|
||||||
|
})
|
||||||
|
junction.exit().remove();
|
||||||
|
junction.each(function(d) {
|
||||||
|
var junction = d3.select(this);
|
||||||
|
this.setAttribute("transform", "translate(" + (d.x) + "," + (d.y) + ")");
|
||||||
|
if (d.dirty) {
|
||||||
|
junction.classed("selected", !!d.selected)
|
||||||
|
dirtyNodes[d.id] = d;
|
||||||
|
|
||||||
|
if (d.g) {
|
||||||
|
if (!dirtyGroups[d.g]) {
|
||||||
|
var gg = d.g;
|
||||||
|
while (gg && !dirtyGroups[gg]) {
|
||||||
|
dirtyGroups[gg] = RED.nodes.group(gg);
|
||||||
|
gg = dirtyGroups[gg].g;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
var link = linkLayer.selectAll(".red-ui-flow-link").data(
|
var link = linkLayer.selectAll(".red-ui-flow-link").data(
|
||||||
activeLinks,
|
activeLinks,
|
||||||
function(d) {
|
function(d) {
|
||||||
@ -4747,6 +4940,27 @@ RED.view = (function() {
|
|||||||
selectedLinks.add(d)
|
selectedLinks.add(d)
|
||||||
l.classed("red-ui-flow-link-splice",true)
|
l.classed("red-ui-flow-link-splice",true)
|
||||||
redraw()
|
redraw()
|
||||||
|
} else if (mouse_mode === RED.state.SLICING_JUNCTION) {
|
||||||
|
if (!l.classed("red-ui-flow-link-splice")) {
|
||||||
|
// Find intersection point
|
||||||
|
var lineLength = pathLine.getTotalLength();
|
||||||
|
var pos;
|
||||||
|
var delta = Infinity;
|
||||||
|
for (var i = 0; i < lineLength; i++) {
|
||||||
|
var linePos = pathLine.getPointAtLength(i);
|
||||||
|
var posDeltaX = Math.abs(linePos.x-d3.event.offsetX)
|
||||||
|
var posDeltaY = Math.abs(linePos.y-d3.event.offsetY)
|
||||||
|
var posDelta = posDeltaX*posDeltaX + posDeltaY*posDeltaY
|
||||||
|
if (posDelta < delta) {
|
||||||
|
pos = linePos
|
||||||
|
delta = posDelta
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d._sliceLocation = pos
|
||||||
|
selectedLinks.add(d)
|
||||||
|
l.classed("red-ui-flow-link-splice",true)
|
||||||
|
redraw()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -4773,9 +4987,9 @@ RED.view = (function() {
|
|||||||
var numOutputs = d.source.outputs || 1;
|
var numOutputs = d.source.outputs || 1;
|
||||||
var sourcePort = d.sourcePort || 0;
|
var sourcePort = d.sourcePort || 0;
|
||||||
var y = -((numOutputs-1)/2)*13 +13*sourcePort;
|
var y = -((numOutputs-1)/2)*13 +13*sourcePort;
|
||||||
d.x1 = d.source.x+d.source.w/2;
|
d.x1 = d.source.x+(d.source.w/2||0);
|
||||||
d.y1 = d.source.y+y;
|
d.y1 = d.source.y+y;
|
||||||
d.x2 = d.target.x-d.target.w/2;
|
d.x2 = d.target.x-(d.target.w/2||0);
|
||||||
d.y2 = d.target.y;
|
d.y2 = d.target.y;
|
||||||
|
|
||||||
// return "M "+d.x1+" "+d.y1+
|
// return "M "+d.x1+" "+d.y1+
|
||||||
@ -5234,6 +5448,7 @@ RED.view = (function() {
|
|||||||
var new_nodes = result.nodes;
|
var new_nodes = result.nodes;
|
||||||
var new_links = result.links;
|
var new_links = result.links;
|
||||||
var new_groups = result.groups;
|
var new_groups = result.groups;
|
||||||
|
var new_junctions = result.junctions;
|
||||||
var new_workspaces = result.workspaces;
|
var new_workspaces = result.workspaces;
|
||||||
var new_subflows = result.subflows;
|
var new_subflows = result.subflows;
|
||||||
var removedNodes = result.removedNodes;
|
var removedNodes = result.removedNodes;
|
||||||
@ -5243,6 +5458,7 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
var new_ms = new_nodes.filter(function(n) { return n.hasOwnProperty("x") && n.hasOwnProperty("y") && n.z == RED.workspaces.active() });
|
var new_ms = new_nodes.filter(function(n) { return n.hasOwnProperty("x") && n.hasOwnProperty("y") && n.z == RED.workspaces.active() });
|
||||||
new_ms = new_ms.concat(new_groups.filter(function(g) { return g.z === RED.workspaces.active()}))
|
new_ms = new_ms.concat(new_groups.filter(function(g) { return g.z === RED.workspaces.active()}))
|
||||||
|
new_ms = new_ms.concat(new_junctions.filter(function(j) { return j.z === RED.workspaces.active()}))
|
||||||
var new_node_ids = new_nodes.map(function(n){ n.changed = true; return n.id; });
|
var new_node_ids = new_nodes.map(function(n){ n.changed = true; return n.id; });
|
||||||
|
|
||||||
clearSelection();
|
clearSelection();
|
||||||
@ -5276,9 +5492,11 @@ RED.view = (function() {
|
|||||||
node.n.moved = true;
|
node.n.moved = true;
|
||||||
node.n.x -= dx - mouse_position[0];
|
node.n.x -= dx - mouse_position[0];
|
||||||
node.n.y -= dy - mouse_position[1];
|
node.n.y -= dy - mouse_position[1];
|
||||||
node.n.w = node_width;
|
if (node.n.type !== 'junction') {
|
||||||
node.n.h = node_height;
|
node.n.w = node_width;
|
||||||
node.n.resize = true;
|
node.n.h = node_height;
|
||||||
|
node.n.resize = true;
|
||||||
|
}
|
||||||
node.dx = node.n.x - mouse_position[0];
|
node.dx = node.n.x - mouse_position[0];
|
||||||
node.dy = node.n.y - mouse_position[1];
|
node.dy = node.n.y - mouse_position[1];
|
||||||
if (node.n.type === "group") {
|
if (node.n.type === "group") {
|
||||||
@ -5325,6 +5543,7 @@ RED.view = (function() {
|
|||||||
nodes:new_node_ids,
|
nodes:new_node_ids,
|
||||||
links:new_links,
|
links:new_links,
|
||||||
groups:new_groups,
|
groups:new_groups,
|
||||||
|
junctions: new_junctions,
|
||||||
workspaces:new_workspaces,
|
workspaces:new_workspaces,
|
||||||
subflows:new_subflows,
|
subflows:new_subflows,
|
||||||
dirty:RED.nodes.dirty()
|
dirty:RED.nodes.dirty()
|
||||||
@ -5372,6 +5591,7 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
var newGroupCount = new_groups.length;
|
var newGroupCount = new_groups.length;
|
||||||
|
var newJunctionCount = new_junctions.length;
|
||||||
if (new_workspaces.length > 0) {
|
if (new_workspaces.length > 0) {
|
||||||
counts.push(RED._("clipboard.flow",{count:new_workspaces.length}));
|
counts.push(RED._("clipboard.flow",{count:new_workspaces.length}));
|
||||||
}
|
}
|
||||||
@ -5508,6 +5728,93 @@ RED.view = (function() {
|
|||||||
return selection;
|
return selection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a node from a type string.
|
||||||
|
* **NOTE:** Can throw on error - use `try` `catch` block when calling
|
||||||
|
* @param {string} type The node type to create
|
||||||
|
* @param {number} [x] (optional) The horizontal position on the workspace
|
||||||
|
* @param {number} [y] (optional)The vertical on the workspace
|
||||||
|
* @param {string} [z] (optional) The flow tab this node will belong to. Defaults to active workspace.
|
||||||
|
* @returns An object containing the `node` and a `historyEvent`
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function createNode(type, x, y, z) {
|
||||||
|
var m = /^subflow:(.+)$/.exec(type);
|
||||||
|
var activeSubflow = z ? RED.nodes.subflow(z) : null;
|
||||||
|
if (activeSubflow && m) {
|
||||||
|
var subflowId = m[1];
|
||||||
|
if (subflowId === activeSubflow.id) {
|
||||||
|
throw new Error(RED._("notification.error", { message: RED._("notification.errors.cannotAddSubflowToItself") }))
|
||||||
|
}
|
||||||
|
if (RED.nodes.subflowContains(m[1], activeSubflow.id)) {
|
||||||
|
throw new Error(RED._("notification.error", { message: RED._("notification.errors.cannotAddCircularReference") }))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var nn = { id: RED.nodes.id(), z: z || RED.workspaces.active() };
|
||||||
|
|
||||||
|
nn.type = type;
|
||||||
|
nn._def = RED.nodes.getType(nn.type);
|
||||||
|
|
||||||
|
if (!m) {
|
||||||
|
nn.inputs = nn._def.inputs || 0;
|
||||||
|
nn.outputs = nn._def.outputs;
|
||||||
|
|
||||||
|
for (var d in nn._def.defaults) {
|
||||||
|
if (nn._def.defaults.hasOwnProperty(d)) {
|
||||||
|
if (nn._def.defaults[d].value !== undefined) {
|
||||||
|
nn[d] = JSON.parse(JSON.stringify(nn._def.defaults[d].value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nn._def.onadd) {
|
||||||
|
try {
|
||||||
|
nn._def.onadd.call(nn);
|
||||||
|
} catch (err) {
|
||||||
|
console.log("Definition error: " + nn.type + ".onadd:", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var subflow = RED.nodes.subflow(m[1]);
|
||||||
|
nn.name = "";
|
||||||
|
nn.inputs = subflow.in.length;
|
||||||
|
nn.outputs = subflow.out.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
nn.changed = true;
|
||||||
|
nn.moved = true;
|
||||||
|
|
||||||
|
nn.w = RED.view.node_width;
|
||||||
|
nn.h = Math.max(RED.view.node_height, (nn.outputs || 0) * 15);
|
||||||
|
nn.resize = true;
|
||||||
|
if (x != null && typeof x == "number" && x >= 0) {
|
||||||
|
nn.x = x;
|
||||||
|
}
|
||||||
|
if (y != null && typeof y == "number" && y >= 0) {
|
||||||
|
nn.y = y;
|
||||||
|
}
|
||||||
|
var historyEvent = {
|
||||||
|
t: "add",
|
||||||
|
nodes: [nn.id],
|
||||||
|
dirty: RED.nodes.dirty()
|
||||||
|
}
|
||||||
|
if (activeSubflow) {
|
||||||
|
var subflowRefresh = RED.subflow.refresh(true);
|
||||||
|
if (subflowRefresh) {
|
||||||
|
historyEvent.subflow = {
|
||||||
|
id: activeSubflow.id,
|
||||||
|
changed: activeSubflow.changed,
|
||||||
|
instances: subflowRefresh.instances
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
node: nn,
|
||||||
|
historyEvent: historyEvent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function calculateNodeDimensions(node) {
|
function calculateNodeDimensions(node) {
|
||||||
var result = [node_width,node_height];
|
var result = [node_width,node_height];
|
||||||
try {
|
try {
|
||||||
@ -5531,6 +5838,37 @@ RED.view = (function() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function flashNode(n) {
|
||||||
|
let node = n;
|
||||||
|
if(typeof node === "string") { node = RED.nodes.node(n); }
|
||||||
|
if(!node) { return; }
|
||||||
|
|
||||||
|
const flashingNode = flashingNodeTimer && flashingNodeId && RED.nodes.node(flashingNodeId);
|
||||||
|
if(flashingNode) {
|
||||||
|
//cancel current flashing node before flashing new node
|
||||||
|
clearInterval(flashingNodeTimer);
|
||||||
|
flashingNodeTimer = null;
|
||||||
|
flashingNode.dirty = true;
|
||||||
|
flashingNode.highlighted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
flashingNodeTimer = setInterval(function(flashEndTime) {
|
||||||
|
node.dirty = true;
|
||||||
|
if (flashEndTime >= Date.now()) {
|
||||||
|
node.highlighted = !node.highlighted;
|
||||||
|
} else {
|
||||||
|
clearInterval(flashingNodeTimer);
|
||||||
|
flashingNodeTimer = null;
|
||||||
|
node.highlighted = false;
|
||||||
|
flashingNodeId = null;
|
||||||
|
}
|
||||||
|
RED.view.redraw();
|
||||||
|
}, 100, Date.now() + 2200)
|
||||||
|
flashingNodeId = node.id;
|
||||||
|
node.highlighted = true;
|
||||||
|
RED.view.redraw();
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
init: init,
|
init: init,
|
||||||
state:function(state) {
|
state:function(state) {
|
||||||
@ -5591,7 +5929,21 @@ RED.view = (function() {
|
|||||||
redraw(true);
|
redraw(true);
|
||||||
},
|
},
|
||||||
selection: getSelection,
|
selection: getSelection,
|
||||||
|
clearSelection: clearSelection,
|
||||||
|
createNode: createNode,
|
||||||
|
/** default node width */
|
||||||
|
get node_width() {
|
||||||
|
return node_width;
|
||||||
|
},
|
||||||
|
/** default node height */
|
||||||
|
get node_height() {
|
||||||
|
return node_height;
|
||||||
|
},
|
||||||
|
/** snap to grid option state */
|
||||||
|
get snapGrid() {
|
||||||
|
return snapGrid;
|
||||||
|
},
|
||||||
|
/** gets the current scale factor */
|
||||||
scale: function() {
|
scale: function() {
|
||||||
return scaleFactor;
|
return scaleFactor;
|
||||||
},
|
},
|
||||||
@ -5613,7 +5965,7 @@ RED.view = (function() {
|
|||||||
getActiveGroup: function() { return activeGroup },
|
getActiveGroup: function() { return activeGroup },
|
||||||
reveal: function(id,triggerHighlight) {
|
reveal: function(id,triggerHighlight) {
|
||||||
if (RED.nodes.workspace(id) || RED.nodes.subflow(id)) {
|
if (RED.nodes.workspace(id) || RED.nodes.subflow(id)) {
|
||||||
RED.workspaces.show(id);
|
RED.workspaces.show(id, null, null, true);
|
||||||
} else {
|
} else {
|
||||||
var node = RED.nodes.node(id) || RED.nodes.group(id);
|
var node = RED.nodes.node(id) || RED.nodes.group(id);
|
||||||
if (node) {
|
if (node) {
|
||||||
@ -5621,7 +5973,7 @@ RED.view = (function() {
|
|||||||
node.dirty = true;
|
node.dirty = true;
|
||||||
RED.workspaces.show(node.z);
|
RED.workspaces.show(node.z);
|
||||||
|
|
||||||
var screenSize = [chart.width()/scaleFactor,chart.height()/scaleFactor];
|
var screenSize = [chart[0].clientWidth/scaleFactor,chart[0].clientHeight/scaleFactor];
|
||||||
var scrollPos = [chart.scrollLeft()/scaleFactor,chart.scrollTop()/scaleFactor];
|
var scrollPos = [chart.scrollLeft()/scaleFactor,chart.scrollTop()/scaleFactor];
|
||||||
var cx = node.x;
|
var cx = node.x;
|
||||||
var cy = node.y;
|
var cy = node.y;
|
||||||
@ -5638,24 +5990,7 @@ RED.view = (function() {
|
|||||||
},200);
|
},200);
|
||||||
}
|
}
|
||||||
if (triggerHighlight !== false) {
|
if (triggerHighlight !== false) {
|
||||||
node.highlighted = true;
|
flashNode(node);
|
||||||
if (!node._flashing) {
|
|
||||||
node._flashing = true;
|
|
||||||
var flash = 22;
|
|
||||||
var flashFunc = function() {
|
|
||||||
flash--;
|
|
||||||
node.dirty = true;
|
|
||||||
if (flash >= 0) {
|
|
||||||
node.highlighted = !node.highlighted;
|
|
||||||
setTimeout(flashFunc,100);
|
|
||||||
} else {
|
|
||||||
node.highlighted = false;
|
|
||||||
delete node._flashing;
|
|
||||||
}
|
|
||||||
RED.view.redraw();
|
|
||||||
}
|
|
||||||
flashFunc();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (node._def.category === 'config') {
|
} else if (node._def.category === 'config') {
|
||||||
RED.sidebar.config.show(id);
|
RED.sidebar.config.show(id);
|
||||||
|
@ -24,6 +24,9 @@ RED.workspaces = (function() {
|
|||||||
var hideStack = [];
|
var hideStack = [];
|
||||||
var viewStackPos = 0;
|
var viewStackPos = 0;
|
||||||
|
|
||||||
|
let flashingTab;
|
||||||
|
let flashingTabTimer;
|
||||||
|
|
||||||
function addToViewStack(id) {
|
function addToViewStack(id) {
|
||||||
if (viewStackPos !== viewStack.length) {
|
if (viewStackPos !== viewStack.length) {
|
||||||
viewStack.splice(viewStackPos);
|
viewStack.splice(viewStackPos);
|
||||||
@ -531,6 +534,31 @@ RED.workspaces = (function() {
|
|||||||
workspace_tabs.order(order);
|
workspace_tabs.order(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function flashTab(tabId) {
|
||||||
|
if(flashingTab && flashingTab.length) {
|
||||||
|
//cancel current flashing node before flashing new node
|
||||||
|
clearInterval(flashingTabTimer);
|
||||||
|
flashingTabTimer = null;
|
||||||
|
flashingTab.removeClass('highlighted');
|
||||||
|
flashingTab = null;
|
||||||
|
}
|
||||||
|
let tab = $("#red-ui-tab-" + tabId);
|
||||||
|
if(!tab || !tab.length) { return; }
|
||||||
|
|
||||||
|
flashingTabTimer = setInterval(function(flashEndTime) {
|
||||||
|
if (flashEndTime >= Date.now()) {
|
||||||
|
const highlighted = tab.hasClass("highlighted");
|
||||||
|
tab.toggleClass('highlighted', !highlighted)
|
||||||
|
} else {
|
||||||
|
clearInterval(flashingTabTimer);
|
||||||
|
flashingTabTimer = null;
|
||||||
|
flashingTab = null;
|
||||||
|
tab.removeClass('highlighted');
|
||||||
|
}
|
||||||
|
}, 100, Date.now() + 2200);
|
||||||
|
flashingTab = tab;
|
||||||
|
tab.addClass('highlighted');
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
init: init,
|
init: init,
|
||||||
add: addWorkspace,
|
add: addWorkspace,
|
||||||
@ -563,7 +591,7 @@ RED.workspaces = (function() {
|
|||||||
isHidden: function(id) {
|
isHidden: function(id) {
|
||||||
return hideStack.includes(id)
|
return hideStack.includes(id)
|
||||||
},
|
},
|
||||||
show: function(id,skipStack,unhideOnly) {
|
show: function(id,skipStack,unhideOnly,flash) {
|
||||||
if (!workspace_tabs.contains(id)) {
|
if (!workspace_tabs.contains(id)) {
|
||||||
var sf = RED.nodes.subflow(id);
|
var sf = RED.nodes.subflow(id);
|
||||||
if (sf) {
|
if (sf) {
|
||||||
@ -585,6 +613,9 @@ RED.workspaces = (function() {
|
|||||||
}
|
}
|
||||||
workspace_tabs.activateTab(id);
|
workspace_tabs.activateTab(id);
|
||||||
}
|
}
|
||||||
|
if(flash) {
|
||||||
|
flashTab(id.replace(".","-"))
|
||||||
|
}
|
||||||
},
|
},
|
||||||
refresh: function() {
|
refresh: function() {
|
||||||
RED.nodes.eachWorkspace(function(ws) {
|
RED.nodes.eachWorkspace(function(ws) {
|
||||||
|
@ -118,20 +118,26 @@ RED.user = (function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
} else if (data.type == "strategy") {
|
} else if (data.type == "strategy") {
|
||||||
|
var sessionMessage = /[?&]session_message=(.*?)(?:$|&)/.exec(window.location.search);
|
||||||
|
RED.sessionMessages = RED.sessionMessages || [];
|
||||||
|
if (sessionMessage) {
|
||||||
|
RED.sessionMessages.push(decodeURIComponent(sessionMessage[1]));
|
||||||
|
if (history.pushState) {
|
||||||
|
var newurl = window.location.protocol+"//"+window.location.host+window.location.pathname
|
||||||
|
window.history.replaceState({ path: newurl }, "", newurl);
|
||||||
|
} else {
|
||||||
|
window.location.search = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RED.sessionMessages.length === 0 && data.autoLogin) {
|
||||||
|
document.location = data.loginRedirect
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for (;i<data.prompts.length;i++) {
|
for (;i<data.prompts.length;i++) {
|
||||||
var field = data.prompts[i];
|
var field = data.prompts[i];
|
||||||
var sessionMessage = /[?&]session_message=(.*?)(?:$|&)/.exec(window.location.search);
|
|
||||||
if (sessionMessage) {
|
|
||||||
RED.sessionMessages = RED.sessionMessages || [];
|
|
||||||
RED.sessionMessages.push(sessionMessage[1]);
|
|
||||||
if (history.pushState) {
|
|
||||||
var newurl = window.location.protocol+"//"+window.location.host+window.location.pathname
|
|
||||||
window.history.replaceState({ path: newurl }, "", newurl);
|
|
||||||
} else {
|
|
||||||
window.location.search = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (RED.sessionMessages) {
|
if (RED.sessionMessages) {
|
||||||
var sessionMessages = $("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields");
|
var sessionMessages = $("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields");
|
||||||
RED.sessionMessages.forEach(function (msg) {
|
RED.sessionMessages.forEach(function (msg) {
|
||||||
|
@ -151,6 +151,8 @@ $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-text-header-background-hover: #ffc;
|
||||||
|
$diff-state-color: $primary-text-color;
|
||||||
|
$diff-state-prefix-color: $secondary-text-color;
|
||||||
$diff-state-added: #009900;
|
$diff-state-added: #009900;
|
||||||
$diff-state-deleted: #f80000;
|
$diff-state-deleted: #f80000;
|
||||||
$diff-state-changed: #f89406;
|
$diff-state-changed: #f89406;
|
||||||
|
@ -123,17 +123,20 @@
|
|||||||
background: $debug-message-background;
|
background: $debug-message-background;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: $secondary-text-color-inactive;
|
color: $secondary-text-color-inactive;
|
||||||
|
overflow-wrap: anywhere;
|
||||||
}
|
}
|
||||||
.red-ui-debug-msg-date {
|
.red-ui-debug-msg-date {
|
||||||
padding: 1px 5px 1px 1px;
|
padding: 1px 10px 1px 0px;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
.red-ui-debug-msg-topic {
|
.red-ui-debug-msg-topic {
|
||||||
display: block;
|
display: block;
|
||||||
color: $debug-message-text-color-meta;
|
color: $debug-message-text-color-meta;
|
||||||
}
|
}
|
||||||
.red-ui-debug-msg-name {
|
.red-ui-debug-msg-name {
|
||||||
padding: 1px 5px;
|
padding: 1px 0px;
|
||||||
color: $secondary-text-color-inactive;
|
color: $secondary-text-color-inactive;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
.red-ui-debug-msg-tools {
|
.red-ui-debug-msg-tools {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -562,7 +562,7 @@ ul.red-ui-deploy-dialog-confirm-list {
|
|||||||
width: 30px;
|
width: 30px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: $secondary-text-color;
|
color: $diff-state-prefix-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.added {
|
&.added {
|
||||||
@ -577,9 +577,11 @@ ul.red-ui-deploy-dialog-confirm-list {
|
|||||||
}
|
}
|
||||||
td.added {
|
td.added {
|
||||||
background: $diff-state-added-background;
|
background: $diff-state-added-background;
|
||||||
|
color: $diff-state-color;
|
||||||
}
|
}
|
||||||
td.removed {
|
td.removed {
|
||||||
background: $diff-state-deleted-background;
|
background: $diff-state-deleted-background;
|
||||||
|
color: $diff-state-color;
|
||||||
}
|
}
|
||||||
tr.mergeHeader td {
|
tr.mergeHeader td {
|
||||||
color: $diff-merge-header-color;
|
color: $diff-merge-header-color;
|
||||||
@ -652,7 +654,7 @@ ul.red-ui-deploy-dialog-confirm-list {
|
|||||||
font-family: $monospace-font;
|
font-family: $monospace-font;
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
color: $secondary-text-color;
|
color: $diff-text-header-color;
|
||||||
background: $diff-text-header-background;
|
background: $diff-text-header-background;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
@ -379,3 +379,17 @@ g.red-ui-flow-link-unknown path.red-ui-flow-link-line {
|
|||||||
white-space: pre;
|
white-space: pre;
|
||||||
@include disable-selection;
|
@include disable-selection;
|
||||||
}
|
}
|
||||||
|
.red-ui-flow-junction-background {
|
||||||
|
stroke: $node-border;
|
||||||
|
stroke-width: 1;
|
||||||
|
fill: $node-port-background;
|
||||||
|
cursor: crosshair;
|
||||||
|
}
|
||||||
|
.red-ui-flow-junction-hovered {
|
||||||
|
stroke: $port-selected-color;
|
||||||
|
fill: $port-selected-color;
|
||||||
|
}
|
||||||
|
.red-ui-flow-junction.selected .red-ui-flow-junction-background {
|
||||||
|
stroke: $port-selected-color;
|
||||||
|
// fill: $port-selected-color;
|
||||||
|
}
|
||||||
|
@ -254,7 +254,7 @@ button.red-ui-palette-editor-upload-button {
|
|||||||
padding: 2px 8px;
|
padding: 2px 8px;
|
||||||
}
|
}
|
||||||
form {
|
form {
|
||||||
width: 0;
|
width: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.red-ui-palette-editor-upload {
|
.red-ui-palette-editor-upload {
|
||||||
|
@ -189,6 +189,7 @@
|
|||||||
.red-ui-search-result-node {
|
.red-ui-search-result-node {
|
||||||
&.red-ui-palette-icon-flow,
|
&.red-ui-palette-icon-flow,
|
||||||
&.red-ui-palette-icon-group,
|
&.red-ui-palette-icon-group,
|
||||||
|
&.red-ui-palette-icon-junction,
|
||||||
&.red-ui-palette-icon-selection {
|
&.red-ui-palette-icon-selection {
|
||||||
background: none;
|
background: none;
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
@ -268,6 +269,7 @@
|
|||||||
|
|
||||||
&.red-ui-palette-icon-flow,
|
&.red-ui-palette-icon-flow,
|
||||||
&.red-ui-palette-icon-group,
|
&.red-ui-palette-icon-group,
|
||||||
|
&.red-ui-palette-icon-junction,
|
||||||
&.red-ui-palette-icon-selection {
|
&.red-ui-palette-icon-selection {
|
||||||
background: none;
|
background: none;
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
@ -303,6 +305,7 @@
|
|||||||
&.red-ui-palette-icon-flow {
|
&.red-ui-palette-icon-flow {
|
||||||
margin-top: -2px;
|
margin-top: -2px;
|
||||||
}
|
}
|
||||||
|
&.red-ui-palette-icon-junction .red-ui-palette-icon-fa,
|
||||||
&.red-ui-palette-icon-group .red-ui-palette-icon-fa {
|
&.red-ui-palette-icon-group .red-ui-palette-icon-fa {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
@ -152,7 +152,20 @@
|
|||||||
border-radius:3px;
|
border-radius:3px;
|
||||||
padding: 1px 2px;
|
padding: 1px 2px;
|
||||||
}
|
}
|
||||||
|
.red-ui-popover {
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--red-ui-popover-color) !important;
|
||||||
|
}
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--red-ui-popover-color) !important;
|
||||||
|
}
|
||||||
|
a:focus {
|
||||||
|
outline: 1px solid $form-input-focus-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
.red-ui-popover a.red-ui-button,
|
.red-ui-popover a.red-ui-button,
|
||||||
.red-ui-popover button.red-ui-button {
|
.red-ui-popover button.red-ui-button {
|
||||||
&:not(.primary) {
|
&:not(.primary) {
|
||||||
|
@ -66,8 +66,9 @@
|
|||||||
border-left-width: 3px;
|
border-left-width: 3px;
|
||||||
border-right-width: 3px;
|
border-right-width: 3px;
|
||||||
.red-ui-palette-icon-fa {
|
.red-ui-palette-icon-fa {
|
||||||
|
font-size: 11px;
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -2.5px;
|
top: -3px;
|
||||||
left: 0px;
|
left: 0px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,10 @@ ul.red-ui-sidebar-node-config-list {
|
|||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
box-shadow: 0 0 0 2px $node-selected-color;
|
box-shadow: 0 0 0 2px $node-selected-color;
|
||||||
}
|
}
|
||||||
|
&.highlighted {
|
||||||
|
border-color: transparent;
|
||||||
|
outline: dashed $node-selected-color 4px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.red-ui-palette-label {
|
.red-ui-palette-label {
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
|
@ -85,6 +85,10 @@
|
|||||||
&:not(.active) a:hover+a.red-ui-tab-close {
|
&:not(.active) a:hover+a.red-ui-tab-close {
|
||||||
background: $tab-background-hover;
|
background: $tab-background-hover;
|
||||||
}
|
}
|
||||||
|
&.highlighted {
|
||||||
|
box-shadow: 0px 0px 4px 2px $node-selected-color;
|
||||||
|
border: dashed 1px $node-selected-color;
|
||||||
|
}
|
||||||
&.active {
|
&.active {
|
||||||
background: $tab-background-active;
|
background: $tab-background-active;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -135,6 +135,13 @@
|
|||||||
margin-top: -1px;
|
margin-top: -1px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.search-counter {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: smaller;
|
||||||
|
font-weight: 600;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.red-ui-footer-button,
|
a.red-ui-footer-button,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'assert' {
|
declare module 'assert' {
|
||||||
/** An alias of `assert.ok()`. */
|
/** An alias of `assert.ok()`. */
|
||||||
@ -125,3 +125,7 @@ declare module 'assert' {
|
|||||||
|
|
||||||
export = assert;
|
export = assert;
|
||||||
}
|
}
|
||||||
|
declare module 'node:assert' {
|
||||||
|
import assert = require('assert');
|
||||||
|
export = assert;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Async Hooks module: https://nodejs.org/api/async_hooks.html
|
* Async Hooks module: https://nodejs.org/api/async_hooks.html
|
||||||
@ -227,3 +227,6 @@ declare module 'async_hooks' {
|
|||||||
enterWith(store: T): void;
|
enterWith(store: T): void;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module 'node:async_hooks' {
|
||||||
|
export * from 'async_hooks';
|
||||||
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'buffer' {
|
declare module 'buffer' {
|
||||||
|
import { BinaryLike } from 'node:crypto';
|
||||||
export const INSPECT_MAX_BYTES: number;
|
export const INSPECT_MAX_BYTES: number;
|
||||||
export const kMaxLength: number;
|
export const kMaxLength: number;
|
||||||
export const kStringMaxLength: number;
|
export const kStringMaxLength: number;
|
||||||
@ -20,6 +21,72 @@ declare module 'buffer' {
|
|||||||
new(size: number): Buffer;
|
new(size: number): Buffer;
|
||||||
prototype: Buffer;
|
prototype: Buffer;
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* @experimental
|
||||||
|
*/
|
||||||
|
export interface BlobOptions {
|
||||||
|
/**
|
||||||
|
* @default 'utf8'
|
||||||
|
*/
|
||||||
|
encoding?: BufferEncoding | undefined;
|
||||||
|
/**
|
||||||
|
* The Blob content-type. The intent is for `type` to convey
|
||||||
|
* the MIME media type of the data, however no validation of the type format
|
||||||
|
* is performed.
|
||||||
|
*/
|
||||||
|
type?: string | undefined;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) encapsulates immutable, raw data that can be safely shared across
|
||||||
|
* multiple worker threads.
|
||||||
|
* @since v14.18.0
|
||||||
|
* @experimental
|
||||||
|
*/
|
||||||
|
export class Blob {
|
||||||
|
/**
|
||||||
|
* The total size of the `Blob` in bytes.
|
||||||
|
* @since v14.18.0
|
||||||
|
*/
|
||||||
|
readonly size: number;
|
||||||
|
/**
|
||||||
|
* The content-type of the `Blob`.
|
||||||
|
* @since v14.18.0
|
||||||
|
*/
|
||||||
|
readonly type: string;
|
||||||
|
/**
|
||||||
|
* Creates a new `Blob` object containing a concatenation of the given sources.
|
||||||
|
*
|
||||||
|
* {ArrayBuffer}, {TypedArray}, {DataView}, and {Buffer} sources are copied into
|
||||||
|
* the 'Blob' and can therefore be safely modified after the 'Blob' is created.
|
||||||
|
*
|
||||||
|
* String sources are also copied into the `Blob`.
|
||||||
|
*/
|
||||||
|
constructor(sources: Array<BinaryLike | Blob>, options?: BlobOptions);
|
||||||
|
/**
|
||||||
|
* Returns a promise that fulfills with an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) containing a copy of
|
||||||
|
* the `Blob` data.
|
||||||
|
* @since v14.18.0
|
||||||
|
*/
|
||||||
|
arrayBuffer(): Promise<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Creates and returns a new `Blob` containing a subset of this `Blob` objects
|
||||||
|
* data. The original `Blob` is not altered.
|
||||||
|
* @since v14.18.0
|
||||||
|
* @param start The starting index.
|
||||||
|
* @param end The ending index.
|
||||||
|
* @param type The content-type for the new `Blob`
|
||||||
|
*/
|
||||||
|
slice(start?: number, end?: number, type?: string): Blob;
|
||||||
|
/**
|
||||||
|
* Returns a promise that fulfills with the contents of the `Blob` decoded as a
|
||||||
|
* UTF-8 string.
|
||||||
|
* @since v14.18.0
|
||||||
|
*/
|
||||||
|
text(): Promise<string>;
|
||||||
|
}
|
||||||
|
|
||||||
export { BuffType as Buffer };
|
export { BuffType as Buffer };
|
||||||
}
|
}
|
||||||
|
declare module 'node:buffer' {
|
||||||
|
export * from 'buffer';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'child_process' {
|
declare module 'child_process' {
|
||||||
import { BaseEncodingOptions } from 'fs';
|
import { BaseEncodingOptions } from 'fs';
|
||||||
@ -512,3 +512,6 @@ declare module 'child_process' {
|
|||||||
function execFileSync(command: string, args: ReadonlyArray<string>, options: ExecFileSyncOptionsWithBufferEncoding): Buffer;
|
function execFileSync(command: string, args: ReadonlyArray<string>, options: ExecFileSyncOptionsWithBufferEncoding): Buffer;
|
||||||
function execFileSync(command: string, args?: ReadonlyArray<string>, options?: ExecFileSyncOptions): string | Buffer;
|
function execFileSync(command: string, args?: ReadonlyArray<string>, options?: ExecFileSyncOptions): string | Buffer;
|
||||||
}
|
}
|
||||||
|
declare module 'node:child_process' {
|
||||||
|
export * from 'child_process';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'cluster' {
|
declare module 'cluster' {
|
||||||
import * as child from 'child_process';
|
import * as child from 'child_process';
|
||||||
@ -263,3 +263,6 @@ declare module 'cluster' {
|
|||||||
|
|
||||||
function eventNames(): string[];
|
function eventNames(): string[];
|
||||||
}
|
}
|
||||||
|
declare module 'node:cluster' {
|
||||||
|
export * from 'cluster';
|
||||||
|
}
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'console' {
|
declare module 'console' {
|
||||||
|
import console = require('node:console');
|
||||||
|
export = console;
|
||||||
|
}
|
||||||
|
declare module 'node:console' {
|
||||||
import { InspectOptions } from 'util';
|
import { InspectOptions } from 'util';
|
||||||
|
|
||||||
global {
|
global {
|
||||||
@ -118,6 +122,11 @@ declare module 'console' {
|
|||||||
ignoreErrors?: boolean | undefined;
|
ignoreErrors?: boolean | undefined;
|
||||||
colorMode?: boolean | 'auto' | undefined;
|
colorMode?: boolean | 'auto' | undefined;
|
||||||
inspectOptions?: InspectOptions | undefined;
|
inspectOptions?: InspectOptions | undefined;
|
||||||
|
/**
|
||||||
|
* Set group indentation
|
||||||
|
* @default 2
|
||||||
|
*/
|
||||||
|
groupIndentation?: number | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ConsoleConstructor {
|
interface ConsoleConstructor {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'crypto' {
|
declare module 'crypto' {
|
||||||
import * as stream from 'stream';
|
import * as stream from 'stream';
|
||||||
@ -143,7 +143,7 @@ declare module 'crypto' {
|
|||||||
function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac;
|
function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac;
|
||||||
|
|
||||||
// https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings
|
// https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings
|
||||||
type BinaryToTextEncoding = 'base64' | 'hex';
|
type BinaryToTextEncoding = 'base64' | 'base64url' | 'hex';
|
||||||
type CharacterEncoding = 'utf8' | 'utf-8' | 'utf16le' | 'latin1';
|
type CharacterEncoding = 'utf8' | 'utf-8' | 'utf16le' | 'latin1';
|
||||||
type LegacyCharacterEncoding = 'ascii' | 'binary' | 'ucs2' | 'ucs-2';
|
type LegacyCharacterEncoding = 'ascii' | 'binary' | 'ucs2' | 'ucs-2';
|
||||||
|
|
||||||
@ -517,7 +517,7 @@ declare module 'crypto' {
|
|||||||
key: BinaryLike,
|
key: BinaryLike,
|
||||||
curve: string,
|
curve: string,
|
||||||
inputEncoding?: BinaryToTextEncoding,
|
inputEncoding?: BinaryToTextEncoding,
|
||||||
outputEncoding?: 'latin1' | 'hex' | 'base64',
|
outputEncoding?: 'latin1' | 'hex' | 'base64' | 'base64url',
|
||||||
format?: 'uncompressed' | 'compressed' | 'hybrid',
|
format?: 'uncompressed' | 'compressed' | 'hybrid',
|
||||||
): Buffer | string;
|
): Buffer | string;
|
||||||
generateKeys(): Buffer;
|
generateKeys(): Buffer;
|
||||||
@ -1187,3 +1187,6 @@ declare module 'crypto' {
|
|||||||
*/
|
*/
|
||||||
function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): Buffer;
|
function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): Buffer;
|
||||||
}
|
}
|
||||||
|
declare module 'node:crypto' {
|
||||||
|
export * from 'crypto';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'dgram' {
|
declare module 'dgram' {
|
||||||
import { AddressInfo } from 'net';
|
import { AddressInfo } from 'net';
|
||||||
@ -40,11 +40,11 @@ declare module 'dgram' {
|
|||||||
class Socket extends EventEmitter {
|
class Socket extends EventEmitter {
|
||||||
addMembership(multicastAddress: string, multicastInterface?: string): void;
|
addMembership(multicastAddress: string, multicastInterface?: string): void;
|
||||||
address(): AddressInfo;
|
address(): AddressInfo;
|
||||||
bind(port?: number, address?: string, callback?: () => void): void;
|
bind(port?: number, address?: string, callback?: () => void): this;
|
||||||
bind(port?: number, callback?: () => void): void;
|
bind(port?: number, callback?: () => void): this;
|
||||||
bind(callback?: () => void): void;
|
bind(callback?: () => void): this;
|
||||||
bind(options: BindOptions, callback?: () => void): void;
|
bind(options: BindOptions, callback?: () => void): this;
|
||||||
close(callback?: () => void): void;
|
close(callback?: () => void): this;
|
||||||
connect(port: number, address?: string, callback?: () => void): void;
|
connect(port: number, address?: string, callback?: () => void): void;
|
||||||
connect(port: number, callback: () => void): void;
|
connect(port: number, callback: () => void): void;
|
||||||
disconnect(): void;
|
disconnect(): void;
|
||||||
@ -61,11 +61,11 @@ declare module 'dgram' {
|
|||||||
send(msg: string | Uint8Array, offset: number, length: number, callback?: (error: Error | null, bytes: number) => void): void;
|
send(msg: string | Uint8Array, offset: number, length: number, callback?: (error: Error | null, bytes: number) => void): void;
|
||||||
setBroadcast(flag: boolean): void;
|
setBroadcast(flag: boolean): void;
|
||||||
setMulticastInterface(multicastInterface: string): void;
|
setMulticastInterface(multicastInterface: string): void;
|
||||||
setMulticastLoopback(flag: boolean): void;
|
setMulticastLoopback(flag: boolean): boolean;
|
||||||
setMulticastTTL(ttl: number): void;
|
setMulticastTTL(ttl: number): number;
|
||||||
setRecvBufferSize(size: number): void;
|
setRecvBufferSize(size: number): void;
|
||||||
setSendBufferSize(size: number): void;
|
setSendBufferSize(size: number): void;
|
||||||
setTTL(ttl: number): void;
|
setTTL(ttl: number): number;
|
||||||
unref(): this;
|
unref(): this;
|
||||||
/**
|
/**
|
||||||
* Tells the kernel to join a source-specific multicast channel at the given
|
* Tells the kernel to join a source-specific multicast channel at the given
|
||||||
@ -142,3 +142,6 @@ declare module 'dgram' {
|
|||||||
prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
|
prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module 'node:dgram' {
|
||||||
|
export * from 'dgram';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'dns' {
|
declare module 'dns' {
|
||||||
// Supported getaddrinfo flags.
|
// Supported getaddrinfo flags.
|
||||||
@ -253,6 +253,8 @@ declare module 'dns' {
|
|||||||
function setServers(servers: ReadonlyArray<string>): void;
|
function setServers(servers: ReadonlyArray<string>): void;
|
||||||
function getServers(): string[];
|
function getServers(): string[];
|
||||||
|
|
||||||
|
function setDefaultResultOrder(order: 'ipv4first' | 'verbatim'): void;
|
||||||
|
|
||||||
// Error codes
|
// Error codes
|
||||||
const NODATA: string;
|
const NODATA: string;
|
||||||
const FORMERR: string;
|
const FORMERR: string;
|
||||||
@ -359,6 +361,8 @@ declare module 'dns' {
|
|||||||
|
|
||||||
function setServers(servers: ReadonlyArray<string>): void;
|
function setServers(servers: ReadonlyArray<string>): void;
|
||||||
|
|
||||||
|
function setDefaultResultOrder(order: 'ipv4first' | 'verbatim'): void;
|
||||||
|
|
||||||
class Resolver {
|
class Resolver {
|
||||||
constructor(options?: ResolverOptions);
|
constructor(options?: ResolverOptions);
|
||||||
cancel(): void;
|
cancel(): void;
|
||||||
@ -381,3 +385,6 @@ declare module 'dns' {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module 'node:dns' {
|
||||||
|
export * from 'dns';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'domain' {
|
declare module 'domain' {
|
||||||
import EventEmitter = require('events');
|
import EventEmitter = require('events');
|
||||||
@ -25,3 +25,6 @@ declare module 'domain' {
|
|||||||
|
|
||||||
function create(): Domain;
|
function create(): Domain;
|
||||||
}
|
}
|
||||||
|
declare module 'node:domain' {
|
||||||
|
export * from 'domain';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'events' {
|
declare module 'events' {
|
||||||
interface EventEmitterOptions {
|
interface EventEmitterOptions {
|
||||||
@ -79,3 +79,7 @@ declare module 'events' {
|
|||||||
|
|
||||||
export = EventEmitter;
|
export = EventEmitter;
|
||||||
}
|
}
|
||||||
|
declare module 'node:events' {
|
||||||
|
import events = require('events');
|
||||||
|
export = events;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'fs' {
|
declare module 'fs' {
|
||||||
import * as stream from 'stream';
|
import * as stream from 'stream';
|
||||||
@ -146,7 +146,7 @@ declare module 'fs' {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class ReadStream extends stream.Readable {
|
export class ReadStream extends stream.Readable {
|
||||||
close(): void;
|
close(callback?: (err?: NodeJS.ErrnoException | null) => void): void;
|
||||||
bytesRead: number;
|
bytesRead: number;
|
||||||
path: string | Buffer;
|
path: string | Buffer;
|
||||||
pending: boolean;
|
pending: boolean;
|
||||||
@ -214,7 +214,7 @@ declare module 'fs' {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class WriteStream extends stream.Writable {
|
export class WriteStream extends stream.Writable {
|
||||||
close(): void;
|
close(callback?: (err?: NodeJS.ErrnoException | null) => void): void;
|
||||||
bytesWritten: number;
|
bytesWritten: number;
|
||||||
path: string | Buffer;
|
path: string | Buffer;
|
||||||
pending: boolean;
|
pending: boolean;
|
||||||
@ -2244,13 +2244,13 @@ declare module 'fs' {
|
|||||||
bufferSize?: number | undefined;
|
bufferSize?: number | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function opendirSync(path: string, options?: OpenDirOptions): Dir;
|
export function opendirSync(path: PathLike, options?: OpenDirOptions): Dir;
|
||||||
|
|
||||||
export function opendir(path: string, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
|
export function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
|
||||||
export function opendir(path: string, options: OpenDirOptions, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
|
export function opendir(path: PathLike, options: OpenDirOptions, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
|
||||||
|
|
||||||
export namespace opendir {
|
export namespace opendir {
|
||||||
function __promisify__(path: string, options?: OpenDirOptions): Promise<Dir>;
|
function __promisify__(path: PathLike, options?: OpenDirOptions): Promise<Dir>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface BigIntStats extends StatsBase<bigint> {
|
export interface BigIntStats extends StatsBase<bigint> {
|
||||||
@ -2271,3 +2271,6 @@ declare module 'fs' {
|
|||||||
bigint?: boolean | undefined;
|
bigint?: boolean | undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module 'node:fs' {
|
||||||
|
export * from 'fs';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'fs/promises' {
|
declare module 'fs/promises' {
|
||||||
import {
|
import {
|
||||||
@ -564,5 +564,8 @@ declare module 'fs/promises' {
|
|||||||
*/
|
*/
|
||||||
function readFile(path: PathLike | FileHandle, options?: BaseEncodingOptions & { flag?: OpenMode | undefined } | BufferEncoding | null): Promise<string | Buffer>;
|
function readFile(path: PathLike | FileHandle, options?: BaseEncodingOptions & { flag?: OpenMode | undefined } | BufferEncoding | null): Promise<string | Buffer>;
|
||||||
|
|
||||||
function opendir(path: string, options?: OpenDirOptions): Promise<Dir>;
|
function opendir(path: PathLike, options?: OpenDirOptions): Promise<Dir>;
|
||||||
|
}
|
||||||
|
declare module 'node:fs/promises' {
|
||||||
|
export * from 'fs/promises';
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
// Declare "static" methods in Error
|
// Declare "static" methods in Error
|
||||||
interface ErrorConstructor {
|
interface ErrorConstructor {
|
||||||
@ -74,14 +74,57 @@ declare var module: NodeModule;
|
|||||||
declare var exports: any;
|
declare var exports: any;
|
||||||
|
|
||||||
// Buffer class
|
// Buffer class
|
||||||
type BufferEncoding = "ascii" | "utf8" | "utf-8" | "utf16le" | "ucs2" | "ucs-2" | "base64" | "latin1" | "binary" | "hex";
|
type BufferEncoding = "ascii" | "utf8" | "utf-8" | "utf16le" | "ucs2" | "ucs-2" | "base64" | "base64url" | "latin1" | "binary" | "hex";
|
||||||
|
|
||||||
type WithImplicitCoercion<T> = T | { valueOf(): T };
|
type WithImplicitCoercion<T> = T | { valueOf(): T };
|
||||||
|
|
||||||
|
//#region borrowed
|
||||||
|
// from https://github.com/microsoft/TypeScript/blob/38da7c600c83e7b31193a62495239a0fe478cb67/lib/lib.webworker.d.ts#L633 until moved to separate lib
|
||||||
|
/**
|
||||||
|
* A controller object that allows you to abort one or more DOM requests as and when desired.
|
||||||
|
* @since v14.7.0
|
||||||
|
*/
|
||||||
|
interface AbortController {
|
||||||
|
/**
|
||||||
|
* Returns the AbortSignal object associated with this object.
|
||||||
|
* @since v14.7.0
|
||||||
|
*/
|
||||||
|
readonly signal: AbortSignal;
|
||||||
|
/**
|
||||||
|
* Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted.
|
||||||
|
* @since v14.7.0
|
||||||
|
*/
|
||||||
|
abort(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object.
|
||||||
|
* @since v14.7.0
|
||||||
|
*/
|
||||||
|
interface AbortSignal {
|
||||||
|
/**
|
||||||
|
* Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise.
|
||||||
|
* @since v14.7.0
|
||||||
|
*/
|
||||||
|
readonly aborted: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare var AbortController: {
|
||||||
|
prototype: AbortController;
|
||||||
|
new(): AbortController;
|
||||||
|
};
|
||||||
|
|
||||||
|
declare var AbortSignal: {
|
||||||
|
prototype: AbortSignal;
|
||||||
|
new(): AbortSignal;
|
||||||
|
// TODO: Add abort() static
|
||||||
|
};
|
||||||
|
//#endregion borrowed
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Raw data is stored in instances of the Buffer class.
|
* Raw data is stored in instances of the Buffer class.
|
||||||
* A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized.
|
* A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized.
|
||||||
* Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'
|
* Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex'
|
||||||
*/
|
*/
|
||||||
declare class Buffer extends Uint8Array {
|
declare class Buffer extends Uint8Array {
|
||||||
/**
|
/**
|
||||||
@ -163,7 +206,7 @@ declare class Buffer extends Uint8Array {
|
|||||||
static isBuffer(obj: any): obj is Buffer;
|
static isBuffer(obj: any): obj is Buffer;
|
||||||
/**
|
/**
|
||||||
* Returns true if {encoding} is a valid encoding argument.
|
* Returns true if {encoding} is a valid encoding argument.
|
||||||
* Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'
|
* Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex'
|
||||||
*
|
*
|
||||||
* @param encoding string to test.
|
* @param encoding string to test.
|
||||||
*/
|
*/
|
||||||
@ -258,24 +301,89 @@ declare class Buffer extends Uint8Array {
|
|||||||
writeBigInt64BE(value: bigint, offset?: number): number;
|
writeBigInt64BE(value: bigint, offset?: number): number;
|
||||||
writeBigInt64LE(value: bigint, offset?: number): number;
|
writeBigInt64LE(value: bigint, offset?: number): number;
|
||||||
writeBigUInt64BE(value: bigint, offset?: number): number;
|
writeBigUInt64BE(value: bigint, offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeBigUInt64BE
|
||||||
|
* @since v14.10.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeBigUint64BE(value: bigint, offset?: number): number;
|
||||||
writeBigUInt64LE(value: bigint, offset?: number): number;
|
writeBigUInt64LE(value: bigint, offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeBigUInt64LE
|
||||||
|
* @since v14.10.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeBigUint64LE(value: bigint, offset?: number): number;
|
||||||
writeUIntLE(value: number, offset: number, byteLength: number): number;
|
writeUIntLE(value: number, offset: number, byteLength: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeUIntLE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeUintLE(value: number, offset: number, byteLength: number): number;
|
||||||
writeUIntBE(value: number, offset: number, byteLength: number): number;
|
writeUIntBE(value: number, offset: number, byteLength: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeUIntBE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeUintBE(value: number, offset: number, byteLength: number): number;
|
||||||
writeIntLE(value: number, offset: number, byteLength: number): number;
|
writeIntLE(value: number, offset: number, byteLength: number): number;
|
||||||
writeIntBE(value: number, offset: number, byteLength: number): number;
|
writeIntBE(value: number, offset: number, byteLength: number): number;
|
||||||
readBigUInt64BE(offset?: number): bigint;
|
readBigUInt64BE(offset?: number): bigint;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readBigUInt64BE
|
||||||
|
* @since v14.10.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readBigUint64BE(offset?: number): bigint;
|
||||||
readBigUInt64LE(offset?: number): bigint;
|
readBigUInt64LE(offset?: number): bigint;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readBigUInt64LE
|
||||||
|
* @since v14.10.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readBigUint64LE(offset?: number): bigint;
|
||||||
readBigInt64BE(offset?: number): bigint;
|
readBigInt64BE(offset?: number): bigint;
|
||||||
readBigInt64LE(offset?: number): bigint;
|
readBigInt64LE(offset?: number): bigint;
|
||||||
readUIntLE(offset: number, byteLength: number): number;
|
readUIntLE(offset: number, byteLength: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readUIntLE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readUintLE(offset: number, byteLength: number): number;
|
||||||
readUIntBE(offset: number, byteLength: number): number;
|
readUIntBE(offset: number, byteLength: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readUIntBE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readUintBE(offset: number, byteLength: number): number;
|
||||||
readIntLE(offset: number, byteLength: number): number;
|
readIntLE(offset: number, byteLength: number): number;
|
||||||
readIntBE(offset: number, byteLength: number): number;
|
readIntBE(offset: number, byteLength: number): number;
|
||||||
readUInt8(offset?: number): number;
|
readUInt8(offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readUInt8
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readUint8(offset?: number): number;
|
||||||
readUInt16LE(offset?: number): number;
|
readUInt16LE(offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readUInt16LE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readUint16LE(offset?: number): number;
|
||||||
readUInt16BE(offset?: number): number;
|
readUInt16BE(offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readUInt16BE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readUint16BE(offset?: number): number;
|
||||||
readUInt32LE(offset?: number): number;
|
readUInt32LE(offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readUInt32LE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readUint32LE(offset?: number): number;
|
||||||
readUInt32BE(offset?: number): number;
|
readUInt32BE(offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.readUInt32BE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
readUint32BE(offset?: number): number;
|
||||||
readInt8(offset?: number): number;
|
readInt8(offset?: number): number;
|
||||||
readInt16LE(offset?: number): number;
|
readInt16LE(offset?: number): number;
|
||||||
readInt16BE(offset?: number): number;
|
readInt16BE(offset?: number): number;
|
||||||
@ -290,10 +398,35 @@ declare class Buffer extends Uint8Array {
|
|||||||
swap32(): Buffer;
|
swap32(): Buffer;
|
||||||
swap64(): Buffer;
|
swap64(): Buffer;
|
||||||
writeUInt8(value: number, offset?: number): number;
|
writeUInt8(value: number, offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeUInt8
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeUint8(value: number, offset?: number): number;
|
||||||
writeUInt16LE(value: number, offset?: number): number;
|
writeUInt16LE(value: number, offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeUInt16LE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeUint16LE(value: number, offset?: number): number;
|
||||||
writeUInt16BE(value: number, offset?: number): number;
|
writeUInt16BE(value: number, offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeUInt16BE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeUint16BE(value: number, offset?: number): number;
|
||||||
writeUInt32LE(value: number, offset?: number): number;
|
writeUInt32LE(value: number, offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeUInt32LE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeUint32LE(value: number, offset?: number): number;
|
||||||
writeUInt32BE(value: number, offset?: number): number;
|
writeUInt32BE(value: number, offset?: number): number;
|
||||||
|
/**
|
||||||
|
* @alias Buffer.writeUInt32BE
|
||||||
|
* @since v14.9.0, v12.19.0
|
||||||
|
*/
|
||||||
|
writeUint32BE(value: number, offset?: number): number;
|
||||||
writeInt8(value: number, offset?: number): number;
|
writeInt8(value: number, offset?: number): number;
|
||||||
writeInt16LE(value: number, offset?: number): number;
|
writeInt16LE(value: number, offset?: number): number;
|
||||||
writeInt16BE(value: number, offset?: number): number;
|
writeInt16BE(value: number, offset?: number): number;
|
||||||
@ -460,9 +593,9 @@ declare namespace NodeJS {
|
|||||||
writable: boolean;
|
writable: boolean;
|
||||||
write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean;
|
write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean;
|
||||||
write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean;
|
write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean;
|
||||||
end(cb?: () => void): void;
|
end(cb?: () => void): this;
|
||||||
end(data: string | Uint8Array, cb?: () => void): void;
|
end(data: string | Uint8Array, cb?: () => void): this;
|
||||||
end(str: string, encoding?: BufferEncoding, cb?: () => void): void;
|
end(str: string, encoding?: BufferEncoding, cb?: () => void): this;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ReadWriteStream extends ReadableStream, WritableStream { }
|
interface ReadWriteStream extends ReadableStream, WritableStream { }
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'http' {
|
declare module 'http' {
|
||||||
import * as stream from 'stream';
|
import * as stream from 'stream';
|
||||||
import { URL } from 'url';
|
import { URL } from 'url';
|
||||||
import { Socket, Server as NetServer } from 'net';
|
import { Socket, Server as NetServer, LookupFunction } from 'net';
|
||||||
|
|
||||||
// incoming headers will never contain number
|
// incoming headers will never contain number
|
||||||
interface IncomingHttpHeaders extends NodeJS.Dict<string | string[]> {
|
interface IncomingHttpHeaders extends NodeJS.Dict<string | string[]> {
|
||||||
@ -102,6 +102,7 @@ declare module 'http' {
|
|||||||
setHost?: boolean | undefined;
|
setHost?: boolean | undefined;
|
||||||
// https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278
|
// https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278
|
||||||
createConnection?: ((options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket) | undefined;
|
createConnection?: ((options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket) | undefined;
|
||||||
|
lookup?: LookupFunction | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ServerOptions {
|
interface ServerOptions {
|
||||||
@ -239,7 +240,7 @@ declare module 'http' {
|
|||||||
constructor();
|
constructor();
|
||||||
|
|
||||||
setTimeout(msecs: number, callback?: () => void): this;
|
setTimeout(msecs: number, callback?: () => void): this;
|
||||||
setHeader(name: string, value: number | string | ReadonlyArray<string>): void;
|
setHeader(name: string, value: number | string | ReadonlyArray<string>): this;
|
||||||
getHeader(name: string): number | string | string[] | undefined;
|
getHeader(name: string): number | string | string[] | undefined;
|
||||||
getHeaders(): OutgoingHttpHeaders;
|
getHeaders(): OutgoingHttpHeaders;
|
||||||
getHeaderNames(): string[];
|
getHeaderNames(): string[];
|
||||||
@ -281,6 +282,8 @@ declare module 'http' {
|
|||||||
aborted: boolean;
|
aborted: boolean;
|
||||||
host: string;
|
host: string;
|
||||||
protocol: string;
|
protocol: string;
|
||||||
|
reusedSocket: boolean;
|
||||||
|
maxHeadersCount: number;
|
||||||
|
|
||||||
constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void);
|
constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void);
|
||||||
|
|
||||||
@ -408,7 +411,7 @@ declare module 'http' {
|
|||||||
* Only valid for response obtained from http.ClientRequest.
|
* Only valid for response obtained from http.ClientRequest.
|
||||||
*/
|
*/
|
||||||
statusMessage?: string | undefined;
|
statusMessage?: string | undefined;
|
||||||
destroy(error?: Error): void;
|
destroy(error?: Error): this;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface AgentOptions {
|
interface AgentOptions {
|
||||||
@ -487,3 +490,6 @@ declare module 'http' {
|
|||||||
*/
|
*/
|
||||||
const maxHeaderSize: number;
|
const maxHeaderSize: number;
|
||||||
}
|
}
|
||||||
|
declare module 'node:http' {
|
||||||
|
export * from 'http';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'http2' {
|
declare module 'http2' {
|
||||||
import EventEmitter = require('events');
|
import EventEmitter = require('events');
|
||||||
@ -597,7 +597,7 @@ declare module 'http2' {
|
|||||||
readonly socket: net.Socket | tls.TLSSocket;
|
readonly socket: net.Socket | tls.TLSSocket;
|
||||||
readonly stream: ServerHttp2Stream;
|
readonly stream: ServerHttp2Stream;
|
||||||
readonly trailers: IncomingHttpHeaders;
|
readonly trailers: IncomingHttpHeaders;
|
||||||
readonly url: string;
|
url: string;
|
||||||
|
|
||||||
setTimeout(msecs: number, callback?: () => void): void;
|
setTimeout(msecs: number, callback?: () => void): void;
|
||||||
read(size?: number): Buffer | string | null;
|
read(size?: number): Buffer | string | null;
|
||||||
@ -663,9 +663,9 @@ declare module 'http2' {
|
|||||||
statusCode: number;
|
statusCode: number;
|
||||||
statusMessage: '';
|
statusMessage: '';
|
||||||
addTrailers(trailers: OutgoingHttpHeaders): void;
|
addTrailers(trailers: OutgoingHttpHeaders): void;
|
||||||
end(callback?: () => void): void;
|
end(callback?: () => void): this;
|
||||||
end(data: string | Uint8Array, callback?: () => void): void;
|
end(data: string | Uint8Array, callback?: () => void): this;
|
||||||
end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): void;
|
end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this;
|
||||||
getHeader(name: string): string;
|
getHeader(name: string): string;
|
||||||
getHeaderNames(): string[];
|
getHeaderNames(): string[];
|
||||||
getHeaders(): OutgoingHttpHeaders;
|
getHeaders(): OutgoingHttpHeaders;
|
||||||
@ -959,3 +959,6 @@ declare module 'http2' {
|
|||||||
listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void
|
listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void
|
||||||
): ClientHttp2Session;
|
): ClientHttp2Session;
|
||||||
}
|
}
|
||||||
|
declare module 'node:http2' {
|
||||||
|
export * from 'http2';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'https' {
|
declare module 'https' {
|
||||||
import { Duplex } from 'stream';
|
import { Duplex } from 'stream';
|
||||||
@ -140,3 +140,6 @@ declare module 'https' {
|
|||||||
function get(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
|
function get(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest;
|
||||||
let globalAgent: Agent;
|
let globalAgent: Agent;
|
||||||
}
|
}
|
||||||
|
declare module 'node:https' {
|
||||||
|
export * from 'https';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'module' {
|
declare module 'module' {
|
||||||
import { URL } from 'url';
|
import { URL } from 'url';
|
||||||
@ -53,3 +53,7 @@ declare module 'module' {
|
|||||||
}
|
}
|
||||||
export = Module;
|
export = Module;
|
||||||
}
|
}
|
||||||
|
declare module 'node:module' {
|
||||||
|
import module = require('module');
|
||||||
|
export = module;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'net' {
|
declare module 'net' {
|
||||||
import * as stream from 'stream';
|
import * as stream from 'stream';
|
||||||
@ -95,9 +95,9 @@ declare module 'net' {
|
|||||||
readonly remotePort?: number | undefined;
|
readonly remotePort?: number | undefined;
|
||||||
|
|
||||||
// Extended base methods
|
// Extended base methods
|
||||||
end(cb?: () => void): void;
|
end(cb?: () => void): this;
|
||||||
end(buffer: Uint8Array | string, cb?: () => void): void;
|
end(buffer: Uint8Array | string, cb?: () => void): this;
|
||||||
end(str: Uint8Array | string, encoding?: BufferEncoding, cb?: () => void): void;
|
end(str: Uint8Array | string, encoding?: BufferEncoding, cb?: () => void): this;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* events.EventEmitter
|
* events.EventEmitter
|
||||||
@ -294,3 +294,6 @@ declare module 'net' {
|
|||||||
function isIPv4(input: string): boolean;
|
function isIPv4(input: string): boolean;
|
||||||
function isIPv6(input: string): boolean;
|
function isIPv6(input: string): boolean;
|
||||||
}
|
}
|
||||||
|
declare module 'node:net' {
|
||||||
|
export * from 'net';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'os' {
|
declare module 'os' {
|
||||||
interface CpuInfo {
|
interface CpuInfo {
|
||||||
@ -240,3 +240,6 @@ declare module 'os' {
|
|||||||
*/
|
*/
|
||||||
function setPriority(pid: number, priority: number): void;
|
function setPriority(pid: number, priority: number): void;
|
||||||
}
|
}
|
||||||
|
declare module 'node:os' {
|
||||||
|
export * from 'os';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'path' {
|
declare module 'path' {
|
||||||
namespace path {
|
namespace path {
|
||||||
@ -154,3 +154,7 @@ declare module 'path' {
|
|||||||
const path: path.PlatformPath;
|
const path: path.PlatformPath;
|
||||||
export = path;
|
export = path;
|
||||||
}
|
}
|
||||||
|
declare module 'node:path' {
|
||||||
|
import path = require('path');
|
||||||
|
export = path;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'perf_hooks' {
|
declare module 'perf_hooks' {
|
||||||
import { AsyncResource } from 'async_hooks';
|
import { AsyncResource } from 'async_hooks';
|
||||||
@ -272,3 +272,6 @@ declare module 'perf_hooks' {
|
|||||||
|
|
||||||
function monitorEventLoopDelay(options?: EventLoopMonitorOptions): EventLoopDelayMonitor;
|
function monitorEventLoopDelay(options?: EventLoopMonitorOptions): EventLoopDelayMonitor;
|
||||||
}
|
}
|
||||||
|
declare module 'node:perf_hooks' {
|
||||||
|
export * from 'perf_hooks';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'process' {
|
declare module 'process' {
|
||||||
import * as tty from 'tty';
|
import * as tty from 'tty';
|
||||||
@ -123,7 +123,7 @@ declare module 'process' {
|
|||||||
/**
|
/**
|
||||||
* If true, a diagnostic report is generated when the process
|
* If true, a diagnostic report is generated when the process
|
||||||
* receives the signal specified by process.report.signal.
|
* receives the signal specified by process.report.signal.
|
||||||
* @defaul false
|
* @default false
|
||||||
*/
|
*/
|
||||||
reportOnSignal: boolean;
|
reportOnSignal: boolean;
|
||||||
|
|
||||||
@ -410,3 +410,7 @@ declare module 'process' {
|
|||||||
|
|
||||||
export = process;
|
export = process;
|
||||||
}
|
}
|
||||||
|
declare module 'node:process' {
|
||||||
|
import process = require('process');
|
||||||
|
export = process;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'querystring' {
|
declare module 'querystring' {
|
||||||
interface StringifyOptions {
|
interface StringifyOptions {
|
||||||
@ -29,3 +29,6 @@ declare module 'querystring' {
|
|||||||
function escape(str: string): string;
|
function escape(str: string): string;
|
||||||
function unescape(str: string): string;
|
function unescape(str: string): string;
|
||||||
}
|
}
|
||||||
|
declare module 'node:querystring' {
|
||||||
|
export * from 'querystring';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'readline' {
|
declare module 'readline' {
|
||||||
import EventEmitter = require('events');
|
import EventEmitter = require('events');
|
||||||
@ -48,6 +48,7 @@ declare module 'readline' {
|
|||||||
resume(): this;
|
resume(): this;
|
||||||
close(): void;
|
close(): void;
|
||||||
write(data: string | Buffer, key?: Key): void;
|
write(data: string | Buffer, key?: Key): void;
|
||||||
|
write(data: undefined | null | string | Buffer, key: Key): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the real position of the cursor in relation to the input
|
* Returns the real position of the cursor in relation to the input
|
||||||
@ -171,3 +172,6 @@ declare module 'readline' {
|
|||||||
*/
|
*/
|
||||||
function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean;
|
function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean;
|
||||||
}
|
}
|
||||||
|
declare module 'node:readline' {
|
||||||
|
export * from 'readline';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'stream' {
|
declare module 'stream' {
|
||||||
import EventEmitter = require('events');
|
import EventEmitter = require('events');
|
||||||
@ -48,7 +48,7 @@ declare module 'stream' {
|
|||||||
wrap(oldStream: NodeJS.ReadableStream): this;
|
wrap(oldStream: NodeJS.ReadableStream): this;
|
||||||
push(chunk: any, encoding?: BufferEncoding): boolean;
|
push(chunk: any, encoding?: BufferEncoding): boolean;
|
||||||
_destroy(error: Error | null, callback: (error?: Error | null) => void): void;
|
_destroy(error: Error | null, callback: (error?: Error | null) => void): void;
|
||||||
destroy(error?: Error): void;
|
destroy(error?: Error): this;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event emitter
|
* Event emitter
|
||||||
@ -157,12 +157,12 @@ declare module 'stream' {
|
|||||||
write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
|
write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
|
||||||
write(chunk: any, encoding: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean;
|
write(chunk: any, encoding: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean;
|
||||||
setDefaultEncoding(encoding: BufferEncoding): this;
|
setDefaultEncoding(encoding: BufferEncoding): this;
|
||||||
end(cb?: () => void): void;
|
end(cb?: () => void): this;
|
||||||
end(chunk: any, cb?: () => void): void;
|
end(chunk: any, cb?: () => void): this;
|
||||||
end(chunk: any, encoding: BufferEncoding, cb?: () => void): void;
|
end(chunk: any, encoding: BufferEncoding, cb?: () => void): this;
|
||||||
cork(): void;
|
cork(): void;
|
||||||
uncork(): void;
|
uncork(): void;
|
||||||
destroy(error?: Error): void;
|
destroy(error?: Error): this;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event emitter
|
* Event emitter
|
||||||
@ -263,9 +263,9 @@ declare module 'stream' {
|
|||||||
write(chunk: any, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean;
|
write(chunk: any, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean;
|
||||||
write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
|
write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean;
|
||||||
setDefaultEncoding(encoding: BufferEncoding): this;
|
setDefaultEncoding(encoding: BufferEncoding): this;
|
||||||
end(cb?: () => void): void;
|
end(cb?: () => void): this;
|
||||||
end(chunk: any, cb?: () => void): void;
|
end(chunk: any, cb?: () => void): this;
|
||||||
end(chunk: any, encoding?: BufferEncoding, cb?: () => void): void;
|
end(chunk: any, encoding?: BufferEncoding, cb?: () => void): this;
|
||||||
cork(): void;
|
cork(): void;
|
||||||
uncork(): void;
|
uncork(): void;
|
||||||
}
|
}
|
||||||
@ -356,3 +356,7 @@ declare module 'stream' {
|
|||||||
|
|
||||||
export = internal;
|
export = internal;
|
||||||
}
|
}
|
||||||
|
declare module 'node:stream' {
|
||||||
|
import stream = require('stream');
|
||||||
|
export = stream;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'string_decoder' {
|
declare module 'string_decoder' {
|
||||||
class StringDecoder {
|
class StringDecoder {
|
||||||
@ -8,3 +8,6 @@ declare module 'string_decoder' {
|
|||||||
end(buffer?: Buffer): string;
|
end(buffer?: Buffer): string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module 'node:string_decoder' {
|
||||||
|
export * from 'string_decoder';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'timers' {
|
declare module 'timers' {
|
||||||
function setTimeout(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout;
|
function setTimeout(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout;
|
||||||
@ -17,3 +17,6 @@ declare module 'timers' {
|
|||||||
}
|
}
|
||||||
function clearImmediate(immediateId: NodeJS.Immediate): void;
|
function clearImmediate(immediateId: NodeJS.Immediate): void;
|
||||||
}
|
}
|
||||||
|
declare module 'node:timers' {
|
||||||
|
export * from 'timers';
|
||||||
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'tls' {
|
declare module 'tls' {
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
|
import * as stream from 'stream';
|
||||||
|
|
||||||
const CLIENT_RENEG_LIMIT: number;
|
const CLIENT_RENEG_LIMIT: number;
|
||||||
const CLIENT_RENEG_WINDOW: number;
|
const CLIENT_RENEG_WINDOW: number;
|
||||||
@ -444,7 +445,7 @@ declare module 'tls' {
|
|||||||
host?: string | undefined;
|
host?: string | undefined;
|
||||||
port?: number | undefined;
|
port?: number | undefined;
|
||||||
path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored.
|
path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored.
|
||||||
socket?: net.Socket | undefined; // Establish secure connection on a given socket rather than creating a new socket
|
socket?: stream.Duplex | undefined; // Establish secure connection on a given socket rather than creating a new socket
|
||||||
checkServerIdentity?: typeof checkServerIdentity | undefined;
|
checkServerIdentity?: typeof checkServerIdentity | undefined;
|
||||||
servername?: string | undefined; // SNI TLS Extension
|
servername?: string | undefined; // SNI TLS Extension
|
||||||
session?: Buffer | undefined;
|
session?: Buffer | undefined;
|
||||||
@ -781,3 +782,6 @@ declare module 'tls' {
|
|||||||
*/
|
*/
|
||||||
const rootCertificates: ReadonlyArray<string>;
|
const rootCertificates: ReadonlyArray<string>;
|
||||||
}
|
}
|
||||||
|
declare module 'node:tls' {
|
||||||
|
export * from 'tls';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'trace_events' {
|
declare module 'trace_events' {
|
||||||
/**
|
/**
|
||||||
@ -62,3 +62,6 @@ declare module 'trace_events' {
|
|||||||
*/
|
*/
|
||||||
function getEnabledCategories(): string | undefined;
|
function getEnabledCategories(): string | undefined;
|
||||||
}
|
}
|
||||||
|
declare module 'node:trace_events' {
|
||||||
|
export * from 'trace_events';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'tty' {
|
declare module 'tty' {
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
@ -67,3 +67,6 @@ declare module 'tty' {
|
|||||||
isTTY: boolean;
|
isTTY: boolean;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module 'node:tty' {
|
||||||
|
export * from 'tty';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'url' {
|
declare module 'url' {
|
||||||
import { ParsedUrlQuery, ParsedUrlQueryInput } from 'querystring';
|
import { ParsedUrlQuery, ParsedUrlQueryInput } from 'querystring';
|
||||||
@ -105,7 +105,7 @@ declare module 'url' {
|
|||||||
append(name: string, value: string): void;
|
append(name: string, value: string): void;
|
||||||
delete(name: string): void;
|
delete(name: string): void;
|
||||||
entries(): IterableIterator<[string, string]>;
|
entries(): IterableIterator<[string, string]>;
|
||||||
forEach(callback: (value: string, name: string, searchParams: this) => void): void;
|
forEach(callback: (value: string, name: string, searchParams: URLSearchParams) => void, thisArg?: any): void;
|
||||||
get(name: string): string | null;
|
get(name: string): string | null;
|
||||||
getAll(name: string): string[];
|
getAll(name: string): string[];
|
||||||
has(name: string): boolean;
|
has(name: string): boolean;
|
||||||
@ -116,4 +116,37 @@ declare module 'url' {
|
|||||||
values(): IterableIterator<string>;
|
values(): IterableIterator<string>;
|
||||||
[Symbol.iterator](): IterableIterator<[string, string]>;
|
[Symbol.iterator](): IterableIterator<[string, string]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import { URL as _URL, URLSearchParams as _URLSearchParams } from 'url';
|
||||||
|
global {
|
||||||
|
interface URLSearchParams extends _URLSearchParams {}
|
||||||
|
interface URL extends _URL {}
|
||||||
|
interface Global {
|
||||||
|
URL: typeof _URL;
|
||||||
|
URLSearchParams: typeof _URLSearchParams;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* `URL` class is a global reference for `require('url').URL`
|
||||||
|
* https://nodejs.org/api/url.html#the-whatwg-url-api
|
||||||
|
* @since v10.0.0
|
||||||
|
*/
|
||||||
|
var URL:
|
||||||
|
// For compatibility with "dom" and "webworker" URL declarations
|
||||||
|
typeof globalThis extends { onmessage: any, URL: infer URL }
|
||||||
|
? URL
|
||||||
|
: typeof _URL;
|
||||||
|
/**
|
||||||
|
* `URLSearchParams` class is a global reference for `require('url').URLSearchParams`.
|
||||||
|
* https://nodejs.org/api/url.html#class-urlsearchparams
|
||||||
|
* @since v10.0.0
|
||||||
|
*/
|
||||||
|
var URLSearchParams:
|
||||||
|
// For compatibility with "dom" and "webworker" URLSearchParams declarations
|
||||||
|
typeof globalThis extends { onmessage: any, URLSearchParams: infer URLSearchParams }
|
||||||
|
? URLSearchParams
|
||||||
|
: typeof _URLSearchParams;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
declare module 'node:url' {
|
||||||
|
export * from 'url';
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'util' {
|
declare module 'util' {
|
||||||
interface InspectOptions extends NodeJS.InspectOptions { }
|
interface InspectOptions extends NodeJS.InspectOptions { }
|
||||||
@ -10,6 +10,7 @@ declare module 'util' {
|
|||||||
}
|
}
|
||||||
function format(format?: any, ...param: any[]): string;
|
function format(format?: any, ...param: any[]): string;
|
||||||
function formatWithOptions(inspectOptions: InspectOptions, format?: any, ...param: any[]): string;
|
function formatWithOptions(inspectOptions: InspectOptions, format?: any, ...param: any[]): string;
|
||||||
|
function getSystemErrorName(err: number): string;
|
||||||
/** @deprecated since v0.11.3 - use a third party module instead. */
|
/** @deprecated since v0.11.3 - use a third party module instead. */
|
||||||
function log(string: string): void;
|
function log(string: string): void;
|
||||||
function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string;
|
function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string;
|
||||||
@ -35,7 +36,12 @@ declare module 'util' {
|
|||||||
/** @deprecated since v4.0.0 - use `util.types.isNativeError()` instead. */
|
/** @deprecated since v4.0.0 - use `util.types.isNativeError()` instead. */
|
||||||
function isError(object: any): object is Error;
|
function isError(object: any): object is Error;
|
||||||
function inherits(constructor: any, superConstructor: any): void;
|
function inherits(constructor: any, superConstructor: any): void;
|
||||||
function debuglog(key: string): (msg: string, ...param: any[]) => void;
|
type DebugLoggerFunction = (msg: string, ...param: any[]) => void;
|
||||||
|
interface DebugLogger extends DebugLoggerFunction {
|
||||||
|
enabled: boolean;
|
||||||
|
}
|
||||||
|
function debuglog(key: string, callback?: (fn: DebugLoggerFunction) => void): DebugLogger;
|
||||||
|
const debug: typeof debuglog;
|
||||||
/** @deprecated since v4.0.0 - use `typeof value === 'boolean'` instead. */
|
/** @deprecated since v4.0.0 - use `typeof value === 'boolean'` instead. */
|
||||||
function isBoolean(object: any): object is boolean;
|
function isBoolean(object: any): object is boolean;
|
||||||
/** @deprecated since v4.0.0 - use `Buffer.isBuffer()` instead. */
|
/** @deprecated since v4.0.0 - use `Buffer.isBuffer()` instead. */
|
||||||
@ -208,3 +214,6 @@ declare module 'util' {
|
|||||||
encodeInto(input: string, output: Uint8Array): EncodeIntoResult;
|
encodeInto(input: string, output: Uint8Array): EncodeIntoResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module 'node:util' {
|
||||||
|
export * from 'util';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'v8' {
|
declare module 'v8' {
|
||||||
import { Readable } from 'stream';
|
import { Readable } from 'stream';
|
||||||
@ -188,3 +188,6 @@ declare module 'v8' {
|
|||||||
*/
|
*/
|
||||||
function deserialize(data: NodeJS.TypedArray): any;
|
function deserialize(data: NodeJS.TypedArray): any;
|
||||||
}
|
}
|
||||||
|
declare module 'node:v8' {
|
||||||
|
export * from 'v8';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'vm' {
|
declare module 'vm' {
|
||||||
interface Context extends NodeJS.Dict<any> { }
|
interface Context extends NodeJS.Dict<any> { }
|
||||||
@ -153,3 +153,6 @@ declare module 'vm' {
|
|||||||
*/
|
*/
|
||||||
function measureMemory(options?: MeasureMemoryOptions): Promise<MemoryMeasurement>;
|
function measureMemory(options?: MeasureMemoryOptions): Promise<MemoryMeasurement>;
|
||||||
}
|
}
|
||||||
|
declare module 'node:vm' {
|
||||||
|
export * from 'vm';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'wasi' {
|
declare module 'wasi' {
|
||||||
interface WASIOptions {
|
interface WASIOptions {
|
||||||
@ -87,3 +87,6 @@ declare module 'wasi' {
|
|||||||
readonly wasiImport: NodeJS.Dict<any>; // TODO: Narrow to DOM types
|
readonly wasiImport: NodeJS.Dict<any>; // TODO: Narrow to DOM types
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module 'node:wasi' {
|
||||||
|
export * from 'wasi';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'worker_threads' {
|
declare module 'worker_threads' {
|
||||||
import { Context } from 'vm';
|
import { Context } from 'vm';
|
||||||
@ -239,3 +239,6 @@ declare module 'worker_threads' {
|
|||||||
*/
|
*/
|
||||||
function receiveMessageOnPort(port: MessagePort): { message: any } | undefined;
|
function receiveMessageOnPort(port: MessagePort): { message: any } | undefined;
|
||||||
}
|
}
|
||||||
|
declare module 'node:worker_threads' {
|
||||||
|
export * from 'worker_threads';
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */
|
/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */
|
||||||
|
|
||||||
declare module 'zlib' {
|
declare module 'zlib' {
|
||||||
import * as stream from 'stream';
|
import * as stream from 'stream';
|
||||||
@ -362,3 +362,6 @@ declare module 'zlib' {
|
|||||||
/** @deprecated */
|
/** @deprecated */
|
||||||
const Z_DEFLATED: number;
|
const Z_DEFLATED: number;
|
||||||
}
|
}
|
||||||
|
declare module 'node:zlib' {
|
||||||
|
export * from 'zlib';
|
||||||
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
BIN
packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/ade705761eb7e702770d.ttf
vendored
Normal file
BIN
packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/ade705761eb7e702770d.ttf
vendored
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -0,0 +1,6 @@
|
|||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.33.0(4b1abad427e58dbedc1215d99a0902ffc885fcd4)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
File diff suppressed because one or more lines are too long
8
packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/editor.js.LICENSE.txt
vendored
Normal file
8
packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/editor.js.LICENSE.txt
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*! @license DOMPurify 2.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.1/LICENSE */
|
||||||
|
|
||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.33.0(4b1abad427e58dbedc1215d99a0902ffc885fcd4)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,6 @@
|
|||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.33.0(4b1abad427e58dbedc1215d99a0902ffc885fcd4)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,6 @@
|
|||||||
|
/*!-----------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Version: 0.33.0(4b1abad427e58dbedc1215d99a0902ffc885fcd4)
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
||||||
|
*-----------------------------------------------------------------------------*/
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user