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

Reply via email to