const m = require('mithril') const Authentication = require('./authentication') const AdminResolver = require('./admin_loader') const Header = require('./header') const Footer = require('./footer') const Login = require('./site_login') const SitePage = require('./site_page') const SiteArticle = require('./site_article') window.m = m m.route.setOrig = m.route.set m.route.set = function(path, data, options){ m.route.setOrig(path, data, options) window.scrollTo(0, 0) } m.route.linkOrig = m.route.link m.route.link = function(vnode){ m.route.linkOrig(vnode) window.scrollTo(0, 0) } m.route.prefix = '' const allRoutes = { '/': SitePage, // Frontpage '/login': Login, '/page/:id': SitePage, '/article/:id': SiteArticle, '/admin/:path': AdminResolver, '/admin/:path/:id': AdminResolver, } // Wait until we finish checking avif support, some views render immediately and will ask for this immediately before the callback gets called. /* * imgsupport.js from leechy/imgsupport */ const AVIF = new Image(); AVIF.onload = AVIF.onerror = function () { window.supportsavif = (AVIF.height === 2) document.body.className = document.body.className + ' ' + (window.supportsavif ? 'avifsupport' : 'jpegonly') m.mount(document.getElementById('header'), Header) m.route(document.getElementById('main'), '/', allRoutes) m.mount(document.getElementById('footer'), Footer) } AVIF.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=';