From a95c1e27e84e460b620a9b4d5f0448ba36012ec2 Mon Sep 17 00:00:00 2001 From: "tor%cs.brown.edu" Date: Wed, 2 Nov 2005 07:42:32 +0000 Subject: [PATCH] Bug 235826 - implementation. Patch by alex@croczilla.com, r=sicking, sr=jst --- content/xslt/src/xslt/txMozillaXMLOutput.cpp | 25 +++++++++++++++----- content/xslt/src/xslt/txMozillaXMLOutput.h | 4 ++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/content/xslt/src/xslt/txMozillaXMLOutput.cpp b/content/xslt/src/xslt/txMozillaXMLOutput.cpp index 3cbce6fc780..8e76e7bc113 100644 --- a/content/xslt/src/xslt/txMozillaXMLOutput.cpp +++ b/content/xslt/src/xslt/txMozillaXMLOutput.cpp @@ -49,7 +49,7 @@ #include "nsIDOMProcessingInstruction.h" #include "nsIDOMText.h" #include "nsIDOMHTMLTableSectionElem.h" -#include "nsIDOMHTMLScriptElement.h" +#include "nsIScriptElement.h" #include "nsIDOMNSDocument.h" #include "nsIParser.h" #include "nsIRefreshURI.h" @@ -264,6 +264,15 @@ void txMozillaXMLOutput::endElement(const nsAString& aName, const PRInt32 aNsID) endHTMLElement(element); } + // Handle svg script elements + if (aNsID == kNameSpaceID_SVG && txHTMLAtoms::script->Equals(aName)) { + // Add this script element to the array of loading script elements. + nsCOMPtr scriptElement = + do_QueryInterface(mCurrentNode); + NS_ASSERTION(scriptElement, "Need script element"); + mNotifier->AddScriptElement(scriptElement); + } + if (mCreatingNewDocument) { // Handle all sorts of stylesheets nsCOMPtr ssle = @@ -428,8 +437,12 @@ void txMozillaXMLOutput::startElement(const nsAString& aName, return; } - if (aNsID == kNameSpaceID_XHTML) + if (aNsID == kNameSpaceID_XHTML) { startHTMLElement(element, PR_TRUE); + } else if (aNsID == kNameSpaceID_SVG && + txHTMLAtoms::script->Equals(aName)) { + mDontAddCurrent = PR_TRUE; + } } if (mCreatingNewDocument) { @@ -619,7 +632,7 @@ void txMozillaXMLOutput::endHTMLElement(nsIDOMElement* aElement) // Load scripts if (mNotifier && atom == txHTMLAtoms::script) { // Add this script element to the array of loading script elements. - nsCOMPtr scriptElement = + nsCOMPtr scriptElement = do_QueryInterface(mCurrentNode); NS_ASSERTION(scriptElement, "Need script element"); mNotifier->AddScriptElement(scriptElement); @@ -816,7 +829,7 @@ NS_IMPL_ISUPPORTS2(txTransformNotifier, NS_IMETHODIMP txTransformNotifier::ScriptAvailable(nsresult aResult, - nsIDOMHTMLScriptElement *aElement, + nsIScriptElement *aElement, PRBool aIsInline, PRBool aWasPending, nsIURI *aURI, @@ -833,7 +846,7 @@ txTransformNotifier::ScriptAvailable(nsresult aResult, NS_IMETHODIMP txTransformNotifier::ScriptEvaluated(nsresult aResult, - nsIDOMHTMLScriptElement *aElement, + nsIScriptElement *aElement, PRBool aIsInline, PRBool aWasPending) { @@ -864,7 +877,7 @@ txTransformNotifier::Init(nsITransformObserver* aObserver) } void -txTransformNotifier::AddScriptElement(nsIDOMHTMLScriptElement* aElement) +txTransformNotifier::AddScriptElement(nsIScriptElement* aElement) { mScriptElements.AppendObject(aElement); } diff --git a/content/xslt/src/xslt/txMozillaXMLOutput.h b/content/xslt/src/xslt/txMozillaXMLOutput.h index eb00e8fc982..2b8769f468c 100644 --- a/content/xslt/src/xslt/txMozillaXMLOutput.h +++ b/content/xslt/src/xslt/txMozillaXMLOutput.h @@ -70,7 +70,7 @@ public: NS_IMETHOD StyleSheetLoaded(nsICSSStyleSheet* aSheet, PRBool aNotify); void Init(nsITransformObserver* aObserver); - void AddScriptElement(nsIDOMHTMLScriptElement* aElement); + void AddScriptElement(nsIScriptElement* aElement); void AddStyleSheet(nsIStyleSheet* aStyleSheet); void OnTransformEnd(); void OnTransformStart(); @@ -81,7 +81,7 @@ private: nsCOMPtr mDocument; nsCOMPtr mObserver; - nsCOMArray mScriptElements; + nsCOMArray mScriptElements; nsCOMArray mStylesheets; PRPackedBool mInTransform; };