I have good news and bad news. The good news is that I figured out 
Steve's problem. The bad news is that it's practically unfixable.

Steve, the issue is with the Haml tag-matching Regex. Because Regexes 
don't have the capability to understand the balancing of characters like 
parentheses or, in this case, curly braces, once the Regex sees the 
first "{" that opens the attributes hash, it just goes on until it sees 
the last "}" in the entire line. That means that if you have an 
attribute hash for the tag and a hash in the value, your tag will break.

There are a few ways around this. The best would be to put the 
check_box_tag call into a helper; this also results in a more readable 
template, so it's what I would advise.

This is definitely a bug, but likely one that won't be fixed any time 
soon. I believe eventually Ruby's Regexes will become more powerful, and 
able to support balancing, but until then Regexes just can't do this and 
implementing a pure-Ruby information extractor without them would be 
prohibitively slow. So, unfortunately, the only solution is to not use 
brackets there.

- Nathan

Genevate wrote:
> I'm having the saem issue trying to do somehting very similar.
>
> %a{:href=>
> "javascript:void(0)", :onclick=>"event_toggle_occurrences(#{event.id,
> url_for(:action => "occurrences", :id => event)});", :title=>"Click to
> view all occurrences"}
>
> Any luck with this?
>
> Chris-
>
>
> On Mar 9, 3:53 pm, "s.ross" <[EMAIL PROTECTED]> wrote:
>   
>> The error message is:
>>
>> (eval):43:in `compile': compile error
>> (eval):34: parse error, unexpected '=', expecting ')'
>> _hamlout.open_tag("td", 1, nil, false, "", {:class => @row_class}=  
>> check_box_tag :approved, 1, post_list_row.approved, {:onclick => "new  
>> Ajax.Request('#{url_for(:controller => 'posts', :action =>  
>> 'toggle_approved', :id => post_list_row[:id])}')"}, nil, false)
>>                                                                    ^
>> (eval):34: parse error, unexpected ')', expecting kEND
>>
>> Extracted source (around line #12):
>>
>> 9:   %td{:class => @row_class}
>> 10:     = post_list_row.posted_by
>> 11:   %td{:class => @row_class}= check_box_tag :approved, 1,  
>> post_list_row.approved, {:onclick => "new Ajax.Request('#{url_for
>> (:controller => 'posts', :action => 'toggle_approved', :id =>  
>> post_list_row[:id])}')"}
>> 12:   %td{:class => @row_class}= link_to(pluralize
>> (post_list_row.comments.count(:conditions => 'approved = 0'),  
>> 'comment'), :controller => 'comments', :action => 'list')
>>
>> Strange, huh?
>>
>> Steve
>>
>> On Mar 9, 2007, at 10:42 AM, Nathan Weizenbaum wrote:
>>
>>
>>
>>     
>>> I don't think it should be failing... what happens?
>>>       
>>> - Nathan
>>>       
>>> s.ross wrote:
>>>       
>>>> I have a case where this works:
>>>>         
>>>> %td{:class => @row_class}
>>>>    = check_box_tag :approved, 1, post_list_row.approved, {:onclick =>
>>>> "new Ajax.Request('#{url_for(:controller => 'posts', :action =>
>>>> 'toggle_approved', :id => post_list_row[:id])}')"}
>>>>         
>>>> But this fails:
>>>>         
>>>> %td{:class => @row_class}= check_box_tag :approved, 1,
>>>> post_list_row.approved, {:onclick => "new Ajax.Request('#{url_for
>>>> (:controller => 'posts', :action => 'toggle_approved', :id =>
>>>> post_list_row[:id])}')"}
>>>>         
>>>> I prefer the latter construct. Any reason it might be failing that
>>>> I'm not seeing?
>>>>         
>>>> Thanks,
>>>>         
>>>> Steve
>>>>         
>
>
> >
>
>   


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Haml" 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/haml?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to