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

Reply via email to