浏览代码

LibWeb: Generate JS bindings for Range from IDL :^)

Andreas Kling 4 年之前
父节点
当前提交
cfa2fb2eb3

+ 0 - 62
Userland/Libraries/LibWeb/Bindings/RangeConstructor.cpp

@@ -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 <LibJS/Heap/Heap.h>
-#include <LibWeb/Bindings/RangeConstructor.h>
-#include <LibWeb/Bindings/RangePrototype.h>
-#include <LibWeb/Bindings/RangeWrapper.h>
-#include <LibWeb/Bindings/WindowObject.h>
-#include <LibWeb/DOM/Range.h>
-
-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<WindowObject&>(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<JS::TypeError>(global_object(), JS::ErrorType::ConstructorWithoutNew, "Range");
-    return {};
-}
-
-JS::Value RangeConstructor::construct(Function&)
-{
-    auto& window = static_cast<WindowObject&>(global_object());
-    return heap().allocate<RangeWrapper>(window, window, DOM::Range::create(window.impl()));
-}
-
-}

+ 0 - 47
Userland/Libraries/LibWeb/Bindings/RangeConstructor.h

@@ -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 <LibJS/Runtime/NativeFunction.h>
-
-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"; }
-};
-
-}

+ 0 - 161
Userland/Libraries/LibWeb/Bindings/RangePrototype.cpp

@@ -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 <AK/Function.h>
-#include <LibJS/Runtime/GlobalObject.h>
-#include <LibWeb/Bindings/NodeWrapper.h>
-#include <LibWeb/Bindings/NodeWrapperFactory.h>
-#include <LibWeb/Bindings/RangePrototype.h>
-#include <LibWeb/Bindings/RangeWrapper.h>
-#include <LibWeb/DOM/Range.h>
-
-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<JS::TypeError>(global_object, JS::ErrorType::NotA, "Range");
-        return nullptr;
-    }
-    return &static_cast<RangeWrapper*>(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<NodeWrapper>(arg0)) {
-        vm.throw_exception<JS::TypeError>(global_object, JS::ErrorType::NotA, "Node");
-        return {};
-    }
-
-    impl->set_start(static_cast<NodeWrapper*>(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<NodeWrapper>(arg0)) {
-        vm.throw_exception<JS::TypeError>(global_object, JS::ErrorType::NotA, "Node");
-        return {};
-    }
-
-    impl->set_end(static_cast<NodeWrapper*>(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());
-}
-
-}

+ 0 - 53
Userland/Libraries/LibWeb/Bindings/RangePrototype.h

@@ -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 <LibJS/Runtime/Object.h>
-
-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);
-};
-
-}

+ 0 - 47
Userland/Libraries/LibWeb/Bindings/RangeWrapper.cpp

@@ -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 <LibWeb/Bindings/RangePrototype.h>
-#include <LibWeb/Bindings/RangeWrapper.h>
-#include <LibWeb/Bindings/WindowObject.h>
-#include <LibWeb/Bindings/Wrappable.h>
-#include <LibWeb/DOM/Range.h>
-
-namespace Web::Bindings {
-
-RangeWrapper::RangeWrapper(JS::GlobalObject& global_object, DOM::Range& impl)
-    : Wrapper(global_object)
-    , m_impl(impl)
-{
-    set_prototype(static_cast<WindowObject&>(global_object).range_prototype());
-}
-
-RangeWrapper* wrap(JS::GlobalObject& global_object, DOM::Range& impl)
-{
-    return static_cast<RangeWrapper*>(wrap_impl(global_object, impl));
-}
-
-}

+ 0 - 48
Userland/Libraries/LibWeb/Bindings/RangeWrapper.h

@@ -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 <LibWeb/Bindings/Wrapper.h>
-
-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<DOM::Range> m_impl;
-};
-
-RangeWrapper* wrap(JS::GlobalObject&, DOM::Range&);
-
-}

+ 1 - 3
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)

+ 13 - 0
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();
+
+};