diff options
author | cathiechen <cathiechen@igalia.com> | 2024-03-22 16:02:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-22 15:02:01 +0000 |
commit | cb275e086c215b6da741c7918cd9683a134eb24f (patch) | |
tree | 173f32008068d06f27b3d1a8af1a855dfa6174da /components/script/dom/staticrange.rs | |
parent | bae77671f85481503ab563c20ed488cf883436fa (diff) | |
download | servo-cb275e086c215b6da741c7918cd9683a134eb24f.tar.gz servo-cb275e086c215b6da741c7918cd9683a134eb24f.zip |
Implement StaticRange (#31809)
* Add DOM interface for AbstractRange
* Add DOM interface for StaticRange
* Update WPT tests for StaticRange-constructor.html
* Fix formatting
* Add AbstractRange & StaticRange in interfaces.html
* rebased the code and fixed the failures
Signed-off-by: Cathie Chen <cathiechen@igalia.com>
* update the expected result in idlharness.window.js.ini file
* Addressed the code review comments
* updae the test result of legacy layout
---------
Signed-off-by: Cathie Chen <cathiechen@igalia.com>
Co-authored-by: Nipun Garg <nipung271@gmail.com>
Diffstat (limited to 'components/script/dom/staticrange.rs')
-rw-r--r-- | components/script/dom/staticrange.rs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/components/script/dom/staticrange.rs b/components/script/dom/staticrange.rs new file mode 100644 index 00000000000..84c25e12f47 --- /dev/null +++ b/components/script/dom/staticrange.rs @@ -0,0 +1,88 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use dom_struct::dom_struct; +use js::rust::HandleObject; + +use crate::dom::abstractrange::AbstractRange; +use crate::dom::bindings::codegen::Bindings::StaticRangeBinding::StaticRangeInit; +use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; +use crate::dom::bindings::error::{Error, Fallible}; +use crate::dom::bindings::inheritance::NodeTypeId; +use crate::dom::bindings::reflector::reflect_dom_object_with_proto; +use crate::dom::bindings::root::DomRoot; +use crate::dom::document::Document; +use crate::dom::node::Node; +use crate::dom::window::Window; + +#[dom_struct] +pub struct StaticRange { + abstract_range: AbstractRange, +} + +impl StaticRange { + fn new_inherited( + start_container: &Node, + start_offset: u32, + end_container: &Node, + end_offset: u32, + ) -> StaticRange { + StaticRange { + abstract_range: AbstractRange::new_inherited( + start_container, + start_offset, + end_container, + end_offset, + ), + } + } + pub fn new_with_doc( + document: &Document, + proto: Option<HandleObject>, + init: &StaticRangeInit, + ) -> DomRoot<StaticRange> { + StaticRange::new_with_proto(document, proto, init) + } + + pub fn new_with_proto( + document: &Document, + proto: Option<HandleObject>, + init: &StaticRangeInit, + ) -> DomRoot<StaticRange> { + let staticrange = reflect_dom_object_with_proto( + Box::new(StaticRange::new_inherited( + &init.startContainer, + init.startOffset, + &init.endContainer, + init.endOffset, + )), + document.window(), + proto, + ); + staticrange + } + + /// <https://dom.spec.whatwg.org/#dom-staticrange-staticrange> + #[allow(non_snake_case)] + pub fn Constructor( + window: &Window, + proto: Option<HandleObject>, + init: &StaticRangeInit, + ) -> Fallible<DomRoot<StaticRange>> { + match init.startContainer.type_id() { + NodeTypeId::DocumentType | NodeTypeId::Attr => { + return Err(Error::InvalidNodeType); + }, + _ => (), + } + match init.endContainer.type_id() { + NodeTypeId::DocumentType | NodeTypeId::Attr => { + return Err(Error::InvalidNodeType); + }, + _ => (), + } + let document = window.Document(); + Ok(StaticRange::new_with_doc(&document, proto, init)) + } +} |