w3c / csswg-drafts

CSS Working Group Editor Drafts
https://drafts.csswg.org/
Other
4.5k stars 666 forks source link

[css-lists] Serialization of counter-increment/set/reset #4216

Open ewilligers opened 5 years ago

ewilligers commented 5 years ago

As discussed recently, counter-reset etc. can have repeated counter names.

For set/reset, only the last value for each name is relevant. For increment, only the total value for each name is relevant.

For serialization of specified and computed values, should implementations preserve repetitions?

For distinct names, should order be preserved, or should we use lexicographic order, or is order arbitrary?

Suppose we have counter-reset: foo 1 bar 2 foo 3 bar 4;

Should getComputedStyle().counterReset return "foo 1 bar 2 foo 3 bar 4" or "foo 1 foo 3 bar 2 bar 4" or "bar 2 bar 4 foo 1 foo 3" or "foo 3 bar 4" or "bar 4 foo 3", or are either of the last two OK (e.g. if an implementation uses hash tables) ?

ewilligers commented 5 years ago

Current implementations observed using https://jsfiddle.net/ericwilligers/f243bvn8/

Firefox / Edge 18: When serializing specified or resolved value, every author-supplied value appears, in the author-supplied order.

Blink / Safari: When serializing specified value, every author-supplied value appears, in the author-supplied order. When serializing resolved value, each counter-name only appears once, in arbitrary order (e.g. "end" before "begin"). Blink's implementation uses a hash table (shared by counter-increment and counter-reset).