let XDate = require('xdate') let cookie = require('cookie') let crypto = require('crypto') return async (env, head, body, scripts) => { let favicons = await env.site.get_min_html('/_favicon/favicons.html') let globals = await env.site.get_json('/_config/globals.json') let session_cookie = await _require('/session_cookie.jst') // initialize env.session_key, set cookie in env.response let transaction = env.site.database.Transaction() let session = await session_cookie(env, transaction) let pageview = await ( await ( await transaction.get({}) ).get('pageviews', {}) ).get(env.parsed_url.pathname, {}) pageview.set('visits', (await pageview.get('visits') || 0) + 1) let session_pageviews = await session.get('pageviews', {}) let i = await session_pageviews.get(env.parsed_url.pathname) if (i === undefined) { pageview.set( 'unique_visits', (await pageview.get('unique_visits') || 0) + 1 ) i = 0 } session_pageviews.set(env.parsed_url.pathname, i + 1) await transaction.commit() let _out = [] _out.push('') html(lang="en") { head { meta(charset="utf-8") {} meta(http-equiv="X-UA-Compatible" content="IE=edge") {} meta(name="viewport" content="width=device-width,initial-scale=1") {} // The above 3 meta tags *must* come first in the head; // any other head content must come *after* these tags link(rel="stylesheet" href="/css/bootstrap.css") {} link(rel="stylesheet" href="//fonts.googleapis.com/css?family=Frank+Ruhl+Libre:regular,regularitalic,semibold,semibolditalic,bold,bolditalic,black,blackitalic") {} link(rel="stylesheet" href="//fonts.googleapis.com/css?family=Nunito+Sans:regular,regularitalic,semibold,semibolditalic,bold,bolditalic,black,blackitalic") {} await head(_out) // HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries // WARNING: Respond.js doesn't work if you view the page via file:// _out.push('') // use favicon generator website to get favicons.zip and favicons.html _out.push(favicons) } body { await body(_out) // jQuery (necessary for Bootstrap's JavaScript plugins) script(src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js") {} // Include all compiled plugins (below), or include individual files as needed //script(src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous") {} script(src="/js/bootstrap.js") {} await scripts(_out) } } env.site.serve(env, 200, Buffer.from(_out.join('')), 'page.jst') }