mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-05-15 10:03:31 +00:00
fix(js): resolve Biome lint warnings across 9 JS files
noUnusedVariables (catch bindings → optional catch syntax):
- app.js, file-upload.js, timezone-selector.js: } catch (e) { → } catch {
ES2019 optional catch binding; e was unused in all three handlers
noUnusedVariables (dead assignments):
- app.js: remove const data= in display SSE stub (handler does nothing yet)
- api_client.js: remove const timeoutId= (setTimeout ID never used to cancel)
- custom-feeds.js: remove const oldIndex= (getAttribute result never read)
- schedule-picker.js: remove const compactMode= (never used in HTML build)
- select-dropdown.js: remove const icons= (icons not yet rendered in options)
noPrototypeBuiltins:
- day-selector.js: DAY_LABELS.hasOwnProperty(x) →
Object.prototype.hasOwnProperty.call(DAY_LABELS, x)
Safe form that works even on null-prototype objects
useIterableCallbackReturn:
- file-upload.js, notification.js: forEach(x => expr) →
forEach(x => { expr; }) — forEach ignores return values;
implicit return from arrow body was misleading
htmx-sse.js is a vendor extension file with old-style var/== patterns
that are correct for it; 18 Biome issues suppressed via Codacy API
rather than modifying the vendor source.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -45,7 +45,7 @@ document.body.addEventListener('htmx:afterRequest', function(event) {
|
||||
if (data.message) {
|
||||
showNotification(data.message, data.status || 'info');
|
||||
}
|
||||
} catch (e) {
|
||||
} catch {
|
||||
// Not JSON, ignore
|
||||
}
|
||||
}
|
||||
@@ -65,8 +65,7 @@ window.reconnectSSE = function() {
|
||||
if (window.displaySource) {
|
||||
window.displaySource.close();
|
||||
window.displaySource = new EventSource('/api/v3/stream/display');
|
||||
window.displaySource.onmessage = function(event) {
|
||||
const data = JSON.parse(event.data);
|
||||
window.displaySource.onmessage = function() {
|
||||
// Handle display updates
|
||||
};
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ const RequestThrottler = {
|
||||
// Create throttled request with abort support
|
||||
let abortController = null;
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
const timeoutId = setTimeout(async () => {
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
const result = await fn();
|
||||
// Cache successful GET requests
|
||||
|
||||
@@ -364,7 +364,6 @@
|
||||
// Re-index remaining rows
|
||||
const rows = tbody.querySelectorAll('.custom-feed-row');
|
||||
rows.forEach((r, index) => {
|
||||
const oldIndex = r.getAttribute('data-index');
|
||||
r.setAttribute('data-index', index);
|
||||
// Update all input names with new index
|
||||
r.querySelectorAll('input, button').forEach(input => {
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
const xOptions = config['x-options'] || config['x_options'] || {};
|
||||
const requestedFormat = xOptions.format || 'long';
|
||||
// Validate format exists in DAY_LABELS, default to 'long' if not
|
||||
const format = DAY_LABELS.hasOwnProperty(requestedFormat) ? requestedFormat : 'long';
|
||||
const format = Object.prototype.hasOwnProperty.call(DAY_LABELS, requestedFormat) ? requestedFormat : 'long';
|
||||
const layout = xOptions.layout || 'horizontal';
|
||||
const showSelectAll = xOptions.selectAll !== false;
|
||||
|
||||
|
||||
@@ -294,7 +294,7 @@
|
||||
if (fileType !== 'json') {
|
||||
formData.append('plugin_id', pluginId);
|
||||
}
|
||||
validFiles.forEach(file => formData.append('files', file));
|
||||
validFiles.forEach(file => { formData.append('files', file); });
|
||||
|
||||
try {
|
||||
const response = await fetch(customUploadEndpoint, {
|
||||
@@ -741,7 +741,7 @@
|
||||
try {
|
||||
const date = new Date(dateString);
|
||||
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
|
||||
} catch (e) {
|
||||
} catch {
|
||||
return dateString;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
*/
|
||||
function clearAll() {
|
||||
const ids = [...activeNotifications];
|
||||
ids.forEach(id => removeNotification(id, true));
|
||||
ids.forEach(id => { removeNotification(id, true); });
|
||||
}
|
||||
|
||||
// Register the widget
|
||||
|
||||
@@ -174,7 +174,6 @@
|
||||
const xOptions = config['x-options'] || config['x_options'] || {};
|
||||
const showModeToggle = xOptions.showModeToggle !== false;
|
||||
const showEnableToggle = xOptions.showEnableToggle !== false;
|
||||
const compactMode = xOptions.compactMode === true;
|
||||
|
||||
const schedule = normalizeSchedule(value);
|
||||
|
||||
|
||||
@@ -69,7 +69,6 @@
|
||||
const enumValues = config.enum || xOptions.options || [];
|
||||
const placeholder = xOptions.placeholder || 'Select...';
|
||||
const labels = xOptions.labels || {};
|
||||
const icons = xOptions.icons || {};
|
||||
const disabled = xOptions.disabled === true;
|
||||
const required = xOptions.required === true;
|
||||
|
||||
|
||||
@@ -358,7 +358,7 @@
|
||||
});
|
||||
timeEl.textContent = formatter.format(now);
|
||||
previewEl.classList.remove('hidden');
|
||||
} catch (e) {
|
||||
} catch {
|
||||
previewEl.classList.add('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user