Re: [css-variables] How to spec the OM for vars?

On Thu, Aug 23, 2012 at 5:46 PM, Tab Atkins Jr. <jackalmage@gmail.com> wrote:
> One of the remaining issues for Variables is what to expose in the OM, and how.
>
> Ideally, custom properties would just be exposed alongside all the
> other properties, so you could do "el.style.varFoo = 'bar';" or "x =
> getComputedStyle(el).varFoo;".
>
> This seems somewhat incompatible with how WebIDL works.  Right now,
> all the CSS properties are just exposed on CSSStyleDeclaration as a
> bunch of properties.  (If we were doing things properly, we'd do this
> by having every spec define a partial interface on it and add their
> properties.)
>
> However, there are an infinite number of custom properties.  I think
> we want to expose only the custom properties that are valid (set to a
> non-initial value).
>
> How can we do this in WebIDL?


Based on the feedback in this thread, I've now specced the API:
<http://dev.w3.org/csswg/css-variables/#cssom>

I've gone with adding a "var" attribute to CSSStyleDeclaration, which
is a CSSVariablesDeclaration object.

The CSSVariablesDeclaration interface just contains a
getter/setter/creator/deleter.  It accepts property names *without*
the "var-" prefix, like so:

el.style.var.foo /* equal to el.style.getPropertyValue('var-foo') */

I decided not to do any camelCase to dashes conversion, because it
wouldn't work if any component of the var name didn't start with an
ASCII lowercase letter. The shorthand .form only works if your var
name was a single JS ident, according to normal JS rules.  If your var
name doesn't match that, just use the array syntax:

el.style.var['foo-bar'] /* equal to el.style.getPropertyValue('var-foo-bar') */

Is this acceptable?  If so, we need to re-resolve to publish a WD, as
this is a major change.

~TJ

Received on Saturday, 1 September 2012 00:13:26 UTC