import $ from 'jquery'; import { JSONRPC } from '@/json-rpc.js'; let resourcesData = { domains: [], subnets: [], ASN: [] }; function escapeHtml(value) { return String(value) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } function buildAsnLink(asn) { const numericPart = String(asn).match(/\d+/); const asnId = numericPart ? numericPart[0] : String(asn).replace(/[^a-zA-Z0-9]/g, ''); const safeId = asnId.length ? asnId : '0'; return `https://bgp.he.net/AS${encodeURIComponent(safeId)}`; } function normalizeArray(values) { if (!Array.isArray(values)) { return []; } return values .map(item => (item === null || item === undefined) ? '' : String(item)) .filter(item => item.length > 0) .sort((a, b) => a.localeCompare(b, 'ru', { numeric: true, sensitivity: 'base' })); } async function fetchResources() { try { const result = await JSONRPC.NetworkManager.getOutputResources(); resourcesData = { domains: normalizeArray(result?.domains), subnets: normalizeArray(result?.subnets), ASN: normalizeArray(result?.ASN) }; return true; } catch (error) { console.error('Ошибка при загрузке сетевых ресурсов:', error); resourcesData = { domains: [], subnets: [], ASN: [] }; return false; } } function renderAsnSection(items) { const content = items.length ? items.map(item => `${escapeHtml(item)}`).join(', ') : 'Данные отсутствуют'; return `

Автономные системы (ASN)

${content}

`; } function renderGridSection(title, items) { const listItems = items.length ? items.map(item => `
  • ${escapeHtml(item)}
  • `).join('') : '
  • Данные отсутствуют
  • '; return `

    ${title}

    `; } function renderResources($container) { const html = ` ${renderAsnSection(resourcesData.ASN)} ${renderGridSection('Доменные имена', resourcesData.domains)} ${renderGridSection('Маршруты', resourcesData.subnets)} `; $container.html(html); } export const NetworkResourcesPage = { render: () => `

    Сетевые ресурсы

    Загрузка сетевых ресурсов...

    `, mount: async () => { const $container = $('#network-resources-content'); $container.html('

    Загрузка сетевых ресурсов...

    '); const success = await fetchResources(); if (success) { renderResources($container); } else { $container.html('

    Не удалось загрузить данные. Попробуйте обновить страницу позже.

    '); } }, unmount: () => { resourcesData = { domains: [], subnets: [], ASN: [] }; } };