Implement Text::wholeText

This commit is contained in:
Anthony Ramine 2015-04-09 14:08:24 +02:00
parent 9cee765c96
commit 890d902d6a
4 changed files with 24 additions and 28 deletions

View file

@ -2,16 +2,17 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::TextBinding;
use dom::bindings::codegen::Bindings::TextBinding::{self, TextMethods};
use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use dom::bindings::codegen::InheritTypes::TextDerived;
use dom::bindings::codegen::InheritTypes::{CharacterDataCast, TextDerived};
use dom::bindings::codegen::InheritTypes::NodeCast;
use dom::bindings::error::Fallible;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::characterdata::CharacterData;
use dom::characterdata::{CharacterData, CharacterDataHelpers};
use dom::document::Document;
use dom::eventtarget::{EventTarget, EventTargetTypeId};
use dom::node::{Node, NodeTypeId};
use dom::node::{Node, NodeHelpers, NodeTypeId};
use util::str::DOMString;
/// An HTML text node.
@ -44,3 +45,21 @@ impl Text {
}
}
impl<'a> TextMethods for JSRef<'a, Text> {
// https://dom.spec.whatwg.org/#dom-text-wholetext
fn WholeText(self) -> DOMString {
let first = NodeCast::from_ref(self).inclusively_preceding_siblings()
.map(|node| node.root())
.take_while(|node| node.r().is_text())
.last().unwrap();
let nodes = first.r().inclusively_following_siblings().map(|node| node.root())
.take_while(|node| node.r().is_text());
let mut text = DOMString::new();
for node in nodes {
let cdata = CharacterDataCast::to_ref(node.r()).unwrap();
text.push_str(&cdata.data());
}
text
}
}

View file

@ -14,5 +14,5 @@
[Constructor(optional DOMString data = "")]
interface Text : CharacterData {
//[NewObject] Text splitText(unsigned long offset);
//readonly attribute DOMString wholeText;
readonly attribute DOMString wholeText;
};