import $ from 'jquery'; import { JSONRPC } from '@/json-rpc.js'; const TDNS_COMPONENT_NAME = 'ru.kirillius.pf.sdn.External.API.Components.TDNS'; const FIELD_IDS = { container: 'tdns-config-container', instancesList: 'tdns-instances-list', addInstanceButton: 'tdns-add-instance-btn', saveButton: 'save-tdns-btn', status: 'tdns-status-message' }; const CLASS_NAMES = { instance: 'tdns-instance-entry', removeButton: 'tdns-remove-instance-btn', serverInput: 'tdns-server-input', tokenInput: 'tdns-token-input', forwarderInput: 'tdns-forwarder-input' }; const SELECTORS = { container: `#${FIELD_IDS.container}`, instancesList: `#${FIELD_IDS.instancesList}`, addInstanceButton: `#${FIELD_IDS.addInstanceButton}`, saveButton: `#${FIELD_IDS.saveButton}`, status: `#${FIELD_IDS.status}` }; let currentConfig = { instances: [] }; let statusTimeoutId = null; let instanceCounter = 0; const getStatusElement = () => $(SELECTORS.status); function normalizeConfig(config) { if (!config || !Array.isArray(config.instances)) { return { instances: [] }; } return { instances: config.instances.map(instance => ({ server: instance?.server || '', token: instance?.token || '', forwarder: instance?.forwarder || '' })) }; } function clearStatus() { const $status = getStatusElement(); if (!$status.length) { return; } if (statusTimeoutId) { clearTimeout(statusTimeoutId); statusTimeoutId = null; } $status.stop(true, true).hide().text('').removeClass('success-message error-message'); } function updateStatus(message, type) { const $status = getStatusElement(); if (!$status.length) { return; } if (statusTimeoutId) { clearTimeout(statusTimeoutId); } $status .removeClass('success-message error-message') .addClass(type === 'success' ? 'success-message' : 'error-message') .text(message) .show(); statusTimeoutId = window.setTimeout(() => { $status.fadeOut(); }, 5000); } async function runAction($button, pendingText, action, messages) { if (!$button.length) { return; } const originalText = $button.text(); $button.prop('disabled', true).text(pendingText); clearStatus(); try { const result = await action(); if (messages?.success) { const successMessage = typeof messages.success === 'function' ? messages.success(result) : messages.success; if (successMessage) { updateStatus(successMessage, 'success'); } } } catch (error) { console.error(messages?.log || 'Ошибка выполнения действия TDNS:', error); if (messages?.error) { updateStatus(messages.error, 'error'); } } finally { $button.prop('disabled', false).text(originalText); } } function resetInstanceCounter() { instanceCounter = 0; } function getNextInstanceId() { instanceCounter += 1; return instanceCounter; } function createInstanceRow(instance = {}) { const uid = getNextInstanceId(); const serverId = `tdns-server-${uid}`; const tokenId = `tdns-token-${uid}`; const forwarderId = `tdns-forwarder-${uid}`; return `
Настройте подключения TDNS. Можно указать несколько серверов с собственными токенами.
Загрузка конфигурации...