UNPKG

react-torch

Version:

A lib to server-side render with react.

72 lines (71 loc) 4.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var react_1 = __importDefault(require("react")); var htmlescape_1 = require("../utils/htmlescape"); function createDocument(_a) { var dir = _a.dir, title = _a.title, context = _a.context, container = _a.container, element = _a.element, cdn = _a.cdn, assets = _a.assets, state = _a.state, mode = _a.mode, _b = _a.styles, styles = _b === void 0 ? [] : _b, _c = _a.scripts, scripts = _c === void 0 ? [] : _c, stateList = _a.stateList; var data = { context: context, container: container, state: state, }; var styleElements = styles.map(getStyle); var scriptElements = scripts.map(getScript); var assetsScriptElement = [ getSrcScript("" + cdn + assets.vendor, 'vendor'), getSrcScript("" + cdn + assets.index, 'index'), ]; return (react_1.default.createElement("html", null, react_1.default.createElement("head", null, react_1.default.createElement("title", null, title), react_1.default.createElement("meta", { charSet: "utf-8" }), react_1.default.createElement("meta", { httpEquiv: "X-UA-Compatible", content: "IE=edge" }), react_1.default.createElement("meta", { name: "viewport", content: "width=device-width,initial-scale=1.0" }), styleElements, scriptElements), react_1.default.createElement("body", null, react_1.default.createElement("noscript", null, react_1.default.createElement("strong", null, "We're sorry but ", title, " doesn't work properly without JavaScript enabled.You need to enable JavaScript to run this app.")), react_1.default.createElement("div", { id: "" + container }, element), react_1.default.createElement("script", { id: "__TORCH_DATA__", type: "application/json", dangerouslySetInnerHTML: { __html: (0, htmlescape_1.htmlEscapeJsonStringify)(data), } }), react_1.default.createElement("script", { type: "application/javascript", dangerouslySetInnerHTML: { __html: (0, htmlescape_1.htmlEscapeJsonStringify)("\n (function() {\n window.__DEV__ = " + (context.env === 'development') + "\n })()\n "), } }), react_1.default.createElement("script", { type: "application/javascript", dangerouslySetInnerHTML: { __html: (0, htmlescape_1.htmlEscapeJsonStringify)("\n (function() {\n window.__MODEL_STATE_LIST__ = " + JSON.stringify(stateList) + "\n })()\n "), } }), assetsScriptElement))); } exports.default = createDocument; function getStyle(style, index) { return style.type === 'link' ? getStyleLink(style.href, index) : getInnerStyle(style.content, index); } function getInnerStyle(content, key) { return (react_1.default.createElement("style", { key: key, type: "text/css", dangerouslySetInnerHTML: { __html: (0, htmlescape_1.htmlEscapeJsonStringify)(content) } })); } function getStyleLink(href, key) { return react_1.default.createElement("link", { key: key, rel: "stylesheet", type: "text/css", href: href }); } function getScript(script, key) { return script.type == 'inner' ? getInnerScript(script.content, key) : getSrcScript(script.src, key); } function getSrcScript(src, key) { return react_1.default.createElement("script", { key: key, src: src, type: "application/javascript" }); } function getInnerScript(content, key) { return (react_1.default.createElement("script", { key: key, type: "application/javascript", dangerouslySetInnerHTML: { __html: (0, htmlescape_1.htmlEscapeJsonStringify)(content), } })); }