/* * Copyright (c) 2025, Jelle Raaijmakers * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace Web::SVG { GC_DEFINE_ALLOCATOR(SVGAnimatedEnumeration); GC::Ref SVGAnimatedEnumeration::create(JS::Realm& realm, u16 value) { return realm.create(realm, value); } SVGAnimatedEnumeration::SVGAnimatedEnumeration(JS::Realm& realm, u16 value) : PlatformObject(realm) , m_value(value) { } SVGAnimatedEnumeration::~SVGAnimatedEnumeration() = default; // https://svgwg.org/svg2-draft/types.html#__svg__SVGAnimatedEnumeration__baseVal WebIDL::ExceptionOr SVGAnimatedEnumeration::set_base_val(u16 base_val) { // 1. Let value be the value being assigned to baseVal. auto value = base_val; // FIXME: 2. If value is 0 or is not the numeric type value for any value of the reflected attribute, then throw a // TypeError. if (value == 0) return WebIDL::SimpleException { WebIDL::SimpleExceptionType::TypeError, "invalid value for baseVal"sv }; // FIXME: 3. Otherwise, if the reflecting IDL attribute is orientType and value is SVG_MARKER_ORIENT_ANGLE, then set the // reflected attribute to the string "0". // FIXME: 4. Otherwise, value is the numeric type value for a specific, single keyword value for the reflected attribute. // Set the reflected attribute to that value. m_value = value; return {}; } void SVGAnimatedEnumeration::initialize(JS::Realm& realm) { WEB_SET_PROTOTYPE_FOR_INTERFACE(SVGAnimatedEnumeration); Base::initialize(realm); } // https://svgwg.org/svg2-draft/types.html#__svg__SVGAnimatedEnumeration__baseVal u16 SVGAnimatedEnumeration::base_or_anim_value() const { // FIXME: 1. Let value be the value of the reflected attribute (using the attribute's initial value if it is not present or // invalid). // FIXME: 2. Return the numeric type value for value, according to the reflecting IDL attribute's definition. return m_value; } }