i tired
This commit is contained in:
BIN
__pycache__/app.cpython-312.pyc
Normal file
BIN
__pycache__/app.cpython-312.pyc
Normal file
Binary file not shown.
@@ -253,13 +253,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* RX watch button states */
|
/* RX watch button states */
|
||||||
|
|
||||||
.hero-watch-btn.rx-rated {
|
.hero-watch-btn.rx-rated {
|
||||||
transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94),
|
transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94),
|
||||||
background-color 0.15s ease;
|
background-color 0.15s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hero-watch-btn.rx-rated:hover {
|
.hero-watch-btn.rx-rated:hover {
|
||||||
cursor: not-allowed;
|
cursor: not-allowed !important; /* The "no selection" cursor */
|
||||||
background-color: #c0392b;
|
background-color: #ff9500;
|
||||||
box-shadow: 0 10px 30px rgba(192, 57, 43, 0.5);
|
box-shadow: 0 10px 30px rgba(192, 57, 43, 0.5);
|
||||||
transform: translateY(-3px) scale(1.02);
|
transform: translateY(-3px) scale(1.02);
|
||||||
}
|
}
|
||||||
@@ -1270,20 +1272,11 @@
|
|||||||
<!-- RX Gate Modal -->
|
<!-- RX Gate Modal -->
|
||||||
<div id="rx-gate-overlay" class="rx-gate-overlay">
|
<div id="rx-gate-overlay" class="rx-gate-overlay">
|
||||||
<div class="rx-gate-card">
|
<div class="rx-gate-card">
|
||||||
<span class="rx-gate-icon">🔞</span>
|
<div class="rx-gate-badge">You know, I really thought you would do better</div>
|
||||||
<div class="rx-gate-badge">Rated Rx — Explicit Content</div>
|
|
||||||
<h2 class="rx-gate-title">Are you sure about this?</h2>
|
<h2 class="rx-gate-title">Are you sure about this?</h2>
|
||||||
<p class="rx-gate-subtitle">
|
|
||||||
This series has been rated <strong>Rx</strong> and contains explicit adult content.
|
|
||||||
Are you absolutely certain you want to proceed?
|
|
||||||
</p>
|
|
||||||
<div class="rx-gate-actions">
|
<div class="rx-gate-actions">
|
||||||
<button class="rx-gate-btn-yes" id="rx-gate-yes">Yes, I'm sure</button>
|
<button class="rx-gate-btn-yes" id="rx-gate-yes">Yes, I'm sure</button>
|
||||||
<button class="rx-gate-btn-no" id="rx-gate-no">No, take me back</button>
|
|
||||||
</div>
|
</div>
|
||||||
<p class="rx-gate-disclaimer">
|
|
||||||
By continuing you confirm you are of legal age to view adult content in your region.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1824,84 +1817,98 @@
|
|||||||
let lastEp = 0;
|
let lastEp = 0;
|
||||||
Object.keys(hist).forEach((k) => { if (parseInt(k) > lastEp) lastEp = parseInt(k); });
|
Object.keys(hist).forEach((k) => { if (parseInt(k) > lastEp) lastEp = parseInt(k); });
|
||||||
|
|
||||||
|
// Determine standard text
|
||||||
|
let btnContent = "";
|
||||||
|
let targetEp = 1;
|
||||||
|
|
||||||
if (mode === "Movie") {
|
if (mode === "Movie") {
|
||||||
|
targetEp = 1;
|
||||||
const hasWatched = lastEp === 1;
|
const hasWatched = lastEp === 1;
|
||||||
btn.innerHTML = hasWatched ? `<i class="fas fa-play"></i> Resume Movie` : `<i class="fas fa-film"></i> Watch Movie`;
|
btnContent = hasWatched ? `<i class="fas fa-play"></i> Resume Movie` : `<i class="fas fa-film"></i> Watch Movie`;
|
||||||
btn.onclick = (e) => handleWatchClick(e, 1);
|
|
||||||
} else {
|
} else {
|
||||||
let target = lastEp > 0 ? lastEp : 1;
|
targetEp = lastEp > 0 ? lastEp : 1;
|
||||||
if (hist[target]?.state === "finished") target++;
|
if (hist[targetEp]?.state === "finished") targetEp++;
|
||||||
const exists = episodesData.find((e) => e.attributes.number === target);
|
const exists = episodesData.find((e) => e.attributes.number === targetEp);
|
||||||
|
|
||||||
if (!exists && lastEp > 0) {
|
if (!exists && lastEp > 0) {
|
||||||
target = 1;
|
targetEp = 1;
|
||||||
btn.innerHTML = `<i class="fas fa-rotate-right"></i> Re-watch`;
|
btnContent = `<i class="fas fa-rotate-right"></i> Re-watch`;
|
||||||
} else {
|
} else {
|
||||||
btn.innerHTML = `<i class="fas fa-play"></i> ${lastEp > 0 ? "Continue" : "Start"} EP ${target}`;
|
btnContent = `<i class="fas fa-play"></i> ${lastEp > 0 ? "Continue" : "Start"} EP ${targetEp}`;
|
||||||
}
|
}
|
||||||
btn.onclick = (e) => handleWatchClick(e, target);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply/remove RX styling and hover behavior
|
btn.innerHTML = btnContent;
|
||||||
if (isRxRated) {
|
btn.onclick = (e) => handleWatchClick(e, targetEp);
|
||||||
|
|
||||||
|
// Apply RX logic if needed
|
||||||
|
if (isRxRated && !rxGateAccepted) {
|
||||||
btn.classList.add("rx-rated");
|
btn.classList.add("rx-rated");
|
||||||
attachRxHoverBehavior(btn);
|
attachRxHoverBehavior(btn, btnContent);
|
||||||
} else {
|
} else {
|
||||||
btn.classList.remove("rx-rated");
|
btn.classList.remove("rx-rated");
|
||||||
detachRxHoverBehavior(btn);
|
detachRxHoverBehavior(btn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- RX watch button hover handlers ----
|
function attachRxHoverBehavior(btn, originalHTML) {
|
||||||
function attachRxHoverBehavior(btn) {
|
|
||||||
// Avoid double-attaching
|
|
||||||
if (btn._rxHoverAttached) return;
|
if (btn._rxHoverAttached) return;
|
||||||
btn._rxHoverAttached = true;
|
btn._rxHoverAttached = true;
|
||||||
|
btn._rxOriginalHTML = originalHTML;
|
||||||
|
|
||||||
btn._rxMouseEnter = () => {
|
btn._rxMouseEnter = () => {
|
||||||
// Save the current inner HTML so we can restore it on mouse leave
|
// Only change text if they haven't accepted the gate yet
|
||||||
btn._rxOriginalHTML = btn.innerHTML;
|
if (!rxGateAccepted) {
|
||||||
btn.innerHTML = `<i class="fas fa-ban"></i> Really... I'm Disappointed`;
|
btn.innerHTML = `<i class="fas fa-ban"></i> Really... I'm Disappointed`;
|
||||||
};
|
|
||||||
btn._rxMouseLeave = () => {
|
|
||||||
if (btn._rxOriginalHTML !== undefined) {
|
|
||||||
btn.innerHTML = btn._rxOriginalHTML;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
btn._rxMouseLeave = () => {
|
||||||
|
btn.innerHTML = btn._rxOriginalHTML;
|
||||||
|
};
|
||||||
|
|
||||||
btn.addEventListener("mouseenter", btn._rxMouseEnter);
|
btn.addEventListener("mouseenter", btn._rxMouseEnter);
|
||||||
btn.addEventListener("mouseleave", btn._rxMouseLeave);
|
btn.addEventListener("mouseleave", btn._rxMouseLeave);
|
||||||
}
|
}
|
||||||
|
|
||||||
function detachRxHoverBehavior(btn) {
|
|
||||||
if (!btn._rxHoverAttached) return;
|
|
||||||
btn.removeEventListener("mouseenter", btn._rxMouseEnter);
|
|
||||||
btn.removeEventListener("mouseleave", btn._rxMouseLeave);
|
|
||||||
btn._rxHoverAttached = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- Unified watch click handler ----
|
|
||||||
function handleWatchClick(e, ep) {
|
function handleWatchClick(e, ep) {
|
||||||
if (isRxRated && !rxGateAccepted) {
|
// 1. SECRET BYPASS: Shift + Click
|
||||||
// Shift+click silently bypasses the gate — no mention of this anywhere
|
|
||||||
if (e.shiftKey) {
|
if (e.shiftKey) {
|
||||||
|
console.log("Bypassing gate via shift-click...");
|
||||||
rxGateAccepted = true;
|
rxGateAccepted = true;
|
||||||
|
dismissRxGate();
|
||||||
|
detachRxHoverBehavior(document.getElementById("hero-watch-btn"));
|
||||||
openPlayer(ep);
|
openPlayer(ep);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2. STANDARD RX GATE
|
||||||
|
if (isRxRated && !rxGateAccepted) {
|
||||||
showRxGate();
|
showRxGate();
|
||||||
// After user accepts the gate, clicking the button again will open the player
|
|
||||||
// We re-wire the button's onclick after acceptance so the next click goes straight through
|
// Wire up the modal's "Yes" button to actually open the player
|
||||||
const originalOnClick = document.getElementById("hero-watch-btn").onclick;
|
|
||||||
document.getElementById("rx-gate-yes").onclick = () => {
|
document.getElementById("rx-gate-yes").onclick = () => {
|
||||||
rxGateAccepted = true;
|
rxGateAccepted = true;
|
||||||
dismissRxGate();
|
dismissRxGate();
|
||||||
|
// Remove the "disappointed" hover effect now that they've admitted it
|
||||||
|
detachRxHoverBehavior(document.getElementById("hero-watch-btn"));
|
||||||
openPlayer(ep);
|
openPlayer(ep);
|
||||||
};
|
};
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3. NORMAL PLAY
|
||||||
openPlayer(ep);
|
openPlayer(ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function detachRxHoverBehavior(btn) {
|
||||||
|
if (!btn || !btn._rxHoverAttached) return;
|
||||||
|
btn.removeEventListener("mouseenter", btn._rxMouseEnter);
|
||||||
|
btn.removeEventListener("mouseleave", btn._rxMouseLeave);
|
||||||
|
btn.classList.remove("rx-rated");
|
||||||
|
btn._rxHoverAttached = false;
|
||||||
|
}
|
||||||
|
|
||||||
function openPlayer(ep) {
|
function openPlayer(ep) {
|
||||||
const url = `view.html?id=${currentMalId}&ep=${ep}`;
|
const url = `view.html?id=${currentMalId}&ep=${ep}`;
|
||||||
const popup = document.getElementById("episode-popup-overlay");
|
const popup = document.getElementById("episode-popup-overlay");
|
||||||
|
|||||||
1
data/cache/generic/7179c22a927a04ed4f527acc2cfcffc7.json
vendored
Normal file
1
data/cache/generic/7179c22a927a04ed4f527acc2cfcffc7.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"payload": {"entries": [{"anilist_id": 113417, "mal_id": 40746, "title_romaji": "Overflow", "title_english": "Overflow", "title_native": "\u304a\u30fc\u3070\u30fc\u3075\u308d\u3049", "format": "ONA", "start_date": {"year": 2020, "month": 1, "day": 6}, "season": "WINTER", "season_year": 2020, "episodes": 8, "relation_type_from_parent": null, "inferred_part": null, "is_season": false, "is_final_from_title": false, "title_display": "Overflow", "_start_tuple": [2020, 1, 6], "is_final_season": false}], "season_groups": [], "extras": [{"title": "Overflow", "mal_id": 40746, "anilist_id": 113417, "format": "ONA", "start_date": {"year": 2020, "month": 1, "day": 6}}]}, "_timestamp": 1774963942.841442}
|
||||||
Reference in New Issue
Block a user