Well, after getting myself up, lazy as I am, I realized by tracing the
transformation, that the template filter is applied before the stream
is actually rendered,
i.e. the content of the wiki page is still not part of the generated
template:

(None, ('TEXT', <Markup ...

so any match on the content of the page, that is not part of the
template, will actually fail.

I presume this to be a bug in trac, what do you think?

Regards

Carsten


On 19 Jan., 23:44, "carsten.klein" <[email protected]>
wrote:
> Hello All,
>
> the problem is so, that the internally used Transformer from Genshi
> fails to match certain content either from the site.html template or
> from a minimal plugin implementing the ITemplateStreamFilter
> interface.
>
> Here is a snippet of code from the template:
>
> (1)        <div py:match="a[ @class='ext-link' ]/span
> [ @class='icon' ]" py:strip=""/>
>
> This fails to match and thus remove the span that is part of every
> external link.
>
> Here are some other examples that will actually work
>
> (2)        <div py:match="p[ @class='path noprint' ]/a
> [ @class='pathentry first' ]" py:strip=""/>
> (3)       <div py:match="div[ @class='trac-modifiedby' ]" py:strip=""/
>
>
>
> Any tips why (1) does not work and (2) and (3) will work?
>
> And now to the problem with the minimal plugin used for rewriting the
> external links on the server side:
>
> from genshi.filters import Transformer
> from trac.core import Component, implements
> from trac.web.api import ITemplateStreamFilter
>
> class RewriteExternalLinksPlugin( Component ):
>
>         implements( ITemplateStreamFilter )
>
>         # ITemplateStreamFilter methods
>
>         def filter_stream( self, req, method, filename, stream,
> data ):
>
>                 filter = Transformer( 'descendant-or-self::a
> [ @class="ext-link" ]' )
>                 # FIXME does not match ext-links inside #content
>                 return stream | filter.attr( 'target', '_blank' )
>
> What it does is, that it will replace all external links placed in the
> site.html template manually, e.g. links to external sites not part of
> the wiki page. These external links will then open in a new browser
> window as one could expect from the above transformation.
>
> What it does not, is that all external links inside #content will not
> be modified. It will simply ignore these, regardless of how I define
> the xpath in the above selection.
>
> Versions:
> Trac-0.12dev_r0-py2.6
> Genshi-0.6dev_r0-py2.6
> Python 2.6
>
> TIA for your interest and help.
>
> Regards
>
> Carsten
-- 
You received this message because you are subscribed to the Google Groups "Trac 
Development" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/trac-dev?hl=en.


Reply via email to