diff --git a/Userland/Libraries/LibWeb/Bindings/RangeConstructor.cpp b/Userland/Libraries/LibWeb/Bindings/RangeConstructor.cpp deleted file mode 100644 index 27311c4420..0000000000 --- a/Userland/Libraries/LibWeb/Bindings/RangeConstructor.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2020, the SerenityOS developers. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include - -namespace Web::Bindings { - -RangeConstructor::RangeConstructor(JS::GlobalObject& global_object) - : NativeFunction(*global_object.function_prototype()) -{ -} - -void RangeConstructor::initialize(JS::GlobalObject& global_object) -{ - auto& vm = this->vm(); - NativeFunction::initialize(global_object); - auto& window = static_cast(global_object); - define_property(vm.names.prototype, window.range_prototype(), 0); - define_property(vm.names.length, JS::Value(0), JS::Attribute::Configurable); -} - -JS::Value RangeConstructor::call() -{ - vm().throw_exception(global_object(), JS::ErrorType::ConstructorWithoutNew, "Range"); - return {}; -} - -JS::Value RangeConstructor::construct(Function&) -{ - auto& window = static_cast(global_object()); - return heap().allocate(window, window, DOM::Range::create(window.impl())); -} - -} diff --git a/Userland/Libraries/LibWeb/Bindings/RangeConstructor.h b/Userland/Libraries/LibWeb/Bindings/RangeConstructor.h deleted file mode 100644 index 3189c67bc6..0000000000 --- a/Userland/Libraries/LibWeb/Bindings/RangeConstructor.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2020, the SerenityOS developers. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include - -namespace Web::Bindings { - -class RangeConstructor final : public JS::NativeFunction { -public: - explicit RangeConstructor(JS::GlobalObject&); - - void initialize(JS::GlobalObject&) override; - - JS::Value call() override; - JS::Value construct(JS::Function& new_target) override; - -private: - bool has_constructor() const override { return true; } - const char* class_name() const override { return "RangeConstructor"; } -}; - -} diff --git a/Userland/Libraries/LibWeb/Bindings/RangePrototype.cpp b/Userland/Libraries/LibWeb/Bindings/RangePrototype.cpp deleted file mode 100644 index ed317cb1c6..0000000000 --- a/Userland/Libraries/LibWeb/Bindings/RangePrototype.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (c) 2020, the SerenityOS developers. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include - -namespace Web::Bindings { - -RangePrototype::RangePrototype(JS::GlobalObject& global_object) - : Object(*global_object.object_prototype()) -{ -} - -void RangePrototype::initialize(JS::GlobalObject& global_object) -{ - auto default_attributes = JS::Attribute::Enumerable | JS::Attribute::Configurable; - - Object::initialize(global_object); - - define_native_function("setStart", set_start, 2); - define_native_function("setEnd", set_end, 2); - define_native_function("cloneRange", clone_range, 0); - - define_native_property("startContainer", start_container_getter, nullptr, default_attributes); - define_native_property("endContainer", end_container_getter, nullptr, default_attributes); - define_native_property("startOffset", start_offset_getter, nullptr, default_attributes); - define_native_property("endOffset", end_offset_getter, nullptr, default_attributes); -} - -static DOM::Range* impl_from(JS::VM& vm, JS::GlobalObject& global_object) -{ - auto* this_object = vm.this_value(global_object).to_object(global_object); - if (!this_object) - return nullptr; - if (StringView("RangeWrapper") != this_object->class_name()) { - vm.throw_exception(global_object, JS::ErrorType::NotA, "Range"); - return nullptr; - } - return &static_cast(this_object)->impl(); -} - -JS_DEFINE_NATIVE_FUNCTION(RangePrototype::set_start) -{ - auto* impl = impl_from(vm, global_object); - if (!impl) - return {}; - - auto arg0 = vm.argument(0).to_object(global_object); - if (vm.exception()) - return {}; - auto arg1 = vm.argument(1).to_number(global_object); - if (vm.exception()) - return {}; - - if (!is(arg0)) { - vm.throw_exception(global_object, JS::ErrorType::NotA, "Node"); - return {}; - } - - impl->set_start(static_cast(arg0)->impl(), arg1.as_i32()); - - return JS::js_undefined(); -} - -JS_DEFINE_NATIVE_FUNCTION(RangePrototype::set_end) -{ - auto* impl = impl_from(vm, global_object); - if (!impl) - return {}; - - auto arg0 = vm.argument(0).to_object(global_object); - if (vm.exception()) - return {}; - auto arg1 = vm.argument(1).to_number(global_object); - if (vm.exception()) - return {}; - - if (!is(arg0)) { - vm.throw_exception(global_object, JS::ErrorType::NotA, "Node"); - return {}; - } - - impl->set_end(static_cast(arg0)->impl(), arg1.as_i32()); - - return JS::js_undefined(); -} - -JS_DEFINE_NATIVE_FUNCTION(RangePrototype::clone_range) -{ - auto* impl = impl_from(vm, global_object); - if (!impl) - return {}; - - return wrap(global_object, *impl->clone_range()); -} - -JS_DEFINE_NATIVE_GETTER(RangePrototype::start_container_getter) -{ - auto* impl = impl_from(vm, global_object); - if (!impl) - return {}; - - return wrap(global_object, *impl->start_container()); -} - -JS_DEFINE_NATIVE_GETTER(RangePrototype::end_container_getter) -{ - auto* impl = impl_from(vm, global_object); - if (!impl) - return {}; - - return wrap(global_object, *impl->end_container()); -} - -JS_DEFINE_NATIVE_GETTER(RangePrototype::start_offset_getter) -{ - auto* impl = impl_from(vm, global_object); - if (!impl) - return {}; - - return JS::Value(impl->start_offset()); -} - -JS_DEFINE_NATIVE_GETTER(RangePrototype::end_offset_getter) -{ - auto* impl = impl_from(vm, global_object); - if (!impl) - return {}; - - return JS::Value(impl->end_offset()); -} - -} diff --git a/Userland/Libraries/LibWeb/Bindings/RangePrototype.h b/Userland/Libraries/LibWeb/Bindings/RangePrototype.h deleted file mode 100644 index 560eaa4a7c..0000000000 --- a/Userland/Libraries/LibWeb/Bindings/RangePrototype.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2020, the SerenityOS developers. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include - -namespace Web::Bindings { - -class RangePrototype final : public JS::Object { - JS_OBJECT(RangePrototype, JS::Object); - -public: - explicit RangePrototype(JS::GlobalObject&); - - void initialize(JS::GlobalObject&) override; - -private: - JS_DECLARE_NATIVE_FUNCTION(set_start); - JS_DECLARE_NATIVE_FUNCTION(set_end); - JS_DECLARE_NATIVE_FUNCTION(clone_range); - - JS_DECLARE_NATIVE_GETTER(start_container_getter); - JS_DECLARE_NATIVE_GETTER(end_container_getter); - JS_DECLARE_NATIVE_GETTER(start_offset_getter); - JS_DECLARE_NATIVE_GETTER(end_offset_getter); - JS_DECLARE_NATIVE_GETTER(collapsed_getter); -}; - -} diff --git a/Userland/Libraries/LibWeb/Bindings/RangeWrapper.cpp b/Userland/Libraries/LibWeb/Bindings/RangeWrapper.cpp deleted file mode 100644 index dc58a4358d..0000000000 --- a/Userland/Libraries/LibWeb/Bindings/RangeWrapper.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2020, the SerenityOS developers. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -namespace Web::Bindings { - -RangeWrapper::RangeWrapper(JS::GlobalObject& global_object, DOM::Range& impl) - : Wrapper(global_object) - , m_impl(impl) -{ - set_prototype(static_cast(global_object).range_prototype()); -} - -RangeWrapper* wrap(JS::GlobalObject& global_object, DOM::Range& impl) -{ - return static_cast(wrap_impl(global_object, impl)); -} - -} diff --git a/Userland/Libraries/LibWeb/Bindings/RangeWrapper.h b/Userland/Libraries/LibWeb/Bindings/RangeWrapper.h deleted file mode 100644 index 5528d81911..0000000000 --- a/Userland/Libraries/LibWeb/Bindings/RangeWrapper.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2020, the SerenityOS developers. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include - -namespace Web::Bindings { - -class RangeWrapper final : public Wrapper { -public: - RangeWrapper(JS::GlobalObject&, DOM::Range&); - - DOM::Range& impl() { return m_impl; } - const DOM::Range& impl() const { return m_impl; } - -private: - virtual const char* class_name() const override { return "RangeWrapper"; } - - NonnullRefPtr m_impl; -}; - -RangeWrapper* wrap(JS::GlobalObject&, DOM::Range&); - -} diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 47990d68c3..9427b5ca28 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -8,9 +8,6 @@ set(SOURCES Bindings/ScriptExecutionContext.cpp Bindings/WindowObject.cpp Bindings/Wrappable.cpp - Bindings/RangeConstructor.cpp - Bindings/RangePrototype.cpp - Bindings/RangeWrapper.cpp CSS/DefaultStyleSheetSource.cpp CSS/Length.cpp CSS/Parser/CSSParser.cpp @@ -288,6 +285,7 @@ libweb_js_wrapper(DOM/Event) libweb_js_wrapper(DOM/EventTarget) libweb_js_wrapper(DOM/ShadowRoot) libweb_js_wrapper(DOM/Node) +libweb_js_wrapper(DOM/Range) libweb_js_wrapper(DOM/Text) libweb_js_wrapper(HTML/CanvasRenderingContext2D) libweb_js_wrapper(HTML/HTMLAnchorElement) diff --git a/Userland/Libraries/LibWeb/DOM/Range.idl b/Userland/Libraries/LibWeb/DOM/Range.idl new file mode 100644 index 0000000000..2a714e7629 --- /dev/null +++ b/Userland/Libraries/LibWeb/DOM/Range.idl @@ -0,0 +1,13 @@ +interface Range { + + readonly attribute Node startContainer; + readonly attribute unsigned long startOffset; + readonly attribute Node endContainer; + readonly attribute unsigned long endOffset; + + undefined setStart(Node node, unsigned long offset); + undefined setEnd(Node node, unsigned long offset); + + Range cloneRange(); + +};