On Sat, Aug 1, 2015 at 11:08 PM, [email protected] <[email protected]> wrote:
> Hi devs,
>
> I’d like to propose the following official future organization for our 
> javascript/CSS code.
>
> Note1: When I say “javascript” below, it should be understood as js + css 
> (possibly less too).
> Note2: I started writing this email and then I realized Marius had already 
> implemented it for 2 Extensions/Modules: the Platform Tree and the Platform 
> Job modules. I was happy to discover this since it validated the idea I had 
> ;) Maybe Marius has already sent an email to propose all this, in which cas I 
> apologize for the duplication!
>
> So here’s the idea:
>
> * We should locate Java, REST and Javascript APIs in the Extension they 
> relate to. For example the Model Module should hold the current Reference API 
> but also the Javascript API to create, resolve and serialize references (i.e. 
> what’s currently in entityReference.js).
> * Thus when an Extension adds or modify its Java API, it should keep in sync 
> the other APIs too. And these APIs should be made available to the XWiki 
> runtime only when those Extensions are loaded into the runtime.
> * The Javascript APIs should be packaged as webjar resources inside the JAR 
> for the Extension (i.e. located in META-INF/resources/webjars/* in the JAR). 
> Note: An Extension could deliver a singe JAR or several if we wish to 
> separate the Java API from the Javascript API for example (this is what we 
> currently have for the Platform Job and Platform Tree Webjars for ex).
> * The Javascript APIs should be declared using requirejs, using a define(), 
> as in:
>
> define(['jquery', 'JobRunner', 'jsTree', 'tree-finder'], function($, 
> JobRunner) {
> …
> }
>
> Note: In order to pass simple names to the define() and handle conditional 
> minification, Marius has created a require-config.js in the tree webjar’s 
> module:
>
> /*!
> #set ($minified = '.min')
> #if ($request.minify == 'false')
>   #set ($minified = '')
> #end
> */
> require.config({
>   paths: {
>     jsTree: "$!services.webjars.url('jstree', 'jstree.min')",
>     JobRunner: 
> '$!services.webjars.url("org.xwiki.platform:xwiki-platform-job-webjar", 
> "jobRunner${minified}")',
>     'tree-finder': 
> '$!services.webjars.url("org.xwiki.platform:xwiki-platform-tree-webjar", 
> "finder${minified}")',
>     tree: 
> '$!services.webjars.url("org.xwiki.platform:xwiki-platform-tree-webjar", 
> "tree${minified}")'
>   },
>   shim: {
>     jsTree: {
>       deps: ['jquery']
>     }
>   }
> });
>
> * The Javascript APIs should be accessed using requirejs, using a require(), 
> as in:
>
> require(["$!services.webjars.url('org.xwiki.platform:xwiki-platform-tree-webjar',
>  'require-config.min.js', {'evaluate': true})"], function() {
> …
> }
>
> Note: We’ll need to better handle the minification part in this example so 
> that it’s optional and can be controlled by minify=true|false in the query 
> string, but that’s easy to do.
>
> * Unit tests should be provided using Jasmine inside the Extension

"should be provided inside the Extension" (using Jasmine is a detail)

> * The requireJS deps should be kept in sync with the Maven deps.
>
> WDYT?

I agree this looks better from runtime/extension point of view.
However it will make working on these resources a lot more painful
(right now you modify it and just refresh).

>
> If we agree about this then I’m proposing that we document it in the DevGuide 
> at http://platform.xwiki.org/xwiki/bin/view/DevGuide/FrontendResources (which 
> will need to be rewritten as it’s currently aging).
>
> The next step would be to find a way to move all our JS code under requirejs. 
> I’ve been researching this but I’m far from being able to propose a solution 
> at this time. I’ll need to brainstorm with our JS experts ;)
>
> Thanks
> -Vincent
>
>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to