feat: add prettier and eslint with pre-commit hook

This commit is contained in:
2026-05-10 19:23:53 +02:00
parent be9fbe0f64
commit 3703bbfcfe
33 changed files with 1643 additions and 1245 deletions

View File

@@ -1,59 +1,59 @@
import { state } from './state'
import { displayTimeFromAbsolute, absoluteTimeFromDisplay } from './timeline'
import { state } from './state';
import { displayTimeFromAbsolute, absoluteTimeFromDisplay } from './timeline';
const streamUrlForMode = (mode: string, quality?: string): string => {
const src = state.modeSources[mode]
if (!src?.token) return ''
let url = `${state.streamURL}?mode=${encodeURIComponent(mode)}&token=${encodeURIComponent(src.token)}`
if (quality && quality !== 'best') url += `&quality=${encodeURIComponent(quality)}`
return url
}
const src = state.modeSources[mode];
if (!src?.token) return '';
let url = `${state.streamURL}?mode=${encodeURIComponent(mode)}&token=${encodeURIComponent(src.token)}`;
if (quality && quality !== 'best') url += `&quality=${encodeURIComponent(quality)}`;
return url;
};
const loadVideo = (url: string): void => {
if (!url) return
const wasPlaying = !state.video.paused
const prevTime = displayTimeFromAbsolute(state.video.currentTime)
state.video.src = url
state.video.load()
state.pendingSeekTime = prevTime
if (wasPlaying) state.video.play().catch(() => {})
}
if (!url) return;
const wasPlaying = !state.video.paused;
const prevTime = displayTimeFromAbsolute(state.video.currentTime);
state.video.src = url;
state.video.load();
state.pendingSeekTime = prevTime;
if (wasPlaying) state.video.play().catch(() => {});
};
export const switchQuality = (quality: string): void => {
const url = streamUrlForMode(state.currentMode, quality)
if (!url) return
localStorage.setItem('mal:preferred-quality', quality)
loadVideo(url)
}
const url = streamUrlForMode(state.currentMode, quality);
if (!url) return;
localStorage.setItem('mal:preferred-quality', quality);
loadVideo(url);
};
export const updateQualityOptions = (): void => {
const select = state.container.querySelector('[data-quality-select]') as HTMLSelectElement | null
if (!select) return
const qualities = state.modeSources[state.currentMode]?.qualities ?? []
select.innerHTML = ''
const select = state.container.querySelector('[data-quality-select]') as HTMLSelectElement | null;
if (!select) return;
const qualities = state.modeSources[state.currentMode]?.qualities ?? [];
select.innerHTML = '';
const best = document.createElement('option')
best.value = 'best'
best.textContent = 'Auto / Best'
select.appendChild(best)
const best = document.createElement('option');
best.value = 'best';
best.textContent = 'Auto / Best';
select.appendChild(best);
qualities.forEach(q => {
const opt = document.createElement('option')
opt.value = q
opt.textContent = q
select.appendChild(opt)
})
const opt = document.createElement('option');
opt.value = q;
opt.textContent = q;
select.appendChild(opt);
});
const preferred = localStorage.getItem('mal:preferred-quality') || 'best'
select.value = qualities.includes(preferred) ? preferred : 'best'
const preferred = localStorage.getItem('mal:preferred-quality') || 'best';
select.value = qualities.includes(preferred) ? preferred : 'best';
const wrapper = select.parentElement
wrapper?.classList.toggle('hidden', qualities.length === 0)
}
const wrapper = select.parentElement;
wrapper?.classList.toggle('hidden', qualities.length === 0);
};
export const setupQuality = (): void => {
const select = state.container.querySelector('[data-quality-select]') as HTMLSelectElement | null
select?.addEventListener('change', (e) => {
switchQuality((e.target as HTMLSelectElement).value)
})
}
const select = state.container.querySelector('[data-quality-select]') as HTMLSelectElement | null;
select?.addEventListener('change', e => {
switchQuality((e.target as HTMLSelectElement).value);
});
};