+1

requirejs is insane for fishing around in the URL and making decisions
about it but webjars is insane for encoding path information in a parameter.

XWIKI-10881 is refactoring which is orthogonal to this issue.

Thanks,
Caleb

On 04/03/2015 07:09 PM, Marius Dumitru Florea wrote:
> See http://jira.xwiki.org/browse/XWIKI-10881
> 
> Thanks,
> Marius
> 
> On Fri, Apr 3, 2015 at 7:38 PM, Eduard Moraru <[email protected]> wrote:
>> Hi,
>>
>> Currently, the webjars URL mapping is the following:
>>
>> http://localhost:8080/xwiki/bin/webjars/resources/path?value=
>> <id>%2F<version>%2F<filePath>
>>
>> Example:
>> $services.webjars.url('codemirror', 'lib/codemirror.js')
>> returns
>> http://localhost:8080/xwiki/bin/webjars/resources/path?value=codemirror%2F5.1/lib/codemirror.js
>>
>> The problem with this is that require modules that use relative paths for
>> their dependencies are broken because of the URL mapping we use, more
>> specifically by the "?" character inside the URL we use.
>>
>> A concrete example is the CodeMirror webjar that defines its own modules
>> which express their dependencies relatively: "../../lib/codemirror"
>>
>> Here we have a problem, since if we directly depend on
>> "$services.webjars.url('codemirror', 'mode/css/css.js')", the module will
>> fail to find its relatively defined dependency.
>>
>> One approach would be to define paths, so that requirejs can work its magic:
>>
>> require.config({
>>   paths: {
>>     cm : "
>> http://localhost:8080/xwiki/bin/webjars/resources/path?value=codemirror%2F5.1
>> "
>>   }
>> });
>>
>> require(["cm/lib/codemirror", "cm/mode/css/css"], function (CodeMirror) {
>>   console.log(CodeMirror);
>> });
>>
>> This properly finds "/lib/codemirror.js" and "mode/css/css.js" that we
>> explicitly request, however, the internal dependency of css.js fails to be
>> found at the resolved URL "
>> http://localhost:8080/xwiki/bin/webjars/resources/path?value=codemirror%2F5.1/lib/codemirror
>> ".
>>
>> Requirejs does not add the ".js" extension to the resolved path because the
>> resolved path contains a "?" character so it is considered an absolute URL,
>> not a relative path.
>>
>> The proposal is to stop using this URL mapping, since it is awkward to have
>> paths in parameters and, instead, use a more intuitive one that is both
>> good for clients and for requirejs.
>>
>> The proposed mapping/scheme is:
>>
>> http://localhost:8080/xwiki/bin/webjars/<id>/<version>/<filePath>
>>
>> Any additional parameters that we might need for the webjars action would
>> be appended at the end. There is currently 1 case that I know of, which is
>> "evaluate=true|false".
>>
>> Without this change, I can not find any solution to using a webjar such as
>> CodeMirror that uses relative defined modules.
>>
>> Thanks,
>> Eduard
>>
>> P.S.: Any additional advice on using requirejs to circumvent this
>> limitation is most than welcomed.
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
> 

-- 
Satire is the escape hatch from the cycle of sorrow, hatred and violence. 
#JeSuisCharlie
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to