зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #2826 - Return slices from get_attribute_parts; r=Manishearth (from Ms2ger:get_attribute_parts-slices)
Source-Repo: https://github.com/servo/servo Source-Revision: cd87775d4e867ffca5359ec64e8de427540c3835
This commit is contained in:
Родитель
a38486ddb5
Коммит
03c20a085c
|
@ -462,9 +462,10 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
|
|||
}
|
||||
|
||||
if ns == namespace::HTML {
|
||||
Ok(build_element_from_tag(local_name_from_qname, ns, self))
|
||||
Ok(build_element_from_tag(local_name_from_qname.to_string(), ns, self))
|
||||
} else {
|
||||
Ok(Element::new(local_name_from_qname, ns, prefix_from_qname, self))
|
||||
Ok(Element::new(local_name_from_qname.to_string(), ns,
|
||||
prefix_from_qname.map(|s| s.to_string()), self))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -317,7 +317,7 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
|
|||
let (_, local_name) = get_attribute_parts(name);
|
||||
|
||||
let idx = self.deref().attrs.borrow().iter().map(|attr| attr.root()).position(|attr| {
|
||||
attr.local_name == local_name
|
||||
attr.local_name.as_slice() == local_name
|
||||
});
|
||||
|
||||
match idx {
|
||||
|
@ -331,7 +331,7 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
|
|||
if namespace == namespace::Null {
|
||||
let removed_raw_value = self.deref().attrs.borrow().get(idx).root().Value();
|
||||
vtable_for(NodeCast::from_ref(self))
|
||||
.before_remove_attr(local_name.clone(), removed_raw_value);
|
||||
.before_remove_attr(local_name.to_string(), removed_raw_value);
|
||||
}
|
||||
|
||||
self.deref().attrs.borrow_mut().remove(idx);
|
||||
|
@ -630,14 +630,16 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
|
|||
}
|
||||
|
||||
// Step 8.
|
||||
if namespace == namespace::XMLNS && "xmlns" != name.as_slice() && Some("xmlns".to_string()) != prefix {
|
||||
if namespace == namespace::XMLNS && "xmlns" != name.as_slice() && Some("xmlns") != prefix {
|
||||
return Err(NamespaceError);
|
||||
}
|
||||
|
||||
// Step 9.
|
||||
let value = self.parse_attribute(&namespace, local_name.as_slice(), value);
|
||||
self.do_set_attribute(local_name.clone(), value, name, namespace.clone(), prefix, |attr| {
|
||||
attr.deref().local_name == local_name &&
|
||||
self.do_set_attribute(local_name.to_string(), value, name.to_string(),
|
||||
namespace.clone(), prefix.map(|s| s.to_string()),
|
||||
|attr| {
|
||||
attr.deref().local_name.as_slice() == local_name &&
|
||||
attr.deref().namespace == namespace
|
||||
});
|
||||
Ok(())
|
||||
|
@ -759,14 +761,14 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_attribute_parts(name: &str) -> (Option<String>, String) {
|
||||
pub fn get_attribute_parts<'a>(name: &'a str) -> (Option<&'a str>, &'a str) {
|
||||
//FIXME: Throw for XML-invalid names
|
||||
//FIXME: Throw for XMLNS-invalid names
|
||||
let (prefix, local_name) = if name.contains(":") {
|
||||
let mut parts = name.splitn(':', 1);
|
||||
(Some(parts.next().unwrap().to_string()), parts.next().unwrap().to_string())
|
||||
(Some(parts.next().unwrap()), parts.next().unwrap())
|
||||
} else {
|
||||
(None, name.to_string())
|
||||
(None, name)
|
||||
};
|
||||
|
||||
(prefix, local_name)
|
||||
|
|
Загрузка…
Ссылка в новой задаче