Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

set_focus_to_id inside page.replace_html or insert_html error

#4849

Hi,

I don't know much about ruby, nor rails, nor reporting bugs, nor anything.
But I think I've found a bug in rails 2.3.8.

I have made a test case with the following files:

test.erb:

<!-- begin test.erb -->
<form>
<%= text_field(:test, :dna, {:value => @test.dna, :size => "8", :maxlength
=> "9"})%>
<%= submit_tag "Test" %>
</form>


<div id="new"> </div>


<%= update_page_tag { |page| page[:new].replace_html(render(:partial => 'test_partial' ) ) } %>


<%= set_focus_to_id 'test_dna' %>


<!-- end test.erb -->

test_partial.erb

<!-- begin test_partial.erb -->


<h1>There is a problem somewhere around here!!</h1> <%= set_focus_to_id "it_doesnt_matter" %>


<!-- end _test_partial.erb -->

This is generating erroneous javascript in the output file (HTML) like:

<!-- begin bad script -->
<script type="text/javascript">
//<![CDATA[
try {
$("new").update("<h1>There is a problem somewhere around here!!</h1>\n

<script type=\"text/javascript\">
\n//<![CDATA[\n$('it_doesnt_matter').focus()\n//]]>\n
</script>

 \n");
} catch (e) { alert('RJS error:\n\n' + e.toString());
alert('$(\"new\").update(\"<h1>There is a problem somewhere around
here!!</h1>\\n

<script type=\\\"text/javascript\\\">\\n//
<![CDATA[\\n$(\'it_doesnt_matter\').focus()\\n//]]>\\n
</script>

 \\n\");'); throw e }
//]]>

</script>

<script type="text/javascript">
//<![CDATA[
$('test_dna').focus()
//]]>
</script>
<!-- end bad script -->

The same test code in rails 1.2.6 renders as it should be, escaping some characters:

<!-- begin good script -->
<script type="text/javascript">
//<![CDATA[
try {
$("new").update("\074h1\076There is a problem somewhere around
here!!\074/h1\076\n\074script
type=\"text/javascript\"\076\n//\074![CDATA[\n$('it_doesnt_matter').focus()\n//]]\076\n\074/script\076
 \n");
} catch (e) { alert('RJS error:\n\n' + e.toString());
alert('$(\"new\").update(\"\\074h1\\076There is a problem somewhere around
here!!\\074/h1\\076\\n\\074script
type=\\\"text/javascript\\\"\\076\\n//\\074![CDATA[\\n$(\'it_doesnt_matter\').focus()\\n//]]\\076\\n\\074/script\\076
 \\n\");'); throw e }
//]]>
</script>

<script type="text/javascript">
//<![CDATA[
$('test_dna').focus()
//]]>
</script>

<!-- end good script -->

I could try to track the problem further, but I have no idea where to
look.

Any help will be appreciated.

Regards,

Ernesto

Reported by Ernesto · June 13th, 2010 @ 05:03 AM

State: invalid
Milestone: none
Assigned to: nobody
Importance: none

Activity

  1. Ernesto
    Ernesto

    Hi,

    there is no bug :$

    The behavior I want can be set in config/initializers/new_rails_defaults.rb, with the option

    ActiveSupport.escape_html_entities_in_json = true

    I'm sorry. I'd like to close the ticket.

    Regards,

    Ernesto.

    June 13th, 2010 @ 08:36 PM

  2. Rohit Arondekar
    Rohit Arondekar
    • State changed from new to invalid

    June 15th, 2010 @ 09:44 AM