mirror of
https://github.com/servo/servo.git
synced 2025-08-07 22:45:34 +01:00
script: Use an implemented pseudo-element to fortype=color
::color-swatch
(#37427)
Implement internal pseudo element, which would be resolved as a "Implemented Pseudo Element" within style computation. This is an concrete element that would has a primary style after the style computation, but could match and style resolved like an pseudo element. Therefore, it would have a different behavior compared to how does `pseudo`s that `ServoLayoutNode` had. Where they would not have a concrete element behind it. Note that, due to the nature of these pseudo elements residing inside a UA widget, these pseudo elements would therefore not be accessible in JavaScript by default. This kind of element is required in order to implement the [form control pseudo element](https://drafts.csswg.org/css-forms-1/#pseudo-elements) like `::placeholder`, `::color-swatch`, `::field-text`, etc. See [this docs](https://hackmd.io/@ChaKweTiau/BJ3zRdLQlg) for more details of the implementation. Then, the implemented pseudo element is utilized to implement style matching for input `type=text`. Servo's side of: https://github.com/servo/stylo/pull/212 Testing: No WPT regression. --------- Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>
This commit is contained in:
parent
d2ccf419c3
commit
378c4648e4
12 changed files with 201 additions and 163 deletions
|
@ -5,6 +5,7 @@
|
|||
use std::rc::Rc;
|
||||
|
||||
use euclid::default::Rect;
|
||||
use style::selector_parser::PseudoElement;
|
||||
use stylo_atoms::Atom;
|
||||
|
||||
use crate::dom::bindings::root::{Dom, MutNullableDom};
|
||||
|
@ -47,6 +48,13 @@ pub(crate) struct NodeRareData {
|
|||
|
||||
/// The live list of children return by .childNodes.
|
||||
pub(crate) child_list: MutNullableDom<NodeList>,
|
||||
|
||||
/// Whether this node represents a certain implemented pseudo-element.
|
||||
/// An implemented pseudo-element is a real element within a UA shadow tree
|
||||
/// that will match a certain pseudo-element selector.
|
||||
/// An example of this is the element matching the `::placeholder` selector.
|
||||
#[no_trace]
|
||||
pub(crate) implemented_pseudo_element: Option<PseudoElement>,
|
||||
}
|
||||
|
||||
#[derive(Default, JSTraceable, MallocSizeOf)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue