Files

70 lines
2.5 KiB
JavaScript

/**
* Utility functions for Antigravity Console
*/
window.utils = {
// Shared Request Wrapper
async request(url, options = {}, webuiPassword = '') {
options.headers = options.headers || {};
if (webuiPassword) {
options.headers['x-webui-password'] = webuiPassword;
}
let response = await fetch(url, options);
if (response.status === 401) {
const store = Alpine.store('global');
const password = prompt(store ? store.t('enterPassword') : 'Enter Web UI Password:');
if (password) {
// Return new password so caller can update state
// This implies we need a way to propagate the new password back
// For simplicity in this functional utility, we might need a callback or state access
// But generally utils shouldn't probably depend on global state directly if possible
// let's stick to the current logic but wrapped
localStorage.setItem('antigravity_webui_password', password);
options.headers['x-webui-password'] = password;
response = await fetch(url, options);
return { response, newPassword: password };
}
}
return { response, newPassword: null };
},
formatTimeUntil(isoTime) {
const store = Alpine.store('global');
const diff = new Date(isoTime) - new Date();
if (diff <= 0) return store ? store.t('ready') : 'READY';
const mins = Math.floor(diff / 60000);
const hrs = Math.floor(mins / 60);
const hSuffix = store ? store.t('timeH') : 'H';
const mSuffix = store ? store.t('timeM') : 'M';
if (hrs > 0) return `${hrs}${hSuffix} ${mins % 60}${mSuffix}`;
return `${mins}${mSuffix}`;
},
getThemeColor(name) {
return getComputedStyle(document.documentElement).getPropertyValue(name).trim();
},
/**
* Debounce function - delays execution until after specified wait time
* @param {Function} func - Function to debounce
* @param {number} wait - Wait time in milliseconds
* @returns {Function} Debounced function
*/
debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
};