Skip to content

Commit e6ca77f

Browse files
Implement option-pop cloning hook in all tree builders
Add necessary corresponding implementations to the other tree builders that construct persistent trees: - DOMTreeBuilder: uses the DOM cloneNode method for deep cloning - XOMTreeBuilder: uses XOM’s Node.copy() for deep cloning - BrowserTreeBuilder: uses the existing cloneNodeDeep method
1 parent 9fc27b8 commit e6ca77f

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

gwt-src/nu/validator/htmlparser/gwt/BrowserTreeBuilder.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,4 +474,21 @@ private static native void removeChild(JavaScriptObject parent,
474474
fatal(e);
475475
}
476476
}
477+
478+
@Override
479+
protected void cloneOptionContentToSelectedContent(
480+
JavaScriptObject option, JavaScriptObject selectedContent)
481+
throws SAXException {
482+
try {
483+
while (hasChildNodes(selectedContent)) {
484+
removeChild(selectedContent, getFirstChild(selectedContent));
485+
}
486+
JavaScriptObject clone = cloneNodeDeep(option);
487+
while (hasChildNodes(clone)) {
488+
appendChild(selectedContent, getFirstChild(clone));
489+
}
490+
} catch (JavaScriptException e) {
491+
fatal(e);
492+
}
493+
}
477494
}

src/nu/validator/htmlparser/dom/DOMTreeBuilder.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,4 +354,21 @@ protected Element createAndInsertFosterParentedElement(String ns, String name,
354354
fatal(e);
355355
}
356356
}
357+
358+
@Override
359+
protected void cloneOptionContentToSelectedContent(Element option,
360+
Element selectedContent) throws SAXException {
361+
try {
362+
while (selectedContent.hasChildNodes()) {
363+
selectedContent.removeChild(selectedContent.getFirstChild());
364+
}
365+
Node child = option.getFirstChild();
366+
while (child != null) {
367+
selectedContent.appendChild(child.cloneNode(true));
368+
child = child.getNextSibling();
369+
}
370+
} catch (DOMException e) {
371+
fatal(e);
372+
}
373+
}
357374
}

src/nu/validator/htmlparser/xom/XOMTreeBuilder.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,4 +348,17 @@ private int indexOfTable(Element table, Element stackParent) {
348348
cachedTableIndex = -1;
349349
cachedTable = null;
350350
}
351+
352+
@Override
353+
protected void cloneOptionContentToSelectedContent(Element option,
354+
Element selectedContent) throws SAXException {
355+
try {
356+
selectedContent.removeChildren();
357+
for (int i = 0; i < option.getChildCount(); i++) {
358+
selectedContent.appendChild(option.getChild(i).copy());
359+
}
360+
} catch (XMLException e) {
361+
fatal(e);
362+
}
363+
}
351364
}

0 commit comments

Comments
 (0)