tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thiago H. de Paula Figueiredo (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (TAP5-2196) RequireJs custom path contribution - via Stacks or JavaScriptSupport
Date Fri, 01 Nov 2013 13:04:20 GMT

    [ https://issues.apache.org/jira/browse/TAP5-2196?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13811224#comment-13811224
] 

Thiago H. de Paula Figueiredo edited comment on TAP5-2196 at 11/1/13 1:03 PM:
------------------------------------------------------------------------------

Hello, Magnum!

I've been studying this issue and the related Tapestry code and my conclusion is that adding
something like a JavaScriptSupport..config({...}) would be difficult and error-prone. I thought
about the possibility of changing the JavaScript object created by ModuleManager and before
it's passed to require.config(). That would be done by the use of callbacks, a RequireJsCallback
interface, registered through a method to be added in JavaScriptSupport, so you can change
the object that will be passed to require.config() in any way you want dynamically in a per-request
way in components, pages, mixins or even services. We could also provide some RequireJsCallback
implementations to make it easy to add paths, for example.

What do you guys think?

Cheers!


was (Author: thiagohp):
Hello, Magnum!

I've been studying this issue and the related Tapestry code and my conclusion is that adding
something like a JavaScriptSupport..config({...}) would be difficult and error-prone. I thought
about the possibility of changing the JavaScript object created by ModuleManager and before
it's passed to require.config(). That would be done by the use of callbacks, a RequireJsCallback
interface, registered through a method to be added in JavaScriptSupport, so you can change
the object that will be passed to require.config() in any way you want dynamically in a per-request
way in components, pages, mixins or even services. We could also provide some RequireJsCallback
implementations to add paths, for example.

What do you guys think?

Cheers!

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

Mime
View raw message