I'm just starting out on Enlive - any examples added would be welcome. I'll also accumulate some documentation as I go through the learning curve.
Thanks, Adrian. On Wed, Apr 15, 2009 at 5:05 AM, David Nolen <dnolen.li...@gmail.com> wrote: > One early thought, would you like me to extend the number of examples? I'm > really getting into the nitty gritty of what's possible with Enlive and it > would be nice to have a relatively informative list of possibilities > distributed with the library vs. the single example that's in there right > now ;) > 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 -~----------~----~----~----~------~----~------~--~---