mirror of
https://github.com/servo/servo.git
synced 2025-06-12 18:34:39 +00:00
These attributes all reflect their own related content values, with the exception of defaultValue, which acts as an alias for its IDL textContent attribute. Many of these do have default values and constraints which are currently unimplemented.
181 lines
6.3 KiB
Rust
181 lines
6.3 KiB
Rust
/* 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 http://mozilla.org/MPL/2.0/. */
|
|
|
|
use dom::attr::Attr;
|
|
use dom::attr::AttrHelpers;
|
|
use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding;
|
|
use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding::HTMLTextAreaElementMethods;
|
|
use dom::bindings::codegen::InheritTypes::{HTMLElementCast, NodeCast};
|
|
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
|
|
use dom::bindings::codegen::InheritTypes::{HTMLTextAreaElementDerived, HTMLFieldSetElementDerived};
|
|
use dom::bindings::js::{JSRef, Temporary};
|
|
use dom::bindings::utils::{Reflectable, Reflector};
|
|
use dom::document::Document;
|
|
use dom::element::{AttributeHandlers, HTMLTextAreaElementTypeId};
|
|
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
|
|
use dom::htmlelement::HTMLElement;
|
|
use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId};
|
|
use dom::virtualmethods::VirtualMethods;
|
|
|
|
use servo_util::str::DOMString;
|
|
use string_cache::Atom;
|
|
|
|
#[dom_struct]
|
|
pub struct HTMLTextAreaElement {
|
|
htmlelement: HTMLElement,
|
|
}
|
|
|
|
impl HTMLTextAreaElementDerived for EventTarget {
|
|
fn is_htmltextareaelement(&self) -> bool {
|
|
*self.type_id() == NodeTargetTypeId(ElementNodeTypeId(HTMLTextAreaElementTypeId))
|
|
}
|
|
}
|
|
|
|
impl HTMLTextAreaElement {
|
|
fn new_inherited(localName: DOMString, prefix: Option<DOMString>, document: JSRef<Document>) -> HTMLTextAreaElement {
|
|
HTMLTextAreaElement {
|
|
htmlelement: HTMLElement::new_inherited(HTMLTextAreaElementTypeId, localName, prefix, document)
|
|
}
|
|
}
|
|
|
|
#[allow(unrooted_must_root)]
|
|
pub fn new(localName: DOMString, prefix: Option<DOMString>, document: JSRef<Document>) -> Temporary<HTMLTextAreaElement> {
|
|
let element = HTMLTextAreaElement::new_inherited(localName, prefix, document);
|
|
Node::reflect_node(box element, document, HTMLTextAreaElementBinding::Wrap)
|
|
}
|
|
}
|
|
|
|
impl<'a> HTMLTextAreaElementMethods for JSRef<'a, HTMLTextAreaElement> {
|
|
// TODO A few of these attributes have default values and additional
|
|
// constraints
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-cols
|
|
make_uint_getter!(Cols)
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-cols
|
|
make_uint_setter!(SetCols, "cols")
|
|
|
|
// http://www.whatwg.org/html/#dom-fe-disabled
|
|
make_bool_getter!(Disabled)
|
|
|
|
// http://www.whatwg.org/html/#dom-fe-disabled
|
|
make_bool_setter!(SetDisabled, "disabled")
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#attr-fe-name
|
|
make_getter!(Name)
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#attr-fe-name
|
|
make_setter!(SetName, "name")
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-placeholder
|
|
make_getter!(Placeholder)
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-placeholder
|
|
make_setter!(SetPlaceholder, "placeholder")
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-required
|
|
make_bool_getter!(Required)
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-required
|
|
make_bool_setter!(SetRequired, "required")
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-rows
|
|
make_uint_getter!(Rows)
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-rows
|
|
make_uint_setter!(SetRows, "rows")
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-wrap
|
|
make_getter!(Wrap)
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-wrap
|
|
make_setter!(SetWrap, "wrap")
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-type
|
|
fn Type(self) -> DOMString {
|
|
"textarea".to_string()
|
|
}
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-defaultvalue
|
|
fn DefaultValue(self) -> DOMString {
|
|
let node: JSRef<Node> = NodeCast::from_ref(self);
|
|
node.GetTextContent().unwrap()
|
|
}
|
|
|
|
// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-defaultvalue
|
|
fn SetDefaultValue(self, value: DOMString) {
|
|
let node: JSRef<Node> = NodeCast::from_ref(self);
|
|
node.SetTextContent(Some(value))
|
|
}
|
|
}
|
|
|
|
impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> {
|
|
fn super_type<'a>(&'a self) -> Option<&'a VirtualMethods> {
|
|
let htmlelement: &JSRef<HTMLElement> = HTMLElementCast::from_borrowed_ref(self);
|
|
Some(htmlelement as &VirtualMethods)
|
|
}
|
|
|
|
fn after_set_attr(&self, attr: JSRef<Attr>) {
|
|
match self.super_type() {
|
|
Some(ref s) => s.after_set_attr(attr),
|
|
_ => ()
|
|
}
|
|
|
|
match attr.local_name() {
|
|
&atom!("disabled") => {
|
|
let node: JSRef<Node> = NodeCast::from_ref(*self);
|
|
node.set_disabled_state(true);
|
|
node.set_enabled_state(false);
|
|
},
|
|
_ => ()
|
|
}
|
|
}
|
|
|
|
fn before_remove_attr(&self, attr: JSRef<Attr>) {
|
|
match self.super_type() {
|
|
Some(ref s) => s.before_remove_attr(attr),
|
|
_ => ()
|
|
}
|
|
|
|
match attr.local_name() {
|
|
&atom!("disabled") => {
|
|
let node: JSRef<Node> = NodeCast::from_ref(*self);
|
|
node.set_disabled_state(false);
|
|
node.set_enabled_state(true);
|
|
node.check_ancestors_disabled_state_for_form_control();
|
|
},
|
|
_ => ()
|
|
}
|
|
}
|
|
|
|
fn bind_to_tree(&self, tree_in_doc: bool) {
|
|
match self.super_type() {
|
|
Some(ref s) => s.bind_to_tree(tree_in_doc),
|
|
_ => (),
|
|
}
|
|
|
|
let node: JSRef<Node> = NodeCast::from_ref(*self);
|
|
node.check_ancestors_disabled_state_for_form_control();
|
|
}
|
|
|
|
fn unbind_from_tree(&self, tree_in_doc: bool) {
|
|
match self.super_type() {
|
|
Some(ref s) => s.unbind_from_tree(tree_in_doc),
|
|
_ => (),
|
|
}
|
|
|
|
let node: JSRef<Node> = NodeCast::from_ref(*self);
|
|
if node.ancestors().any(|ancestor| ancestor.is_htmlfieldsetelement()) {
|
|
node.check_ancestors_disabled_state_for_form_control();
|
|
} else {
|
|
node.check_disabled_attribute();
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Reflectable for HTMLTextAreaElement {
|
|
fn reflector<'a>(&'a self) -> &'a Reflector {
|
|
self.htmlelement.reflector()
|
|
}
|
|
}
|