diff options
| author | Petri Hienonen <petri.hienonen@gmail.com> | 2025-09-28 16:25:48 +0300 |
|---|---|---|
| committer | Petri Hienonen <petri.hienonen@gmail.com> | 2025-09-28 16:25:48 +0300 |
| commit | 38ac4db03560200df2517ed7e06e555828ce0a15 (patch) | |
| tree | 7bd8cc7d08d352bea05490e81b230a9d418a8553 /static/utils.js | |
| parent | 8489f1f83da5dcc5818401393b1f6a430eea677c (diff) | |
| download | network-38ac4db03560200df2517ed7e06e555828ce0a15.tar.zst | |
Update
Diffstat (limited to 'static/utils.js')
| -rw-r--r-- | static/utils.js | 308 |
1 files changed, 163 insertions, 145 deletions
diff --git a/static/utils.js b/static/utils.js index 2b0b816..32b10be 100644 --- a/static/utils.js +++ b/static/utils.js @@ -1,155 +1,173 @@ /* jshint esversion: 2024, module: true */ -import { InterfaceState } from './enums.js'; +import { InterfaceState } from "./enums.js"; /** * Static utility functions * @module Utils */ class Utils { - /** - * Convert byte array to MAC address - * @static - * @param {Array} bytes - Byte array - * @returns {string} MAC address - */ - static arrayToMac(bytes) { - if (!Array.isArray(bytes)) return ''; - return bytes.map(byte => byte.toString(16).padStart(2, '0')).join(':'); - } - - /** - * Convert byte array to IP address - * @static - * @param {Array|Object} obj - IP data - * @returns {string} IP address - */ - static ipFromArray(obj) { - let bytes = null; - - if (Array.isArray(obj)) { - bytes = obj; - } else if (obj?.Address && Array.isArray(obj.Address)) { - bytes = obj.Address; - } else { - return ''; - } - - // IPv4 - if (bytes.length === 4) { - return bytes.join('.'); - } - - // IPv6 - if (bytes.length === 16) { - const parts = []; - for (let i = 0; i < 16; i += 2) { - parts.push(((bytes[i] << 8) | bytes[i + 1]).toString(16)); - } - return parts.join(':').replace(/(^|:)0+/g, '$1').replace(/:{3,}/, '::'); - } - - return ''; - } - - /** - * Convert route object to string - * @static - * @param {Object} route - Route object - * @returns {string} Route string - */ - static routeToString(route) { - if (!route) return ''; - const destination = route.Destination ? Utils.ipFromArray(route.Destination) : 'default'; - const gateway = route.Gateway ? Utils.ipFromArray(route.Gateway) : ''; - return gateway ? `${destination} → ${gateway}` : destination; - } - - /** - * Get interface state from interface object - * @static - * @param {Object} iface - Interface object - * @returns {Symbol} Interface state - */ - static getInterfaceState(iface) { - const state = iface.OperationalState ?? iface.AdministrativeState ?? iface.State ?? ''; - const stateLower = state.toLowerCase(); - - if (stateLower.includes('up') || stateLower.includes('routable') || stateLower.includes('configured')) { - return InterfaceState.UP; - } else if (stateLower.includes('down') || stateLower.includes('off')) { - return InterfaceState.DOWN; - } else { - return InterfaceState.UNKNOWN; - } - } - - /** - * Get CSS class for interface state - * @static - * @param {Symbol} state - Interface state - * @returns {string} CSS class - */ - static getStateClass(state) { - switch (state) { - case InterfaceState.UP: return 'state-up'; - case InterfaceState.DOWN: return 'state-down'; - default: return 'state-unknown'; - } - } - - /** - * Get display text for interface state - * @static - * @param {Object} iface - Interface object - * @returns {string} State text - */ - static getStateText(iface) { - return iface.OperationalState ?? iface.AdministrativeState ?? iface.State ?? 'unknown'; - } - - /** - * Sanitize HTML string - * @static - * @param {string} str - String to sanitize - * @returns {string} Sanitized string - */ - static sanitizeHTML(str) { - const div = document.createElement('div'); - div.textContent = str; - return div.innerHTML; - } - - /** - * Create DOM element from HTML string - * @static - * @param {string} html - HTML string - * @returns {HTMLElement} DOM element - */ - static createElementFromHTML(html) { - const template = document.createElement('template'); - template.innerHTML = html.trim(); - return template.content.firstElementChild; - } - - /** - * Debounce function - * @static - * @param {Function} func - Function to debounce - * @param {number} wait - Wait time in ms - * @returns {Function} Debounced function - */ - static debounce(func, wait) { - let timeout; - return function executedFunction(...args) { - const later = () => { - clearTimeout(timeout); - func(...args); - }; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - }; - } + /** + * Convert byte array to MAC address + * @static + * @param {Array} bytes - Byte array + * @returns {string} MAC address + */ + static arrayToMac(bytes) { + if (!Array.isArray(bytes)) return ""; + return bytes.map((byte) => byte.toString(16).padStart(2, "0")).join(":"); + } + + /** + * Convert byte array to IP address + * @static + * @param {Array|Object} obj - IP data + * @returns {string} IP address + */ + static ipFromArray(obj) { + let bytes = null; + + if (Array.isArray(obj)) { + bytes = obj; + } else if (obj?.Address && Array.isArray(obj.Address)) { + bytes = obj.Address; + } else { + return ""; + } + + // IPv4 + if (bytes.length === 4) { + return bytes.join("."); + } + + // IPv6 + if (bytes.length === 16) { + const parts = []; + for (let i = 0; i < 16; i += 2) { + parts.push(((bytes[i] << 8) | bytes[i + 1]).toString(16)); + } + return parts + .join(":") + .replace(/(^|:)0+/g, "$1") + .replace(/:{3,}/, "::"); + } + + return ""; + } + + /** + * Convert route object to string + * @static + * @param {Object} route - Route object + * @returns {string} Route string + */ + static routeToString(route) { + if (!route) return ""; + const destination = route.Destination + ? Utils.ipFromArray(route.Destination) + : "default"; + const gateway = route.Gateway ? Utils.ipFromArray(route.Gateway) : ""; + return gateway ? `${destination} → ${gateway}` : destination; + } + + /** + * Get interface state from interface object + * @static + * @param {Object} iface - Interface object + * @returns {Symbol} Interface state + */ + static getInterfaceState(iface) { + const state = + iface.OperationalState ?? iface.AdministrativeState ?? iface.State ?? ""; + const stateLower = state.toLowerCase(); + + if ( + stateLower.includes("up") || + stateLower.includes("routable") || + stateLower.includes("configured") + ) { + return InterfaceState.UP; + } else if (stateLower.includes("down") || stateLower.includes("off")) { + return InterfaceState.DOWN; + } else { + return InterfaceState.UNKNOWN; + } + } + + /** + * Get CSS class for interface state + * @static + * @param {Symbol} state - Interface state + * @returns {string} CSS class + */ + static getStateClass(state) { + switch (state) { + case InterfaceState.UP: + return "state-up"; + case InterfaceState.DOWN: + return "state-down"; + default: + return "state-unknown"; + } + } + + /** + * Get display text for interface state + * @static + * @param {Object} iface - Interface object + * @returns {string} State text + */ + static getStateText(iface) { + return ( + iface.OperationalState ?? + iface.AdministrativeState ?? + iface.State ?? + "unknown" + ); + } + + /** + * Sanitize HTML string + * @static + * @param {string} str - String to sanitize + * @returns {string} Sanitized string + */ + static sanitizeHTML(str) { + const div = document.createElement("div"); + div.textContent = str; + return div.innerHTML; + } + + /** + * Create DOM element from HTML string + * @static + * @param {string} html - HTML string + * @returns {HTMLElement} DOM element + */ + static createElementFromHTML(html) { + const template = document.createElement("template"); + template.innerHTML = html.trim(); + return template.content.firstElementChild; + } + + /** + * Debounce function + * @static + * @param {Function} func - Function to debounce + * @param {number} wait - Wait time in ms + * @returns {Function} Debounced function + */ + static debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } } -export { Utils };
\ No newline at end of file +export { Utils }; |
