@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
68 lines (67 loc) • 2.57 kB
JavaScript
;
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 });
}
}