Sorry to bombard but I couldn't get attr? or attr= to work inside the
selector:
(deftemplate my-app4 "app.html"
  [widgets]
  [:div '(attr? :tiptree:replace)] (content "bar"))
(apply str (my-app4 {}))

(deftemplate my-app4 "app.html"
  [widgets]
  [[:div '(attr? :tiptree:replace)]] (content "bar"))
(apply str (my-app4 {}))

Neither forms worked for me. I messed around with the enlive code itself for
quite a bit trying to understand what was going on under the hood but to no
avail.

On Tue, Apr 14, 2009 at 1:31 PM, Christophe Grand <christo...@cgrand.net>wrote:

>
> I pushed do->, attr=, attr? and snippets values as source to github
> http://github.com/cgrand/enlive/commits/right
>
> Christophe Grand a écrit :
> > Hello David,
> >
> > David Nolen a écrit :
> >
> >> Considering the above, I'm left wondering if it's possible to further
> >> eliminate these redundancies and make templates more reusable. I'm not
> >> sure if this is what you had in mind for Enlive, but allowing
> >> templates to be created without references to files would make it
> >> possible to build very, very composable interfaces.
> >> Of course it's quite possible that you can already do this with Enlive
> >> and I'm just unclear about how to accomplish it.
> >>
> >
> > I'm sorry for the lack of documentation.
> >
> > The "source" of a template/snippet can either be:
> > - a string (a resource path resolved by the classloader)
> > - a File, URI or URL,
> > - a map (a "literal" xml/html tree).
> >
> > A template is a function that returns a seq of strings. (It's the end of
> > the "pipeline".)
> >
> > A snippet is a function that now (in the "new" enlive) returns a seq of
> > nodes. (I suppose I should add "seq of nodes" as a valid source type.)
> > Snippets are valid values on the right-hand side of rules. The only
> > difference between templates and snippets is that templates serialize
> > their return value.
> >
> >
> >> This is great.  I had thought that supporting some kind of partial
> >> template thing would be interesting, but that's actually just my poor
> >> logic at work ;)
> >>
> >> It seems like with the new version of Enlive I could do something like
> >> this:
> >>
> >> (deftemplate pageA-template path
> >>   []
> >>   [[:div (attr? :tiptree:replace)]] (fn [xml-node]
> >>
> (find-the-widget-html-file-that-corresponds-to-a-certain-attr-and-return-as-result)))
> >>
> >> (deftemplate pageB-template path
> >>   []
> >>   [[:div (attr? :tiptree:replace)]] (fn [xml-node]
> >>
> (find-the-widget-html-file-that-corresponds-to-a-certain-attr-and-return-as-result)))
> >>
> >> (def pageAPartial (pageA-template))
> >> (def pageBPartial (pageB-template))
> >>
> >> ;; the following would work only if templates allowed passing html as
> >> strings and not just as files
> >>
> >> (deftemplate widgetsPageA pageAPartial
> >>   [map]
> >>   [[:div (attr? :tiptree:widget)]] (fn [xml]
> >> (use-xml-attr-and-map-to-apply-and-return-a-snippet))
> >>
> >> (deftemplate widgetsPageB pageBPartial
> >>   [map]
> >>   [[:div (attr? :tiptree:widget)]] (fn [xml]
> >> (use-xml-attr-and-map-to-apply-and-return-a-snippet))
> >>
> >> (def pageA (widgetsPageA someMap))
> >> (def pageB (widgetsPageA someMap))
> >>
> >>
> >
> > I suppose you really want to break the computation in two and not write:
> > (deftemplate pageA-template path
> >   [map]
> >   [[:div (attr? :tiptree:replace)]] (fn [xml-node]
> >
> (find-the-widget-html-file-that-corresponds-to-a-certain-attr-and-return-as-result))
> >   [[:div (attr? :tiptree:widget)]] (fn [xml]
> > (use-xml-attr-and-map-to-apply-and-return-a-snippet)))
> >
> > or:
> > (deftemplate pageA-template path
> >   [map]
> >   [[:div (attr? :tiptree:replace)]]
> >     (do->
> >       (fn [xml-node]
> >
> (find-the-widget-html-file-that-corresponds-to-a-certain-attr-and-return-as-result))
> >       (fn [xml] (use-xml-attr-and-map-to-apply-and-return-a-snippet))))
> >
> > (well, it would work if do-> has been ported to the new enlive)
> >
> > Keeping in mind the difference between a snippet and a template, you
> > will be able to do what you describe with the new enlive once I
> > implement 'attr? and add support for seq of nodes as a valid source type.
> >
> >
> > hth,
> >
> > Christophe
> >
> > >
> >
> >
>
>
> --
> 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