Not to beat a dead horse, but I (completely by accident) ran into this bug again as I was testing my component and was using internal styles - one of the rules used the direct child operator '>'. It took me an hour before I realized why it wasn't working - it was being filtered as an entity for the same reason my JS was.


Chris Lewis wrote:
I understand, and I don't particularly want to get into a discussion about pros/cons of that, but at the moment that may leave me stranded. The correct way to handle this would be to declare the script block as CDATA instead of PCDATA (I'm not sure why its not this way by default), and so I tried the following in a tml file:

       <script type="text/javascript"><![CDATA[
       alert('>');
       ]]></script>

Unfortunately I was greeted with an java.lang.IllegalStateException, saying "Not implemented yet: CDATA[ alert('>'); ]". This suggests to me that the problem is on the radar, so that's good. I wonder if you have any idea when this might be implemented, and is there already a JIRA for it?

In my opinion the script block generated by the underlying head builder should be CDATA by default. I think its logical to assume that JS code will almost always have these characters, which is why I'm baffled that the spec declares script blocks to be of PCDATA (http://www.w3.org/TR/xhtml1/#h-4.8). Of course I believe (and adhere to) that logic doesn't belong in documents and should be in external files, and my component is written in this manner. However it needs some wiring, and at the moment I'm unable to do this wiring.

Sincerely,
Chris

Howard Lewis Ship wrote:
Well, we are going for XHTML compliance with Tapestry, so the
characters need to be escaped.  I supposed we could bypass that (we
already generate SGML style HTML rather than well formed XML, based on
the output doctype).

On Nov 13, 2007 8:21 AM, Chris Lewis <[EMAIL PROTECTED]> wrote:
I've investigated this issue and realized that the problem isn't
receiving the unfiltered character, but writing it to the client. Here's
the situation: my component receives a string parameter that is simply
passed to a javascript object. This parameter is a css selector rule as
supported by the prototype library:

http://www.prototypejs.org/api/element/getelementsbyselector
http://www.prototypejs.org/api/utility/dollar-dollar

The javascript object uses this rule to locate the set of elements upon
which it should operate, allowing greater control of how a user
structures their template markup. So in my case I want to select all of
the immediate child divs, I can use the rule '> div'. The problem is
that when the final markup sent to the browser, this string is filtered
as '&gt;' - this breaks my rule. After some digging and *some real time
discussion with other developers (fanf) in the IRC channel (#tapestry
irc.freenode.net)*, I realized the problem is a bit deep.

To add my scripts my component employs the PageRenderSupport
environmental. Longer explanation made short, this ends up in my script
code (added by addScript()) being added to the document using
Element#text. This method does the filtering, and there's nothing I can
do about it.

The only option I think I have is to contribute by own implementation of
PageRenderSupport. However since I can't just extend
PageRenderSupportImpl and delegate to it (its an internal service), this seems to leave me stranded with the task of reimplementing it from scratch.

Obviously I don't want to do that, so I'm asking for some input from
those with a deeper knowledge. How can this be done better? Does it
makes sense to use Element#text instead of Element#raw in
DocumentHeadBuilderImpl#updateDocument, since where writing script code
and not markup?

sincerely,
chris


Chris Lewis wrote:
My component takes a parameter with a default binding prefix of
'literal'. This parameter needs to be able to receive strings with
characters like '>', but apparently the literal prefix causes them to
be converted to entities. How can I pass unfiltered characters to my
component as a parameter?

Thanks,
Chris

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]









---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to