Inital commit
This commit is contained in:
committed by
Mrugesh Mohapatra
parent
f022177352
commit
e856f0538c
11
packages/learn/.gitignore
vendored
Normal file
11
packages/learn/.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# secrets
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Project dependencies
|
||||||
|
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
|
||||||
|
.cache
|
||||||
|
node_modules
|
||||||
|
yarn-error.log
|
||||||
|
|
||||||
|
# Build directory
|
||||||
|
/public
|
5
packages/learn/.prettierrc
Normal file
5
packages/learn/.prettierrc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"semi": true,
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "none"
|
||||||
|
}
|
22
packages/learn/LICENSE
Normal file
22
packages/learn/LICENSE
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 gatsbyjs
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
26
packages/learn/README.md
Normal file
26
packages/learn/README.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# gatsby-starter-default
|
||||||
|
The default Gatsby starter.
|
||||||
|
|
||||||
|
For an overview of the project structure please refer to the [Gatsby documentation - Building with Components](https://www.gatsbyjs.org/docs/building-with-components/).
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Make sure that you have the Gatsby CLI program installed:
|
||||||
|
```sh
|
||||||
|
npm install --global gatsby-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
And run from your CLI:
|
||||||
|
```sh
|
||||||
|
gatsby new gatsby-example-site
|
||||||
|
```
|
||||||
|
|
||||||
|
Then you can run it by:
|
||||||
|
```sh
|
||||||
|
cd gatsby-example-site
|
||||||
|
npm run develop
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deploy
|
||||||
|
|
||||||
|
[](https://app.netlify.com/start/deploy?repository=https://github.com/gatsbyjs/gatsby-starter-default)
|
7
packages/learn/gatsby-browser.js
Normal file
7
packages/learn/gatsby-browser.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/**
|
||||||
|
* Implement Gatsby's Browser APIs in this file.
|
||||||
|
*
|
||||||
|
* See: https://www.gatsbyjs.org/docs/browser-apis/
|
||||||
|
*/
|
||||||
|
|
||||||
|
// You can delete this file if you're not using it
|
21
packages/learn/gatsby-config.js
Normal file
21
packages/learn/gatsby-config.js
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
const path = require('path');
|
||||||
|
const { getChallengesByFile } = require('../seed/getChallenges');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
siteMetadata: {
|
||||||
|
title: 'freeCodeCamp | Learn to code and help non-profits',
|
||||||
|
siteUrl: 'https://learn.freecodecamp.org'
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
'gatsby-plugin-react-helmet',
|
||||||
|
{
|
||||||
|
resolve: 'fcc-source-challenges',
|
||||||
|
options: {
|
||||||
|
name: 'challenges',
|
||||||
|
path: path.resolve(__dirname, '../seed/challenges'),
|
||||||
|
source: getChallengesByFile
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'gatsby-transformer-json'
|
||||||
|
]
|
||||||
|
};
|
7
packages/learn/gatsby-node.js
Normal file
7
packages/learn/gatsby-node.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/**
|
||||||
|
* Implement Gatsby's Node APIs in this file.
|
||||||
|
*
|
||||||
|
* See: https://www.gatsbyjs.org/docs/node-apis/
|
||||||
|
*/
|
||||||
|
|
||||||
|
// You can delete this file if you're not using it
|
7
packages/learn/gatsby-ssr.js
Normal file
7
packages/learn/gatsby-ssr.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/**
|
||||||
|
* Implement Gatsby's SSR (Server Side Rendering) APIs in this file.
|
||||||
|
*
|
||||||
|
* See: https://www.gatsbyjs.org/docs/ssr-apis/
|
||||||
|
*/
|
||||||
|
|
||||||
|
// You can delete this file if you're not using it
|
12559
packages/learn/package-lock.json
generated
Normal file
12559
packages/learn/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
27
packages/learn/package.json
Normal file
27
packages/learn/package.json
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "gatsby-starter-default",
|
||||||
|
"description": "Gatsby default starter",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"author": "Kyle Mathews <mathews.kyle@gmail.com>",
|
||||||
|
"dependencies": {
|
||||||
|
"gatsby": "^1.9.238",
|
||||||
|
"gatsby-link": "^1.6.39",
|
||||||
|
"gatsby-plugin-react-helmet": "^2.0.8",
|
||||||
|
"gatsby-source-filesystem": "^1.5.27",
|
||||||
|
"gatsby-transformer-json": "^1.0.16",
|
||||||
|
"react-helmet": "^5.2.0"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"gatsby"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"scripts": {
|
||||||
|
"build": "gatsby build",
|
||||||
|
"develop": "gatsby develop",
|
||||||
|
"format": "prettier --write '{src,plugins}/**/*.js'",
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"prettier": "^1.11.1"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
const crypto = require('crypto');
|
||||||
|
|
||||||
|
function createChallengeNodes(
|
||||||
|
path,
|
||||||
|
pluginOptions = {}
|
||||||
|
) {
|
||||||
|
const { source } = pluginOptions;
|
||||||
|
return new Promise(resolve => {
|
||||||
|
const challengeNodes = source(path)
|
||||||
|
.reduce((nodes, { challenges, name }) => {
|
||||||
|
const challengeNodes = challenges.map(challenge => {
|
||||||
|
const contentDigest = crypto
|
||||||
|
.createHash('md5')
|
||||||
|
.update(JSON.stringify(challenge))
|
||||||
|
.digest('hex');
|
||||||
|
const internal = {
|
||||||
|
contentDigest,
|
||||||
|
type: 'ChallengeNode'
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.parse(
|
||||||
|
JSON.stringify({
|
||||||
|
id: challenge.id,
|
||||||
|
children: [],
|
||||||
|
parent: null,
|
||||||
|
internal,
|
||||||
|
sourceInstanceName: pluginOptions.name || '__PROGRAMATTIC__',
|
||||||
|
...challenge
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
return nodes.concat(challengeNodes);
|
||||||
|
}, []);
|
||||||
|
resolve(challengeNodes);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.createChallengeNodes = createChallengeNodes;
|
@ -0,0 +1,45 @@
|
|||||||
|
const { GraphQLString } = require('graphql');
|
||||||
|
const fs = require('fs-extra');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
module.exports = ({ type, getNodeAndSavePathDependency, pathPrefix = '' }) => {
|
||||||
|
if (type.name !== 'File') {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
publicURL: {
|
||||||
|
type: GraphQLString,
|
||||||
|
args: {},
|
||||||
|
description: 'Copy file to static directory and return public url to it',
|
||||||
|
resolve: (file, fieldArgs, context) => {
|
||||||
|
const details = getNodeAndSavePathDependency(file.id, context.path);
|
||||||
|
const fileName = `${file.name}-${file.internal.contentDigest}${
|
||||||
|
details.ext
|
||||||
|
}`;
|
||||||
|
|
||||||
|
const publicPath = path.join(
|
||||||
|
process.cwd(),
|
||||||
|
'public',
|
||||||
|
'static',
|
||||||
|
fileName
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!fs.existsSync(publicPath)) {
|
||||||
|
fs.copy(details.absolutePath, publicPath, err => {
|
||||||
|
if (err) {
|
||||||
|
console.error(
|
||||||
|
`error copying file from ${
|
||||||
|
details.absolutePath
|
||||||
|
} to ${publicPath}`,
|
||||||
|
err
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${pathPrefix}/static/${fileName}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
111
packages/learn/plugins/fcc-source-challenges/gatsby-node.js
Normal file
111
packages/learn/plugins/fcc-source-challenges/gatsby-node.js
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
const chokidar = require('chokidar');
|
||||||
|
const fs = require('fs-extra');
|
||||||
|
|
||||||
|
const { createId, createChallengeNodes } = require('./create-Challenge-nodes');
|
||||||
|
|
||||||
|
exports.sourceNodes = (
|
||||||
|
{ boundActionCreators, getNode, reporter },
|
||||||
|
pluginOptions
|
||||||
|
) => {
|
||||||
|
if (!(pluginOptions && pluginOptions.path)) {
|
||||||
|
reporter.panic(`
|
||||||
|
"path" is a required option for gatsby-source-filesystem
|
||||||
|
See docs here - https://www.gatsbyjs.org/packages/gatsby-source-filesystem/
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate that the path exists.
|
||||||
|
if (!fs.existsSync(pluginOptions.path)) {
|
||||||
|
reporter.panic(`
|
||||||
|
The path passed to fcc-source-challenges does not exist on your file system:
|
||||||
|
${pluginOptions.path}
|
||||||
|
Please use the path to the seed directory.
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof pluginOptions.source !== 'function') {
|
||||||
|
reporter.panic(`
|
||||||
|
"source" is a required option for fcc-source-challenges. It must be a function
|
||||||
|
that delivers challenge files to the plugin
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { createNode, deleteNode } = boundActionCreators;
|
||||||
|
|
||||||
|
let ready = false;
|
||||||
|
|
||||||
|
const watcher = chokidar.watch(pluginOptions.path, {
|
||||||
|
ignored: [
|
||||||
|
'**/*.un~',
|
||||||
|
'**/.gitignore',
|
||||||
|
'**/.npmignore',
|
||||||
|
'**/.babelrc',
|
||||||
|
'**/yarn.lock',
|
||||||
|
'**/node_modules',
|
||||||
|
'../**/dist/**'
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const createAndProcessNodes = path =>
|
||||||
|
createChallengeNodes(path, pluginOptions).then(nodes => nodes.forEach(node => createNode(node))
|
||||||
|
);
|
||||||
|
|
||||||
|
// For every path that is reported before the 'ready' event, we throw them
|
||||||
|
// into a queue and then flush the queue when 'ready' event arrives.
|
||||||
|
// After 'ready', we handle the 'add' event without putting it into a queue.
|
||||||
|
let pathQueue = [];
|
||||||
|
const flushPathQueue = () => {
|
||||||
|
let queue = pathQueue.slice();
|
||||||
|
pathQueue = [];
|
||||||
|
return Promise.all(queue.map(createAndProcessNodes));
|
||||||
|
};
|
||||||
|
|
||||||
|
watcher.on('add', path => {
|
||||||
|
if (ready) {
|
||||||
|
reporter.info(`added file at ${path}`);
|
||||||
|
createAndProcessNodes(path).catch(err => reporter.error(err));
|
||||||
|
} else {
|
||||||
|
pathQueue.push(path);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
watcher.on('change', path => {
|
||||||
|
reporter.info(`changed file at ${path}`);
|
||||||
|
createAndProcessNodes(path).catch(err => reporter.error(err));
|
||||||
|
});
|
||||||
|
|
||||||
|
watcher.on('unlink', path => {
|
||||||
|
reporter.info(`file deleted at ${path}`);
|
||||||
|
const node = getNode(createId(path));
|
||||||
|
// It's possible the file node was never created as sometimes tools will
|
||||||
|
// write and then immediately delete temporary files to the file system.
|
||||||
|
if (node) {
|
||||||
|
deleteNode(node.id, node);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
watcher.on('addDir', path => {
|
||||||
|
if (ready) {
|
||||||
|
reporter.info(`added directory at ${path}`);
|
||||||
|
createAndProcessNodes(path).catch(err => reporter.error(err));
|
||||||
|
} else {
|
||||||
|
pathQueue.push(path);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
watcher.on('unlinkDir', path => {
|
||||||
|
reporter.info(`directory deleted at ${path}`);
|
||||||
|
const node = getNode(createId(path));
|
||||||
|
deleteNode(node.id, node);
|
||||||
|
});
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
watcher.on('ready', () => {
|
||||||
|
if (ready) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ready = true;
|
||||||
|
flushPathQueue().then(resolve, reject);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"name": "fcc-source-challenges",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"dependencies": {
|
||||||
|
"chokidar": "^2.0.2",
|
||||||
|
"fs-extra": "^5.0.0",
|
||||||
|
"graphql": "^0.13.2"
|
||||||
|
}
|
||||||
|
}
|
1312
packages/learn/plugins/fcc-source-challenges/yarn.lock
Normal file
1312
packages/learn/plugins/fcc-source-challenges/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
1
packages/learn/sample.env
Normal file
1
packages/learn/sample.env
Normal file
@ -0,0 +1 @@
|
|||||||
|
MONGOHQ_URL='mongodb://localhost:27017/freecodecamp'
|
33
packages/learn/src/components/Header/index.js
Normal file
33
packages/learn/src/components/Header/index.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import Link from 'gatsby-link';
|
||||||
|
|
||||||
|
const Header = () => (
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
background: 'rebeccapurple',
|
||||||
|
marginBottom: '1.45rem'
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
margin: '0 auto',
|
||||||
|
maxWidth: 960,
|
||||||
|
padding: '1.45rem 1.0875rem'
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<h1 style={{ margin: 0 }}>
|
||||||
|
<Link
|
||||||
|
to="/"
|
||||||
|
style={{
|
||||||
|
color: 'white',
|
||||||
|
textDecoration: 'none'
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Gatsby
|
||||||
|
</Link>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default Header;
|
624
packages/learn/src/layouts/index.css
Normal file
624
packages/learn/src/layouts/index.css
Normal file
@ -0,0 +1,624 @@
|
|||||||
|
html {
|
||||||
|
font-family: sans-serif;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
main,
|
||||||
|
menu,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
audio,
|
||||||
|
canvas,
|
||||||
|
progress,
|
||||||
|
video {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
[hidden],
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
-webkit-text-decoration-skip: objects;
|
||||||
|
}
|
||||||
|
a:active,
|
||||||
|
a:hover {
|
||||||
|
outline-width: 0;
|
||||||
|
}
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: none;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration: underline dotted;
|
||||||
|
}
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: inherit;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: .67em 0;
|
||||||
|
}
|
||||||
|
mark {
|
||||||
|
background-color: #ff0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
sub {
|
||||||
|
bottom: -.25em;
|
||||||
|
}
|
||||||
|
sup {
|
||||||
|
top: -.5em;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
pre,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
figure {
|
||||||
|
margin: 1em 40px;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font: inherit;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
optgroup {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
[type=reset],
|
||||||
|
[type=submit],
|
||||||
|
button,
|
||||||
|
html [type=button] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
[type=button]::-moz-focus-inner,
|
||||||
|
[type=reset]::-moz-focus-inner,
|
||||||
|
[type=submit]::-moz-focus-inner,
|
||||||
|
button::-moz-focus-inner {
|
||||||
|
border-style: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
[type=button]:-moz-focusring,
|
||||||
|
[type=reset]:-moz-focusring,
|
||||||
|
[type=submit]:-moz-focusring,
|
||||||
|
button:-moz-focusring {
|
||||||
|
outline: 1px dotted ButtonText;
|
||||||
|
}
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid silver;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: .35em .625em .75em;
|
||||||
|
}
|
||||||
|
legend {
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: inherit;
|
||||||
|
display: table;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
[type=checkbox],
|
||||||
|
[type=radio] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
[type=number]::-webkit-inner-spin-button,
|
||||||
|
[type=number]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
[type=search] {
|
||||||
|
-webkit-appearance: textfield;
|
||||||
|
outline-offset: -2px;
|
||||||
|
}
|
||||||
|
[type=search]::-webkit-search-cancel-button,
|
||||||
|
[type=search]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
::-webkit-input-placeholder {
|
||||||
|
color: inherit;
|
||||||
|
opacity: .54;
|
||||||
|
}
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
font: inherit;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
font: 112.5%/1.45em georgia, serif;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
* {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
*:before {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
*:after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
color: hsla(0, 0%, 0%, 0.8);
|
||||||
|
font-family: georgia, serif;
|
||||||
|
font-weight: normal;
|
||||||
|
word-wrap: break-word;
|
||||||
|
font-kerning: normal;
|
||||||
|
-moz-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||||
|
-ms-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||||
|
-webkit-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||||
|
font-feature-settings: "kern", "liga", "clig", "calt";
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
color: inherit;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||||
|
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
font-size: 2.25rem;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
color: inherit;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||||
|
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
font-size: 1.62671rem;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
color: inherit;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||||
|
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
font-size: 1.38316rem;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
color: inherit;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||||
|
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
h5 {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
color: inherit;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||||
|
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
font-size: 0.85028rem;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
h6 {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
color: inherit;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||||
|
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
font-size: 0.78405rem;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
hgroup {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
ul {
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-image: none;
|
||||||
|
}
|
||||||
|
ol {
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-image: none;
|
||||||
|
}
|
||||||
|
dl {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
dd {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
figure {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
line-height: 1.42;
|
||||||
|
background: hsla(0, 0%, 0%, 0.04);
|
||||||
|
border-radius: 3px;
|
||||||
|
overflow: auto;
|
||||||
|
word-wrap: normal;
|
||||||
|
padding: 1.45rem;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: 1.45rem;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
fieldset {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
blockquote {
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
margin-right: 1.45rem;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
form {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
noscript {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
iframe {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: calc(1.45rem - 1px);
|
||||||
|
background: hsla(0, 0%, 0%, 0.2);
|
||||||
|
border: none;
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
b {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
dt {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
margin-bottom: calc(1.45rem / 2);
|
||||||
|
}
|
||||||
|
ol li {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
ul li {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
li > ol {
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
margin-bottom: calc(1.45rem / 2);
|
||||||
|
margin-top: calc(1.45rem / 2);
|
||||||
|
}
|
||||||
|
li > ul {
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
margin-bottom: calc(1.45rem / 2);
|
||||||
|
margin-top: calc(1.45rem / 2);
|
||||||
|
}
|
||||||
|
blockquote *:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
li *:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
p *:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
li > p {
|
||||||
|
margin-bottom: calc(1.45rem / 2);
|
||||||
|
}
|
||||||
|
code {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
line-height: 1.45rem;
|
||||||
|
}
|
||||||
|
kbd {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
line-height: 1.45rem;
|
||||||
|
}
|
||||||
|
samp {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
line-height: 1.45rem;
|
||||||
|
}
|
||||||
|
abbr {
|
||||||
|
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
acronym {
|
||||||
|
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
|
||||||
|
cursor: help;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
thead {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
text-align: left;
|
||||||
|
border-bottom: 1px solid hsla(0, 0%, 0%, 0.12);
|
||||||
|
font-feature-settings: "tnum";
|
||||||
|
-moz-font-feature-settings: "tnum";
|
||||||
|
-ms-font-feature-settings: "tnum";
|
||||||
|
-webkit-font-feature-settings: "tnum";
|
||||||
|
padding-left: 0.96667rem;
|
||||||
|
padding-right: 0.96667rem;
|
||||||
|
padding-top: 0.725rem;
|
||||||
|
padding-bottom: calc(0.725rem - 1px);
|
||||||
|
}
|
||||||
|
th:first-child,
|
||||||
|
td:first-child {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
th:last-child,
|
||||||
|
td:last-child {
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
tt,
|
||||||
|
code {
|
||||||
|
background-color: hsla(0, 0%, 0%, 0.04);
|
||||||
|
border-radius: 3px;
|
||||||
|
font-family: "SFMono-Regular", Consolas, "Roboto Mono", "Droid Sans Mono",
|
||||||
|
"Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
padding: 0;
|
||||||
|
padding-top: 0.2em;
|
||||||
|
padding-bottom: 0.2em;
|
||||||
|
}
|
||||||
|
pre code {
|
||||||
|
background: none;
|
||||||
|
line-height: 1.42;
|
||||||
|
}
|
||||||
|
code:before,
|
||||||
|
code:after,
|
||||||
|
tt:before,
|
||||||
|
tt:after {
|
||||||
|
letter-spacing: -0.2em;
|
||||||
|
content: " ";
|
||||||
|
}
|
||||||
|
pre code:before,
|
||||||
|
pre code:after,
|
||||||
|
pre tt:before,
|
||||||
|
pre tt:after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 480px) {
|
||||||
|
html {
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
}
|
35
packages/learn/src/layouts/index.js
Normal file
35
packages/learn/src/layouts/index.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import Helmet from 'react-helmet';
|
||||||
|
|
||||||
|
import Header from '../components/Header';
|
||||||
|
import './index.css';
|
||||||
|
|
||||||
|
const TemplateWrapper = ({ children }) => (
|
||||||
|
<div>
|
||||||
|
<Helmet
|
||||||
|
title="Gatsby Default Starter"
|
||||||
|
meta={[
|
||||||
|
{ name: 'description', content: 'Sample' },
|
||||||
|
{ name: 'keywords', content: 'sample, something' }
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<Header />
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
margin: '0 auto',
|
||||||
|
maxWidth: 960,
|
||||||
|
padding: '0px 1.0875rem 1.45rem',
|
||||||
|
paddingTop: 0
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{children()}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
TemplateWrapper.propTypes = {
|
||||||
|
children: PropTypes.func
|
||||||
|
};
|
||||||
|
|
||||||
|
export default TemplateWrapper;
|
10
packages/learn/src/pages/404.js
Normal file
10
packages/learn/src/pages/404.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
const NotFoundPage = () => (
|
||||||
|
<div>
|
||||||
|
<h1>NOT FOUND</h1>
|
||||||
|
<p>You just hit a route that doesn't exist... the sadness.</p>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default NotFoundPage;
|
13
packages/learn/src/pages/index.js
Normal file
13
packages/learn/src/pages/index.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import Link from 'gatsby-link';
|
||||||
|
|
||||||
|
const IndexPage = () => (
|
||||||
|
<div>
|
||||||
|
<h1>Hi people</h1>
|
||||||
|
<p>Welcome to your new Gatsby site.</p>
|
||||||
|
<p>Now go build something great.</p>
|
||||||
|
<Link to="/page-2/">Go to page 2</Link>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default IndexPage;
|
12
packages/learn/src/pages/page-2.js
Normal file
12
packages/learn/src/pages/page-2.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import Link from 'gatsby-link';
|
||||||
|
|
||||||
|
const SecondPage = () => (
|
||||||
|
<div>
|
||||||
|
<h1>Hi from the second page</h1>
|
||||||
|
<p>Welcome to page 2</p>
|
||||||
|
<Link to="/">Go back to the homepage</Link>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default SecondPage;
|
8436
packages/learn/yarn.lock
Normal file
8436
packages/learn/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user