TextTrack.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /*
  2. * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibJS/Runtime/Realm.h>
  7. #include <LibWeb/Bindings/Intrinsics.h>
  8. #include <LibWeb/HTML/EventNames.h>
  9. #include <LibWeb/HTML/TextTrack.h>
  10. namespace Web::HTML {
  11. GC_DEFINE_ALLOCATOR(TextTrack);
  12. GC::Ref<TextTrack> TextTrack::create(JS::Realm& realm)
  13. {
  14. return realm.create<TextTrack>(realm);
  15. }
  16. TextTrack::TextTrack(JS::Realm& realm)
  17. : DOM::EventTarget(realm)
  18. {
  19. }
  20. TextTrack::~TextTrack() = default;
  21. void TextTrack::initialize(JS::Realm& realm)
  22. {
  23. Base::initialize(realm);
  24. WEB_SET_PROTOTYPE_FOR_INTERFACE(TextTrack);
  25. }
  26. // https://html.spec.whatwg.org/multipage/media.html#dom-texttrack-kind
  27. Bindings::TextTrackKind TextTrack::kind()
  28. {
  29. return m_kind;
  30. }
  31. void TextTrack::set_kind(Bindings::TextTrackKind kind)
  32. {
  33. m_kind = kind;
  34. }
  35. // https://html.spec.whatwg.org/multipage/media.html#dom-texttrack-label
  36. String TextTrack::label()
  37. {
  38. return m_label;
  39. }
  40. void TextTrack::set_label(String label)
  41. {
  42. m_label = label;
  43. }
  44. // https://html.spec.whatwg.org/multipage/media.html#dom-texttrack-language
  45. String TextTrack::language()
  46. {
  47. return m_language;
  48. }
  49. void TextTrack::set_language(String language)
  50. {
  51. m_language = language;
  52. }
  53. // https://html.spec.whatwg.org/multipage/media.html#dom-texttrack-id
  54. String TextTrack::id()
  55. {
  56. return m_id;
  57. }
  58. void TextTrack::set_id(String id)
  59. {
  60. m_id = id;
  61. }
  62. // https://html.spec.whatwg.org/multipage/media.html#dom-texttrack-mode
  63. Bindings::TextTrackMode TextTrack::mode()
  64. {
  65. return m_mode;
  66. }
  67. void TextTrack::set_mode(Bindings::TextTrackMode mode)
  68. {
  69. m_mode = mode;
  70. }
  71. // https://html.spec.whatwg.org/multipage/media.html#handler-texttrack-oncuechange
  72. void TextTrack::set_oncuechange(WebIDL::CallbackType* event_handler)
  73. {
  74. set_event_handler_attribute(HTML::EventNames::cuechange, event_handler);
  75. }
  76. // https://html.spec.whatwg.org/multipage/media.html#handler-texttrack-oncuechange
  77. WebIDL::CallbackType* TextTrack::oncuechange()
  78. {
  79. return event_handler_attribute(HTML::EventNames::cuechange);
  80. }
  81. Bindings::TextTrackKind text_track_kind_from_string(String value)
  82. {
  83. // https://html.spec.whatwg.org/multipage/media.html#attr-track-kind
  84. if (value.is_empty() || value.equals_ignoring_ascii_case("subtitles"sv)) {
  85. return Bindings::TextTrackKind::Subtitles;
  86. }
  87. if (value.equals_ignoring_ascii_case("captions"sv)) {
  88. return Bindings::TextTrackKind::Captions;
  89. }
  90. if (value.equals_ignoring_ascii_case("descriptions"sv)) {
  91. return Bindings::TextTrackKind::Descriptions;
  92. }
  93. if (value.equals_ignoring_ascii_case("chapters"sv)) {
  94. return Bindings::TextTrackKind::Chapters;
  95. }
  96. if (value.equals_ignoring_ascii_case("metadata"sv)) {
  97. return Bindings::TextTrackKind::Metadata;
  98. }
  99. return Bindings::TextTrackKind::Metadata;
  100. }
  101. }