Fix directory bug in rotating /database.logjson
[ndcode_site.git] / page.jst
1 let XDate = require('xdate')
2 let cookie = require('cookie')
3 let crypto = require('crypto')
4
5 return async (env, head, body, scripts) => {
6   let favicons = await env.site.get_min_html('/_favicon/favicons.html')
7   let globals = await env.site.get_json('/_config/globals.json')
8   let session_cookie = await _require('/session_cookie.jst')
9
10   // initialize env.session_key, set cookie in env.response
11   let transaction = env.site.database.Transaction()
12   let session = await session_cookie(env, transaction)
13
14   let pageview = await (
15     await (
16       await transaction.get({})
17     ).get('pageviews', {})
18   ).get(env.parsed_url.pathname, {})
19   pageview.set('visits', (await pageview.get('visits') || 0) + 1)
20
21   let session_pageviews = await session.get('pageviews', {})
22   let i = await session_pageviews.get(env.parsed_url.pathname)
23   if (i === undefined) {
24     pageview.set(
25       'unique_visits',
26       (await pageview.get('unique_visits') || 0) + 1
27     )
28     i = 0
29   }
30   session_pageviews.set(env.parsed_url.pathname, i + 1)
31
32   await transaction.commit()
33
34   let _out = []
35   _out.push('<!DOCTYPE html>')
36   html(lang="en") {
37     head {
38       meta(charset="utf-8") {}
39       meta(http-equiv="X-UA-Compatible" content="IE=edge") {}
40       meta(name="viewport" content="width=device-width,initial-scale=1") {}
41       // The above 3 meta tags *must* come first in the head;
42       // any other head content must come *after* these tags
43   
44       link(rel="stylesheet" href="/css/bootstrap.css") {}
45       link(rel="stylesheet" href="//fonts.googleapis.com/css?family=Frank+Ruhl+Libre:regular,regularitalic,semibold,semibolditalic,bold,bolditalic,black,blackitalic") {}
46       link(rel="stylesheet" href="//fonts.googleapis.com/css?family=Nunito+Sans:regular,regularitalic,semibold,semibolditalic,bold,bolditalic,black,blackitalic") {}
47   
48       await head(_out)
49
50       // HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries
51       // WARNING: Respond.js doesn't work if you view the page via file://
52       _out.push('<!--[if lt IE 9]>')
53       script(src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js") {}
54       script(src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js") {}
55       _out.push('<![endif]-->')
56
57       // use favicon generator website to get favicons.zip and favicons.html
58       _out.push(favicons)
59     }
60     body {
61       await body(_out)
62   
63       // jQuery (necessary for Bootstrap's JavaScript plugins)
64       script(src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js") {}
65       // Include all compiled plugins (below), or include individual files as needed
66       //script(src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous") {}
67       script(src="/js/bootstrap.js") {}
68
69       await scripts(_out)
70     }
71   }
72   env.site.serve(env, 200, Buffer.from(_out.join('')), 'page.jst')
73 }