HTMLProgressElement.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Copyright (c) 2020-2022, the SerenityOS developers.
  3. * Copyright (c) 2023, Bastiaan van der Plaat <bastiaan.v.d.plaat@gmail.com>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <LibWeb/ARIA/Roles.h>
  9. #include <LibWeb/HTML/HTMLDivElement.h>
  10. #include <LibWeb/HTML/HTMLElement.h>
  11. #include <LibWeb/Namespace.h>
  12. namespace Web::HTML {
  13. class ProgressBarElement final : public HTMLDivElement {
  14. JS_CELL(ProgressBarElement, HTMLDivElement);
  15. public:
  16. ProgressBarElement(DOM::Document& document)
  17. : HTMLDivElement(document, DOM::QualifiedName { HTML::TagNames::div, ""_fly_string, Namespace::HTML })
  18. {
  19. }
  20. virtual Optional<CSS::Selector::PseudoElement> pseudo_element() const override { return CSS::Selector::PseudoElement::ProgressBar; }
  21. };
  22. class ProgressValueElement final : public HTMLDivElement {
  23. JS_CELL(ProgressValueElement, HTMLDivElement);
  24. public:
  25. ProgressValueElement(DOM::Document& document)
  26. : HTMLDivElement(document, DOM::QualifiedName { HTML::TagNames::div, ""_fly_string, Namespace::HTML })
  27. {
  28. }
  29. virtual Optional<CSS::Selector::PseudoElement> pseudo_element() const override { return CSS::Selector::PseudoElement::ProgressValue; }
  30. };
  31. class HTMLProgressElement final : public HTMLElement {
  32. WEB_PLATFORM_OBJECT(HTMLProgressElement, HTMLElement);
  33. JS_DECLARE_ALLOCATOR(HTMLProgressElement);
  34. public:
  35. virtual ~HTMLProgressElement() override;
  36. double value() const;
  37. WebIDL::ExceptionOr<void> set_value(double);
  38. double max() const;
  39. WebIDL::ExceptionOr<void> set_max(double value);
  40. double position() const;
  41. // ^HTMLElement
  42. virtual void inserted() override;
  43. virtual void removed_from(DOM::Node*) override;
  44. // https://html.spec.whatwg.org/multipage/forms.html#category-label
  45. virtual bool is_labelable() const override { return true; }
  46. // https://www.w3.org/TR/html-aria/#el-progress
  47. virtual Optional<ARIA::Role> default_role() const override { return ARIA::Role::progressbar; }
  48. private:
  49. HTMLProgressElement(DOM::Document&, DOM::QualifiedName);
  50. // ^DOM::Node
  51. virtual bool is_html_progress_element() const final { return true; }
  52. virtual void initialize(JS::Realm&) override;
  53. virtual void visit_edges(Cell::Visitor&) override;
  54. void create_shadow_tree_if_needed();
  55. void update_progress_value_element();
  56. bool is_determinate() const { return has_attribute(HTML::AttributeNames::value); }
  57. JS::GCPtr<ProgressValueElement> m_progress_value_element;
  58. };
  59. }
  60. namespace Web::DOM {
  61. template<>
  62. inline bool Node::fast_is<HTML::HTMLProgressElement>() const { return is_html_progress_element(); }
  63. }