compareDocumentPosition confuses knockout 2.2.1 - remove it and let knockout check if a node is inside a DOM itself by iteration of parents
1.1 --- a/boot-script/src/test/resources/net/java/html/boot/script/ko4j/env.nashorn.1.2-debug.js Wed Jun 04 15:18:05 2014 +0200
1.2 +++ b/boot-script/src/test/resources/net/java/html/boot/script/ko4j/env.nashorn.1.2-debug.js Wed Jun 04 16:07:43 2014 +0200
1.3 @@ -2846,78 +2846,6 @@
1.4 }
1.5 return !!node;
1.6 },
1.7 - compareDocumentPosition : function(b){
1.8 - //console.log("comparing document position %s %s", this, b);
1.9 - var i,
1.10 - length,
1.11 - a = this,
1.12 - parent,
1.13 - aparents,
1.14 - bparents;
1.15 - //handle a couple simpler case first
1.16 - if(a === b) {
1.17 - return Node.DOCUMENT_POSITION_EQUAL;
1.18 - }
1.19 - if(a.ownerDocument !== b.ownerDocument) {
1.20 - return Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC|
1.21 - Node.DOCUMENT_POSITION_FOLLOWING|
1.22 - Node.DOCUMENT_POSITION_DISCONNECTED;
1.23 - }
1.24 - if(a.parentNode === b.parentNode){
1.25 - length = a.parentNode.childNodes.length;
1.26 - for(i=0;i<length;i++){
1.27 - if(a.parentNode.childNodes[i] === a){
1.28 - return Node.DOCUMENT_POSITION_FOLLOWING;
1.29 - }else if(a.parentNode.childNodes[i] === b){
1.30 - return Node.DOCUMENT_POSITION_PRECEDING;
1.31 - }
1.32 - }
1.33 - }
1.34 -
1.35 - if(a.contains(b)) {
1.36 - return Node.DOCUMENT_POSITION_CONTAINED_BY|
1.37 - Node.DOCUMENT_POSITION_FOLLOWING;
1.38 - }
1.39 - if(b.contains(a)) {
1.40 - return Node.DOCUMENT_POSITION_CONTAINS|
1.41 - Node.DOCUMENT_POSITION_PRECEDING;
1.42 - }
1.43 - aparents = [];
1.44 - parent = a.parentNode;
1.45 - while(parent){
1.46 - aparents[aparents.length] = parent;
1.47 - parent = parent.parentNode;
1.48 - }
1.49 -
1.50 - bparents = [];
1.51 - parent = b.parentNode;
1.52 - while(parent){
1.53 - i = aparents.indexOf(parent);
1.54 - if(i < 0){
1.55 - bparents[bparents.length] = parent;
1.56 - parent = parent.parentNode;
1.57 - }else{
1.58 - //i cant be 0 since we already checked for equal parentNode
1.59 - if(bparents.length > aparents.length){
1.60 - return Node.DOCUMENT_POSITION_FOLLOWING;
1.61 - }else if(bparents.length < aparents.length){
1.62 - return Node.DOCUMENT_POSITION_PRECEDING;
1.63 - }else{
1.64 - //common ancestor diverge point
1.65 - if (i === 0) {
1.66 - return Node.DOCUMENT_POSITION_FOLLOWING;
1.67 - } else {
1.68 - parent = aparents[i-1];
1.69 - }
1.70 - return parent.compareDocumentPosition(bparents.pop());
1.71 - }
1.72 - }
1.73 - }
1.74 -
1.75 - return Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC|
1.76 - Node.DOCUMENT_POSITION_DISCONNECTED;
1.77 -
1.78 - },
1.79 toString : function() {
1.80 return '[object Node]';
1.81 }