Add website.
This commit is contained in:
parent
ddf5b54171
commit
49a34570ce
|
@ -14,3 +14,4 @@
|
||||||
/example/site/
|
/example/site/
|
||||||
/scripts/haunt
|
/scripts/haunt
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
|
/website/site
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
publish:
|
||||||
|
rsync -P -rvz --delete site/ blog@dthompson.us:/var/www/haunt --cvs-exclude
|
|
@ -0,0 +1,254 @@
|
||||||
|
html {
|
||||||
|
font-size: 10px;
|
||||||
|
|
||||||
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.42857143;
|
||||||
|
color: #333;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
padding-right: 15px;
|
||||||
|
padding-left: 15px;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.container {
|
||||||
|
width: 750px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.container {
|
||||||
|
width: 970px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
.container {
|
||||||
|
width: 1170px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-width {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
padding: 0;
|
||||||
|
min-height: 40px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
background-color: #333;
|
||||||
|
border-top: 1px solid #a1a1a1;
|
||||||
|
border-bottom: 1px solid #a1a1a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .container {
|
||||||
|
padding: 0;
|
||||||
|
position: relative;
|
||||||
|
min-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar ul {
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar li {
|
||||||
|
display: inline;
|
||||||
|
text-decoration: none;
|
||||||
|
padding-right: 30px;
|
||||||
|
font-size: 20px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .logo {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar a {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jumbotron {
|
||||||
|
padding: 30px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
color: inherit;
|
||||||
|
background-color: #eee;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row {
|
||||||
|
display: table;
|
||||||
|
margin-right: -15px;
|
||||||
|
margin-left: -15px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-logo, .column-info {
|
||||||
|
position: relative;
|
||||||
|
min-height: 1px;
|
||||||
|
padding-left: 15px;
|
||||||
|
padding-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-logo {
|
||||||
|
width: 40%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-info {
|
||||||
|
width: 50%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.big-logo {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 6px 12px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: 1.42857143;
|
||||||
|
text-align: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: middle;
|
||||||
|
cursor: pointer;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
background-image: none;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 4px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:focus,
|
||||||
|
.btn:active:focus,
|
||||||
|
.btn.active:focus {
|
||||||
|
outline: thin dotted;
|
||||||
|
outline: 5px auto -webkit-focus-ring-color;
|
||||||
|
outline-offset: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:hover,
|
||||||
|
.btn:focus {
|
||||||
|
color: #286090;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:active,
|
||||||
|
.btn.active {
|
||||||
|
background-image: none;
|
||||||
|
outline: 0;
|
||||||
|
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
||||||
|
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #428bca;
|
||||||
|
border-color: #357ebd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary:hover,
|
||||||
|
.btn-primary:focus,
|
||||||
|
.btn-primary:active,
|
||||||
|
.btn-primary.active {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #3071a9;
|
||||||
|
border-color: #285e8e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary:active,
|
||||||
|
.btn-primary.active {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-lg,
|
||||||
|
.btn-group-lg > .btn {
|
||||||
|
padding: 10px 16px;
|
||||||
|
font-size: 18px;
|
||||||
|
line-height: 1.33;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
blockquote {
|
||||||
|
border: 1px solid #999;
|
||||||
|
|
||||||
|
page-break-inside: avoid;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
display: block;
|
||||||
|
padding: 9.5px;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 1.42857143;
|
||||||
|
color: #333;
|
||||||
|
word-break: break-all;
|
||||||
|
word-wrap: break-word;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table > thead > tr > th,
|
||||||
|
.table > tbody > tr > th,
|
||||||
|
.table > tfoot > tr > th,
|
||||||
|
.table > thead > tr > td,
|
||||||
|
.table > tbody > tr > td,
|
||||||
|
.table > tfoot > tr > td {
|
||||||
|
padding: 8px;
|
||||||
|
line-height: 1.42857143;
|
||||||
|
vertical-align: top;
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table > thead > tr > th {
|
||||||
|
vertical-align: bottom;
|
||||||
|
border-bottom: 2px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table > caption + thead > tr:first-child > th,
|
||||||
|
.table > colgroup + thead > tr:first-child > th,
|
||||||
|
.table > thead:first-child > tr:first-child > th,
|
||||||
|
.table > caption + thead > tr:first-child > td,
|
||||||
|
.table > colgroup + thead > tr:first-child > td,
|
||||||
|
.table > thead:first-child > tr:first-child > td {
|
||||||
|
border-top: 0;
|
||||||
|
}
|
|
@ -0,0 +1,427 @@
|
||||||
|
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Set default font family to sans-serif.
|
||||||
|
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||||
|
* user zoom.
|
||||||
|
*/
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif; /* 1 */
|
||||||
|
-ms-text-size-adjust: 100%; /* 2 */
|
||||||
|
-webkit-text-size-adjust: 100%; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove default margin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HTML5 display definitions
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||||
|
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||||
|
* and Firefox.
|
||||||
|
* Correct `block` display not defined for `main` in IE 11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
main,
|
||||||
|
menu,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||||
|
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio,
|
||||||
|
canvas,
|
||||||
|
progress,
|
||||||
|
video {
|
||||||
|
display: inline-block; /* 1 */
|
||||||
|
vertical-align: baseline; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent modern browsers from displaying `audio` without controls.
|
||||||
|
* Remove excess height in iOS 5 devices.
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||||
|
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[hidden],
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the gray background color from active links in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Improve readability when focused and also mouse hovered in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a:active,
|
||||||
|
a:hover {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text-level semantics
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in Safari and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address variable `h1` font-size and margin within `section` and `article`
|
||||||
|
* contexts in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in IE 8/9.
|
||||||
|
*/
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background: #ff0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address inconsistent and variable font size in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Embedded content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove border when inside `a` element in IE 8/9/10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct overflow not hidden in IE 9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grouping content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address margin not present in IE 8/9 and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 1em 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address differences between Firefox and other browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
hr {
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contain overflow in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address odd `em`-unit font size rendering in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
pre,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||||
|
* styling of `select`, unless a `border` property is set.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct color not being inherited.
|
||||||
|
* Known issue: affects color of disabled elements.
|
||||||
|
* 2. Correct font properties not being inherited.
|
||||||
|
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
color: inherit; /* 1 */
|
||||||
|
font: inherit; /* 2 */
|
||||||
|
margin: 0; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||||
|
* All other form control elements do not inherit `text-transform` values.
|
||||||
|
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||||
|
* Correct `select` style inheritance in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||||
|
* and `video` controls.
|
||||||
|
* 2. Correct inability to style clickable `input` types in iOS.
|
||||||
|
* 3. Improve usability and consistency of cursor style between image-type
|
||||||
|
* `input` and others.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
html input[type="button"], /* 1 */
|
||||||
|
input[type="reset"],
|
||||||
|
input[type="submit"] {
|
||||||
|
-webkit-appearance: button; /* 2 */
|
||||||
|
cursor: pointer; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-set default cursor for disabled elements.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button[disabled],
|
||||||
|
html input[disabled] {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove inner padding and border in Firefox 4+.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
input::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||||
|
* the UA stylesheet.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It's recommended that you don't attempt to style these elements.
|
||||||
|
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||||
|
*
|
||||||
|
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||||
|
* 2. Remove excess padding in IE 8/9/10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="checkbox"],
|
||||||
|
input[type="radio"] {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||||
|
* `font-size` values of the `input`, it causes the cursor style of the
|
||||||
|
* decrement button to change from `default` to `text`.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="number"]::-webkit-inner-spin-button,
|
||||||
|
input[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||||
|
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||||
|
* (include `-moz` to future-proof).
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"] {
|
||||||
|
-webkit-appearance: textfield; /* 1 */
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
-webkit-box-sizing: content-box; /* 2 */
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||||
|
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||||
|
* padding (and `textfield` appearance).
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"]::-webkit-search-cancel-button,
|
||||||
|
input[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define consistent border, margin, and padding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid #c0c0c0;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0.35em 0.625em 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||||
|
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||||
|
*/
|
||||||
|
|
||||||
|
legend {
|
||||||
|
border: 0; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't inherit the `font-weight` (applied by a rule above).
|
||||||
|
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||||
|
*/
|
||||||
|
|
||||||
|
optgroup {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove most spacing between table cells.
|
||||||
|
*/
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
padding: 0;
|
||||||
|
}
|
|
@ -0,0 +1,203 @@
|
||||||
|
;;; Haunt --- Static site generator for GNU Guile
|
||||||
|
;;; Copyright © 2015 David Thompson <davet@gnu.org>
|
||||||
|
;;;
|
||||||
|
;;; This file is part of Haunt.
|
||||||
|
;;;
|
||||||
|
;;; Haunt is free software; you can redistribute it and/or modify it
|
||||||
|
;;; under the terms of the GNU General Public License as published by
|
||||||
|
;;; the Free Software Foundation; either version 3 of the License, or
|
||||||
|
;;; (at your option) any later version.
|
||||||
|
;;;
|
||||||
|
;;; Haunt is distributed in the hope that it will be useful, but
|
||||||
|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; General Public License for more details.
|
||||||
|
;;;
|
||||||
|
;;; You should have received a copy of the GNU General Public License
|
||||||
|
;;; along with Haunt. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
(use-modules (haunt site)
|
||||||
|
(haunt reader)
|
||||||
|
(haunt asset)
|
||||||
|
(haunt page)
|
||||||
|
(haunt post)
|
||||||
|
(haunt html)
|
||||||
|
(haunt utils)
|
||||||
|
(haunt builder blog)
|
||||||
|
(haunt builder atom)
|
||||||
|
(haunt builder assets)
|
||||||
|
(srfi srfi-19)
|
||||||
|
(ice-9 rdelim)
|
||||||
|
(ice-9 match)
|
||||||
|
(web uri))
|
||||||
|
|
||||||
|
(define %releases
|
||||||
|
'(("0.1" "1f751f234e382ed0f13d79e4c106373e9ae55c23")))
|
||||||
|
|
||||||
|
(define (tarball-url version)
|
||||||
|
(string-append "http://files.dthompson.us/haunt/haunt-"
|
||||||
|
version ".tar.gz"))
|
||||||
|
|
||||||
|
(define %download-button
|
||||||
|
(match %releases
|
||||||
|
(((version sha1) . _)
|
||||||
|
`(a (@ (class "btn btn-primary btn-lg")
|
||||||
|
(role "button")
|
||||||
|
(href ,(tarball-url version)))
|
||||||
|
"Download Haunt " ,version))))
|
||||||
|
|
||||||
|
(define (stylesheet name)
|
||||||
|
`(link (@ (rel "stylesheet")
|
||||||
|
(href ,(string-append "/css/" name ".css")))))
|
||||||
|
|
||||||
|
(define (anchor content uri)
|
||||||
|
`(a (@ (href ,uri)) ,content))
|
||||||
|
|
||||||
|
(define (logo src)
|
||||||
|
`(img (@ (class "logo") (src ,(string-append "/images/" src)))))
|
||||||
|
|
||||||
|
(define (jumbotron content)
|
||||||
|
`(div (@ (class "jumbotron"))
|
||||||
|
(div (@ (class "row"))
|
||||||
|
(div (@ (class "column-logo"))
|
||||||
|
(img (@ (class "big-logo")
|
||||||
|
(src "/images/haunt.png"))))
|
||||||
|
(div (@ (class "column-info")) ,content))))
|
||||||
|
|
||||||
|
(define %cc-by-sa-link
|
||||||
|
'(a (@ (href "https://creativecommons.org/licenses/by-sa/4.0/"))
|
||||||
|
"Creative Commons Attribution Share-Alike 4.0 International"))
|
||||||
|
|
||||||
|
(define haunt-theme
|
||||||
|
(theme #:name "Haunt"
|
||||||
|
#:layout
|
||||||
|
(lambda (site title body)
|
||||||
|
`((doctype "html")
|
||||||
|
(head
|
||||||
|
(meta (@ (charset "utf-8")))
|
||||||
|
(title ,(string-append title " — " (site-title site)))
|
||||||
|
,(stylesheet "reset")
|
||||||
|
,(stylesheet "main"))
|
||||||
|
(body
|
||||||
|
(header (@ (class "navbar"))
|
||||||
|
(div (@ (class "container"))
|
||||||
|
(ul
|
||||||
|
(li ,(anchor "home" "/"))
|
||||||
|
(li ,(anchor "downloads" "/downloads.html"))
|
||||||
|
(li ,(anchor "git"
|
||||||
|
"https://git.dthompson.us/haunt.git")))))
|
||||||
|
(div (@ (class "container"))
|
||||||
|
,body
|
||||||
|
(footer (@ (class "text-center"))
|
||||||
|
(p (small "Copyright © 2015 David Thompson"))
|
||||||
|
(p
|
||||||
|
(small "The text and images on this site are free
|
||||||
|
culture works available under the " ,%cc-by-sa-link " license.")))))))
|
||||||
|
#:post-template
|
||||||
|
(lambda (post)
|
||||||
|
`((h2 ,(post-ref post 'title))
|
||||||
|
(h3 "by " ,(post-ref post 'author)
|
||||||
|
" — " ,(date->string* (post-date post)))
|
||||||
|
(div ,(post-sxml post))))
|
||||||
|
#:collection-template
|
||||||
|
(lambda (site title posts prefix)
|
||||||
|
(define (post-uri post)
|
||||||
|
(string-append "/" (or prefix "")
|
||||||
|
(site-post-slug site post) ".html"))
|
||||||
|
|
||||||
|
`(,(jumbotron
|
||||||
|
`((p "Haunt is a simple, functional, hackable static site
|
||||||
|
generator written in Guile Scheme that gives authors the ability to
|
||||||
|
treat websites as programs.")
|
||||||
|
,%download-button))
|
||||||
|
|
||||||
|
(p "Haunt isn't your average static site generator. Its
|
||||||
|
mission is to give authors the full expressive power of Scheme to
|
||||||
|
define every aspect of their websites are generated. Haunt uses a
|
||||||
|
simple, functional build system that allows any type of web page to be
|
||||||
|
built by writing procedures that return page objects.")
|
||||||
|
(p "Haunt has no opinion about what markup language
|
||||||
|
authors should use to write posts. Just write the relevant reader
|
||||||
|
procedure and Haunt will happily work with that format. Likewise,
|
||||||
|
Haunt has no opinion about how authors structure their sites. Haunt
|
||||||
|
ships with helpful builder procedures that generate simple blogs or
|
||||||
|
Atom feeds, but authors should feel empowered to tweak them, write
|
||||||
|
replacements, or add new builders to do things that the Haunt hackers
|
||||||
|
didn't think of.")
|
||||||
|
(p "Here's what a simple Haunt configuration looks
|
||||||
|
like:")
|
||||||
|
(pre
|
||||||
|
,(call-with-input-file "../example/haunt.scm" read-string))
|
||||||
|
|
||||||
|
(p "With the above saved into a file named "
|
||||||
|
(code "haunt.scm")
|
||||||
|
" and a "
|
||||||
|
(code "posts")
|
||||||
|
" directory populated with the articles to publish,
|
||||||
|
the site can be built by running "
|
||||||
|
(code "haunt build")
|
||||||
|
". Once the site is built, running "
|
||||||
|
(code "haunt serve")
|
||||||
|
" and visiting "
|
||||||
|
(code "localhost:8080")
|
||||||
|
" in a web browser will show the results of the build
|
||||||
|
without needing to upload the generated files to a web server.")
|
||||||
|
|
||||||
|
(h2 "News")
|
||||||
|
(ul
|
||||||
|
,@(map (lambda (post)
|
||||||
|
`(li
|
||||||
|
(a (@ (href ,(post-uri post)))
|
||||||
|
,(post-ref post 'title)
|
||||||
|
" — "
|
||||||
|
,(date->string* (post-date post)))))
|
||||||
|
(posts/reverse-chronological posts)))
|
||||||
|
|
||||||
|
(h2 "Contributing")
|
||||||
|
(p "Patches to fix bugs or add new functionality are
|
||||||
|
highly encouraged. In lieu of a mailing list, please send patches
|
||||||
|
to "
|
||||||
|
(code "davet") " at " (code "gnu") " dot " (code "org")
|
||||||
|
" for now.")
|
||||||
|
(p "To get the latest version of the source code, clone
|
||||||
|
the official git repository:")
|
||||||
|
(pre "git clone git://dthompson.us/haunt.git")))))
|
||||||
|
|
||||||
|
(define (downloads-page site posts)
|
||||||
|
(define body
|
||||||
|
`(,(jumbotron
|
||||||
|
`(,%download-button
|
||||||
|
(p (small "SHA1 checksum: "
|
||||||
|
,(match %releases (((_ sha1) . _) sha1))))))
|
||||||
|
(h2 "Downloads")
|
||||||
|
(table (@ (class "table"))
|
||||||
|
(thead
|
||||||
|
(tr (th "Source") (th "SHA1")))
|
||||||
|
(tbody
|
||||||
|
,(map (match-lambda
|
||||||
|
((version sha1)
|
||||||
|
`(tr
|
||||||
|
(td (a (@ (href ,(tarball-url version)))
|
||||||
|
,(string-append "haunt-" version ".tar.gz")))
|
||||||
|
(td ,sha1))))
|
||||||
|
%releases)))))
|
||||||
|
|
||||||
|
(make-page "downloads.html"
|
||||||
|
(with-layout haunt-theme site "Downloads" body)
|
||||||
|
sxml->html))
|
||||||
|
|
||||||
|
(define %collections
|
||||||
|
`(("Home" "index.html" ,posts/reverse-chronological)))
|
||||||
|
|
||||||
|
(site #:title "Haunt"
|
||||||
|
#:domain "dthompson.us"
|
||||||
|
#:default-metadata
|
||||||
|
'((author . "David Thompson")
|
||||||
|
(email . "davet@gnu.org"))
|
||||||
|
#:readers (list sxml-reader html-reader)
|
||||||
|
#:builders (list (blog #:theme haunt-theme #:collections %collections)
|
||||||
|
(atom-feed)
|
||||||
|
(atom-feeds-by-tag)
|
||||||
|
downloads-page
|
||||||
|
(static-directory "images")
|
||||||
|
(static-directory "css")))
|
Binary file not shown.
After Width: | Height: | Size: 7.8 KiB |
|
@ -0,0 +1,41 @@
|
||||||
|
;;; -*- scheme -*-
|
||||||
|
|
||||||
|
(use-modules (haunt utils))
|
||||||
|
|
||||||
|
`((title . "Introducing Haunt")
|
||||||
|
(date . ,(string->date* "2015-08-08 10:00"))
|
||||||
|
(tags "news" "releases")
|
||||||
|
(summary . "Haunt 0.1 released")
|
||||||
|
(content
|
||||||
|
((p "I am pleased to announce the first alpha release of Haunt, yet
|
||||||
|
another static site generator. Does the world really need another one
|
||||||
|
of those? No, but Haunt is special because it is written in Guile
|
||||||
|
Scheme, a clean and elegant Lisp dialect, which allows users to
|
||||||
|
compose their websites using functional programming techniques. Using
|
||||||
|
a general-purpose, extensible programming language to build websites
|
||||||
|
allows Haunt users to view their website as not just mere data, but a
|
||||||
|
program. Haunt empowers the user to build the abstractions they need
|
||||||
|
to make a great static website without getting in the way.")
|
||||||
|
(p "At its core, Haunt is a very simple program. To build your
|
||||||
|
site, Haunt takes your posts and static assets as input, passes them
|
||||||
|
to a series of user-defined building procedures that return one or
|
||||||
|
more pages, and outputs all of the generated pages to the file system.
|
||||||
|
That's all there is to it. All of the \"good stuff\" is implemented
|
||||||
|
in the builder procedures. Haunt 0.1 comes with simple blog and Atom
|
||||||
|
feed generators.")
|
||||||
|
(p "Naturally, this website is built with Haunt. You can see its
|
||||||
|
complete source code in the "
|
||||||
|
(code "website") " directory in Haunt's "
|
||||||
|
(a (@ (href "https://git.dthompson.us/haunt.git/tree/HEAD:/website"))
|
||||||
|
"official git repository")
|
||||||
|
".")
|
||||||
|
(p "The Haunt 0.1 release tarball URL can be found on the "
|
||||||
|
(a (@ (href "/downloads.html")) "downloads page")
|
||||||
|
".")
|
||||||
|
(p "Haunt is built to be as hackable as possible, and patches to
|
||||||
|
improve it are very much welcome. In particular, new post readers for
|
||||||
|
common formats such as org-mode and Markdown are desired, along with a
|
||||||
|
more robust blog builder and theme engine. In lieu of a mailing list,
|
||||||
|
patches may be sent to "
|
||||||
|
(code "davet") " at " (code "gnu.org") ".")
|
||||||
|
(p "Happy haunting!"))))
|
Loading…
Reference in New Issue