Sadly, thats not working :(

I did a script/generate extension MailerAlternateRender, then I tried the 
following code
(in 
/vendor/extensions/mailer_alternate_render/app_models/mailer_alternate_render_tags.rb):

class MailerPage
   desc %{ Renders an @<option/>@ tag if the parent is a
     @<r:mailer:select>...</r:mailer:select>@ tag, an @<input type="radio"/>@ 
tag if
     the parent is a @<r:mailer:radiogroup>...</r:mailer:radiogroup>@ }
     tag 'mailer:option' do |tag|
       @tag_attr = tag.attr.symbolize_keys
       raise_error_if_name_missing "mailer:option"
       result = ""
       if tag.locals.parent_tag_type == 'select'
         result << %Q|<option value="#{tag_attr.delete(:value) || 
tag_attr[:name]}" #{add_attrs_to("")}>#{tag_attr[:name]}</option>|
       elsif tag.locals.parent_tag_type == 'radiogroup'
         tag.globals.option_count = tag.globals.option_count.nil? ? 1 : 
tag.globals.option_count += 1
         options = tag_attr.clone.update({
           :id => "#{tag.locals.parent_tag_name}_#{tag.globals.option_count}",
           :value => tag_attr.delete(:value) || tag_attr[:name],
           :name => tag.locals.parent_tag_name
         })
         result << %Q|<label 
for="#{options[:id]}"><span>#{tag_attr[:name]}</span>|
         result << input_tag_html( 'radio', options )
         result << "</label>"
         #result << input_tag_html( 'radio', options )
         #result << %Q|<label for="#{options[:id]}">#{tag_attr[:name]}</label>|
       end
     end
end

I've also tried putting it in a MailerAlternateRenderTags module (replacing the 
class declaration),
and including Page.send :include, MailerAlternateRenderTags in 
mailer_alternate_render_extension.rb

Any thoughts?

==
Will Green

Aitor Garay-Romero wrote:
>    Yes, you can directly replace MailerExtension's tag definition with
> something in the line of:
> 
>    class MailerExtension
>       desc {
>          -> you will need to duplicate the original desc here, or if you
> don't care just don't put it (you won't get docs)
>       }
>       tag "r:mailer:option" do |tag|
>          -> your new code here
>       end
>     end
> 
>     Be sure to define the tag inside the MailerExtension class so it can
> access that context.  Your tag definition will replace the original one.
> 
>     The best of Rails is Ruby...
> 
>     /AITOR
> 
> On 10/12/07, Will Green <[EMAIL PROTECTED]> wrote:
>> I use svn:externals for my extensions, so directly editing the
>> MailerPage class is out. I understand that Ruby classes are open, but
>> the Pages in radiant use a DSL for tags, containing a desc, tag pair.
>> This is whats throwing me off.
>>
>> It sounds like you're saying I can create an extension that loads after
>> Mailer, and that defines a radius tag that is named the same as the one
>> whose functionality I am looking to replace (r:mailer:option), and it
>> will override the one defined in the Mailer extension. Do I understand
>> you correctly? Could it be that simple?
>>
>> (Sorry, c# .Net puts food on the table right now, so I've grown
>> accustomed to be skeptical of simple solutions, because there are none
>> in .Net, not that I've found, anyway).
>>
>> ==
>> Will Green
>>
>> Aitor Garay-Romero wrote:
>>>   One of the main features of Ruby is that it's "open" in the sense that
>>> your code can modify any other loaded coded as desired.
>>>
>>>    In your case, make an extension that loads after the mailer extension
>> and
>>> patches the MailerPage class as desired.
>>>
>>>    Other option is to patch your local mailer extension directly.
>>>
>>>     /AITOR
>>>
>>> On 10/12/07, Will Green <[EMAIL PROTECTED]> wrote:
>>>> Perhaps more a Ruby question than a Radiant question, but...
>>>>
>>>> I'd like to alter the html that the Mailer Extension outputs for
>>>> <r:mailer:option> tags within a <r:mailer:radiogroup>.  Rather than
>> have
>>>> the Label tag follow the Input tag, I want to wrap in Input tag in the
>>>> Label tag (with the label text inside a span). This way, you can have
>>>> the action of clicking on the label activate the associated control
>>>> (even in IE 6, which for some reason, doesn't do it with just the for
>>>> attribute).
>>>>
>>>> Is there an easy way to "monkey patch" MailerPage to alter the tag
>>>> 'mailer:option' method?
>>>>
>>>> So, instead of:
>>>>
>>>> <input type="radio" value="Yes" id="have_children_1" class="radio"
>>>> name="mailer[have_children]"/><label for="have_children_1">Yes</label>
>>>>
>>>> <input type="radio" value="No" id="have_children_2" class="radio"
>>>> checked="checked" name="mailer[have_children]"/><label
>>>> for="have_children_2">No</label>
>>>>
>>>> I'd like to instead output:
>>>>
>>>> <label for="have_children_1">
>>>>    <input type="radio" value="Yes" id="have_children_1" class="radio"
>>>> name="mailer[have_children]"/><span>Yes</span>
>>>> </label>
>>>> <label for="have_children_2">
>>>> <input type="radio" value="No" id="have_children_2" class="radio"
>>>> checked="checked" name="mailer[have_children]"/><span>No</span></label>
>>>>
>>>> --
>>>> Will Green
>>>> _______________________________________________
>>>> Radiant mailing list
>>>> Post:   [email protected]
>>>> Search: http://radiantcms.org/mailing-list/search/
>>>> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
>>>>
>>> _______________________________________________
>>> Radiant mailing list
>>> Post:   [email protected]
>>> Search: http://radiantcms.org/mailing-list/search/
>>> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
>> _______________________________________________
>> Radiant mailing list
>> Post:   [email protected]
>> Search: http://radiantcms.org/mailing-list/search/
>> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
>>
> _______________________________________________
> Radiant mailing list
> Post:   [email protected]
> Search: http://radiantcms.org/mailing-list/search/
> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
_______________________________________________
Radiant mailing list
Post:   [email protected]
Search: http://radiantcms.org/mailing-list/search/
Site:   http://lists.radiantcms.org/mailman/listinfo/radiant

Reply via email to