Bug 1373798 - Move HTML dir attribute state into event state flags

* Stop calling SetHasDirAuto/ClearHasDirAuto in input element code
* Introduce event state flags that track the state of an element's dir attribute
* Rewrite our existing checks for the state of the dir attr on top of the new event state flags
* Add pseudo-classes for matching on the dir attribute states
* Use the new dir attribute pseudoclasses in html.css

Tag #1375
This commit is contained in:
Matt A. Tobin 2020-04-17 05:50:47 -04:00 • committed by Roy Tam
commit 3b2a22f085
11 changed files with 139 additions and 72 deletions

View file

@ -211,6 +211,19 @@ CSS_STATE_PSEUDO_CLASS(mozMathIncrementScriptLevel,
":-moz-math-increment-script-level", 0, "",
NS_EVENT_STATE_INCREMENT_SCRIPT_LEVEL)
CSS_STATE_PSEUDO_CLASS(mozHasDirAttr, ":-moz-has-dir-attr",
CSS_PSEUDO_CLASS_ENABLED_IN_UA_SHEETS, "",
NS_EVENT_STATE_HAS_DIR_ATTR)
CSS_STATE_PSEUDO_CLASS(mozDirAttrLTR, ":-moz-dir-attr-ltr",
CSS_PSEUDO_CLASS_ENABLED_IN_UA_SHEETS, "",
NS_EVENT_STATE_DIR_ATTR_LTR)
CSS_STATE_PSEUDO_CLASS(mozDirAttrRTL, ":-moz-dir-attr-rtl",
CSS_PSEUDO_CLASS_ENABLED_IN_UA_SHEETS, "",
NS_EVENT_STATE_DIR_ATTR_RTL)
CSS_STATE_PSEUDO_CLASS(mozDirAttrLikeAuto, ":-moz-dir-attr-like-auto",
CSS_PSEUDO_CLASS_ENABLED_IN_UA_SHEETS, "",
NS_EVENT_STATE_DIR_ATTR_LIKE_AUTO)
// CSS 3 UI
// http://www.w3.org/TR/2004/CR-css3-ui-20040511/#pseudo-classes
CSS_STATE_PSEUDO_CLASS(required, ":required", 0, "", NS_EVENT_STATE_REQUIRED)

View file

@ -7,18 +7,18 @@
/* bidi */
[dir] {
:-moz-has-dir-attr {
unicode-bidi: isolate;
}
[dir="rtl"] {
:-moz-dir-attr-rtl {
direction: rtl;
}
[dir="ltr"] {
:-moz-dir-attr-ltr {
direction: ltr;
}
bdi:dir(ltr), [dir="auto"]:dir(ltr) { direction: ltr; }
bdi:dir(rtl), [dir="auto"]:dir(rtl) { direction: rtl; }
:-moz-dir-attr-like-auto:dir(ltr) { direction: ltr; }
:-moz-dir-attr-like-auto:dir(rtl) { direction: rtl; }
/* To ensure http://www.w3.org/TR/REC-html40/struct/dirlang.html#style-bidi:
*
@ -89,10 +89,15 @@ xmp {
bdi, output {
unicode-bidi: isolate;
}
bdo, bdo[dir] {
/* We need the "bdo:-moz-has-dir-attr" bit because "bdo" has lower
specificity than the ":-moz-has-dir-attr" selector above. */
bdo, bdo:-moz-has-dir-attr {
unicode-bidi: isolate-override;
}
textarea[dir="auto"], pre[dir="auto"] { unicode-bidi: plaintext; }
textarea:-moz-dir-attr-like-auto,
pre:-moz-dir-attr-like-auto {
unicode-bidi: plaintext;
}
/* blocks */