-----Original Message-----
From: devs-bounces(a)xwiki.org [mailto:devs-bounces@xwiki.org] On Behalf
Of Sergiu Dumitriu
Sent: Thursday, May 14, 2009 6:27 PM
To: XWiki Developers
Subject: Re: [xwiki-devs] Macro requiring js/css
glenn_engel(a)agilent.com wrote:
> -----Original Message-----
> From: devs-bounces(a)xwiki.org [mailto:devs-bounces@xwiki.org] On
Behalf
> Of Sergiu Dumitriu
> Sent: Thursday, May 14, 2009 10:55 AM
> To: XWiki Developers
> Subject: Re: [xwiki-devs] Macro requiring js/css
>
> glenn_engel(a)agilent.com wrote:
>> I wonder if we're looking at the wrong solution. In this case I
want
> to include a javascript resource file such as
jQuery.js so what I
> really want is to specify a script tag to be added to the header
rather
> than an embedded javascript extension object
content.
>> I suppose I could look at the jsx extension code to see how this is
> done as it is clearly doing this somehow?
> You don't need to do that.
>
> There is a plugin that allows to include links to local JS files,
which
> from Velocity would be called as:
>
> $xwiki.jsfx.use('/js/jquery/jquery.js'), provided that the file is
> located in <webapproot>/resources/js/jquery/jquery.js
>
> Now, going through velocity is an unneeded detour, since velocity
code
> goes back to Java through parsing and
reflexion. The only problem is
> that there is no (easy and clean) way to get hold of a reference to
the
> plugin, since rendering is in the new,
"2.0" component world, while
the
plugin is
in the old monolithic world. I've been planning to
reimplement
the skin extensions as components for a while, but since it wasn't a
priority, it isn't done yet.
So, there are 2 solutions:
1. Make your macro depend on the xwiki-core and xwiki-plugin-skinx
modules, then get a reference to the XWiki object from the execution
context, then call getPlugin("jsfx") and call use("") on it.
This sound like a good approach. How might I get the XWiki object
from the
execution context. I see a macro is passed in a context but I
don't see anything in it that looks like I could get an XWiki object
from. Looks like I'll need an XWikiContext as well to call use(). Is
this available from the macro execute callback?
You get XWiki from XWikiContext using xcontext.getWiki()
You get XWikiContext from the execution context using
context.getProperty("xwikicontext")
You get the execution context from the execution using
execution.getContext()
You get the execution as a component dependency, injected by the
component manager.
OK, I added
@Requirement
private Execution execution;
And then in my macro execution:
ExecutionContext executionContext = execution.getContext();
XWikiContext context = (XWikiContext)
executionContext.getProperty("xwikicontext");
XWiki xwiki = context.getWiki();
AbstractSkinExtensionPlugin plugin = (AbstractSkinExtensionPlugin)
xwiki.getPlugin("jsfx", context);
plugin.use("/foo/bar.js",context);
When I utilize this from my macro execution callback it doesn't emit any code in the
header. (the velocity macro technique does work with jsfx though.
Is the context obtained via this method the right one or is there a different one somehow
attached to the rendering agent?
It seems like I'm 'almost there'!
I had a similar open question about how to get a
XWiki object from an
HttpServlet but in that case there is not any rendering going
on.
> 2. Manually inject the file in the list of pulled extension,
> duplicating
> the code from AbstractSkinExtensionPlugin#getPulledResources
> (see
>
http://svn.xwiki.org/svnroot/xwiki/platform/xwiki-
>
plugins/trunk/skinx/src/main/java/com/xpn/xwiki/plugin/skinx/AbstractSk
> inExtensionPlugin.java
> ) which means: from the execution context, get the xwiki context as
a
> Map, from which you should get the value
from
> "com.xpn.xwiki.plugin.skinx.JsSkinFileExtensionPlugin" (cast as a
Set)
and add
"js/jquery/jquery.js" to it.
--
Sergiu Dumitriu
http://purl.org/net/sergiu/
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Sergiu Dumitriu
http://purl.org/net/sergiu/
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs