You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by an...@apache.org on 2006/11/21 00:37:42 UTC

svn commit: r477408 - in /tapestry/tapestry4/trunk/tapestry-framework/src/js: tapestry/html.js tests/test_html.js

Author: andyhot
Date: Mon Nov 20 15:37:40 2006
New Revision: 477408

URL: http://svn.apache.org/viewvc?view=rev&rev=477408
Log:
TAPESTRY-1129: Unpack emptry textareas for mozilla derivative browsers

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js?view=diff&rev=477408&r1=477407&r2=477408
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js Mon Nov 20 15:37:40 2006
@@ -5,6 +5,9 @@
  * Provides functionality related to parsing and rendering dom nodes.
  */
 tapestry.html={
+    
+        TextareaMatcher:'<textarea(.*?)/>', // regexp for compact textarea elements
+        TextareaReplacer:'<textarea$1></textarea>', // replace pattern for compact textareas
 	
         /**
 	 * Function: getContentAsString
@@ -12,12 +15,12 @@
 	 * Takes a dom node and returns its contents rendered in a string.
          *
          * The resulting string does NOT contain any markup (or attributes) of
-         * the given node - only child nodes are rendered and returned.
+         * the given node - only child nodes are rendered and returned.Content
          *
          * Implementation Note: This function tries to make use of browser 
          * specific features (the xml attribute of nodes in IE and the XMLSerializer
          * object in Mozilla derivatives) - if those fails, a generic implementation
-         * is guaranteed to work in all platforms.
+         * is used that is guaranteed to work in all platforms.
 	 * 
 	 * Parameters: 
 	 * 
@@ -84,6 +87,7 @@
 	        if (s == "undefined")
 		        return this._getContentAsStringGeneric(node);
 	    }
+            s = this._processTextareas(s);
 	    return s;
 	},
 	
@@ -106,5 +110,14 @@
 			}
 		}
 		return s;	
-	}
+	},
+        
+        _processTextareas:function(htmlData)
+ 	{
+ 	        var match = new RegExp(tapestry.html.TextareaMatcher);
+                while (htmlData.match(match)){
+                    htmlData = htmlData.replace(match, tapestry.html.TextareaReplacer);
+                }
+ 	        return htmlData;
+ 	}
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js?view=diff&rev=477408&r1=477407&r2=477408
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js Mon Nov 20 15:37:40 2006
@@ -23,6 +23,23 @@
         // only browser based tests will show if this is working
 }
 
+function test_html_getElementAsString(){
+    
+        var node = _createTestNode();
+        
+        var data = tapestry.html.getElementAsString(node).toLowerCase();
+        jum.assertEquals("<div id=\"testid\"><div id=\"testid2\">content</div></div>", data);
+}
+
+function test_html_processTextareas(){
+    var initial = "start<textarea id='2' rows=4/>";
+    var expected = "start<textarea id='2' rows=4></textarea>";
+    
+    jum.assertEquals(expected, tapestry.html._processTextareas(initial));
+    jum.assertEquals(expected + expected, 
+        tapestry.html._processTextareas(initial+initial));
+}
+
 function _createTestNode(element, empty){
 	var node = document.createElement("div");
 	node.setAttribute("id", "testid");



Re: svn commit: r477408 - in /tapestry/tapestry4/trunk/tapestry-framework/src/js: tapestry/html.js tests/test_html.js

Posted by andyhot <an...@di.uoa.gr>.
Yea, i had done similar research when this was first reported for tacos.

Look who 2 are talking about this :)
http://www.mail-archive.com/tacos-devel@lists.sourceforge.net/msg00213.html

Anyway, I had hoped for XMLSerializer's
( http://xulplanet.com/references/objref/XMLSerializer.html )
serializeToString to also accept a parameter that would allow us
to define how we want empty tags handled...

Didn't find anything though...

So, i can't change how serialization works and also cannot change how
parsing
and rendering works (try viewing in FF an html file containing only:
"<textarea/>Am i inside the textarea?" )
... doesn't leave us too many options...

Jesse Kuhnert wrote:
> Hmm ok. Of course I understand the reasons behind it, and it is a good
> bug
> fix. Maybe I'm being too anal lately and obsessing over every little
> feature. I may try and waste another day or so again soon by looking at
> these :
>
> http://developer.mozilla.org/en/docs/XML_in_Mozilla
>
> http://xulplanet.com/tutorials/mozsdk/xmlparse.php
>
> http://developer.mozilla.org/en/docs/XML_in_Mozilla
>
> http://developer.mozilla.org/en/docs/XMLHttpRequest
>
> There ~has~ to be some way to make it be able to parse what it serializes
> right? grr
>
> On 11/20/06, andyhot <an...@di.uoa.gr> wrote:
>>
>> Jesse Kuhnert wrote:
>> > Not that I'm sure it would handle all use cases, but wouldn't it be
>> > better
>> > to just make the TextArea component not create empty <textarea />
>> > tags, or
>> > at the very worst re-work the template parser TextToken's to handle it
>> > right
>> > there if it's not a tapestry managed block of text?
>> >
>> > (just because I know from recent experience that regexp matching on
>> the
>> > client side is fairly expensive, and anything involving regexp + ~all~
>> > core
>> > IO operations is something deserving of more scrutiny ;) )
>>
>> we aren't actually creating empty <textarea/> tags
>> our server side code creates <textarea></textarea> code.
>>
>> But ... when an ajax response with xml type is returned,
>> mozilla's dom/xml parser transparently stores this as <textarea/>
>> So, when we eventually insert that back at the document, TAPESTRY-1129
>> arises...
>>
>> If the ajax response type wasn't xml (i.e. simple text) we wouldn't be
>> having this
>> issue (but of course, we wouldn't be able to do all the other stuff)
>>
>> >
>> > On 11/20/06, andyhot@apache.org <an...@apache.org> wrote:
>> >>
>> >> Author: andyhot
>> >> Date: Mon Nov 20 15:37:40 2006
>> >> New Revision: 477408
>> >>
>> >> URL: http://svn.apache.org/viewvc?view=rev&rev=477408
>> >> Log:
>> >> TAPESTRY-1129: Unpack emptry textareas for mozilla derivative
>> browsers
>> >>
>> >> Modified:
>> >>    
>> tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>> >>
>> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>> >>
>> >> Modified:
>> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js?view=diff&rev=477408&r1=477407&r2=477408
>>
>> >>
>> >>
>> >>
>> ==============================================================================
>>
>> >>
>> >> ---
>> tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>> >> (original)
>> >> +++
>> tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>> >> Mon Nov 20 15:37:40 2006
>> >> @@ -5,6 +5,9 @@
>> >>   * Provides functionality related to parsing and rendering dom
>> nodes.
>> >>   */
>> >> tapestry.html={
>> >> +
>> >> +        TextareaMatcher:'<textarea(.*?)/>', // regexp for compact
>> >> textarea elements
>> >> +        TextareaReplacer:'<textarea$1></textarea>', // replace
>> pattern
>> >> for compact textareas
>> >>
>> >>          /**
>> >>          * Function: getContentAsString
>> >> @@ -12,12 +15,12 @@
>> >>          * Takes a dom node and returns its contents rendered in a
>> >> string.
>> >>           *
>> >>           * The resulting string does NOT contain any markup (or
>> >> attributes) of
>> >> -         * the given node - only child nodes are rendered and
>> returned.
>> >> +         * the given node - only child nodes are rendered and
>> >> returned.Content
>> >>           *
>> >>           * Implementation Note: This function tries to make use of
>> >> browser
>> >>           * specific features (the xml attribute of nodes in IE
>> and the
>> >> XMLSerializer
>> >>           * object in Mozilla derivatives) - if those fails, a
>> generic
>> >> implementation
>> >> -         * is guaranteed to work in all platforms.
>> >> +         * is used that is guaranteed to work in all platforms.
>> >>          *
>> >>          * Parameters:
>> >>          *
>> >> @@ -84,6 +87,7 @@
>> >>                 if (s == "undefined")
>> >>                         return this._getContentAsStringGeneric(node);
>> >>             }
>> >> +            s = this._processTextareas(s);
>> >>             return s;
>> >>         },
>> >>
>> >> @@ -106,5 +110,14 @@
>> >>                         }
>> >>                 }
>> >>                 return s;
>> >> -       }
>> >> +       },
>> >> +
>> >> +        _processTextareas:function(htmlData)
>> >> +       {
>> >> +               var match = new
>> RegExp(tapestry.html.TextareaMatcher);
>> >> +                while (htmlData.match(match)){
>> >> +                    htmlData = htmlData.replace(match,
>> >> tapestry.html.TextareaReplacer);
>> >> +                }
>> >> +               return htmlData;
>> >> +       }
>> >> }
>> >>
>> >> Modified:
>> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js?view=diff&rev=477408&r1=477407&r2=477408
>>
>> >>
>> >>
>> >>
>> ==============================================================================
>>
>> >>
>> >> ---
>> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>> >> (original)
>> >> +++
>> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>> >> Mon Nov 20 15:37:40 2006
>> >> @@ -23,6 +23,23 @@
>> >>          // only browser based tests will show if this is working
>> >> }
>> >>
>> >> +function test_html_getElementAsString(){
>> >> +
>> >> +        var node = _createTestNode();
>> >> +
>> >> +        var data =
>> >> tapestry.html.getElementAsString(node).toLowerCase();
>> >> +        jum.assertEquals("<div id=\"testid\"><div
>> >> id=\"testid2\">content</div></div>", data);
>> >> +}
>> >> +
>> >> +function test_html_processTextareas(){
>> >> +    var initial = "start<textarea id='2' rows=4/>";
>> >> +    var expected = "start<textarea id='2' rows=4></textarea>";
>> >> +
>> >> +    jum.assertEquals(expected,
>> >> tapestry.html._processTextareas(initial));
>> >> +    jum.assertEquals(expected + expected,
>> >> +        tapestry.html._processTextareas(initial+initial));
>> >> +}
>> >> +
>> >> function _createTestNode(element, empty){
>> >>         var node = document.createElement("div");
>> >>         node.setAttribute("id", "testid");
>> >>
>> >>
>> >>
>> >
>> >
>>
>>
>> -- 
>> Andreas Andreou - andyhot@apache.org - http://andyhot.di.uoa.gr
>> Tapestry / Tacos developer
>> Open Source / J2EE Consulting
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: dev-help@tapestry.apache.org
>>
>>
>
>


-- 
Andreas Andreou - andyhot@apache.org - http://andyhot.di.uoa.gr
Tapestry / Tacos developer
Open Source / J2EE Consulting 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Re: svn commit: r477408 - in /tapestry/tapestry4/trunk/tapestry-framework/src/js: tapestry/html.js tests/test_html.js

Posted by Jesse Kuhnert <jk...@gmail.com>.
Hmm ok. Of course I understand the reasons behind it, and it is a good bug
fix. Maybe I'm being too anal lately and obsessing over every little
feature. I may try and waste another day or so again soon by looking at
these :

http://developer.mozilla.org/en/docs/XML_in_Mozilla

http://xulplanet.com/tutorials/mozsdk/xmlparse.php

http://developer.mozilla.org/en/docs/XML_in_Mozilla

http://developer.mozilla.org/en/docs/XMLHttpRequest

There ~has~ to be some way to make it be able to parse what it serializes
right? grr

On 11/20/06, andyhot <an...@di.uoa.gr> wrote:
>
> Jesse Kuhnert wrote:
> > Not that I'm sure it would handle all use cases, but wouldn't it be
> > better
> > to just make the TextArea component not create empty <textarea />
> > tags, or
> > at the very worst re-work the template parser TextToken's to handle it
> > right
> > there if it's not a tapestry managed block of text?
> >
> > (just because I know from recent experience that regexp matching on the
> > client side is fairly expensive, and anything involving regexp + ~all~
> > core
> > IO operations is something deserving of more scrutiny ;) )
>
> we aren't actually creating empty <textarea/> tags
> our server side code creates <textarea></textarea> code.
>
> But ... when an ajax response with xml type is returned,
> mozilla's dom/xml parser transparently stores this as <textarea/>
> So, when we eventually insert that back at the document, TAPESTRY-1129
> arises...
>
> If the ajax response type wasn't xml (i.e. simple text) we wouldn't be
> having this
> issue (but of course, we wouldn't be able to do all the other stuff)
>
> >
> > On 11/20/06, andyhot@apache.org <an...@apache.org> wrote:
> >>
> >> Author: andyhot
> >> Date: Mon Nov 20 15:37:40 2006
> >> New Revision: 477408
> >>
> >> URL: http://svn.apache.org/viewvc?view=rev&rev=477408
> >> Log:
> >> TAPESTRY-1129: Unpack emptry textareas for mozilla derivative browsers
> >>
> >> Modified:
> >>     tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
> >>
> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
> >>
> >> Modified:
> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
> >> URL:
> >>
> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js?view=diff&rev=477408&r1=477407&r2=477408
> >>
> >>
> >>
> ==============================================================================
> >>
> >> --- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
> >> (original)
> >> +++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
> >> Mon Nov 20 15:37:40 2006
> >> @@ -5,6 +5,9 @@
> >>   * Provides functionality related to parsing and rendering dom nodes.
> >>   */
> >> tapestry.html={
> >> +
> >> +        TextareaMatcher:'<textarea(.*?)/>', // regexp for compact
> >> textarea elements
> >> +        TextareaReplacer:'<textarea$1></textarea>', // replace pattern
> >> for compact textareas
> >>
> >>          /**
> >>          * Function: getContentAsString
> >> @@ -12,12 +15,12 @@
> >>          * Takes a dom node and returns its contents rendered in a
> >> string.
> >>           *
> >>           * The resulting string does NOT contain any markup (or
> >> attributes) of
> >> -         * the given node - only child nodes are rendered and
> returned.
> >> +         * the given node - only child nodes are rendered and
> >> returned.Content
> >>           *
> >>           * Implementation Note: This function tries to make use of
> >> browser
> >>           * specific features (the xml attribute of nodes in IE and the
> >> XMLSerializer
> >>           * object in Mozilla derivatives) - if those fails, a generic
> >> implementation
> >> -         * is guaranteed to work in all platforms.
> >> +         * is used that is guaranteed to work in all platforms.
> >>          *
> >>          * Parameters:
> >>          *
> >> @@ -84,6 +87,7 @@
> >>                 if (s == "undefined")
> >>                         return this._getContentAsStringGeneric(node);
> >>             }
> >> +            s = this._processTextareas(s);
> >>             return s;
> >>         },
> >>
> >> @@ -106,5 +110,14 @@
> >>                         }
> >>                 }
> >>                 return s;
> >> -       }
> >> +       },
> >> +
> >> +        _processTextareas:function(htmlData)
> >> +       {
> >> +               var match = new RegExp(tapestry.html.TextareaMatcher);
> >> +                while (htmlData.match(match)){
> >> +                    htmlData = htmlData.replace(match,
> >> tapestry.html.TextareaReplacer);
> >> +                }
> >> +               return htmlData;
> >> +       }
> >> }
> >>
> >> Modified:
> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
> >> URL:
> >>
> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js?view=diff&rev=477408&r1=477407&r2=477408
> >>
> >>
> >>
> ==============================================================================
> >>
> >> ---
> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
> >> (original)
> >> +++
> >> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
> >> Mon Nov 20 15:37:40 2006
> >> @@ -23,6 +23,23 @@
> >>          // only browser based tests will show if this is working
> >> }
> >>
> >> +function test_html_getElementAsString(){
> >> +
> >> +        var node = _createTestNode();
> >> +
> >> +        var data =
> >> tapestry.html.getElementAsString(node).toLowerCase();
> >> +        jum.assertEquals("<div id=\"testid\"><div
> >> id=\"testid2\">content</div></div>", data);
> >> +}
> >> +
> >> +function test_html_processTextareas(){
> >> +    var initial = "start<textarea id='2' rows=4/>";
> >> +    var expected = "start<textarea id='2' rows=4></textarea>";
> >> +
> >> +    jum.assertEquals(expected,
> >> tapestry.html._processTextareas(initial));
> >> +    jum.assertEquals(expected + expected,
> >> +        tapestry.html._processTextareas(initial+initial));
> >> +}
> >> +
> >> function _createTestNode(element, empty){
> >>         var node = document.createElement("div");
> >>         node.setAttribute("id", "testid");
> >>
> >>
> >>
> >
> >
>
>
> --
> Andreas Andreou - andyhot@apache.org - http://andyhot.di.uoa.gr
> Tapestry / Tacos developer
> Open Source / J2EE Consulting
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: dev-help@tapestry.apache.org
>
>


-- 
Jesse Kuhnert
Tapestry/Dojo/(and a dash of TestNG), team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

Re: svn commit: r477408 - in /tapestry/tapestry4/trunk/tapestry-framework/src/js: tapestry/html.js tests/test_html.js

Posted by andyhot <an...@di.uoa.gr>.
Jesse Kuhnert wrote:
> Not that I'm sure it would handle all use cases, but wouldn't it be
> better
> to just make the TextArea component not create empty <textarea />
> tags, or
> at the very worst re-work the template parser TextToken's to handle it
> right
> there if it's not a tapestry managed block of text?
>
> (just because I know from recent experience that regexp matching on the
> client side is fairly expensive, and anything involving regexp + ~all~
> core
> IO operations is something deserving of more scrutiny ;) )

we aren't actually creating empty <textarea/> tags
our server side code creates <textarea></textarea> code.

But ... when an ajax response with xml type is returned,
mozilla's dom/xml parser transparently stores this as <textarea/>
So, when we eventually insert that back at the document, TAPESTRY-1129
arises...

If the ajax response type wasn't xml (i.e. simple text) we wouldn't be
having this
issue (but of course, we wouldn't be able to do all the other stuff)

>
> On 11/20/06, andyhot@apache.org <an...@apache.org> wrote:
>>
>> Author: andyhot
>> Date: Mon Nov 20 15:37:40 2006
>> New Revision: 477408
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=477408
>> Log:
>> TAPESTRY-1129: Unpack emptry textareas for mozilla derivative browsers
>>
>> Modified:
>>     tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>>    
>> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>>
>> Modified:
>> tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js?view=diff&rev=477408&r1=477407&r2=477408
>>
>>
>> ==============================================================================
>>
>> --- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>> (original)
>> +++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>> Mon Nov 20 15:37:40 2006
>> @@ -5,6 +5,9 @@
>>   * Provides functionality related to parsing and rendering dom nodes.
>>   */
>> tapestry.html={
>> +
>> +        TextareaMatcher:'<textarea(.*?)/>', // regexp for compact
>> textarea elements
>> +        TextareaReplacer:'<textarea$1></textarea>', // replace pattern
>> for compact textareas
>>
>>          /**
>>          * Function: getContentAsString
>> @@ -12,12 +15,12 @@
>>          * Takes a dom node and returns its contents rendered in a
>> string.
>>           *
>>           * The resulting string does NOT contain any markup (or
>> attributes) of
>> -         * the given node - only child nodes are rendered and returned.
>> +         * the given node - only child nodes are rendered and
>> returned.Content
>>           *
>>           * Implementation Note: This function tries to make use of
>> browser
>>           * specific features (the xml attribute of nodes in IE and the
>> XMLSerializer
>>           * object in Mozilla derivatives) - if those fails, a generic
>> implementation
>> -         * is guaranteed to work in all platforms.
>> +         * is used that is guaranteed to work in all platforms.
>>          *
>>          * Parameters:
>>          *
>> @@ -84,6 +87,7 @@
>>                 if (s == "undefined")
>>                         return this._getContentAsStringGeneric(node);
>>             }
>> +            s = this._processTextareas(s);
>>             return s;
>>         },
>>
>> @@ -106,5 +110,14 @@
>>                         }
>>                 }
>>                 return s;
>> -       }
>> +       },
>> +
>> +        _processTextareas:function(htmlData)
>> +       {
>> +               var match = new RegExp(tapestry.html.TextareaMatcher);
>> +                while (htmlData.match(match)){
>> +                    htmlData = htmlData.replace(match,
>> tapestry.html.TextareaReplacer);
>> +                }
>> +               return htmlData;
>> +       }
>> }
>>
>> Modified:
>> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>> URL:
>> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js?view=diff&rev=477408&r1=477407&r2=477408
>>
>>
>> ==============================================================================
>>
>> ---
>> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>> (original)
>> +++
>> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>> Mon Nov 20 15:37:40 2006
>> @@ -23,6 +23,23 @@
>>          // only browser based tests will show if this is working
>> }
>>
>> +function test_html_getElementAsString(){
>> +
>> +        var node = _createTestNode();
>> +
>> +        var data =
>> tapestry.html.getElementAsString(node).toLowerCase();
>> +        jum.assertEquals("<div id=\"testid\"><div
>> id=\"testid2\">content</div></div>", data);
>> +}
>> +
>> +function test_html_processTextareas(){
>> +    var initial = "start<textarea id='2' rows=4/>";
>> +    var expected = "start<textarea id='2' rows=4></textarea>";
>> +
>> +    jum.assertEquals(expected,
>> tapestry.html._processTextareas(initial));
>> +    jum.assertEquals(expected + expected,
>> +        tapestry.html._processTextareas(initial+initial));
>> +}
>> +
>> function _createTestNode(element, empty){
>>         var node = document.createElement("div");
>>         node.setAttribute("id", "testid");
>>
>>
>>
>
>


-- 
Andreas Andreou - andyhot@apache.org - http://andyhot.di.uoa.gr
Tapestry / Tacos developer
Open Source / J2EE Consulting 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Re: svn commit: r477408 - in /tapestry/tapestry4/trunk/tapestry-framework/src/js: tapestry/html.js tests/test_html.js

Posted by Jesse Kuhnert <jk...@gmail.com>.
Not that I'm sure it would handle all use cases, but wouldn't it be better
to just make the TextArea component not create empty <textarea /> tags, or
at the very worst re-work the template parser TextToken's to handle it right
there if it's not a tapestry managed block of text?

(just because I know from recent experience that regexp matching on the
client side is fairly expensive, and anything involving regexp + ~all~ core
IO operations is something deserving of more scrutiny ;) )

On 11/20/06, andyhot@apache.org <an...@apache.org> wrote:
>
> Author: andyhot
> Date: Mon Nov 20 15:37:40 2006
> New Revision: 477408
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=477408
> Log:
> TAPESTRY-1129: Unpack emptry textareas for mozilla derivative browsers
>
> Modified:
>     tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
>     tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
>
> Modified:
> tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
> URL:
> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js?view=diff&rev=477408&r1=477407&r2=477408
>
> ==============================================================================
> --- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
> (original)
> +++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js
> Mon Nov 20 15:37:40 2006
> @@ -5,6 +5,9 @@
>   * Provides functionality related to parsing and rendering dom nodes.
>   */
> tapestry.html={
> +
> +        TextareaMatcher:'<textarea(.*?)/>', // regexp for compact
> textarea elements
> +        TextareaReplacer:'<textarea$1></textarea>', // replace pattern
> for compact textareas
>
>          /**
>          * Function: getContentAsString
> @@ -12,12 +15,12 @@
>          * Takes a dom node and returns its contents rendered in a string.
>           *
>           * The resulting string does NOT contain any markup (or
> attributes) of
> -         * the given node - only child nodes are rendered and returned.
> +         * the given node - only child nodes are rendered and
> returned.Content
>           *
>           * Implementation Note: This function tries to make use of
> browser
>           * specific features (the xml attribute of nodes in IE and the
> XMLSerializer
>           * object in Mozilla derivatives) - if those fails, a generic
> implementation
> -         * is guaranteed to work in all platforms.
> +         * is used that is guaranteed to work in all platforms.
>          *
>          * Parameters:
>          *
> @@ -84,6 +87,7 @@
>                 if (s == "undefined")
>                         return this._getContentAsStringGeneric(node);
>             }
> +            s = this._processTextareas(s);
>             return s;
>         },
>
> @@ -106,5 +110,14 @@
>                         }
>                 }
>                 return s;
> -       }
> +       },
> +
> +        _processTextareas:function(htmlData)
> +       {
> +               var match = new RegExp(tapestry.html.TextareaMatcher);
> +                while (htmlData.match(match)){
> +                    htmlData = htmlData.replace(match,
> tapestry.html.TextareaReplacer);
> +                }
> +               return htmlData;
> +       }
> }
>
> Modified:
> tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
> URL:
> http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js?view=diff&rev=477408&r1=477407&r2=477408
>
> ==============================================================================
> --- tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
> (original)
> +++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_html.js
> Mon Nov 20 15:37:40 2006
> @@ -23,6 +23,23 @@
>          // only browser based tests will show if this is working
> }
>
> +function test_html_getElementAsString(){
> +
> +        var node = _createTestNode();
> +
> +        var data = tapestry.html.getElementAsString(node).toLowerCase();
> +        jum.assertEquals("<div id=\"testid\"><div
> id=\"testid2\">content</div></div>", data);
> +}
> +
> +function test_html_processTextareas(){
> +    var initial = "start<textarea id='2' rows=4/>";
> +    var expected = "start<textarea id='2' rows=4></textarea>";
> +
> +    jum.assertEquals(expected, tapestry.html._processTextareas(initial));
> +    jum.assertEquals(expected + expected,
> +        tapestry.html._processTextareas(initial+initial));
> +}
> +
> function _createTestNode(element, empty){
>         var node = document.createElement("div");
>         node.setAttribute("id", "testid");
>
>
>


-- 
Jesse Kuhnert
Tapestry/Dojo/(and a dash of TestNG), team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com