1 let XDate = require('xdate')
3 return async (env, head, body) => {
4 let feedback_form = await _require('/feedback_form.jst')
5 let globals = await env.site.get_json('/_config/globals.json')
6 let icon_search = await env.site.get_min_svg('/_svg/icon_search.svg')
7 let logo_large = await env.site.get_min_svg('/_svg/logo_large.svg')
8 let page = await _require('/page.jst')
18 (globals.page_to_title[env.parsed_url.pathname] || env.parsed_url.pathname)
26 div(style="padding-left: calc(100vw - 100%);") {
27 div.container(style="margin-top: 15px; margin-bottom: 15px;") {
29 // div.col-sm-12(style="text-align: right;") {
30 // a(href="/login.html") {'Login'}
34 div.'col-sm-8'.vbottom {
37 div.'col-sm-4'.vbottom(style="padding-bottom: 15px;") {
38 form(action="/search.html") {
40 input.form-control(name="query" type="text" placeholder="Search") {}
41 span.input-group-btn {
42 button.btn.btn-default(type="submit") {
43 _out.push(icon_search)
52 nav.navbar.navbar-default(style="margin-top: 0px; margin-bottom: 0px;") {
53 div(style="padding-left: calc(100vw - 100%);") {
54 div.container { //-fluid") {
55 // Brand and toggle get grouped for better mobile display
57 button.navbar-toggle.collapsed(type="button" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false") {
58 span.sr-only {'Toggle navigation'}
63 //a.navbar-brand(href="#") {'Brand'}
66 // Collect the nav links, forms, and other content for toggling
67 div.collapse.navbar-collapse#bs-example-navbar-collapse-1 {
69 let navigation = globals.navigation
70 for (let i = 0; i < navigation.length; ++i) {
71 let page = navigation[i]
72 let title = globals.page_to_title[page] || page
73 if (page === env.parsed_url.pathname)
77 span.sr-only {'(current)'}
82 a(href=page) {`${title}`}
86 ul.nav.navbar-nav.navbar-right {
88 a#give-feedback {'Give feedback'}
95 div(style="padding-left: calc(100vw - 100%);") {
101 div.footer(style="padding-left: calc(100vw - 100%);") {
102 div.container { //-fluid") {
103 div(style="height: 16px;") {}
104 a(rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/") {
105 img(alt="Creative Commons License" style="border-width:0" src="/images/by-sa_3.0_88x31.png") {}
109 a(href="https://git.ndcode.org/public/ndcode_site.git") {
112 ' and licensed under a '
113 a(rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/") {
114 'Creative Commons Attribution-ShareAlike 3.0 Unported License'
119 p {'Code samples within the page are placed in the public domain unless otherwise noted.'}
121 p {`Copyright © ${new XDate().getUTCFullYear()} Integration Logic Pty Ltd trading as NDCODE and contributors.`}
126 div#feedback-modal.modal.fade(role="dialog") {
130 button.close(type="button" data-dismiss="modal") {
139 'Did you notice something not quite right, or just want to share your impression of this page?'
141 await feedback_form(env, _out)
144 button.btn.btn-primary(type="submit" form="feedback-form") {
147 button.btn.btn-default(type="button" data-dismiss="modal") {
155 div#message-modal.modal.fade(role="dialog") {
159 button.close(type="button" data-dismiss="modal") {
167 p#message-modal-message {}
170 button.btn.btn-default(type="button" data-dismiss="modal") {
180 // when feedback form is submitted, do not reload the page
182 $(document).ready(function() {
183 $('#give-feedback').click(function() {
184 $('#feedback-modal').modal('show')
185 $('#feedback-form-message').text('')
187 $('#feedback-modal').on('shown.bs.modal', function() {
188 $('#feedback-form-message').focus()
190 $(document).on('submit', '#feedback-form', function(e) {
193 url: '/feedback.html',
196 page: window.location.href,
197 message: $('#feedback-form-message').val()
199 success: function(data, textStatus, jqXHR) {
200 $('#feedback-modal').modal('hide')
201 $('#message-modal-message').text(data)
202 $('#message-modal').modal('show')
204 error: function(jqXHR, textStatus, errorThrown) {
205 $('#feedback-modal').modal('hide')
206 $('#message-modal-message').text(errorThrown)
207 $('#message-modal').modal('show')