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) {
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
};
}

View File

@@ -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

View File

@@ -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 => {

View File

@@ -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;

View File

@@ -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;
}
};

View File

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

View File

@@ -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);

View File

@@ -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;

View File

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