repairing

This commit is contained in:
Danny Yoo 2011-09-06 18:12:47 -04:00
parent 8465e0ca95
commit de1843bc78

View File

@ -41,29 +41,41 @@
// domNode_to_tree: dom -> dom-tree
// Given a native dom node, produces the appropriate tree.
var domNode_to_tree = function(domNode) {
var result = [domNode];
//////////////////////////////////////////////////////////////////////
// domNodeToArrayTree: dom -> dom-tree
// Given a native dom node, produces the appropriate array tree representation
var domNodeToArrayTree = function(domNode) {
var result = [domNode];
var c; var c;
for (c = domNode.firstChild; c !== null; c = c.nextSibling) { for (c = domNode.firstChild; c !== null; c = c.nextSibling) {
result.push(domNode_to_tree(c)); result.push(domNodeToArrayTree(c));
}
return result;
};
var tree_to_domNode = function(tree) {
var result = tree[0].cloneNode(true);
var i;
for (i = 1; i < tree.length; i++) {
result.appendChild(tree_to_domNode(tree[i]));
} }
return result; return result;
}; };
var domToCursor = function(dom) { var arrayTreeToDomNode = function(tree) {
var result = tree[0].cloneNode(false);
var i;
for (i = 1; i < tree.length; i++) {
result.appendChild(arrayTreeToDomNode(tree[i]));
}
return result;
};
var domToArrayTreeCursor = function(dom) {
var domOpenF = var domOpenF =
// To go down, just take the children. // To go down, just take the children.
function(tree) { function(tree) {
@ -78,16 +90,28 @@
function(tree) { function(tree) {
return tree[0].nodeType !== 1; return tree[0].nodeType !== 1;
}; };
return TreeCursor.adaptTreeCursor(domNode_to_tree(dom.cloneNode(true)), return TreeCursor.adaptTreeCursor(domNodeToArrayTree(dom.cloneNode(true)),
domOpenF, domOpenF,
domCloseF, domCloseF,
domAtomicF); domAtomicF);
}; };
var treeText = function(tree) {
var text = [];
var visit = function(tree) {
var i;
if (tree[0].nodeType === 3) {
text.push(tree[0].nodeValue);
}
for (i = 1; i < tree.length; i++) {
visit(tree[i]);
}
};
visit(tree);
return text.join('');
};
//////////////////////////////////////////////////////////////////////
@ -149,18 +173,7 @@
MockView.prototype.getText = function() { MockView.prototype.getText = function() {
var tree = this.cursor.node; var tree = this.cursor.node;
var text = []; return treeText(tree);
var visit = function(tree) {
var i;
if (tree[0].nodeType === 3) {
text.push(tree[0].nodeValue);
}
for (i = 1; i < tree.length; i++) {
visit(tree[i]);
}
};
visit(tree);
return text.join('');
}; };
MockView.prototype.updateText = function(text) { MockView.prototype.updateText = function(text) {
@ -476,7 +489,7 @@
View.prototype.getMockAndResetFocus = function(nonce) { View.prototype.getMockAndResetFocus = function(nonce) {
this.focus = this.top; this.focus = this.top;
return new MockView(domToCursor($(this.top).get(0)), return new MockView(domToArrayTreeCursor($(this.top).get(0)),
[], [],
this.eventHandlers.slice(0), this.eventHandlers.slice(0),
nonce); nonce);
@ -522,7 +535,7 @@
} }
return onSuccess(new View(dom, [])); return onSuccess(new View(dom, []));
} else if (isMockView(x)) { } else if (isMockView(x)) {
return onSuccess(new View($(tree_to_domNode(x.cursor.top().node)), return onSuccess(new View($(arrayTreeToDomNode(x.cursor.top().node)),
x.eventHandlers.slice(0))); x.eventHandlers.slice(0)));
} else { } else {
try { try {
@ -548,14 +561,14 @@
} catch (exn1) { } catch (exn1) {
return onFail(exn1); return onFail(exn1);
} }
return onSuccess(new MockView(domToCursor(dom.get(0)), [], [], undefined)); return onSuccess(new MockView(domToArrayTreeCursor(dom.get(0)), [], [], undefined));
} else { } else {
try { try {
dom = $(plt.baselib.format.toDomNode(x)); dom = $(plt.baselib.format.toDomNode(x));
} catch (exn2) { } catch (exn2) {
return onFail(exn2); return onFail(exn2);
} }
return onSuccess(new MockView(domToCursor(dom.get(0)), [], [], undefined)); return onSuccess(new MockView(domToArrayTreeCursor(dom.get(0)), [], [], undefined));
} }
}; };
@ -581,7 +594,7 @@
} }
return onSuccess(dom.get(0)); return onSuccess(dom.get(0));
} else if (isMockView(x)) { } else if (isMockView(x)) {
return onSuccess(tree_to_domNode(x.cursor.top().node)); return onSuccess(arrayTreeToDomNode(x.cursor.top().node));
} else { } else {
try { try {
dom = plt.baselib.format.toDomNode(x); dom = plt.baselib.format.toDomNode(x);
@ -1127,7 +1140,7 @@
actions[i](view); actions[i](view);
} }
} else { } else {
view.top = $(tree_to_domNode(newMockView.cursor.top().node)); view.top = $(arrayTreeToDomNode(newMockView.cursor.top().node));
view.initialRender(top); view.initialRender(top);
eventHandlers = newMockView.eventHandlers.slice(0); eventHandlers = newMockView.eventHandlers.slice(0);
view.eventHandlers = eventHandlers; view.eventHandlers = eventHandlers;