unpkg/modules/client/MainPage.js

73 lines
1.9 KiB
JavaScript
Raw Normal View History

2019-01-06 00:50:05 +00:00
import React from 'react';
import PropTypes from 'prop-types';
2019-01-06 00:50:05 +00:00
import createHTML from './utils/createHTML';
import x from './utils/execScript';
2019-01-06 00:50:05 +00:00
export default function MainPage({
title,
description,
favicon,
scripts,
styles,
data,
content
}) {
return (
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta httpEquiv="X-UA-Compatible" content="IE=edge,chrome=1" />
2019-01-06 00:50:05 +00:00
{description && <meta name="description" content={description} />}
<meta
name="viewport"
content="width=device-width,initial-scale=1,maximum-scale=1"
/>
<meta name="timestamp" content={new Date().toISOString()} />
2019-01-06 00:50:05 +00:00
{favicon && <link rel="shortcut icon" href={favicon} />}
2018-12-17 17:38:05 +00:00
{styles.map(s => (
<link key={s} rel="stylesheet" href={s} />
))}
{x(
2018-12-17 17:38:05 +00:00
'window.Promise || document.write(\'\\x3Cscript src="/_polyfills/es6-promise.min.js">\\x3C/script>\\x3Cscript>ES6Promise.polyfill()\\x3C/script>\')'
)}
{x(
2018-12-17 17:38:05 +00:00
'window.fetch || document.write(\'\\x3Cscript src="/_polyfills/fetch.min.js">\\x3C/script>\')'
)}
{x(`window.__DATA__ = ${JSON.stringify(data)}`)}
<title>{title}</title>
</head>
<body>
2018-07-31 22:34:34 +00:00
<div id="root" dangerouslySetInnerHTML={content} />
2018-12-17 17:38:05 +00:00
{scripts.map(s => (
<script key={s} src={s} />
))}
</body>
</html>
);
}
2019-01-06 00:50:05 +00:00
MainPage.defaultProps = {
title: 'UNPKG',
description: 'The CDN for everything on npm',
favicon: '/favicon.ico',
scripts: [],
styles: [],
data: {},
content: createHTML('')
};
2018-07-31 22:34:34 +00:00
const htmlType = PropTypes.shape({
__html: PropTypes.string
});
MainPage.propTypes = {
title: PropTypes.string,
description: PropTypes.string,
2019-01-06 00:50:05 +00:00
favicon: PropTypes.string,
scripts: PropTypes.arrayOf(PropTypes.string),
styles: PropTypes.arrayOf(PropTypes.string),
data: PropTypes.any,
2018-07-31 22:34:34 +00:00
content: htmlType
};