diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-09-02 08:14:33 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-09-02 08:14:33 -0600 |
commit | eaf90c0b1c14717fb580bb0bdb8f6c4db363ace6 (patch) | |
tree | f23c8685d3581649d6b1ab1ea82650460e544e04 /components/script/dom/htmlscriptelement.rs | |
parent | 5478c7c24bf6e175a9bca39bb11829c8325be2a9 (diff) | |
parent | 58e1bd0e57a3c69307e35a25ed23af3dedf05c50 (diff) | |
download | servo-eaf90c0b1c14717fb580bb0bdb8f6c4db363ace6.tar.gz servo-eaf90c0b1c14717fb580bb0bdb8f6c4db363ace6.zip |
Auto merge of #7452 - nox:cleanup-attributes, r=nox
Introduce VirtualMethods::attribute_mutated()
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7452)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/htmlscriptelement.rs')
-rw-r--r-- | components/script/dom/htmlscriptelement.rs | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 97cd6573fda..c70a0d3541b 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -21,7 +21,7 @@ use dom::bindings::js::{JS, Root}; use dom::bindings::refcounted::Trusted; use dom::bindings::trace::JSTraceable; use dom::document::Document; -use dom::element::{ElementCreator, ElementTypeId}; +use dom::element::{AttributeMutation, ElementCreator, ElementTypeId}; use dom::event::{Event, EventBubbles, EventCancelable}; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; @@ -236,14 +236,13 @@ impl HTMLScriptElement { let event_attribute = element.get_attribute(&ns!(""), &Atom::from_slice("event")); match (for_attribute.r(), event_attribute.r()) { (Some(for_attribute), Some(event_attribute)) => { - let for_value = for_attribute.Value() - .to_ascii_lowercase(); + let for_value = for_attribute.value().to_ascii_lowercase(); let for_value = for_value.trim_matches(HTML_SPACE_CHARACTERS); if for_value != "window" { return NextParserState::Continue; } - let event_value = event_attribute.Value().to_ascii_lowercase(); + let event_value = event_attribute.value().to_ascii_lowercase(); let event_value = event_value.trim_matches(HTML_SPACE_CHARACTERS); if event_value != "onload" && event_value != "onload()" { return NextParserState::Continue; @@ -268,7 +267,7 @@ impl HTMLScriptElement { // Step 14. Some(ref src) => { // Step 14.1 - let src = src.r().Value(); + let src = src.value(); // Step 14.2 if src.is_empty() { @@ -277,10 +276,10 @@ impl HTMLScriptElement { } // Step 14.3 - match UrlParser::new().base_url(&base_url).parse(&*src) { + match UrlParser::new().base_url(&base_url).parse(&src) { Err(_) => { // Step 14.4 - error!("error parsing URL for script {}", src); + error!("error parsing URL for script {}", &**src); self.queue_error_event(); return NextParserState::Continue; } @@ -469,35 +468,42 @@ impl HTMLScriptElement { pub fn is_javascript(&self) -> bool { let element = ElementCast::from_ref(self); - match element.get_attribute(&ns!(""), &atom!("type")).map(|s| s.r().Value()) { + let type_attr = element.get_attribute(&ns!(""), &atom!("type")); + let is_js = match type_attr.as_ref().map(|s| s.value()) { Some(ref s) if s.is_empty() => { // type attr exists, but empty means js debug!("script type empty, inferring js"); true }, - Some(ref s) => { - debug!("script type={}", *s); + Some(s) => { + debug!("script type={}", &**s); SCRIPT_JS_MIMES.contains(&s.to_ascii_lowercase().trim_matches(HTML_SPACE_CHARACTERS)) }, None => { debug!("no script type"); - match element.get_attribute(&ns!(""), &atom!("language")) - .map(|s| s.r().Value()) { + let language_attr = element.get_attribute(&ns!(""), &atom!("language")); + let is_js = match language_attr.as_ref().map(|s| s.value()) { Some(ref s) if s.is_empty() => { debug!("script language empty, inferring js"); true }, - Some(ref s) => { - debug!("script language={}", *s); - SCRIPT_JS_MIMES.contains(&&*format!("text/{}", s).to_ascii_lowercase()) + Some(s) => { + debug!("script language={}", &**s); + let mut language = format!("text/{}", &**s); + language.make_ascii_lowercase(); + SCRIPT_JS_MIMES.contains(&&*language) }, None => { debug!("no script type or language, inferring js"); true } - } + }; + // https://github.com/rust-lang/rust/issues/21114 + is_js } - } + }; + // https://github.com/rust-lang/rust/issues/21114 + is_js } pub fn mark_already_started(&self) { @@ -526,13 +532,17 @@ impl VirtualMethods for HTMLScriptElement { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, attr: &Attr) { - if let Some(ref s) = self.super_type() { - s.after_set_attr(attr); - } - let node = NodeCast::from_ref(self); - if attr.local_name() == &atom!("src") && !self.parser_inserted.get() && node.is_in_doc() { - self.prepare(); + fn attribute_mutated(&self, attr: &Attr, mutation: AttributeMutation) { + self.super_type().unwrap().attribute_mutated(attr, mutation); + match attr.local_name() { + &atom!("src") => { + if let AttributeMutation::Set(_) = mutation { + if !self.parser_inserted.get() && NodeCast::from_ref(self).is_in_doc() { + self.prepare(); + } + } + }, + _ => {}, } } |