mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Merge pull request #3073 from Manishearth/macro-getters
Create and use attribute getter macros; r=Ms2ger
This commit is contained in:
commit
69d5c26fa2
3 changed files with 55 additions and 41 deletions
|
@ -16,7 +16,6 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId};
|
|||
use dom::htmlelement::HTMLElement;
|
||||
use dom::node::{Node, ElementNodeTypeId, NodeHelpers, window_from_node};
|
||||
use dom::virtualmethods::VirtualMethods;
|
||||
|
||||
use servo_net::image_cache_task;
|
||||
use servo_util::atom::Atom;
|
||||
use servo_util::geometry::to_px;
|
||||
|
@ -96,40 +95,28 @@ impl LayoutHTMLImageElementHelpers for JS<HTMLImageElement> {
|
|||
}
|
||||
|
||||
impl<'a> HTMLImageElementMethods for JSRef<'a, HTMLImageElement> {
|
||||
fn Alt(&self) -> DOMString {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_string_attribute("alt")
|
||||
}
|
||||
make_getter!(Alt)
|
||||
|
||||
fn SetAlt(&self, alt: DOMString) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.set_string_attribute("alt", alt)
|
||||
}
|
||||
|
||||
fn Src(&self) -> DOMString {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_string_attribute("src")
|
||||
}
|
||||
make_getter!(Src)
|
||||
|
||||
fn SetSrc(&self, src: DOMString) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.set_url_attribute("src", src)
|
||||
}
|
||||
|
||||
fn UseMap(&self) -> DOMString {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_string_attribute("useMap")
|
||||
}
|
||||
make_getter!(UseMap)
|
||||
|
||||
fn SetUseMap(&self, use_map: DOMString) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.set_string_attribute("useMap", use_map)
|
||||
}
|
||||
|
||||
fn IsMap(&self) -> bool {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
from_str::<bool>(element.get_string_attribute("hspace").as_slice()).unwrap()
|
||||
}
|
||||
make_bool_getter!(IsMap)
|
||||
|
||||
fn SetIsMap(&self, is_map: bool) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
|
@ -158,60 +145,42 @@ impl<'a> HTMLImageElementMethods for JSRef<'a, HTMLImageElement> {
|
|||
elem.set_uint_attribute("height", height)
|
||||
}
|
||||
|
||||
fn Name(&self) -> DOMString {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_string_attribute("name")
|
||||
}
|
||||
make_getter!(Name)
|
||||
|
||||
fn SetName(&self, name: DOMString) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.set_string_attribute("name", name)
|
||||
}
|
||||
|
||||
fn Align(&self) -> DOMString {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_string_attribute("align")
|
||||
}
|
||||
make_getter!(Align)
|
||||
|
||||
fn SetAlign(&self, align: DOMString) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.set_string_attribute("align", align)
|
||||
}
|
||||
|
||||
fn Hspace(&self) -> u32 {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_uint_attribute("hspace")
|
||||
}
|
||||
make_uint_getter!(Hspace)
|
||||
|
||||
fn SetHspace(&self, hspace: u32) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.set_uint_attribute("hspace", hspace)
|
||||
}
|
||||
|
||||
fn Vspace(&self) -> u32 {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_uint_attribute("vspace")
|
||||
}
|
||||
make_uint_getter!(Vspace)
|
||||
|
||||
fn SetVspace(&self, vspace: u32) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.set_uint_attribute("vspace", vspace)
|
||||
}
|
||||
|
||||
fn LongDesc(&self) -> DOMString {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_string_attribute("longdesc")
|
||||
}
|
||||
make_getter!(LongDesc)
|
||||
|
||||
fn SetLongDesc(&self, longdesc: DOMString) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.set_string_attribute("longdesc", longdesc)
|
||||
}
|
||||
|
||||
fn Border(&self) -> DOMString {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_string_attribute("border")
|
||||
}
|
||||
make_getter!(Border)
|
||||
|
||||
fn SetBorder(&self, border: DOMString) {
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
|
|
44
src/components/script/dom/macros.rs
Normal file
44
src/components/script/dom/macros.rs
Normal file
|
@ -0,0 +1,44 @@
|
|||
/* 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/. */
|
||||
|
||||
#![macro_escape]
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! make_getter(
|
||||
( $attr:ident ) => (
|
||||
fn $attr(&self) -> DOMString {
|
||||
use dom::element::{Element, AttributeHandlers};
|
||||
use dom::bindings::codegen::InheritTypes::ElementCast;
|
||||
use std::ascii::StrAsciiExt;
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_string_attribute(stringify!($attr).to_ascii_lower().as_slice())
|
||||
}
|
||||
);
|
||||
)
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! make_bool_getter(
|
||||
( $attr:ident ) => (
|
||||
fn $attr(&self) -> bool {
|
||||
use dom::element::{Element, AttributeHandlers};
|
||||
use dom::bindings::codegen::InheritTypes::ElementCast;
|
||||
use std::ascii::StrAsciiExt;
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.has_attribute(stringify!($attr).to_ascii_lower().as_slice())
|
||||
}
|
||||
);
|
||||
)
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! make_uint_getter(
|
||||
( $attr:ident ) => (
|
||||
fn $attr(&self) -> u32 {
|
||||
use dom::element::{Element, AttributeHandlers};
|
||||
use dom::bindings::codegen::InheritTypes::ElementCast;
|
||||
use std::ascii::StrAsciiExt;
|
||||
let element: &JSRef<Element> = ElementCast::from_ref(self);
|
||||
element.get_uint_attribute(stringify!($attr).to_ascii_lower().as_slice())
|
||||
}
|
||||
);
|
||||
)
|
|
@ -73,6 +73,7 @@ pub mod dom {
|
|||
|
||||
#[path="bindings/codegen/InterfaceTypes.rs"]
|
||||
pub mod types;
|
||||
pub mod macros;
|
||||
|
||||
pub mod attr;
|
||||
pub mod attrlist;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue