UNPKG

@story-telling-reporter/react-embed-code-generator

Version:
140 lines (131 loc) 4.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildEmbedCode = buildEmbedCode; exports.buildKaraokeEmbedCode = buildKaraokeEmbedCode; exports.buildPuzzlePhotoInfraEmbedCode = buildPuzzlePhotoInfraEmbedCode; exports.buildScrollToAudioEmbedCode = buildScrollToAudioEmbedCode; exports.buildScrollableImageEmbedCode = buildScrollableImageEmbedCode; exports.buildScrollableThreeModelEmbedCode = buildScrollableThreeModelEmbedCode; exports.buildScrollableVideoEmbedCode = buildScrollableVideoEmbedCode; exports.buildSubtitledAudioEmbedCode = buildSubtitledAudioEmbedCode; var _react = _interopRequireDefault(require("react")); var _server = _interopRequireDefault(require("react-dom/server")); var _serializeJavascript = _interopRequireDefault(require("serialize-javascript")); var _styledComponents = require("styled-components"); var _reactKaraoke = require("@story-telling-reporter/react-karaoke"); var _reactSubtitledAudio = require("@story-telling-reporter/react-subtitled-audio"); var _reactScrollToAudio = require("@story-telling-reporter/react-scroll-to-audio"); var _reactPuzzlePhotoInfra = require("@story-telling-reporter/react-puzzle-photo-infra"); var _uuid = require("uuid"); var _constants = require("./constants"); var _manifest = _interopRequireDefault(require("../../dist/manifest.json")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } // eslint-disable-line // manifest.json is generated after `make build` or `make dev` /** * @param {import('@story-telling-reporter/react-karaoke').KaraokeProps} data * @returns string */ function buildKaraokeEmbedCode(data) { return buildEmbedCode(data, _constants.pkgNames.karaoke, _reactKaraoke.Karaoke); } /** * @param {import('@story-telling-reporter/react-subtitled-audio').SubtitledAudioProps} data * @returns string */ function buildSubtitledAudioEmbedCode(data) { return buildEmbedCode(data, _constants.pkgNames.subtitledAudio, _reactSubtitledAudio.KidsSubtitledAudio); } /** * @param {Object} data * @returns string */ function buildScrollableImageEmbedCode(data) { return buildEmbedCode(data, _constants.pkgNames.scrollableImage, null); } /** * @param {Object} data * @returns string */ function buildScrollableVideoEmbedCode(data) { return buildEmbedCode(data, _constants.pkgNames.scrollableVideo, null); } /** * @param {Object} data * @param {string} [data.id] * @param {boolean} [bottomEntryPointOnly=false] * @returns string */ function buildScrollToAudioEmbedCode(data, bottomEntryPointOnly = false) { if (bottomEntryPointOnly) { return (0, _reactScrollToAudio.buildBottomEntryPointStaticMarkup)({ id: data === null || data === void 0 ? void 0 : data.id }); } return buildEmbedCode(data, _constants.pkgNames.scrollToAudio, _reactScrollToAudio.ScrollToAudio); } /** * @param {import('@story-telling-reporter/react-three-story-controls').ScrollableThreeModelProps} data * @returns string */ function buildScrollableThreeModelEmbedCode(data) { return buildEmbedCode(data, _constants.pkgNames.scrollableThreeModel, null); } function buildPuzzlePhotoInfraEmbedCode(data) { return buildEmbedCode(data, _constants.pkgNames.puzzlePhotoInfra, _reactPuzzlePhotoInfra.PuzzlePhotoInfra); } /** * * @export * @param {Object} data - Data for react component * @param {string} pkgName - values specified in `pkgNames` * @param {Function|null} Component * @returns {string} embedded code */ function buildEmbedCode(data, pkgName, Component) { // use uuid to avoid duplication id const uuid = (0, _uuid.v4)(); const dataWithUuid = { ...data, uuid }; let jsx = ''; let styleTags = ''; if (Component) { const sheet = new _styledComponents.ServerStyleSheet(); try { jsx = _server.default.renderToStaticMarkup(sheet.collectStyles(/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { ...data }))); styleTags = sheet.getStyleTags(); } finally { sheet.seal(); } } return ` ${styleTags} <script> (function() { var namespace = '@story-telling-reporter/react-embed-code-generator@${_manifest.default.version}'; var pkg = '${pkgName}'; if (typeof window != 'undefined') { if (!window.hasOwnProperty(namespace)) { window[namespace] = {}; } if (window[namespace] && !window[namespace].hasOwnProperty(pkg)) { window[namespace][pkg] = []; } if (Array.isArray(window[namespace][pkg])) { var data = ${(0, _serializeJavascript.default)(dataWithUuid)}; window[namespace][pkg].push(data); } } })() </script> <div id="${uuid}">${jsx}</div> <script type="text/javascript" defer crossorigin src="${_manifest.default === null || _manifest.default === void 0 ? void 0 : _manifest.default[pkgName]}"></script> `; }