diff --git a/gatsby-config.js b/gatsby-config.js index 1b8d122e..ed0799f3 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -34,7 +34,7 @@ module.exports = { resolve: 'gatsby-source-filesystem', options: { name: 'pages', - path: `${__dirname}/src/pages` + path: `${__dirname}/src/pages`, }, }, { diff --git a/plugins/gatsby-transformer-home-example-code/gatsby-node.js b/plugins/gatsby-transformer-home-example-code/gatsby-node.js index 172ea06f..d9659dfa 100644 --- a/plugins/gatsby-transformer-home-example-code/gatsby-node.js +++ b/plugins/gatsby-transformer-home-example-code/gatsby-node.js @@ -1,18 +1,23 @@ -const crypto = require(`crypto`) +const crypto = require(`crypto`); // docblock goes here -const createContentDigest = obj => crypto - .createHash(`md5`) - .update(obj) - .digest(`hex`) +const createContentDigest = obj => + crypto + .createHash(`md5`) + .update(obj) + .digest(`hex`); // Store code snippets in GraphQL for the home page examples. // Snippets will be matched with markdown templates of the same name. exports.onCreateNode = async ({node, loadNodeContent, actions}) => { const {createNode} = actions; - const {absolutePath, ext, name, relativeDirectory, sourceInstanceName} = node + const {absolutePath, ext, name, relativeDirectory, sourceInstanceName} = node; - if (sourceInstanceName === 'content' && relativeDirectory === 'home/examples' && ext === '.js') { + if ( + sourceInstanceName === 'content' && + relativeDirectory === 'home/examples' && + ext === '.js' + ) { const code = await loadNodeContent(node); createNode({ id: name, diff --git a/src/components/CodeEditor/CodeEditor.js b/src/components/CodeEditor/CodeEditor.js index b199af5a..e5ebb80c 100644 --- a/src/components/CodeEditor/CodeEditor.js +++ b/src/components/CodeEditor/CodeEditor.js @@ -65,8 +65,10 @@ class CodeEditor extends Component { } return ( -
- +
+
)}
-
+
); } diff --git a/src/components/CodeExample/CodeExample.js b/src/components/CodeExample/CodeExample.js index 39b40fc1..7ee7360f 100644 --- a/src/components/CodeExample/CodeExample.js +++ b/src/components/CodeExample/CodeExample.js @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React, {Component} from 'react'; import {colors, media} from 'theme'; import CodeEditor from '../CodeEditor/CodeEditor'; @@ -7,16 +7,28 @@ class CodeExample extends Component { const {children, code, loaded} = this.props; return (
+ css={{ + marginTop: 40, + + '&:first-child': { + marginTop: 0, + }, + + [media.greaterThan('xlarge')]: { + marginTop: 80, + }, + }}> +
{children && (
)} - {loaded ? :

Loading code example...

} + {loaded ? ( + + ) : ( +

Loading code example...

+ )} +
- ) + ); } } diff --git a/src/pages/index.js b/src/pages/index.js index b4fade2b..2d2aa93e 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -22,24 +22,28 @@ import logoWhiteSvg from 'icons/logo-white.svg'; class Home extends Component { state = { - babelLoaded: false + babelLoaded: false, }; componentDidMount() { - loadScript(babelURL).then(() => { - this.setState({ - babelLoaded: true - }); - }, error => { - console.error('Babel failed to load.'); - }); + loadScript(babelURL).then( + () => { + this.setState({ + babelLoaded: true, + }); + }, + error => { + console.error('Babel failed to load.'); + }, + ); } + render() { const {babelLoaded} = this.state; const {data, location} = this.props; const {codeExamples, examples, marketing} = data; - const code = codeExamples.edges.reduce((lookup, { node }) => { + const code = codeExamples.edges.reduce((lookup, {node}) => { lookup[node.mdAbsolutePath] = node.code; return lookup; }, {}); @@ -187,7 +191,7 @@ class Home extends Component { whiteSpace: 'nowrap', }, }}> - {marketing.edges.map(({ node: column }, index) => ( + {marketing.edges.map(({node: column}, index) => (
{column.frontmatter.title} -
+
))}
@@ -253,27 +257,14 @@ class Home extends Component { />
- {examples.edges.map(({ node }, index) => ( -
( + - -

{node.frontmatter.title}

-
- -
+ code={code[node.fileAbsolutePath]} + loaded={babelLoaded}> +

{node.frontmatter.title}

+
+ ))}
diff --git a/src/utils/mountCodeExample.js b/src/utils/mountCodeExample.js deleted file mode 100644 index 41c35eef..00000000 --- a/src/utils/mountCodeExample.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * @emails react-core - */ - -import CodeEditor from '../components/CodeEditor'; -import React from 'react'; -import ReactDOM from 'react-dom'; - -// TODO This is a huge hack. -// Remark transform this template to split code examples and their targets apart. -const mountCodeExample = (containerId, code) => { - const container = document.getElementById(containerId); - const parent = container.parentElement; - - const children = Array.prototype.filter.call( - parent.children, - child => child !== container, - ); - children.forEach(child => parent.removeChild(child)); - - const description = children - .map(child => child.outerHTML) - .join('') - .replace(/`([^`]+)`/g, '$1'); - - ReactDOM.render( - - {
} - , - container, - ); -}; - -export default mountCodeExample;