- From: Daniel Glazman <daniel.glazman@disruptive-innovations.com>
- Date: Fri, 03 Sep 2010 21:12:20 +0200
- To: "www-style@w3.org" <www-style@w3.org>
I am currently implementing CSS 3 multiple backgrounds with linear and radial gradients and CSS 3 Transforms into my new Web editor, BlueGriffon [1] [2]. Having those features implemented in a wysiwyg editor, supposed to hide entirely the complexity of CSS and provide the user with clean and intuitive UI, is hell for the following reasons: 1. the complexity of linear-gradient() and radial-gradient() functional notations. Given the complexity of those notations, I had to rely on my CSS parser JSCSSP to parse them. In other terms, I had to reimplement in JavaScript the whole machinery of the CSS parser because no API is exposed to reach the internals of a given gradient. Urgh, to say the least. Web or app authors should not have to write a parser, even based on RegExps, to manipulate a given CSS value since the rendering engine already has everything needed for that, just not exposed. I then strongly recommend the inclusion in the CSS 3 Images spec of a DOM API allowing to reach the individual components of a given gradient (angle, position, size and shape for radial gradients, array of color stops). I have no religion about where in the DOM it should be added and I care only about the feature itself. 2. manipulating CSS 3 Transforms is also difficult because the computed value of a very simple and highly readable set of transforms like rotate(45deg) translateX(100px) is a matrix... Decomposing the matrix to retrieve the various components composing the transformation is documented in the spec but I really don't understand why this is not implemented somewhere in the DOM. It will be faster and safer than hundreds of various matrix decomposition codes (and their bugs...). In the case of a larger set of individual transforms - let's say a dozen of transforms in a row - the "history" of transforms chronologically applied by the web author is entirely lost when you look at a specified value or the computed value. That loss is huge for a web author. Of course, it would be MUCH better to be able to preserve the original set of transforms above because from a web author's point of view, it IS editable in source view. A matrix is NOT editable in source view w/o external help. 3. we desperately need Element.getCascadedValue(property) and Element.getCascadedPriority(property). I had to reimplement them because they're the absolute root of a wysiwyg editor. 4. to be able to automatically manipulate styles in a wysiwyg editor, an API to find all rules applying to a given element (see inIDOMUtils in Gecko) is needed. An API to retrieve the specificity of each selector in the group of selectors (possibly reduced to one single selector) attached to a given style rule is needed too. Being able to reach the simple selectors in a given selector is also needed, I wrote about it long ago and even proposed a CSS Editing OM. We're still there. Think embeddability. Browser vendors, if you really want to make your rendering engine useful to embedders, you must provide them with helpers allowing to easily manipulate the languages of the Web. The suggestions above are nothing less and nothing more than an attempt to fill a part of the gap. [1] http://bluegriffon.org [2] http://twitpic.com/2kt9rx/full </Daniel> -- W3C CSS WG, Co-chair
Received on Friday, 3 September 2010 19:12:52 UTC