<!doctype HTML> <html> <head> <title>twitch.tforgione.fr</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/ico" href="/favicon.ico"/> <link href="css/video-js.css" rel="stylesheet"> <link href="css/spinner.css" rel="stylesheet"> </head> <body> <div id="container"></div> <script src="js/vd.js"></script> <script src="js/main.js"></script> <script> function isDarkMode(e) { var darkMode = JSON.parse(localStorage.getItem('darkMode')); if (darkMode === null) { if (e === undefined) { e = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)'); } darkMode = e.matches === true; } return darkMode; } var app = Elm.Main.init({ node: document.getElementById('container'), flags: { width: window.innerWidth, height: window.innerHeight, darkMode: isDarkMode(), darkSetting: JSON.parse(localStorage.getItem('darkMode')) } }); var lastId, player; if (app.ports !== undefined) { if (app.ports.registerVideo !== undefined) { app.ports.registerVideo.subscribe(function(args) { window.scrollTo(0, 0); var time = vd.parseTime(args[2]) || undefined; requestAnimationFrame(function() { if (args[0] !== lastId) { lastId = args[0]; player = vd.setup(args[0], { v: args[1] + "/manifest.m3u8", t: time, focus: true }); } else if (time !== undefined ){ player.currentTime(time); } }); }); } if (app.ports.setDarkMode !== undefined) { app.ports.setDarkMode.subscribe(function(arg) { if (arg === null) { localStorage.removeItem('darkMode'); } else { localStorage.setItem('darkMode', arg); } app.ports.darkMode.send(isDarkMode()); }); } } if (app.ports !== undefined) { if (app.ports.eraseVideo !== undefined) { app.ports.eraseVideo.subscribe(function() { window.scrollTo(0, 0); lastId = undefined; }); } window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) { app.ports.darkMode.send(isDarkMode(e)); }); } </script> </body> </html>