Updating to reflect last changes:

(def snipgets
  (let [divs (select (html-resource "widget.html")
               [[:div (attr? :tiptree:widget)]])]
    (into {}
      (for [div divs]
        [(-> div :attrs :tiptree:widget)
         (snippet div [root]
          [widget]
           [:div.value] (content (if widget
                                   (:value widget)
                                   "foo")))))))



Christophe Grand a écrit :
> select, snippet, at and template are macro sugar. If you _really_ want 
> to use first-class selectors then you'll have to deal directly with 
> states machines and use at*, select* and snippet* (I'm going to improve 
> their usability).
>
> While selectors aren't first class, they can be parametrized (as you did 
> in [[:div (attr= :tiptree:widget (str widgetType))]]). You can play with 
> compile-selector to see how selectors are expanded.
>
> Regarding your code, I'd like to warn you against using snippet like 
> that for performance reason (and it won't get any better when I make 
> templates rendering faster).
> It's better to extract snippets once for all:
>
> (def snipgets
>   (let [divs (mapcat #(select % [[:div (attr? :tiptree:widget)]])
>                (html-resource "widget.html"))]
>     (into {}
>       (for [div divs]
>         [(-> div :attrs :tiptree:widget)
>          (snippet div [root]
>           [widget]
>            [:div.value] (content (if widget
>                                    (:value widget)
>                                    "foo")))))))
>
> (deftemplate my-app6 "app2.html"
>  [widgets]
>   [[:div (attr? :tiptree:replace)]]
>     (fn [node]
>       (let [widgetType (:tiptree:replace (:attrs node))]
>         ((snipgets widgetType) ((keyword widgetType) widgets)))))
>
>
> David Nolen a écrit :
>   
>> On second thought, this is actually not that critical for what I'm 
>> trying to accomplish, and I'm not sure yet if I'll ever use such a 
>> feature. Macros that define snippets will probably suffice.
>>
>> (deftemplate my-app6 "app2.html"
>>   [widgets]
>>   [[:div (attr? :tiptree:replace)]] 
>>     (fn [node]
>>       (let [widgetType (:tiptree:replace (:attrs node))]
>> ((snippet "widget.html" [[:div (attr= :tiptree:widget (str widgetType))]]
>> [widget]
>> [:div.value] (content (if widget
>> (:value widget)
>> "foo")))
>> ((keyword widgetType) widgets)))))
>>
>> (apply str 
>>        (my-app6 {:widgetA {:value "0"}, 
>> :widgetB {:value "1"}}))
>>
>> Works for me, and this was in general the use case I was thinking of.
>>
>>
>> On Thu, Apr 16, 2009 at 4:24 PM, David Nolen <dnolen.li...@gmail.com 
>> <mailto:dnolen.li...@gmail.com>> wrote:
>>
>>     Because predicates in selectors no longer need to be quoted it
>>     seems you can't use Enlive selectors in a first class way with
>>     snippets:
>>
>>     (let [aselector [[:div (attr= :tiptree:widget "widgetA")]]]
>>       ((snippet "widget.html" aselector
>>        [some-map]
>>        [:div.value] (content "foo")) {}))
>>
>>     I believe this might be one of my final big requests :) I
>>     personally don't mind the quoted predicate forms, especially if
>>     this would simplify making selectors first class.  This would
>>     allow templates to dynamically generate snippets based on the
>>     properties of a particular node.
>>
>>     There's been a wild flurry of updates to Enlive recently and I am
>>     extremely excited about the possibilities.  Enlive is an idea
>>     which should be ripped off by every web framework worth talking
>>     about! ;) Thanks again for creating and maintaining it.
>>
>>     On Thu, Apr 16, 2009 at 7:15 AM, Christophe Grand
>>     <christo...@cgrand.net <mailto:christo...@cgrand.net>> wrote:
>>
>>
>>         Tom,
>>
>>         The redesign is nearly over (at least from a user standpoint),
>>         you may
>>         want to check it http://github.com/cgrand/enlive/tree/right
>>
>>         Christophe
>>
>>         Tom Hickey a écrit :
>>         > Hi Christophe,
>>         >
>>         > I keep running into the same problem with elements getting
>>         replaced.
>>         > I'm trying to set the content of an element with raw html
>>         (from a
>>         > snippet) and  unable to avoid both 1) the html getting
>>         escaped and 2)
>>         > the element getting replaced. I can avoid one or the other, via
>>         > escaped or text, just not both.
>>         >
>>         > I'm looking forward to see what you've got planned for the
>>         redesign,
>>         > as I'd really like to see this "feature" go away.
>>         >
>>         > Cheers,
>>         > Tom
>>         >
>>         > On Mar 20, 3:59 am, Christophe Grand <christo...@cgrand.net
>>         <mailto:christo...@cgrand.net>> wrote:
>>         >
>>         >> Phil Hagelberg a écrit :
>>         >>
>>         >>
>>         >>> But I did notice you have the use test-is line commented
>>         out in the
>>         >>> implementation; it seems a bit unfortunate to have to
>>         uncomment that to
>>         >>> run the tests and hope you remember to re-comment it
>>         before you commit.
>>         >>>
>>         >> The last commit was during the transition to lazy-seq and
>>         test-is was
>>         >> broken.
>>         >> I'll fix that.
>>         >>
>>         >> --
>>         >> Professional:http://cgrand.net/(fr)
>>         <http://cgrand.net/%28fr%29>
>>         >> On Clojure:http://clj-me.blogspot.com/(en)
>>         <http://clj-me.blogspot.com/%28en%29>
>>         >>
>>         > >
>>         >
>>         >
>>
>>
>>         --
>>         Professional: http://cgrand.net/ (fr)
>>         On Clojure: http://clj-me.blogspot.com/ (en)
>>
>>
>>
>>
>>
>>
>>
>>     
>
>
>   


-- 
Professional: http://cgrand.net/ (fr)
On Clojure: http://clj-me.blogspot.com/ (en)



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to