J David Smith
9 years ago
commit
a9e7b9b393
14 changed files with 478 additions and 0 deletions
-
2.gitignore
-
3layout/_partial/header.ejs
-
17layout/_partial/post.ejs
-
24layout/_partial/root.ejs
-
6layout/index.ejs
-
4layout/post.ejs
-
15package.json
-
12scripts/aside.js
-
18scripts/highlight.js
-
BINsource/css/ETBembo-DisplayItalic.ttf
-
BINsource/css/ETBembo-RomanLF.ttf
-
107source/css/solarized_light.css
-
252source/css/tufte.css
-
18source/css/tufte_ext.css
@ -0,0 +1,2 @@ |
|||
TAGS |
|||
node_modules |
@ -0,0 +1,3 @@ |
|||
<header> |
|||
<a href="https://atlanis.net/">Home</a> · <a href="<%= config.root %>">Blog</a> · <a href="<%= url_for(config.feed.path) %>">Atom Feed</a> |
|||
</header> |
@ -0,0 +1,17 @@ |
|||
<article class="content" id="<%= post.slug %>"> |
|||
<header> |
|||
<% if(link_title) { %> |
|||
<a href="<%= url_for(post.path) %>"> |
|||
<% } %> |
|||
<h1 class="title"><%- post.title %></h1> |
|||
<% if(link_title) { %> |
|||
</a> |
|||
<% } %> |
|||
<p style="margin-bottom: 0;"> |
|||
<em id="written-by">Written by <%- post.author %></em> |
|||
<br /> |
|||
<em id="published-on">Published on <%= post.date.format("DD MMMM YYYY") %></em> |
|||
</p> |
|||
</header> |
|||
<%- post.content %> |
|||
</article> |
@ -0,0 +1,24 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<title><%= title %></title> |
|||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> |
|||
<meta name="author" content="J David Smith"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<link rel="stylesheet" type="text/css" href="<%= config.root + 'css/tufte.css'%>"> |
|||
<link rel="stylesheet" type="text/css" href="<%= config.root + 'css/tufte_ext.css'%>"> |
|||
<link rel="stylesheet" type="text/css" href="<%= config.root + 'css/solarized_light.css'%>"> |
|||
<link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css"> |
|||
<link rel="alternate" type="application/atom+xml" |
|||
title="Record of Motion" href="<%= config.root + 'atom.xml' %>" /> |
|||
</head> |
|||
<body> |
|||
<%- partial('_partial/header') %> |
|||
<%- body %> |
|||
<footer> |
|||
<% if(page.prev_link) { %><a href="<%= config.root + page.prev_link %>">< Previous</a> |
|||
<% } else if(!page.title && page.prev !== 0) { %><a href="<%= config.root %>">< Previous</a><% } %> |
|||
<% if(page.next_link) { %><a href="<%= config.root + page.next_link %>">Next ></a><% } %> |
|||
</footer> |
|||
</body> |
|||
</html> |
@ -0,0 +1,6 @@ |
|||
<%- partial('_partial/root', { |
|||
title: "Record of Motion", |
|||
body: page.posts.map(function(post) { |
|||
return partial('_partial/post', {post: post, link_title: true}); |
|||
}).join("") |
|||
}) %> |
@ -0,0 +1,4 @@ |
|||
<%- partial('_partial/root', { |
|||
title: page.title, |
|||
body: partial('_partial/post', {post: page, link_title: false}) |
|||
}) %> |
@ -0,0 +1,15 @@ |
|||
{ |
|||
"name": "hexo-theme-tufte", |
|||
"version": "0.1.0", |
|||
"description": "", |
|||
"main": "index.js", |
|||
"scripts": { |
|||
"test": "echo \"Error: no test specified\" && exit 1" |
|||
}, |
|||
"author": "", |
|||
"license": "ISC", |
|||
"dependencies": { |
|||
"highlight.js": "^8.8.0", |
|||
"jsdom": "^3.1.2" |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
var jsdom = require('jsdom'), |
|||
crypto = require('crypto'), |
|||
util = require('util'); |
|||
|
|||
hexo.extend.filter.register('after_post_render', function(data) { |
|||
data.content = data.content.replace(/<aside>([^\r]+?)<\/aside>/mg, function(match, content) { |
|||
var id = crypto.createHash('sha256').update(content).digest('hex'); |
|||
return util.format('<label for="%s" class="sidenote-number margin-toggle"></label>', id) + |
|||
util.format('<input type="checkbox" class="margin-toggle" id="%s">', id) + |
|||
'<span class="sidenote">' + content + "</span>"; |
|||
}); |
|||
}); |
@ -0,0 +1,18 @@ |
|||
var hljs = require('highlight.js'), |
|||
jsdom = require('jsdom'); |
|||
|
|||
hexo.extend.filter.register('after_post_render', function(data) { |
|||
var document = jsdom.jsdom(data.content); |
|||
var codes = document.querySelectorAll('pre code'); |
|||
|
|||
Array.prototype.forEach.call(codes, function(code) { |
|||
if(code.className === 'plain') { |
|||
return; |
|||
} else if(code.className) { |
|||
code.innerHTML = hljs.highlight(code.className, code.innerHTML).value; |
|||
} else { |
|||
code.innerHTML = hljs.highlightAuto(code.innerHTML).value; |
|||
} |
|||
}); |
|||
data.content = jsdom.serializeDocument(document); |
|||
}); |
@ -0,0 +1,107 @@ |
|||
/* |
|||
|
|||
Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com> |
|||
|
|||
*/ |
|||
|
|||
.hljs { |
|||
display: block; |
|||
overflow-x: auto; |
|||
padding: 0.5em; |
|||
background: #fdf6e3; |
|||
color: #657b83; |
|||
-webkit-text-size-adjust: none; |
|||
} |
|||
|
|||
.hljs-comment, |
|||
.diff .hljs-header, |
|||
.hljs-doctype, |
|||
.hljs-pi, |
|||
.lisp .hljs-string { |
|||
color: #93a1a1; |
|||
} |
|||
|
|||
/* Solarized Green */ |
|||
.hljs-keyword, |
|||
.hljs-winutils, |
|||
.method, |
|||
.hljs-addition, |
|||
.css .hljs-tag, |
|||
.hljs-request, |
|||
.hljs-status, |
|||
.nginx .hljs-title { |
|||
color: #859900; |
|||
} |
|||
|
|||
/* Solarized Cyan */ |
|||
.hljs-number, |
|||
.hljs-command, |
|||
.hljs-string, |
|||
.hljs-tag .hljs-value, |
|||
.hljs-rule .hljs-value, |
|||
.hljs-doctag, |
|||
.tex .hljs-formula, |
|||
.hljs-regexp, |
|||
.hljs-hexcolor, |
|||
.hljs-link_url { |
|||
color: #2aa198; |
|||
} |
|||
|
|||
/* Solarized Blue */ |
|||
.hljs-title, |
|||
.hljs-localvars, |
|||
.hljs-chunk, |
|||
.hljs-decorator, |
|||
.hljs-built_in, |
|||
.hljs-identifier, |
|||
.vhdl .hljs-literal, |
|||
.hljs-id, |
|||
.css .hljs-function, |
|||
.hljs-name { |
|||
color: #268bd2; |
|||
} |
|||
|
|||
/* Solarized Yellow */ |
|||
.hljs-attribute, |
|||
.hljs-variable, |
|||
.lisp .hljs-body, |
|||
.smalltalk .hljs-number, |
|||
.hljs-constant, |
|||
.hljs-class .hljs-title, |
|||
.hljs-parent, |
|||
.hljs-type, |
|||
.hljs-link_reference { |
|||
color: #b58900; |
|||
} |
|||
|
|||
/* Solarized Orange */ |
|||
.hljs-preprocessor, |
|||
.hljs-preprocessor .hljs-keyword, |
|||
.hljs-pragma, |
|||
.hljs-shebang, |
|||
.hljs-symbol, |
|||
.hljs-symbol .hljs-string, |
|||
.diff .hljs-change, |
|||
.hljs-special, |
|||
.hljs-attr_selector, |
|||
.hljs-subst, |
|||
.hljs-cdata, |
|||
.css .hljs-pseudo, |
|||
.hljs-header { |
|||
color: #cb4b16; |
|||
} |
|||
|
|||
/* Solarized Red */ |
|||
.hljs-deletion, |
|||
.hljs-important { |
|||
color: #dc322f; |
|||
} |
|||
|
|||
/* Solarized Violet */ |
|||
.hljs-link_label { |
|||
color: #6c71c4; |
|||
} |
|||
|
|||
.tex .hljs-formula { |
|||
background: #eee8d5; |
|||
} |
@ -0,0 +1,252 @@ |
|||
@font-face { font-family: ETBembo; |
|||
src: url("ETBembo-RomanLF.ttf"); } |
|||
@font-face { font-family: ETBembo; |
|||
src: url("ETBembo-DisplayItalic.ttf"); |
|||
font-weight: normal; |
|||
font-style: italic; } |
|||
|
|||
html { font-size: 15px; } |
|||
|
|||
body { width: 87.5%; |
|||
margin-left: auto; |
|||
margin-right: auto; |
|||
padding-left: 12.5%; |
|||
font-family: ETBembo, Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif; |
|||
background-color: #fffff8; |
|||
color: #111; |
|||
max-width: 1400px; |
|||
counter-reset: sidenote-counter; } |
|||
|
|||
h1 { font-weight: 400; |
|||
margin-top: 4rem; |
|||
margin-bottom: 1.5rem; |
|||
font-size: 3.2rem; |
|||
line-height: 1; } |
|||
|
|||
h2 { font-style: italic; |
|||
font-weight: 400; |
|||
margin-top: 2.1rem; |
|||
margin-bottom: 0; |
|||
font-size: 2.2rem; |
|||
line-height: 1; } |
|||
|
|||
h3 { font-style: italic; |
|||
font-weight: 400; |
|||
font-size: 1.7rem; |
|||
margin-top: 2rem; |
|||
margin-bottom: 0; |
|||
line-height: 1; } |
|||
|
|||
p.subtitle { font-style: italic; |
|||
margin-top: 1rem; |
|||
margin-bottom: 1rem; |
|||
font-size: 1.8rem; |
|||
display: block; |
|||
line-height: 1; } |
|||
|
|||
table { width: 98%; |
|||
clear: left; |
|||
text-align: right; |
|||
font-size: 1.2rem; |
|||
line-height: 1.4; |
|||
margin: 1.4rem 1%; |
|||
border-collapse: separate; |
|||
border-spacing: 0 5px; |
|||
-webkit-font-feature-settings: 'tnum'; /* This is technically redundant */ |
|||
-moz-font-feature-settings: 'tnum'; |
|||
-ms-font-feature-settings: 'tnum'; } |
|||
|
|||
thead th { border-bottom: 1px solid #AAAAAA; |
|||
font-weight: 400; |
|||
border-collapse: separate; |
|||
border-spacing: 5px 5px; } |
|||
|
|||
td.text { text-align: left; } |
|||
|
|||
span.table-label { padding-top: 8px; } /* to maintain height relative to table header row */ |
|||
|
|||
table.booktabs { width: auto; |
|||
margin: 0 auto; |
|||
border-spacing: 0px; |
|||
border-top: 2px solid #333333; |
|||
border-bottom: 2px solid #333333; } |
|||
|
|||
.booktabs th { border-bottom: 1px solid #333333; |
|||
padding: 0.65ex 0.5em 0.4ex 0.5em; |
|||
font-weight: normal; |
|||
text-align: center; } |
|||
|
|||
.booktabs th.cmid { border-bottom: 1px solid #666666; } |
|||
|
|||
.booktabs th.nocmid { border-bottom: none; } |
|||
|
|||
.booktabs tbody tr:first-child td { padding-top: 0.65ex; } /* add space between thead row and tbody */ |
|||
|
|||
.booktabs td { padding-left: 0.5em; |
|||
padding-right: 0.5em; |
|||
text-align: left; } |
|||
|
|||
.booktabs caption { font-size: 90%; |
|||
text-align: left; |
|||
width: auto; |
|||
margin-left: auto; |
|||
margin-right: auto; |
|||
margin-top: 1ex; |
|||
caption-side: top; } |
|||
|
|||
.booktabs tbody tr td.l { text-align: left !important; } |
|||
.booktabs tbody tr td.c { text-align: center !important; } |
|||
.booktabs tbody tr td.r { text-align: right !important; } |
|||
|
|||
article { position: relative; |
|||
padding: 5rem 0rem; } |
|||
|
|||
section { padding-top: 1rem; |
|||
padding-bottom: 1rem; } |
|||
|
|||
p, ol, ul { font-size: 1.4rem; } |
|||
|
|||
p { line-height: 2rem; |
|||
margin-top: 1.4rem; |
|||
margin-bottom: 1.4rem; |
|||
padding-right: 0; |
|||
vertical-align: baseline; } |
|||
|
|||
blockquote p { font-size: 1.1rem; |
|||
width: 50%; } |
|||
|
|||
blockquote footer { width: 50%; |
|||
text-align: right; } |
|||
|
|||
ul { width: 45%; |
|||
-webkit-padding-start: 5%; |
|||
-webkit-padding-end: 5%; |
|||
list-style-type: none; } |
|||
|
|||
li { padding: 0.5rem 0; } |
|||
|
|||
figure { max-width: 55%; |
|||
-webkit-margin-start: 0; |
|||
-webkit-margin-end: 0; |
|||
margin-bottom: 3em; } |
|||
|
|||
figcaption { float: right; |
|||
clear: right; |
|||
margin-right: -48%; |
|||
margin-top: 0; |
|||
margin-bottom: 0; |
|||
font-size: 1.0rem; |
|||
line-height: 1.6; |
|||
vertical-align: baseline; |
|||
position: relative; } |
|||
|
|||
figure.fullwidth figcaption { margin-right: 24%; } |
|||
|
|||
a { color: #111; |
|||
text-decoration: none; |
|||
border-bottom: 1px solid #777; |
|||
padding-bottom: 1px; } |
|||
|
|||
img { max-width: 100%; } |
|||
|
|||
.sidenote, .marginnote { float: right; |
|||
clear: right; |
|||
margin-right: -60%; |
|||
width: 50%; |
|||
margin-top: 0; |
|||
margin-bottom: 0; |
|||
font-size: 1.0rem; |
|||
line-height: 1.6; |
|||
vertical-align: baseline; |
|||
position: relative; } |
|||
|
|||
.table-caption { float:right; |
|||
clear:right; |
|||
margin-right: -60%; |
|||
width: 50%; |
|||
margin-top: 0; |
|||
margin-bottom: 0; |
|||
font-size: 1.0rem; |
|||
line-height: 1.6; } |
|||
|
|||
.sidenote-number { counter-increment: sidenote-counter; } |
|||
|
|||
.sidenote-number:after, .sidenote:before { content: counter(sidenote-counter) " "; |
|||
position: relative; |
|||
vertical-align: baseline; |
|||
color: #f00000; } |
|||
|
|||
.sidenote-number:after { content: counter(sidenote-counter); |
|||
font-size: 0.9rem; |
|||
top: -0.5rem; |
|||
left: 0.1rem; } |
|||
|
|||
.sidenote:before { content: counter(sidenote-counter) ". "; |
|||
position: absolute; |
|||
/* 100% refers to the computed width of the number, so this transform |
|||
* shifts the number just outside the left edge of the sidenote box, |
|||
* with a buffer of 0.25rem, no matter how many digits the number has. */ |
|||
-webkit-transform: translateX(-100%) translateX(-0.25rem); |
|||
-ms-transform: translateX(-100%) translateX(-0.25rem); |
|||
transform: translateX(-100%) translateX(-0.25rem); } |
|||
|
|||
p, footer, div.table-wrapper { width: 55%; } |
|||
|
|||
@media screen and (max-width: 760px) { p, footer { width: 90%; } |
|||
pre.code { width: 87.5%; } |
|||
ul { width: 85%; } |
|||
figure { max-width: 90%; } |
|||
figcaption, figure.fullwidth figcaption { margin-right: 0%; } |
|||
blockquote p, blockquote footer { width: 90%; }} |
|||
|
|||
.sans { font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif; } |
|||
|
|||
.code { font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; |
|||
font-size: 1.125rem; |
|||
line-height: 1.6; } |
|||
|
|||
h1 .code, h2 .code, h3 .code { font-size: 0.80em; } |
|||
|
|||
.marginnote .code, .sidenote .code { font-size: 1rem; } |
|||
|
|||
pre.code { width: 52.5%; |
|||
padding-left: 2.5%; |
|||
overflow-x: scroll; } |
|||
|
|||
.fullwidth { max-width: 90%; } |
|||
|
|||
span.newthought { font-variant: small-caps; |
|||
font-size: 1.2em; } |
|||
|
|||
input.margin-toggle { display: none; } |
|||
|
|||
label.sidenote-number { display: inline; } |
|||
|
|||
label.margin-toggle:not(.sidenote-number) { display: none; } |
|||
|
|||
@media (max-width: 760px) { label.margin-toggle:not(.sidenote-number) { display: inline; } |
|||
.sidenote, .marginnote { display: none; } |
|||
.margin-toggle:checked + .sidenote, |
|||
.margin-toggle:checked + .marginnote { display: block; |
|||
float: left; |
|||
left: 1rem; |
|||
clear: both; |
|||
width: 95%; |
|||
margin: 1rem 2.5%; |
|||
vertical-align: baseline; |
|||
position: relative; } |
|||
label { cursor: pointer; } |
|||
pre.code { width: 90%; |
|||
padding: 0; } |
|||
.table-caption { display: block; |
|||
float: right; |
|||
clear: both; |
|||
width: 98%; |
|||
margin-top: 1rem; |
|||
margin-bottom: 0.5rem; |
|||
margin-left: 1%; |
|||
margin-right: 1%; |
|||
vertical-align: baseline; |
|||
position: relative; } |
|||
table, table.booktabs { width: 85%; } |
|||
img { width: 100%; } } |
@ -0,0 +1,18 @@ |
|||
ol .marginnote, ul .marginnote, ol .sidenote, ul .sidenote { margin-right: -77.7%; } |
|||
ul { list-style-type: inherit; } |
|||
|
|||
ol { width: 45%; } |
|||
|
|||
li > p, li > ul { width: initial; } |
|||
li, li > p { margin-bottom: 0; margin-top: 0; } |
|||
|
|||
h1.title { width: 60%; } |
|||
@media (max-width: 760px) { h1.title { width: 95%; } } |
|||
|
|||
pre { overflow-x: auto; } |
|||
|
|||
code { font-family: Source Code Pro, monospace; } |
|||
|
|||
article { |
|||
counter-reset: sidenote-counter; |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue