commit 7456f4723e4d4b4fa85af91e13353640d15ccd95
parent 0f2d46b1475aa233da6b71c439fa46dac15f7204
Author: Vladimir Kutepov <frenzzy.man@gmail.com>
Date: Sat, 18 Jun 2016 00:01:13 +0300
Remove jade dependency
Diffstat:
16 files changed, 187 insertions(+), 235 deletions(-)
diff --git a/package.json b/package.json
@@ -23,7 +23,6 @@
"graphql": "0.6.0",
"history": "3.0.0",
"isomorphic-style-loader": "1.0.0",
- "jade": "1.11.0",
"jsonwebtoken": "7.0.0",
"markdown-it": "6.0.5",
"node-fetch": "1.5.3",
@@ -75,7 +74,6 @@
"gaze": "^1.0.0",
"git-repository": "^0.1.4",
"glob": "^7.0.3",
- "jade-loader": "^0.8.0",
"json-loader": "^0.5.4",
"mkdirp": "^0.5.1",
"mocha": "^2.5.3",
diff --git a/src/client.js b/src/client.js
@@ -65,7 +65,9 @@ let renderComplete = (state, callback) => {
// Google Analytics tracking. Don't send 'pageview' event after
// the initial rendering, as it was already sent
- window.ga('send', 'pageview');
+ if (window.ga) {
+ window.ga('send', 'pageview');
+ }
callback(true);
};
@@ -109,7 +111,7 @@ function run() {
query: location.query,
state: location.state,
context,
- render: render.bind(undefined, container, location.state),
+ render: render.bind(undefined, container, location.state), // eslint-disable-line react/jsx-no-bind, max-len
}).catch(err => console.error(err)); // eslint-disable-line no-console
}
diff --git a/src/components/Html.js b/src/components/Html.js
@@ -0,0 +1,42 @@
+import React, { PropTypes } from 'react';
+import { analytics } from '../config';
+
+function Html({ title, description, style, script, children }) {
+ return (
+ <html className="no-js" lang="">
+ <head>
+ <meta charSet="utf-8" />
+ <meta httpEquiv="x-ua-compatible" content="ie=edge" />
+ <title>{title}</title>
+ <meta name="description" content={description} />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" href="apple-touch-icon.png" />
+ <style id="css" dangerouslySetInnerHTML={{ __html: style }} />
+ </head>
+ <body>
+ <div id="app" dangerouslySetInnerHTML={{ __html: children }} />
+ {script && <script src={script} />}
+ {analytics.google.trackingId &&
+ <script
+ dangerouslySetInnerHTML={{ __html:
+ 'window.ga=function(){ga.q.push(arguments)};ga.q=[];ga.l=+new Date;' +
+ `ga('create','${analytics.google.trackingId}','auto');ga('send','pageview')` }}
+ />
+ }
+ {analytics.google.trackingId &&
+ <script src="https://www.google-analytics.com/analytics.js" async defer />
+ }
+ </body>
+ </html>
+ );
+}
+
+Html.propTypes = {
+ title: PropTypes.string.isRequired,
+ description: PropTypes.string.isRequired,
+ style: PropTypes.string.isRequired,
+ script: PropTypes.string,
+ children: PropTypes.string,
+};
+
+export default Html;
diff --git a/src/config.js b/src/config.js
@@ -8,7 +8,6 @@
*/
/* eslint-disable max-len */
-/* jscs:disable maximumLineLength */
export const port = process.env.PORT || 3000;
export const host = process.env.WEBSITE_HOSTNAME || `localhost:${port}`;
@@ -18,7 +17,9 @@ export const databaseUrl = process.env.DATABASE_URL || 'sqlite:database.sqlite';
export const analytics = {
// https://analytics.google.com/
- google: { trackingId: process.env.GOOGLE_TRACKING_ID || 'UA-XXXXX-X' },
+ google: {
+ trackingId: process.env.GOOGLE_TRACKING_ID, // UA-XXXXX-X
+ },
};
diff --git a/src/content/about.jade b/src/content/about.jade
@@ -1,47 +0,0 @@
----
-title: About Us
-component: ContentPage
----
-p.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean consequat
- tortor fermentum mi fermentum dignissim. Nullam vel ipsum ut ligula elementum
- lobortis. Maecenas aliquam, massa laoreet lacinia pretium, nisi urna venenatis
- tortor, nec imperdiet tellus libero efficitur metus. Fusce semper posuere
- ligula, et facilisis metus bibendum interdum. Mauris at mauris sit amet sem
- pharetra commodo a eu leo. Nam at est non risus cursus maximus. Nam feugiat
- augue libero, id consectetur tortor bibendum non. Quisque nec fringilla lorem.
- Nullam efficitur vulputate mauris, nec maximus leo dignissim id.
-p.
- In hac habitasse platea dictumst. Duis sagittis dui ac ex suscipit maximus.
- Morbi pellentesque venenatis felis sed convallis. Nulla varius, nibh vitae
- placerat tempus, mauris sem elementum ipsum, eget sollicitudin nisl est vel
- purus. Fusce malesuada odio velit, non cursus leo fermentum id. Cras pharetra
- sodales fringilla. Etiam quis est a dolor egestas pellentesque. Maecenas non
- scelerisque purus, congue cursus arcu. Donec vel dapibus mi. Mauris maximus
- posuere placerat. Sed et libero eu nibh tristique mollis a eget lectus. Donec
- interdum augue sollicitudin vehicula hendrerit. Vivamus justo orci, molestie
- ac sollicitudin ac, lobortis at tellus. Etiam rhoncus ullamcorper risus eu
- tempor. Sed porttitor, neque ac efficitur gravida, arcu lacus pharetra dui, in
- consequat elit tellus auctor nulla. Donec placerat elementum diam, vitae
- imperdiet lectus luctus at.
-p.
- Nullam eu feugiat mi. Quisque nec tristique nisl, dignissim dictum leo. Nam
- non quam nisi. Donec rutrum turpis ac diam blandit, id pulvinar mauris
- suscipit. Pellentesque tincidunt libero ultricies risus iaculis, sit amet
- consequat velit blandit. Fusce quis varius nulla. Nullam nisi nisi, suscipit
- ut magna quis, feugiat porta nibh. Sed id enim lectus. Suspendisse elementum
- justo sapien, sit amet consequat orci accumsan et. Aliquam ornare ullamcorper
- sem sed finibus. Nullam ac lacus pulvinar, egestas felis ut, accumsan est.
-p.
- Pellentesque sagittis vehicula sem quis luctus. Proin sodales magna in lorem
- hendrerit aliquam. Integer eu varius orci. Vestibulum ante ipsum primis in
- faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ante ipsum
- primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut at mauris
- nibh. Suspendisse maximus ac eros at vestibulum.
-p.
- Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque egestas
- tortor et dui consequat faucibus. Nunc vitae odio ornare, venenatis ligula a,
- vulputate nisl. Aenean congue varius ex, sit amet bibendum odio posuere at.
- Nulla facilisi. In finibus, nulla vitae tincidunt ornare, sapien nulla
- fermentum mauris, sed consectetur tortor arcu eget arcu. Vestibulum vel quam
- enim.
diff --git a/src/content/about.md b/src/content/about.md
@@ -0,0 +1,46 @@
+---
+title: About Us
+component: ContentPage
+---
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean consequat
+tortor fermentum mi fermentum dignissim. Nullam vel ipsum ut ligula elementum
+lobortis. Maecenas aliquam, massa laoreet lacinia pretium, nisi urna venenatis
+tortor, nec imperdiet tellus libero efficitur metus. Fusce semper posuere
+ligula, et facilisis metus bibendum interdum. Mauris at mauris sit amet sem
+pharetra commodo a eu leo. Nam at est non risus cursus maximus. Nam feugiat
+augue libero, id consectetur tortor bibendum non. Quisque nec fringilla lorem.
+Nullam efficitur vulputate mauris, nec maximus leo dignissim id.
+
+In hac habitasse platea dictumst. Duis sagittis dui ac ex suscipit maximus.
+Morbi pellentesque venenatis felis sed convallis. Nulla varius, nibh vitae
+placerat tempus, mauris sem elementum ipsum, eget sollicitudin nisl est vel
+purus. Fusce malesuada odio velit, non cursus leo fermentum id. Cras pharetra
+sodales fringilla. Etiam quis est a dolor egestas pellentesque. Maecenas non
+scelerisque purus, congue cursus arcu. Donec vel dapibus mi. Mauris maximus
+posuere placerat. Sed et libero eu nibh tristique mollis a eget lectus. Donec
+interdum augue sollicitudin vehicula hendrerit. Vivamus justo orci, molestie
+ac sollicitudin ac, lobortis at tellus. Etiam rhoncus ullamcorper risus eu
+tempor. Sed porttitor, neque ac efficitur gravida, arcu lacus pharetra dui, in
+consequat elit tellus auctor nulla. Donec placerat elementum diam, vitae
+imperdiet lectus luctus at.
+
+Nullam eu feugiat mi. Quisque nec tristique nisl, dignissim dictum leo. Nam
+non quam nisi. Donec rutrum turpis ac diam blandit, id pulvinar mauris
+suscipit. Pellentesque tincidunt libero ultricies risus iaculis, sit amet
+consequat velit blandit. Fusce quis varius nulla. Nullam nisi nisi, suscipit
+ut magna quis, feugiat porta nibh. Sed id enim lectus. Suspendisse elementum
+justo sapien, sit amet consequat orci accumsan et. Aliquam ornare ullamcorper
+sem sed finibus. Nullam ac lacus pulvinar, egestas felis ut, accumsan est.
+
+Pellentesque sagittis vehicula sem quis luctus. Proin sodales magna in lorem
+hendrerit aliquam. Integer eu varius orci. Vestibulum ante ipsum primis in
+faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut at mauris
+nibh. Suspendisse maximus ac eros at vestibulum.
+
+Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque egestas
+tortor et dui consequat faucibus. Nunc vitae odio ornare, venenatis ligula a,
+vulputate nisl. Aenean congue varius ex, sit amet bibendum odio posuere at.
+Nulla facilisi. In finibus, nulla vitae tincidunt ornare, sapien nulla
+fermentum mauris, sed consectetur tortor arcu eget arcu. Vestibulum vel quam
+enim.
diff --git a/src/content/index.jade b/src/content/index.jade
@@ -1,22 +0,0 @@
----
-title: React.js Starter Kit
-component: ContentPage
----
-div
- div
- h3 Runtime Components
- dl
- dt <a href="https://facebook.github.io/react/">React</a>
- dd A JavaScript library for building user interfaces, developed by Facebook
- dt <a href="http://facebook.github.io/flux/">Flux</a>
- dd Application architecture for building user interfaces
- div
- h3 Development Tools
- dl
- dt <a href="http://webpack.github.io/">Webpack</a>
- dd Compiles front-end source code into modules / bundles
- dt <a href="http://www.browsersync.io/">BrowserSync</a>
- dd A lightweight HTTP server for development
- div
- h3 Fork me on GitHub
- p <a href="https://github.com/kriasoft/react-starter-kit">github.com/kriasoft/react-starter-kit</a>
diff --git a/src/content/index.md b/src/content/index.md
@@ -0,0 +1,19 @@
+---
+title: React.js Starter Kit
+component: ContentPage
+---
+### Runtime Components
+
+[React](https://facebook.github.io/react/) - A JavaScript library for building user interfaces, developed by Facebook
+
+[Flux](http://facebook.github.io/flux/) - Application architecture for building user interfaces
+
+### Development Tools
+
+[Webpack](http://webpack.github.io/) - Compiles front-end source code into modules / bundles
+
+[BrowserSync](http://www.browsersync.io/) - A lightweight HTTP server for development
+
+### Fork me on GitHub
+
+[github.com/kriasoft/react-starter-kit](https://github.com/kriasoft/react-starter-kit)
diff --git a/src/content/privacy.jade b/src/content/privacy.jade
@@ -1,52 +0,0 @@
----
-title: Privacy Policy
-component: ContentPage
----
-mixin breadcrumb
- ol
- li <a href="/">Home</a>
- li <a href="/privacy">Privacy</a>
-
-p.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean consequat
- tortor fermentum mi fermentum dignissim. Nullam vel ipsum ut ligula elementum
- lobortis. Maecenas aliquam, massa laoreet lacinia pretium, nisi urna venenatis
- tortor, nec imperdiet tellus libero efficitur metus. Fusce semper posuere
- ligula, et facilisis metus bibendum interdum. Mauris at mauris sit amet sem
- pharetra commodo a eu leo. Nam at est non risus cursus maximus. Nam feugiat
- augue libero, id consectetur tortor bibendum non. Quisque nec fringilla lorem.
- Nullam efficitur vulputate mauris, nec maximus leo dignissim id.
-p.
- In hac habitasse platea dictumst. Duis sagittis dui ac ex suscipit maximus.
- Morbi pellentesque venenatis felis sed convallis. Nulla varius, nibh vitae
- placerat tempus, mauris sem elementum ipsum, eget sollicitudin nisl est vel
- purus. Fusce malesuada odio velit, non cursus leo fermentum id. Cras pharetra
- sodales fringilla. Etiam quis est a dolor egestas pellentesque. Maecenas non
- scelerisque purus, congue cursus arcu. Donec vel dapibus mi. Mauris maximus
- posuere placerat. Sed et libero eu nibh tristique mollis a eget lectus. Donec
- interdum augue sollicitudin vehicula hendrerit. Vivamus justo orci, molestie
- ac sollicitudin ac, lobortis at tellus. Etiam rhoncus ullamcorper risus eu
- tempor. Sed porttitor, neque ac efficitur gravida, arcu lacus pharetra dui, in
- consequat elit tellus auctor nulla. Donec placerat elementum diam, vitae
- imperdiet lectus luctus at.
-p.
- Nullam eu feugiat mi. Quisque nec tristique nisl, dignissim dictum leo. Nam
- non quam nisi. Donec rutrum turpis ac diam blandit, id pulvinar mauris
- suscipit. Pellentesque tincidunt libero ultricies risus iaculis, sit amet
- consequat velit blandit. Fusce quis varius nulla. Nullam nisi nisi, suscipit
- ut magna quis, feugiat porta nibh. Sed id enim lectus. Suspendisse elementum
- justo sapien, sit amet consequat orci accumsan et. Aliquam ornare ullamcorper
- sem sed finibus. Nullam ac lacus pulvinar, egestas felis ut, accumsan est.
-p.
- Pellentesque sagittis vehicula sem quis luctus. Proin sodales magna in lorem
- hendrerit aliquam. Integer eu varius orci. Vestibulum ante ipsum primis in
- faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ante ipsum
- primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut at mauris
- nibh. Suspendisse maximus ac eros at vestibulum.
-p.
- Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque egestas
- tortor et dui consequat faucibus. Nunc vitae odio ornare, venenatis ligula a,
- vulputate nisl. Aenean congue varius ex, sit amet bibendum odio posuere at.
- Nulla facilisi. In finibus, nulla vitae tincidunt ornare, sapien nulla
- fermentum mauris, sed consectetur tortor arcu eget arcu. Vestibulum vel quam
- enim.
diff --git a/src/content/privacy.md b/src/content/privacy.md
@@ -0,0 +1,46 @@
+---
+title: Privacy Policy
+component: ContentPage
+---
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean consequat
+tortor fermentum mi fermentum dignissim. Nullam vel ipsum ut ligula elementum
+lobortis. Maecenas aliquam, massa laoreet lacinia pretium, nisi urna venenatis
+tortor, nec imperdiet tellus libero efficitur metus. Fusce semper posuere
+ligula, et facilisis metus bibendum interdum. Mauris at mauris sit amet sem
+pharetra commodo a eu leo. Nam at est non risus cursus maximus. Nam feugiat
+augue libero, id consectetur tortor bibendum non. Quisque nec fringilla lorem.
+Nullam efficitur vulputate mauris, nec maximus leo dignissim id.
+
+In hac habitasse platea dictumst. Duis sagittis dui ac ex suscipit maximus.
+Morbi pellentesque venenatis felis sed convallis. Nulla varius, nibh vitae
+placerat tempus, mauris sem elementum ipsum, eget sollicitudin nisl est vel
+purus. Fusce malesuada odio velit, non cursus leo fermentum id. Cras pharetra
+sodales fringilla. Etiam quis est a dolor egestas pellentesque. Maecenas non
+scelerisque purus, congue cursus arcu. Donec vel dapibus mi. Mauris maximus
+posuere placerat. Sed et libero eu nibh tristique mollis a eget lectus. Donec
+interdum augue sollicitudin vehicula hendrerit. Vivamus justo orci, molestie
+ac sollicitudin ac, lobortis at tellus. Etiam rhoncus ullamcorper risus eu
+tempor. Sed porttitor, neque ac efficitur gravida, arcu lacus pharetra dui, in
+consequat elit tellus auctor nulla. Donec placerat elementum diam, vitae
+imperdiet lectus luctus at.
+
+Nullam eu feugiat mi. Quisque nec tristique nisl, dignissim dictum leo. Nam
+non quam nisi. Donec rutrum turpis ac diam blandit, id pulvinar mauris
+suscipit. Pellentesque tincidunt libero ultricies risus iaculis, sit amet
+consequat velit blandit. Fusce quis varius nulla. Nullam nisi nisi, suscipit
+ut magna quis, feugiat porta nibh. Sed id enim lectus. Suspendisse elementum
+justo sapien, sit amet consequat orci accumsan et. Aliquam ornare ullamcorper
+sem sed finibus. Nullam ac lacus pulvinar, egestas felis ut, accumsan est.
+
+Pellentesque sagittis vehicula sem quis luctus. Proin sodales magna in lorem
+hendrerit aliquam. Integer eu varius orci. Vestibulum ante ipsum primis in
+faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut at mauris
+nibh. Suspendisse maximus ac eros at vestibulum.
+
+Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque egestas
+tortor et dui consequat faucibus. Nunc vitae odio ornare, venenatis ligula a,
+vulputate nisl. Aenean congue varius ex, sit amet bibendum odio posuere at.
+Nulla facilisi. In finibus, nulla vitae tincidunt ornare, sapien nulla
+fermentum mauris, sed consectetur tortor arcu eget arcu. Vestibulum vel quam
+enim.
diff --git a/src/data/queries/content.js b/src/data/queries/content.js
@@ -10,7 +10,6 @@
import fs from 'fs';
import { join } from 'path';
import Promise from 'bluebird';
-import jade from 'jade';
import fm from 'front-matter';
import MarkdownIt from 'markdown-it';
@@ -23,7 +22,7 @@ import ContentType from '../types/ContentType';
const md = new MarkdownIt();
-// A folder with Jade/Markdown/HTML content pages
+// A folder with Markdown/HTML content pages
const CONTENT_DIR = join(__dirname, './content');
// Extract 'front matter' metadata and generate HTML
@@ -31,9 +30,6 @@ const parseContent = (path, fileContent, extension) => {
const fmContent = fm(fileContent);
let htmlContent;
switch (extension) {
- case '.jade':
- htmlContent = jade.render(fmContent.body);
- break;
case '.md':
htmlContent = md.render(fmContent.body);
break;
@@ -73,7 +69,7 @@ async function resolveExtension(path, extension) {
}
async function resolveFileName(path) {
- const extensions = ['.jade', '.md', '.html'];
+ const extensions = ['.md', '.html'];
for (const extension of extensions) {
const maybeFileName = await resolveExtension(path, extension);
diff --git a/src/routes/error/ErrorPage.js b/src/routes/error/ErrorPage.js
@@ -11,7 +11,7 @@ import React, { PropTypes } from 'react';
import withStyles from 'isomorphic-style-loader/lib/withStyles';
import s from './ErrorPage.css';
-function ErrorPage({ error }, context) {
+export function ErrorPage({ error }, context) {
let title = 'Error';
let content = 'Sorry, a critical error occurred on this page.';
let errorMessage = null;
@@ -23,7 +23,9 @@ function ErrorPage({ error }, context) {
errorMessage = <pre>{error.stack}</pre>;
}
- context.setTitle(title);
+ if (context.setTitle) {
+ context.setTitle(title);
+ }
return (
<div>
diff --git a/src/server.js b/src/server.js
@@ -15,7 +15,11 @@ import bodyParser from 'body-parser';
import expressJwt from 'express-jwt';
import expressGraphQL from 'express-graphql';
import jwt from 'jsonwebtoken';
+import React from 'react';
import ReactDOM from 'react-dom/server';
+import Html from './components/Html';
+import { ErrorPage } from './routes/error/ErrorPage';
+import errorPageStyle from './routes/error/ErrorPage.css';
import UniversalRouter from 'universal-router';
import PrettyError from 'pretty-error';
import passport from './core/passport';
@@ -23,7 +27,7 @@ import models from './data/models';
import schema from './data/schema';
import routes from './routes';
import assets from './assets'; // eslint-disable-line import/no-unresolved
-import { port, auth, analytics } from './config';
+import { port, auth } from './config';
const app = express();
@@ -48,9 +52,7 @@ app.use(bodyParser.json());
app.use(expressJwt({
secret: auth.jwt.secret,
credentialsRequired: false,
- /* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
getToken: req => req.cookies.id_token,
- /* jscs:enable requireCamelCaseOrUpperCaseIdentifiers */
}));
app.use(passport.initialize());
@@ -84,12 +86,7 @@ app.get('*', async (req, res, next) => {
try {
let css = [];
let statusCode = 200;
- const template = require('./views/index.jade'); // eslint-disable-line global-require
- const data = { title: '', description: '', css: '', body: '', entry: assets.main.js };
-
- if (process.env.NODE_ENV === 'production') {
- data.trackingId = analytics.google.trackingId;
- }
+ const data = { title: '', description: '', style: '', script: assets.main.js, children: '' };
await UniversalRouter.resolve(routes, {
path: req.path,
@@ -104,14 +101,16 @@ app.get('*', async (req, res, next) => {
render(component, status = 200) {
css = [];
statusCode = status;
- data.body = ReactDOM.renderToString(component);
- data.css = css.join('');
+ data.children = ReactDOM.renderToString(component);
+ data.style = css.join('');
return true;
},
});
+ const html = ReactDOM.renderToStaticMarkup(<Html {...data} />);
+
res.status(statusCode);
- res.send(template(data));
+ res.send(`<!doctype html>${html}`);
} catch (err) {
next(err);
}
@@ -126,13 +125,18 @@ pe.skipPackage('express');
app.use((err, req, res, next) => { // eslint-disable-line no-unused-vars
console.log(pe.render(err)); // eslint-disable-line no-console
- const template = require('./views/error.jade'); // eslint-disable-line global-require
const statusCode = err.status || 500;
+ const html = ReactDOM.renderToStaticMarkup(
+ <Html
+ title="Internal Server Error"
+ description={err.message}
+ style={errorPageStyle._getCss()} // eslint-disable-line no-underscore-dangle
+ >
+ {ReactDOM.renderToString(<ErrorPage error={err} />)}
+ </Html>
+ );
res.status(statusCode);
- res.send(template({
- message: err.message,
- stack: process.env.NODE_ENV === 'production' ? '' : err.stack,
- }));
+ res.send(`<!doctype html>${html}`);
});
//
diff --git a/src/views/error.jade b/src/views/error.jade
@@ -1,61 +0,0 @@
-doctype html
-html(lang="en")
- head
- meta(charset="utf-8")
- title Internal Server Error
- meta(name="viewport", content="width=device-width, initial-scale=1")
- style.
- * {
- line-height: 1.2;
- margin: 0;
- }
-
- html {
- color: #888;
- display: table;
- font-family: sans-serif;
- height: 100%;
- text-align: center;
- width: 100%;
- }
-
- body {
- display: table-cell;
- vertical-align: middle;
- margin: 2em auto;
- }
-
- h1 {
- color: #555;
- font-size: 2em;
- font-weight: 400;
- }
-
- p {
- margin: 0 auto;
- width: 280px;
- }
-
- pre {
- text-align: left;
- margin-top: 2rem;
- }
-
- @media only screen and (max-width: 280px) {
-
- body, p {
- width: 95%;
- }
-
- h1 {
- font-size: 1.5em;
- margin: 0 0 0.3em;
- }
-
- }
-
- body
- h1 Internal Server Error
- p Sorry, something went wrong.
- pre= stack
-// IE needs 512+ bytes: http://blogs.msdn.com/b/ieinternals/archive/2010/08/19/http-error-pages-in-internet-explorer.aspx
diff --git a/src/views/index.jade b/src/views/index.jade
@@ -1,18 +0,0 @@
-doctype html
-html(class="no-js", lang="")
- head
- meta(charset="utf-8")
- meta(http-equiv="x-ua-compatible", content="ie=edge")
- title= title
- meta(name="description", description=description)
- meta(name="viewport", content="width=device-width, initial-scale=1")
- link(rel="apple-touch-icon", href="apple-touch-icon.png")
- style#css!= css
- body
- #app!= body
- script(src=entry)
- script.
- window.ga=function(){ga.q.push(arguments)};ga.q=[];ga.l=+new Date;
- ga('create','#{trackingId}','auto');ga('send','pageview')
- if trackingId
- script(src="https://www.google-analytics.com/analytics.js", async=true, defer=true)
diff --git a/tools/webpack.config.js b/tools/webpack.config.js
@@ -120,10 +120,6 @@ const config = {
name: DEBUG ? '[path][name].[ext]?[hash]' : '[hash].[ext]',
},
},
- {
- test: /\.jade$/,
- loader: 'jade-loader',
- },
],
},