зеркало из https://github.com/mozilla/gecko-dev.git
Source-Repo: https://github.com/servo/servo Source-Revision: 0109cc3ffc6e58a5e294ff469b37a636c98cff70
This commit is contained in:
Родитель
a20334edde
Коммит
2af2dc9669
|
@ -2086,14 +2086,11 @@ class CGDefineProxyHandler(CGAbstractMethod):
|
||||||
return CGAbstractMethod.define(self)
|
return CGAbstractMethod.define(self)
|
||||||
|
|
||||||
def definition_body(self):
|
def definition_body(self):
|
||||||
customDefineProperty = 'defineProperty_'
|
|
||||||
if self.descriptor.operations['IndexedSetter'] or self.descriptor.operations['NamedSetter']:
|
|
||||||
customDefineProperty = 'defineProperty'
|
|
||||||
body = """\
|
body = """\
|
||||||
let traps = ProxyTraps {
|
let traps = ProxyTraps {
|
||||||
getPropertyDescriptor: Some(getPropertyDescriptor),
|
getPropertyDescriptor: Some(getPropertyDescriptor),
|
||||||
getOwnPropertyDescriptor: Some(getOwnPropertyDescriptor),
|
getOwnPropertyDescriptor: Some(getOwnPropertyDescriptor),
|
||||||
defineProperty: Some(%s),
|
defineProperty: Some(defineProperty_),
|
||||||
getOwnPropertyNames: ptr::null(),
|
getOwnPropertyNames: ptr::null(),
|
||||||
delete_: Some(delete_),
|
delete_: Some(delete_),
|
||||||
enumerate: ptr::null(),
|
enumerate: ptr::null(),
|
||||||
|
@ -2123,7 +2120,7 @@ let traps = ProxyTraps {
|
||||||
};
|
};
|
||||||
|
|
||||||
CreateProxyHandler(&traps, &Class as *const _ as *const _)
|
CreateProxyHandler(&traps, &Class as *const _ as *const _)
|
||||||
""" % (customDefineProperty, FINALIZE_HOOK_NAME,
|
""" % (FINALIZE_HOOK_NAME,
|
||||||
TRACE_HOOK_NAME)
|
TRACE_HOOK_NAME)
|
||||||
return CGGeneric(body)
|
return CGGeneric(body)
|
||||||
|
|
||||||
|
@ -2279,15 +2276,8 @@ class CGPerSignatureCall(CGThing):
|
||||||
invalidEnumValueFatal=not setter) for
|
invalidEnumValueFatal=not setter) for
|
||||||
i in range(argConversionStartsAt, self.argCount)])
|
i in range(argConversionStartsAt, self.argCount)])
|
||||||
|
|
||||||
errorResult = None
|
|
||||||
if self.isFallible():
|
|
||||||
if nativeMethodName == "NamedSetter":
|
|
||||||
errorResult = " false"
|
|
||||||
else:
|
|
||||||
errorResult = " false as JSBool"
|
|
||||||
|
|
||||||
cgThings.append(CGCallGenerator(
|
cgThings.append(CGCallGenerator(
|
||||||
errorResult,
|
' false as JSBool' if self.isFallible() else None,
|
||||||
self.getArguments(), self.argsPre, returnType,
|
self.getArguments(), self.argsPre, returnType,
|
||||||
self.extendedAttributes, descriptor, nativeMethodName,
|
self.extendedAttributes, descriptor, nativeMethodName,
|
||||||
static))
|
static))
|
||||||
|
@ -3846,14 +3836,14 @@ if expando.is_not_null() {
|
||||||
getIndexedOrExpando = getFromExpando + "\n"
|
getIndexedOrExpando = getFromExpando + "\n"
|
||||||
|
|
||||||
namedGetter = self.descriptor.operations['NamedGetter']
|
namedGetter = self.descriptor.operations['NamedGetter']
|
||||||
if namedGetter:
|
if namedGetter and False: #XXXjdm unfinished
|
||||||
getNamed = ("if (RUST_JSID_IS_STRING(id) != 0) {\n" +
|
getNamed = ("if (JSID_IS_STRING(id)) {\n" +
|
||||||
" let name = jsid_to_str(cx, id);\n" +
|
" let name = jsid_to_str(cx, id);\n" +
|
||||||
" let this = UnwrapProxy(proxy);\n" +
|
" let this = UnwrapProxy(proxy);\n" +
|
||||||
" let this = JS::from_raw(this);\n" +
|
" let this = JS::from_raw(this);\n" +
|
||||||
" let this = this.root();\n" +
|
" let this = this.root();\n" +
|
||||||
CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues)).define() +
|
CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues)).define() +
|
||||||
"}\n")
|
"}\n") % (self.descriptor.concreteType)
|
||||||
else:
|
else:
|
||||||
getNamed = ""
|
getNamed = ""
|
||||||
|
|
||||||
|
|
|
@ -2,56 +2,51 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* 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/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
use dom::bindings::cell::DOMRefCell;
|
||||||
use dom::bindings::codegen::Bindings::DOMStringMapBinding;
|
use dom::bindings::codegen::Bindings::DOMStringMapBinding;
|
||||||
use dom::bindings::codegen::Bindings::DOMStringMapBinding::DOMStringMapMethods;
|
use dom::bindings::codegen::Bindings::DOMStringMapBinding::DOMStringMapMethods;
|
||||||
use dom::bindings::error::ErrorResult;
|
|
||||||
use dom::bindings::global::GlobalRef;
|
use dom::bindings::global::GlobalRef;
|
||||||
use dom::bindings::js::{JS, JSRef, Temporary};
|
use dom::bindings::js::{JSRef, Temporary};
|
||||||
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
|
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
|
||||||
use dom::node::window_from_node;
|
|
||||||
use dom::htmlelement::{HTMLElement, HTMLElementCustomAttributeHelpers};
|
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct DOMStringMap {
|
pub struct DOMStringMap {
|
||||||
|
map: DOMRefCell<HashMap<DOMString, DOMString>>,
|
||||||
reflector_: Reflector,
|
reflector_: Reflector,
|
||||||
element: JS<HTMLElement>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DOMStringMap {
|
impl DOMStringMap {
|
||||||
fn new_inherited(element: JSRef<HTMLElement>) -> DOMStringMap {
|
fn new_inherited() -> DOMStringMap {
|
||||||
DOMStringMap {
|
DOMStringMap {
|
||||||
|
map: DOMRefCell::new(HashMap::new()),
|
||||||
reflector_: Reflector::new(),
|
reflector_: Reflector::new(),
|
||||||
element: JS::from_rooted(element),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(element: JSRef<HTMLElement>) -> Temporary<DOMStringMap> {
|
pub fn new(global: GlobalRef) -> Temporary<DOMStringMap> {
|
||||||
let window = window_from_node(element).root();
|
reflect_dom_object(box DOMStringMap::new_inherited(),
|
||||||
reflect_dom_object(box DOMStringMap::new_inherited(element),
|
global, DOMStringMapBinding::Wrap)
|
||||||
GlobalRef::Window(window.root_ref()), DOMStringMapBinding::Wrap)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/#domstringmap
|
|
||||||
impl<'a> DOMStringMapMethods for JSRef<'a, DOMStringMap> {
|
impl<'a> DOMStringMapMethods for JSRef<'a, DOMStringMap> {
|
||||||
fn NamedCreator(self, name: DOMString, value: DOMString) -> ErrorResult {
|
fn NamedCreator(self, name: DOMString, value: DOMString) {
|
||||||
self.NamedSetter(name, value)
|
self.map.borrow_mut().insert(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn NamedDeleter(self, name: DOMString) {
|
fn NamedDeleter(self, name: DOMString) {
|
||||||
let element = self.element.root();
|
self.map.borrow_mut().remove(&name);
|
||||||
element.delete_custom_attr(name)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn NamedSetter(self, name: DOMString, value: DOMString) -> ErrorResult {
|
fn NamedSetter(self, name: DOMString, value: DOMString) {
|
||||||
let element = self.element.root();
|
self.map.borrow_mut().insert(name, value);
|
||||||
element.set_custom_attr(name, value)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn NamedGetter(self, name: DOMString, found: &mut bool) -> DOMString {
|
fn NamedGetter(self, name: DOMString, found: &mut bool) -> DOMString {
|
||||||
let element = self.element.root();
|
match self.map.borrow().get(&name) {
|
||||||
match element.get_custom_attr(name) {
|
|
||||||
Some(value) => {
|
Some(value) => {
|
||||||
*found = true;
|
*found = true;
|
||||||
value.clone()
|
value.clone()
|
||||||
|
|
|
@ -459,7 +459,6 @@ impl LayoutElementHelpers for JS<Element> {
|
||||||
pub trait ElementHelpers<'a> {
|
pub trait ElementHelpers<'a> {
|
||||||
fn html_element_in_html_document(self) -> bool;
|
fn html_element_in_html_document(self) -> bool;
|
||||||
fn local_name(self) -> &'a Atom;
|
fn local_name(self) -> &'a Atom;
|
||||||
fn parsed_name(self, name: DOMString) -> DOMString;
|
|
||||||
fn namespace(self) -> &'a Namespace;
|
fn namespace(self) -> &'a Namespace;
|
||||||
fn prefix(self) -> &'a Option<DOMString>;
|
fn prefix(self) -> &'a Option<DOMString>;
|
||||||
fn attrs(&self) -> Ref<Vec<JS<Attr>>>;
|
fn attrs(&self) -> Ref<Vec<JS<Attr>>>;
|
||||||
|
@ -482,15 +481,6 @@ impl<'a> ElementHelpers<'a> for JSRef<'a, Element> {
|
||||||
&self.extended_deref().local_name
|
&self.extended_deref().local_name
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name
|
|
||||||
fn parsed_name(self, name: DOMString) -> DOMString {
|
|
||||||
if self.html_element_in_html_document() {
|
|
||||||
name.as_slice().to_ascii_lower()
|
|
||||||
} else {
|
|
||||||
name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn namespace(self) -> &'a Namespace {
|
fn namespace(self) -> &'a Namespace {
|
||||||
&self.extended_deref().namespace
|
&self.extended_deref().namespace
|
||||||
}
|
}
|
||||||
|
@ -619,7 +609,6 @@ pub trait AttributeHandlers {
|
||||||
value: DOMString,
|
value: DOMString,
|
||||||
prefix: Option<DOMString>);
|
prefix: Option<DOMString>);
|
||||||
fn set_attribute(self, name: &Atom, value: AttrValue);
|
fn set_attribute(self, name: &Atom, value: AttrValue);
|
||||||
fn set_custom_attribute(self, name: DOMString, value: DOMString) -> ErrorResult;
|
|
||||||
fn do_set_attribute(self, local_name: Atom, value: AttrValue,
|
fn do_set_attribute(self, local_name: Atom, value: AttrValue,
|
||||||
name: Atom, namespace: Namespace,
|
name: Atom, namespace: Namespace,
|
||||||
prefix: Option<DOMString>, cb: |JSRef<Attr>| -> bool);
|
prefix: Option<DOMString>, cb: |JSRef<Attr>| -> bool);
|
||||||
|
@ -689,23 +678,6 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
|
||||||
ns!(""), None, |attr| *attr.local_name() == *name);
|
ns!(""), None, |attr| *attr.local_name() == *name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/dom.html#attr-data-*
|
|
||||||
fn set_custom_attribute(self, name: DOMString, value: DOMString) -> ErrorResult {
|
|
||||||
// Step 1.
|
|
||||||
match xml_name_type(name.as_slice()) {
|
|
||||||
InvalidXMLName => return Err(InvalidCharacter),
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Steps 2-5.
|
|
||||||
let name = Atom::from_slice(name.as_slice());
|
|
||||||
let value = self.parse_attribute(&ns!(""), &name, value);
|
|
||||||
self.do_set_attribute(name.clone(), value, name.clone(), ns!(""), None, |attr| {
|
|
||||||
*attr.name() == name && *attr.namespace() == ns!("")
|
|
||||||
});
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn do_set_attribute(self, local_name: Atom, value: AttrValue,
|
fn do_set_attribute(self, local_name: Atom, value: AttrValue,
|
||||||
name: Atom, namespace: Namespace,
|
name: Atom, namespace: Namespace,
|
||||||
prefix: Option<DOMString>, cb: |JSRef<Attr>| -> bool) {
|
prefix: Option<DOMString>, cb: |JSRef<Attr>| -> bool) {
|
||||||
|
@ -930,7 +902,11 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
|
||||||
|
|
||||||
// http://dom.spec.whatwg.org/#dom-element-getattribute
|
// http://dom.spec.whatwg.org/#dom-element-getattribute
|
||||||
fn GetAttribute(self, name: DOMString) -> Option<DOMString> {
|
fn GetAttribute(self, name: DOMString) -> Option<DOMString> {
|
||||||
let name = self.parsed_name(name);
|
let name = if self.html_element_in_html_document() {
|
||||||
|
name.as_slice().to_ascii_lower()
|
||||||
|
} else {
|
||||||
|
name
|
||||||
|
};
|
||||||
self.get_attribute(ns!(""), &Atom::from_slice(name.as_slice())).root()
|
self.get_attribute(ns!(""), &Atom::from_slice(name.as_slice())).root()
|
||||||
.map(|s| s.Value())
|
.map(|s| s.Value())
|
||||||
}
|
}
|
||||||
|
@ -955,13 +931,17 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 2.
|
// Step 2.
|
||||||
let name = self.parsed_name(name);
|
let name = if self.html_element_in_html_document() {
|
||||||
|
name.as_slice().to_ascii_lower()
|
||||||
|
} else {
|
||||||
|
name
|
||||||
|
};
|
||||||
|
|
||||||
// Step 3-5.
|
// Step 3-5.
|
||||||
let name = Atom::from_slice(name.as_slice());
|
let name = Atom::from_slice(name.as_slice());
|
||||||
let value = self.parse_attribute(&ns!(""), &name, value);
|
let value = self.parse_attribute(&ns!(""), &name, value);
|
||||||
self.do_set_attribute(name.clone(), value, name.clone(), ns!(""), None, |attr| {
|
self.do_set_attribute(name.clone(), value, name.clone(), ns!(""), None, |attr| {
|
||||||
*attr.name() == name
|
attr.name().as_slice() == name.as_slice()
|
||||||
});
|
});
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1032,7 +1012,11 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
|
||||||
|
|
||||||
// http://dom.spec.whatwg.org/#dom-element-removeattribute
|
// http://dom.spec.whatwg.org/#dom-element-removeattribute
|
||||||
fn RemoveAttribute(self, name: DOMString) {
|
fn RemoveAttribute(self, name: DOMString) {
|
||||||
let name = self.parsed_name(name);
|
let name = if self.html_element_in_html_document() {
|
||||||
|
name.as_slice().to_ascii_lower()
|
||||||
|
} else {
|
||||||
|
name
|
||||||
|
};
|
||||||
self.remove_attribute(ns!(""), name.as_slice())
|
self.remove_attribute(ns!(""), name.as_slice())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,13 +13,10 @@ use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLFrameSetElementDeriv
|
||||||
use dom::bindings::codegen::InheritTypes::{EventTargetCast, HTMLInputElementCast};
|
use dom::bindings::codegen::InheritTypes::{EventTargetCast, HTMLInputElementCast};
|
||||||
use dom::bindings::codegen::InheritTypes::{HTMLElementDerived, HTMLBodyElementDerived};
|
use dom::bindings::codegen::InheritTypes::{HTMLElementDerived, HTMLBodyElementDerived};
|
||||||
use dom::bindings::js::{JSRef, Temporary, MutNullableJS};
|
use dom::bindings::js::{JSRef, Temporary, MutNullableJS};
|
||||||
use dom::bindings::error::ErrorResult;
|
|
||||||
use dom::bindings::error::Error::Syntax;
|
|
||||||
use dom::bindings::utils::{Reflectable, Reflector};
|
use dom::bindings::utils::{Reflectable, Reflector};
|
||||||
use dom::cssstyledeclaration::CSSStyleDeclaration;
|
use dom::cssstyledeclaration::CSSStyleDeclaration;
|
||||||
use dom::document::Document;
|
use dom::document::Document;
|
||||||
use dom::domstringmap::DOMStringMap;
|
use dom::element::{Element, ElementTypeId, ActivationElementHelpers};
|
||||||
use dom::element::{Element, ElementTypeId, ActivationElementHelpers, AttributeHandlers};
|
|
||||||
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
|
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
|
||||||
use dom::node::{Node, NodeTypeId, window_from_node};
|
use dom::node::{Node, NodeTypeId, window_from_node};
|
||||||
use dom::virtualmethods::VirtualMethods;
|
use dom::virtualmethods::VirtualMethods;
|
||||||
|
@ -34,7 +31,6 @@ use std::default::Default;
|
||||||
pub struct HTMLElement {
|
pub struct HTMLElement {
|
||||||
element: Element,
|
element: Element,
|
||||||
style_decl: MutNullableJS<CSSStyleDeclaration>,
|
style_decl: MutNullableJS<CSSStyleDeclaration>,
|
||||||
dataset: MutNullableJS<DOMStringMap>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HTMLElementDerived for EventTarget {
|
impl HTMLElementDerived for EventTarget {
|
||||||
|
@ -52,7 +48,6 @@ impl HTMLElement {
|
||||||
HTMLElement {
|
HTMLElement {
|
||||||
element: Element::new_inherited(type_id, tag_name, ns!(HTML), prefix, document),
|
element: Element::new_inherited(type_id, tag_name, ns!(HTML), prefix, document),
|
||||||
style_decl: Default::default(),
|
style_decl: Default::default(),
|
||||||
dataset: Default::default(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,11 +89,6 @@ impl<'a> HTMLElementMethods for JSRef<'a, HTMLElement> {
|
||||||
|
|
||||||
global_event_handlers!(NoOnload)
|
global_event_handlers!(NoOnload)
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/dom.html#dom-dataset
|
|
||||||
fn Dataset(self) -> Temporary<DOMStringMap> {
|
|
||||||
self.dataset.or_init(|| DOMStringMap::new(self))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn GetOnload(self) -> Option<EventHandlerNonNull> {
|
fn GetOnload(self) -> Option<EventHandlerNonNull> {
|
||||||
if self.is_body_or_frameset() {
|
if self.is_body_or_frameset() {
|
||||||
let win = window_from_node(self).root();
|
let win = window_from_node(self).root();
|
||||||
|
@ -132,51 +122,6 @@ impl<'a> HTMLElementMethods for JSRef<'a, HTMLElement> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/#attr-data-*
|
|
||||||
pub trait HTMLElementCustomAttributeHelpers {
|
|
||||||
fn set_custom_attr(self, name: DOMString, value: DOMString) -> ErrorResult;
|
|
||||||
fn get_custom_attr(self, name: DOMString) -> Option<DOMString>;
|
|
||||||
fn delete_custom_attr(self, name: DOMString);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn to_snake_case(name: DOMString) -> DOMString {
|
|
||||||
let mut attr_name = "data-".into_string();
|
|
||||||
for ch in name.as_slice().chars() {
|
|
||||||
if ch.is_uppercase() {
|
|
||||||
attr_name.push('\x2d');
|
|
||||||
attr_name.push(ch.to_lowercase());
|
|
||||||
} else {
|
|
||||||
attr_name.push(ch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
attr_name
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> HTMLElementCustomAttributeHelpers for JSRef<'a, HTMLElement> {
|
|
||||||
fn set_custom_attr(self, name: DOMString, value: DOMString) -> ErrorResult {
|
|
||||||
if name.as_slice().chars()
|
|
||||||
.skip_while(|&ch| ch != '\u002d')
|
|
||||||
.nth(1).map_or(false, |ch| ch as u8 - b'a' < 26) {
|
|
||||||
return Err(Syntax);
|
|
||||||
}
|
|
||||||
let element: JSRef<Element> = ElementCast::from_ref(self);
|
|
||||||
element.set_custom_attribute(to_snake_case(name), value)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_custom_attr(self, name: DOMString) -> Option<DOMString> {
|
|
||||||
let element: JSRef<Element> = ElementCast::from_ref(self);
|
|
||||||
element.get_attribute(ns!(""), &Atom::from_slice(to_snake_case(name).as_slice())).map(|attr| {
|
|
||||||
let attr = attr.root();
|
|
||||||
attr.value().as_slice().to_string()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fn delete_custom_attr(self, name: DOMString) {
|
|
||||||
let element: JSRef<Element> = ElementCast::from_ref(self);
|
|
||||||
element.remove_attribute(ns!(""), to_snake_case(name).as_slice())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> VirtualMethods for JSRef<'a, HTMLElement> {
|
impl<'a> VirtualMethods for JSRef<'a, HTMLElement> {
|
||||||
fn super_type<'a>(&'a self) -> Option<&'a VirtualMethods> {
|
fn super_type<'a>(&'a self) -> Option<&'a VirtualMethods> {
|
||||||
let element: &JSRef<Element> = ElementCast::from_borrowed_ref(self);
|
let element: &JSRef<Element> = ElementCast::from_borrowed_ref(self);
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
[OverrideBuiltins]
|
[OverrideBuiltins]
|
||||||
interface DOMStringMap {
|
interface DOMStringMap {
|
||||||
getter DOMString (DOMString name);
|
getter DOMString (DOMString name);
|
||||||
[Throws]
|
|
||||||
setter creator void (DOMString name, DOMString value);
|
setter creator void (DOMString name, DOMString value);
|
||||||
deleter void (DOMString name);
|
deleter void (DOMString name);
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,7 @@ interface HTMLElement : Element {
|
||||||
attribute DOMString lang;
|
attribute DOMString lang;
|
||||||
// attribute boolean translate;
|
// attribute boolean translate;
|
||||||
// attribute DOMString dir;
|
// attribute DOMString dir;
|
||||||
readonly attribute DOMStringMap dataset;
|
//readonly attribute DOMStringMap dataset;
|
||||||
|
|
||||||
// microdata
|
// microdata
|
||||||
// attribute boolean itemScope;
|
// attribute boolean itemScope;
|
||||||
|
|
|
@ -41,8 +41,8 @@ macro_rules! sizeof_checker (
|
||||||
sizeof_checker!(size_event_target, EventTarget, 56)
|
sizeof_checker!(size_event_target, EventTarget, 56)
|
||||||
sizeof_checker!(size_node, Node, 304)
|
sizeof_checker!(size_node, Node, 304)
|
||||||
sizeof_checker!(size_element, Element, 448)
|
sizeof_checker!(size_element, Element, 448)
|
||||||
sizeof_checker!(size_htmlelement, HTMLElement, 480)
|
sizeof_checker!(size_htmlelement, HTMLElement, 464)
|
||||||
sizeof_checker!(size_div, HTMLDivElement, 480)
|
sizeof_checker!(size_div, HTMLDivElement, 464)
|
||||||
sizeof_checker!(size_span, HTMLSpanElement, 480)
|
sizeof_checker!(size_span, HTMLSpanElement, 464)
|
||||||
sizeof_checker!(size_text, Text, 336)
|
sizeof_checker!(size_text, Text, 336)
|
||||||
sizeof_checker!(size_characterdata, CharacterData, 336)
|
sizeof_checker!(size_characterdata, CharacterData, 336)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче