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