[Bug 19555] New: Node.getDocumentPosition should return 0x23 or 0x25 for disconnected nodes, not 0x01

https://www.w3.org/Bugs/Public/show_bug.cgi?id=19555

          Priority: P2
            Bug ID: 19555
                CC: bzbarsky@mit.edu, mike@w3.org, Ms2ger@gmail.com,
                    www-dom@w3.org
          Assignee: annevk@annevk.nl
            Blocks: 13044
           Summary: Node.getDocumentPosition should return 0x23 or 0x25
                    for disconnected nodes, not 0x01
        QA Contact: public-webapps-bugzilla@w3.org
          Severity: normal
    Classification: Unclassified
                OS: All
          Reporter: ayg@aryeh.name
          Hardware: All
            Status: NEW
           Version: unspecified
         Component: DOM
           Product: WebAppsWG

See discussion here:

https://bugzilla.mozilla.org/show_bug.cgi?id=486002

IE, Firefox, and Opera all implement the DOM Level 3 Core spec.  That means
that for any two given disconnected nodes, they'll return either

  Node.DOCUMENT_POSITION_DISCONNECTED |
  Node.DOCUMENT_POSITION_PRECEDING |
  Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC

or

  Node.DOCUMENT_POSITION_DISCONNECTED |
  Node.DOCUMENT_POSITION_FOLLOWING |
  Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC

consistently, as long as each one's root node has no parent.  (In practice,
Gecko does a pointer comparison between pointers to the root nodes, where the
pointer used is unique and stable for any given node.  Probably IE/Opera are
similar.)

This is meant to be used for sorting arbitrary lists of nodes uniquely.  In
fact, jQuery exposes a function that does exactly that.  But the current spec
says to just return 0x01, which very well might break jQuery.  jQuery relies on
the sort being a total order because it passes a function based on it to JS'
.sort() method, which has undefined behavior for bogus sort functions.

In practice, the method is horrible enough (bitfields in JS!) that I don't
think it's worth making it prettier.  I say we should just spec it like DOM
Level 3 Core.  People can use .contains(), and we could add
.isBefore()/.isAfter() methods to round it out if we want.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Received on Tuesday, 16 October 2012 15:21:11 UTC