Skip to content

Instantly share code, notes, and snippets.

@kenwebb
Last active April 26, 2021 16:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kenwebb/fdbd2785991a642dbc16ffb8486362dd to your computer and use it in GitHub Desktop.
Save kenwebb/fdbd2785991a642dbc16ffb8486362dd to your computer and use it in GitHub Desktop.
Constructive Scripts
<?xml version="1.0" encoding="UTF-8"?>
<!--Xholon Workbook http://www.primordion.com/Xholon/gwt/ MIT License, Copyright (C) Ken Webb, Mon Apr 26 2021 12:25:39 GMT-0400 (Eastern Daylight Time)-->
<XholonWorkbook>
<Notes><![CDATA[
Xholon
------
Title: Constructive Scripts
Description:
Url: http://www.primordion.com/Xholon/gwt/
InternalName: fdbd2785991a642dbc16ffb8486362dd
Keywords:
My Notes
--------
April 26, 2021
React allows nested interleaving of JavaScript and JSX.
To what extent can I do this in Xholon?
]]></Notes>
<_-.XholonClass>
<!-- domain objects -->
<PhysicalSystem/>
<Block/>
<Brick/>
<!-- quantities -->
<Height superClass="Quantity"/>
<One/>
<Two/>
<Three/>
<Four/>
</_-.XholonClass>
<xholonClassDetails>
<Block>
<port name="height" connector="Height"/>
</Block>
</xholonClassDetails>
<PhysicalSystem>
<Block rnames="a,b,c">
<Height>0.1 m</Height>
<!-- this works -->
<script>this.parent().append('&lt;One roleName="eins">&lt;Two/>&lt;Three/>&lt;/One>')</script>
<!-- and this works -->
<script><![CDATA[this.parent().append('<One roleName="un"><Two/><Three/><script>this.println("internal script")</script></One>')]]></script>
<!-- and this also works -->
<script><![CDATA[const str =
`
<One roleName="uno">
${this.println("TESTING " + this.parent().rnames)}
${"<Three/>"}
${this.parent().rnames.split(",").reduce((acc, curr) => acc.concat('<Two roleName="' + curr + '"/>'), '')}
</One>
`
this.parent().println(str);
this.parent().append(str);
]]></script>
<!-- and this one-liner works -->
<script><![CDATA[this.parent().append(`<One roleName="один">${this.parent().rnames.split(",").reduce((acc, curr) => acc.concat('<Four roleName="' + curr + '"/>'), '')}</One>`)]]></script>
</Block>
<Brick multiplicity="2"/>
</PhysicalSystem>
<Blockbehavior implName="org.primordion.xholon.base.Behavior_gwtjs"><![CDATA[
var a = 123;
var b = 456;
var c = a * b;
if (console) {
console.log(c);
}
//# sourceURL=Blockbehavior.js
]]></Blockbehavior>
<Heightbehavior implName="org.primordion.xholon.base.Behavior_gwtjs"><![CDATA[
var myHeight, testing;
var beh = {
postConfigure: function() {
testing = Math.floor(Math.random() * 10);
myHeight = this.cnode.parent();
},
act: function() {
myHeight.println(this.toString());
},
toString: function() {
return "testing:" + testing;
}
}
//# sourceURL=Heightbehavior.js
]]></Heightbehavior>
<Brickbehavior implName="org.primordion.xholon.base.Behavior_gwtjs"><![CDATA[
$wnd.xh.Brickbehavior = function Brickbehavior() {}
$wnd.xh.Brickbehavior.prototype.postConfigure = function() {
this.brick = this.cnode.parent();
this.iam = " red brick";
};
$wnd.xh.Brickbehavior.prototype.act = function() {
this.brick.println("I am a" + this.iam);
};
//# sourceURL=Brickbehavior.js
]]></Brickbehavior>
<Brickbehavior implName="org.primordion.xholon.base.Behavior_gwtjs"><![CDATA[
console.log("I'm another brick behavior");
]]></Brickbehavior>
<SvgClient><Attribute_String roleName="svgUri"><![CDATA[data:image/svg+xml,
<svg width="100" height="50" xmlns="http://www.w3.org/2000/svg">
<g>
<title>Block</title>
<rect id="PhysicalSystem/Block" fill="#98FB98" height="50" width="50" x="25" y="0"/>
<g>
<title>Height</title>
<rect id="PhysicalSystem/Block/Height" fill="#6AB06A" height="50" width="10" x="80" y="0"/>
</g>
</g>
</svg>
]]></Attribute_String><Attribute_String roleName="setup">${MODELNAME_DEFAULT},${SVGURI_DEFAULT}</Attribute_String></SvgClient>
</XholonWorkbook>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment