Hi Predrag;
There is not currently an online demo of the framework just yet,
but the prototype application being built with it is designed to make
explaining complex ideas and processes as simple and as concise as possible,
and it will certainly contain tutorials on how the custom elements are
defined and generated.
When that demo is ready, I will post about it here and in the G+ group, as
well as pushing fresh jars to maven central.
I would set an ETA on that to mid-February; the demo project itself is
actually higher priority than the framework,
but that is a discussion for another thread.
As for Thomas' guess, he would be right that it is ....a bit on the complex
side internally,
though I am slimming it down to make each piece an independent, intelligent
unit that is easy to read and reason about.
The ultimate goal is that you can define an entire UI component in a single
file, and have that component run on any supported platform (currently GWT
and desktop; Android up next);
where some people like a minimum of magic bits, I like things to be as
declarative as possible, with all boilerplate generated (preferably before
GWT even starts).
My heuristic is "can I do something at build time so when I write
implementations, I am writing the minimum amount of code possible".
In most cases, the data model and the actual ui rendering is almost
everything; the actual wiring of elements, injecting css, managing shadow
dom, binding web components, etc is all generated.
The one Bad Part (tm) that I will admit to is that this currently relies on
a hacked GWT compiler (I maintain a fork of GWT);
I've been steadily reducing the amount of magic I need from that fork so I
can eventually deprecate it...
The primary use case being arbitrary magic method injection (making my own
GWT.create-like methods anywhere needed, like adding reflection support).
Instead of relying on whole-world knowledge from GWT to do that code
generation and method swapping,
I'm instead using javac plugins to do a "precompile phase" which generates
the necessary support classes, and swaps in the magic methods.
Since generators themselves appear to be on the way out, I was hoping to
offer something of a replacement for those who like generated
implementations;
if I find the time, someday, I might even expose the gwt.ext.typeinfo AST
classes, though I doubt it will ever actually become a priority, as I don't
really use Gwt generators anymore.
....Buuut, this is certainly a much lower priority goal; when J2CL is
closer to going public, and people start missing their generators, I will
likely polish it up and post about it then.
Because my javac generators run before the GWT compile, that means that,
provided it plays nicely with incremental javac, it will also play nicely
with incremental Gwtc.
By stripping all but standard compilation from GWT, it should become very
fast; the only (obvious) problem there is how to invalidate a java type
that depends on external resources...
Perhaps somebody here has some suggestions, but what I have been doing is
emitting a @Generated({ "/path/to/resource", "abcHASHofFILE", ... }),
containing all used source files,
and running a daemon process to monitor input files then forcibly recompile
any dependents when those inputs change (I use a development server that
runs javac or gwtc on demand).
It's a bit clunky, but it works.
Anyway,
I don't want to dangle something shiny and not deliver;
I'm hammering away at this demo every free minute,
but would be happy to discuss with anyone what features they think a good
UI Templating system should offer.
My reference for the UI templating part the project was actually ReactJs...
I liked JSX, but felt like it was too ...rigid and opinionated;
also, I don't like how React throws away DOM elements, which makes it hard
to integrate via standard HTML (yay custom elements / web components!).
The cross-platform aspect is due to the fact that my framework was born to
do cross-platform service injection,
and adding UI generation is a natural evolution of that effort.
Once I get this demo finished, I'll likely upgrade to Elemental 2
(currently using Elemental 1),
and some day, when it is released and I no longer need JSNI or GWT magic
methods, J2CL.
In the meanwhile, I'd love to hear what other developers would want in
terms of binding declarative UI to java classes.
My current implementation creates classes for UI templates, with references
to internal elements stored as fields (using the ref="name" attribute),
generates data models (which have generated CRUD endpoints), internal data
fields (with simple unary expression support; no binary, etc. yet),
and some rudimentary looping / conditional / compile time evaluation.
Adding compile time methods is as simple as defining java methods that take
either primitives or AST arguments,
so end users can add their own utilities without having to touch the more
complex services.
Sorry if this seems ranty; the demo site is an implementation of something
I call "structured markdown",
where I can embed tangential points [inside of a link]-> {
so you can read a concise summary of an idea before diving deeper into
subtopics that interest you.
}.
Part of the demo content is explaining the technology used in the site,
which will include examples of the framework, as well as the ability to
"view source" for any custom element (showing all generated java, css and
source .xapi files).
Most of the work for viewing / editing source borrowed from the CollIDE
project I took over when the Big G open sourced and ditched it.
Some might say I have too many irons in the fire... And they would probably
be right.
But, at least after a half decade or so, all the grand plans are (finally!)
coming to fruition. :-)
--
You received this message because you are subscribed to the Google Groups "GWT
Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/google-web-toolkit-contributors/8ca7c9fd-07c1-4792-977d-5714a8ec0f61%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.