mirror of
https://gitlab.com/vyla-entertainment/documentation.git
synced 2026-11-15 06:57:21 -05:00
253 lines
9.7 KiB
HTML
253 lines
9.7 KiB
HTML
<!doctype html>
|
|
<html lang="en-US">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
|
<meta name="robots" content="noindex, nofollow">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Unavailable For Legal Reasons</title>
|
|
<link rel="stylesheet" href="/cdn-cgi/styles/main.css">
|
|
<script>
|
|
(function () {
|
|
const state = {
|
|
errorCode: null,
|
|
rayId: null,
|
|
timestamp: null,
|
|
ip: null
|
|
};
|
|
|
|
function getRayId() {
|
|
const candidates = [
|
|
document.querySelector('[data-ray-id]')?.dataset.rayId,
|
|
document.querySelector('meta[name="cf-ray"]')?.content
|
|
];
|
|
|
|
for (const value of candidates) {
|
|
if (value && /^[a-f0-9-]+$/i.test(value)) {
|
|
return value;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function getTimestamp() {
|
|
const candidates = [
|
|
document.querySelector('[data-timestamp]')?.dataset.timestamp,
|
|
document.querySelector('meta[name="cf-timestamp"]')?.content
|
|
];
|
|
|
|
for (const value of candidates) {
|
|
if (value && !Number.isNaN(Date.parse(value))) {
|
|
return new Date(value);
|
|
}
|
|
}
|
|
|
|
return new Date();
|
|
}
|
|
|
|
function setText(id, value, fallback = 'Unavailable') {
|
|
const element = document.getElementById(id);
|
|
if (element) element.textContent = value || fallback;
|
|
}
|
|
|
|
|
|
function initialize() {
|
|
const heading = document.querySelector('h1');
|
|
const errorMatch = heading?.textContent.match(/\b\d{3}\b/);
|
|
|
|
state.errorCode = errorMatch ? errorMatch[0] : null;
|
|
state.rayId = getRayId();
|
|
state.timestamp = getTimestamp();
|
|
|
|
setText('error-code', state.errorCode, '');
|
|
setText('ray-id', state.rayId);
|
|
setText('timestamp', state.timestamp.toISOString().replace('T', ' ').replace(/\.\d{3}Z$/, ' UTC'));
|
|
|
|
if (!state.errorCode) {
|
|
document.getElementById('error-code').hidden = true;
|
|
}
|
|
|
|
if (!state.rayId) {
|
|
document.getElementById('ray-information').hidden = true;
|
|
}
|
|
|
|
if (document.querySelector('title')) {
|
|
document.title = document.querySelector('h2')?.textContent.trim() || 'Unavailable';
|
|
}
|
|
}
|
|
|
|
async function getVisitorIP() {
|
|
const ipElement = document.getElementById('cf-footer-ip');
|
|
const revealButton = document.getElementById('cf-footer-ip-reveal');
|
|
const container = document.getElementById('cf-footer-item-ip');
|
|
|
|
try {
|
|
const response = await fetch('https://api.ipify.org?format=json', {
|
|
cache: 'no-store'
|
|
});
|
|
|
|
if (!response.ok) throw new Error('IP lookup failed');
|
|
|
|
const data = await response.json();
|
|
|
|
if (!data.ip) throw new Error('IP address unavailable');
|
|
|
|
ipElement.textContent = data.ip;
|
|
ipElement.classList.add('hidden');
|
|
revealButton.hidden = false;
|
|
container.classList.remove('hidden');
|
|
|
|
revealButton.onclick = function () {
|
|
ipElement.classList.remove('hidden');
|
|
revealButton.hidden = true;
|
|
};
|
|
} catch (error) {
|
|
container.classList.add('hidden');
|
|
console.error('Unable to retrieve visitor IP:', error);
|
|
}
|
|
}
|
|
|
|
function sendFeedback(helpful) {
|
|
const survey = document.getElementById('error-feedback-survey');
|
|
const success = document.getElementById('error-feedback-success');
|
|
|
|
if (!survey || !success) return;
|
|
|
|
survey.classList.add('feedback-hidden');
|
|
success.classList.remove('feedback-hidden');
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
initialize();
|
|
getVisitorIP();
|
|
|
|
const feedback = document.getElementById('error-feedback');
|
|
const yes = document.getElementById('feedback-button-yes');
|
|
const no = document.getElementById('feedback-button-no');
|
|
const reveal = document.getElementById('cf-footer-ip-reveal');
|
|
|
|
if (feedback && yes && no && 'classList' in feedback) {
|
|
feedback.classList.remove('feedback-hidden');
|
|
yes.addEventListener('click', () => sendFeedback(true));
|
|
no.addEventListener('click', () => sendFeedback(false));
|
|
}
|
|
|
|
if (reveal) {
|
|
reveal.addEventListener('click', function () {
|
|
reveal.hidden = true;
|
|
document.getElementById('cf-footer-ip').classList.remove('hidden');
|
|
});
|
|
}
|
|
});
|
|
})();
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="cf-wrapper">
|
|
<div class="cf-alert cf-alert-error cf-cookie-error hidden" id="cookie-alert" data-translate="enable_cookies">
|
|
Please enable cookies.
|
|
</div>
|
|
|
|
<div id="cf-error-details" class="p-0">
|
|
<header class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-15 antialiased">
|
|
<h1
|
|
class="inline-block md:block mr-2 md:mb-2 font-light text-60 md:text-3xl text-black-dark leading-tight">
|
|
<span data-translate="error">Error 451</span>
|
|
</h1>
|
|
|
|
|
|
<span id="ray-information"
|
|
class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed">
|
|
Ray ID: <span id="ray-id"></span>
|
|
</span>
|
|
|
|
<span class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed"
|
|
id="timestamp"></span>
|
|
|
|
<h2 class="text-gray-600 leading-1.3 text-3xl lg:text-2xl font-light">
|
|
Unavailable For Legal Reasons
|
|
</h2>
|
|
</header>
|
|
|
|
<section class="w-240 lg:w-full mx-auto mb-8 lg:px-8">
|
|
<div id="what-happened-section" class="w-1/2 md:w-full">
|
|
<h2 class="text-3xl leading-tight font-normal mb-4 text-black-dark antialiased"
|
|
data-translate="what_happened">
|
|
What happened?
|
|
</h2>
|
|
<p>This website is unavailable for legal reasons.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<div class="feedback-hidden py-8 text-center" id="error-feedback">
|
|
<div id="error-feedback-survey" class="footer-line-wrapper">
|
|
Was this page helpful?
|
|
|
|
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded"
|
|
id="feedback-button-yes" type="button">
|
|
Yes
|
|
</button>
|
|
|
|
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded"
|
|
id="feedback-button-no" type="button">
|
|
No
|
|
</button>
|
|
</div>
|
|
|
|
<div class="feedback-success feedback-hidden" id="error-feedback-success">
|
|
Thank you for your feedback!
|
|
</div>
|
|
</div>
|
|
|
|
<div
|
|
class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
|
|
<p class="text-13">
|
|
<span class="cf-footer-item sm:block sm:mb-1">
|
|
Cloudflare Ray ID:
|
|
<strong class="font-semibold" id="footer-ray-id">Unavailable</strong>
|
|
</span>
|
|
|
|
<span class="cf-footer-separator sm:hidden">•</span>
|
|
|
|
<span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
|
|
Your IP:
|
|
|
|
<button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">
|
|
Click to reveal
|
|
</button>
|
|
|
|
<span class="hidden" id="cf-footer-ip"></span>
|
|
</span>
|
|
|
|
<span class="cf-footer-separator sm:hidden">•</span>
|
|
|
|
<span class="cf-footer-item sm:block sm:mb-1">
|
|
<span>Performance & security by</span>
|
|
<a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link"
|
|
target="_blank">
|
|
Cloudflare
|
|
</a>
|
|
</span>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
const ray = document.getElementById('ray-id');
|
|
const footerRay = document.getElementById('footer-ray-id');
|
|
|
|
if (ray && footerRay && ray.textContent.trim()) {
|
|
footerRay.textContent = ray.textContent;
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<div id="ts-blocks" hidden></div>
|
|
</body>
|
|
|
|
</html> |