From f473d66de5c8ea6ec148264a4eae568233e0d628 Mon Sep 17 00:00:00 2001
From: nahuhh <50635951+nahuhh@users.noreply.github.com>
Date: Thu, 16 Jan 2025 21:26:20 +0000
Subject: [PATCH 1/2] lint: auto eslint
---
basicswap/static/js/coin_icons.js | 2 +-
basicswap/static/js/new_offer.js | 8 +-
basicswap/static/js/offerstable.js | 52 ++++-----
basicswap/static/js/pricechart.js | 176 ++++++++++++++---------------
4 files changed, 119 insertions(+), 119 deletions(-)
diff --git a/basicswap/static/js/coin_icons.js b/basicswap/static/js/coin_icons.js
index 7c03819..f8db7e7 100644
--- a/basicswap/static/js/coin_icons.js
+++ b/basicswap/static/js/coin_icons.js
@@ -14,7 +14,7 @@ document.addEventListener('DOMContentLoaded', () => {
const image = selectedOption.getAttribute('data-image') || '';
const name = selectedOption.textContent.trim();
select.style.backgroundImage = image ? `url(${image}?${new Date().getTime()})` : '';
-
+
const selectImage = select.nextElementSibling.querySelector('.select-image');
if (selectImage) {
selectImage.src = image;
diff --git a/basicswap/static/js/new_offer.js b/basicswap/static/js/new_offer.js
index 9472cc3..a831eab 100644
--- a/basicswap/static/js/new_offer.js
+++ b/basicswap/static/js/new_offer.js
@@ -1,5 +1,5 @@
window.addEventListener('DOMContentLoaded', (event) => {
- let err_msgs = document.querySelectorAll('p.error_msg');
+ const err_msgs = document.querySelectorAll('p.error_msg');
for (let i = 0; i < err_msgs.length; i++) {
err_msg = err_msgs[i].innerText;
if (err_msg.indexOf('coin_to') >= 0 || err_msg.indexOf('Coin To') >= 0) {
@@ -29,9 +29,9 @@ window.addEventListener('DOMContentLoaded', (event) => {
}
// remove error class on input or select focus
- let inputs = document.querySelectorAll('input.error');
- let selects = document.querySelectorAll('select.error');
- let elements = [...inputs, ...selects];
+ const inputs = document.querySelectorAll('input.error');
+ const selects = document.querySelectorAll('select.error');
+ const elements = [...inputs, ...selects];
elements.forEach((element) => {
element.addEventListener('focus', (event) => {
event.target.classList.remove('error');
diff --git a/basicswap/static/js/offerstable.js b/basicswap/static/js/offerstable.js
index 385b120..4517db2 100644
--- a/basicswap/static/js/offerstable.js
+++ b/basicswap/static/js/offerstable.js
@@ -5,16 +5,16 @@ const EventManager = {
if (!this.listeners.has(element)) {
this.listeners.set(element, new Map());
}
-
+
const elementListeners = this.listeners.get(element);
if (!elementListeners.has(type)) {
elementListeners.set(type, new Set());
}
-
+
const handlerInfo = { handler, options };
elementListeners.get(type).add(handlerInfo);
element.addEventListener(type, handler, options);
-
+
return handlerInfo;
},
@@ -188,7 +188,7 @@ const ScrollOptimizer = {
const tooltipId = tooltipTrigger.getAttribute('data-tooltip-target');
let tooltip = this.tooltipCache.get(tooltipTrigger);
-
+
if (!tooltip) {
tooltip = document.getElementById(tooltipId);
if (tooltip) {
@@ -259,7 +259,7 @@ const WebSocketManager = {
this.handlePageVisible();
}
};
-
+
document.addEventListener('visibilitychange', this.handlers.visibilityChange);
},
@@ -721,11 +721,11 @@ const IdentityManager = {
const response = await fetch(`/json/identities/${address}`, {
signal: AbortSignal.timeout(5000)
});
-
+
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
-
+
return await response.json();
} catch (error) {
if (attempt >= this.maxRetries) {
@@ -1182,7 +1182,7 @@ async function calculateProfitLoss(fromCoin, toCoin, fromAmount, toAmount, isOwn
const fromPriceUSD = latestPrices[fromSymbol]?.usd;
const toPriceUSD = latestPrices[toSymbol]?.usd;
- if (fromPriceUSD === null || toPriceUSD === null ||
+ if (fromPriceUSD === null || toPriceUSD === null ||
fromPriceUSD === undefined || toPriceUSD === undefined) {
resolve(null);
return;
@@ -1259,7 +1259,7 @@ async function fetchLatestPrices() {
const PRICES_CACHE_KEY = 'prices_coingecko';
const RETRY_DELAY = 5000;
const MAX_RETRIES = 3;
-
+
const cachedData = CacheManager.get(PRICES_CACHE_KEY);
if (cachedData && cachedData.remainingTime > 30000) {
console.log('Using cached price data');
@@ -1268,7 +1268,7 @@ async function fetchLatestPrices() {
}
const baseUrl = `${offersConfig.apiEndpoints.coinGecko}/simple/price?ids=bitcoin,bitcoin-cash,dash,dogecoin,decred,litecoin,particl,pivx,monero,zcoin,zano,wownero&vs_currencies=USD,BTC`;
-
+
let retryCount = 0;
let data = null;
@@ -1282,7 +1282,7 @@ async function fetchLatestPrices() {
try {
console.log('Attempting price fetch with API key...');
const urlWithKey = `${baseUrl}&api_key=${offersConfig.apiKeys.coinGecko}`;
-
+
const response = await fetch('/json/readurl', {
method: 'POST',
headers: {
@@ -1306,9 +1306,9 @@ async function fetchLatestPrices() {
continue;
}
- const hasValidPrices = Object.values(responseData).some(coin =>
- coin && typeof coin === 'object' &&
- typeof coin.usd === 'number' &&
+ const hasValidPrices = Object.values(responseData).some(coin =>
+ coin && typeof coin === 'object' &&
+ typeof coin.usd === 'number' &&
!isNaN(coin.usd)
);
@@ -1343,7 +1343,7 @@ async function fetchLatestPrices() {
tableRateModule.setFallbackValue(coin, prices.usd);
}
});
-
+
return data;
}
@@ -1605,7 +1605,7 @@ function updateClearFiltersButton() {
function cleanupRow(row) {
EventManager.removeAll(row);
-
+
const tooltips = row.querySelectorAll('[data-tooltip-target]');
tooltips.forEach(tooltip => {
const tooltipId = tooltip.getAttribute('data-tooltip-target');
@@ -1618,7 +1618,7 @@ function cleanupRow(row) {
function cleanupTable() {
EventManager.clearAll();
-
+
if (offersBody) {
const existingRows = offersBody.querySelectorAll('tr');
existingRows.forEach(row => {
@@ -1686,13 +1686,13 @@ async function updateOffersTable() {
const BATCH_SIZE = 5;
const identities = [];
-
+
for (let i = 0; i < itemsToDisplay.length; i += BATCH_SIZE) {
const batch = itemsToDisplay.slice(i, i + BATCH_SIZE);
const batchPromises = batch.map(offer =>
offer.addr_from ? IdentityManager.getIdentityData(offer.addr_from) : Promise.resolve(null)
);
-
+
const batchResults = await Promise.all(batchPromises);
identities.push(...batchResults);
@@ -2329,8 +2329,8 @@ function createTooltipContent(isSentOffers, coinFrom, coinTo, fromAmount, toAmou
const getPriceKey = (coin) => {
const lowerCoin = coin.toLowerCase();
- return lowerCoin === 'firo' || lowerCoin === 'zcoin' ? 'zcoin' :
- lowerCoin === 'bitcoin cash' ? 'bitcoin-cash' :
+ return lowerCoin === 'firo' || lowerCoin === 'zcoin' ? 'zcoin' :
+ lowerCoin === 'bitcoin cash' ? 'bitcoin-cash' :
lowerCoin === 'particl anon' || lowerCoin === 'particl blind' ? 'particl' :
coinNameToSymbol[coin] || lowerCoin;
};
@@ -2340,7 +2340,7 @@ function createTooltipContent(isSentOffers, coinFrom, coinTo, fromAmount, toAmou
const fromPriceUSD = latestPrices[fromSymbol]?.usd;
const toPriceUSD = latestPrices[toSymbol]?.usd;
- if (fromPriceUSD === null || toPriceUSD === null ||
+ if (fromPriceUSD === null || toPriceUSD === null ||
fromPriceUSD === undefined || toPriceUSD === undefined) {
return `
Price Information Unavailable
Current market prices are temporarily unavailable.
@@ -2421,7 +2421,7 @@ function createCombinedRateTooltip(offer, coinFrom, coinTo, treatAsSentOffer) {
const fromPriceUSD = latestPrices[fromSymbol]?.usd;
const toPriceUSD = latestPrices[toSymbol]?.usd;
- if (fromPriceUSD === null || toPriceUSD === null ||
+ if (fromPriceUSD === null || toPriceUSD === null ||
fromPriceUSD === undefined || toPriceUSD === undefined) {
return `
Exchange Rate Information
@@ -2880,7 +2880,7 @@ function setupRowEventListeners(row, offer) {
tooltip.classList.remove('invisible', 'opacity-0');
}
});
-
+
EventManager.add(trigger, 'mouseleave', () => {
const tooltipId = trigger.getAttribute('data-tooltip-target');
const tooltip = document.getElementById(tooltipId);
@@ -3015,7 +3015,7 @@ async function cleanup() {
console.log(`Total cleanup time: ${totalTime}ms`);
console.log('Steps completed:', this.steps.length);
console.log('Errors encountered:', this.errors.length);
-
+
if (this.steps.length > 0) {
console.group('Steps Timeline');
this.steps.forEach(({step, time}) => {
@@ -3023,7 +3023,7 @@ async function cleanup() {
});
console.groupEnd();
}
-
+
if (this.errors.length > 0) {
console.group('Errors');
this.errors.forEach(({step, error, time}) => {
diff --git a/basicswap/static/js/pricechart.js b/basicswap/static/js/pricechart.js
index 889df3d..a461e4e 100644
--- a/basicswap/static/js/pricechart.js
+++ b/basicswap/static/js/pricechart.js
@@ -40,9 +40,9 @@ const config = {
// UTILS
const utils = {
- formatNumber: (number, decimals = 2) =>
+ formatNumber: (number, decimals = 2) =>
number.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ','),
-
+
formatDate: (timestamp, resolution) => {
const date = new Date(timestamp);
const options = {
@@ -114,7 +114,7 @@ const api = {
}));
});
},
-
+
fetchCryptoCompareDataXHR: (coin) => {
const url = `${config.apiEndpoints.cryptoCompare}?fsyms=${coin}&tsyms=USD,BTC&api_key=${config.apiKeys.cryptoCompare}`;
const headers = {
@@ -126,10 +126,10 @@ const api = {
error: error.message
}));
},
-
+
fetchCoinGeckoDataXHR: async () => {
const cacheKey = 'coinGeckoOneLiner';
- let cachedData = cache.get(cacheKey);
+ const cachedData = cache.get(cacheKey);
if (cachedData) {
console.log('Using cached CoinGecko data');
@@ -143,15 +143,15 @@ const api = {
const url = `${config.apiEndpoints.coinGecko}/simple/price?ids=${coinIds}&vs_currencies=usd,btc&include_24hr_vol=true&include_24hr_change=true&api_key=${config.apiKeys.coinGecko}`;
//console.log(`Fetching data for multiple coins from CoinGecko: ${url}`);
-
+
try {
const data = await api.makePostRequest(url);
//console.log(`Raw CoinGecko data:`, data);
-
+
if (typeof data !== 'object' || data === null) {
throw new AppError(`Invalid data structure received from CoinGecko`);
}
-
+
const transformedData = {};
Object.entries(data).forEach(([id, values]) => {
const coinConfig = config.coins.find(coin => coin.name === id);
@@ -164,7 +164,7 @@ const api = {
displayName: coinConfig?.displayName || coinConfig?.symbol || id
};
});
-
+
//console.log(`Transformed CoinGecko data:`, transformedData);
cache.set(cacheKey, transformedData);
return transformedData;
@@ -296,16 +296,16 @@ displayCoinData: (coin, data) => {
const volumeElement = document.querySelector(`#${coin.toLowerCase()}-volume-24h`);
const btcPriceDiv = document.querySelector(`#${coin.toLowerCase()}-btc-price-div`);
const priceBtcElement = document.querySelector(`#${coin.toLowerCase()}-price-btc`);
-
+
if (priceUsdElement) {
priceUsdElement.textContent = isError ? 'N/A' : `$ ${ui.formatPrice(coin, priceUSD)}`;
}
-
+
if (volumeDiv && volumeElement) {
volumeElement.textContent = isError ? 'N/A' : `${utils.formatNumber(volume24h, 0)} USD`;
volumeDiv.style.display = volumeToggle.isVisible ? 'flex' : 'none';
}
-
+
if (btcPriceDiv && priceBtcElement) {
if (coin === 'BTC') {
btcPriceDiv.style.display = 'none';
@@ -314,10 +314,10 @@ displayCoinData: (coin, data) => {
btcPriceDiv.style.display = 'flex';
}
}
-
+
ui.updatePriceChangeContainer(coin, isError ? null : priceChange1d);
};
-
+
try {
if (data.error) {
throw new Error(data.error);
@@ -325,51 +325,51 @@ displayCoinData: (coin, data) => {
if (!data || !data.current_price) {
throw new Error(`Invalid CoinGecko data structure for ${coin}`);
}
-
+
priceUSD = data.current_price;
priceBTC = coin === 'BTC' ? 1 : data.price_btc || (data.current_price / app.btcPriceUSD);
priceChange1d = data.price_change_percentage_24h;
volume24h = data.total_volume;
-
+
if (isNaN(priceUSD) || isNaN(priceBTC) || isNaN(volume24h)) {
throw new Error(`Invalid numeric values in data for ${coin}`);
}
-
+
updateUI(false);
} catch (error) {
//console.error(`Error displaying data for ${coin}:`, error.message);
updateUI(true);
}
},
-
+
showLoader: () => {
const loader = document.getElementById('loader');
if (loader) {
loader.classList.remove('hidden');
}
},
-
+
hideLoader: () => {
const loader = document.getElementById('loader');
if (loader) {
loader.classList.add('hidden');
}
},
-
+
showCoinLoader: (coinSymbol) => {
const loader = document.getElementById(`${coinSymbol.toLowerCase()}-loader`);
if (loader) {
loader.classList.remove('hidden');
}
},
-
+
hideCoinLoader: (coinSymbol) => {
const loader = document.getElementById(`${coinSymbol.toLowerCase()}-loader`);
if (loader) {
loader.classList.add('hidden');
}
},
-
+
updateCacheStatus: (isCached) => {
const cacheStatusElement = document.getElementById('cache-status');
if (cacheStatusElement) {
@@ -378,15 +378,15 @@ displayCoinData: (coin, data) => {
cacheStatusElement.classList.toggle('text-blue-500', !isCached);
}
},
-
+
updateLoadTimeAndCache: (loadTime, cachedData) => {
const loadTimeElement = document.getElementById('load-time');
const cacheStatusElement = document.getElementById('cache-status');
-
+
if (loadTimeElement) {
loadTimeElement.textContent = `Load time: ${loadTime}ms`;
}
-
+
if (cacheStatusElement) {
if (cachedData && cachedData.remainingTime) {
const remainingMinutes = Math.ceil(cachedData.remainingTime / 60000);
@@ -402,7 +402,7 @@ displayCoinData: (coin, data) => {
ui.updateLastRefreshedTime();
},
-
+
updatePriceChangeContainer: (coin, priceChange) => {
const container = document.querySelector(`#${coin.toLowerCase()}-price-change-container`);
if (container) {
@@ -411,7 +411,7 @@ displayCoinData: (coin, data) => {
'N/A';
}
},
-
+
updateLastRefreshedTime: () => {
const lastRefreshedElement = document.getElementById('last-refreshed-time');
if (lastRefreshedElement && app.lastRefreshedTime) {
@@ -419,7 +419,7 @@ displayCoinData: (coin, data) => {
lastRefreshedElement.textContent = `Last Refreshed: ${formattedTime}`;
}
},
-
+
positivePriceChangeHTML: (value) => `
`,
-
+
negativePriceChangeHTML: (value) => `
`,
-
+
formatPrice: (coin, price) => {
if (typeof price !== 'number' || isNaN(price)) {
logger.error(`Invalid price for ${coin}:`, price);
@@ -449,7 +449,7 @@ displayCoinData: (coin, data) => {
if (price < 1000) return price.toFixed(2);
return price.toFixed(1);
},
-
+
setActiveContainer: (containerId) => {
const containerIds = ['btc', 'xmr', 'part', 'pivx', 'firo', 'dash', 'ltc', 'doge', 'eth', 'dcr', 'zano', 'wow', 'bch'].map(id => `${id}-container`);
containerIds.forEach(id => {
@@ -460,7 +460,7 @@ displayCoinData: (coin, data) => {
}
});
},
-
+
displayErrorMessage: (message) => {
const errorOverlay = document.getElementById('error-overlay');
const errorMessage = document.getElementById('error-message');
@@ -471,7 +471,7 @@ displayCoinData: (coin, data) => {
chartContainer.classList.add('blurred');
}
},
-
+
hideErrorMessage: () => {
const errorOverlay = document.getElementById('error-overlay');
const containersToBlur = document.querySelectorAll('.container-to-blur');
@@ -487,7 +487,7 @@ const chartModule = {
chart: null,
currentCoin: 'BTC',
loadStartTime: 0,
-
+
cleanup: () => {
if (chartModule.chart) {
chartModule.chart.destroy();
@@ -675,7 +675,7 @@ const chartModule = {
plugins: [chartModule.verticalLinePlugin]
});
},
-
+
prepareChartData: (coinSymbol, data) => {
if (!data) {
return [];
@@ -689,13 +689,13 @@ const chartModule = {
endTime.setUTCMinutes(0, 0, 0);
const endUnix = endTime.getTime();
const startUnix = endUnix - (24 * 3600000);
-
+
const hourlyPoints = [];
-
+
for (let hourUnix = startUnix; hourUnix <= endUnix; hourUnix += 3600000) {
const targetHour = new Date(hourUnix);
targetHour.setUTCMinutes(0, 0, 0);
-
+
const closestPoint = data.reduce((prev, curr) => {
const prevTime = new Date(prev[0]);
const currTime = new Date(curr[0]);
@@ -756,11 +756,11 @@ const chartModule = {
for (let i = 0; i < 24; i++) {
const targetTime = new Date(twentyFourHoursAgo.getTime() + i * 60 * 60 * 1000);
- const closestDataPoint = data.reduce((prev, curr) =>
- Math.abs(new Date(curr.x).getTime() - targetTime.getTime()) <
+ const closestDataPoint = data.reduce((prev, curr) =>
+ Math.abs(new Date(curr.x).getTime() - targetTime.getTime()) <
Math.abs(new Date(prev.x).getTime() - targetTime.getTime()) ? curr : prev
);
-
+
hourlyData.push({
x: targetTime.getTime(),
y: closestDataPoint.y
@@ -774,11 +774,11 @@ const chartModule = {
try {
chartModule.showChartLoader();
chartModule.loadStartTime = Date.now();
-
+
const cacheKey = `chartData_${coinSymbol}_${config.currentResolution}`;
let cachedData = !forceRefresh ? cache.get(cacheKey) : null;
let data;
-
+
if (cachedData && Object.keys(cachedData.value).length > 0) {
data = cachedData.value;
} else {
@@ -807,7 +807,7 @@ const chartModule = {
} else {
const resolution = config.resolutions[config.currentResolution];
chartModule.chart.options.scales.x.time.unit = resolution.interval === 'hourly' ? 'hour' : 'day';
-
+
if (config.currentResolution === 'year' || config.currentResolution === 'sixMonths') {
chartModule.chart.options.scales.x.time.unit = 'month';
}
@@ -840,25 +840,25 @@ const chartModule = {
showChartLoader: () => {
const loader = document.getElementById('chart-loader');
const chart = document.getElementById('coin-chart');
-
+
if (!loader || !chart) {
return;
}
-
+
loader.classList.remove('hidden');
chart.classList.add('hidden');
},
-
+
hideChartLoader: () => {
const loader = document.getElementById('chart-loader');
const chart = document.getElementById('coin-chart');
-
+
if (!loader || !chart) {
return;
}
-
+
loader.classList.add('hidden');
- chart.classList.remove('hidden');
+ chart.classList.remove('hidden');
}
};
@@ -866,7 +866,7 @@ Chart.register(chartModule.verticalLinePlugin);
const volumeToggle = {
isVisible: localStorage.getItem('volumeToggleState') === 'true',
-
+
cleanup: () => {
const toggleButton = document.getElementById('toggle-volume');
if (toggleButton) {
@@ -876,7 +876,7 @@ const volumeToggle = {
init: () => {
volumeToggle.cleanup();
-
+
const toggleButton = document.getElementById('toggle-volume');
if (toggleButton) {
toggleButton.addEventListener('click', volumeToggle.toggle);
@@ -942,7 +942,7 @@ const app = {
app.visibilityCleanup();
app.visibilityCleanup = null;
}
-
+
volumeToggle.cleanup();
app.removeEventListeners();
@@ -980,11 +980,11 @@ const app = {
button.removeEventListener('click', window[oldListener]);
delete window[oldListener];
}
-
+
const listener = () => {
const resolution = button.id.split('-')[1];
const currentCoin = chartModule.currentCoin;
-
+
if (currentCoin !== 'WOW' || resolution === 'day') {
config.currentResolution = resolution;
chartModule.updateChart(currentCoin, true);
@@ -1041,21 +1041,21 @@ const app = {
chartModule.initChart();
chartModule.showChartLoader();
}
-
+
console.log('Loading all coin data...');
await app.loadAllCoinData();
-
+
if (chartModule.chart) {
config.currentResolution = 'day';
await chartModule.updateChart('BTC');
app.updateResolutionButtons('BTC');
}
ui.setActiveContainer('btc-container');
-
+
app.setupEventListeners();
app.initializeSelectImages();
app.initAutoRefresh();
-
+
} catch (error) {
ui.displayErrorMessage('Failed to initialize the dashboard. Please try refreshing the page.');
} finally {
@@ -1135,19 +1135,19 @@ const app = {
});
}
});
-
+
const refreshAllButton = document.getElementById('refresh-all');
if (refreshAllButton) {
app.addEventListenerWithCleanup(refreshAllButton, 'click', app.refreshAllData);
}
-
+
const headers = document.querySelectorAll('th');
headers.forEach((header, index) => {
- app.addEventListenerWithCleanup(header, 'click', () =>
+ app.addEventListenerWithCleanup(header, 'click', () =>
app.sortTable(index, header.classList.contains('disabled'))
);
});
-
+
const closeErrorButton = document.getElementById('close-error');
if (closeErrorButton) {
app.addEventListenerWithCleanup(closeErrorButton, 'click', ui.hideErrorMessage);
@@ -1222,16 +1222,16 @@ const app = {
app.isRefreshing = true;
ui.showLoader();
chartModule.showChartLoader();
-
+
try {
cache.clear();
await app.updateBTCPrice();
-
+
const allCoinData = await api.fetchCoinGeckoDataXHR();
if (allCoinData.error) {
throw new Error(allCoinData.error);
}
-
+
for (const coin of config.coins) {
const symbol = coin.symbol.toLowerCase();
const coinData = allCoinData[symbol];
@@ -1242,15 +1242,15 @@ const app = {
cache.set(cacheKey, coinData);
}
}
-
+
if (chartModule.currentCoin) {
await chartModule.updateChart(chartModule.currentCoin, true);
}
-
+
app.lastRefreshedTime = new Date();
localStorage.setItem('lastRefreshedTime', app.lastRefreshedTime.getTime().toString());
ui.updateLastRefreshedTime();
-
+
} catch (error) {
ui.displayErrorMessage('Failed to refresh all data. Please try again.');
} finally {
@@ -1268,7 +1268,7 @@ const app = {
const nextRefreshSpan = document.getElementById('next-refresh-time');
const labelElement = document.getElementById('next-refresh-label');
const valueElement = document.getElementById('next-refresh-value');
-
+
if (nextRefreshSpan && labelElement && valueElement) {
if (app.nextRefreshTime) {
if (app.updateNextRefreshTimeRAF) {
@@ -1277,7 +1277,7 @@ const app = {
const updateDisplay = () => {
const timeUntilRefresh = Math.max(0, Math.ceil((app.nextRefreshTime - Date.now()) / 1000));
-
+
if (timeUntilRefresh === 0) {
labelElement.textContent = '';
valueElement.textContent = app.refreshTexts.justRefreshed;
@@ -1287,12 +1287,12 @@ const app = {
labelElement.textContent = `${app.refreshTexts.label}: `;
valueElement.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`;
}
-
+
if (timeUntilRefresh > 0) {
app.updateNextRefreshTimeRAF = requestAnimationFrame(updateDisplay);
}
};
-
+
updateDisplay();
} else {
labelElement.textContent = '';
@@ -1372,18 +1372,18 @@ const app = {
if (!sortableColumns.includes(columnIndex)) {
return;
}
-
+
const table = document.querySelector('table');
if (!table) {
return;
}
-
+
const rows = Array.from(table.querySelectorAll('tbody tr'));
const sortIcon = document.getElementById(`sort-icon-${columnIndex}`);
if (!sortIcon) {
return;
}
-
+
const sortOrder = sortIcon.textContent === '↓' ? 1 : -1;
sortIcon.textContent = sortOrder === 1 ? '↑' : '↓';
@@ -1408,7 +1408,7 @@ const app = {
}
};
return (parseTime(bValue) - parseTime(aValue)) * sortOrder;
-
+
case 5: // Rate
case 6: // Market +/-
aValue = getSafeTextContent(a.cells[columnIndex]);
@@ -1417,26 +1417,26 @@ const app = {
aValue = parseFloat(aValue.replace(/[^\d.-]/g, '') || '0');
bValue = parseFloat(bValue.replace(/[^\d.-]/g, '') || '0');
return (aValue - bValue) * sortOrder;
-
+
case 7: // Trade
const aCell = a.cells[columnIndex];
const bCell = b.cells[columnIndex];
-
- aValue = getSafeTextContent(aCell.querySelector('a')) ||
- getSafeTextContent(aCell.querySelector('button')) ||
+
+ aValue = getSafeTextContent(aCell.querySelector('a')) ||
+ getSafeTextContent(aCell.querySelector('button')) ||
getSafeTextContent(aCell);
- bValue = getSafeTextContent(bCell.querySelector('a')) ||
- getSafeTextContent(bCell.querySelector('button')) ||
+ bValue = getSafeTextContent(bCell.querySelector('a')) ||
+ getSafeTextContent(bCell.querySelector('button')) ||
getSafeTextContent(bCell);
-
+
aValue = aValue.toLowerCase();
bValue = bValue.toLowerCase();
-
+
if (aValue === bValue) return 0;
if (aValue === "swap") return -1 * sortOrder;
if (bValue === "swap") return 1 * sortOrder;
return aValue.localeCompare(bValue) * sortOrder;
-
+
default:
aValue = getSafeTextContent(a.cells[columnIndex]);
bValue = getSafeTextContent(b.cells[columnIndex]);
@@ -1528,7 +1528,7 @@ const app = {
console.log('Toggling auto-refresh');
app.isAutoRefreshEnabled = !app.isAutoRefreshEnabled;
localStorage.setItem('autoRefreshEnabled', app.isAutoRefreshEnabled.toString());
-
+
if (app.isAutoRefreshEnabled) {
console.log('Auto-refresh enabled, scheduling next refresh');
app.scheduleNextRefresh();
@@ -1541,7 +1541,7 @@ const app = {
app.nextRefreshTime = null;
localStorage.removeItem('nextRefreshTime');
}
-
+
app.updateAutoRefreshButton();
app.updateNextRefreshTime();
}
From 62031173f57bfda6243037272816f3385b85dc4a Mon Sep 17 00:00:00 2001
From: nahuhh <50635951+nahuhh@users.noreply.github.com>
Date: Thu, 16 Jan 2025 21:36:08 +0000
Subject: [PATCH 2/2] lint: manual eslint
---
basicswap/static/js/main.js | 10 +-
basicswap/static/js/new_offer.js | 2 +-
basicswap/static/js/offerstable.js | 363 +----------------------------
basicswap/static/js/pricechart.js | 19 +-
4 files changed, 29 insertions(+), 365 deletions(-)
diff --git a/basicswap/static/js/main.js b/basicswap/static/js/main.js
index 72291b2..38f6e4e 100644
--- a/basicswap/static/js/main.js
+++ b/basicswap/static/js/main.js
@@ -19,8 +19,8 @@ document.addEventListener('DOMContentLoaded', function() {
const backdrop = document.querySelectorAll('.navbar-backdrop');
if (close.length) {
- for (var i = 0; i < close.length; i++) {
- close[i].addEventListener('click', function() {
+ for (var k = 0; k < close.length; k++) {
+ close[k].addEventListener('click', function() {
for (var j = 0; j < menu.length; j++) {
menu[j].classList.toggle('hidden');
}
@@ -29,12 +29,12 @@ document.addEventListener('DOMContentLoaded', function() {
}
if (backdrop.length) {
- for (var i = 0; i < backdrop.length; i++) {
- backdrop[i].addEventListener('click', function() {
+ for (var l = 0; l < backdrop.length; l++) {
+ backdrop[l].addEventListener('click', function() {
for (var j = 0; j < menu.length; j++) {
menu[j].classList.toggle('hidden');
}
});
}
}
-});
\ No newline at end of file
+});
diff --git a/basicswap/static/js/new_offer.js b/basicswap/static/js/new_offer.js
index a831eab..058e8dc 100644
--- a/basicswap/static/js/new_offer.js
+++ b/basicswap/static/js/new_offer.js
@@ -1,4 +1,4 @@
-window.addEventListener('DOMContentLoaded', (event) => {
+window.addEventListener('DOMContentLoaded', () => {
const err_msgs = document.querySelectorAll('p.error_msg');
for (let i = 0; i < err_msgs.length; i++) {
err_msg = err_msgs[i].innerText;
diff --git a/basicswap/static/js/offerstable.js b/basicswap/static/js/offerstable.js
index 4517db2..2652780 100644
--- a/basicswap/static/js/offerstable.js
+++ b/basicswap/static/js/offerstable.js
@@ -74,14 +74,10 @@ let filterTimeout = null;
// CONFIGURATION CONSTANTS
// Time Constants
-const MIN_REFRESH_INTERVAL = 60; // 60 sec
const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes
-const FALLBACK_CACHE_DURATION = 24 * 60 * 60 * 1000; // 24 hours
// Application Constants
const itemsPerPage = 50;
-const PRICE_INIT_RETRIES = 3;
-const PRICE_INIT_RETRY_DELAY = 2000;
const isSentOffers = window.offersTableConfig.isSentOffers;
const offersConfig = {
@@ -111,12 +107,6 @@ const coinNameToSymbol = {
'Bitcoin Cash': 'bitcoin-cash'
};
-const symbolToCoinName = {
- ...Object.fromEntries(Object.entries(coinNameToSymbol).map(([key, value]) => [value, key])),
- 'zcoin': 'Firo',
- 'firo': 'Firo'
-};
-
const coinNameToDisplayName = {
'Bitcoin': 'Bitcoin',
'Litecoin': 'Litecoin',
@@ -152,76 +142,6 @@ const totalPagesSpan = document.getElementById('totalPages');
const lastRefreshTimeSpan = document.getElementById('lastRefreshTime');
const newEntriesCountSpan = document.getElementById('newEntriesCount');
-const ScrollOptimizer = {
- scrollTimeout: null,
- isScrolling: false,
- tooltipCache: new WeakMap(),
-
- init() {
- window.addEventListener('scroll', this.handleScroll.bind(this), { passive: true });
-
- document.body.addEventListener('mouseenter', this.handleTooltipEnter.bind(this), true);
- document.body.addEventListener('mouseleave', this.handleTooltipLeave.bind(this), true);
- },
-
- handleScroll() {
- if (this.scrollTimeout) {
- window.cancelAnimationFrame(this.scrollTimeout);
- }
-
- if (!this.isScrolling) {
- requestAnimationFrame(() => {
- document.body.classList.add('is-scrolling');
- this.isScrolling = true;
- });
- }
-
- this.scrollTimeout = window.requestAnimationFrame(() => {
- document.body.classList.remove('is-scrolling');
- this.isScrolling = false;
- });
- },
-
- handleTooltipEnter(e) {
- const tooltipTrigger = e.target.closest('[data-tooltip-target]');
- if (!tooltipTrigger) return;
-
- const tooltipId = tooltipTrigger.getAttribute('data-tooltip-target');
- let tooltip = this.tooltipCache.get(tooltipTrigger);
-
- if (!tooltip) {
- tooltip = document.getElementById(tooltipId);
- if (tooltip) {
- this.tooltipCache.set(tooltipTrigger, tooltip);
- }
- }
-
- if (tooltip) {
- tooltip.classList.remove('invisible', 'opacity-0');
- }
- },
-
- handleTooltipLeave(e) {
- const tooltipTrigger = e.target.closest('[data-tooltip-target]');
- if (!tooltipTrigger) return;
-
- const tooltip = this.tooltipCache.get(tooltipTrigger);
- if (tooltip) {
- tooltip.classList.add('invisible', 'opacity-0');
- }
- },
-
- cleanup() {
- if (this.scrollTimeout) {
- window.cancelAnimationFrame(this.scrollTimeout);
- }
- window.removeEventListener('scroll', this.handleScroll);
- document.body.removeEventListener('mouseenter', this.handleTooltipEnter);
- document.body.removeEventListener('mouseleave', this.handleTooltipLeave);
- this.tooltipCache = null;
- }
-};
-
// MANAGER OBJECTS
const WebSocketManager = {
ws: null,
@@ -550,8 +470,8 @@ const CacheManager = {
try {
localStorage.setItem(key, JSON.stringify(item));
return true;
- } catch (retryError) {
- //console.error('Storage quota exceeded even after cleanup');
+ } catch (error) {
+ console.error('Storage quota exceeded even after cleanup:', error.message);
return false;
}
}
@@ -577,6 +497,7 @@ const CacheManager = {
localStorage.removeItem(key);
} catch (error) {
+ console.error("An error occured:", error.message);
localStorage.removeItem(key);
}
return null;
@@ -612,6 +533,7 @@ const CacheManager = {
totalSize += size;
itemCount++;
} catch (error) {
+ console.error("An error occured:", error.message);
localStorage.removeItem(key);
}
}
@@ -662,6 +584,7 @@ const CacheManager = {
expiredCount++;
}
} catch (error) {
+ console.error("An error occured:", error.message);
}
}
@@ -729,6 +652,7 @@ const IdentityManager = {
return await response.json();
} catch (error) {
if (attempt >= this.maxRetries) {
+ console.error("An error occured:", error.message);
console.warn(`Failed to fetch identity for ${address} after ${attempt} attempts`);
return null;
}
@@ -856,10 +780,6 @@ window.tableRateModule = {
};
// CORE SYSTEM FUNCTIONS
-function initializeWebSocket() {
- return WebSocketManager.initialize();
-}
-
function initializeTableRateModule() {
if (typeof window.tableRateModule !== 'undefined') {
tableRateModule = window.tableRateModule;
@@ -871,53 +791,12 @@ function initializeTableRateModule() {
}
}
-async function initializePriceData() {
- //console.log('Initializing price data...');
- let retryCount = 0;
- let prices = null;
-
- const PRICES_CACHE_KEY = 'prices_coingecko';
- const cachedPrices = CacheManager.get(PRICES_CACHE_KEY);
- if (cachedPrices && cachedPrices.value) {
- console.log('Using cached price data');
- latestPrices = cachedPrices.value;
- return true;
- }
-
- while (retryCount < PRICE_INIT_RETRIES) {
- try {
- prices = await fetchLatestPrices();
-
- if (prices && Object.keys(prices).length > 0) {
- console.log('Successfully fetched initial price data');
- latestPrices = prices;
- CacheManager.set(PRICES_CACHE_KEY, prices, CACHE_DURATION);
- return true;
- }
-
- retryCount++;
-
- if (retryCount < PRICE_INIT_RETRIES) {
- await new Promise(resolve => setTimeout(resolve, PRICE_INIT_RETRY_DELAY));
- }
- } catch (error) {
- console.error(`Error fetching prices (attempt ${retryCount + 1}):`, error);
- retryCount++;
-
- if (retryCount < PRICE_INIT_RETRIES) {
- await new Promise(resolve => setTimeout(resolve, PRICE_INIT_RETRY_DELAY));
- }
- }
- }
-
- return false;
-}
-
function continueInitialization() {
updateCoinFilterImages();
fetchOffers().then(() => {
applyFilters();
if (!isSentOffers) {
+ return;
}
});
@@ -928,32 +807,6 @@ function continueInitialization() {
//console.log('Initialization completed');
}
-function checkOfferAgainstFilters(offer, filters) {
- if (filters.coin_to !== 'any' && !coinMatches(offer.coin_to, filters.coin_to)) {
- return false;
- }
- if (filters.coin_from !== 'any' && !coinMatches(offer.coin_from, filters.coin_from)) {
- return false;
- }
- if (filters.status && filters.status !== 'any') {
- const currentTime = Math.floor(Date.now() / 1000);
- const isExpired = offer.expire_at <= currentTime;
- const isRevoked = Boolean(offer.is_revoked);
-
- switch (filters.status) {
- case 'active':
- return !isExpired && !isRevoked;
- case 'expired':
- return isExpired && !isRevoked;
- case 'revoked':
- return isRevoked;
- default:
- return true;
- }
- }
- return true;
-}
-
function initializeFlowbiteTooltips() {
if (typeof Tooltip === 'undefined') {
console.warn('Tooltip is not defined. Make sure the required library is loaded.');
@@ -971,65 +824,6 @@ function initializeFlowbiteTooltips() {
}
// DATA PROCESSING FUNCTIONS
-async function checkExpiredAndFetchNew() {
- if (isSentOffers) return Promise.resolve();
-
- console.log('Starting checkExpiredAndFetchNew');
- const OFFERS_CACHE_KEY = 'offers_received';
-
- try {
- const response = await fetch('/json/offers');
- const data = await response.json();
- let newListings = Array.isArray(data) ? data : Object.values(data);
-
- newListings = newListings.map(offer => ({
- ...offer,
- offer_id: String(offer.offer_id || ''),
- swap_type: String(offer.swap_type || 'N/A'),
- addr_from: String(offer.addr_from || ''),
- coin_from: String(offer.coin_from || ''),
- coin_to: String(offer.coin_to || ''),
- amount_from: String(offer.amount_from || '0'),
- amount_to: String(offer.amount_to || '0'),
- rate: String(offer.rate || '0'),
- created_at: Number(offer.created_at || 0),
- expire_at: Number(offer.expire_at || 0),
- is_own_offer: Boolean(offer.is_own_offer),
- amount_negotiable: Boolean(offer.amount_negotiable),
- unique_id: `${offer.offer_id}_${offer.created_at}_${offer.coin_from}_${offer.coin_to}`
- }));
-
- newListings = newListings.filter(offer => !isOfferExpired(offer));
- originalJsonData = newListings;
-
- CacheManager.set(OFFERS_CACHE_KEY, newListings, CACHE_DURATION);
-
- const currentFilters = new FormData(filterForm);
- const hasActiveFilters = currentFilters.get('coin_to') !== 'any' ||
- currentFilters.get('coin_from') !== 'any';
-
- if (hasActiveFilters) {
- jsonData = filterAndSortData();
- } else {
- jsonData = [...newListings];
- }
-
- updateOffersTable();
- updateJsonView();
- updatePaginationInfo();
-
- if (jsonData.length === 0) {
- handleNoOffersScenario();
- }
-
- return jsonData.length;
- } catch (error) {
- //console.error('Error fetching new listings:', error);
- nextRefreshCountdown = 60;
- return Promise.reject(error);
- }
-}
-
function getValidOffers() {
if (!jsonData) {
//console.warn('jsonData is undefined or null');
@@ -1202,42 +996,6 @@ async function calculateProfitLoss(fromCoin, toCoin, fromAmount, toAmount, isOwn
});
}
-async function getMarketRate(fromCoin, toCoin) {
- return new Promise((resolve) => {
- //console.log(`Attempting to get market rate for ${fromCoin} to ${toCoin}`);
- if (!latestPrices) {
- //console.warn('Latest prices object is not available');
- resolve(null);
- return;
- }
-
- const getPriceKey = (coin) => {
- const lowerCoin = coin.toLowerCase();
- if (lowerCoin === 'firo' || lowerCoin === 'zcoin') {
- return 'zcoin';
- }
- if (lowerCoin === 'bitcoin cash') {
- return 'bitcoin-cash';
- }
- return coinNameToSymbol[coin] || lowerCoin;
- };
-
- const fromSymbol = getPriceKey(fromCoin);
- const toSymbol = getPriceKey(toCoin);
-
- const fromPrice = latestPrices[fromSymbol]?.usd;
- const toPrice = latestPrices[toSymbol]?.usd;
- if (!fromPrice || !toPrice) {
- //console.warn(`Missing price data for ${!fromPrice ? fromCoin : toCoin}`);
- resolve(null);
- return;
- }
- const rate = toPrice / fromPrice;
- //console.log(`Market rate calculated: ${rate} ${toCoin}/${fromCoin}`);
- resolve(rate);
- });
-}
-
function getEmptyPriceData() {
return {
'bitcoin': { usd: null, btc: null },
@@ -1347,7 +1105,7 @@ async function fetchLatestPrices() {
return data;
}
-async function fetchOffers(manualRefresh = false) {
+async function fetchOffers() {
const refreshButton = document.getElementById('refreshOffers');
const refreshIcon = document.getElementById('refreshIcon');
const refreshText = document.getElementById('refreshText');
@@ -1557,7 +1315,7 @@ function updateProfitLoss(row, fromCoin, toCoin, fromAmount, toAmount, isOwnOffe
}
})
.catch(error => {
- //console.error('Error in updateProfitLoss:', error);
+ console.error('Error in updateProfitLoss:', error);
profitLossElement.textContent = 'Error';
profitLossElement.className = 'profit-loss text-lg font-bold text-red-500';
});
@@ -1789,10 +1547,6 @@ function handleTableError() {
`;
}
-async function getIdentityData(address) {
- return IdentityManager.getIdentityData(address);
-}
-
function getIdentityInfo(address, identity) {
if (!identity) {
return {
@@ -1928,10 +1682,6 @@ function createTimeColumn(offer, postedTime, expiresIn) {
`;
}
-function shouldShowPublicTag(offers) {
- return offers.some(offer => !offer.is_public);
-}
-
function truncateText(text, maxLength = 15) {
if (typeof text !== 'string') return '';
return text.length > maxLength
@@ -1977,7 +1727,7 @@ function createDetailsColumn(offer, identity = null) {
`;
}
-function createTakerAmountColumn(offer, coinTo, coinFrom) {
+function createTakerAmountColumn(offer, coinTo) {
const fromAmount = parseFloat(offer.amount_to);
const toSymbol = getCoinSymbol(coinTo);
return `
@@ -2021,7 +1771,7 @@ function createSwapColumn(offer, coinFromDisplay, coinToDisplay, coinFromSymbol,
`;
}
-function createOrderbookColumn(offer, coinFrom, coinTo) {
+function createOrderbookColumn(offer, coinFrom) {
const toAmount = parseFloat(offer.amount_from);
const fromSymbol = getCoinSymbol(coinFrom);
return `
@@ -2055,7 +1805,6 @@ function createRateColumn(offer, coinFrom, coinTo) {
return coinNameToSymbol[coin] || lowerCoin;
};
- const fromPriceUSD = latestPrices[getPriceKey(coinFrom)]?.usd || 0;
const toPriceUSD = latestPrices[getPriceKey(coinTo)]?.usd || 0;
const rateInUSD = rate * toPriceUSD;
@@ -2126,9 +1875,6 @@ function createActionColumn(offer, isActuallyExpired = false) {
// TOOLTIP FUNCTIONS
function createTooltips(offer, treatAsSentOffer, coinFrom, coinTo, fromAmount, toAmount, postedTime, expiresIn, isActuallyExpired, isRevoked, identity = null) {
- const rate = parseFloat(offer.rate);
- const fromSymbol = getCoinSymbolLowercase(coinFrom);
- const toSymbol = getCoinSymbolLowercase(coinTo);
const uniqueId = `${offer.offer_id}_${offer.created_at}`;
const addrFrom = offer.addr_from || '';
@@ -2147,10 +1893,6 @@ function createTooltips(offer, treatAsSentOffer, coinFrom, coinTo, fromAmount, t
((identityInfo.stats.sentBidsSuccessful + identityInfo.stats.recvBidsSuccessful) / totalBids) * 100
).toFixed(1) : 0;
- const fromPriceUSD = latestPrices[fromSymbol]?.usd || 0;
- const toPriceUSD = latestPrices[toSymbol]?.usd || 0;
- const rateInUSD = rate * toPriceUSD;
-
const combinedRateTooltip = createCombinedRateTooltip(offer, coinFrom, coinTo, treatAsSentOffer);
const percentageTooltipContent = createTooltipContent(treatAsSentOffer, coinFrom, coinTo, fromAmount, toAmount);
@@ -2526,13 +2268,6 @@ function clearFilters() {
}
function hasActiveFilters() {
- const formData = new FormData(filterForm);
- const filters = {
- coin_to: formData.get('coin_to'),
- coin_from: formData.get('coin_from'),
- status: formData.get('status')
- };
-
const selectElements = filterForm.querySelectorAll('select');
let hasChangedFilters = false;
@@ -2622,20 +2357,6 @@ function isOfferExpired(offer) {
return isExpired;
}
-function getTimeUntilNextExpiration() {
- const currentTime = Math.floor(Date.now() / 1000);
- const nextExpiration = jsonData.reduce((earliest, offer) => {
- const timeUntilExpiration = offer.expire_at - currentTime;
- return timeUntilExpiration > 0 && timeUntilExpiration < earliest ? timeUntilExpiration : earliest;
- }, Infinity);
-
- return Math.max(MIN_REFRESH_INTERVAL, Math.min(nextExpiration, 300));
-}
-
-function calculateInverseRate(rate) {
- return (1 / parseFloat(rate)).toFixed(8);
-}
-
function formatTime(timestamp, addAgoSuffix = false) {
const now = Math.floor(Date.now() / 1000);
const diff = Math.abs(now - timestamp);
@@ -2796,47 +2517,6 @@ function initializeTableEvents() {
}
}
-const eventListeners = {
- listeners: [],
-
- add(element, eventType, handler, options = false) {
- element.addEventListener(eventType, handler, options);
- this.listeners.push({ element, eventType, handler, options });
- // console.log(`Added ${eventType} listener to`, element);
- },
-
- addWindowListener(eventType, handler, options = false) {
- window.addEventListener(eventType, handler, options);
- this.listeners.push({ element: window, eventType, handler, options });
- // console.log(`Added ${eventType} window listener`);
- },
-
- removeAll() {
- console.log('Removing all event listeners...');
- this.listeners.forEach(({ element, eventType, handler, options }) => {
- element.removeEventListener(eventType, handler, options);
- //console.log(`Removed ${eventType} listener from`, element);
- });
- this.listeners = [];
- },
-
- removeByElement(element) {
- const remainingListeners = [];
- this.listeners = this.listeners.filter(listener => {
- if (listener.element === element) {
- listener.element.removeEventListener(
- listener.eventType,
- listener.handler,
- listener.options
- );
- console.log(`✂️ Removed ${listener.eventType} listener from`, element);
- return false;
- }
- return true;
- });
- },
-};
-
function handleTableSort(columnIndex, header) {
if (currentSortColumn === columnIndex) {
currentSortDirection = currentSortDirection === 'asc' ? 'desc' : 'asc';
@@ -2870,27 +2550,6 @@ function handleTableSort(columnIndex, header) {
applyFilters();
}
-function setupRowEventListeners(row, offer) {
- const tooltipTriggers = row.querySelectorAll('[data-tooltip-target]');
- tooltipTriggers.forEach(trigger => {
- EventManager.add(trigger, 'mouseenter', () => {
- const tooltipId = trigger.getAttribute('data-tooltip-target');
- const tooltip = document.getElementById(tooltipId);
- if (tooltip) {
- tooltip.classList.remove('invisible', 'opacity-0');
- }
- });
-
- EventManager.add(trigger, 'mouseleave', () => {
- const tooltipId = trigger.getAttribute('data-tooltip-target');
- const tooltip = document.getElementById(tooltipId);
- if (tooltip) {
- tooltip.classList.add('invisible', 'opacity-0');
- }
- });
- });
-}
-
// TIMER MANAGEMENT
const timerManager = {
intervals: [],
diff --git a/basicswap/static/js/pricechart.js b/basicswap/static/js/pricechart.js
index a461e4e..a4c63f2 100644
--- a/basicswap/static/js/pricechart.js
+++ b/basicswap/static/js/pricechart.js
@@ -80,7 +80,7 @@ const logger = {
// API
const api = {
makePostRequest: (url, headers = {}) => {
- const apiKeys = getAPIKeys();
+ // unused // const apiKeys = getAPIKeys();
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('POST', '/json/readurl');
@@ -202,7 +202,7 @@ const api = {
//console.error(`Unexpected data structure for WOW:`, response);
}
} catch (error) {
- //console.error(`Error fetching CoinGecko data for WOW:`, error);
+ console.error(`Error fetching CoinGecko data for WOW:`, error);
}
} else {
const resolution = config.resolutions[config.currentResolution];
@@ -225,7 +225,7 @@ const api = {
//console.error(`Unexpected data structure for ${coin}:`, response);
}
} catch (error) {
- //console.error(`Error fetching CryptoCompare data for ${coin}:`, error);
+ console.error(`Error fetching CryptoCompare data for ${coin}:`, error);
}
}
});
@@ -266,8 +266,8 @@ const cache = {
//console.log(`Cache expired for ${key}`);
localStorage.removeItem(key);
}
- } catch (e) {
- //console.error('Error parsing cache item:', e);
+ } catch (error) {
+ console.error('Error parsing cache item:', error.message);
localStorage.removeItem(key);
}
return null;
@@ -288,7 +288,6 @@ const cache = {
// UI
const ui = {
displayCoinData: (coin, data) => {
- const coinConfig = config.coins.find(c => c.symbol === coin);
let priceUSD, priceBTC, priceChange1d, volume24h;
const updateUI = (isError = false) => {
const priceUsdElement = document.querySelector(`#${coin.toLowerCase()}-price-usd`);
@@ -337,7 +336,7 @@ displayCoinData: (coin, data) => {
updateUI(false);
} catch (error) {
- //console.error(`Error displaying data for ${coin}:`, error.message);
+ console.error(`Error displaying data for ${coin}:`, error.message);
updateUI(true);
}
},
@@ -744,6 +743,7 @@ const chartModule = {
y: point.y
}));
} catch (error) {
+ console.error("An error occured:", error.message);
return [];
}
},
@@ -1057,6 +1057,7 @@ const app = {
app.initAutoRefresh();
} catch (error) {
+ console.error("An error occured:", error.message);
ui.displayErrorMessage('Failed to initialize the dashboard. Please try refreshing the page.');
} finally {
ui.hideLoader();
@@ -1084,6 +1085,7 @@ const app = {
}
}
} catch (error) {
+ console.error("An error occured:", error.message);
ui.displayErrorMessage('Failed to load coin data. Please try refreshing the page.');
}
},
@@ -1187,6 +1189,7 @@ const app = {
earliestExpiration = Math.min(earliestExpiration, cachedItem.expiresAt);
}
} catch (error) {
+ console.error("An error occured:", error.message);
localStorage.removeItem(key);
}
}
@@ -1252,6 +1255,7 @@ const app = {
ui.updateLastRefreshedTime();
} catch (error) {
+ console.error("An error occured:", error.message);
ui.displayErrorMessage('Failed to refresh all data. Please try again.');
} finally {
ui.hideLoader();
@@ -1363,6 +1367,7 @@ const app = {
app.btcPriceUSD = 0;
}
} catch (error) {
+ console.error("An error occured:", error.message);
app.btcPriceUSD = 0;
}
},