Thanks, Sean! Ticket #564
http://dev.radiantcms.org/radiant/ticket/564 == Will Green Sean Cribbs wrote: > Will, > > It sounds like you're jumping through a bunch of unnecessary hoops. > Could you just create a patch for the existing code, put it in a ticket, > and let me know about it? I'll fix it up right away. > > Sean > > Will Green wrote: >> Sorry, that's >> vendor/extensions/mailer_alternate_render/app/models/mailer_alternate_render_tags.rb >> >> == >> Will Green >> >> Will Green wrote: >> >>> 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 >>> >> _______________________________________________ >> 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
