Hi Martin, This is really exciting work! I would definitely recommend posting this as an announcement in its own thread, I'm sure a lot of people are looking for something like this. Thanks for taking the initiative!
On Sun, Feb 24, 2019 at 6:17 AM Martin Juhlin <martin.juh...@gmail.com> wrote: > Hi, > > I have started to work on DOM binding based on WebIDL and a binding > generator. I don't have full WebIDL support yet, but it does process idl > from about 80 specifications. See https://gowebapi.github.io for more > details. > > Martin > > Den fredag 28 december 2018 kl. 13:16:22 UTC+1 skrev Chris FractalBach: >> >> This is in the context of compiling Go to webassembly that will be used >> with javascript. >> >> >> *Currently:* >> >> We have`syscall/js` which has stuff like this: >> ```go >> js.Global().Get("document").Call("createElement", "div") >> ``` >> >> What it could be: >> ```go >> js.document.createElement("div") >> ``` >> >> >> >> *Why?* >> >> This would make writing stuff for webassembly WAY easier. >> Auto-generating it would allow it to update definitions whenever the >> standards >> are updated. Which would make it easier to maintain. >> >> Also, if there's going to be significant usage of >> Go -> webassembly -> web browser and javascript >> then having all the types and definitions auto-generated would save on >> tons >> of boilerplate abstractions that people will inevitably create for their >> own sanity. >> >> Advantages: >> - more natural to use >> - more readable >> - type safe >> >> Disadvantages: >> - less flexible >> - when the APIs are updated, it might result in loss of >> backwards-compatibility >> >> >> >> >> *How?* >> >> WebIDL --> Go source code >> >> - https://www.w3.org/TR/WebIDL/ >> - https://heycam.github.io/webidl/ >> - https://www.w3.org/TR/DOM-Level-3-Core/idl-definitions.html >> >> >> >> >> Technical reports published by the W3C that include programming language >>> interfaces have typically been described using the Object Management >>> Group’s Interface Definition Language (IDL) [OMGIDL]. The IDL provides a >>> means to describe these interfaces in a language independent manner. >>> Usually, additional language binding appendices are included in such >>> documents which detail how the interfaces described with the IDL correspond >>> to constructs in the given language. >> >> https://www.w3.org/TR/WebIDL/#introduction >> >> >> >> >> >> *A Possible Conversion:* >> >> *From WebIDL:* >> ``` >> [Exposed=Window] >> interface Paint { }; >> >> >> [Exposed=Window] >> interface SolidColor : Paint { >> attribute double red; >> attribute double green; >> attribute double blue; >> }; >> >> >> [Exposed=Window] >> interface Pattern : Paint { >> attribute DOMString imageURL; >> }; >> >> >> [Exposed=Window, Constructor] >> interface GraphicalWindow { >> readonly attribute unsigned long width; >> readonly attribute unsigned long height; >> >> >> attribute Paint currentPaint; >> >> >> void drawRectangle(double x, double y, double width, double height); >> >> >> void drawText(double x, double y, DOMString text); >> }; >> >> ``` >> Example From: https://heycam.github.io/webidl/ >> >> >> >> *To Go:* >> >> This is probably not the best way to do it, but is an example of how it >> might look. >> >> type Paint struct {} >> >> >> type SolidColor struct { >> Red float64 >> Green float64 >> Blue float64 >> } >> >> >> type GraphicalWindow struct { >> width uint32 >> height uint32 >> CurrentPaint Paint >> } >> >> >> func (gw *GraphicalWindow) drawRectangle(x, y, width, height float64) { >> // syscall >> } >> >> >> func (gw *GraphicalWindow) drawText(x, y float64, text string) { >> // syscall >> } >> >> >> >> >> >> >> I know there are some existing examples of Go bindings for DOM, >> but I don't think they are auto-generated from WebIDL, >> Which I imagine would be easier to maintain in the long-run. >> >> >> >> >> Anybody have thoughts on this? >> >> >> >> >> -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.