UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

68 lines (67 loc) 2.57 kB
"use strict"; import { ParamConfig } from "../../engine/nodes/utils/params/ParamsConfig"; import { StringParamLanguage } from "../../engine/params/utils/OptionsController"; import { CameraAttribute } from "./CoreCamera"; import { coreObjectClassFactory } from "../geometry/CoreObjectFactory"; export function CoreCameraViewerCodeParamConfig(Base) { return class Mixin extends Base { constructor() { super(...arguments); /** @param viewerId */ this.viewerId = ParamConfig.STRING("my-viewer"); /** @param shadow root */ // shadowRoot = ParamConfig.BOOLEAN(false); /** @param HTML */ this.html = ParamConfig.STRING("", { language: StringParamLanguage.HTML }); } }; } export class ViewerCodeConfig { constructor(options) { this.options = options; } createViewerElement(options) { const { viewerId, html } = this.options; const { domElement, canvas, CSSClass } = options; const _container = document.createElement("div"); const container = _container; container.style.height = "100%"; container.innerHTML = html; domElement == null ? void 0 : domElement.appendChild(container); container.classList.add(CSSClass); const viewerElement = container.querySelector(`#${viewerId}`); if (!viewerElement) { console.error(`failed to find element with id ${viewerId}`); return; } viewerElement.appendChild(canvas); function executeScriptElements(containerElement) { const scriptElements = containerElement.querySelectorAll("script"); Array.from(scriptElements).forEach((scriptElement) => { var _a; const clonedElement = document.createElement("script"); Array.from(scriptElement.attributes).forEach((attribute) => { clonedElement.setAttribute(attribute.name, attribute.value); }); clonedElement.text = scriptElement.text; (_a = scriptElement.parentNode) == null ? void 0 : _a.replaceChild(clonedElement, scriptElement); }); } executeScriptElements(container); return viewerElement; } } export class CoreCameraViewerCodeController { static viewerCodeConfig(options) { const { camera } = options; const coreObjectClass = coreObjectClassFactory(camera); const viewerId = coreObjectClass.attribValue(camera, CameraAttribute.VIEWER_ID); const html = coreObjectClass.attribValue(camera, CameraAttribute.VIEWER_HTML); if (viewerId == null || html == null) { return; } return new ViewerCodeConfig({ viewerId, html }); } }