Closed Bug 278211 Opened 20 years ago Closed 20 years ago

Implement <insert> and <delete>

Categories

(Core Graveyard :: XForms, defect)

defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: allan, Assigned: allan)

References

()

Details

Attachments

(2 files, 2 obsolete files)

 
When hooking this up, please generate the xforms-insert and xforms-delete events
to the xforms:instance element if you think about it.
Status: NEW → ASSIGNED
Attached patch Patch (obsolete) — Splinter Review
It does not support repeat-index, as it 1) depends on bug 278209 and 2) will be
a pain to implement. New bug for that.

It also needs to set the context info for the events, but that's what bug
280423 is for.
Attachment #172896 - Flags: review?(smaug)
Attached file Showcase
Comment on attachment 172896 [details] [diff] [review]
Patch

>+  nsCOMPtr<nsIDOMXPathResult> nodeset;
>+  rv = nsXFormsUtils::EvaluateNodeBinding(mElement,
>+                                          0,
>+                                          NS_LITERAL_STRING("nodeset"),
>+                                          EmptyString(),
>+                                          nsIDOMXPathResult::ORDERED_NODE_SNAPSHOT_TYPE,
>+
>+                                          getter_AddRefs(model),
Remove that extra newline.


>+    /// @bug This is not correct, the spec says that it should be treated like
>+    /// 'round(@at)' (XXX)
So why not implement this now?


>+  nsCOMPtr<nsIDOMNode> newNode;
>+  prototype->CloneNode(PR_TRUE, getter_AddRefs(newNode));
>+  NS_ENSURE_STATE(newNode);
No need to clone if mIsInsert==PR_FALSE


>+  // Dispatch refreshing events to the model
>+  if (aParentAction) {
>+    aParentAction->SetRecalculate(modelElem, PR_TRUE);
>+    aParentAction->SetRevalidate(modelElem, PR_TRUE);
>+    aParentAction->SetRefresh(modelElem, PR_TRUE);
Set rebuild flag too:
see http://www.w3.org/TR/xforms/slice10.html#action-action


>+    nsXFormsUtils::DispatchEvent(modelElem, eEvent_Recalculate);
>+    nsXFormsUtils::DispatchEvent(modelElem, eEvent_Revalidate);
>+    nsXFormsUtils::DispatchEvent(modelElem, eEvent_Refresh);
Dispatch rebuild too (?)

With those r=me
Attachment #172896 - Flags: review?(smaug) → review+
(In reply to comment #4)
> (From update of attachment 172896 [details] [diff] [review] [edit])
> >+    /// @bug This is not correct, the spec says that it should be treated like
> >+    /// 'round(@at)' (XXX)
> So why not implement this now?

Mighty good question Mr. Pettay :) The answer: I forgot... I wanted to ask David
whether <setindex> should round() its @index too. That's unknown for now. I've
implemented it for insert/delete now.
Attached patch Fixed smaug's comments (obsolete) — Splinter Review
Since I'm now also dispatching xforms-rebuild, I've had to comment out
mMDG.Rebuild() in the model, since it's non-functioning until bug 279957 is
landed.
Attachment #172896 - Attachment is obsolete: true
Attachment #172938 - Flags: superreview?(bryner)
... and fixed yet another slip wrt 279957
Attachment #172938 - Attachment is obsolete: true
Attachment #173066 - Flags: superreview?(bryner)
Attachment #172938 - Flags: superreview?(bryner)
Comment on attachment 173066 [details] [diff] [review]
Updated to current CVS

>--- xforms/nsXFormsInsertDeleteElement.cpp	1970-01-01 01:00:00.000000000 +0100
>+++ xforms.insertdelete/nsXFormsInsertDeleteElement.cpp	2005-02-01 13:48:51.871606160 +0100
>+ * Portions created by the Initial Developer are Copyright (C) 2004

2005

>+/**
>+ * Implementation of the XForms \<insert\> and \<delete\> elements.
>+ *
>+ * @see http://www.w3.org/TR/xforms/slice9.html#action-insert
>+ *
>+ * @todo The spec. says that the events must their Context Info to:

There seems to be a word missing between "must" and "their".

>+ * "Path expression used for insert/delete (xsd:string)" (XXX)
>+ * @see http://www.w3.org/TR/xforms/slice4.html#evt-insert
>+ * @see https://bugzilla.mozilla.org/show_bug.cgi?id=280423
>+ *
>+ * @todo Any \<repeat\> elements needs to set their repeat-indexes properly if

s/needs/need/

>+    // Make casting act as round()
>+    atDoub += 0.5;
>+    /// @todo Isn't there a better (Mozilla) way of doing this conversion?
>+    /// (XXX)
>+    atInt = (PRUint32) atDoub;

You could do floor(atDoub + 0.5), we use that construct in other places.

>+  }
>+  if (!atInt || atInt > setSize)
>+    atInt = setSize;
>+  
>+
>+  //
>+  // 3) Get @position (if \<insert\>)
>+  nsString position;

nsAutoString

Looks ok otherwise.
Attachment #173066 - Flags: superreview?(bryner) → superreview+
Fixed Brian's comments and checked in.
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: