Browse Source

First commit

master
J David Smith 7 years ago
commit
a9e7b9b393
  1. 2
      .gitignore
  2. 3
      layout/_partial/header.ejs
  3. 17
      layout/_partial/post.ejs
  4. 24
      layout/_partial/root.ejs
  5. 6
      layout/index.ejs
  6. 4
      layout/post.ejs
  7. 15
      package.json
  8. 12
      scripts/aside.js
  9. 18
      scripts/highlight.js
  10. BIN
      source/css/ETBembo-DisplayItalic.ttf
  11. BIN
      source/css/ETBembo-RomanLF.ttf
  12. 107
      source/css/solarized_light.css
  13. 252
      source/css/tufte.css
  14. 18
      source/css/tufte_ext.css

2
.gitignore

@ -0,0 +1,2 @@
TAGS
node_modules

3
layout/_partial/header.ejs

@ -0,0 +1,3 @@
<header>
<a href="https://atlanis.net/">Home</a> &middot; <a href="<%= config.root %>">Blog</a> &middot; <a href="<%= url_for(config.feed.path) %>">Atom Feed</a>
</header>

17
layout/_partial/post.ejs

@ -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>

24
layout/_partial/root.ejs

@ -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 %>">&lt; Previous</a>
<% } else if(!page.title && page.prev !== 0) { %><a href="<%= config.root %>">&lt; Previous</a><% } %>
<% if(page.next_link) { %><a href="<%= config.root + page.next_link %>">Next &gt;</a><% } %>
</footer>
</body>
</html>

6
layout/index.ejs

@ -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("")
}) %>

4
layout/post.ejs

@ -0,0 +1,4 @@
<%- partial('_partial/root', {
title: page.title,
body: partial('_partial/post', {post: page, link_title: false})
}) %>

15
package.json

@ -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"
}
}

12
scripts/aside.js

@ -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>";
});
});

18
scripts/highlight.js

@ -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);
});

BIN
source/css/ETBembo-DisplayItalic.ttf

BIN
source/css/ETBembo-RomanLF.ttf

107
source/css/solarized_light.css

@ -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;
}

252
source/css/tufte.css

@ -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%; } }

18
source/css/tufte_ext.css

@ -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;
}
Loading…
Cancel
Save