mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Merge pull request #3364 from jejuliekim/option-text
Implement HTMLOptionElement.text #3023
This commit is contained in:
commit
545e9884a6
5 changed files with 42 additions and 187 deletions
|
@ -2,12 +2,16 @@
|
|||
* 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::CharacterDataBinding::CharacterDataMethods;
|
||||
use dom::bindings::codegen::Bindings::HTMLOptionElementBinding;
|
||||
use dom::bindings::codegen::Bindings::HTMLOptionElementBinding::HTMLOptionElementMethods;
|
||||
use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast};
|
||||
use dom::bindings::codegen::InheritTypes::HTMLOptionElementDerived;
|
||||
use dom::bindings::codegen::InheritTypes::{CharacterDataCast, ElementCast, HTMLElementCast, NodeCast};
|
||||
use dom::bindings::codegen::InheritTypes::{HTMLOptionElementDerived};
|
||||
use dom::bindings::codegen::InheritTypes::{HTMLScriptElementDerived};
|
||||
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
|
||||
use dom::bindings::js::{JSRef, Temporary};
|
||||
use dom::bindings::utils::{Reflectable, Reflector};
|
||||
use dom::characterdata::CharacterData;
|
||||
use dom::document::Document;
|
||||
use dom::element::{AttributeHandlers, Element, HTMLOptionElementTypeId};
|
||||
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
|
||||
|
@ -16,7 +20,8 @@ use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId};
|
|||
use dom::virtualmethods::VirtualMethods;
|
||||
|
||||
use servo_util::atom::Atom;
|
||||
use servo_util::str::DOMString;
|
||||
use servo_util::namespace;
|
||||
use servo_util::str::{DOMString, split_html_space_chars};
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[must_root]
|
||||
|
@ -44,6 +49,24 @@ impl HTMLOptionElement {
|
|||
}
|
||||
}
|
||||
|
||||
fn collect_text(node: &JSRef<Node>, value: &mut DOMString) {
|
||||
let elem: JSRef<Element> = ElementCast::to_ref(*node).unwrap();
|
||||
let svg_script = elem.namespace == namespace::SVG && elem.local_name.as_slice() == "script";
|
||||
let html_script = node.is_htmlscriptelement();
|
||||
if svg_script || html_script {
|
||||
return;
|
||||
} else {
|
||||
for child in node.children() {
|
||||
if child.is_text() {
|
||||
let characterdata: JSRef<CharacterData> = CharacterDataCast::to_ref(child).unwrap();
|
||||
value.push_str(characterdata.Data().as_slice());
|
||||
} else {
|
||||
collect_text(&child, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> HTMLOptionElementMethods for JSRef<'a, HTMLOptionElement> {
|
||||
// http://www.whatwg.org/html/#dom-option-disabled
|
||||
make_bool_getter!(Disabled)
|
||||
|
@ -53,6 +76,21 @@ impl<'a> HTMLOptionElementMethods for JSRef<'a, HTMLOptionElement> {
|
|||
let elem: JSRef<Element> = ElementCast::from_ref(*self);
|
||||
elem.set_bool_attribute("disabled", disabled)
|
||||
}
|
||||
|
||||
// http://www.whatwg.org/html/#dom-option-text
|
||||
fn Text(&self) -> DOMString {
|
||||
let node: JSRef<Node> = NodeCast::from_ref(*self);
|
||||
let mut content = String::new();
|
||||
collect_text(&node, &mut content);
|
||||
let v: Vec<&str> = split_html_space_chars(content.as_slice()).collect();
|
||||
v.connect(" ")
|
||||
}
|
||||
|
||||
// http://www.whatwg.org/html/#dom-option-text
|
||||
fn SetText(&self, value: DOMString) {
|
||||
let node: JSRef<Node> = NodeCast::from_ref(*self);
|
||||
node.SetTextContent(Some(value))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> VirtualMethods for JSRef<'a, HTMLOptionElement> {
|
||||
|
|
|
@ -13,6 +13,6 @@ interface HTMLOptionElement : HTMLElement {
|
|||
// attribute boolean selected;
|
||||
// attribute DOMString value;
|
||||
|
||||
// attribute DOMString text;
|
||||
attribute DOMString text;
|
||||
//readonly attribute long index;
|
||||
};
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[option-text-backslash.html]
|
||||
type: testharness
|
||||
[Test for the backslash sign in option.text]
|
||||
expected: FAIL
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
[option-text-recurse.html]
|
||||
type: testharness
|
||||
[option.text should recurse]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should not recurse into HTML script elements]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should not recurse into SVG script elements]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should recurse into MathML script elements]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should recurse into null script elements]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should work if a child of the option ends with a script]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should work if the option is in an HTML script element]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should work if the option is in an SVG script element]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should work if the option is in a MathML script element]
|
||||
expected: FAIL
|
||||
|
|
@ -1,149 +0,0 @@
|
|||
[option-text-spaces.html]
|
||||
type: testharness
|
||||
[option.text should strip leading space characters (" ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading space characters ("\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading space characters ("\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading space characters ("\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading space characters ("\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip trailing space characters (" ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip trailing space characters ("\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip trailing space characters ("\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip trailing space characters ("\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip trailing space characters ("\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading and trailing space characters (" ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading and trailing space characters ("\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading and trailing space characters ("\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading and trailing space characters ("\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should strip leading and trailing space characters ("\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace single internal space characters (" ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace single internal space characters ("\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace single internal space characters ("\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace single internal space characters ("\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace single internal space characters ("\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters (" ", " ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters (" ", "\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters (" ", "\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters (" ", "\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters (" ", "\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\t", " ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\t", "\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\t", "\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\t", "\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\t", "\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\n", " ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\n", "\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\n", "\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\n", "\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\n", "\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\f", " ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\f", "\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\f", "\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\f", "\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\f", "\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\r", " ")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\r", "\\t")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\r", "\\n")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\r", "\\f")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should replace multiple internal space characters ("\\r", "\\r")]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should leave leading NBSP alone.]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should leave trailing NBSP alone.]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should leave a single internal NBSP alone.]
|
||||
expected: FAIL
|
||||
|
||||
[option.text should leave two internal NBSPs alone.]
|
||||
expected: FAIL
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue