fdsfasdfasdfasd

This commit is contained in:
2026-09-11 16:44:11 +02:00
parent 925913188f
commit 90791333f7
2 changed files with 119 additions and 41 deletions
+60 -28
View File
@@ -362,12 +362,19 @@ window.cancelAnimFrame = (function () {
window.flashMessage = (text, duration = 2000, type = 'info') => {
// Ensure the stacking container exists
const fsEl = document.fullscreenElement;
const targetParent = fsEl || document.body;
let container = document.getElementById('f0ck-flash-container');
if (!container) {
container = document.createElement('div');
container.id = 'f0ck-flash-container';
container.style.cssText = 'position:fixed;bottom:20px;left:20px;z-index:9999;display:flex;flex-direction:column-reverse;gap:8px;pointer-events:none;';
document.body.appendChild(container);
container.style.cssText = 'position:fixed;bottom:20px;left:20px;z-index:100200;display:flex;flex-direction:column-reverse;gap:8px;pointer-events:none;';
targetParent.appendChild(container);
} else {
container.style.zIndex = '100200';
if (container.parentElement !== targetParent) {
targetParent.appendChild(container);
}
}
const flash = document.createElement('div');
@@ -4060,11 +4067,11 @@ window.cancelAnimFrame = (function () {
} else {
_container.insertAdjacentHTML('beforeend', _html);
if (options.direction) {
const _newContent = _container.querySelector('.content');
if (_newContent) {
_newContent.classList.remove('slide-next', 'slide-prev');
_newContent.classList.add(options.direction === 'next' ? 'slide-next' : 'slide-prev');
}
const _newEls = _container.querySelectorAll('.content, ._204863, .item_title');
_newEls.forEach(el => {
el.classList.remove('slide-next', 'slide-prev', 'slide-out-left', 'slide-out-right');
el.classList.add(options.direction === 'next' ? 'slide-next' : 'slide-prev');
});
}
}
@@ -4274,11 +4281,11 @@ window.cancelAnimFrame = (function () {
} else {
container.insertAdjacentHTML('beforeend', html);
if (options.direction) {
const newContent = container.querySelector('.content');
if (newContent) {
newContent.classList.remove('slide-next', 'slide-prev');
newContent.classList.add(options.direction === 'next' ? 'slide-next' : 'slide-prev');
}
const newEls = container.querySelectorAll('.content, ._204863, .item_title');
newEls.forEach(el => {
el.classList.remove('slide-next', 'slide-prev', 'slide-out-left', 'slide-out-right');
el.classList.add(options.direction === 'next' ? 'slide-next' : 'slide-prev');
});
}
// Note: Prefetching video src immediately after DOM injection has been removed
@@ -4616,11 +4623,11 @@ window.cancelAnimFrame = (function () {
const direction = isNext ? 'next' : (isPrev ? 'prev' : null);
if (direction) {
const curContent = document.querySelector('.content');
if (curContent) {
curContent.classList.remove('slide-out-left', 'slide-out-right', 'slide-next', 'slide-prev');
curContent.classList.add(direction === 'next' ? 'slide-out-left' : 'slide-out-right');
}
const outEls = document.querySelectorAll('.content, ._204863, .item_title');
outEls.forEach(el => {
el.classList.remove('slide-out-left', 'slide-out-right', 'slide-next', 'slide-prev');
el.classList.add(direction === 'next' ? 'slide-out-left' : 'slide-out-right');
});
}
if (link.href.match(/\/p\/\d+/) || link.href.match(/[?&]page=\d+/)) {
@@ -5341,22 +5348,47 @@ window.cancelAnimFrame = (function () {
// </keybindings>
// <wheeler>
let lastNavWheelTime = 0;
const wheelEventListener = function (event) {
// User preference: enabled wheel navigation
if (localStorage.getItem('wheelNavEnabled') !== 'true') return;
// Block interaction if content warning is visible
const cwModal = document.getElementById('content-warning-modal');
if (cwModal && cwModal.style.display !== 'none') return;
if (event.target.closest('.media-object') && !event.target.closest('#favs')) {
event.preventDefault(); // Prevent default scroll
if (event.deltaY < 0) {
const el = document.getElementById('prev');
if (el && el.href && !el.href.endsWith('#')) el.click();
} else if (event.deltaY > 0) {
const el = document.getElementById('next');
if (el && el.href && !el.href.endsWith('#')) el.click();
// Block if image modal / lightbox is open
const imageModal = document.getElementById('image-modal');
if (imageModal && imageModal.classList.contains('visible')) return;
const navBtn = event.target.closest('.nav-next, .nav-prev');
const isNavHover = !!navBtn;
const isMediaHover = !isNavHover && !!event.target.closest('.media-object') && !event.target.closest('#favs');
// For media-object, user preference 'wheelNavEnabled' must be enabled.
// For .nav-next / .nav-prev, scrolling always triggers next/prev navigation directly.
if (!isNavHover && (!isMediaHover || localStorage.getItem('wheelNavEnabled') !== 'true')) {
return;
}
// Always prevent default page scroll when scrolling over nav-next / nav-prev or media
event.preventDefault();
// Prevent rapid multi-firing while navigating or during throttle cooldown
const now = Date.now();
if (isNavigating || now - lastNavWheelTime < 250) return;
const delta = Math.abs(event.deltaY) >= Math.abs(event.deltaX) ? event.deltaY : event.deltaX;
if (delta === 0) return;
if (delta < 0) {
const el = document.querySelector("#prev:not([href='#']), .nav-prev:not([href='#'])") || document.getElementById('prev') || document.querySelector('.nav-prev');
if (el && el.href && !el.href.endsWith('#')) {
lastNavWheelTime = now;
el.click();
}
} else if (delta > 0) {
const el = document.querySelector("#next:not([href='#']), .nav-next:not([href='#'])") || document.getElementById('next') || document.querySelector('.nav-next');
if (el && el.href && !el.href.endsWith('#')) {
lastNavWheelTime = now;
el.click();
}
}
};