/* * Copyright (c) 2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #include "CSSKeywordValue.h" #include #include #include #include namespace Web::CSS { GC_DEFINE_ALLOCATOR(CSSKeywordValue); GC::Ref CSSKeywordValue::create(JS::Realm& realm, FlyString value) { return realm.create(realm, move(value)); } // https://drafts.css-houdini.org/css-typed-om-1/#dom-csskeywordvalue-csskeywordvalue WebIDL::ExceptionOr> CSSKeywordValue::construct_impl(JS::Realm& realm, FlyString value) { // 1. If value is an empty string, throw a TypeError. if (value.is_empty()) return WebIDL::SimpleException { WebIDL::SimpleExceptionType::TypeError, "Cannot create a CSSKeywordValue with an empty string as the value"sv }; // 2. Otherwise, return a new CSSKeywordValue with its value internal slot set to value. return CSSKeywordValue::create(realm, move(value)); } CSSKeywordValue::CSSKeywordValue(JS::Realm& realm, FlyString value) : CSSStyleValue(realm) , m_value(move(value)) { } void CSSKeywordValue::initialize(JS::Realm& realm) { WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSKeywordValue); Base::initialize(realm); } // https://drafts.css-houdini.org/css-typed-om-1/#dom-csskeywordvalue-value WebIDL::ExceptionOr CSSKeywordValue::set_value(FlyString value) { // 1. If value is an empty string, throw a TypeError. if (value.is_empty()) return WebIDL::SimpleException { WebIDL::SimpleExceptionType::TypeError, "Cannot set CSSKeywordValue.value to an empty string"sv }; // 2. Otherwise, set this’s value internal slot, to value. m_value = move(value); return {}; } // https://drafts.css-houdini.org/css-typed-om-1/#keywordvalue-serialization String CSSKeywordValue::to_string() const { // To serialize a CSSKeywordValue this: // 1. Return this’s value internal slot. // AD-HOC: Serialize it as an identifier. Spec issue: https://github.com/w3c/csswg-drafts/issues/12545 return serialize_an_identifier(m_value); } }