2018-08-23 16:29:26 +01:00
|
|
|
import React from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { Provider } from 'react-redux';
|
|
|
|
|
2018-09-30 11:37:19 +01:00
|
|
|
import headComponents from './src/head';
|
2018-08-23 16:29:26 +01:00
|
|
|
import { createStore } from './src/redux/createStore';
|
|
|
|
|
2019-02-28 15:44:35 +00:00
|
|
|
import layoutSelector from './utils/gatsby/layoutSelector';
|
2018-10-04 14:47:55 +01:00
|
|
|
|
2018-08-23 16:29:26 +01:00
|
|
|
const store = createStore();
|
|
|
|
|
|
|
|
export const wrapRootElement = ({ element }) => {
|
2019-02-20 15:41:33 +03:00
|
|
|
return <Provider store={store}>{element}</Provider>;
|
2018-08-23 16:29:26 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
wrapRootElement.propTypes = {
|
|
|
|
element: PropTypes.any
|
|
|
|
};
|
2018-09-30 11:37:19 +01:00
|
|
|
|
2019-10-18 17:45:34 +02:00
|
|
|
// TODO: put these in a common utils file.
|
|
|
|
const mathJaxCdn = {
|
|
|
|
address:
|
|
|
|
'https://cdnjs.cloudflare.com/ajax/libs/mathjax/' +
|
|
|
|
'2.7.4/MathJax.js?config=TeX-AMS_HTML',
|
2019-10-30 21:46:39 +09:00
|
|
|
id: 'mathjax',
|
2019-10-18 17:45:34 +02:00
|
|
|
key: 'mathjax',
|
|
|
|
type: 'text/javascript'
|
|
|
|
};
|
|
|
|
|
|
|
|
const stripeScript = {
|
|
|
|
address: 'https://js.stripe.com/v3/',
|
|
|
|
id: 'stripe-js',
|
|
|
|
key: 'stripe-js',
|
|
|
|
type: 'text/javascript'
|
|
|
|
};
|
|
|
|
|
|
|
|
const challengeRE = new RegExp('/learn/[^/]+/[^/]+/[^/]+/?$');
|
|
|
|
const donateRE = new RegExp('/donate/?$');
|
|
|
|
|
2019-02-28 15:44:35 +00:00
|
|
|
export const wrapPageElement = layoutSelector;
|
|
|
|
|
2019-10-18 17:45:34 +02:00
|
|
|
export const onRenderBody = ({
|
|
|
|
pathname,
|
|
|
|
setHeadComponents,
|
|
|
|
setPostBodyComponents
|
|
|
|
}) => {
|
2018-09-30 11:37:19 +01:00
|
|
|
setHeadComponents([...headComponents]);
|
2019-10-18 17:45:34 +02:00
|
|
|
const scripts = [
|
|
|
|
<script
|
|
|
|
async={true}
|
|
|
|
key='gtag-script'
|
|
|
|
src='https://www.googletagmanager.com/gtag/js?id=AW-795617839'
|
|
|
|
/>,
|
|
|
|
<script
|
|
|
|
dangerouslySetInnerHTML={{
|
|
|
|
__html: `
|
|
|
|
window.dataLayer = window.dataLayer || [];
|
|
|
|
function gtag(){dataLayer.push(arguments);}
|
|
|
|
gtag('js', new Date());
|
|
|
|
gtag('config', 'AW-795617839');
|
|
|
|
`
|
|
|
|
}}
|
|
|
|
key='gtag-dataLayer'
|
|
|
|
/>
|
|
|
|
];
|
|
|
|
|
2020-01-07 20:14:12 +09:00
|
|
|
if (
|
|
|
|
pathname.includes('/learn/coding-interview-prep/rosetta-code') ||
|
|
|
|
pathname.includes('/learn/coding-interview-prep/project-euler')
|
|
|
|
) {
|
2019-10-18 17:45:34 +02:00
|
|
|
scripts.push(
|
2018-11-29 12:12:15 +00:00
|
|
|
<script
|
2019-10-30 21:46:39 +09:00
|
|
|
async={false}
|
|
|
|
id={mathJaxCdn.id}
|
2019-10-18 17:45:34 +02:00
|
|
|
key={mathJaxCdn.key}
|
|
|
|
src={mathJaxCdn.address}
|
|
|
|
type={mathJaxCdn.type}
|
|
|
|
/>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (challengeRE.test(pathname) || donateRE.test(pathname)) {
|
|
|
|
scripts.push(
|
2018-11-29 12:12:15 +00:00
|
|
|
<script
|
2019-10-18 17:45:34 +02:00
|
|
|
async={true}
|
|
|
|
id={stripeScript.id}
|
|
|
|
key={stripeScript.key}
|
|
|
|
src={stripeScript.address}
|
2019-10-30 21:46:39 +09:00
|
|
|
type={stripeScript.type}
|
2018-11-29 12:12:15 +00:00
|
|
|
/>
|
2019-10-18 17:45:34 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
setPostBodyComponents(scripts.filter(Boolean));
|
2018-09-30 11:37:19 +01:00
|
|
|
};
|