From ba67c0475dee09c3e1584c36d1e4ae40dc8a1f6f Mon Sep 17 00:00:00 2001 From: "allan%beaufour.dk" Date: Wed, 16 Nov 2005 06:49:37 +0000 Subject: [PATCH] [XForms] XPath expressions using namespaces inside repeats generate error messages. Bug 312848, r=aaronr+smaug git-svn-id: svn://10.0.0.236/trunk@184751 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xforms/nsXFormsRepeatElement.cpp | 18 ++++++++---------- mozilla/extensions/xforms/nsXFormsUtils.cpp | 4 ---- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/mozilla/extensions/xforms/nsXFormsRepeatElement.cpp b/mozilla/extensions/xforms/nsXFormsRepeatElement.cpp index ad8199884f1..9fcf2483956 100644 --- a/mozilla/extensions/xforms/nsXFormsRepeatElement.cpp +++ b/mozilla/extensions/xforms/nsXFormsRepeatElement.cpp @@ -773,11 +773,19 @@ nsXFormsRepeatElement::Refresh() rv = riContext->SetContext(contextNode, i, contextSize); NS_ENSURE_SUCCESS(rv, rv); + // We need to insert the context node before adding the children, or the + // children will fail to set up their proper XForms context. + nsCOMPtr domNode; + rv = mHTMLElement->AppendChild(riElement, getter_AddRefs(domNode)); + NS_ENSURE_SUCCESS(rv, rv); + // Iterate over template children, clone them, and append them to nsCOMPtr child; rv = mElement->GetFirstChild(getter_AddRefs(child)); NS_ENSURE_SUCCESS(rv, rv); while (child) { + /// XXX the node probably refreshes itself twice here, once on cloning + /// and once when it's inserted ... that's not necessary. nsCOMPtr childClone; rv = CloneNode(child, getter_AddRefs(childClone)); NS_ENSURE_SUCCESS(rv, rv); @@ -790,16 +798,6 @@ nsXFormsRepeatElement::Refresh() NS_ENSURE_SUCCESS(rv, rv); child = newNode; } - - // Append node - nsCOMPtr domNode; - rv = mHTMLElement->AppendChild(riElement, getter_AddRefs(domNode)); - NS_ENSURE_SUCCESS(rv, rv); - - // There is an awfull lot of evaluating being done by all the - // children, as they are created and inserted into the different - // places in the DOM, the only refresh necessary is the one when they - // are appended in mHTMLElement. } if (!mParent && !mCurrentIndex && mMaxIndex) { diff --git a/mozilla/extensions/xforms/nsXFormsUtils.cpp b/mozilla/extensions/xforms/nsXFormsUtils.cpp index b988899924b..54769e5ac79 100644 --- a/mozilla/extensions/xforms/nsXFormsUtils.cpp +++ b/mozilla/extensions/xforms/nsXFormsUtils.cpp @@ -391,10 +391,6 @@ nsXFormsUtils::EvaluateXPath(const nsAString &aExpression, nsCOMArray *aSet, nsStringArray *aIndexesUsed) { - nsCOMPtr doc; - aContextNode->GetOwnerDocument(getter_AddRefs(doc)); - NS_ENSURE_TRUE(doc, nsnull); - nsCOMPtr eval = do_CreateInstance("@mozilla.org/dom/xforms-xpath-evaluator;1"); NS_ENSURE_TRUE(eval, nsnull);