[x3d-public] loading DOM VRML Script. Cobweb enhancement?

Andreas Plesch andreasplesch at gmail.com
Sun Dec 4 16:15:38 PST 2016


Hi John,

not sure if I can help much with a script node for x3dom but x3dom is the
by far more used, known and real world tested browser. It also has a lot of
advanced functionality outside of the spec. Even the flash renderer was
still considered valuable not too long ago. So not obsolete at all although
there should be less need for a script node for x3dom with cobweb also
available. To me it would be more interesting to explore for example DOM
templating as a prototyping mechanism or HTML Imports for inlines. json
templating  https://github.com/datavis-tech/json-templates could be fun.

Cobweb is fun to work with since it is very conforming and a great piece of
engineering. It just fills another niche than x3dom.

-Andreas


On Sun, Dec 4, 2016 at 5:40 PM, <yottzumm at gmail.com> wrote:

> Thanks, clever.  Thanks for the pull request 😊.  Now we’ve got scripts
> working for JSON/XML and JSON/DOM for Cobweb in the X3D JSON Loader (see
> gears.json in the loader).  Next, do we want to attempt to get scripts
> working for X3DOM?  See my attempt at X3DJSONLD/Script.js.  My
> unfamiliarity with the X3D event model is showing.  Or is X3DOM deprecated
> now?
>
>
>
> John
>
>
>
> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for
> Windows 10
>
>
>
> *From: *Andreas Plesch <andreasplesch at gmail.com>
> *Sent: *Sunday, December 4, 2016 5:01 PM
> *To: *John Carlson <yottzumm at gmail.com>
> *Cc: *X3D Graphics public mailing list <x3d-public at web3d.org>; Roy
> Walmsley <roy.walmsley at ntlworld.com>; Don Brutzman <brutzman at nps.edu>
> *Subject: *Re: loading DOM VRML Script. Cobweb enhancement?
>
>
>
> Hi John,
>
> So I took the next step and used the DOMParser method to produce a
> CDATASection for html documents in my cdata branch:
>
> https://github.com/andreasplesch/X3DJSONLD/blob/cdata/X3DJSONLD.js#L224
>
> Using this method the script in the example work for both html and xhtml:
>
> https://rawgit.com/andreasplesch/X3DJSONLD/cdata/AP_minimal_JSLD.html
> https://rawgit.com/andreasplesch/X3DJSONLD/cdata/AP_minimal_JSLD.xhtml
>
> in cobweb.
>
> Cobweb expects to see a CDATASection node. It ignores all text nodes. This
> is reasonable since using a cdata section is strongly recommended in the
> x3d encoding spec.
>
> I issued a PR in case you are interested in adopting this:
>
> https://github.com/coderextreme/X3DJSONLD/pull/4
>
> -Andreas
>
>
>
>
>
> On Sun, Dec 4, 2016 at 3:42 PM, Andreas Plesch <andreasplesch at gmail.com>
> wrote:
>
> Hi John,
>
> I saw that you already tried createCDATASection but commented that perhaps
> because it did not work for html. I reenabled createCDATASection here:
>
> https://github.com/andreasplesch/X3DJSONLD/blob/master/X3DJSONLD.js#L235
>
> and with that change the simple script example works (!) in an xhtml
> document:
>
> https://rawgit.com/andreasplesch/X3DJSONLD/master/AP_minimal_JSLD.xhtml
>
> -Andreas
>
>
>
>
>
> On Sun, Dec 4, 2016 at 3:31 PM, Andreas Plesch <andreasplesch at gmail.com>
> wrote:
>
> Hi John,
>
> I looked at the http://www.web3d.org/x3d/content/examples/Basic/
> ScriptConformance/TouchSensorIsOverEventECMAScript.json example.
>
> The problem is that X3DJSONLD turns the script node into a DOM node with
> correct field node children but the script text is contained in raw text
> nodes:
>
>
> <field>
> <field>
>
> #text "<![CDATA["
> #text "ecmascript:function isOver(val) {     if (val == true)
> {         diffuseColor_changed = new SFColor(1,0,0);     }     else
> {         diffuseColor_changed = new SFColor(0,0,1);    }}"
> #text "]]>"
>
> The script text should be contained in the nodeValue/textContent of a
> CDATASection :
>
>
> <field>
> <field>
> CDATASection nodeValue=textContent="ecmascript:function isOver(val) {
> if (val == true)     {         diffuseColor_changed = new
> SFColor(1,0,0);     }     else     {         diffuseColor_changed = new
> SFColor(0,0,1);    }}"
>
> https://developer.mozilla.org/en-US/docs/Web/API/Document/
> createCDATASection
>
> However, createCDATASection only works with xhtml.
>
> I am sneaking a CDATASection into a html document using DOMParser in xml
> mode here:
>
> https://github.com/andreasplesch/cobweb_dom/blob/
> master/cobweb/cobweb_dom.js#L34
>
> I think DOMParser.parseFromString("<![CDATA[ scripttext using > and <
> ]]>", 'application/xml'); should return a document with a single
> cdatasection node which then can be appended to the script node.
>
> https://github.com/coderextreme/X3DJSONLD/blob/master/X3DJSONLD.js#L224
>
> looks like the function where an actual CDATASection node needs to be
> created instead of raw text nodes.
>
>
>
> Hope this helps,
>
> Andreas
>
>
>
> On Sun, Dec 4, 2016 at 1:42 PM, Andreas Plesch <andreasplesch at gmail.com>
> wrote:
>
> Hi John,
>
> X3dom is designed to work with the XML encoding or a dom. So for x3dom it
> would be necessary to first create a DOM from the json. It will be
> difficult to get around that.
>
> Cobweb has parsers which parse XML or vrml into a scene graph. So it
> should be possible to make a parser for json, probably following what the
> XML parser does. But the easier path would be also to create a DOM from the
> json first.
>
> How do you envision you or others would use json encoded x3d content to
> add value to a project ? Easier manipulation as a js object ? Easier
> programmatic content creation ? As an exchange/transmission format, a bit
> similar to gltf ?
>
>
>
> http://www.web3d.org/x3d/content/examples/Basic/ScriptConformance/
>
> has good examples to test scripting. For example,
>
> http://www.web3d.org/x3d/content/examples/Basic/ScriptConformance/
> TouchSensorIsOverEventECMAScriptIndex.html
>
> http://www.web3d.org/x3d/content/examples/Basic/ScriptConformance/
> TouchSensorIsOverEventECMAScript.json
>
> I may give this example a try with the json loader and cobweb.
>
> -Andreas
>
>
>
> On Dec 4, 2016 1:49 AM, "John Carlson" <yottzumm at gmail.com> wrote:
>
> Perhaps it's time for me to dig into Cobweb and X3DOM to see how they can
> be extended to support JSON?  If it's through DOM, which is fine by me, I
> would have to look and see how the various encodings are loaded after DOM
> is loaded.
>
>
>
> On Dec 4, 2016 1:40 AM, "John Carlson" <yottzumm at gmail.com> wrote:
>
> Again, the X3D JSON Loader is a proof of concept patch until we get full
> JSON support in Cobweb and X3DOM, if desired.
>
>
>
> On Dec 4, 2016 1:24 AM, "John Carlson" <yottzumm at gmail.com> wrote:
>
> Because I may not have the full x3d examples downloaded.   And I do want
> to test to see if JSON inclusion works.
>
>
>
> On Dec 2, 2016 3:04 PM, "Andreas Plesch" <andreasplesch at gmail.com> wrote:
>
> Hi John,
>
>
>
> I tried a bit to load gears.json with X3DJSONLD:
>
>
>
> https://raw.githubusercontent.com/andreasplesch/X3DJSONLD/
> master/AP_minimal_JSLD.html
>
>
>
> But even before any script parsing/loading, there is a problem with the
> ExternProtoDeclare node in gears.json. It has a url field to Rotor.x3d
> which is replaced by the json loader with Rotor.json before being handed
> off to cobweb with importDocument(). Cobweb does not know what to do with
> the Rotor.json file and gives up.
>
>
>
> Why modify the url field value ? If the scene author wants to use a .json
> encoded scene, she will put it in  the url field just like a .wrl encoded
> scene.
>
>
>
> On another note, I agree that eval() cannot be avoided if script should be
> supported. cobweb itself also uses eval() (after some setup and massaging)
> to run the x3d script.
>
>
>
> type="application/x-vrmlscript" is necessary because without it the web
> browser will try to run the script "as is" as soon as it gets appended to
> the page DOM. When cobweb gets a chance to check for the type attribute, it
> is already too late. So it cannot use the attribute to prevent it from
> running. It can only not reject it which is what it does.
>
>
>
> -Andreas
>
>
>
>
>
> On Thu, Dec 1, 2016 at 1:02 AM, <yottzumm at gmail.com> wrote:
>
> It appears that Cobweb is fouled up with DOM loading of scripts, even with
> the additional name value pair.  See gears.x3d/gears.json and load DOM
> through importDocument.  And independent test would help.  I am not sure
> which of my X3DCanvases gets loaded first and I am using absolute indexing,
> so it could be the XML loaded one that is failing.  Basically, we need a
> good way to load scripts coming in through JSON I think, and the only real
> way I know how to do it is eval or cobweb with JSON to XML conversion and
> VRMLscript.  If Cobweb could use the VRMLscript from JSON or DOM, that
> might be ideal.
>
>
>
> This is with cobweb 2.4.
>
>
>
> John
>
>
>
> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for
> Windows 10
>
>
>
> *From: *yottzumm at gmail.com
> *Sent: *Thursday, December 1, 2016 12:32 AM
> *To: *Andreas Plesch <andreasplesch at gmail.com>; Don Brutzman
> <brutzman at nps.edu>; Roy Walmsley <roy.walmsley at ntlworld.com>
> *Subject: *FW: loading X3D DOM. Latest Cobweb techniques?
>
>
>
> Would it be possible to get a name/value of
>
>
>
> "@type" : "application/x-vrmlscript"
>
>
>
> On the Script tag in X3D JSON?  I will do some testing here first to see
> if it will help.
>
>
>
> John
>
>
>
> *From: *yottzumm at gmail.com
> *Sent: *Thursday, December 1, 2016 12:24 AM
> *To: *Andreas Plesch <andreasplesch at gmail.com>
> *Subject: *RE: loading X3D DOM. Latest Cobweb techniques?
>
>
>
> One thing I noticed once I got both DOM and XML views loaded, was that I
> think the DOM VRML script tag was disabled, but the XML one worked.  Was
> there some attribute to add to the Script tag to make it work?  Can I add
> it in both XML and DOM?  Thanks, John  I will start email search.
>
>
>
>
>
>
>
>
>
>
>
> --
>
> Andreas Plesch
> 39 Barbara Rd.
> Waltham, MA 02453
>
>
>
>
> --
>
> Andreas Plesch
> 39 Barbara Rd.
> Waltham, MA 02453
>
>
>
>
> --
>
> Andreas Plesch
> 39 Barbara Rd.
> Waltham, MA 02453
>
>
>
>
> --
>
> Andreas Plesch
> 39 Barbara Rd.
> Waltham, MA 02453
>
>
>



-- 
Andreas Plesch
39 Barbara Rd.
Waltham, MA 02453
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20161204/4e01b0d6/attachment-0001.html>


More information about the x3d-public mailing list