[
https://issues.apache.org/jira/browse/TAP5-2196?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13795544#comment-13795544
]
Magnus Kvalheim edited comment on TAP5-2196 at 10/15/13 8:01 PM:
-----------------------------------------------------------------
Yes, that's right.
It's typically modules with dependencies of their own which one can configure
through paths.
The approach you've taken with specifying a script path as module dependency
have afaik some potential problems.
First - the loading order of dependencies is not guaranteed so jqueryui may be
loaded before jquery. (think it's unlikely for jquery case though).
Not recommended way for AMD modules, also what happens if several require same
script?
The proper way, I believe, is to make shim config for non AMD scripts, and
paths for AMD ones(can reference other domain). Would make it more portable as
well.. I'm no expert on the area - just what I've picked up so far.
Problem is that shim and path config currently in tapestry is limited which
leave us with few options...
was (Author: [email protected]):
Yes, that's right.
It's typically modules with dependencies of their own which one can configure
through paths.
The approach you've taken with specifying a script path as module dependency
have afaik some potential problems.
First - the loading of dependencies is not guaranteed so jqueryui may be loaded
before jquery. (think it's unlikely for jquery case though).
Not recommended way for AMD modules, also what happens if several require same
script?
The proper way, I believe, is to make shim config for non AMD scripts, and
paths for AMD ones(can reference other domain). Would make it more portable as
well.. I'm no expert on the area - just what I've picked up so far.
Problem is that shim and path config currently in tapestry is limited which
leave us with few options...
> RequireJs custom path contribution - via Stacks or JavaScriptSupport
> --------------------------------------------------------------------
>
> Key: TAP5-2196
> URL: https://issues.apache.org/jira/browse/TAP5-2196
> Project: Tapestry 5
> Issue Type: Improvement
> Components: tapestry-core
> Affects Versions: 5.4
> Reporter: Magnus Kvalheim
> Labels: requirejs
>
> Currently I think there is no way to configure requirejs paths.
> Also - the requirejs config is 'global' and all entries included on every
> page.
> Would be good improvement if there were some more flexibility in config and
> more contributions was possible.
> --
> As part of 5.4 migration process we have some components that make use of
> JQueryFileUpload, https://github.com/blueimp/jQuery-File-Upload .
> This library uses the factory approach for defining the modules to work in
> both AMD and non AMD environments.
> Internally it handles loading of required modules, but work with paths. (And
> does not try to load from a fixed directory structure).
> So I think I need to specify things like
> requirejs.config({
> paths: {
> 'jquery.fileupload':
> '../library/jquery.fileupload/jquery.fileupload', //path to file
> 'jquery.iframe-transport':
> '../library/jquery.fileupload/jquery.iframe-transport', //path to file
> 'jquery.ui.widget':
> '../library/jquery.fileupload/vendor/jquery.ui.widget', //path to file
> }
> });
> Currently, only option is to configure shims through tapestry's
> modulemanager, but that's for non-AMD scripts and is likely to cause problems.
> Also the shim config would be global (all pages) - which I'd like to avoid as
> well.
> In 5.3 I've used a JQueryFileUpload to define all the deps like so..
> public List<Asset> getJavaScriptLibraries() {
> List<Asset> ret = new ArrayList<Asset>();
>
> ret.add(assetSource.getContextAsset("jquery-file-upload/7.2.1/js/vendor/jquery.ui.widget.js",
> null));
>
> ret.add(assetSource.getContextAsset("jquery-file-upload/extra/js/load-image.min.js",
> null));
>
> ret.add(assetSource.getContextAsset("jquery-file-upload/extra/js/canvas-to-blob.min.js",
> null));
>
> ret.add(assetSource.getContextAsset("jquery-file-upload/7.2.1/js/jquery.iframe-transport.js",
> null));
>
> ret.add(assetSource.getContextAsset("jquery-file-upload/7.2.1/js/jquery.fileupload.js",
> null));
>
> ret.add(assetSource.getContextAsset("jquery-file-upload/7.2.1/js/jquery.fileupload-fp.js",
> null));
> It would be useful it was possible somehow to contribute to requirejs
> configuration through stacks.
> That way they could be added to the requirejs config if the stack was used.
> If it was a service (perhaps exposed through JavaScriptSupport) one could
> also contribute on a page/component level..?
> I have no idea about the implications of this and if it's possible to
> accomplish, but could potentially help solving some more advanced use cases.
--
This message was sent by Atlassian JIRA
(v6.1#6144)