List of usage examples for com.google.gwt.dom.client Node replaceChild
@Override
public Node replaceChild(Node newChild, Node oldChild)
From source file:de.catma.ui.client.ui.tagger.editor.TaggerEditor.java
License:Open Source License
private void addTagInstance(SpanFactory spanFactory, Node startNode, int startOffset, Node endNode, int endOffset) { AffectedNodesFinder tw = new AffectedNodesFinder(getElement(), startNode, endNode); String startNodeText = startNode.getNodeValue(); Node startNodeParent = startNode.getParentNode(); String endNodeText = endNode.getNodeValue(); Node endNodeParent = endNode.getParentNode(); if (endNodeText == null) { // node is a non text node like line breaks VConsole.log("Found no text within the following node:"); DebugUtil.printNode(endNode);//from w ww . ja v a 2 s . c o m endNodeText = ""; } // the range of unmarked text at the beginning of the start node's text range int unmarkedStartSeqBeginIdx = 0; int unmarkedStartSeqEndIdx = startOffset; // the marked text range of the start node int markedStartSeqBeginIdx = startOffset; int markedStartSeqEndIdx = startNodeText.length(); // the range of umarked text at the end of the end node's text range int unmarkedEndSeqBeginIdx = endOffset; int unmarkedEndSeqEndIdx = endNodeText.length(); // the marked text range of the end node int markedEndSeqBeginIdx = 0; int markedEndSeqEndIdx = endOffset; // if start node and end node are in reverse order within the tree // we switch start/end of sequences accordingly if (!tw.isAfter()) { unmarkedStartSeqBeginIdx = startOffset; unmarkedStartSeqEndIdx = startNodeText.length(); markedStartSeqBeginIdx = 0; markedStartSeqEndIdx = startOffset; unmarkedEndSeqBeginIdx = 0; unmarkedEndSeqEndIdx = endOffset; markedEndSeqBeginIdx = endOffset; markedEndSeqEndIdx = endNodeText.length(); } // a text node for the unmarked start Text unmarkedStartSeq = Document.get() .createTextNode(startNodeText.substring(unmarkedStartSeqBeginIdx, unmarkedStartSeqEndIdx)); // get a tagged span for the tagged sequence of the starting node Element taggedSpan = spanFactory .createTaggedSpan(startNodeText.substring(markedStartSeqBeginIdx, markedStartSeqEndIdx)); if (tw.isAfter()) { // insert unmarked text seqence before the old node startNodeParent.insertBefore(unmarkedStartSeq, startNode); // insert tagged spans before the old node startNodeParent.insertBefore(taggedSpan, startNode); // remove the old node startNodeParent.removeChild(startNode); } else { // insert tagged sequences before the old node startNodeParent.insertBefore(taggedSpan, startNode); // replace the old node with a new node for the unmarked sequence startNodeParent.replaceChild(unmarkedStartSeq, startNode); } List<Node> affectedNodes = tw.getAffectedNodes(); DebugUtil.printNodes("affectedNodes", affectedNodes); // create and insert tagged sequences for all the affected text nodes for (int i = 1; i < affectedNodes.size() - 1; i++) { Node affectedNode = affectedNodes.get(i); // create the tagged span ... taggedSpan = spanFactory.createTaggedSpan(affectedNode.getNodeValue()); VConsole.log("affected Node and its taggedSpan:"); DebugUtil.printNode(affectedNode); DebugUtil.printNode(taggedSpan); // ... and insert it affectedNode.getParentNode().insertBefore(taggedSpan, affectedNode); // remove the old node affectedNode.getParentNode().removeChild(affectedNode); } // the unmarked text sequence of the last node Text unmarkedEndSeq = Document.get() .createTextNode(endNodeText.substring(unmarkedEndSeqBeginIdx, unmarkedEndSeqEndIdx)); // the tagged part of the last node taggedSpan = spanFactory.createTaggedSpan(endNodeText.substring(markedEndSeqBeginIdx, markedEndSeqEndIdx)); if (tw.isAfter()) { // insert tagged part endNodeParent.insertBefore(taggedSpan, endNode); // replace old node with a text node for the unmarked part endNodeParent.replaceChild(unmarkedEndSeq, endNode); } else { // insert unmarked part endNodeParent.insertBefore(unmarkedEndSeq, endNode); // insert tagged part endNodeParent.insertBefore(taggedSpan, endNode); // remove old node endNodeParent.removeChild(endNode); } }
From source file:jetbrains.jetpad.mapper.gwt.DomUtil.java
License:Apache License
public static List<Node> nodeChildren(final Node n) { return new AbstractList<Node>() { @Override// w ww. j ava 2 s.c o m public Node get(int index) { return n.getChild(index); } @Override public Node set(int index, Node element) { if (element.getParentElement() != null) { throw new IllegalStateException(); } Node child = get(index); n.replaceChild(child, element); return child; } @Override public void add(int index, Node element) { if (element.getParentElement() != null) { throw new IllegalStateException(); } if (index == 0) { n.insertFirst(element); } else { Node prev = n.getChild(index - 1); n.insertAfter(element, prev); } } @Override public Node remove(int index) { Node child = n.getChild(index); n.removeChild(child); return child; } @Override public int size() { return n.getChildCount(); } }; }
From source file:org.gk.ui.client.com.tree.gkTreePanelIC.java
License:Open Source License
@Override public void bindEvent() { core.subscribe(evtSetBean(), new EventProcess() { @Override/*w w w. j a va 2s . c o m*/ public void execute(String eventId, EventObject eo) { setBean(eo.getInfoString()); } }); // ? core.subscribe(evtOnEdit(), new EventProcess() { @Override public void execute(String eventId, EventObject e) { TreeNode tn = (TreeNode) e.getInfoMap() .get((tree.getSelectionModel().getSelectedItem().getProperties().get(PATH) + "")); // ?? final Node nd = tn.getElement().getChild(0); // ?inputelement final Element input = DOM.createElement("input"); // ?????span final Node childnd = nd.getLastChild(); // ?span final String oldString = childnd.getFirstChild().getNodeValue(); // ?input?span input.setAttribute("value", oldString); // inputID?? input.setAttribute("id", "newText"); // ?spanelement final Node oldNode = childnd.getFirstChild().cloneNode(true); // span???input? childnd.replaceChild(input, childnd.getFirstChild()); // ??? tree.disableTextSelection(false); // ??input input.focus(); // ?inputkeydown DOM.sinkEvents(input, com.google.gwt.user.client.Event.ONBLUR | com.google.gwt.user.client.Event.ONKEYDOWN | com.google.gwt.user.client.Event.ONMOUSEOVER | com.google.gwt.user.client.Event.ONMOUSEOUT); // ?inputenter? DOM.setEventListener(input, new EventListener() { // ?inputonblur boolean mouseIn = true; @Override public void onBrowserEvent(com.google.gwt.user.client.Event event) { if (event.getTypeInt() == com.google.gwt.user.client.Event.ONMOUSEOUT) { mouseIn = false; } if (event.getTypeInt() == com.google.gwt.user.client.Event.ONMOUSEOVER) { mouseIn = true; } if (event.getTypeInt() == com.google.gwt.user.client.Event.ONBLUR || event.getKeyCode() == KeyCodeEnter) { if (event.getKeyCode() == KeyCodeEnter || mouseIn == false) { // ?input String newString = getvalue(); // if (newString.equals("")) { input.setAttribute("value", oldString); } // span??input oldNode.setNodeValue(newString); // ?spaninput? childnd.replaceChild(oldNode, input); // ?treemodelDataap??? setModelData(newString, tree); inEdit = false; } } } }); } }); }
From source file:org.xwiki.gwt.wysiwyg.client.plugin.format.exec.RemoveFormatExecutable.java
License:Open Source License
/** * Moves the parent of the given child node before the specified top and replicates three times the ancestors up to * the top: once for the left siblings of the given child node, once the child node itself and once for the right * siblings of the given child node.//from w w w. ja v a 2 s. com * * @param top the ancestor before which the parent is moved * @param child the child node whose parent is moved before the top */ protected void reorder(Node top, Node child) { Node parent = child.getParentNode(); if (parent == null || parent == top) { return; } Node grandParent = parent.getParentNode(); if (grandParent == null) { return; } int index = domUtils.getNodeIndex(parent); grandParent.removeChild(parent); if (child.getPreviousSibling() != null) { Node left = top.cloneNode(true); Node leaf = domUtils.getLastLeaf(left); leaf.appendChild(child.getPreviousSibling()); while (child.getPreviousSibling() != null) { leaf.insertBefore(child.getPreviousSibling(), leaf.getFirstChild()); } parent.insertBefore(left, child); } if (child.getNextSibling() != null) { Node right = top.cloneNode(true); Node leaf = domUtils.getFirstLeaf(right); do { leaf.appendChild(child.getNextSibling()); } while (child.getNextSibling() != null); parent.appendChild(right); } top.getParentNode().replaceChild(parent, top); parent.replaceChild(top, child); domUtils.insertAt(grandParent, child, index); }