Updates the Google Publisher ID from a placeholder to the actual ID '4465464714854276' in client/index.html and client/public/ads.txt, enabling Google AdSense functionality. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 946a0075-7e32-454b-b348-9e7f576d7f45 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/60d372ff-2c10-46c7-b01b-10c3435136b0/946a0075-7e32-454b-b348-9e7f576d7f45/ZQfqCPf
218 lines
10 KiB
HTML
218 lines
10 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no, viewport-fit=cover" />
|
||
<title>video.folx.tv – FOLX.TV Video Platform</title>
|
||
|
||
<!-- Google Consent Management Platform -->
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
gtag('consent', 'default', {
|
||
'ad_storage': 'denied',
|
||
'analytics_storage': 'denied',
|
||
'ad_user_data': 'denied',
|
||
'ad_personalization': 'denied'
|
||
});
|
||
</script>
|
||
<script async src="https://fundingchoicesmessages.google.com/i/pub-4465464714854276?ers=1" nonce="temp-nonce"></script>
|
||
<script nonce="temp-nonce">(function() {function signalGooglefcPresent() {if (!window.frames['googlefcPresent']) {if (document.body) {const iframe = document.createElement('iframe'); iframe.style = 'width: 0; height: 0; border: none; z-index: -1000; left: -1000px; top: -1000px;'; iframe.style.display = 'none'; iframe.name = 'googlefcPresent'; document.body.appendChild(iframe);} else {setTimeout(signalGooglefcPresent, 0);}}}signalGooglefcPresent();})();</script>
|
||
<meta name="description" content="FOLX.TV Video Platform – Amazing Content" />
|
||
|
||
<!-- Google Search Console verification -->
|
||
<meta name="google-site-verification" content="YcRvFNGnAbAnlhQvhODVJOaqHLVdOKnpCqk7oH-xeKE" />
|
||
|
||
<!-- Open Graph meta podatki za družbena omrežja in mobilne aplikacije -->
|
||
<meta property="og:title" content="video.folx.tv – FOLX.TV Video Platform" />
|
||
<meta property="og:description" content="FOLX.TV Video Platform – Amazing Content" />
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:site_name" content="video.folx.tv" />
|
||
<meta property="og:locale" content="de_DE" />
|
||
<meta property="og:url" id="og-url" content="https://video.folx.tv/" />
|
||
<meta property="og:image" id="og-image" content="https://video.folx.tv/api/social-image" />
|
||
<meta property="og:image:width" content="1200" />
|
||
<meta property="og:image:height" content="630" />
|
||
<meta property="og:image:type" content="image/png" />
|
||
<meta property="og:image:alt" content="video.folx.tv – FOLX.TV Video Platform" />
|
||
|
||
<!-- Twitter Card meta podatki -->
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<meta name="twitter:site" content="@folxtv" />
|
||
<meta name="twitter:title" content="video.folx.tv – FOLX.TV Video Platform" />
|
||
<meta name="twitter:description" content="FOLX.TV Video Platform – Amazing Content" />
|
||
<meta name="twitter:image" id="twitter-image" content="https://video.folx.tv/api/social-image" />
|
||
<meta name="twitter:image:alt" content="video.folx.tv – FOLX.TV Video Platform" />
|
||
|
||
<!-- WhatsApp/Viber specifične oznake -->
|
||
<meta property="og:image:secure_url" id="og-image-secure" content="https://video.folx.tv/api/social-image" />
|
||
<meta name="format-detection" content="telephone=no" />
|
||
<meta name="robots" content="index, follow" />
|
||
|
||
<!-- Dodatni meta podatki za mobilne naprave -->
|
||
<meta name="application-name" content="video.folx.tv" />
|
||
<meta name="apple-mobile-web-app-title" content="FOLX.TV" />
|
||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||
<meta name="theme-color" content="#6366f1" />
|
||
<meta name="mobile-web-app-capable" content="yes" />
|
||
|
||
<!-- iOS specifične meta oznake -->
|
||
<meta name="apple-touch-fullscreen" content="yes" />
|
||
<meta name="format-detection" content="telephone=no" />
|
||
|
||
<!-- iOS ikone za različne velikosti -->
|
||
<link rel="apple-touch-icon" sizes="57x57" href="/api/favicon?size=57&format=png" />
|
||
<link rel="apple-touch-icon" sizes="60x60" href="/api/favicon?size=60&format=png" />
|
||
<link rel="apple-touch-icon" sizes="72x72" href="/api/favicon?size=72&format=png" />
|
||
<link rel="apple-touch-icon" sizes="76x76" href="/api/favicon?size=76&format=png" />
|
||
<link rel="apple-touch-icon" sizes="114x114" href="/api/favicon?size=114&format=png" />
|
||
<link rel="apple-touch-icon" sizes="120x120" href="/api/favicon?size=120&format=png" />
|
||
<link rel="apple-touch-icon" sizes="144x144" href="/api/favicon?size=144&format=png" />
|
||
<link rel="apple-touch-icon" sizes="152x152" href="/api/favicon?size=152&format=png" />
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/api/favicon?size=180&format=png" />
|
||
|
||
<!-- Favicon -->
|
||
<link rel="icon" type="image/svg+xml" href="/api/favicon" />
|
||
<link rel="apple-touch-icon" href="/api/favicon?size=180&format=png" />
|
||
<link rel="manifest" href="/manifest.json" />
|
||
|
||
<!-- Google AdSense -->
|
||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4465464714854276" crossorigin="anonymous"></script>
|
||
|
||
<!-- Google tag (gtag.js) - Analytics -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NNV14K77K3"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-NNV14K77K3');
|
||
</script>
|
||
|
||
</head>
|
||
<body>
|
||
<div id="root">
|
||
<!-- Preloader to prevent white screen -->
|
||
<div id="app-preloader" style="
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: linear-gradient(135deg, hsl(220, 13%, 9%) 0%, hsl(220, 13%, 12%) 100%);
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
z-index: 9999;
|
||
font-family: 'Poppins', 'Inter', Arial, sans-serif;
|
||
">
|
||
<div style="text-align: center; color: white;">
|
||
<div style="
|
||
width: 50px;
|
||
height: 50px;
|
||
background: linear-gradient(45deg, #ec4c73, #e91e63);
|
||
border-radius: 12px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
margin: 0 auto 20px;
|
||
animation: pulse 2s infinite;
|
||
">
|
||
<div style="
|
||
width: 0;
|
||
height: 0;
|
||
border-left: 16px solid white;
|
||
border-top: 12px solid transparent;
|
||
border-bottom: 12px solid transparent;
|
||
margin-left: 4px;
|
||
"></div>
|
||
</div>
|
||
<h2 style="margin: 0; font-size: 28px; font-weight: 800; letter-spacing: 1px; text-shadow: 2px 2px 8px rgba(0,0,0,0.5);">FOLX.TV</h2>
|
||
<p style="margin: 10px 0 0; opacity: 0.9; font-size: 16px; font-weight: 500;">Amazing Content</p>
|
||
</div>
|
||
</div>
|
||
<style>
|
||
@keyframes pulse {
|
||
0%, 100% { transform: scale(1); }
|
||
50% { transform: scale(1.1); }
|
||
}
|
||
</style>
|
||
</div>
|
||
<script type="module" src="/src/main.tsx" defer></script>
|
||
<link rel="preload" href="/src/main.tsx" as="script" crossorigin>
|
||
<link rel="dns-prefetch" href="//fonts.googleapis.com">
|
||
<link rel="preconnect" href="//fonts.gstatic.com" crossorigin>
|
||
<!-- Replit script removed - caused scrolling issues -->
|
||
|
||
<!-- Dynamic social meta tags update -->
|
||
<script>
|
||
// Set dynamic URLs based on current domain
|
||
const currentOrigin = window.location.origin;
|
||
const socialImageUrl = `${currentOrigin}/api/social-image?v=${Date.now()}`;
|
||
|
||
// Update meta tags with correct URLs
|
||
document.getElementById('og-url').setAttribute('content', currentOrigin + '/');
|
||
document.getElementById('og-image').setAttribute('content', socialImageUrl);
|
||
document.getElementById('twitter-image').setAttribute('content', socialImageUrl);
|
||
document.getElementById('og-image-secure').setAttribute('content', socialImageUrl);
|
||
</script>
|
||
|
||
<!-- Debug script for deployment issues -->
|
||
<script>
|
||
console.log('🚀 video.folx.tv loading...');
|
||
|
||
// Set timeout to detect hanging in Chrome
|
||
let appLoadTimeout = setTimeout(function() {
|
||
console.warn('⚠️ App taking too long to load in Chrome, forcing refresh...');
|
||
const preloader = document.getElementById('app-preloader');
|
||
if (preloader) {
|
||
preloader.innerHTML = '<div style="text-align: center; color: white;"><h2>Loading timeout</h2><p>Refreshing automatically...</p></div>';
|
||
}
|
||
setTimeout(function() {
|
||
location.reload();
|
||
}, 2000);
|
||
}, 8000); // 8 second timeout for Chrome
|
||
|
||
// Global callback for when app loads successfully
|
||
window.appLoaded = function() {
|
||
clearTimeout(appLoadTimeout);
|
||
console.log('⏱️ App load timeout cleared');
|
||
};
|
||
|
||
// Clear any cached service workers
|
||
if ('serviceWorker' in navigator) {
|
||
navigator.serviceWorker.getRegistrations().then(function(registrations) {
|
||
for(let registration of registrations) {
|
||
registration.unregister();
|
||
console.log('🧹 Cleared service worker registration');
|
||
}
|
||
});
|
||
}
|
||
|
||
window.addEventListener('load', function() {
|
||
console.log('✅ Window loaded');
|
||
setTimeout(function() {
|
||
const root = document.getElementById('root');
|
||
const preloader = document.getElementById('app-preloader');
|
||
if (preloader && preloader.style.opacity !== '0') {
|
||
console.error('❌ React app failed to mount - preloader still visible');
|
||
preloader.innerHTML = '<div style="text-align: center; color: white;"><h2>Loading failed</h2><p>Refreshing automatically...</p></div>';
|
||
|
||
// Auto-refresh after 3 seconds
|
||
setTimeout(function() {
|
||
location.reload();
|
||
}, 3000);
|
||
}
|
||
}, 5000);
|
||
});
|
||
|
||
window.addEventListener('error', function(e) {
|
||
console.error('❌ Global error:', e.error);
|
||
});
|
||
|
||
window.addEventListener('unhandledrejection', function(e) {
|
||
console.error('❌ Unhandled promise rejection:', e.reason);
|
||
});
|
||
</script>
|
||
</body>
|
||
</html> |