@dooboostore/dom-render
Version:
html view template engine
89 lines (88 loc) • 4 kB
JavaScript
import { ObjectUtils } from "@dooboostore/core";
import { RawSet } from "../rawsets/RawSet.js";
import {
ExecuteState,
OperatorExecuter
} from "./OperatorExecuter.js";
import { DomRenderComponentMetaKey } from "../rawsets/index.js";
class DrTargetElement extends OperatorExecuter {
constructor(rawSet, render, returnContainer, elementSource, source, afterCallBack) {
source.operatorAround = void 0;
super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);
}
async execute() {
let targetElement = void 0;
let isTargetElementElement = this.elementSource.element.tagName.toLowerCase() === RawSet.DR_TARGET_ELEMENT_ELEMENTNAME.toLowerCase();
if (isTargetElementElement) {
const targetElementTagName = this.elementSource.element.getAttribute(`${RawSet.DR_TARGET_ELEMENT_ELEMENTNAME}:is`)?.toLowerCase();
targetElement = this.source.config?.targetElements?.find(
(it) => it.name.toLowerCase() === targetElementTagName
);
} else {
targetElement = this.source.config?.targetElements?.find(
(it) => it.name.toLowerCase() === this.elementSource.element.tagName.toLowerCase()
);
}
if (targetElement) {
if (this.rawSet.point.start instanceof this.source.config.window.HTMLMetaElement && this.rawSet.point.end instanceof this.source.config.window.HTMLMetaElement) {
this.rawSet.point.start.setAttribute("this-path", `this.${DomRenderComponentMetaKey.DOMRENDER_COMPONENTS_KEY}.${this.rawSet.uuid}`);
this.rawSet.point.end.setAttribute("this-path", `this.${DomRenderComponentMetaKey.DOMRENDER_COMPONENTS_KEY}.${this.rawSet.uuid}`);
}
const documentFragment = await targetElement.callBack(
this.elementSource.element,
this.source.obj,
this.rawSet,
this.elementSource.attrs,
this.source.config
);
if (documentFragment) {
const detectAction = this.elementSource.element.getAttribute(RawSet.DR_DETECT_NAME);
this.rawSet.dataSet.fragment = documentFragment;
if (detectAction && this.rawSet.dataSet.render) {
this.rawSet.detect = {
action: () => {
const script = `var $component = this.__render.component; var $element = this.__render.element; var $innerHTML = this.__render.innerHTML; var $attribute = this.__render.attribute; ${detectAction} `;
ObjectUtils.Script.evaluate(
script,
Object.assign(this.source.obj, {
__render: this.rawSet.dataSet.render
})
);
}
};
}
let targetFragment = documentFragment;
if (targetElement.noStrip) {
const fragment = this.source.config.window.document.createDocumentFragment();
Array.from(documentFragment.firstElementChild?.childNodes || []).forEach((child) => {
fragment.appendChild(child);
});
targetFragment = fragment;
}
const rr = RawSet.checkPointCreates(targetFragment, this.source.obj, this.source.config);
rr.forEach((it, index) => {
});
if (targetElement.noStrip) {
Array.from(targetFragment.childNodes || []).forEach((child) => {
documentFragment.firstElementChild?.appendChild(child);
});
}
this.elementSource.element.parentNode?.replaceChild(documentFragment, this.elementSource.element);
this.returnContainer.raws.push(...rr);
this.afterCallBack.onElementInitCallBacks.push({
name: targetElement.name.toLowerCase(),
obj: this.source.obj,
targetElement,
creatorMetaData: targetElement.__creatorMetaData
});
targetElement?.complete?.(this.elementSource.element, this.source.obj, this.rawSet);
}
return ExecuteState.EXECUTE;
}
return ExecuteState.NO_EXECUTE;
}
}
export {
DrTargetElement
};
//# sourceMappingURL=DrTargetElement.js.map