- 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
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.