This commit is contained in:
2026-09-29 04:35:35 +02:00
parent 73c0659d4a
commit 6c813143eb
51 changed files with 3708 additions and 743 deletions
+64 -19
View File
@@ -594,14 +594,7 @@
info
};
slider.addEventListener('input', (e) => {
const val = parseInt(e.target.value, 10);
settings.yank = isNaN(val) ? 0 : Math.min(100, Math.max(0, val));
// Yank drives the underlying advanced parameters
updateAdvancedFromYank();
saveSettings();
applySettingsToRuntime();
});
slider.addEventListener('input', (e) => setYank(e.target.value));
function toggleEnabledFromUI(targetController) {
settings.enabled = !settings.enabled;
@@ -697,7 +690,9 @@
// Never show it just because sidebar .webm stickers exist.
const primaryVideo = document.getElementById('my-video') ||
document.querySelector('video.viewer, video.v0ck_video');
ui.floatingBadge.style.display = (swfButtons.length === 0 && !!primaryVideo) ? 'block' : 'none';
// Retired: the settings live in the sidebar Tuner (Flash Yank tab) now, so no floating fallback badge
void primaryVideo;
ui.floatingBadge.style.display = 'none';
// Style both (if they exist)
[ui.floatingBadge, ...swfButtons].forEach(b => {
@@ -739,19 +734,69 @@
}
if (!currentController) return;
settings.enabled = !settings.enabled;
if (settings.enabled) currentController.enable();
else currentController.disable();
saveSettings();
updateUIFromSettings();
if (typeof window.flashMessage === 'function') {
window.flashMessage(`Flash Yank ${settings.enabled ? 'enabled' : 'disabled'}`, 2000, settings.enabled ? 'success' : 'info');
}
setEnabled(!settings.enabled);
});
}
// ---------- Public API (sidebar Tuner → Flash Yank) ----------
// The in-player "SWF" button is gone; the Tuner pane drives the filter through this API and
// listens to 'f0ck:flashyank_changed' (also fired by the 's' hotkey) to stay in sync.
function findController() {
if (currentController) return currentController;
const mainVid = document.getElementById('my-video') || document.querySelector('video.v0ck_video, video.viewer, video');
if (!mainVid) return null;
if (!mainVid.__flashFilterController) setupVideo(mainVid);
return mainVid.__flashFilterController || null;
}
function getState() {
return {
enabled: !!settings.enabled,
yank: settings.yank,
width: currentConfig.internalWidth,
fps: currentConfig.fps,
colors: Math.pow(currentConfig.paletteLevels, 3),
available: isItemPage() && document.querySelectorAll('video').length > 0
};
}
function emitChange() {
window.dispatchEvent(new CustomEvent('f0ck:flashyank_changed', { detail: getState() }));
}
function setEnabled(on, { silent = false } = {}) {
settings.enabled = !!on;
saveSettings();
const controller = findController();
if (controller) {
if (settings.enabled) controller.enable();
else controller.disable();
}
updateUIFromSettings();
emitChange();
if (!silent && typeof window.flashMessage === 'function') {
window.flashMessage('Flash Yank ' + (settings.enabled ? 'enabled' : 'disabled'), 2000, settings.enabled ? 'success' : 'info');
}
}
function setYank(value) {
const v = parseInt(value, 10);
settings.yank = isNaN(v) ? 0 : Math.min(100, Math.max(0, v));
updateAdvancedFromYank();
saveSettings();
applySettingsToRuntime();
emitChange();
}
window.f0ckFlashYank = {
getState,
setEnabled: (on) => setEnabled(on),
toggle: () => setEnabled(!settings.enabled),
setYank,
defaults: { yank: DEFAULT_SETTINGS.yank }
};
// ---------- Bootstrapping ----------
function onReady(fn) {