Browse Source

LibWeb: Support the :root pseudo class

Linus Groh 5 years ago
parent
commit
7bfd24ca76

+ 14 - 0
Base/home/anon/www/root.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>:root test</title>
+    <style>
+      :root {
+        background-color: red;
+      }
+    </style>
+  </head>
+  <body>
+    Background will be red.
+  </body>
+</html>

+ 1 - 0
Base/home/anon/www/welcome.html

@@ -50,6 +50,7 @@ span#ua {
         <li><a href="last-child.html">:last-child</a></li>
         <li><a href="only-child.html">:only-child</a></li>
         <li><a href="empty.html">:empty</a></li>
+        <li><a href="root.html">:root</a></li>
         <li><a href="form.html">form</a></li>
         <li><a href="borders.html">borders</a></li>
         <li><a href="css.html">css</a></li>

+ 1 - 0
Libraries/LibWeb/CSS/Selector.h

@@ -53,6 +53,7 @@ public:
             LastChild,
             OnlyChild,
             Empty,
+            Root,
         };
         PseudoClass pseudo_class { PseudoClass::None };
 

+ 4 - 0
Libraries/LibWeb/CSS/SelectorEngine.cpp

@@ -75,6 +75,10 @@ bool matches(const Selector::SimpleSelector& component, const Element& element)
         if (element.first_child_of_type<Element>() || element.first_child_of_type<Text>())
             return false;
         break;
+    case Selector::SimpleSelector::PseudoClass::Root:
+        if (!element.is_html_element())
+            return false;
+        break;
     }
 
     switch (component.attribute_match_type) {

+ 2 - 0
Libraries/LibWeb/Parser/CSSParser.cpp

@@ -414,6 +414,8 @@ public:
                 simple_selector.pseudo_class = Selector::SimpleSelector::PseudoClass::OnlyChild;
             else if (pseudo_name.equals_ignoring_case("empty"))
                 simple_selector.pseudo_class = Selector::SimpleSelector::PseudoClass::Empty;
+            else if (pseudo_name.equals_ignoring_case("root"))
+                simple_selector.pseudo_class = Selector::SimpleSelector::PseudoClass::Root;
         }
 
         if (index == index_at_start) {