CoolFace
Apppublic

Lilkijin2004/veracity-anchor-plus

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
script.js119 linesDownload Raw Back to root
1// Veracity Anchor Plus - Shared Scripts2 3// Utility functions4const utils = {5    generateId: (prefix = 'id') => {6        return `${prefix}_${Math.random().toString(36).substr(2, 6)}`;7    },8    9    formatTimestamp: (isoString) => {10        const date = new Date(isoString);11        return date.toLocaleString();12    },13    14    truncate: (str, length = 20) => {15        return str.length > length ? str.substring(0, length) + '...' : str;16    },17 18    copyToClipboard: async (text) => {19        try {20            await navigator.clipboard.writeText(text);21            return true;22        } catch (err) {23            console.error('Failed to copy:', err);24            return false;25        }26    },27 28    generateCID: () => {29        return 'Qm' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);30    },31 32    debounce: (func, wait) => {33        let timeout;34        return function executedFunction(...args) {35            const later = () => {36                clearTimeout(timeout);37                func(...args);38            };39            clearTimeout(timeout);40            timeout = setTimeout(later, wait);41        };42    },43 44    formatNumber: (num) => {45        if (num >= 1000000) return (num / 1000000).toFixed(1) + 'M';46        if (num >= 1000) return (num / 1000).toFixed(1) + 'K';47        return num.toString();48    }49};50 51// Theme Toggle functionality (preparation for light/dark mode)52const themeManager = {53    init() {54        // Check for saved preference or system preference55        if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {56            document.documentElement.classList.add('dark');57        } else {58            document.documentElement.classList.remove('dark');59        }60    },61 62    toggle() {63        if (document.documentElement.classList.contains('dark')) {64            document.documentElement.classList.remove('dark');65            localStorage.theme = 'light';66        } else {67            document.documentElement.classList.add('dark');68            localStorage.theme = 'dark';69        }70    }71};72 73// Real-time stats updater (simulation)74const statsUpdater = {75    init() {76        const elements = {77            attestations: document.getElementById('stat-attestations'),78            safety: document.getElementById('stat-safety'),79            latency: document.getElementById('stat-latency'),80            fraud: document.getElementById('stat-fraud')81        };82 83        if (Object.values(elements).some(el => el)) {84            setInterval(() => this.updateRandomStat(elements), 5000);85        }86    },87 88    updateRandomStat(elements) {89        const keys = Object.keys(elements).filter(k => elements[k]);90        if (keys.length === 0) return;91        92        const key = keys[Math.floor(Math.random() * keys.length)];93        const element = elements[key];94        95        // Simulate slight variations96        if (key === 'latency') {97            const base = 42;98            const variation = Math.floor(Math.random() * 10 - 5);99            element.textContent = `${base + variation}ms`;100        } else if (key === 'attestations') {101            // Increment slightly102            const current = parseFloat(element.textContent);103            if (!isNaN(current)) {104                element.textContent = (current + 0.1).toFixed(1) + 'M+';105            }106        }107    }108};109 110// Initialize on DOM ready111document.addEventListener('DOMContentLoaded', () => {112    themeManager.init();113    statsUpdater.init();114});115 116// Export for module usage if needed117if (typeof module !== 'undefined' && module.exports) {118    module.exports = { utils, themeManager, statsUpdater };119}