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:
Chuck
2026-05-14 11:14:20 -04:00
parent 97d798b471
commit f7179779d8
9 changed files with 8 additions and 12 deletions

View File

@@ -45,7 +45,7 @@ document.body.addEventListener('htmx:afterRequest', function(event) {
if (data.message) { if (data.message) {
showNotification(data.message, data.status || 'info'); showNotification(data.message, data.status || 'info');
} }
} catch (e) { } catch {
// Not JSON, ignore // Not JSON, ignore
} }
} }
@@ -65,8 +65,7 @@ window.reconnectSSE = function() {
if (window.displaySource) { if (window.displaySource) {
window.displaySource.close(); window.displaySource.close();
window.displaySource = new EventSource('/api/v3/stream/display'); window.displaySource = new EventSource('/api/v3/stream/display');
window.displaySource.onmessage = function(event) { window.displaySource.onmessage = function() {
const data = JSON.parse(event.data);
// Handle display updates // Handle display updates
}; };
} }

View File

@@ -40,7 +40,7 @@ const RequestThrottler = {
// Create throttled request with abort support // Create throttled request with abort support
let abortController = null; let abortController = null;
const promise = new Promise((resolve, reject) => { const promise = new Promise((resolve, reject) => {
const timeoutId = setTimeout(async () => { setTimeout(async () => {
try { try {
const result = await fn(); const result = await fn();
// Cache successful GET requests // Cache successful GET requests

View File

@@ -364,7 +364,6 @@
// Re-index remaining rows // Re-index remaining rows
const rows = tbody.querySelectorAll('.custom-feed-row'); const rows = tbody.querySelectorAll('.custom-feed-row');
rows.forEach((r, index) => { rows.forEach((r, index) => {
const oldIndex = r.getAttribute('data-index');
r.setAttribute('data-index', index); r.setAttribute('data-index', index);
// Update all input names with new index // Update all input names with new index
r.querySelectorAll('input, button').forEach(input => { r.querySelectorAll('input, button').forEach(input => {

View File

@@ -91,7 +91,7 @@
const xOptions = config['x-options'] || config['x_options'] || {}; const xOptions = config['x-options'] || config['x_options'] || {};
const requestedFormat = xOptions.format || 'long'; const requestedFormat = xOptions.format || 'long';
// Validate format exists in DAY_LABELS, default to 'long' if not // 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 layout = xOptions.layout || 'horizontal';
const showSelectAll = xOptions.selectAll !== false; const showSelectAll = xOptions.selectAll !== false;

View File

@@ -294,7 +294,7 @@
if (fileType !== 'json') { if (fileType !== 'json') {
formData.append('plugin_id', pluginId); formData.append('plugin_id', pluginId);
} }
validFiles.forEach(file => formData.append('files', file)); validFiles.forEach(file => { formData.append('files', file); });
try { try {
const response = await fetch(customUploadEndpoint, { const response = await fetch(customUploadEndpoint, {
@@ -741,7 +741,7 @@
try { try {
const date = new Date(dateString); const date = new Date(dateString);
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); return date.toLocaleDateString() + ' ' + date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
} catch (e) { } catch {
return dateString; return dateString;
} }
}; };

View File

@@ -199,7 +199,7 @@
*/ */
function clearAll() { function clearAll() {
const ids = [...activeNotifications]; const ids = [...activeNotifications];
ids.forEach(id => removeNotification(id, true)); ids.forEach(id => { removeNotification(id, true); });
} }
// Register the widget // Register the widget

View File

@@ -174,7 +174,6 @@
const xOptions = config['x-options'] || config['x_options'] || {}; const xOptions = config['x-options'] || config['x_options'] || {};
const showModeToggle = xOptions.showModeToggle !== false; const showModeToggle = xOptions.showModeToggle !== false;
const showEnableToggle = xOptions.showEnableToggle !== false; const showEnableToggle = xOptions.showEnableToggle !== false;
const compactMode = xOptions.compactMode === true;
const schedule = normalizeSchedule(value); const schedule = normalizeSchedule(value);

View File

@@ -69,7 +69,6 @@
const enumValues = config.enum || xOptions.options || []; const enumValues = config.enum || xOptions.options || [];
const placeholder = xOptions.placeholder || 'Select...'; const placeholder = xOptions.placeholder || 'Select...';
const labels = xOptions.labels || {}; const labels = xOptions.labels || {};
const icons = xOptions.icons || {};
const disabled = xOptions.disabled === true; const disabled = xOptions.disabled === true;
const required = xOptions.required === true; const required = xOptions.required === true;

View File

@@ -358,7 +358,7 @@
}); });
timeEl.textContent = formatter.format(now); timeEl.textContent = formatter.format(now);
previewEl.classList.remove('hidden'); previewEl.classList.remove('hidden');
} catch (e) { } catch {
previewEl.classList.add('hidden'); previewEl.classList.add('hidden');
} }
} }