Load a JS library as AMD module

Description

Sometimes, we want to load a library that is compatible with AMD and RequireJS. In order to use it properly on Tapestry 5.4, we have to add it into the AppModule and then, just make a request in our js module.

public static void contributeModuleManager(
        final MappedConfiguration<String, JavaScriptModuleConfiguration> configuration,
        final AssetSource assetSource) {

	configuration.add("masonry",
	        new JavaScriptModuleConfiguration(assetSource
	                .getClasspathAsset("/META-INF/assets/js/masonry.pkgd.js").getResource()));

}
define(["masonry"], function(Masonry) {
   return function(){
      var $grid = new Masonry('.grid', {
           ...
      });
   }
});

Demo

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi in est semper, condimentum lorem vitae, porta eros. Aliquam a posuere sem. Quisque vel ullamcorper risus. Curabitur accumsan fermentum erat sed convallis. Donec erat nisi, placerat quis tellus a, ornare feugiat tortor. Aenean posuere neque libero, a consectetur arcu congue at. Sed nec pharetra justo, in malesuada nibh. Pellentesque quis augue in nibh lacinia efficitur at sit amet tortor.

Suspendisse non molestie justo. Vivamus rhoncus lacus blandit nisi scelerisque, sit amet lacinia lorem sagittis. Etiam eros nulla, iaculis sit amet tortor et, gravida pharetra ligula. Nunc nibh felis, efficitur eu urna ut, condimentum varius mauris. Etiam rhoncus orci orci, a interdum diam dictum eu. Integer viverra ligula sit amet sapien suscipit, a convallis nunc tempus. Ut venenatis eros at rutrum ornare. Aliquam eget ligula luctus, venenatis nisl eget, sagittis mi. Praesent fringilla at ipsum sit amet consequat. Integer sagittis sapien eu purus fermentum, ut rutrum diam malesuada. Vivamus in fermentum nunc.

Sed lacus tellus, iaculis sit amet molestie nec, egestas a odio. Fusce lacus odio, finibus ut urna in, tempus elementum nisl. Donec molestie arcu non porttitor semper. Suspendisse rhoncus arcu nec arcu tincidunt, eget faucibus velit dictum. Donec mollis imperdiet velit ut interdum. Aliquam arcu erat, aliquam et malesuada eget, sodales at diam. Nulla consectetur ante ut gravida placerat. Proin porta nunc non nunc maximus tempor. Suspendisse ornare vel tortor eget aliquet. Duis tincidunt eleifend turpis, at scelerisque lacus elementum vitae. Morbi et nunc sapien. Duis tincidunt consequat laoreet.

Proin lobortis imperdiet nisi eget pretium. Integer placerat, urna non interdum interdum, nulla nisi dignissim neque, id convallis enim diam nec libero. Ut mollis felis at metus ultricies porttitor. Vivamus viverra ex in neque mollis, vitae pharetra nisl euismod. Ut semper libero at sem ultrices, sollicitudin sollicitudin nulla tempus. Donec in interdum velit, eget tempor purus. Donec eget nulla vel erat tempus semper.

Ut massa turpis, convallis a euismod nec, cursus a lacus. Fusce nec est in risus vulputate posuere. Donec a viverra arcu. Mauris id finibus neque. Morbi volutpat velit quis tincidunt maximus. Suspendisse potenti. Mauris velit leo, ornare et egestas sed, accumsan vitae metus. Fusce nisi arcu, dapibus tincidunt urna posuere, iaculis rhoncus erat. Ut eget odio dolor. Nam ac dapibus nisl. Fusce rutrum nulla finibus lectus hendrerit molestie.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi in est semper, condimentum lorem vitae, porta eros. Aliquam a posuere sem. Quisque vel ullamcorper risus. Curabitur accumsan fermentum erat sed convallis. Donec erat nisi, placerat quis tellus a, ornare feugiat tortor. Aenean posuere neque libero, a consectetur arcu congue at. Sed nec pharetra justo, in malesuada nibh. Pellentesque quis augue in nibh lacinia efficitur at sit amet tortor.

Suspendisse non molestie justo. Vivamus rhoncus lacus blandit nisi scelerisque, sit amet lacinia lorem sagittis. Etiam eros nulla, iaculis sit amet tortor et, gravida pharetra ligula. Nunc nibh felis, efficitur eu urna ut, condimentum varius mauris. Etiam rhoncus orci orci, a interdum diam dictum eu. Integer viverra ligula sit amet sapien suscipit, a convallis nunc tempus. Ut venenatis eros at rutrum ornare. Aliquam eget ligula luctus, venenatis nisl eget, sagittis mi. Praesent fringilla at ipsum sit amet consequat. Integer sagittis sapien eu purus fermentum, ut rutrum diam malesuada. Vivamus in fermentum nunc.

Source

package es.carlosmontero.webapp.t5devutil.pages.javascript;

import org.apache.tapestry5.annotations.Import;

@Import(module = "masonry-init")
public class JsAsModulePage {

}