Great, looking forward to see what Chris has come up with. I'm not
enough of a JS pro to be the one doing this.

I think what matters is the design. Jquery is an accessible
implementation target, but if someone wants to retarget the design to
gclosure, thats fine too (just more work than is need to get started)

On the design front, there is a fundamental difference between a DSL
and the "standalone generic function" style. So I want to point this
out and advocate for other design decisions I made, to stir the pot
here.

Generic function style treats dom manipulations as stand-alone functions, like
dom/append, events/on, etc

The theoretical benefit is 1) you can use generic clojure functions to
manipulate these datastructures, and 2) you can insert your own
functions into the call tree at any point, like

(dom/append (events/on (your-function (dom/query X)) Y)  Z)

However the set of useful dom manipulations is a well-understood, and
is closed set (dom in, dom out). So there is not much benefit in this.

And in fact it tends of obfuscate the code, due to the namespace
prefixing, and also because the dom manipulation sequence is not
clearly set apart from other code. You have to remember how
clojure-like a given return value is.

Better to have a clear sequence like

($ X (click Y) (append Z))

This also has the additional advantage that $ can do a variety of
important tasks, including taking care that "this" is properly
handled. In my library ($ :this) is its javascript equivalent at the
current evaluation context, so handling events is easy.

There are other extensions worth considering. Things like

($ <selector> (css <attribute> <atom>))

could wire an atom to a css (or other) dom attribute, by placing a
watcher on the atom and automatically updating the dom on change.

In general, a high-level cljs dom manipulation framework can consume
atoms (in addition to values) in a variety of places, thus creating
auto-updating views.

We can also leverage clojure maps to aggregate attribute-value pairs, like

($ <selector> (css {<a1> <v1> <a2> <v2}))

Finally, I'm just gonna reiterate that I am a major fan of allowing
<selector> to be an arbitrary hiccup structure, with the extension
that dom/jquery objects are allowed as entries in the hiccup vector.
This makes composing things easy.

On Fri, Jan 6, 2012 at 1:37 PM, Chris Granger <ibdk...@gmail.com> wrote:
> So there's pinot, but I've come to a relatively similar conclusion to
> Kovas that wrapping the goog libs aren't really the way to go. For
> one, I was basically replicating aspects of jQuery (like event
> delegation).
>
> Recently I started on doing some thing that makes jQuery play in the
> Clojure world really nicely. I'll get this onto github soon.
>
> Cheers,
> Chris.
>
> On Jan 6, 5:18 pm, kovas boguta <kovas.bog...@gmail.com> wrote:
>> Yes.
>>
>> I've created a jquery wrapper conveniently called cljs-jquery ,
>> however there is no documentation, tests, or general housekeeping yet
>> so haven't announced it. If you are 
>> brave,https://github.com/kovasb/cljs-jquery
>>
>> Previous libraries have followed the lead of the initial Clojurescript
>> examples, and tried to wrap gclosure to make it more
>> clojure-idiomatic.
>>
>> I think this whole approach is a mistake.
>>
>> This is not a generic data processing problem, so we shouldn't be
>> converting the dom into verbose generic clojure structures with
>> namespace prefixes everywhere.
>>
>> DOM manipulation is ideally suited to a DSL. JQuery already defines
>> the primitives, and provides the implementation. Lets just wrap it.
>>
>> The idea of my library is trivial. Just have a macro that expands into
>> a jquery call chain:
>>
>> $(selector).f(a,b).g(c,d)
>> is represented by
>> ($ selector (f a b) (g c d))
>>
>> (note that f and g don't need buzz-killing namespace prefixes)
>>
>> For bonus points, selector can be a hiccup structure (or a hiccup
>> structure with embedded dom objects) which ends up saving a huge
>> amount of code when creating new elements.
>>
>> In general this is far more concise and easier to code than any other
>> approach I've seen thus far.
>>
>>
>>
>>
>>
>>
>>
>> On Fri, Jan 6, 2012 at 3:16 AM, Shantanu Kumar <kumar.shant...@gmail.com> 
>> wrote:
>> > Is anybody working on a DOM-manipulation library for ClojureScript?
>>
>> > There are several JavaScript libraries that can probably be wrapped,
>> > but a ClojureScript library should be great. I noticed a short
>> > comparative list of jQuery basic operations vs JavaScript equivalent
>> > that looks interesting:http://sharedfil.es/js-48hIfQE4XK.html
>>
>> > Shantanu
>>
>> > --
>> > 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
>> > Note that posts from new members are moderated - please be patient with 
>> > your first post.
>> > 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
>
> --
> 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
> Note that posts from new members are moderated - please be patient with your 
> first post.
> 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

-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
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