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