Hi Geoff,

here the missing parts :)

The JavaScriptLibraryModule now have configured four new modules based on
non-AMD JavaScript:
["modernizr", "class", "font-picker", "date-format"].

- "modernizr" js stores itself in a browser global called "Modernizr"
    ==> .exports("Modernizr")
- "class" js stores itself in a browser global called "Class"
    ==> .exports("Class")
- "font-picker" is a jquery plugin
    ==> .dependsOn("jquery")
- "date-format" is a jquery pluhin, which stores itself in a browser global
called 'DateFormat'
    ==> .exports("DateFormat").dependsOn("jquery")



define([ 'modernizr' ], function(myModernizr) {
  var sampleSvgMethod = function() {
    if (!myModernizr.svg) {
    ...
    }
  };

  return {
    sampleSvgMethod: sampleSvgMethod,
  };
});

define(["jquery", 'font-picker'], function($) {
  return function (clientIdOfInputField) {
    $('#' + clientIdOfInputField).fontSelector({
      'hide_fallbacks' : true,
      'selected' : function(style) { $("#fontTypeField").val(style); },
      'fonts' : [
        'Arial,Arial,Helvetica,sans-serif',
        'Arial Black,Arial Black,Gadget,sans-serif',
        ...
        ]
    });
  }});


Kind regards


2015-02-18 16:24 GMT+01:00 Diego Socaceti <socac...@gmail.com>:

> 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
>>
>>
>

Reply via email to