Hi Geoff, yes, here is some productive code:
public class JavaScriptLibraryModule { private static final String MODERNIZR_PATH = "context:third-party/modernizr-2.7.1.js"; private static final String JS_SIMPLE_CLASS_PATH = "context:third-party/class.js"; private static final String JS_FONT_PICKER_PATH = "context:third-party/fontselector/src/jquery.fontselector.js"; private static final String JS_DATE_FORMAT_PATH = "context:third-party/dateFormat.js"; @Contribute(ModuleManager.class) public static void addExternalNonAmdJavaScript(MappedConfiguration<String, Object> configuration, @Path(MODERNIZR_PATH) Resource modernizr, @Path(JS_SIMPLE_CLASS_PATH) Resource simpleClass @Path(JS_FONT_PICKER_PATH) Resource fontPicker, @Path(JS_DATE_FORMAT_PATH) Resource dateFormat) { configuration.add("modernizr", new JavaScriptModuleConfiguration(modernizr) .exports("Modernizr")); configuration.add("class", new JavaScriptModuleConfiguration(simpleClass) .exports("Class")); configuration.add("font-picker", new JavaScriptModuleConfiguration(fontPicker) .dependsOn("jquery")); configuration.add("date-format", new JavaScriptModuleConfiguration(dateFormat) .exports("DateFormat") .dependsOn("jquery")); } } Kind regards 2015-02-18 15:04 GMT+01:00 Geoff Callender < geoff.callender.jumpst...@gmail.com>: > Hi Diego, > > That sounds good, but can you give a concrete example of some code, like I > gave below. That would be great. > > Geoff > > > On 19 Feb 2015, at 1:00 am, Diego Socaceti <socac...@gmail.com> wrote: > > > sorry, copy, paste-error > > > > ... use JavaScriptModuleConfiguration#exports() for 'exports' of shim > config > > > > 2015-02-18 14:58 GMT+01:00 Diego Socaceti <socac...@gmail.com>: > > > >> Hi @all, > >> > >> if you want to shim non-AMD JavaScript files you should use > >> JavaScriptModuleConfiguration. > >> It offers everything you need to create shim configs. > >> > >> use JavaScriptModuleConfiguration#dependsOn() for 'deps' of shim config > >> use JavaScriptModuleConfiguration#dependsOn() for 'exports' of shim > config > >> > >> Kind regards > >> > >> > >> 2015-02-18 12:13 GMT+01:00 Geoff Callender < > >> geoff.callender.jumpst...@gmail.com>: > >> > >>> Despite what I said 9 months ago in the thread you referenced, I'm not > >>> sure that I've ever seen the shimming [1] ever work, but I haven't > pursued > >>> it because the many javascript libraries I use work fine anyway without > >>> being modules. > >>> > >>> [1] > >>> > http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/services/javascript/JavaScriptModuleConfiguration.html > >>> > >>> Here are 4 very different examples that my modules are using without, I > >>> believe, shimming. Maybe they're being shimmed and I should take > advantage > >>> of it. If so, I'd welcome someone setting me straight. > >>> > >>> public static void contributeModuleManager( > >>> MappedConfiguration<String, Object> > configuration, > >>> > >>> @Path("/META-INF/assets/js/highcharts-4.0.4/highcharts.js") Resource > >>> highcharts, > >>> > >>> @Path("/META-INF/assets/fineuploader/fineuploader-5.0.9.js") Resource > >>> fineuploader, > >>> > >>> @Path("/META-INF/assets/js/fastclick-1.0.3.min.js") Resource fastclick, > >>> > >>> > @Path("/META-INF/assets/js/pick-a-color-1.2.3/dependencies/tinycolor-0.9.15.min.js") > >>> Resource tinycolor, > >>> ) { > >>> configuration.add("highcharts", new > >>> JavaScriptModuleConfiguration(highcharts)); > >>> configuration.add("fineuploader", new > >>> JavaScriptModuleConfiguration(fineuploader)); > >>> configuration.add("fastclick", new > >>> JavaScriptModuleConfiguration(fastclick)); > >>> configuration.add("tinycolor", new > >>> JavaScriptModuleConfiguration(tinycolor)); > >>> } > >>> > >>> Using highcharts... > >>> > >>> define([ "jquery", "highcharts" ], function($) { > >>> init = function(params) { > >>> $chart = $("#" + params.id); > >>> $chart.highcharts({ > >>> : > >>> > >>> Using fineuploader... > >>> > >>> define(["jquery", "t5/core/console", "fineuploader"], function($, > >>> console) { > >>> var uploader; > >>> init = function(params) { > >>> uploader = new qq.FineUploader({ > >>> : > >>> > >>> Using fastclick... > >>> > >>> define([ "jquery", "fastclick" ], function($, FastClick) { > >>> return function(options) { > >>> var options = options || {}; > >>> new FastClick(document.body, options); > >>> }; > >>> }); > >>> > >>> Using tinycolor... > >>> > >>> // Depends on PickAColorJavaScriptStack. > >>> > >>> define(["jquery", "tinycolor", "underscore", "t5/core/console", > >>> "bootstrap/tooltip", "bootstrap/popover"], function($, tinycolor, _, > >>> console) { > >>> init = function(params) { > >>> pickAColorOptions = _.extend({}, > >>> params.pickAColorOptions); > >>> // To prevent pickAColor failing with "tinycolor is not > >>> defined", assign window.tinycolor. > >>> window.tinycolor = tinycolor; > >>> : > >>> > >>> HTH, > >>> > >>> Geoff > >>> > >>> > >>> On 18 Feb 2015, at 5:54 pm, abangkis <abang...@gmail.com> wrote: > >>> > >>>> Hi Geoff. You are right. I can call the showMe() method as a global > >>>> function. So, is it okay if I assume that i could only call the > shimmed > >>> js > >>>> lib through global function? Since it wouldn't get passed through the > >>>> define parameter. Or is my implementation that's incorrect? Is there a > >>>> better way (better scoped) to implement this? > >>>> > >>>> Cheers. > >>>> > >>>> On Wed, Feb 18, 2015 at 7:33 AM, Geoff Callender < > >>>> geoff.callender.jumpst...@gmail.com> wrote: > >>>> > >>>>> Your "require" has ensured the mytest.js file gets loaded by the > >>> browser > >>>>> but the file's contents do not define an AMD module. Therefore the > >>> scope of > >>>>> showMe() is global, so I think you'll find you can call showMe() but > >>> not > >>>>> mytest.showMe(). > >>>>> > >>>>> Geoff > >>>>> > >>>>> On 18 Feb 2015, at 5:05 am, Thiago H de Paula Figueiredo < > >>>>> thiag...@gmail.com> wrote: > >>>>> > >>>>>> Please read the Require.js documentation about this. You just cannot > >>> use > >>>>> Require.js with non AMD .js files and expect it to work without no > >>> further > >>>>> work. > >>>>>> > >>>>>> On Sat, 14 Feb 2015 14:04:36 -0200, abangkis <abang...@gmail.com> > >>> wrote: > >>>>>> > >>>>>>> Hello. I'm trying to load a simple regular javascript that's going > >>> to be > >>>>>>> used as dependency from a RequireJS module. > >>>>>>> > >>>>>>> So i created mytest.js under > classpath:META-INF/assets/js/mytest.js. > >>> It > >>>>>>> contain a single function : > >>>>>>> > >>>>>>> function showMe() { > >>>>>>> alert("test 2 my_test"); > >>>>>>> }; > >>>>>>> > >>>>>>> I add the contribution in AppModule > >>>>>>> > >>>>>>> public static void > >>>>> contributeModuleManager(MappedConfiguration<String, > >>>>>>> Object> configuration, > >>>>>>> @Path("/META-INF/assets/js/mytest.js") Resource js) { > >>>>>>> configuration.add("mytest", new > >>>>> JavaScriptModuleConfiguration(js)); > >>>>>>> } > >>>>>>> > >>>>>>> Create a test page > >>>>>>> > >>>>>>> @Import(module = "Lima") > >>>>>>> public class Lima { > >>>>>>> } > >>>>>>> > >>>>>>> that call the module : > >>>>>>> > >>>>>>> require(['mytest'], > >>>>>>> function(mytest){ > >>>>>>> console.log("mytest " + mytest); > >>>>>>> mytest.showMe(); > >>>>>>> }); > >>>>>>> > >>>>>>> the module is loaded, the mytest.js file is found. But the console > >>> log > >>>>>>> mytest as undefined. Here's what's printed on the console > >>>>>>> > >>>>>>> Loading 2 libraries > >>>>>>> console.js:104 Loading library > >>>>>>> /KomuttaCentral/assets/ctx/z1d218c13/js/jquery-2.0.3.min.js > >>>>>>> console.js:104 Loading library > >>>>>>> /KomuttaCentral/assets/ctx/z50c3674f/js/scripts.js > >>>>>>> console.js:104 Executing 1 inits > >>>>>>> console.js:104 Loaded module Lima > >>>>>>> console.js:104 All inits executed > >>>>>>> Lima.js:3 mytest undefined > >>>>>>> console.js:104 RequireJS error: require: Cannot read property > >>> 'showMe' > >>>>> of > >>>>>>> undefined > >>>>>>> > >>>>>>> So, what did i do wrong? Thanks. > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Thiago H. de Paula Figueiredo > >>>>>> Tapestry, Java and Hibernate consultant and developer > >>>>>> http://machina.com.br > >>>>>> > >>>>>> > --------------------------------------------------------------------- > >>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org > >>>>> > >>>>> > >>>> > >>>> > >>>> -- > >>>> http://www.mreunionlabs.net/ <http://www.mreunion-labs.net/> > >>>> twitter : @mreunionlabs @abangkis > >>>> page : https://plus.google.com/104168782385184990771 > >>> > >>> > >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > >