Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Set of goodies for J2CL apps

License

NotificationsYou must be signed in to change notification settings

treblereel/gwt3-processors

Repository files navigation

GitHub licenseSonatype Nexus (Releases)Join the chat at https://gitter.im/vertispan/j2cl

gwt3-processors

What is it ?

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:

  1. In the configuration section of j2cl-maven-plugin, enable.xtb auto discovery:
  <translationsFile>    <auto>true</auto>  </translationsFile>
  1. To a set locale for current compilation, you need to add the following line to yourpom.xml
  <defines>    <goog.LOCALE>en</goog.LOCALE>  </defines>
  1. Create an interfaceMyBundle annotated with@TranslationBundle
@TranslationBundlepublicinterfaceMyBundle {    ...  }

The processor will generate theMyBundleImpl.java implementation in the same package whereMyBundle is.

  1. 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.
  2. 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;

  1. Values can be in HTML, in this case HTML will be escaped. To unescape it, setunescapeHtmlEntities = true in the@TranslationKey annotation.
@TranslationKey(defaultValue ="<div>HELLO</div>",unescapeHtmlEntities =true)Stringhello();
  1. 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.


[8]ページ先頭

©2009-2025 Movatter.jp