/* * Copyright (c) 2024, MacDue * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace Web::SVG { JS_DEFINE_ALLOCATOR(SVGTransformList); JS::NonnullGCPtr SVGTransformList::create(JS::Realm& realm) { return realm.heap().allocate(realm, realm); } SVGTransformList::~SVGTransformList() = default; SVGTransformList::SVGTransformList(JS::Realm& realm) : PlatformObject(realm) {}; // https://svgwg.org/svg2-draft/single-page.html#types-__svg__SVGNameList__getItem WebIDL::ExceptionOr> SVGTransformList::get_item(WebIDL::UnsignedLong index) { // 1. If index is greater than or equal to the length of the list, then throw an IndexSizeError. if (index >= m_transforms.size()) return WebIDL::IndexSizeError::create(realm(), "SVGTransformList index out of bounds"_fly_string); // 2. Return the element in the list at position index. return m_transforms.at(index); } // https://svgwg.org/svg2-draft/single-page.html#types-__svg__SVGNameList__appendItem JS::NonnullGCPtr SVGTransformList::append_item(JS::NonnullGCPtr new_item) { // FIXME: This does not implement the steps from the specification. m_transforms.append(new_item); return new_item; } void SVGTransformList::initialize(JS::Realm& realm) { Base::initialize(realm); WEB_SET_PROTOTYPE_FOR_INTERFACE(SVGTransformList); } void SVGTransformList::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); for (auto transform : m_transforms) transform->visit_edges(visitor); } }