QualifiedName.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2020, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/FlyString.h>
  8. namespace Web {
  9. class QualifiedName {
  10. public:
  11. QualifiedName(const FlyString& local_name, const FlyString& prefix, const FlyString& namespace_)
  12. : m_local_name(local_name)
  13. , m_prefix(prefix)
  14. , m_namespace(namespace_)
  15. {
  16. make_internal_string();
  17. }
  18. const FlyString& local_name() const { return m_local_name; }
  19. const FlyString& prefix() const { return m_prefix; }
  20. const FlyString& namespace_() const { return m_namespace; }
  21. const String& as_string() const { return m_as_string; }
  22. private:
  23. FlyString m_local_name;
  24. FlyString m_prefix;
  25. FlyString m_namespace;
  26. String m_as_string;
  27. // https://dom.spec.whatwg.org/#concept-attribute-qualified-name
  28. // https://dom.spec.whatwg.org/#concept-element-qualified-name
  29. void make_internal_string()
  30. {
  31. // This is possible to do according to the spec: "User agents could have this as an internal slot as an optimization."
  32. if (m_prefix.is_null()) {
  33. m_as_string = m_local_name;
  34. return;
  35. }
  36. m_as_string = String::formatted("{}:{}", m_prefix, m_local_name);
  37. }
  38. };
  39. }