├── .gitignore
├── .travis.yml
├── README.md
├── client.js
├── css
├── base.css
├── index.js
└── normalize.css
├── data
├── index.js
├── pages
│ ├── 404.md
│ └── about.md
├── posts
│ ├── 2015-01-01-jupiter.md
│ ├── 2015-01-08-juno.md
│ ├── 2015-01-15-mars.md
│ ├── 2015-01-22-venus.md
│ ├── 2015-01-29-bellona.md
│ ├── 2015-02-04-minerva.md
│ ├── 2015-02-11-janus.md
│ └── 2015-02-18-vesta.md
└── site.yml
├── deploy.sh
├── package.json
├── public
└── favicon.ico
├── routes.js
├── static.js
├── templates
├── app.jsx
├── feed.js
├── header.jsx
├── home.jsx
├── layout.jsx
├── page.jsx
└── post.jsx
├── utils.js
└── webpack.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | public/*
3 | !public/favicon.ico
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | script: bash ./deploy.sh
2 | language: node_js
3 | node_js:
4 | - '0.12'
5 | env:
6 | global:
7 | - GH_REF: github.com/mushishi78/static-react-blog.git
8 | - secure: fRFqh6ZS4yQ2fGJfr6l2qnukr1Axp4Qkp2kSsOgx3oZl25KKDJMCc11OIslUARWPRyfQDUkSteNTlrbZqKcJGmPRnIdGMSlrKTi1lcm2RfYI/Y0PCagZYzKBqzz8lGX5jx/b52HErD/tDf3t46zkNVJJbCYx4DRDg5JMPbSK/Kl9gsfWBesC5/32Dj5F38cmizFJz3GyETZwpgVDWbvwz/DKEu1I5owRRmRR/0ltoLjb+Rk2/bnmU3AEKuL53tDYqdddyzt6XwFTSmU+Ujzsm0XEI6Kb3TR9yeNSr7UkhF//ji+NiOS2CxMB3Sa1+hLaDahXShJ7zD0U8OaX3v/ZI4Yrfi8Y+kueymEXC8uSFotcG640hyjtH0GiZJsyOQBFlJ4XpeLDFI1Krvr+hbq45ovcpkb3pkw2Exgq6Jjhe7A1oJbp7KOIYyGfIfxjDLK+xupZyIQRm5rFfmpsMFYtSTl95lt4SBnoOqMH8+//4mKDbO/xyU382AiYTUomSF8zoKyUyqLvAVD9jgmYmWgGEx/Zkks57MRQd2rlut7ZBvGzuQsAffbKrr67chQwk8e6MT6V8hm/ppFGLPZoW8U5Jvdo2eD7TU1h4rI7pQsAOS/zOHmNZdiCWd1P5lrYLB3PmJOrVS71umpxjPGIfSK81ZP9jHsabBlbwQbzPEqLLio=
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Static React Blog
2 | =================
3 |
4 | A static-site blog generated by webpack and react.
5 |
6 | Usage
7 | -----
8 |
9 | To install, clone and run:
10 | ```
11 | npm install
12 | ```
13 |
14 | To run in development:
15 | ```
16 | npm start
17 | ```
18 |
19 | To build for production into `public` folder:
20 | ```
21 | npm run build
22 | ```
23 |
--------------------------------------------------------------------------------
/client.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import addressbar from 'addressbar';
3 | import { render } from 'react-dom';
4 | import App from './templates/app.jsx';
5 | import { site } from './data';
6 | import routes from './routes';
7 | import './css';
8 |
9 | class Router extends React.Component {
10 | componentWillMount() {
11 | this.setPath(location.pathname)
12 |
13 | addressbar.on('change', event => {
14 | event.preventDefault();
15 | this.setPath(event.target.value);
16 | });
17 | }
18 |
19 | setPath(path) {
20 | path = normalize(path);
21 | addressbar.value = site.baseurl + path;
22 | path = routes.indexOf(path) < 0 ? '/404.html' : path;
23 | this.setState({ path });
24 | window.scrollTo(0, 0);
25 | }
26 |
27 | render() {
28 | return ;
29 | }
30 | }
31 |
32 | function normalize(path) {
33 | path = path.replace(location.origin, '');
34 | path = path.replace('index.html', '');
35 | path = path.replace(site.baseurl, '');
36 | path = decodeURIComponent(path);
37 | path = path.replace(/\/$/, '') || '/';
38 | return path;
39 | }
40 |
41 | render(, document);
42 |
--------------------------------------------------------------------------------
/css/base.css:
--------------------------------------------------------------------------------
1 | a, button, input, textarea { outline: none; }
2 | img { max-width: 100%; }
3 | h1, h2 { margin: 0; }
4 | main { margin: 0 15%; }
5 | time { color: #999; }
6 | header { text-align: center; }
7 |
8 | a {
9 | color: #333;
10 | text-decoration: none;
11 | }
12 |
--------------------------------------------------------------------------------
/css/index.js:
--------------------------------------------------------------------------------
1 | import './normalize.css';
2 | import './base.css';
3 |
--------------------------------------------------------------------------------
/css/normalize.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
2 |
3 | /**
4 | * 1. Set default font family to sans-serif.
5 | * 2. Prevent iOS text size adjust after orientation change, without disabling
6 | * user zoom.
7 | */
8 |
9 | html {
10 | font-family: sans-serif; /* 1 */
11 | -ms-text-size-adjust: 100%; /* 2 */
12 | -webkit-text-size-adjust: 100%; /* 2 */
13 | }
14 |
15 | /**
16 | * Remove default margin.
17 | */
18 |
19 | body {
20 | margin: 0;
21 | }
22 |
23 | /* HTML5 display definitions
24 | ========================================================================== */
25 |
26 | /**
27 | * Correct `block` display not defined for any HTML5 element in IE 8/9.
28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11
29 | * and Firefox.
30 | * Correct `block` display not defined for `main` in IE 11.
31 | */
32 |
33 | article,
34 | aside,
35 | details,
36 | figcaption,
37 | figure,
38 | footer,
39 | header,
40 | hgroup,
41 | main,
42 | menu,
43 | nav,
44 | section,
45 | summary {
46 | display: block;
47 | }
48 |
49 | /**
50 | * 1. Correct `inline-block` display not defined in IE 8/9.
51 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
52 | */
53 |
54 | audio,
55 | canvas,
56 | progress,
57 | video {
58 | display: inline-block; /* 1 */
59 | vertical-align: baseline; /* 2 */
60 | }
61 |
62 | /**
63 | * Prevent modern browsers from displaying `audio` without controls.
64 | * Remove excess height in iOS 5 devices.
65 | */
66 |
67 | audio:not([controls]) {
68 | display: none;
69 | height: 0;
70 | }
71 |
72 | /**
73 | * Address `[hidden]` styling not present in IE 8/9/10.
74 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
75 | */
76 |
77 | [hidden],
78 | template {
79 | display: none;
80 | }
81 |
82 | /* Links
83 | ========================================================================== */
84 |
85 | /**
86 | * Remove the gray background color from active links in IE 10.
87 | */
88 |
89 | a {
90 | background-color: transparent;
91 | }
92 |
93 | /**
94 | * Improve readability when focused and also mouse hovered in all browsers.
95 | */
96 |
97 | a:active,
98 | a:hover {
99 | outline: 0;
100 | }
101 |
102 | /* Text-level semantics
103 | ========================================================================== */
104 |
105 | /**
106 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
107 | */
108 |
109 | abbr[heading] {
110 | border-bottom: 1px dotted;
111 | }
112 |
113 | /**
114 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
115 | */
116 |
117 | b,
118 | strong {
119 | font-weight: bold;
120 | }
121 |
122 | /**
123 | * Address styling not present in Safari and Chrome.
124 | */
125 |
126 | dfn {
127 | font-style: italic;
128 | }
129 |
130 | /**
131 | * Address variable `h1` font-size and margin within `section` and `article`
132 | * contexts in Firefox 4+, Safari, and Chrome.
133 | */
134 |
135 | h1 {
136 | font-size: 2em;
137 | margin: 0.67em 0;
138 | }
139 |
140 | /**
141 | * Address styling not present in IE 8/9.
142 | */
143 |
144 | mark {
145 | background: #ff0;
146 | color: #000;
147 | }
148 |
149 | /**
150 | * Address inconsistent and variable font size in all browsers.
151 | */
152 |
153 | small {
154 | font-size: 80%;
155 | }
156 |
157 | /**
158 | * Prevent `sub` and `sup` affecting `line-height` in all browsers.
159 | */
160 |
161 | sub,
162 | sup {
163 | font-size: 75%;
164 | line-height: 0;
165 | position: relative;
166 | vertical-align: baseline;
167 | }
168 |
169 | sup {
170 | top: -0.5em;
171 | }
172 |
173 | sub {
174 | bottom: -0.25em;
175 | }
176 |
177 | /* Embedded content
178 | ========================================================================== */
179 |
180 | /**
181 | * Remove border when inside `a` element in IE 8/9/10.
182 | */
183 |
184 | img {
185 | border: 0;
186 | }
187 |
188 | /**
189 | * Correct overflow not hidden in IE 9/10/11.
190 | */
191 |
192 | svg:not(:root) {
193 | overflow: hidden;
194 | }
195 |
196 | /* Grouping content
197 | ========================================================================== */
198 |
199 | /**
200 | * Address margin not present in IE 8/9 and Safari.
201 | */
202 |
203 | figure {
204 | margin: 1em 40px;
205 | }
206 |
207 | /**
208 | * Address differences between Firefox and other browsers.
209 | */
210 |
211 | hr {
212 | -moz-box-sizing: content-box;
213 | box-sizing: content-box;
214 | height: 0;
215 | }
216 |
217 | /**
218 | * Contain overflow in all browsers.
219 | */
220 |
221 | pre {
222 | overflow: auto;
223 | }
224 |
225 | /**
226 | * Address odd `em`-unit font size rendering in all browsers.
227 | */
228 |
229 | code,
230 | kbd,
231 | pre,
232 | samp {
233 | font-family: monospace, monospace;
234 | font-size: 1em;
235 | }
236 |
237 | /* Forms
238 | ========================================================================== */
239 |
240 | /**
241 | * Known limitation: by default, Chrome and Safari on OS X allow very limited
242 | * styling of `select`, unless a `border` property is set.
243 | */
244 |
245 | /**
246 | * 1. Correct color not being inherited.
247 | * Known issue: affects color of disabled elements.
248 | * 2. Correct font properties not being inherited.
249 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
250 | */
251 |
252 | button,
253 | input,
254 | optgroup,
255 | select,
256 | textarea {
257 | color: inherit; /* 1 */
258 | font: inherit; /* 2 */
259 | margin: 0; /* 3 */
260 | }
261 |
262 | /**
263 | * Address `overflow` set to `hidden` in IE 8/9/10/11.
264 | */
265 |
266 | button {
267 | overflow: visible;
268 | }
269 |
270 | /**
271 | * Address inconsistent `text-transform` inheritance for `button` and `select`.
272 | * All other form control elements do not inherit `text-transform` values.
273 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
274 | * Correct `select` style inheritance in Firefox.
275 | */
276 |
277 | button,
278 | select {
279 | text-transform: none;
280 | }
281 |
282 | /**
283 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
284 | * and `video` controls.
285 | * 2. Correct inability to style clickable `input` types in iOS.
286 | * 3. Improve usability and consistency of cursor style between image-type
287 | * `input` and others.
288 | */
289 |
290 | button,
291 | html input[type="button"], /* 1 */
292 | input[type="reset"],
293 | input[type="submit"] {
294 | -webkit-appearance: button; /* 2 */
295 | cursor: pointer; /* 3 */
296 | }
297 |
298 | /**
299 | * Re-set default cursor for disabled elements.
300 | */
301 |
302 | button[disabled],
303 | html input[disabled] {
304 | cursor: default;
305 | }
306 |
307 | /**
308 | * Remove inner padding and border in Firefox 4+.
309 | */
310 |
311 | button::-moz-focus-inner,
312 | input::-moz-focus-inner {
313 | border: 0;
314 | padding: 0;
315 | }
316 |
317 | /**
318 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in
319 | * the UA stylesheet.
320 | */
321 |
322 | input {
323 | line-height: normal;
324 | }
325 |
326 | /**
327 | * It's recommended that you don't attempt to style these elements.
328 | * Firefox's implementation doesn't respect box-sizing, padding, or width.
329 | *
330 | * 1. Address box sizing set to `content-box` in IE 8/9/10.
331 | * 2. Remove excess padding in IE 8/9/10.
332 | */
333 |
334 | input[type="checkbox"],
335 | input[type="radio"] {
336 | box-sizing: border-box; /* 1 */
337 | padding: 0; /* 2 */
338 | }
339 |
340 | /**
341 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain
342 | * `font-size` values of the `input`, it causes the cursor style of the
343 | * decrement button to change from `default` to `text`.
344 | */
345 |
346 | input[type="number"]::-webkit-inner-spin-button,
347 | input[type="number"]::-webkit-outer-spin-button {
348 | height: auto;
349 | }
350 |
351 | /**
352 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
353 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
354 | * (include `-moz` to future-proof).
355 | */
356 |
357 | input[type="search"] {
358 | -webkit-appearance: textfield; /* 1 */
359 | -moz-box-sizing: content-box;
360 | -webkit-box-sizing: content-box; /* 2 */
361 | box-sizing: content-box;
362 | }
363 |
364 | /**
365 | * Remove inner padding and search cancel button in Safari and Chrome on OS X.
366 | * Safari (but not Chrome) clips the cancel button when the search input has
367 | * padding (and `textfield` appearance).
368 | */
369 |
370 | input[type="search"]::-webkit-search-cancel-button,
371 | input[type="search"]::-webkit-search-decoration {
372 | -webkit-appearance: none;
373 | }
374 |
375 | /**
376 | * Define consistent border, margin, and padding.
377 | */
378 |
379 | fieldset {
380 | border: 1px solid #c0c0c0;
381 | margin: 0 2px;
382 | padding: 0.35em 0.625em 0.75em;
383 | }
384 |
385 | /**
386 | * 1. Correct `color` not being inherited in IE 8/9/10/11.
387 | * 2. Remove padding so people aren't caught out if they zero out fieldsets.
388 | */
389 |
390 | legend {
391 | border: 0; /* 1 */
392 | padding: 0; /* 2 */
393 | }
394 |
395 | /**
396 | * Remove default vertical scrollbar in IE 8/9/10/11.
397 | */
398 |
399 | textarea {
400 | overflow: auto;
401 | }
402 |
403 | /**
404 | * Don't inherit the `font-weight` (applied by a rule above).
405 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
406 | */
407 |
408 | optgroup {
409 | font-weight: bold;
410 | }
411 |
412 | /* Tables
413 | ========================================================================== */
414 |
415 | /**
416 | * Remove most spacing between table cells.
417 | */
418 |
419 | table {
420 | border-collapse: collapse;
421 | border-spacing: 0;
422 | }
423 |
424 | td,
425 | th {
426 | padding: 0;
427 | }
428 |
--------------------------------------------------------------------------------
/data/index.js:
--------------------------------------------------------------------------------
1 | import site from './site.yml';
2 | site.baseurl = site.baseurl || '';
3 |
4 | const toPath = file => file.replace(/\.\/.*?\//, '/').replace(/\..*$/, '');
5 |
6 | function reduceFn(obj, file) {
7 | file = { path: toPath(file), ...require(file) };
8 | return { ...obj, [file.path]: file };
9 | };
10 |
11 | const pages = require.context('.', true, /\/pages\//).keys().reduce(reduceFn, {});
12 | const posts = require.context('.', true, /\/posts\//).keys().reduce(reduceFn, {});
13 |
14 | export default { pages, posts, site };
15 |
--------------------------------------------------------------------------------
/data/pages/404.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Page Not Found
3 | path: /404.html
4 | ---
5 |
6 | Sorry, but the page you're looking for is nowhere to be found.
7 |
8 | Perhaps it's been taken down or it's been misspelled.
9 |
--------------------------------------------------------------------------------
/data/pages/about.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: About
3 | ---
4 |
5 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
6 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
7 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
8 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
9 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
10 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
11 |
--------------------------------------------------------------------------------
/data/posts/2015-01-01-jupiter.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Jupiter
3 | author: John Smith
4 | category: Gods
5 | tags: [King, Sky, Thunder, God]
6 | date: 2015-01-01
7 | ---
8 | Jupiter or Jove is the king of the gods and the god of sky and thunder in Ancient Roman religion and mythology. Jupiter was the chief deity of Roman state religion throughout the Republican and Imperial eras, until Christianity became the dominant religion of the Empire. In Roman mythology, he negotiates with Numa Pompilius, the second king of Rome, to establish principles of Roman religion such as sacrifice.
9 |
10 | Jupiter is usually thought to have originated as a sky god. His identifying implement is the thunderbolt, and his primary sacred animal is the eagle, which held precedence over other birds in the taking of auspices and became one of the most common symbols of the Roman army (see Aquila). The two emblems were often combined to represent the god in the form of an eagle holding in its claws a thunderbolt, frequently seen on Greek and Roman coins/ As the sky-god, he was a divine witness to oaths, the sacred trust on which justice and good government depend. Many of his functions were focused on the Capitoline ("Capitol Hill"), where the citadel was located. He was the chief deity of the early Capitoline Triad with Mars and Quirinus. In the later Capitoline Triad, he was the central guardian of the state with Juno and Minerva. His sacred tree was the oak.
11 |
12 | The Romans regarded Jupiter as the equivalent of the Greek Zeus, and in Latin literature and Roman art, the myths and iconography of Zeus are adapted under the name Iuppiter. In the Greek-influenced tradition, Jupiter was the brother of Neptune and Pluto. Each presided over one of the three realms of the universe: sky, the waters, and the underworld. The Italic Diespiter was also a sky god who manifested himself in the daylight, usually but not always identified with Jupiter. Tinia is usually regarded as his Etruscan counterpart.
--------------------------------------------------------------------------------
/data/posts/2015-01-08-juno.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Juno
3 | author: John Smith
4 | category: Gods
5 | tags: [Protector, Counselor, Women, Goddess]
6 | date: 2015-01-08
7 | ---
8 | Juno is an ancient Roman goddess, the protector and special counselor of the state. She is a daughter of Saturn and sister (but also the wife) of the chief god Jupiter and the mother of Mars and Vulcan. Juno also looked after the women of Rome. Her Greek equivalent was Hera. Her Etruscan counterpart was Uni. As the patron goddess of Rome and the Roman Empire, Juno was called Regina ("Queen") and, together with Jupiter and Minerva, was worshipped as a triad on the Capitol (Juno Capitolina) in Rome.
9 |
10 | Juno's own warlike aspect among the Romans is apparent in her attire. She often appeared sitting pictured with a peacock armed and wearing a goatskin cloak. The traditional depiction of this warlike aspect was assimilated from the Greek goddess Hera, whose goatskin was called the 'aegis'.
--------------------------------------------------------------------------------
/data/posts/2015-01-15-mars.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Mars
3 | author: John Smith
4 | category: Gods
5 | tags: [War, Agriculture, Military, God]
6 | date: 2015-01-15
7 | ---
8 | In ancient Roman religion and myth, Mars was the god of war and also an agricultural guardian, a combination characteristic of early Rome. He was second in importance only to Jupiter and he was the most prominent of the military gods in the religion of the Roman army. Most of his festivals were held in March, the month named for him (Latin Martius), and in October, which began the season for military campaigning and ended the season for farming.
9 |
10 | Under the influence of Greek culture, Mars was identified with the Greek god Ares, whose myths were reinterpreted in Roman literature and art under the name of Mars. But the character and dignity of Mars differed in fundamental ways from that of his Greek counterpart, who is often treated with contempt and revulsion in Greek literature. Mars was a part of the Archaic Triad along with Jupiter and Quirinus, the latter of whom as a guardian of the Roman people had no Greek equivalent. Mars' altar in the Campus Martius, the area of Rome that took its name from him, was supposed to have been dedicated by Numa, the peace-loving semi-legendary second king of Rome. Although the center of Mars' worship was originally located outside the sacred boundary of Rome (pomerium), Augustus made the god a renewed focus of Roman religion by establishing the Temple of Mars Ultor in his new forum.
11 |
12 | Although Ares was viewed primarily as a destructive and destabilizing force, Mars represented military power as a way to secure peace, and was a father (pater) of the Roman people. In the mythic genealogy and founding myths of Rome, Mars was the father of Romulus and Remus with Rhea Silvia. His love affair with Venus symbolically reconciled the two different traditions of Rome's founding; Venus was the divine mother of the hero Aeneas, celebrated as the Trojan refugee who "founded" Rome several generations before Romulus laid out the city walls.
13 |
14 | The importance of Mars in establishing religious and cultural identity within the Roman Empire is indicated by the vast number of inscriptions identifying him with a local deity, particularly in the Western provinces.
--------------------------------------------------------------------------------
/data/posts/2015-01-22-venus.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Venus
3 | author: Harry Lamden
4 | category: Gods
5 | tags: [Love, Beauty, Sex, Fertility, Goddess]
6 | date: 2015-01-22
7 | ---
8 | Venus is the Roman goddess whose functions encompassed love, beauty, sex, fertility, prosperity and desire. In Roman mythology, she was the mother of the Roman people through her son, Aeneas, who survived the fall of Troy and fled to Italy. Julius Caesar claimed her as his ancestor. Venus was central to many religious festivals, and was revered in Roman religion under numerous cult titles.
9 |
10 | The Romans adapted the myths and iconography of her Greek counterpart Aphrodite for Roman art and Latin literature. In the later classical tradition of the West, Venus becomes one of the most widely referenced deities of Greco-Roman mythology as the embodiment of love and sexuality.
--------------------------------------------------------------------------------
/data/posts/2015-01-29-bellona.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bellona
3 | author: John Smith
4 | category: Gods
5 | tags: [War, Helmet, Sword, Shield, Goddess]
6 | date: 2015-01-29
7 | ---
8 | Bellona was an Ancient Roman goddess of war. She was called the sister of Mars, and in some sources, his wife or an associate of his female cult partner Nerio. Bellona's main attribute is the military helmet worn on her head, and she often holds a sword, a shield, or other weapons of battle.
9 |
10 | Politically, all Roman Senate meetings relating to foreign war were conducted in the Templum Bellonæ (Temple of Bellona) on the Collis Capitolinus outside the pomerium, near the Temple of Apollo Sosianus. The fetiales, a group of priest advisors, conducted ceremonies to proclaim war and peace, and announce foreign treaties at the columna bellica, in front of her temple.
--------------------------------------------------------------------------------
/data/posts/2015-02-04-minerva.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Minerva
3 | author: John Smith
4 | category: Gods
5 | tags: [Arts, Trade, Strategy Goddess]
6 | date: 2015-02-04
7 | ---
8 | Minerva was the Roman goddess of wisdom and sponsor of arts, trade, and strategy. She was born with weapons from the head of Jupiter. After impregnating the titaness Metis Jupiter recalled a prophecy that his own child would overthrow him. Fearing that their child would grow stronger than him and rule the Heavens in his place, Jupiter swallowed Metis whole. The titaness forged weapons and armor for her child while within the father-god, and the constant pounding and ringing gave him a headache. To relieve the pain, Vulcan used a hammer to split Jupiter's head and, from the cleft, Minerva emerged, whole, adult, and bearing her mother's weapons and armor. From the 2nd century BC onwards, the Romans equated her with the Greek goddess Athena. She was the virgin goddess of music, poetry, medicine, wisdom, commerce, weaving, crafts, and magic. She is often depicted with her sacred creature, an owl usually named as the "owl of Minerva", which symbolizes that she is connected to wisdom.
--------------------------------------------------------------------------------
/data/posts/2015-02-11-janus.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Janus
3 | author: Harry Lamden
4 | category: Gods
5 | tags: [Beginnings, Transitions, Gates, Doors, God]
6 | date: 2015-02-11
7 | ---
8 | In ancient Roman religion and myth, Janus is the god of beginnings and transitions, and thereby of gates, doors, doorways, passages and endings. He is usually depicted as having two faces, since he looks to the future and to the past. It is conventionally thought that the month of January is named for Janus (Ianuarius), but according to ancient Roman farmers' almanacs Juno was the tutelary deity of the month.
9 |
10 | Janus presided over the beginning and ending of conflict, and hence war and peace. The doors of his temple were open in time of war, and closed to mark the peace. As a god of transitions, he had functions pertaining to birth and to journeys and exchange, and in his association with Portunus, a similar harbor and gateway god, he was concerned with travelling, trading and shipping.
11 |
12 | Janus had no flamen or specialized priest (sacerdos) assigned to him, but the King of the Sacred Rites (rex sacrorum) himself carried out his ceremonies. Janus had a ubiquitous presence in religious ceremonies throughout the year, and was ritually invoked at the beginning of each one, regardless of the main deity honored on any particular occasion.
13 |
14 | The ancient Greeks had no equivalent to Janus, whom the Romans claimed as distinctively their own. Modern scholars, however, have identified analogous figures in the pantheons of the Near East. His name in Greek is Ἰανός (Ianós).
--------------------------------------------------------------------------------
/data/posts/2015-02-18-vesta.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Vesta
3 | author: Annie Hoslin
4 | category: Gods
5 | tags: [Home, Family, Goddess]
6 | date: 2015-02-18
7 | ---
8 | Vesta is the virgin goddess of the hearth, home, and family in Roman religion. Vesta's presence is symbolized by the sacred fire that burned at her hearth and temples. Her closest Greek equivalent is Hestia.
9 |
10 | The importance of Vesta to Roman religion is indicated by the prominence of the priesthood devoted to her, the Vestal Virgins, Rome's only college of full-time priests.
--------------------------------------------------------------------------------
/data/site.yml:
--------------------------------------------------------------------------------
1 | name: Static React Blog
2 | url: https://mushishi78.github.io
3 | description: A static-site blog generated by webpack and react
4 | baseurl: /static-react-blog
5 | github: https://github.com/mushishi78/static-react-blog
--------------------------------------------------------------------------------
/deploy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 | npm run build
4 | cd public
5 | git init
6 | git config user.name "Travis CI"
7 | git config user.email "travis@example.com"
8 | git add .
9 | git commit -m "Deploy to GitHub Pages"
10 | git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:gh-pages > /dev/null 2>&1
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "static-react-blog",
3 | "version": "0.0.1",
4 | "devDependencies": {
5 | "addressbar": "^0.2.0",
6 | "babel": "^5.8.23",
7 | "babel-core": "^5.8.24",
8 | "babel-loader": "^5.3.2",
9 | "css-loader": "^0.18.0",
10 | "extract-text-webpack-plugin": "^0.8.2",
11 | "json-loader": "^0.5.3",
12 | "markdown-with-front-matter-loader": "^0.1.0",
13 | "react": "^0.14.0-rc1",
14 | "react-dom": "^0.14.0-rc1",
15 | "static-webpack-plugin": "^0.1.1",
16 | "style-loader": "^0.12.4",
17 | "webpack": "^1.11.0",
18 | "webpack-dev-server": "^1.10.1",
19 | "yaml-loader": "^0.1.0"
20 | },
21 | "scripts": {
22 | "start": "webpack-dev-server",
23 | "build": "webpack"
24 | },
25 | "author": "Max White ",
26 | "license": "ISC"
27 | }
28 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mushishi78/static-react-blog/d55ff13506ed799d040baf86492409fd11113bef/public/favicon.ico
--------------------------------------------------------------------------------
/routes.js:
--------------------------------------------------------------------------------
1 | import { pages, posts } from './data';
2 |
3 | export default [
4 | '/',
5 | ...Object.keys(pages),
6 | ...Object.keys(posts)
7 | ];
8 |
--------------------------------------------------------------------------------
/static.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { renderToString } from 'react-dom/server';
3 | import routes from './routes';
4 | import App from './templates/app.jsx';
5 | import feed from './templates/feed';
6 | import './css';
7 |
8 | function toFilename(path) {
9 | if(path.indexOf('.') < 0) { path += '/index.html'; }
10 | return path.replace(/^(\\|\/)+/, '');
11 | }
12 |
13 | function renderPath(path) {
14 | return '' + renderToString();
15 | }
16 |
17 | export default function(render, done) {
18 | render('feed.xml', feed);
19 | routes.forEach(route => render(toFilename(route), renderPath(route)));
20 | done();
21 | }
22 |
--------------------------------------------------------------------------------
/templates/app.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { pages, posts } from '../data';
3 | import Layout from './layout.jsx';
4 | import Home from './home.jsx';
5 | import Page from './page.jsx';
6 | import Post from './post.jsx';
7 |
8 | export default ({ path }) =>
9 | {
10 | path === '/' ? :
11 | pages[path] ? :
12 | posts[path] ? : null
13 | }
14 |
--------------------------------------------------------------------------------
/templates/feed.js:
--------------------------------------------------------------------------------
1 | import { site, posts } from '../data';
2 | import { stripHTML, escapeXML, values } from '../utils';
3 |
4 | export default `
5 |
6 |
7 | ${escapeXML(site.name)}
8 | ${escapeXML(site.description)}
9 | ${site.url + site.baseurl}/
10 |
11 | ${(new Date).toUTCString()}
12 | ${(new Date).toUTCString()}${
13 | values(posts).reverse().map(post => `
14 |
15 | ${escapeXML(post.title)}
16 | ${escapeXML(stripHTML(post.__content))}
17 | ${new Date(post.date).toUTCString()}
18 | ${site.url + site.baseurl + post.path}
19 | ${site.url + site.baseurl + post.path}
20 | ${escapeXML(post.category)}
21 |
22 | `).join('\n')
23 | }
24 |
25 | `
26 |
--------------------------------------------------------------------------------
/templates/header.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { site } from '../data';
3 |
4 | export default () =>
5 |
6 |