Skip to content

Instantly share code, notes, and snippets.

@cmnstmntmn
Created August 7, 2018 11:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cmnstmntmn/a59ca5604ca9a8417ab2f46d55da0798 to your computer and use it in GitHub Desktop.
Save cmnstmntmn/a59ca5604ca9a8417ab2f46d55da0798 to your computer and use it in GitHub Desktop.
MithrilJS base app with routes, auth and layout
var isLoggedIn = false;
m.route.prefix('')
//-- pages
var home = {
view: () => m('p', 'Home')
}
var some = {
view: () => [
m('p', 'Some other page')
]
}
var login = {
view: () => m('button', {onclick: () => {
isLoggedIn = true
m.route.set("/")
}}, 'Login')
}
// -- layout
var layout = {
view: (vnode) => m('.wrapper',
m('nav',
m('a[href=/]', {oncreate: m.route.link}, 'Home'),
m('a[href=/some]', {oncreate: m.route.link}, 'Some')
),
vnode.children,
m('hr'),
m('button', {onclick: () => {
isLoggedIn = false
m.route.set("/login")
}}, 'Logout')
)
}
// -- helpers
function checkAuth() {
if(!isLoggedIn) m.route.set("/login")
}
function baseView(page) {
return () => {
return m(layout, m(page))
}
}
function needsAuth(page) {
return {
onmatch: checkAuth,
render: page
}
}
// -- router
const routes = {
'/': needsAuth(baseView(home)),
'/some': needsAuth(baseView(some)),
'/login' : login
}
// -- mount it
m.route(document.body, '/', routes)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment