documentimpl.java
来自「JAVA 所有包」· Java 代码 · 共 1,302 行 · 第 1/4 页
JAVA
1,302 行
if (type == Node.ATTRIBUTE_NODE) { EnclosingAttr retval = new EnclosingAttr(); retval.node = (AttrImpl) eventAncestor; retval.oldvalue = retval.node.getNodeValue(); savedEnclosingAttr = retval; return; } else if (type == Node.ENTITY_REFERENCE_NODE) eventAncestor = eventAncestor.parentNode(); else if (type == Node.TEXT_NODE) eventAncestor = eventAncestor.parentNode(); else return; // Any other parent means we're not in an Attr } } } // saveEnclosingAttr(NodeImpl) :void /** * A method to be called when a character data node has been modified */ void modifyingCharacterData(NodeImpl node, boolean replace) { if (mutationEvents) { if (!replace) { saveEnclosingAttr(node); } } } /** * A method to be called when a character data node has been modified */ void modifiedCharacterData(NodeImpl node, String oldvalue, String value, boolean replace) { if (mutationEvents) { if (!replace) { // MUTATION POST-EVENTS: LCount lc = LCount.lookup(MutationEventImpl.DOM_CHARACTER_DATA_MODIFIED); if (lc.total > 0) { MutationEvent me = new MutationEventImpl(); me.initMutationEvent( MutationEventImpl.DOM_CHARACTER_DATA_MODIFIED, true, false, null, oldvalue, value, null, (short) 0); dispatchEvent(node, me); } // Subroutine: Transmit DOMAttrModified and DOMSubtreeModified, // if required. (Common to most kinds of mutation) dispatchAggregateEvents(node, savedEnclosingAttr); } // End mutation postprocessing } } /** * A method to be called when a character data node has been replaced */ void replacedCharacterData(NodeImpl node, String oldvalue, String value) { //now that we have finished replacing data, we need to perform the same actions //that are required after a character data node has been modified //send the value of false for replace parameter so that mutation //events if appropriate will be initiated modifiedCharacterData(node, oldvalue, value, false); } /** * A method to be called when a node is about to be inserted in the tree. */ void insertingNode(NodeImpl node, boolean replace) { if (mutationEvents) { if (!replace) { saveEnclosingAttr(node); } } } /** * A method to be called when a node has been inserted in the tree. */ void insertedNode(NodeImpl node, NodeImpl newInternal, boolean replace) { if (mutationEvents) { // MUTATION POST-EVENTS: // "Local" events (non-aggregated) // New child is told it was inserted, and where LCount lc = LCount.lookup(MutationEventImpl.DOM_NODE_INSERTED); if (lc.total > 0) { MutationEventImpl me = new MutationEventImpl(); me.initMutationEvent(MutationEventImpl.DOM_NODE_INSERTED, true, false, node, null, null, null, (short) 0); dispatchEvent(newInternal, me); } // If within the Document, tell the subtree it's been added // to the Doc. lc = LCount.lookup( MutationEventImpl.DOM_NODE_INSERTED_INTO_DOCUMENT); if (lc.total > 0) { NodeImpl eventAncestor = node; if (savedEnclosingAttr != null) eventAncestor = (NodeImpl) savedEnclosingAttr.node.getOwnerElement(); if (eventAncestor != null) { // Might have been orphan Attr NodeImpl p = eventAncestor; while (p != null) { eventAncestor = p; // Last non-null ancestor // In this context, ancestry includes // walking back from Attr to Element if (p.getNodeType() == ATTRIBUTE_NODE) { p = (NodeImpl) ((AttrImpl)p).getOwnerElement(); } else { p = p.parentNode(); } } if (eventAncestor.getNodeType() == Node.DOCUMENT_NODE){ MutationEventImpl me = new MutationEventImpl(); me.initMutationEvent(MutationEventImpl .DOM_NODE_INSERTED_INTO_DOCUMENT, false,false,null,null, null,null,(short)0); dispatchEventToSubtree(newInternal, me); } } } if (!replace) { // Subroutine: Transmit DOMAttrModified and DOMSubtreeModified // (Common to most kinds of mutation) dispatchAggregateEvents(node, savedEnclosingAttr); } } // notify the range of insertions if (ranges != null) { int size = ranges.size(); for (int i = 0; i != size; i++) { ((RangeImpl)ranges.elementAt(i)).insertedNodeFromDOM(newInternal); } } } /** * A method to be called when a node is about to be removed from the tree. */ void removingNode(NodeImpl node, NodeImpl oldChild, boolean replace) { // notify iterators if (iterators != null) { int size = iterators.size(); for (int i = 0; i != size; i++) { ((NodeIteratorImpl)iterators.elementAt(i)).removeNode(oldChild); } } // notify ranges if (ranges != null) { int size = ranges.size(); for (int i = 0; i != size; i++) { ((RangeImpl)ranges.elementAt(i)).removeNode(oldChild); } } // mutation events if (mutationEvents) { // MUTATION PREPROCESSING AND PRE-EVENTS: // If we're within the scope of an Attr and DOMAttrModified // was requested, we need to preserve its previous value for // that event. if (!replace) { saveEnclosingAttr(node); } // Child is told that it is about to be removed LCount lc = LCount.lookup(MutationEventImpl.DOM_NODE_REMOVED); if (lc.total > 0) { MutationEventImpl me= new MutationEventImpl(); me.initMutationEvent(MutationEventImpl.DOM_NODE_REMOVED, true, false, node, null, null, null, (short) 0); dispatchEvent(oldChild, me); } // If within Document, child's subtree is informed that it's // losing that status lc = LCount.lookup( MutationEventImpl.DOM_NODE_REMOVED_FROM_DOCUMENT); if (lc.total > 0) { NodeImpl eventAncestor = this; if(savedEnclosingAttr != null) eventAncestor = (NodeImpl) savedEnclosingAttr.node.getOwnerElement(); if (eventAncestor != null) { // Might have been orphan Attr for (NodeImpl p = eventAncestor.parentNode(); p != null; p = p.parentNode()) { eventAncestor = p; // Last non-null ancestor } if (eventAncestor.getNodeType() == Node.DOCUMENT_NODE){ MutationEventImpl me = new MutationEventImpl(); me.initMutationEvent( MutationEventImpl.DOM_NODE_REMOVED_FROM_DOCUMENT, false, false, null, null, null, null, (short) 0); dispatchEventToSubtree(oldChild, me); } } } } // End mutation preprocessing } /** * A method to be called when a node has been removed from the tree. */ void removedNode(NodeImpl node, boolean replace) { if (mutationEvents) { // MUTATION POST-EVENTS: // Subroutine: Transmit DOMAttrModified and DOMSubtreeModified, // if required. (Common to most kinds of mutation) if (!replace) { dispatchAggregateEvents(node, savedEnclosingAttr); } } // End mutation postprocessing } /** * A method to be called when a node is about to be replaced in the tree. */ void replacingNode(NodeImpl node) { if (mutationEvents) { saveEnclosingAttr(node); } } /** * A method to be called when character data is about to be replaced in the tree. */ void replacingData (NodeImpl node) { if (mutationEvents) { saveEnclosingAttr(node); } } /** * A method to be called when a node has been replaced in the tree. */ void replacedNode(NodeImpl node) { if (mutationEvents) { dispatchAggregateEvents(node, savedEnclosingAttr); } } /** * A method to be called when an attribute value has been modified */ void modifiedAttrValue(AttrImpl attr, String oldvalue) { if (mutationEvents) { // MUTATION POST-EVENTS: dispatchAggregateEvents(attr, attr, oldvalue, MutationEvent.MODIFICATION); } } /** * A method to be called when an attribute node has been set */ void setAttrNode(AttrImpl attr, AttrImpl previous) { if (mutationEvents) { // MUTATION POST-EVENTS: if (previous == null) { dispatchAggregateEvents(attr.ownerNode, attr, null, MutationEvent.ADDITION); } else { dispatchAggregateEvents(attr.ownerNode, attr, previous.getNodeValue(), MutationEvent.MODIFICATION); } } } /** * A method to be called when an attribute node has been removed */ void removedAttrNode(AttrImpl attr, NodeImpl oldOwner, String name) { // We can't use the standard dispatchAggregate, since it assumes // that the Attr is still attached to an owner. This code is // similar but dispatches to the previous owner, "element". if (mutationEvents) { // If we have to send DOMAttrModified (determined earlier), // do so. LCount lc = LCount.lookup(MutationEventImpl.DOM_ATTR_MODIFIED); if (lc.total > 0) { MutationEventImpl me= new MutationEventImpl(); me.initMutationEvent(MutationEventImpl.DOM_ATTR_MODIFIED, true, false, attr, attr.getNodeValue(), null, name, MutationEvent.REMOVAL); dispatchEvent(oldOwner, me); } // We can hand off to process DOMSubtreeModified, though. // Note that only the Element needs to be informed; the // Attr's subtree has not been changed by this operation. dispatchAggregateEvents(oldOwner, null, null, (short) 0); } } /** * A method to be called when an attribute node has been renamed */ void renamedAttrNode(Attr oldAt, Attr newAt) { // REVISIT: To be implemented!!! } /** * A method to be called when an element has been renamed */ void renamedElement(Element oldEl, Element newEl) { // REVISIT: To be implemented!!! }} // class DocumentImpl
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?