diff --git a/routes.php b/routes.php index c9bfbb25..06423559 100644 --- a/routes.php +++ b/routes.php @@ -4,4 +4,5 @@ use Misuzu\Controllers\HomeController; return [ Route::get('/', 'index', HomeController::class), + Route::get('/is_ready', 'isReady', HomeController::class), ]; diff --git a/src/Application.php b/src/Application.php index cca6f444..613d3d25 100644 --- a/src/Application.php +++ b/src/Application.php @@ -58,21 +58,23 @@ class Application throw new \Exception('Invalid property.'); } - protected function __construct($config = null) + protected function __construct($configFile = null) { ExceptionHandler::register(); - $this->addModule('router', new RouteCollection); - $this->addModule('templating', new TemplateEngine); - $this->addModule('config', new ConfigManager($config)); + $this->addModule('router', $router = new RouteCollection); + $this->addModule('templating', $twig = new TemplateEngine); + $this->addModule('config', $config = new ConfigManager($configFile)); - $this->templating->addFilter('json_decode'); - $this->templating->addFilter('byte_symbol'); - $this->templating->addFunction('byte_symbol'); - $this->templating->addFunction('session_id'); - $this->templating->addFunction('config', [$this->config, 'get']); - $this->templating->addFunction('route', [$this->router, 'url']); - $this->templating->addPath('nova', __DIR__ . '/../views/nova'); + $twig->addFilter('json_decode'); + $twig->addFilter('byte_symbol'); + $twig->addFunction('byte_symbol'); + $twig->addFunction('session_id'); + $twig->addFunction('config', [$config, 'get']); + $twig->addFunction('route', [$router, 'url']); + $twig->addFunction('git_hash', [Application::class, 'gitCommitHash']); + $twig->addFunction('git_branch', [Application::class, 'gitBranch']); + $twig->addPath('nova', __DIR__ . '/../views/nova'); } public function __destruct() diff --git a/src/Controllers/HomeController.php b/src/Controllers/HomeController.php index fe502c1f..5222a5ff 100644 --- a/src/Controllers/HomeController.php +++ b/src/Controllers/HomeController.php @@ -9,9 +9,11 @@ class HomeController extends Controller { $twig = Application::getInstance()->templating; - $twig->addFunction('git_hash', [Application::class, 'gitCommitHash']); - $twig->addFunction('git_branch', [Application::class, 'gitBranch']); - return $twig->render('home.landing'); } + + public function isReady(): string + { + return 'no'; + } } diff --git a/views/nova/home/landing.twig b/views/nova/home/landing.twig index ebfc2e13..a4e32857 100644 --- a/views/nova/home/landing.twig +++ b/views/nova/home/landing.twig @@ -57,7 +57,10 @@ countdownFlashingTicks = 0, countdownLastString = '', countdownFinish, - countdownIgnoreHidden = false; + countdownIgnoreHidden = false, + continueChecking = true, + checkClient = null, + checkTimeout; function countdownSetup(container, target, finish) { countdownFinish = finish || null; @@ -170,11 +173,32 @@ countdownDigits[i].setAttribute('data-digit', str[i]); } - window.onload = function () { + function checkIfFlashiiReady(continuous) { + continueChecking = !(!continuous); + + if (checkClient === null) { + checkClient = new XMLHttpRequest(); + + checkClient.addEventListener('readystatechange', function () { + if (checkClient.readyState === 4 && (checkClient.status !== 200 || checkClient.responseText !== 'no')) + location.reload(true); + }); + } + + checkClient.open('GET', '/is_ready?' + Date.now(), true); + checkClient.send(); + + if (continueChecking) + checkTimeout = setTimeout(function () { checkIfFlashiiReady(continueChecking); }, 1000); + } + + window.addEventListener("load", function () { var container = document.createElement('div'); container.className = 'countdown-container'; document.getElementById('countdown').appendChild(container); - countdownSetup(container, new Date("Mon, 1 27 2018 1:00:00 +0100")); - } + countdownSetup(container, new Date("Mon, 1 27 2018 1:00:00 +0100"), function () { + checkIfFlashiiReady(true); + }); + }); {% endblock %}