Yeilding Snippets

View: New views
5 Messages — Rating Filter:   Alert me  

Yeilding Snippets

by Andrew Neil-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I would like to share an idea that I thought would make snippets even  
more useful.

Rather than always calling a snippet as a single, self-closing tag:

   <r:snippet name="my-snip"/>

You could call it as a pair of tags, with content in between:

   <r:snippet name="my-snip">
     <p>Lorem ipsum dolor sit amet...</p>
   </r:snippet>

The snippet itself could optionally call <r:yeild/>. If this tag  
occurs anywhere in the snippet, it would be replaced with the content  
appearing between the open/close tags which call the snippet.

An example:

   <div class="top-left">
     <div class="top-right">
       <div class="bottom-left">
         <div class="bottom-right">
           <r:yeild/>
         </div>
       </div>
     </div>
   </div>

In this case, the `<r:snippet>` opening tag would correspond to the  
four opening div tags, and the `</r:snippet>` closing tag would  
correspond to the four closing div tags.

I have thought about achieving the same markup by writing two separate  
snippets, and calling from my layout:

   <r:snippet name="open-four-divs">
     <p>Lorem ipsum dolor sit amet...</p>
   <r:snippet name="close-four-divs">

But it just looks and feels so wrong!

I'd like to hear what you think about the idea. Could you see a use  
for it? Would it be difficult to implement? Does Radiant already do  
this, and I just didn't realise?

Cheers,

Drew
_______________________________________________
Radiant mailing list
Post:   Radiant@...
Search: http://radiantcms.org/mailing-list/search/
Site:   http://lists.radiantcms.org/mailman/listinfo/radiant

Re: Yeilding Snippets

by Sean Cribbs-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Andrew,

You would need to capture the contents of the <r:snippet /> tag before
rendering the snippet, either using tag.block or tag.expand and saving
it in a local.  Then your <r:yield /> tag would emit that local.

Sean

Andrew Neil wrote:

> I would like to share an idea that I thought would make snippets even  
> more useful.
>
> Rather than always calling a snippet as a single, self-closing tag:
>
>    <r:snippet name="my-snip"/>
>
> You could call it as a pair of tags, with content in between:
>
>    <r:snippet name="my-snip">
>      <p>Lorem ipsum dolor sit amet...</p>
>    </r:snippet>
>
> The snippet itself could optionally call <r:yeild/>. If this tag  
> occurs anywhere in the snippet, it would be replaced with the content  
> appearing between the open/close tags which call the snippet.
>
> An example:
>
>    <div class="top-left">
>      <div class="top-right">
>        <div class="bottom-left">
>          <div class="bottom-right">
>            <r:yeild/>
>          </div>
>        </div>
>      </div>
>    </div>
>
> In this case, the `<r:snippet>` opening tag would correspond to the  
> four opening div tags, and the `</r:snippet>` closing tag would  
> correspond to the four closing div tags.
>
> I have thought about achieving the same markup by writing two separate  
> snippets, and calling from my layout:
>
>    <r:snippet name="open-four-divs">
>      <p>Lorem ipsum dolor sit amet...</p>
>    <r:snippet name="close-four-divs">
>
> But it just looks and feels so wrong!
>
> I'd like to hear what you think about the idea. Could you see a use  
> for it? Would it be difficult to implement? Does Radiant already do  
> this, and I just didn't realise?
>
> Cheers,
>
> Drew
> _______________________________________________
> Radiant mailing list
> Post:   Radiant@...
> Search: http://radiantcms.org/mailing-list/search/
> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
>
>  

_______________________________________________
Radiant mailing list
Post:   Radiant@...
Search: http://radiantcms.org/mailing-list/search/
Site:   http://lists.radiantcms.org/mailman/listinfo/radiant

Re: Yeilding Snippets

by Andrew Neil-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Sean, thanks for your reply. I thought there would be more to it than  
that, but you made it sound easy, so I gave it a go. Here is the ticket:

http://dev.radiantcms.org/radiant/ticket/611
http://dev.radiantcms.org/radiant/attachment/ticket/611/enable_snippets_as_double_tag_with_yield.diff

> You would need to capture the contents of the <r:snippet /> tag before
> rendering the snippet, either using tag.block or tag.expand and saving
> it in a local.  Then your <r:yield /> tag would emit that local.

I wasn't sure how to save tag.expand in a local so that it was  
accessible from <r:yield/>, so I've cheated a little:

        snippet.content.gsub!(%r{<r\:yield\s?/?>}, tag.expand)

and making <r:yield/> output nothing. It's not exactly idiomatic, but  
it passes the tests!

Cheers,

Drew
_______________________________________________
Radiant mailing list
Post:   Radiant@...
Search: http://radiantcms.org/mailing-list/search/
Site:   http://lists.radiantcms.org/mailman/listinfo/radiant

Re: Yeilding Snippets

by Sean Cribbs-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Something like this:

(in your snippet tag)

tag.locals.yield = tag.expand


tag 'yield' do |tag|
  tag.locals.yield
end

Andrew Neil wrote:

> Sean, thanks for your reply. I thought there would be more to it than  
> that, but you made it sound easy, so I gave it a go. Here is the ticket:
>
> http://dev.radiantcms.org/radiant/ticket/611
> http://dev.radiantcms.org/radiant/attachment/ticket/611/enable_snippets_as_double_tag_with_yield.diff
>
>  
>> You would need to capture the contents of the <r:snippet /> tag before
>> rendering the snippet, either using tag.block or tag.expand and saving
>> it in a local.  Then your <r:yield /> tag would emit that local.
>>    
>
> I wasn't sure how to save tag.expand in a local so that it was  
> accessible from <r:yield/>, so I've cheated a little:
>
> snippet.content.gsub!(%r{<r\:yield\s?/?>}, tag.expand)
>
> and making <r:yield/> output nothing. It's not exactly idiomatic, but  
> it passes the tests!
>
> Cheers,
>
> Drew
> _______________________________________________
> Radiant mailing list
> Post:   Radiant@...
> Search: http://radiantcms.org/mailing-list/search/
> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
>
>  

_______________________________________________
Radiant mailing list
Post:   Radiant@...
Search: http://radiantcms.org/mailing-list/search/
Site:   http://lists.radiantcms.org/mailman/listinfo/radiant

Re: Yeilding Snippets

by Andrew Neil-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks Sean, updated my patch:

http://dev.radiantcms.org/radiant/attachment/ticket/611/enable_snippets_as_double_tag_with_yield.2.diff

Cheers,

Drew



On 14 Feb 2008, at 14:21, Sean Cribbs wrote:

> Something like this:
>
> (in your snippet tag)
>
> tag.locals.yield = tag.expand
>
>
> tag 'yield' do |tag|
>  tag.locals.yield
> end
>
> Andrew Neil wrote:
>> Sean, thanks for your reply. I thought there would be more to it than
>> that, but you made it sound easy, so I gave it a go. Here is the  
>> ticket:
>>
>> http://dev.radiantcms.org/radiant/ticket/611
>> http://dev.radiantcms.org/radiant/attachment/ticket/611/enable_snippets_as_double_tag_with_yield.diff
>>
>>
>>> You would need to capture the contents of the <r:snippet /> tag  
>>> before
>>> rendering the snippet, either using tag.block or tag.expand and  
>>> saving
>>> it in a local.  Then your <r:yield /> tag would emit that local.
>>>
>>
>> I wasn't sure how to save tag.expand in a local so that it was
>> accessible from <r:yield/>, so I've cheated a little:
>>
>> snippet.content.gsub!(%r{<r\:yield\s?/?>}, tag.expand)
>>
>> and making <r:yield/> output nothing. It's not exactly idiomatic, but
>> it passes the tests!
>>
>> Cheers,
>>
>> Drew
>> _______________________________________________
>> Radiant mailing list
>> Post:   Radiant@...
>> Search: http://radiantcms.org/mailing-list/search/
>> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
>>
>>
>
> _______________________________________________
> Radiant mailing list
> Post:   Radiant@...
> Search: http://radiantcms.org/mailing-list/search/
> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant

_______________________________________________
Radiant mailing list
Post:   Radiant@...
Search: http://radiantcms.org/mailing-list/search/
Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
LightInTheBox - Buy quality products at wholesale price