node-red-contrib-vocalrec
Version:
Nodos personalizados de Node-RED para la API de VocalRec
130 lines (114 loc) • 5.9 kB
HTML
<script type="text/javascript">
RED.nodes.registerType('vocalrec-metadata', {
category: 'VocalRec',
color: '#cae2c9',
defaults: {
name: { value: "" },
server: { value: "", type: "vocalrec-config", required: true },
transactionId: { value: "" },
metadata: { value: [{ key: "", value: "" }] }
},
inputs: 1,
outputs: 1,
icon: "icons/logo-vr.png",
label: function() {
return this.name || "Metadata";
},
paletteLabel: "Metadata",
oneditprepare: function() {
var node = this;
// Inicializar la lista de metadatos si no existe
if (!node.metadata || node.metadata.length === 0) {
node.metadata = [{ key: "", value: "" }];
}
function generateMetadataRow(metadata, index) {
var row = $('<div class="metadata-row" style="margin-bottom: 8px; display: flex; align-items: center; gap: 8px;">');
var keyInput = $('<input type="text" style="flex: 1; min-width: 120px;" placeholder="Clave">')
.val(metadata.key)
.on('change keyup', function() {
node.metadata[index].key = $(this).val();
});
var valueInput = $('<input type="text" style="flex: 1; min-width: 120px;" placeholder="Valor">')
.val(metadata.value)
.on('change keyup', function() {
node.metadata[index].value = $(this).val();
});
var deleteBtn = $('<button type="button" class="red-ui-button red-ui-button-small" style="margin-left: 5px;"><i class="fa fa-trash"></i></button>')
.on('click', function() {
node.metadata.splice(index, 1);
refreshMetadataList();
});
row.append(keyInput).append(valueInput).append(deleteBtn);
return row;
}
function refreshMetadataList() {
var container = $('#metadata-container');
container.empty();
node.metadata.forEach(function(metadata, index) {
container.append(generateMetadataRow(metadata, index));
});
}
function addMetadataRow() {
node.metadata.push({ key: "", value: "" });
refreshMetadataList();
}
// Configurar el botón de añadir
$('#add-metadata-btn').on('click', addMetadataRow);
// Inicializar la lista
refreshMetadataList();
},
oneditsave: function() {
// Filtrar elementos vacíos y asegurar que hay al menos uno
this.metadata = this.metadata.filter(function(item) {
return item.key.trim() !== "" || item.value.trim() !== "";
});
if (this.metadata.length === 0) {
this.metadata = [{ key: "", value: "" }];
}
}
});
</script>
<script type="text/html" data-template-name="vocalrec-metadata">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Nombre</label>
<input type="text" id="node-input-name" placeholder="Nombre del nodo">
</div>
<div class="form-row">
<label for="node-input-server"><i class="fa fa-server"></i> Servidor</label>
<input type="text" id="node-input-server" placeholder="Configuración del servidor">
</div>
<div class="form-row">
<label for="node-input-transactionId"><i class="fa fa-id-card"></i> Transaction ID</label>
<input type="text" id="node-input-transactionId" placeholder="ID de transacción">
</div>
<div class="form-row">
<label style="width: 100%; margin-bottom: 10px;"><i class="fa fa-list"></i> Metadatos (Key/Value)</label>
<div id="metadata-container" style="border: 1px solid #ccc; padding: 10px; border-radius: 4px; background-color: #f9f9f9;">
<!-- Los elementos se generarán dinámicamente aquí -->
</div>
<div style="margin-top: 10px; text-align: right;">
<button type="button" id="add-metadata-btn" class="red-ui-button">
<i class="fa fa-plus"></i> Añadir metadato
</button>
</div>
</div>
</script>
<script type="text/html" data-help-name="vocalrec-metadata">
<p>Establece múltiples metadatos para una grabación identificada por el TransactionID.</p>
<h3>Entradas</h3>
<dl class="message-properties">
<dt>transactionId <span class="property-type">string</span></dt>
<dd>ID de la transacción de grabación a modificar</dd>
<dt>payload.metadata <span class="property-type">array</span></dt>
<dd>Array de objetos con propiedades key y value: [{"key": "clave1", "value": "valor1"}, {"key": "clave2", "value": "valor2"}]</dd>
</dl>
<h3>Salidas</h3>
<dl class="message-properties">
<dt>payload <span class="property-type">object</span></dt>
<dd>Respuesta de la API confirmando la actualización de los metadatos</dd>
</dl>
<h3>Detalles</h3>
<p>Este nodo envía múltiples POST para establecer varios metadatos (key-value) en una grabación usando su TransactionID.</p>
<p>Puede configurar múltiples pares clave-valor en la interfaz del nodo. Use el botón "Añadir metadato" para agregar nuevos elementos y el botón de papelera para eliminar elementos existentes.</p>
<p>Debe mantener al menos un elemento de metadatos configurado.</p>
</script>