yes i need i need my samurai

This commit is contained in:
2026-09-11 16:19:52 +02:00
parent d0bae284ec
commit 925913188f
3 changed files with 120 additions and 35 deletions
+71 -22
View File
@@ -1076,6 +1076,23 @@ window.cancelAnimFrame = (function () {
return modal;
};
const openOnaraModal = () => {
const modal = getOrCreateOnaraModal();
if (modal._closeTimeout) {
clearTimeout(modal._closeTimeout);
modal._closeTimeout = null;
}
modal._isClosing = false;
document.body.classList.add('onara-modal-open');
modal.style.display = 'flex';
modal.setAttribute('aria-hidden', 'false');
modal.classList.remove('onara-fade-out');
void modal.offsetWidth; // Force reflow so transition starts reliably
modal.classList.add('onara-fade-in');
return modal;
};
window.openOnaraModal = openOnaraModal;
const updateOnaraActiveItem = (itemid, url) => {
if (!isOnaraActive()) return;
// Clear onara-active from any and all elements to guarantee only 1 item is selected
@@ -1145,7 +1162,9 @@ window.cancelAnimFrame = (function () {
const closeOnaraModal = (options = {}) => {
const modal = document.getElementById('onara-modal');
if (!modal || modal.style.display === 'none') return;
if (!modal || modal.style.display === 'none' || modal._isClosing) return;
modal._isClosing = true;
// Close any auxiliary modals that may be open
const infoModal = document.getElementById('info-modal');
@@ -1159,11 +1178,12 @@ window.cancelAnimFrame = (function () {
if (typeof window.closeImageModal === 'function') window.closeImageModal();
document.body.classList.remove('modal-open');
stopMedia();
const mount = document.getElementById('onara-item-mount');
if (mount) mount.innerHTML = '';
modal.style.display = 'none';
modal.setAttribute('aria-hidden', 'true');
// Pause any playing media immediately
modal.querySelectorAll('video, audio').forEach(el => { try { el.pause(); } catch {} });
// Smooth fade out
modal.classList.remove('onara-fade-in');
modal.classList.add('onara-fade-out');
document.body.classList.remove('onara-modal-open');
// Restore background canvas if needed
@@ -1193,6 +1213,31 @@ window.cancelAnimFrame = (function () {
activeThumb.focus({ preventScroll: true });
} catch {}
}
if (modal._closeTimeout) clearTimeout(modal._closeTimeout);
if (options.immediate) {
stopMedia();
const mount = document.getElementById('onara-item-mount');
if (mount) mount.innerHTML = '';
modal.style.display = 'none';
modal.setAttribute('aria-hidden', 'true');
modal.classList.remove('onara-fade-out', 'onara-fade-in');
modal._isClosing = false;
modal._closeTimeout = null;
return;
}
modal._closeTimeout = setTimeout(() => {
if (!modal._isClosing) return;
stopMedia();
const mount = document.getElementById('onara-item-mount');
if (mount) mount.innerHTML = '';
modal.style.display = 'none';
modal.setAttribute('aria-hidden', 'true');
modal.classList.remove('onara-fade-out');
modal._isClosing = false;
modal._closeTimeout = null;
}, 240);
};
window.closeOnaraModal = closeOnaraModal;
window.isOnaraActive = isOnaraActive;
@@ -1891,11 +1936,7 @@ window.cancelAnimFrame = (function () {
if (!isOnaraActive()) return;
promoteOnaraModals();
if (document.body.classList.contains('onara-modal-open')) {
const modal = document.getElementById('onara-modal');
if (modal) {
modal.style.display = 'flex';
modal.setAttribute('aria-hidden', 'false');
}
const modal = openOnaraModal();
if (!window._onaraReturnUrl) {
window._onaraReturnUrl = getOnaraBaseUrl();
window._onaraReturnTitle = window.f0ckDomain || 'f0ck';
@@ -3767,8 +3808,12 @@ window.cancelAnimFrame = (function () {
const _m = document.getElementById('main');
if (_m) ['height', 'overflow'].forEach(p => _m.style.removeProperty(p));
// Stop all media
document.querySelectorAll('video:not(#gchat-messages video), audio:not(#gchat-messages audio)').forEach(el => { try { el.pause(); el.removeAttribute('src'); el.load(); } catch {} });
document.querySelectorAll('ruffle-player').forEach(el => { try { el.remove(); } catch {} });
if (options.direction) {
document.querySelectorAll('video:not(#gchat-messages video), audio:not(#gchat-messages audio)').forEach(el => { try { el.pause(); } catch {} });
} else {
document.querySelectorAll('video:not(#gchat-messages video), audio:not(#gchat-messages audio)').forEach(el => { try { el.pause(); el.removeAttribute('src'); el.load(); } catch {} });
document.querySelectorAll('ruffle-player').forEach(el => { try { el.remove(); } catch {} });
}
}
// Dispatch pjax:start so navigation-aware listeners (e.g. metadata modal, image modal) can react
@@ -3789,7 +3834,11 @@ window.cancelAnimFrame = (function () {
// Reverted to native-only
if (!options.keepMedia) {
stopMedia(); // Abort previous media immediately
if (!options.direction) {
stopMedia(); // Abort previous media immediately if not sliding out
} else {
document.querySelectorAll('video:not(#gchat-messages video), audio:not(#gchat-messages audio)').forEach(el => { try { el.pause(); } catch {} });
}
// Fade out background canvas for smooth transition
const canvas = document.getElementById('bg');
@@ -3958,12 +4007,10 @@ window.cancelAnimFrame = (function () {
let _container;
if (useOnara) {
const onaraModal = getOrCreateOnaraModal();
const onaraModal = openOnaraModal();
const onaraMount = document.getElementById('onara-item-mount');
document.body.classList.add('onara-modal-open');
onaraModal.style.display = 'flex';
onaraModal.setAttribute('aria-hidden', 'false');
if (!options.keepMedia) {
stopMedia();
onaraMount.innerHTML = '';
}
_container = onaraMount;
@@ -3990,10 +4037,12 @@ window.cancelAnimFrame = (function () {
main.className = 'item-view';
ensureLayoutClass();
if (window.syncNavbarHeight) window.syncNavbarHeight();
stopMedia();
main.innerHTML = '';
_container = main;
}
} else if (_container && !options.keepMedia) {
stopMedia();
_container.innerHTML = '';
_container.removeAttribute('style');
if (main) main.className = 'item-view';
@@ -4142,12 +4191,10 @@ window.cancelAnimFrame = (function () {
let container;
if (useOnara) {
const onaraModal = getOrCreateOnaraModal();
const onaraModal = openOnaraModal();
const onaraMount = document.getElementById('onara-item-mount');
document.body.classList.add('onara-modal-open');
onaraModal.style.display = 'flex';
onaraModal.setAttribute('aria-hidden', 'false');
if (!options.keepMedia) {
stopMedia();
onaraMount.innerHTML = '';
}
container = onaraMount;
@@ -4188,11 +4235,13 @@ window.cancelAnimFrame = (function () {
// Toggle button lives permanently in body via header.html — no creation needed
// HTML goes directly into #main without outdated .container wrapper for New Layout
stopMedia();
main.innerHTML = '';
container = main; // HTML goes directly into #main
}
} else if (container && !options.keepMedia) {
// Already in some kind of item view or compatible layout, just clear it
stopMedia();
container.innerHTML = '';
container.removeAttribute('style'); // Ensure no carry-over styles
if (main) main.className = 'item-view';