[Ur] Data attributes

Patrick Hurst phurst at mit.edu
Tue Feb 25 00:14:20 EST 2014


Sergey Mironov <grrwlf at gmail.com> writes:

> What guarantees do we usually want when we use data-* ? Do we want to
> be protected from repeating the same [data-foo] attribute twice?

This would be ideal; I don't remember what happens if you try to get the
value of a repeated attribute, but even if it's defined I wouldn't like
to rely on it. The record method also has the advantage of avoiding
pairs like ("foo bar", "baz") where the attribute name can't really be
encoded. On the other hand, it's harder and Adam says it'd slow down
type checking and has the possibility of making the types uglier.

>
> Are you working on writing a Bootstrap3 library? Do you have a public
> repo to try?
>
> Regards,
> Sergey

I do; it's available at http://web.mit.edu/~phurst/hg/bootstrap/ . It
doesn't have any support for the JavaScript stuff, just the CSS, and
right now you have to do something like 

rewrite style Bootstrap/* [-]

or

rewrite style Bootstrap3/* [-]

(although I'm planning on splitting it into two libraries per Adam's
suggestion).

Patrick

>
> 2014-02-21 2:56 GMT+04:00 Patrick Hurst <phurst at mit.edu>:
>> Any attribute whose name starts with 'data-' is valid on any HTML5
>> element with any value (see
>> <http://www.w3.org/html/wg/drafts/html/CR/dom.html> section 3.5.9). Some
>> frameworks, such as Twitter Bootstrap 3, rely on the presence of these,
>> but right now there's no easy built-in way to include them using Ur/Web
>> XML literals.
>>
>> One approach would be to add a 'data' pseudotag, similar to the 'link'
>> tag on <a> elements, whose value is a record all of whose values are
>> strings; [<div data={{Foo = "bar"}}/>] would then be rendered as [<div
>> data-foo="bar"></div>]. The downside of this is that it'd involve
>> significant changes to the standard library type system, since the [tag]
>> type constructor would then need a new field for the names of all the
>> data- attributes.
>>
>> Another approach is to have the value of the 'data' tag be a list of
>> tuples of strings; [<div data={("foo", "bar") :: nil}/>] would then be
>> rendered as [<div data-foo="bar"></div>]. I think this would be less
>> safe, but also significantly easier to implement.
>>
>> I e-mailed Adam about this and he suggested I take it to the list. What
>> do you all think?
>>
>> _______________________________________________
>> Ur mailing list
>> Ur at impredicative.com
>> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>
> _______________________________________________
> Ur mailing list
> Ur at impredicative.com
> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur



More information about the Ur mailing list