/* * Copyright (c) 2023, Jonah Shafran * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include #include namespace Web::CSS { GC_DEFINE_ALLOCATOR(CSSNamespaceRule); CSSNamespaceRule::CSSNamespaceRule(JS::Realm& realm, Optional prefix, FlyString namespace_uri) : CSSRule(realm, Type::Namespace) , m_namespace_uri(move(namespace_uri)) , m_prefix(prefix.value_or(""_fly_string)) { } GC::Ref CSSNamespaceRule::create(JS::Realm& realm, Optional prefix, FlyString namespace_uri) { return realm.create(realm, move(prefix), move(namespace_uri)); } void CSSNamespaceRule::initialize(JS::Realm& realm) { Base::initialize(realm); WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSNamespaceRule); } // https://www.w3.org/TR/cssom/#serialize-a-css-rule String CSSNamespaceRule::serialized() const { StringBuilder builder; // The literal string "@namespace", followed by a single SPACE (U+0020), builder.append("@namespace "sv); // followed by the serialization as an identifier of the prefix attribute (if any), if (!m_prefix.is_empty()) { serialize_an_identifier(builder, m_prefix); // followed by a single SPACE (U+0020) if there is a prefix, builder.append(" "sv); } // followed by the serialization as URL of the namespaceURI attribute, serialize_a_url(builder, m_namespace_uri); // followed the character ";" (U+003B). builder.append(";"sv); return MUST(builder.to_string()); } }