Scrap everything, switch to Pelican instead
124
.gitignore
vendored
|
@ -1,16 +1,114 @@
|
||||||
logs
|
# Byte-compiled / optimized / DLL files
|
||||||
*.log
|
__pycache__/
|
||||||
npm-debug.log*
|
*.py[cod]
|
||||||
yarn-debug.log*
|
*$py.class
|
||||||
yarn-error.log*
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
coverage
|
# C extensions
|
||||||
node_modules
|
*.so
|
||||||
build
|
|
||||||
.env.local
|
# Distribution / packaging
|
||||||
.env.development.local
|
.Python
|
||||||
.env.test.local
|
build/
|
||||||
.env.production.local
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
.hypothesis/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
.python-version
|
||||||
|
|
||||||
|
# celery beat schedule file
|
||||||
|
celerybeat-schedule
|
||||||
|
|
||||||
|
# SageMath parsed files
|
||||||
|
*.sage.py
|
||||||
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
.spyproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# mkdocs documentation
|
||||||
|
/site
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.mypy_cache/
|
||||||
|
|
||||||
|
# Editor
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
|
|
||||||
|
# DB
|
||||||
|
db.sqlite3
|
||||||
|
|
||||||
|
# Test mount
|
||||||
|
test/
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
output/
|
||||||
|
|
5
content/keyboard-review.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Title: My First Review
|
||||||
|
Date: 2010-12-03 10:20
|
||||||
|
Category: Review
|
||||||
|
|
||||||
|
Following is a review of my favorite mechanical keyboard.
|
18
package.json
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"name": "my-razzle-app",
|
|
||||||
"version": "2.0.0-alpha.8",
|
|
||||||
"license": "MIT",
|
|
||||||
"scripts": {
|
|
||||||
"start": "razzle start",
|
|
||||||
"build": "razzle build",
|
|
||||||
"test": "razzle test --env=jsdom",
|
|
||||||
"start:prod": "NODE_ENV=production node build/server.js"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"express": "^4.16.3",
|
|
||||||
"razzle": "^2.2.0",
|
|
||||||
"react": "^16.4.1",
|
|
||||||
"react-dom": "^16.4.1",
|
|
||||||
"react-router-dom": "^4.3.1"
|
|
||||||
}
|
|
||||||
}
|
|
35
pelicanconf.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*- #
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
AUTHOR = 'Tanner'
|
||||||
|
SITENAME = 'Tanner Collin'
|
||||||
|
SITEURL = ''
|
||||||
|
|
||||||
|
PATH = 'content'
|
||||||
|
|
||||||
|
TIMEZONE = 'Canada/Mountain'
|
||||||
|
|
||||||
|
DEFAULT_LANG = 'en'
|
||||||
|
|
||||||
|
# Feed generation is usually not desired when developing
|
||||||
|
FEED_ALL_ATOM = None
|
||||||
|
CATEGORY_FEED_ATOM = None
|
||||||
|
TRANSLATION_FEED_ATOM = None
|
||||||
|
AUTHOR_FEED_ATOM = None
|
||||||
|
AUTHOR_FEED_RSS = None
|
||||||
|
|
||||||
|
# Blogroll
|
||||||
|
LINKS = (('Pelican', 'http://getpelican.com/'),
|
||||||
|
('Python.org', 'http://python.org/'),
|
||||||
|
('Jinja2', 'http://jinja.pocoo.org/'),
|
||||||
|
('You can modify those links in your config file', '#'),)
|
||||||
|
|
||||||
|
# Social widget
|
||||||
|
SOCIAL = (('You can add links in your config file', '#'),
|
||||||
|
('Another social link', '#'),)
|
||||||
|
|
||||||
|
DEFAULT_PAGINATION = False
|
||||||
|
|
||||||
|
# Uncomment following line if you want document-relative URLs when developing
|
||||||
|
#RELATIVE_URLS = True
|
Before Width: | Height: | Size: 32 KiB |
|
@ -1,48 +0,0 @@
|
||||||
/* http://meyerweb.com/eric/tools/css/reset/
|
|
||||||
v2.0 | 20110126
|
|
||||||
License: none (public domain)
|
|
||||||
*/
|
|
||||||
|
|
||||||
html, body, div, span, applet, object, iframe,
|
|
||||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
|
||||||
a, abbr, acronym, address, big, cite, code,
|
|
||||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
|
||||||
small, strike, strong, sub, sup, tt, var,
|
|
||||||
b, u, i, center,
|
|
||||||
dl, dt, dd, ol, ul, li,
|
|
||||||
fieldset, form, label, legend,
|
|
||||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
|
||||||
article, aside, canvas, details, embed,
|
|
||||||
figure, figcaption, footer, header, hgroup,
|
|
||||||
menu, nav, output, ruby, section, summary,
|
|
||||||
time, mark, audio, video {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
font-size: 100%;
|
|
||||||
font: inherit;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
/* HTML5 display-role reset for older browsers */
|
|
||||||
article, aside, details, figcaption, figure,
|
|
||||||
footer, header, hgroup, menu, nav, section {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
ol, ul {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
blockquote, q {
|
|
||||||
quotes: none;
|
|
||||||
}
|
|
||||||
blockquote:before, blockquote:after,
|
|
||||||
q:before, q:after {
|
|
||||||
content: '';
|
|
||||||
content: none;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
User-agent: *
|
|
||||||
|
|
25
publishconf.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*- #
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
# This file is only used if you use `make publish` or
|
||||||
|
# explicitly specify it as your config file.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
sys.path.append(os.curdir)
|
||||||
|
from pelicanconf import *
|
||||||
|
|
||||||
|
# If your site is available via HTTPS, make sure SITEURL begins with https://
|
||||||
|
SITEURL = ''
|
||||||
|
RELATIVE_URLS = False
|
||||||
|
|
||||||
|
FEED_ALL_ATOM = 'feeds/all.atom.xml'
|
||||||
|
CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml'
|
||||||
|
|
||||||
|
DELETE_OUTPUT_DIRECTORY = True
|
||||||
|
|
||||||
|
# Following items are often useful when publishing
|
||||||
|
|
||||||
|
#DISQUS_SITENAME = ""
|
||||||
|
#GOOGLE_ANALYTICS = ""
|
11
src/App.css
|
@ -1,11 +0,0 @@
|
||||||
* {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
line-height: 1.6;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
font-family: 'Open Sans', sans-serif;
|
|
||||||
color: #333;
|
|
||||||
background-color: #F9F9F9;
|
|
||||||
}
|
|
13
src/App.js
|
@ -1,13 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import Route from 'react-router-dom/Route';
|
|
||||||
import Switch from 'react-router-dom/Switch';
|
|
||||||
import Home from './Home';
|
|
||||||
import './App.css';
|
|
||||||
|
|
||||||
const App = () => (
|
|
||||||
<Switch>
|
|
||||||
<Route exact path='/' component={Home} />
|
|
||||||
</Switch>
|
|
||||||
);
|
|
||||||
|
|
||||||
export default App;
|
|
176
src/Grid.css
|
@ -1,176 +0,0 @@
|
||||||
.grid-container {
|
|
||||||
text-align: center;
|
|
||||||
max-width: 120rem;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid-item {
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
float: left;
|
|
||||||
|
|
||||||
width: 30rem;
|
|
||||||
min-width: 25rem;
|
|
||||||
min-height: 25rem;
|
|
||||||
padding-bottom: 30rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grid-item-content {
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
padding: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu .logo {
|
|
||||||
background-color: #E9E9E9;
|
|
||||||
object-fit: contain;
|
|
||||||
padding-top: 1em;
|
|
||||||
min-height: 5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu section {
|
|
||||||
background-color: #E9E9E9;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu section aside {
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu section .fuckcss {
|
|
||||||
position: relative;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu section img {
|
|
||||||
max-height: 100%;
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu footer {
|
|
||||||
background-color: #E9E9E9;
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project header {
|
|
||||||
font-size: 2rem;
|
|
||||||
line-height: 1.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project section {
|
|
||||||
min-height: 0;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project.bottom section {
|
|
||||||
flex-flow: column;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project.left section p {
|
|
||||||
position: relative;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.project.left section img {
|
|
||||||
height: 100%;
|
|
||||||
float: right;
|
|
||||||
padding: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project.bottom section p {
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project.bottom section img {
|
|
||||||
object-fit: contain;
|
|
||||||
min-height: 0;
|
|
||||||
padding: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.photo a {
|
|
||||||
display: block;
|
|
||||||
position: relative;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.photo header {
|
|
||||||
display: none;
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
z-index: 2;
|
|
||||||
|
|
||||||
background: rgba(0, 0, 0, 0.4);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.photo header {
|
|
||||||
top: 0;
|
|
||||||
font-size: 1.5rem;
|
|
||||||
padding: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.photo a:hover header {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.photo img {
|
|
||||||
position: absolute;
|
|
||||||
height: 100%;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media all and (max-width: 120rem) {
|
|
||||||
.grid-item {
|
|
||||||
width: 25%;
|
|
||||||
padding-bottom: 25%
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media all and (max-width: 102rem) {
|
|
||||||
.grid-item {
|
|
||||||
width: 33.33%;
|
|
||||||
padding-bottom: 33.33%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media all and (max-width: 76.5rem) {
|
|
||||||
.grid-container {
|
|
||||||
max-width: 68rem;
|
|
||||||
}
|
|
||||||
.grid-item {
|
|
||||||
width: 50%;
|
|
||||||
padding-bottom: 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media all and (max-width: 51rem) {
|
|
||||||
.grid-container {
|
|
||||||
max-width: 34rem;
|
|
||||||
}
|
|
||||||
.grid-item {
|
|
||||||
width: 100%;
|
|
||||||
padding-bottom: 100%;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
.menu {
|
|
||||||
background-color: #E9E9E9;
|
|
||||||
}
|
|
||||||
.grid-item-content.photo {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.photo a header {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
|
95
src/Grid.js
|
@ -1,95 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import './Grid.css';
|
|
||||||
|
|
||||||
import logo from './logo.png';
|
|
||||||
import GridItem from './GridItem';
|
|
||||||
|
|
||||||
import tanner from './tanner.jpg';
|
|
||||||
import dress1 from './dress1.jpg';
|
|
||||||
import switch1 from './switch1.jpg';
|
|
||||||
import pump1 from './pump1.jpg';
|
|
||||||
import hand1 from './hand1.jpg';
|
|
||||||
|
|
||||||
import banff1 from './banff1.jpg';
|
|
||||||
import bee1 from './bee1.jpg';
|
|
||||||
import canmore1 from './canmore1.jpg';
|
|
||||||
import carshow1 from './carshow1.jpg';
|
|
||||||
|
|
||||||
//function importAll(r) {
|
|
||||||
// return r.keys().map(x => r(x));
|
|
||||||
//}
|
|
||||||
|
|
||||||
//const images = importAll(require.context('./images'));
|
|
||||||
|
|
||||||
|
|
||||||
class Grid extends React.Component {
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div className='grid-container'>
|
|
||||||
<GridItem type='menu'>
|
|
||||||
<img src={logo} className='logo' alt='' />
|
|
||||||
<section>
|
|
||||||
<div className='fuckcss'>
|
|
||||||
<img src={tanner} alt='' />
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<footer>More info or a .onion link.</footer>
|
|
||||||
</GridItem>
|
|
||||||
<GridItem type='project left'>
|
|
||||||
<header>LED Dress</header>
|
|
||||||
<section>
|
|
||||||
<img src={dress1} alt='' />
|
|
||||||
<p>A dress lit up with LEDs that act as twinkling stars. Seven act as The Big Dipper, and the rest twinkle randomly.</p>
|
|
||||||
</section>
|
|
||||||
</GridItem>
|
|
||||||
<GridItem type='photo'>
|
|
||||||
<a>
|
|
||||||
<header>Thorncliffe Car Show</header>
|
|
||||||
<img src={carshow1} alt='' />
|
|
||||||
</a>
|
|
||||||
</GridItem>
|
|
||||||
<GridItem type='project bottom'>
|
|
||||||
<header>Remote Control Lightswitch</header>
|
|
||||||
<section>
|
|
||||||
<img src={switch1} alt='' />
|
|
||||||
<p>Custom circuit that lets me control a ceiling light over Wifi.</p>
|
|
||||||
</section>
|
|
||||||
</GridItem>
|
|
||||||
<GridItem type='project bottom'>
|
|
||||||
<header>Plant Waterer</header>
|
|
||||||
<section>
|
|
||||||
<img src={pump1} alt='' />
|
|
||||||
<p>Controller that waters my plant automatically every day.</p>
|
|
||||||
</section>
|
|
||||||
</GridItem>
|
|
||||||
<GridItem type='photo'>
|
|
||||||
<a>
|
|
||||||
<header>Prince's Island Park</header>
|
|
||||||
<img src={bee1} alt='' />
|
|
||||||
</a>
|
|
||||||
</GridItem>
|
|
||||||
<GridItem type='photo'>
|
|
||||||
<a>
|
|
||||||
<header>Johnston Creek, Banff</header>
|
|
||||||
<img src={banff1} alt='' />
|
|
||||||
</a>
|
|
||||||
</GridItem>
|
|
||||||
<GridItem type='project left'>
|
|
||||||
<header>Hand of Ozymandias</header>
|
|
||||||
<section>
|
|
||||||
<img src={hand1} alt='' />
|
|
||||||
<p>Sculpture welded together out of scrap metal for practice.</p>
|
|
||||||
</section>
|
|
||||||
</GridItem>
|
|
||||||
<GridItem type='photo'>
|
|
||||||
<a>
|
|
||||||
<header>VW Van in Canmore</header>
|
|
||||||
<img src={canmore1} alt='' />
|
|
||||||
</a>
|
|
||||||
</GridItem>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Grid;
|
|
|
@ -1,15 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
class GridItem extends React.Component {
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div className='grid-item'>
|
|
||||||
<div className={'grid-item-content ' + this.props.type}>
|
|
||||||
{this.props.children}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default GridItem;
|
|
16
src/Home.js
|
@ -1,16 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import './Home.css';
|
|
||||||
|
|
||||||
import Grid from './Grid';
|
|
||||||
|
|
||||||
class Home extends React.Component {
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div className='Home'>
|
|
||||||
<Grid />
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Home;
|
|
BIN
src/banff1.jpg
Before Width: | Height: | Size: 565 KiB |
BIN
src/bee1.jpg
Before Width: | Height: | Size: 220 KiB |
BIN
src/canmore1.jpg
Before Width: | Height: | Size: 301 KiB |
BIN
src/carshow1.jpg
Before Width: | Height: | Size: 371 KiB |
|
@ -1,15 +0,0 @@
|
||||||
import App from './App';
|
|
||||||
import BrowserRouter from 'react-router-dom/BrowserRouter';
|
|
||||||
import React from 'react';
|
|
||||||
import { hydrate } from 'react-dom';
|
|
||||||
|
|
||||||
hydrate(
|
|
||||||
<BrowserRouter>
|
|
||||||
<App />
|
|
||||||
</BrowserRouter>,
|
|
||||||
document.getElementById('root')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (module.hot) {
|
|
||||||
module.hot.accept();
|
|
||||||
}
|
|
BIN
src/dress1.jpg
Before Width: | Height: | Size: 1.1 MiB |
BIN
src/hand1.jpg
Before Width: | Height: | Size: 1.1 MiB |
26
src/index.js
|
@ -1,26 +0,0 @@
|
||||||
import app from './server';
|
|
||||||
import http from 'http';
|
|
||||||
|
|
||||||
const server = http.createServer(app);
|
|
||||||
|
|
||||||
let currentApp = app;
|
|
||||||
|
|
||||||
server.listen(process.env.PORT || 3000, error => {
|
|
||||||
if (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('🚀 started');
|
|
||||||
});
|
|
||||||
|
|
||||||
if (module.hot) {
|
|
||||||
console.log('✅ Server-side HMR Enabled!');
|
|
||||||
|
|
||||||
module.hot.accept('./server', () => {
|
|
||||||
console.log('🔁 HMR Reloading `./server`...');
|
|
||||||
server.removeListener('request', currentApp);
|
|
||||||
const newApp = require('./server').default;
|
|
||||||
server.on('request', newApp);
|
|
||||||
currentApp = newApp;
|
|
||||||
});
|
|
||||||
}
|
|
BIN
src/logo.png
Before Width: | Height: | Size: 13 KiB |
BIN
src/pump1.jpg
Before Width: | Height: | Size: 1.2 MiB |
|
@ -1,53 +0,0 @@
|
||||||
import App from './App';
|
|
||||||
import React from 'react';
|
|
||||||
import { StaticRouter } from 'react-router-dom';
|
|
||||||
import express from 'express';
|
|
||||||
import { renderToString } from 'react-dom/server';
|
|
||||||
|
|
||||||
const assets = require(process.env.RAZZLE_ASSETS_MANIFEST);
|
|
||||||
|
|
||||||
const server = express();
|
|
||||||
server
|
|
||||||
.disable('x-powered-by')
|
|
||||||
.use(express.static(process.env.RAZZLE_PUBLIC_DIR))
|
|
||||||
.get('/*', (req, res) => {
|
|
||||||
const context = {};
|
|
||||||
const markup = renderToString(
|
|
||||||
<StaticRouter context={context} location={req.url}>
|
|
||||||
<App />
|
|
||||||
</StaticRouter>
|
|
||||||
);
|
|
||||||
|
|
||||||
if (context.url) {
|
|
||||||
res.redirect(context.url);
|
|
||||||
} else {
|
|
||||||
res.status(200).send(
|
|
||||||
`<!doctype html>
|
|
||||||
<html lang="">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<title>Tanner Collin</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="stylesheet" href="reset.css">
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
|
|
||||||
${
|
|
||||||
assets.client.css
|
|
||||||
? `<link rel="stylesheet" href="${assets.client.css}">`
|
|
||||||
: ''
|
|
||||||
}
|
|
||||||
${
|
|
||||||
process.env.NODE_ENV === 'production'
|
|
||||||
? `<script src="${assets.client.js}" defer></script>`
|
|
||||||
: `<script src="${assets.client.js}" defer crossorigin></script>`
|
|
||||||
}
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="root">${markup}</div>
|
|
||||||
</body>
|
|
||||||
</html>`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
export default server;
|
|
BIN
src/switch1.jpg
Before Width: | Height: | Size: 848 KiB |
BIN
src/tanner.jpg
Before Width: | Height: | Size: 324 KiB |