HTMLMeterElement.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * Copyright (c) 2020, the SerenityOS developers.
  3. * Copyright (c) 2022, Luke Wilde <lukew@serenityos.org>
  4. * Copyright (c) 2023, Bastiaan van der Plaat <bastiaan.v.d.plaat@gmail.com>
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause
  7. */
  8. #pragma once
  9. #include <LibWeb/ARIA/Roles.h>
  10. #include <LibWeb/HTML/HTMLDivElement.h>
  11. #include <LibWeb/HTML/HTMLElement.h>
  12. #include <LibWeb/Namespace.h>
  13. namespace Web::HTML {
  14. class MeterBarElement final : public HTMLDivElement {
  15. JS_CELL(MeterBarElement, HTMLDivElement);
  16. public:
  17. MeterBarElement(DOM::Document& document)
  18. : HTMLDivElement(document, DOM::QualifiedName { HTML::TagNames::div, ""_fly_string, Namespace::HTML })
  19. {
  20. }
  21. virtual Optional<CSS::Selector::PseudoElement> pseudo_element() const override { return CSS::Selector::PseudoElement::MeterBar; }
  22. };
  23. class MeterValueElement final : public HTMLDivElement {
  24. JS_CELL(MeterValueElement, HTMLDivElement);
  25. public:
  26. MeterValueElement(DOM::Document& document)
  27. : HTMLDivElement(document, DOM::QualifiedName { HTML::TagNames::div, ""_fly_string, Namespace::HTML })
  28. {
  29. }
  30. virtual Optional<CSS::Selector::PseudoElement> pseudo_element() const override { return m_pseudo_element; }
  31. void set_pseudo_element(CSS::Selector::PseudoElement pseudo_element) { m_pseudo_element = pseudo_element; }
  32. private:
  33. CSS::Selector::PseudoElement m_pseudo_element;
  34. };
  35. class HTMLMeterElement final : public HTMLElement {
  36. WEB_PLATFORM_OBJECT(HTMLMeterElement, HTMLElement);
  37. JS_DECLARE_ALLOCATOR(HTMLMeterElement);
  38. public:
  39. virtual ~HTMLMeterElement() override;
  40. double value() const;
  41. WebIDL::ExceptionOr<void> set_value(double);
  42. double min() const;
  43. WebIDL::ExceptionOr<void> set_min(double value);
  44. double max() const;
  45. WebIDL::ExceptionOr<void> set_max(double value);
  46. double low() const;
  47. WebIDL::ExceptionOr<void> set_low(double value);
  48. double high() const;
  49. WebIDL::ExceptionOr<void> set_high(double value);
  50. double optimum() const;
  51. WebIDL::ExceptionOr<void> set_optimum(double value);
  52. // ^HTMLElement
  53. virtual void inserted() override;
  54. virtual void removed_from(DOM::Node*) override;
  55. // https://html.spec.whatwg.org/multipage/forms.html#category-label
  56. virtual bool is_labelable() const override { return true; }
  57. // https://www.w3.org/TR/html-aria/#el-meter
  58. virtual Optional<ARIA::Role> default_role() const override { return ARIA::Role::meter; }
  59. private:
  60. HTMLMeterElement(DOM::Document&, DOM::QualifiedName);
  61. virtual void initialize(JS::Realm&) override;
  62. virtual void visit_edges(Cell::Visitor&) override;
  63. void create_shadow_tree_if_needed();
  64. void update_meter_value_element();
  65. JS::GCPtr<MeterValueElement> m_meter_value_element;
  66. };
  67. }