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

Andreas Plesch andreasplesch at gmail.com
Sun Dec 4 14:01:10 PST 2016


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/conte
>> nt/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/cr
>> eateCDATASection
>>
>> 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/ScriptConfor
>>> mance/TouchSensorIsOverEventECMAScriptIndex.html
>>>
>>> http://www.web3d.org/x3d/content/examples/Basic/ScriptConfor
>>> mance/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/ma
>>>>>>> ster/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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20161204/4c87fdf2/attachment-0001.html>


More information about the x3d-public mailing list