Bug 209133

Make |Node| from script recognize constants defined in nsIDOM3Node.
Move DOM3 constants over to nsIDOM3Node.
Update the names and values to reflect the latest draft of the DOM 3 Core (Last Call)

r=timeless sr=jst
This commit is contained in:
caillon%returnzero.com 2003-06-12 02:54:16 +00:00
parent 3ed661ebcd
commit c0d2e93d73
10 changed files with 57 additions and 56 deletions

View File

@ -677,7 +677,7 @@ nsContentList::ContentAppended(nsIDocument *aDocument, nsIContent* aContainer,
nsresult rv =
ourLastDOM3Node->CompareDocumentPosition(newNode, &comparisonFlags);
if (NS_SUCCEEDED(rv) &&
(comparisonFlags & nsIDOMNode::DOCUMENT_POSITION_FOLLOWING)) {
(comparisonFlags & nsIDOM3Node::DOCUMENT_POSITION_FOLLOWING)) {
appendToList = PR_TRUE;
}
}

View File

@ -1153,8 +1153,8 @@ nsContentUtils::ComparePositionWithAncestors(nsIDOMNode *aNode,
// If there is no common container node, then the order is based upon
// order between the root container of each node that is in no container.
// In this case, the result is disconnected and implementation-dependent.
mask = (nsIDOMNode::DOCUMENT_POSITION_DISCONNECTED |
nsIDOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
mask = (nsIDOM3Node::DOCUMENT_POSITION_DISCONNECTED |
nsIDOM3Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
return mask;
}
@ -1162,15 +1162,15 @@ nsContentUtils::ComparePositionWithAncestors(nsIDOMNode *aNode,
nsIDOMNode* commonAncestor = nodeAncestors[0];
if (commonAncestor == aNode) {
mask = (nsIDOMNode::DOCUMENT_POSITION_IS_CONTAINED |
nsIDOMNode::DOCUMENT_POSITION_FOLLOWING);
mask = (nsIDOM3Node::DOCUMENT_POSITION_CONTAINED_BY |
nsIDOM3Node::DOCUMENT_POSITION_FOLLOWING);
return mask;
}
if (commonAncestor == aOther) {
mask |= (nsIDOMNode::DOCUMENT_POSITION_CONTAINS |
nsIDOMNode::DOCUMENT_POSITION_PRECEDING);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_CONTAINS |
nsIDOM3Node::DOCUMENT_POSITION_PRECEDING);
return mask;
}
@ -1198,12 +1198,12 @@ nsContentUtils::ComparePositionWithAncestors(nsIDOMNode *aNode,
nsCOMPtr<nsIDOMNode> childNode;
children->Item(i, getter_AddRefs(childNode));
if (childNode == nodeAncestor) {
mask |= nsIDOMNode::DOCUMENT_POSITION_FOLLOWING;
mask |= nsIDOM3Node::DOCUMENT_POSITION_FOLLOWING;
break;
}
if (childNode == otherAncestor) {
mask |= nsIDOMNode::DOCUMENT_POSITION_PRECEDING;
mask |= nsIDOM3Node::DOCUMENT_POSITION_PRECEDING;
break;
}
}
@ -1218,23 +1218,23 @@ nsContentUtils::ReverseDocumentPosition(PRUint16 aDocumentPosition)
// Disconnected and implementation-specific flags cannot be reversed.
// Keep them.
PRUint16 reversedPosition =
aDocumentPosition & (nsIDOMNode::DOCUMENT_POSITION_DISCONNECTED |
nsIDOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
aDocumentPosition & (nsIDOM3Node::DOCUMENT_POSITION_DISCONNECTED |
nsIDOM3Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
// Following/preceding
if (aDocumentPosition & nsIDOMNode::DOCUMENT_POSITION_FOLLOWING) {
reversedPosition |= nsIDOMNode::DOCUMENT_POSITION_PRECEDING;
if (aDocumentPosition & nsIDOM3Node::DOCUMENT_POSITION_FOLLOWING) {
reversedPosition |= nsIDOM3Node::DOCUMENT_POSITION_PRECEDING;
}
else if (aDocumentPosition & nsIDOMNode::DOCUMENT_POSITION_PRECEDING) {
reversedPosition |= nsIDOMNode::DOCUMENT_POSITION_FOLLOWING;
else if (aDocumentPosition & nsIDOM3Node::DOCUMENT_POSITION_PRECEDING) {
reversedPosition |= nsIDOM3Node::DOCUMENT_POSITION_FOLLOWING;
}
// Is contained/contains.
if (aDocumentPosition & nsIDOMNode::DOCUMENT_POSITION_CONTAINS) {
reversedPosition |= nsIDOMNode::DOCUMENT_POSITION_IS_CONTAINED;
if (aDocumentPosition & nsIDOM3Node::DOCUMENT_POSITION_CONTAINS) {
reversedPosition |= nsIDOM3Node::DOCUMENT_POSITION_CONTAINED_BY;
}
else if (aDocumentPosition & nsIDOMNode::DOCUMENT_POSITION_IS_CONTAINED) {
reversedPosition |= nsIDOMNode::DOCUMENT_POSITION_CONTAINS;
else if (aDocumentPosition & nsIDOM3Node::DOCUMENT_POSITION_CONTAINED_BY) {
reversedPosition |= nsIDOM3Node::DOCUMENT_POSITION_CONTAINS;
}
return reversedPosition;

View File

@ -516,8 +516,8 @@ nsDOMAttribute::CompareDocumentPosition(nsIDOMNode* aOther,
// then based upon order between the root container of each node that
// is in no container. In this case, the result is disconnected
// and implementation-dependent.
mask |= (nsIDOMNode::DOCUMENT_POSITION_DISCONNECTED |
nsIDOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_DISCONNECTED |
nsIDOM3Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
*aReturn = mask;
@ -539,7 +539,7 @@ nsDOMAttribute::CompareDocumentPosition(nsIDOMNode* aOther,
// nodeType is the same for both determining nodes, then an
// implementation-dependent order between the determining nodes
// is returned.
mask |= nsIDOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
mask |= nsIDOM3Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
}
// If the two nodes being compared are the same node,
@ -580,8 +580,8 @@ nsDOMAttribute::CompareDocumentPosition(nsIDOMNode* aOther,
// Throw a party! Celebrate by returning that it is contained
// and following this node.
mask |= (nsIDOMNode::DOCUMENT_POSITION_IS_CONTAINED |
nsIDOMNode::DOCUMENT_POSITION_FOLLOWING);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_CONTAINED_BY |
nsIDOM3Node::DOCUMENT_POSITION_FOLLOWING);
*aReturn = mask;
return NS_OK;
@ -599,8 +599,8 @@ nsDOMAttribute::CompareDocumentPosition(nsIDOMNode* aOther,
parent->IsSameNode(aOther, &sameNode);
if (sameNode) {
// If the other node contains us, then it precedes us.
mask |= (nsIDOMNode::DOCUMENT_POSITION_CONTAINS |
nsIDOMNode::DOCUMENT_POSITION_PRECEDING);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_CONTAINS |
nsIDOM3Node::DOCUMENT_POSITION_PRECEDING);
*aReturn = mask;
return NS_OK;
@ -612,7 +612,7 @@ nsDOMAttribute::CompareDocumentPosition(nsIDOMNode* aOther,
// We already established earlier that the node is not contained
// by this attribute. So if it is contained by our owner element,
// unset the flag.
mask |= parentMask & ~nsIDOMNode::DOCUMENT_POSITION_IS_CONTAINED;
mask |= parentMask & ~nsIDOM3Node::DOCUMENT_POSITION_CONTAINED_BY;
*aReturn = mask;
return NS_OK;

View File

@ -3451,8 +3451,8 @@ nsDocument::CompareDocumentPosition(nsIDOMNode* aOther, PRUint16* aReturn)
// is based upon order between the root container of each
// node that is in no container. In this case, the result
// is disconnected and implementation-dependent.
mask |= (nsIDOMNode::DOCUMENT_POSITION_DISCONNECTED |
nsIDOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_DISCONNECTED |
nsIDOM3Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
*aReturn = mask;
return NS_OK;
@ -3463,16 +3463,16 @@ nsDocument::CompareDocumentPosition(nsIDOMNode* aOther, PRUint16* aReturn)
if (this == otherDoc) {
// If the node being compared is contained by our node,
// then it follows it.
mask |= (nsIDOMNode::DOCUMENT_POSITION_IS_CONTAINED |
nsIDOMNode::DOCUMENT_POSITION_FOLLOWING);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_CONTAINED_BY |
nsIDOM3Node::DOCUMENT_POSITION_FOLLOWING);
}
else {
// If there is no common container node, then the order
// is based upon order between the root container of each
// node that is in no container. In this case, the result
// is disconnected and implementation-dependent.
mask |= (nsIDOMNode::DOCUMENT_POSITION_DISCONNECTED |
nsIDOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_DISCONNECTED |
nsIDOM3Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
}
*aReturn = mask;

View File

@ -413,8 +413,8 @@ nsDocumentFragment::CompareDocumentPosition(nsIDOMNode* aOther,
// is based upon order between the root container of each
// node that is in no container. In this case, the result
// is disconnected and implementation-dependent.
mask |= (nsIDOMNode::DOCUMENT_POSITION_DISCONNECTED |
nsIDOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_DISCONNECTED |
nsIDOM3Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);
break;
}
@ -429,8 +429,8 @@ nsDocumentFragment::CompareDocumentPosition(nsIDOMNode* aOther,
if (NS_STATIC_CAST(nsIDOMNode*, this) == other) {
// If the node being compared is contained by our node,
// then it follows it.
mask |= (nsIDOMNode::DOCUMENT_POSITION_IS_CONTAINED |
nsIDOMNode::DOCUMENT_POSITION_FOLLOWING);
mask |= (nsIDOM3Node::DOCUMENT_POSITION_CONTAINED_BY |
nsIDOM3Node::DOCUMENT_POSITION_FOLLOWING);
break;
}
} while (other);

View File

@ -1166,7 +1166,7 @@ CSSLoaderImpl::InsertSheetInDoc(nsICSSStyleSheet* aSheet,
rv = linkingNode->CompareDocumentPosition(sheetOwner, &comparisonFlags);
// If we can't get the order right, just bail...
NS_ENSURE_SUCCESS(rv, rv);
NS_ASSERTION(!(comparisonFlags & nsIDOMNode::DOCUMENT_POSITION_DISCONNECTED),
NS_ASSERTION(!(comparisonFlags & nsIDOM3Node::DOCUMENT_POSITION_DISCONNECTED),
"Why are these elements in different documents?");
#ifdef DEBUG
{
@ -1175,7 +1175,7 @@ CSSLoaderImpl::InsertSheetInDoc(nsICSSStyleSheet* aSheet,
NS_ASSERTION(!sameNode, "Why do we still have our old sheet?");
}
#endif // DEBUG
if (comparisonFlags & nsIDOMNode::DOCUMENT_POSITION_PRECEDING) {
if (comparisonFlags & nsIDOM3Node::DOCUMENT_POSITION_PRECEDING) {
// The current sheet comes before us, and it better be the first
// such, because now we break
break;

View File

@ -43,14 +43,17 @@
[scriptable, uuid(29fb2a18-1dd2-11b2-8dd9-a6fd5d5ad12f)]
interface nsIDOM3Node : nsISupports
{
// Introduced in DOM Level 3:
readonly attribute DOMString baseURI;
// Introduced in DOM Level 3:
unsigned short compareDocumentPosition(in nsIDOMNode other);
// Introduced in DOM Level 3:
boolean isSameNode(in nsIDOMNode other);
// Introduced in DOM Level 3:
DOMString lookupNamespacePrefix(in DOMString namespaceURI);
// Introduced in DOM Level 3:
DOMString lookupNamespaceURI(in DOMString prefix);
// DocumentPosition
const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
};

View File

@ -109,14 +109,4 @@ interface nsIDOMNode : nsISupports
readonly attribute DOMString localName;
// Introduced in DOM Level 2:
boolean hasAttributes();
// Introduced in DOM Level 3:
// DocumentPosition
// XXX actual constant values await w3c feedback
const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x20;
const unsigned short DOCUMENT_POSITION_PRECEDING = 0x01;
const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x02;
const unsigned short DOCUMENT_POSITION_CONTAINS = 0x04;
const unsigned short DOCUMENT_POSITION_IS_CONTAINED = 0x08;
const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x10;
};

View File

@ -3705,6 +3705,14 @@ nsWindowSH::GlobalResolve(nsISupports *native, JSContext *cx, JSObject *obj,
rv = DefineInterfaceConstants(cx, class_obj, primary_iid);
NS_ENSURE_SUCCESS(rv, rv);
// Special case for |Node|, which needs constants from Node3
// too for forwards compatibility.
if (primary_iid->Equals(NS_GET_IID(nsIDOMNode))) {
rv = DefineInterfaceConstants(cx, class_obj,
&NS_GET_IID(nsIDOM3Node));
NS_ENSURE_SUCCESS(rv, rv);
}
// Special case for |Event|, Event needs constants from NSEvent
// too for backwards compatibility.
if (primary_iid->Equals(NS_GET_IID(nsIDOMEvent))) {

View File

@ -1166,7 +1166,7 @@ CSSLoaderImpl::InsertSheetInDoc(nsICSSStyleSheet* aSheet,
rv = linkingNode->CompareDocumentPosition(sheetOwner, &comparisonFlags);
// If we can't get the order right, just bail...
NS_ENSURE_SUCCESS(rv, rv);
NS_ASSERTION(!(comparisonFlags & nsIDOMNode::DOCUMENT_POSITION_DISCONNECTED),
NS_ASSERTION(!(comparisonFlags & nsIDOM3Node::DOCUMENT_POSITION_DISCONNECTED),
"Why are these elements in different documents?");
#ifdef DEBUG
{
@ -1175,7 +1175,7 @@ CSSLoaderImpl::InsertSheetInDoc(nsICSSStyleSheet* aSheet,
NS_ASSERTION(!sameNode, "Why do we still have our old sheet?");
}
#endif // DEBUG
if (comparisonFlags & nsIDOMNode::DOCUMENT_POSITION_PRECEDING) {
if (comparisonFlags & nsIDOM3Node::DOCUMENT_POSITION_PRECEDING) {
// The current sheet comes before us, and it better be the first
// such, because now we break
break;