diff --git a/gatsby-config.js b/gatsby-config.js
index 7886472..07ebf9e 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -9,7 +9,12 @@ const banner = process.env.BANNER || (process.env.NODE_ENV === 'production'
module.exports = {
siteMetadata: {
buildId,
- banner
+ banner,
+ defaultSyntax: 'js',
+ syntaxList: [
+ { id: 'js', label: 'JavaScript' },
+ { id: 'pcre', label: 'PCRE' }
+ ]
},
plugins: [
'gatsby-plugin-react-helmet',
diff --git a/src/components/App/index.js b/src/components/App/index.js
index f85ea43..de2459c 100644
--- a/src/components/App/index.js
+++ b/src/components/App/index.js
@@ -93,7 +93,8 @@ class App extends React.PureComponent {
const {
syntax,
expr,
- permalinkUrl
+ permalinkUrl,
+ syntaxList
} = this.props;
const {
loading,
@@ -105,7 +106,8 @@ class App extends React.PureComponent {
const formProps = {
onSubmit: this.handleSubmit,
syntax,
- expr
+ expr,
+ syntaxList
};
const actionProps = {
imageDetails,
@@ -137,7 +139,11 @@ class App extends React.PureComponent {
App.propTypes = {
syntax: PropTypes.string,
expr: PropTypes.string,
- permalinkUrl: PropTypes.string
+ permalinkUrl: PropTypes.string,
+ syntaxList: PropTypes.arrayOf(PropTypes.shape({
+ id: PropTypes.string,
+ label: PropTypes.string
+ }))
};
export default App;
diff --git a/src/components/Form/index.js b/src/components/Form/index.js
index 5a25b6f..8aae38a 100644
--- a/src/components/Form/index.js
+++ b/src/components/Form/index.js
@@ -5,11 +5,6 @@ import ExpandIcon from 'react-feather/dist/icons/chevrons-down';
import style from './style.module.css';
-const syntaxList = [
- { id: 'js', label: 'JavaScript' },
- { id: 'pcre', label: 'PCRE' }
-];
-
class Form extends React.PureComponent {
state = {
expr: this.props.expr,
@@ -36,6 +31,7 @@ class Form extends React.PureComponent {
render() {
const {
+ syntaxList,
children
} = this.props;
const { expr, syntax } = this.state;
@@ -70,6 +66,10 @@ class Form extends React.PureComponent {
Form.propTypes = {
expr: PropTypes.string,
syntax: PropTypes.string,
+ syntaxList: PropTypes.arrayOf(PropTypes.shape({
+ id: PropTypes.string,
+ label: PropTypes.string
+ })),
onSubmit: PropTypes.func.isRequired,
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.node),
diff --git a/src/pages/index.js b/src/pages/index.js
index 73b0d7a..a9c36e2 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -1,13 +1,24 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { Link } from 'gatsby';
+import { Link, graphql } from 'gatsby';
import URLSearchParams from '@ungap/url-search-params';
import Metadata from 'components/Metadata';
import Message from 'components/Message';
import App from 'components/App';
-const readURLHash = location => {
+export const query = graphql`
+ query IndexPageQuery {
+ site {
+ siteMetadata {
+ defaultSyntax
+ syntaxList { id, label }
+ }
+ }
+ }
+`;
+
+const readURLHash = (location, defaultSyntax) => {
const query = location.hash.slice(1);
const params = new URLSearchParams(query);
const permalinkUrl = query ? location.href : null;
@@ -21,14 +32,17 @@ const readURLHash = location => {
} else {
// Assuming old-style URL
return {
- syntax: 'js',
+ syntax: defaultSyntax,
expr: query,
permalinkUrl
};
}
};
-export const IndexPage = ({ location }) => <>
+export const IndexPage = ({
+ location,
+ data: { site: { siteMetadata } }
+}) => <>