- Notifications
You must be signed in to change notification settings - Fork3
Set of goodies for J2CL apps
License
treblereel/gwt3-processors
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
It's a set of helper processors that can speed up J2CL development by generating boiler-plate code.
The latest version:https://search.maven.org/search?q=g:org.treblereel.j2cl.processors
It contains the following features:
@GWT3EntryPoint acts pretty much the same asGwt2 EntryPoint, the annotated method will be called on application startup.
publicclassApp {@GWT3EntryPointpublicvoidinit() {HTMLButtonElementbtn = (HTMLButtonElement)DomGlobal.document.createElement("button");btn.textContent ="PRESS ME !"; }}
@ES6Module allows us to use Es6 modules via JsInterop.
@ES6Module@JsType(isNative =true,namespace ="org.treblereel.j2cl.shim")publicclassES6Test {publicStringid;publicnativebooleanisTest(); }
classES6Test{constructor(){/**@type {string} */this.id="#id"}/** *@return {boolean} */isTest(){returntrue;}}export{ES6Test};
@GWT3Export allows a resulted JavaScript file to be called from the pure JavaScript environment.
publicclassExportTestClass {@GWT3ExportpublicstaticStringtest(Strings) {returns; }@GWT3ExportpublicPromise<String>promise() {returnPromise.resolve("Hello world!"); }}
vartest=neworg.treblereel.j2cl.exports.ExportTestClass();test.test('INSTANCE METHOD CALL');test.promise().then(function(result){});
@TranslationBundle j2cl-maven-plugin 0.21 brings us support of Closure's
.xtb
translation bundles that are a very effective way to translate your application.- Note: at the moment,
.xtb
support is only available for j2cl-maven-plugin 0.21 and above and works only in ADVANCED mode, otherwise default values will be used.
To use
@TranslationBundle
, you need to do the following steps:- Note: at the moment,
- In the configuration section of j2cl-maven-plugin, enable
.xtb
auto discovery:
<translationsFile> <auto>true</auto> </translationsFile>
- To a set locale for current compilation, you need to add the following line to your
pom.xml
<defines> <goog.LOCALE>en</goog.LOCALE> </defines>
- Create an interfaceMyBundle annotated with
@TranslationBundle
@TranslationBundlepublicinterfaceMyBundle { ... }
The processor will generate theMyBundleImpl.java
implementation in the same package whereMyBundle is.
Create a translation property bundle forMyBundle with a locale declared in the following format:
MyBundle_en.properties
orMyBundle_en_US.properties
containing key value pairs like:hello = Hello World!
orhello = Hello {$arg}!
Note:{$arg}
is a placeholder for a string argument.
Declare corresponding methods in yourMyBundle interface.
@TranslationBundlepublicinterfaceMyBundle {@TranslationKey(defaultValue ="Hello World!")Stringhello();@TranslationKey(defaultValue ="Hello {$arg}!")Stringhello(Stringarg); }
Default value is used if no translation property value is found for a given locale and key.If a value contains the{$arg}
placeholder, it will be replaced with the argument provided to the method. Placeholder is surrounded with curly brackets and a corresponding method argument must be named the same;
- Values can be in HTML, in this case HTML will be escaped. To unescape it, set
unescapeHtmlEntities = true
in the@TranslationKey
annotation.
@TranslationKey(defaultValue ="<div>HELLO</div>",unescapeHtmlEntities =true)Stringhello();
- Each method should have a corresponding key value pair in a translation property file. Otherwise, a default value will be used. A method name can be overridden in
@TranslationKey
annotation.
@TranslationKey(key ="greetings",defaultValue ="Hello World!")Stringhello();
@GWT3Resource is a lightweight port of GWT2 resources. Its main purpose is to embed various resources into the JavaScript bundle.
Here we declared a bundle of the resources that will be embedded into the JavaScript bundle:
@GWT3ResourcepublicinterfaceCombinedClientBundleextendsClientBundle {@Source("logo.png")ImageResourcelinuxLogo();TextResourcewelcome();@DataResource.MimeType("audio/mpeg")@Source("alarmloop.mp3")DataResourceresourceMimeTypeAnnotationAudioOgg(); }
Later, we can use it like this:
CombinedClientBundleresources =CombinedClientBundleImpl.INSTANCE;DomGlobal.document.body.appendChild(resources.linuxLogo().getImage());HTMLDivElementcontainer = (HTMLDivElement)DomGlobal.document.createElement("div");DomGlobal.document.body.appendChild(container);container.textContent =resources.welcome().getText();HTMLAudioElementaudio = (HTMLAudioElement)DomGlobal.document.createElement("audio");DomGlobal.document.body.appendChild(audio);audio.src =resources.resourceMimeTypeAnnotationAudioOgg().asString();audio.controls =true;
Take a look at tests for more details.
About
Set of goodies for J2CL apps