diff --git a/modern/src/App.js b/modern/src/App.js index 88b5ddd0..37ec5641 100644 --- a/modern/src/App.js +++ b/modern/src/App.js @@ -609,12 +609,9 @@ function DummyComponent({ makiObject }) { } function MakiChildren({ makiObject }) { - if (makiObject.children == null) { - return null; - } - return makiObject.children.map((childMakiObject, i) => ( - - )); + return makiObject + .js_getChildren() + .map((childMakiObject, i) => ); } // Given a skin XML node, pick which component to use, and render it. diff --git a/modern/src/initialize.js b/modern/src/initialize.js index 7424c397..d09c6a2c 100644 --- a/modern/src/initialize.js +++ b/modern/src/initialize.js @@ -175,6 +175,7 @@ async function parseChildren(node, children, zip, store) { childParser = noop; } const parsedChild = await childParser(child, node, zip, store); + child.maki = parsedChild; if (child.children != null && child.children.length > 0) { await parseChildren(parsedChild, child.children, zip, store); } diff --git a/modern/src/runtime/Container.ts b/modern/src/runtime/Container.ts index 6d6c1e35..6be157f6 100644 --- a/modern/src/runtime/Container.ts +++ b/modern/src/runtime/Container.ts @@ -92,7 +92,7 @@ class Container extends MakiObject { getcurlayout() { unimplementedWarning("getcurlayout"); // TODO: For now we just always show the first layout. I think that's the default. - return this.children.find(childNode => { + return this.js_getChildren().find(childNode => { return childNode.getclassname() === "Layout"; }); } diff --git a/modern/src/runtime/MakiObject.ts b/modern/src/runtime/MakiObject.ts index 072b0be6..8ce92a0b 100644 --- a/modern/src/runtime/MakiObject.ts +++ b/modern/src/runtime/MakiObject.ts @@ -1,8 +1,9 @@ import Emitter from "../Emitter"; import * as Utils from "../utils"; -import { ModernStore, ResolvedXmlNode } from "../types"; +import { ModernStore, XmlNode } from "../types"; class MakiObject { + _node: XmlNode; name: string; _uid: number; _store: ModernStore; @@ -13,11 +14,12 @@ class MakiObject { js_annotations: Object; constructor( - node: ResolvedXmlNode, + node: XmlNode, parent: MakiObject, annotations: Object = {}, store: ModernStore ) { + this._node = node; this._store = store; if (node) { this._uid = node.uid; @@ -47,6 +49,10 @@ class MakiObject { this.children = this.children.filter(item => item !== child); } + js_getChildren(): MakiObject[] { + return this.children; + } + js_delete() { this.parent.js_removeChild(this); this.parent.js_trigger("js_update");