mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Merge branch 'master' into master
This commit is contained in:
@@ -27,7 +27,8 @@
|
||||
"lock": "Bloquear",
|
||||
"unlock": "Desbloquear",
|
||||
"locked": "Bloqueado",
|
||||
"unlocked": "Desbloqueado"
|
||||
"unlocked": "Desbloqueado",
|
||||
"format": "Formato"
|
||||
},
|
||||
"type": {
|
||||
"string": "texto",
|
||||
@@ -303,7 +304,8 @@
|
||||
"missingType": "La entrada no es un flujo válido - elemento __index__ falta la propiedad 'type'"
|
||||
},
|
||||
"conflictNotification1": "Algunos de los nodos que estás importando ya existen en tu espacio de trabajo.",
|
||||
"conflictNotification2": "Selecciona qué nodos importar y si reemplazar los nodos existentes o importar una copia de los mismos."
|
||||
"conflictNotification2": "Selecciona qué nodos importar y si reemplazar los nodos existentes o importar una copia de los mismos.",
|
||||
"alreadyExists": "Este nodo ya existe"
|
||||
},
|
||||
"copyMessagePath": "Ruta copiada",
|
||||
"copyMessageValue": "Valor copiado",
|
||||
@@ -371,8 +373,12 @@
|
||||
"deleted": "eliminado",
|
||||
"flowDeleted": "flujo eliminado",
|
||||
"flowAdded": "flujo añadido",
|
||||
"moved": "movido",
|
||||
"movedTo": "movido a __id__",
|
||||
"movedFrom": "movido desde __id__"
|
||||
"movedFrom": "movido desde __id__",
|
||||
"none": "ninguno",
|
||||
"position": "posición",
|
||||
"wires": "conectores"
|
||||
},
|
||||
"nodeCount": "__count__ nodo",
|
||||
"nodeCount_plural": "__count__ nodos",
|
||||
@@ -381,9 +387,14 @@
|
||||
"reviewChanges": "Revisar Cambios",
|
||||
"noBinaryFileShowed": "No se puede mostrar el contenido del archivo binario",
|
||||
"viewCommitDiff": "Ver cambios de commit",
|
||||
"commit": "Commit",
|
||||
"compareChanges": "Comparar Cambios",
|
||||
"saveConflict": "Guardar resolución de conflictos",
|
||||
"conflictHeader": "<span>__resolved__</span> de <span>__unresolved__</span> conflictos resueltos",
|
||||
"localChanges": "Cambios Locales",
|
||||
"remoteChanges": "Cambios Remotos",
|
||||
"useLocalChanges": "utilizar cambios locales",
|
||||
"useRemoteChanges": "utilizar cambios remotos",
|
||||
"commonVersionError": "La versión común no contiene JSON válido:",
|
||||
"oldVersionError": "La versión anterior no contiene JSON válido:",
|
||||
"newVersionError": "La versión nueva no contiene JSON válido:"
|
||||
@@ -551,7 +562,9 @@
|
||||
"types": {
|
||||
"local": "Local",
|
||||
"examples": "Ejemplos"
|
||||
}
|
||||
},
|
||||
"type": "Tipo",
|
||||
"name": "Nombre"
|
||||
},
|
||||
"palette": {
|
||||
"noInfo": "no hay información disponible",
|
||||
@@ -613,6 +626,8 @@
|
||||
},
|
||||
"nodeCount": "__label__ nodo",
|
||||
"nodeCount_plural": "__label__ nodos",
|
||||
"pluginCount": "__count__ extensión",
|
||||
"pluginCount_plural": "__count__ extensiones",
|
||||
"moduleCount": "__count__ módulo disponible",
|
||||
"moduleCount_plural": "__count__ módulos disponibles",
|
||||
"inuse": "en uso",
|
||||
@@ -640,6 +655,7 @@
|
||||
"errors": {
|
||||
"catalogLoadFailed": "<p>La carga del catálogo de nodos ha fallado</p><p>Revise la consola del navegador para mas información</p>",
|
||||
"installFailed": "<p>Fallo al instalar: __module__</p><p>__message__</p><p>Revise el log para mas información</p>",
|
||||
"installTimeout": "<p>La instalación continúa en segundo plano.</p><p>Los nodos aparecerán en la paleta cuando finalice. Consulta el registro para obtener más información.</p>",
|
||||
"removeFailed": "<p>Fallo al eliminar: __module__</p><p>__message__</p><p>Revise el log para mas información</p>",
|
||||
"updateFailed": "<p>Fallo al actualizar: __module__</p><p>__message__</p><p>Revise el log para mas información</p>",
|
||||
"enableFailed": "<p>Fallo al activar: __module__</p><p>__message__</p><p>Revise el log para mas información</p>",
|
||||
@@ -654,6 +670,9 @@
|
||||
"body":"<p>Eliminando '__module__'</p><p>La eliminación del nodo lo desinstalará de Node-RED. Es posible que el nodo siga utilizando recursos hasta que Node-RED sea reiniciado.</p>",
|
||||
"title": "Eliminar nodos"
|
||||
},
|
||||
"removePlugin": {
|
||||
"body": "<p>Extensión __module__ eliminada. Vuelve a cargar el editor para borrar los elementos sobrantes.</p>"
|
||||
},
|
||||
"update": {
|
||||
"body":"<p>Actualizando '__module__'</p><p>La actualización del nodo requerirá un reinicio manual de Node-RED para completarse. Debe ser reiniciado manualmente.</p>",
|
||||
"title": "Actualizar nodos"
|
||||
@@ -665,7 +684,8 @@
|
||||
"review": "Abrir información del nodo",
|
||||
"install": "Instalar",
|
||||
"remove": "Eliminar",
|
||||
"update": "Actualizar"
|
||||
"update": "Actualizar",
|
||||
"understood": "Entendido"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -718,6 +738,7 @@
|
||||
"nodeHelp": "Ayuda de nodo",
|
||||
"showHelp": "Mostrar ayuda",
|
||||
"showInOutline": "Mostrar en controno",
|
||||
"hideTopics": "Esconder temas",
|
||||
"showTopics": "Mostrar temas",
|
||||
"noHelp": "No hay ningun tema de ayuda seleccionado",
|
||||
"changeLog": "Registro de Cambios"
|
||||
@@ -792,6 +813,7 @@
|
||||
"branches": "Ramas",
|
||||
"noBranches": "Sin ramas",
|
||||
"deleteConfirm": "¿Estás seguro de que quieres eliminar la rama local '__name__'? Esta acción no puede deshacerse.",
|
||||
"deleteBranch": "Eliminar rama",
|
||||
"unmergedConfirm": "La rama local '__name__' tiene cambios no fusionados que se perderán. ¿Estás seguro de que quieres eliminarla?",
|
||||
"deleteUnmergedBranch": "Eliminar rama no fusionada",
|
||||
"gitRemotes": "Git remotes",
|
||||
@@ -913,6 +935,8 @@
|
||||
}
|
||||
},
|
||||
"typedInput": {
|
||||
"selected": "__count__ seleccionado",
|
||||
"selected_plural": "__count__ seleccionados",
|
||||
"type": {
|
||||
"str": "texto",
|
||||
"num": "número",
|
||||
@@ -923,7 +947,14 @@
|
||||
"date": "marca tiempo",
|
||||
"jsonata": "expresión",
|
||||
"env": "variable de entorno",
|
||||
"cred": "credencial"
|
||||
"cred": "credencial",
|
||||
"conf-types": "nodo configuración"
|
||||
},
|
||||
"date": {
|
||||
"format": {
|
||||
"timestamp": "milisegundos desde epoch",
|
||||
"object": "Objeto de fecha de JavaScript"
|
||||
}
|
||||
}
|
||||
},
|
||||
"editableList": {
|
||||
@@ -1205,6 +1236,18 @@
|
||||
"diagnostics": {
|
||||
"title": "Información Sistema"
|
||||
},
|
||||
"languages": {
|
||||
"de": "Deutsch",
|
||||
"en-US": "English",
|
||||
"es-ES": "Español (España)",
|
||||
"fr": "Français",
|
||||
"ja": "日本語",
|
||||
"ko": "Korean",
|
||||
"pt-BR": "Português (Brasil)",
|
||||
"ru": "Русский",
|
||||
"zh-CN": "简体中文",
|
||||
"zh-TW": "繁體中文"
|
||||
},
|
||||
"validator": {
|
||||
"errors": {
|
||||
"invalid-json": "Datos JSON inválidos: __error__",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@node-red/editor-client",
|
||||
"version": "4.0.3",
|
||||
"version": "4.0.5",
|
||||
"license": "Apache-2.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -73,7 +73,13 @@ RED.nodes = (function() {
|
||||
|
||||
var exports = {
|
||||
setModulePendingUpdated: function(module,version) {
|
||||
moduleList[module].pending_version = version;
|
||||
if (!!RED.plugins.getModule(module)) {
|
||||
// The module updated is a plugin
|
||||
RED.plugins.getModule(module).pending_version = version;
|
||||
} else {
|
||||
moduleList[module].pending_version = version;
|
||||
}
|
||||
|
||||
RED.events.emit("registry:module-updated",{module:module,version:version});
|
||||
},
|
||||
getModule: function(module) {
|
||||
@@ -2408,7 +2414,7 @@ RED.nodes = (function() {
|
||||
}
|
||||
// If importing a link node, ensure both ends of each link are either:
|
||||
// - not in a subflow
|
||||
// - both in the same subflow
|
||||
// - both in the same subflow (not for link call node)
|
||||
if (/^link /.test(n.type) && n.links) {
|
||||
n.links = n.links.filter(function(id) {
|
||||
const otherNode = node_map[id] || RED.nodes.node(id);
|
||||
@@ -2419,9 +2425,13 @@ RED.nodes = (function() {
|
||||
if (otherNode.z === n.z) {
|
||||
// Both ends in the same flow/subflow
|
||||
return true
|
||||
} else if (n.type === "link call" && !getSubflow(otherNode.z)) {
|
||||
// Link call node can call out of a subflow as long as otherNode is
|
||||
// not in a subflow
|
||||
return true
|
||||
} else if (!!getSubflow(n.z) || !!getSubflow(otherNode.z)) {
|
||||
// One end is in a subflow - remove the link
|
||||
return false
|
||||
return false
|
||||
}
|
||||
return true
|
||||
});
|
||||
|
||||
@@ -589,7 +589,9 @@ RED.deploy = (function() {
|
||||
RED.notify('<p>' + RED._("deploy.successfulDeploy") + '</p>', "success");
|
||||
}
|
||||
const flowsToLock = new Set()
|
||||
// Node's properties cannot be modified if its workspace is locked.
|
||||
function ensureUnlocked(id) {
|
||||
// TODO: `RED.nodes.subflow` is useless
|
||||
const flow = id && (RED.nodes.workspace(id) || RED.nodes.subflow(id) || null);
|
||||
const isLocked = flow ? flow.locked : false;
|
||||
if (flow && isLocked) {
|
||||
@@ -642,6 +644,7 @@ RED.deploy = (function() {
|
||||
delete confNode.credentials;
|
||||
}
|
||||
});
|
||||
// Subflow cannot be locked
|
||||
RED.nodes.eachSubflow(function (subflow) {
|
||||
if (subflow.changed) {
|
||||
subflow.changed = false;
|
||||
@@ -650,12 +653,18 @@ RED.deploy = (function() {
|
||||
});
|
||||
RED.nodes.eachWorkspace(function (ws) {
|
||||
if (ws.changed || ws.added) {
|
||||
ensureUnlocked(ws.z)
|
||||
// Ensure the Workspace is unlocked to modify its properties.
|
||||
ensureUnlocked(ws.id);
|
||||
ws.changed = false;
|
||||
delete ws.added
|
||||
if (flowsToLock.has(ws)) {
|
||||
ws.locked = true;
|
||||
flowsToLock.delete(ws);
|
||||
}
|
||||
RED.events.emit("flows:change", ws)
|
||||
}
|
||||
});
|
||||
// Ensures all workspaces to be locked have been locked.
|
||||
flowsToLock.forEach(flow => {
|
||||
flow.locked = true
|
||||
})
|
||||
|
||||
@@ -131,7 +131,7 @@ RED.editor.envVarList = (function() {
|
||||
nameField.trigger('change');
|
||||
}
|
||||
},
|
||||
sortable: ".red-ui-editableList-item-handle",
|
||||
sortable: true,
|
||||
removable: false
|
||||
});
|
||||
var parentEnv = {};
|
||||
|
||||
@@ -382,7 +382,7 @@ RED.typeSearch = (function() {
|
||||
var items = [];
|
||||
RED.nodes.registry.getNodeTypes().forEach(function(t) {
|
||||
var def = RED.nodes.getType(t);
|
||||
if (def.category !== 'config' && t !== 'unknown' && t !== 'tab') {
|
||||
if (def.set?.enabled !== false && def.category !== 'config' && t !== 'unknown' && t !== 'tab') {
|
||||
items.push({type:t,def: def, label:getTypeLabel(t,def)});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1102,18 +1102,27 @@ RED.view.tools = (function() {
|
||||
const paletteLabel = RED.utils.getPaletteLabel(n.type, nodeDef)
|
||||
const defaultNodeNameRE = new RegExp('^'+paletteLabel.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')+' (\\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)
|
||||
const existingNodes = RED.nodes.filterNodes({ type: n.type });
|
||||
const existingIds = existingNodes.reduce((ids, node) => {
|
||||
let match = defaultNodeNameRE.exec(node.name);
|
||||
if (match) {
|
||||
let nodeNumber = parseInt(match[1])
|
||||
if (nodeNumber > maxNameNumber) {
|
||||
maxNameNumber = nodeNumber
|
||||
const nodeNumber = parseInt(match[1], 10);
|
||||
if (!ids.includes(nodeNumber)) {
|
||||
ids.push(nodeNumber);
|
||||
}
|
||||
}
|
||||
})
|
||||
typeIndex[n.type] = maxNameNumber + 1
|
||||
return ids;
|
||||
}, []).sort((a, b) => a - b);
|
||||
|
||||
let availableNameNumber = 1;
|
||||
for (let i = 0; i < existingIds.length; i++) {
|
||||
if (existingIds[i] !== availableNameNumber) {
|
||||
break;
|
||||
}
|
||||
availableNameNumber++;
|
||||
}
|
||||
|
||||
typeIndex[n.type] = availableNameNumber;
|
||||
}
|
||||
if ((options.renameBlank && n.name === '') || (options.renameClash && defaultNodeNameRE.test(n.name))) {
|
||||
if (generateHistory) {
|
||||
|
||||
Reference in New Issue
Block a user