Example usage for com.google.gwt.dom.client Node replaceChild

List of usage examples for com.google.gwt.dom.client Node replaceChild

Introduction

In this page you can find the example usage for com.google.gwt.dom.client Node replaceChild.

Prototype

@Override
    public Node replaceChild(Node newChild, Node oldChild) 

Source Link

Usage

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);
}