Bläddra i källkod

LibWeb: Implement bare-bones `HTMLElement.dir`

Igor Pissolati 2 år sedan
förälder
incheckning
bfdb30c74a

+ 1 - 0
Userland/Libraries/LibWeb/HTML/AttributeNames.h

@@ -55,6 +55,7 @@ namespace AttributeNames {
     __ENUMERATE_HTML_ATTRIBUTE(declare)                    \
     __ENUMERATE_HTML_ATTRIBUTE(default_)                   \
     __ENUMERATE_HTML_ATTRIBUTE(defer)                      \
+    __ENUMERATE_HTML_ATTRIBUTE(dir)                        \
     __ENUMERATE_HTML_ATTRIBUTE(direction)                  \
     __ENUMERATE_HTML_ATTRIBUTE(dirname)                    \
     __ENUMERATE_HTML_ATTRIBUTE(disabled)                   \

+ 18 - 0
Userland/Libraries/LibWeb/HTML/HTMLElement.cpp

@@ -53,6 +53,24 @@ void HTMLElement::visit_edges(Cell::Visitor& visitor)
     visitor.visit(m_dataset.ptr());
 }
 
+// https://html.spec.whatwg.org/multipage/dom.html#dom-dir
+String HTMLElement::dir() const
+{
+    auto dir = attribute(HTML::AttributeNames::dir);
+#define __ENUMERATE_HTML_ELEMENT_DIR_ATTRIBUTE(keyword) \
+    if (dir.equals_ignoring_case(#keyword##sv))         \
+        return #keyword##sv;
+    ENUMERATE_HTML_ELEMENT_DIR_ATTRIBUTES
+#undef __ENUMERATE_HTML_ELEMENT_DIR_ATTRIBUTE
+
+    return {};
+}
+
+void HTMLElement::set_dir(String const& dir)
+{
+    MUST(set_attribute(HTML::AttributeNames::dir, dir));
+}
+
 HTMLElement::ContentEditableState HTMLElement::content_editable_state() const
 {
     auto contenteditable = attribute(HTML::AttributeNames::contenteditable);

+ 9 - 0
Userland/Libraries/LibWeb/HTML/HTMLElement.h

@@ -12,6 +12,12 @@
 
 namespace Web::HTML {
 
+// https://html.spec.whatwg.org/multipage/dom.html#attr-dir
+#define ENUMERATE_HTML_ELEMENT_DIR_ATTRIBUTES   \
+    __ENUMERATE_HTML_ELEMENT_DIR_ATTRIBUTE(ltr) \
+    __ENUMERATE_HTML_ELEMENT_DIR_ATTRIBUTE(rtl) \
+    __ENUMERATE_HTML_ELEMENT_DIR_ATTRIBUTE(auto)
+
 class HTMLElement
     : public DOM::Element
     , public HTML::GlobalEventHandlers {
@@ -22,6 +28,9 @@ public:
 
     String title() const { return attribute(HTML::AttributeNames::title); }
 
+    String dir() const;
+    void set_dir(String const&);
+
     virtual bool is_editable() const final;
     String content_editable() const;
     WebIDL::ExceptionOr<void> set_content_editable(String const&);

+ 1 - 0
Userland/Libraries/LibWeb/HTML/HTMLElement.idl

@@ -7,6 +7,7 @@ interface HTMLElement : Element {
 
     [Reflect] attribute DOMString title;
     [Reflect] attribute DOMString lang;
+    attribute DOMString dir;
 
     [Reflect] attribute boolean hidden;